tests: replace pycodestyle with black 43/36043/15
authorKlement Sekera <klement.sekera@gmail.com>
Tue, 26 Apr 2022 17:02:15 +0000 (19:02 +0200)
committerOle Tr�an <otroan@employees.org>
Tue, 10 May 2022 18:52:08 +0000 (18:52 +0000)
Drop pycodestyle for code style checking in favor of black. Black is
much faster, stable PEP8 compliant code style checker offering also
automatic formatting. It aims to be very stable and produce smallest
diffs. It's used by many small and big projects.

Running checkstyle with black takes a few seconds with a terse output.
Thus, test-checkstyle-diff is no longer necessary.

Expand scope of checkstyle to all python files in the repo, replacing
test-checkstyle with checkstyle-python.

Also, fixstyle-python is now available for automatic style formatting.

Note: python virtualenv has been consolidated in test/Makefile,
test/requirements*.txt which will eventually be moved to a central
location.  This is required to simply the automated generation of
docker executor images in the CI.

Type: improvement
Change-Id: I022a326603485f58585e879ac0f697fceefbc9c8
Signed-off-by: Klement Sekera <klement.sekera@gmail.com>
Signed-off-by: Dave Wallace <dwallacelf@gmail.com>
268 files changed:
Makefile
docs/_scripts/filter_api.py
docs/_scripts/filter_c.py
docs/_scripts/filter_h.py
docs/_scripts/includes_renderer.py
docs/_scripts/siphon/generate.py
docs/_scripts/siphon/generate_clicmd.py
docs/_scripts/siphon/generate_syscfg.py
docs/_scripts/siphon/parsers.py
docs/_scripts/siphon/process.py
docs/_scripts/siphon/process_clicmd.py
docs/conf.py
extras/deprecated/perfmon/intel_json_to_c.py
extras/deprecated/plugins/gbp/test_gbp.py
extras/deprecated/vnet/vxlan-gbp/test_vxlan_gbp.py
extras/deprecated/vnet/vxlan-gbp/vpp_vxlan_gbp_tunnel.py
extras/deprecated/vom/test/test_vom.py
extras/scripts/crcchecker.py
extras/scripts/list_api_changes.py
extras/vpp_config/scripts/dpdk-devbind.py
extras/vpp_config/setup.py
extras/vpp_config/vpp_config.py
extras/vpp_config/vpplib/AutoConfig.py
extras/vpp_config/vpplib/CpuUtils.py
extras/vpp_config/vpplib/QemuUtils.py
extras/vpp_config/vpplib/VPPUtil.py
extras/vpp_config/vpplib/VppGrubUtil.py
extras/vpp_config/vpplib/VppHugePageUtil.py
extras/vpp_config/vpplib/VppPCIUtil.py
extras/vpp_config/vpplib/constants.py
src/plugins/map/examples/gen-rules.py
src/plugins/map/examples/test_map.py
src/plugins/map/gen-rules.py
src/plugins/nat/extras/nat_100ks.py
src/plugins/nat/extras/nat_10Ms.py
src/plugins/nat/extras/nat_10ks.py
src/plugins/nat/extras/nat_1Ms.py
src/plugins/nat/extras/nat_out2in_100ks.py
src/plugins/nat/extras/nat_out2in_10Ms.py
src/plugins/nat/extras/nat_out2in_10ks.py
src/plugins/nat/extras/nat_out2in_1Ms.py
src/plugins/nat/extras/nat_ses_open.py
src/plugins/nat/extras/nat_static_gen_cfg.py
src/plugins/nat/extras/nat_test_fast_path.py
src/plugins/nat/extras/nat_test_slow_path.py
src/plugins/nat/extras/nat_test_slow_path_with_latency.py
src/plugins/nat/pnat/tests/test_genpackets.py
src/plugins/srv6-mobile/extra/runner.py
src/scripts/fts.py
src/scripts/host-stack/cc_plots.py
src/scripts/vnet/uri/dummy_app.py
src/tools/vppapigen/generate_go.py
src/tools/vppapigen/generate_json.py
src/tools/vppapigen/test_vppapigen.py
src/tools/vppapigen/vppapigen.py
src/tools/vppapigen/vppapigen_c.py
src/tools/vppapigen/vppapigen_crc.py
src/tools/vppapigen/vppapigen_json.py
src/vpp-api/python/setup.py
src/vpp-api/python/vpp_papi/__init__.py
src/vpp-api/python/vpp_papi/macaddress.py
src/vpp-api/python/vpp_papi/tests/test_macaddress.py
src/vpp-api/python/vpp_papi/tests/test_vpp_format.py
src/vpp-api/python/vpp_papi/tests/test_vpp_papi.py
src/vpp-api/python/vpp_papi/tests/test_vpp_serializer.py
src/vpp-api/python/vpp_papi/vpp_format.py
src/vpp-api/python/vpp_papi/vpp_papi.py
src/vpp-api/python/vpp_papi/vpp_serializer.py
src/vpp-api/python/vpp_papi/vpp_stats.py
src/vpp-api/python/vpp_papi/vpp_transport_socket.py
src/vpp-api/vapi/vapi_c_gen.py
src/vpp-api/vapi/vapi_cpp_gen.py
src/vpp-api/vapi/vapi_json_parser.py
test/Makefile
test/bfd.py
test/config.py
test/debug.py
test/debug_internal.py
test/framework.py
test/hook.py
test/ipfix.py
test/lisp.py
test/log.py
test/remote_test.py
test/requirements-3.txt
test/requirements.txt
test/run_tests.py
test/sanity_run_vpp.py
test/template_bd.py
test/template_classifier.py
test/template_ipsec.py
test/test_abf.py
test/test_acl_plugin.py
test/test_acl_plugin_conns.py
test/test_acl_plugin_l2l3.py
test/test_acl_plugin_macip.py
test/test_adl.py
test/test_api_client.py
test/test_api_trace.py
test/test_arping.py
test/test_bfd.py
test/test_bier.py
test/test_bihash.py
test/test_bond.py
test/test_buffers.py
test/test_cdp.py
test/test_classifier.py
test/test_classifier_ip6.py
test/test_classify_l2_acl.py
test/test_cli.py
test/test_cnat.py
test/test_container.py
test/test_counters.py
test/test_crypto.py
test/test_det44.py
test/test_dhcp.py
test/test_dhcp6.py
test/test_dns.py
test/test_dslite.py
test/test_dvr.py
test/test_endian.py
test/test_fib.py
test/test_flowprobe.py
test/test_geneve.py
test/test_gre.py
test/test_gro.py
test/test_gso.py
test/test_gtpu.py
test/test_http.py
test/test_igmp.py
test/test_ikev2.py
test/test_interface_crud.py
test/test_ip4.py
test/test_ip4_irb.py
test/test_ip4_vrf_multi_instance.py
test/test_ip6.py
test/test_ip6_nd_mirror_proxy.py
test/test_ip6_vrf_multi_instance.py
test/test_ip_ecmp.py
test/test_ip_mcast.py
test/test_ipfix_export.py
test/test_ipip.py
test/test_ipsec_ah.py
test/test_ipsec_api.py
test/test_ipsec_default.py
test/test_ipsec_esp.py
test/test_ipsec_nat.py
test/test_ipsec_spd_flow_cache_input.py
test/test_ipsec_spd_flow_cache_output.py
test/test_ipsec_tun_if_esp.py
test/test_l2_fib.py
test/test_l2_flood.py
test/test_l2bd.py
test/test_l2bd_arp_term.py
test/test_l2bd_learnlimit.py
test/test_l2bd_learnlimit_bdenabled.py
test/test_l2bd_learnlimit_enabled.py
test/test_l2bd_multi_instance.py
test/test_l2tp.py
test/test_l2xc.py
test/test_l2xc_multi_instance.py
test/test_l3xc.py
test/test_lacp.py
test/test_lb.py
test/test_lb_api.py
test/test_linux_cp.py
test/test_lisp.py
test/test_mactime.py
test/test_map.py
test/test_map_br.py
test/test_memif.py
test/test_mpcap.py
test/test_mpls.py
test/test_mss_clamp.py
test/test_mtu.py
test/test_nat44_ed.py
test/test_nat44_ed_output.py
test/test_nat44_ei.py
test/test_nat64.py
test/test_nat66.py
test/test_neighbor.py
test/test_node_variants.py
test/test_offload.py
test/test_p2p_ethernet.py
test/test_pcap.py
test/test_pg.py
test/test_ping.py
test/test_pipe.py
test/test_pnat.py
test/test_policer.py
test/test_policer_input.py
test/test_pppoe.py
test/test_punt.py
test/test_qos.py
test/test_quic.py
test/test_reassembly.py
test/test_session.py
test/test_sixrd.py
test/test_span.py
test/test_sparse_vec.py
test/test_srmpls.py
test/test_srv6.py
test/test_srv6_ad.py
test/test_srv6_ad_flow.py
test/test_srv6_as.py
test/test_srv6_mobile.py
test/test_srv6_un.py
test/test_stats_client.py
test/test_string.py
test/test_svs.py
test/test_syslog.py
test/test_tap.py
test/test_tcp.py
test/test_tls.py
test/test_trace_filter.py
test/test_udp.py
test/test_urpf.py
test/test_util.py
test/test_vapi.py
test/test_vcl.py
test/test_vhost.py
test/test_vlib.py
test/test_vpe_api.py
test/test_vppinfra.py
test/test_vrrp.py
test/test_vtr.py
test/test_vxlan.py
test/test_vxlan6.py
test/test_vxlan_gpe.py
test/test_wireguard.py
test/util.py
test/vpp_acl.py
test/vpp_bier.py
test/vpp_bond_interface.py
test/vpp_bvi_interface.py
test/vpp_devices.py
test/vpp_dhcp.py
test/vpp_gre_interface.py
test/vpp_igmp.py
test/vpp_ikev2.py
test/vpp_interface.py
test/vpp_ip.py
test/vpp_ip_route.py
test/vpp_ipip_tun_interface.py
test/vpp_ipsec.py
test/vpp_l2.py
test/vpp_lb.py
test/vpp_lo_interface.py
test/vpp_memif.py
test/vpp_mpls_tunnel_interface.py
test/vpp_neighbor.py
test/vpp_object.py
test/vpp_papi_exceptions.py
test/vpp_papi_provider.py
test/vpp_pg_interface.py
test/vpp_policer.py
test/vpp_pppoe_interface.py
test/vpp_qos.py
test/vpp_srv6.py
test/vpp_sub_interface.py
test/vpp_teib.py
test/vpp_tunnel_interface.py
test/vpp_udp_decap.py
test/vpp_udp_encap.py
test/vpp_vhost_interface.py
test/vpp_vxlan_gpe_tunnel.py
test/vpp_vxlan_tunnel.py
test/vrf.py

index edadf8a..609a174 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -232,10 +232,10 @@ help:
        @echo " compdb               - (re)generate compile_commands.json"
        @echo " checkstyle           - check coding style"
        @echo " checkstyle-commit    - check commit message format"
        @echo " compdb               - (re)generate compile_commands.json"
        @echo " checkstyle           - check coding style"
        @echo " checkstyle-commit    - check commit message format"
-       @echo " checkstyle-test      - check test framework coding style"
-       @echo " checkstyle-test-diff - check test framework coding style (only changed files)"
+       @echo " checkstyle-python    - check python coding style using 'black' formatter"
        @echo " checkstyle-api       - check api for incompatible changes"
        @echo " fixstyle             - fix coding style"
        @echo " checkstyle-api       - check api for incompatible changes"
        @echo " fixstyle             - fix coding style"
+       @echo " fixstyle-python      - fix python coding style using 'black' formatter"
        @echo " doxygen              - DEPRECATED - use 'make docs'"
        @echo " bootstrap-doxygen    - DEPRECATED"
        @echo " wipe-doxygen         - DEPRECATED"
        @echo " doxygen              - DEPRECATED - use 'make docs'"
        @echo " bootstrap-doxygen    - DEPRECATED"
        @echo " wipe-doxygen         - DEPRECATED"
@@ -501,13 +501,17 @@ test-wipe-cov:
 test-wipe-all:
        @make -C test wipe-all
 
 test-wipe-all:
        @make -C test wipe-all
 
+# Note: All python venv consolidated in test/Makefile, test/requirements*.txt
 .PHONY: test-checkstyle
 test-checkstyle:
 .PHONY: test-checkstyle
 test-checkstyle:
-       @make -C test checkstyle
+       $(warning test-checkstyle is deprecated. Running checkstyle-python.")
+       @make -C test checkstyle-python-all
 
 
+# Note: All python venv consolidated in test/Makefile, test/requirements*.txt
 .PHONY: test-checkstyle-diff
 test-checkstyle-diff:
 .PHONY: test-checkstyle-diff
 test-checkstyle-diff:
-       @make -C test checkstyle-diff
+       $(warning test-checkstyle-diff is deprecated. Running checkstyle-python.")
+       @make -C test checkstyle-python-all
 
 .PHONY: test-refresh-deps
 test-refresh-deps:
 
 .PHONY: test-refresh-deps
 test-refresh-deps:
@@ -664,15 +668,27 @@ checkstyle-commit:
        @extras/scripts/check_commit_msg.sh
 
 .PHONY: checkstyle-test
        @extras/scripts/check_commit_msg.sh
 
 .PHONY: checkstyle-test
-checkstyle-test: test-checkstyle
+checkstyle-test:
+       $(warning test-checkstyle is deprecated. Running checkstyle-python.")
+       @make -C test checkstyle-python-all
+
+# Note: All python venv consolidated in test/Makefile, test/requirements*.txt
+.PHONY: checkstyle-python
+checkstyle-python:
+       @make -C test checkstyle-python-all
 
 .PHONY: checkstyle-all
 
 .PHONY: checkstyle-all
-checkstyle-all: checkstyle-commit checkstyle checkstyle-test
+checkstyle-all: checkstyle-commit checkstyle checkstyle-python
 
 .PHONY: fixstyle
 fixstyle:
        @extras/scripts/checkstyle.sh --fix
 
 
 .PHONY: fixstyle
 fixstyle:
        @extras/scripts/checkstyle.sh --fix
 
+# Note: All python venv consolidated in test/Makefile, test/requirements*.txt
+.PHONY: fixstyle-python
+fixstyle-python:
+       @make -C test fixstyle-python-all
+
 .PHONY: checkstyle-api
 checkstyle-api:
        @extras/scripts/crcchecker.py --check-patchset
 .PHONY: checkstyle-api
 checkstyle-api:
        @extras/scripts/crcchecker.py --check-patchset
index 4848814..e22bc5e 100755 (executable)
@@ -24,9 +24,10 @@ if len(sys.argv) < 2:
 
 patterns = [
     # Search for "define" blocks and treat them as structs
 
 patterns = [
     # Search for "define" blocks and treat them as structs
-    (re.compile(r"^.*(manual_.[^\s]+\s+)?define\s+(?P<name>[^\s]+)"),
-     r"typedef struct vl_api_\g<name>_t"),
-
+    (
+        re.compile(r"^.*(manual_.[^\s]+\s+)?define\s+(?P<name>[^\s]+)"),
+        r"typedef struct vl_api_\g<name>_t",
+    ),
     # For every "brief" statement at the start of a comment block, add an
     # xref with whatever is on the same line. This gives us an index page
     # with all the API methods in one place.
     # For every "brief" statement at the start of a comment block, add an
     # xref with whatever is on the same line. This gives us an index page
     # with all the API methods in one place.
@@ -36,14 +37,13 @@ patterns = [
     #  r'/** @xrefitem api "" "VPP API" \g<c> \g<b> \g<c>'),  # capture inline comment close
     # (re.compile(r"/\*\*\s*(?P<b>[\\@]brief)\s+(?P<c>.+)$"),
     #  r'/** @xrefitem api "" "VPP API" \g<c> \g<b> \g<c>'),
     #  r'/** @xrefitem api "" "VPP API" \g<c> \g<b> \g<c>'),  # capture inline comment close
     # (re.compile(r"/\*\*\s*(?P<b>[\\@]brief)\s+(?P<c>.+)$"),
     #  r'/** @xrefitem api "" "VPP API" \g<c> \g<b> \g<c>'),
-
     # Since structs don't have params, replace @param with @tparam
     # Since structs don't have params, replace @param with @tparam
-    ( re.compile("[\\@]param\\b"), "@tparam"),
+    (re.compile("[\\@]param\\b"), "@tparam"),
 ]
 
 with open(sys.argv[1]) as fd:
     for line in fd:
 ]
 
 with open(sys.argv[1]) as fd:
     for line in fd:
-        str = line[:-1] # strip \n
+        str = line[:-1]  # strip \n
         for p in patterns:
             str = p[0].sub(p[1], str)
         for p in patterns:
             str = p[0].sub(p[1], str)
-        sys.stdout.write(str+"\n")
+        sys.stdout.write(str + "\n")
index 897f9f6..d3e7ee3 100755 (executable)
@@ -23,51 +23,82 @@ if len(sys.argv) < 2:
 
 replace_patterns = [
     # Search for VLIB_CLI_COMMAND, extract its parameters and add a docblock for it
 
 replace_patterns = [
     # Search for VLIB_CLI_COMMAND, extract its parameters and add a docblock for it
-    ( re.compile("(?P<m>VLIB_CLI_COMMAND)\s*[(](?P<name>[a-zA-Z0-9_]+)[)]"),
-        r"/** @brief (@em constructor) \g<m> (\g<name>) */ vlib_cli_command_t \g<name>"),
-    ( re.compile("(?P<m>VLIB_CLI_COMMAND)\s*[(](?P<name>[a-zA-Z0-9_]+),\s*(?P<qual>[^)]*)[)]"),
-        r"/** @brief (@em constructor) \g<m> (\g<name>) */ \g<qual> vlib_cli_command_t \g<name>"),
-
+    (
+        re.compile("(?P<m>VLIB_CLI_COMMAND)\s*[(](?P<name>[a-zA-Z0-9_]+)[)]"),
+        r"/** @brief (@em constructor) \g<m> (\g<name>) */ vlib_cli_command_t \g<name>",
+    ),
+    (
+        re.compile(
+            "(?P<m>VLIB_CLI_COMMAND)\s*[(](?P<name>[a-zA-Z0-9_]+),\s*(?P<qual>[^)]*)[)]"
+        ),
+        r"/** @brief (@em constructor) \g<m> (\g<name>) */ \g<qual> vlib_cli_command_t \g<name>",
+    ),
     # Search for VLIB_REGISTER_NODE, extract its parameters and add a docblock for it
     # Search for VLIB_REGISTER_NODE, extract its parameters and add a docblock for it
-    ( re.compile("(?P<m>VLIB_REGISTER_NODE)\s*[(](?P<name>[a-zA-Z0-9_]+)[)]"),
-        r"/** @brief (@em constructor) \g<m> (\g<name>) */ vlib_node_registration_t \g<name>"),
-    ( re.compile("(?P<m>VLIB_REGISTER_NODE)\s*[(](?P<name>[a-zA-Z0-9_]+),\s*(?P<qual>[^)]*)[)]"),
-        r"/** @brief (@em constructor) \g<m> (\g<name>) */ \g<qual> vlib_node_registration_t \g<name>"),
-
+    (
+        re.compile("(?P<m>VLIB_REGISTER_NODE)\s*[(](?P<name>[a-zA-Z0-9_]+)[)]"),
+        r"/** @brief (@em constructor) \g<m> (\g<name>) */ vlib_node_registration_t \g<name>",
+    ),
+    (
+        re.compile(
+            "(?P<m>VLIB_REGISTER_NODE)\s*[(](?P<name>[a-zA-Z0-9_]+),\s*(?P<qual>[^)]*)[)]"
+        ),
+        r"/** @brief (@em constructor) \g<m> (\g<name>) */ \g<qual> vlib_node_registration_t \g<name>",
+    ),
     # Search for VLIB_INIT_FUNCTION, extract its parameter and add a docblock for it
     # Search for VLIB_INIT_FUNCTION, extract its parameter and add a docblock for it
-    ( re.compile("(?P<m>VLIB_INIT_FUNCTION)\s*[(](?P<name>[a-zA-Z0-9_]+)[)]"),
-        r"/** @brief (@em constructor) \g<m> (@ref \g<name>) */ vlib_init_function_t * _vlib_init_function_\g<name>"),
-    ( re.compile("(?P<m>VLIB_DECLARE_INIT_FUNCTION)\s*[(](?P<name>[a-zA-Z0-9_]+)[)]"),
-        r"/** @brief (@em constructor) \g<m> (@ref \g<name>) */ vlib_init_function_t * _vlib_init_function_\g<name>"),
-
+    (
+        re.compile("(?P<m>VLIB_INIT_FUNCTION)\s*[(](?P<name>[a-zA-Z0-9_]+)[)]"),
+        r"/** @brief (@em constructor) \g<m> (@ref \g<name>) */ vlib_init_function_t * _vlib_init_function_\g<name>",
+    ),
+    (
+        re.compile("(?P<m>VLIB_DECLARE_INIT_FUNCTION)\s*[(](?P<name>[a-zA-Z0-9_]+)[)]"),
+        r"/** @brief (@em constructor) \g<m> (@ref \g<name>) */ vlib_init_function_t * _vlib_init_function_\g<name>",
+    ),
     # Search for VLIB_LOOP_ENTER_FUNCTION, extract the parameters and add a docblock for it
     # Search for VLIB_LOOP_ENTER_FUNCTION, extract the parameters and add a docblock for it
-    ( re.compile("(?P<m>VLIB_MAIN_LOOP_ENTER_FUNCTION)\s*[(](?P<name>[a-zA-Z0-9_]+)(,[^)]*)?[)]"),
-        r"/** @brief (@em constructor) \g<m> (@ref \g<name>) */ _vlib_main_loop_enter_\g<name>"),
-    ( re.compile("(?P<m>VLIB_MAIN_LOOP_EXIT_FUNCTION)\s*[(](?P<name>[a-zA-Z0-9_]+)(,[^)]*)?[)]"),
-        r"/** @brief (@em constructor) \g<m> (@ref \g<name>) */ _vlib_main_loop_exit_\g<name>"),
-
+    (
+        re.compile(
+            "(?P<m>VLIB_MAIN_LOOP_ENTER_FUNCTION)\s*[(](?P<name>[a-zA-Z0-9_]+)(,[^)]*)?[)]"
+        ),
+        r"/** @brief (@em constructor) \g<m> (@ref \g<name>) */ _vlib_main_loop_enter_\g<name>",
+    ),
+    (
+        re.compile(
+            "(?P<m>VLIB_MAIN_LOOP_EXIT_FUNCTION)\s*[(](?P<name>[a-zA-Z0-9_]+)(,[^)]*)?[)]"
+        ),
+        r"/** @brief (@em constructor) \g<m> (@ref \g<name>) */ _vlib_main_loop_exit_\g<name>",
+    ),
     # Search for VLIB_CONFIG_FUNCTION, extract the parameters and add a docblock for it
     # Search for VLIB_CONFIG_FUNCTION, extract the parameters and add a docblock for it
-    ( re.compile("(?P<m>VLIB_CONFIG_FUNCTION)\s*[(](?P<name>[a-zA-Z0-9_]+),\s*(?P<n>\"[^\"]+\")(,[^)]*)?[)]"),
-        r"/** @brief (@em constructor) \g<m> (\g<name>, \g<n>) */ vlib_config_function_runtime_t _vlib_config_function_\g<name>"),
-    ( re.compile("(?P<m>VLIB_EARLY_CONFIG_FUNCTION)\s*[(](?P<name>[a-zA-Z0-9_]+),\s*(?P<n>\"[^\"]+\")(,[^)]*)?[)]"),
-        r"/** @brief (@em constructor) \g<m> (\g<name>, \g<n>) */ vlib_config_function_runtime_t _vlib_config_function_\g<name>"),
-
+    (
+        re.compile(
+            '(?P<m>VLIB_CONFIG_FUNCTION)\s*[(](?P<name>[a-zA-Z0-9_]+),\s*(?P<n>"[^"]+")(,[^)]*)?[)]'
+        ),
+        r"/** @brief (@em constructor) \g<m> (\g<name>, \g<n>) */ vlib_config_function_runtime_t _vlib_config_function_\g<name>",
+    ),
+    (
+        re.compile(
+            '(?P<m>VLIB_EARLY_CONFIG_FUNCTION)\s*[(](?P<name>[a-zA-Z0-9_]+),\s*(?P<n>"[^"]+")(,[^)]*)?[)]'
+        ),
+        r"/** @brief (@em constructor) \g<m> (\g<name>, \g<n>) */ vlib_config_function_runtime_t _vlib_config_function_\g<name>",
+    ),
     # Search for "format_thing" and "unformat_thing" when used as a function pointer and add parens
     # Search for "format_thing" and "unformat_thing" when used as a function pointer and add parens
-    ( re.compile("(?P<pre>(^|,)\s*)(?P<name>(un)?format_[a-zA-Z0-9_]+)(?P<post>\s*(,|$))"),
-        r"\g<pre>\g<name>()\g<post>" ),
-
+    (
+        re.compile(
+            "(?P<pre>(^|,)\s*)(?P<name>(un)?format_[a-zA-Z0-9_]+)(?P<post>\s*(,|$))"
+        ),
+        r"\g<pre>\g<name>()\g<post>",
+    ),
     # Search for CLIB_PAD_FROM_TO(...); and replace with padding
     # #define CLIB_PAD_FROM_TO(from,to) u8 pad_##from[(to) - (from)]
     # Search for CLIB_PAD_FROM_TO(...); and replace with padding
     # #define CLIB_PAD_FROM_TO(from,to) u8 pad_##from[(to) - (from)]
-    ( re.compile("(?P<m>CLIB_PAD_FROM_TO)\s*[(](?P<from>[^,]+),\s*(?P<to>[^)]+)[)]"),
-        r"/** Padding. */ u8 pad_\g<from>[(\g<to>) - (\g<from>)]" ),
-
+    (
+        re.compile("(?P<m>CLIB_PAD_FROM_TO)\s*[(](?P<from>[^,]+),\s*(?P<to>[^)]+)[)]"),
+        r"/** Padding. */ u8 pad_\g<from>[(\g<to>) - (\g<from>)]",
+    ),
 ]
 
 
 filename = sys.argv[1]
 cwd = os.getcwd()
 ]
 
 
 filename = sys.argv[1]
 cwd = os.getcwd()
-if filename[0:len(cwd)] == cwd:
-    filename = filename[len(cwd):]
+if filename[0 : len(cwd)] == cwd:
+    filename = filename[len(cwd) :]
     if filename[0] == "/":
         filename = filename[1:]
 
     if filename[0] == "/":
         filename = filename[1:]
 
@@ -76,12 +107,12 @@ with open(filename) as fd:
 
     for line in fd:
         line_num += 1
 
     for line in fd:
         line_num += 1
-        str = line[:-1] # filter \n
+        str = line[:-1]  # filter \n
 
         # Look for search/replace patterns
         for p in replace_patterns:
             str = p[0].sub(p[1], str)
 
 
         # Look for search/replace patterns
         for p in replace_patterns:
             str = p[0].sub(p[1], str)
 
-        sys.stdout.write(str+"\n")
+        sys.stdout.write(str + "\n")
 
 # All done
 
 # All done
index 0891fa7..31c4c51 100755 (executable)
@@ -26,17 +26,19 @@ if len(sys.argv) < 2:
 replace_patterns = [
     # Search for CLIB_PAD_FROM_TO(...); and replace with padding
     # #define CLIB_PAD_FROM_TO(from,to) u8 pad_##from[(to) - (from)]
 replace_patterns = [
     # Search for CLIB_PAD_FROM_TO(...); and replace with padding
     # #define CLIB_PAD_FROM_TO(from,to) u8 pad_##from[(to) - (from)]
-    (re.compile(r"(?P<m>CLIB_PAD_FROM_TO)\s*[(](?P<from>[^,]+),"
-                r"\s*(?P<to>[^)]+)[)]"),
-     r"/** Padding. */ u8 pad_\g<from>[(\g<to>) - (\g<from>)]"),
-
+    (
+        re.compile(
+            r"(?P<m>CLIB_PAD_FROM_TO)\s*[(](?P<from>[^,]+)," r"\s*(?P<to>[^)]+)[)]"
+        ),
+        r"/** Padding. */ u8 pad_\g<from>[(\g<to>) - (\g<from>)]",
+    ),
 ]
 
 
 filename = sys.argv[1]
 cwd = os.getcwd()
 ]
 
 
 filename = sys.argv[1]
 cwd = os.getcwd()
-if filename[0:len(cwd)] == cwd:
-    filename = filename[len(cwd):]
+if filename[0 : len(cwd)] == cwd:
+    filename = filename[len(cwd) :]
     if filename[0] == "/":
         filename = filename[1:]
 
     if filename[0] == "/":
         filename = filename[1:]
 
@@ -51,6 +53,6 @@ with open(filename) as fd:
         for p in replace_patterns:
             str = p[0].sub(p[1], str)
 
         for p in replace_patterns:
             str = p[0].sub(p[1], str)
 
-        sys.stdout.write(str+"\n")
+        sys.stdout.write(str + "\n")
 
 # All done
 
 # All done
index 6bd501d..a2d422b 100644 (file)
@@ -33,15 +33,14 @@ class ContentRenderer:
 
 
 class PluginRenderer(ContentRenderer):
 
 
 class PluginRenderer(ContentRenderer):
-
     def _render_entry(self, output_file, entry):
         description = "<no-description-found>"
         # we use glob because a plugin can (ioam for now)
         # define the plugin definition in
         # a further subdirectory.
     def _render_entry(self, output_file, entry):
         description = "<no-description-found>"
         # we use glob because a plugin can (ioam for now)
         # define the plugin definition in
         # a further subdirectory.
-        path = os.path.join(self.plugin_dir(), entry.name, '**')
+        path = os.path.join(self.plugin_dir(), entry.name, "**")
         for f in glob.iglob(path, recursive=True):
         for f in glob.iglob(path, recursive=True):
-            if not f.endswith('.c'):
+            if not f.endswith(".c"):
                 continue
             with open(f, "r", encoding="utf-8") as src:
                 for match in self.regex.finditer(src.read()):
                 continue
             with open(f, "r", encoding="utf-8") as src:
                 for match in self.regex.finditer(src.read()):
@@ -56,7 +55,7 @@ class PluginRenderer(ContentRenderer):
         with open(fname, "w") as output_file:
             with os.scandir(self.plugin_dir()) as pdir:
                 for entry in sorted(pdir, key=lambda entry: entry.name):
         with open(fname, "w") as output_file:
             with os.scandir(self.plugin_dir()) as pdir:
                 for entry in sorted(pdir, key=lambda entry: entry.name):
-                    if not entry.name.startswith('.') and entry.is_dir():
+                    if not entry.name.startswith(".") and entry.is_dir():
                         self._render_entry(output_file, entry)
 
 
                         self._render_entry(output_file, entry)
 
 
index 2ae5a1b..1244c46 100644 (file)
@@ -24,8 +24,10 @@ import re
    themselves on this list."""
 siphon_patterns = []
 
    themselves on this list."""
 siphon_patterns = []
 
+
 class Generate(object):
     """Matches a siphon comment block start"""
 class Generate(object):
     """Matches a siphon comment block start"""
+
     siphon_block_start = re.compile("^\s*/\*\?\s*(.*)$")
 
     """Matches a siphon comment block stop"""
     siphon_block_start = re.compile("^\s*/\*\?\s*(.*)$")
 
     """Matches a siphon comment block stop"""
@@ -36,8 +38,10 @@ class Generate(object):
 
     """Matches a siphon block directive such as
        '%clicmd:group_label Debug CLI%'"""
 
     """Matches a siphon block directive such as
        '%clicmd:group_label Debug CLI%'"""
-    siphon_block_directive = re.compile("(%s)\s*([a-zA-Z0-9_:]+)\s+(.*)\s*(%s)" % \
-            (siphon_block_delimiter, siphon_block_delimiter))
+    siphon_block_directive = re.compile(
+        "(%s)\s*([a-zA-Z0-9_:]+)\s+(.*)\s*(%s)"
+        % (siphon_block_delimiter, siphon_block_delimiter)
+    )
 
     """Matches the start of an initializer block"""
     siphon_initializer = re.compile("\s*=")
 
     """Matches the start of an initializer block"""
     siphon_initializer = re.compile("\s*=")
@@ -54,7 +58,6 @@ class Generate(object):
     """Logging handler"""
     log = None
 
     """Logging handler"""
     log = None
 
-
     def __init__(self, output_directory, input_prefix):
         super(Generate, self).__init__()
         self.log = logging.getLogger("siphon.generate")
     def __init__(self, output_directory, input_prefix):
         super(Generate, self).__init__()
         self.log = logging.getLogger("siphon.generate")
@@ -70,14 +73,13 @@ class Generate(object):
         self.output = {}
         for siphon in self.known_siphons:
             self.output[siphon] = {
         self.output = {}
         for siphon in self.known_siphons:
             self.output[siphon] = {
-                    "file": "%s/%s.siphon" % (output_directory, siphon),
-                    "global": {},
-                    "items": [],
-                }
+                "file": "%s/%s.siphon" % (output_directory, siphon),
+                "global": {},
+                "items": [],
+            }
 
         self.input_prefix = input_prefix
 
 
         self.input_prefix = input_prefix
 
-
     """
     count open and close braces in str
     return (0, index) when braces were found and count becomes 0.
     """
     count open and close braces in str
     return (0, index) when braces were found and count becomes 0.
@@ -87,16 +89,17 @@ class Generate(object):
     return (count, -1) if not all opening braces are closed, count is the
     current depth
     """
     return (count, -1) if not all opening braces are closed, count is the
     current depth
     """
+
     def count_braces(self, str, count=0, found=False):
         for index in range(0, len(str)):
     def count_braces(self, str, count=0, found=False):
         for index in range(0, len(str)):
-            if str[index] == '{':
-                count += 1;
+            if str[index] == "{":
+                count += 1
                 found = True
                 found = True
-            elif str[index] == '}':
+            elif str[index] == "}":
                 if count == 0:
                     # means we never found an open brace
                     return (-1, -1)
                 if count == 0:
                     # means we never found an open brace
                     return (-1, -1)
-                count -= 1;
+                count -= 1
 
             if count == 0 and found:
                 return (count, index)
 
             if count == 0 and found:
                 return (count, index)
@@ -106,8 +109,8 @@ class Generate(object):
     def parse(self, filename):
         # Strip the current directory off the start of the
         # filename for brevity
     def parse(self, filename):
         # Strip the current directory off the start of the
         # filename for brevity
-        if filename[0:len(self.input_prefix)] == self.input_prefix:
-            filename = filename[len(self.input_prefix):]
+        if filename[0 : len(self.input_prefix)] == self.input_prefix:
+            filename = filename[len(self.input_prefix) :]
             if filename[0] == "/":
                 filename = filename[1:]
 
             if filename[0] == "/":
                 filename = filename[1:]
 
@@ -115,8 +118,8 @@ class Generate(object):
         directory = os.path.dirname(filename)
         if directory[0:2] == "./":
             directory = directory[2:]
         directory = os.path.dirname(filename)
         if directory[0:2] == "./":
             directory = directory[2:]
-        elif directory[0:len(self.input_prefix)] == self.input_prefix:
-            directory = directory[len(self.input_prefix):]
+        elif directory[0 : len(self.input_prefix)] == self.input_prefix:
+            directory = directory[len(self.input_prefix) :]
         if directory[0] == "/":
             directory = directory[1:]
 
         if directory[0] == "/":
             directory = directory[1:]
 
@@ -133,9 +136,10 @@ class Generate(object):
 
             for line in fd:
                 line_num += 1
 
             for line in fd:
                 line_num += 1
-                str = line[:-1] # filter \n
+                str = line[:-1]  # filter \n
 
                 """See if there is a block directive and if so extract it"""
 
                 """See if there is a block directive and if so extract it"""
+
                 def process_block_directive(str, directives):
                     m = self.siphon_block_directive.search(str)
                     if m is not None:
                 def process_block_directive(str, directives):
                     m = self.siphon_block_directive.search(str)
                     if m is not None:
@@ -143,7 +147,7 @@ class Generate(object):
                         v = m.group(3).strip()
                         directives[k] = v
                         # Return only the parts we did not match
                         v = m.group(3).strip()
                         directives[k] = v
                         # Return only the parts we did not match
-                        return str[0:m.start(1)] + str[m.end(4):]
+                        return str[0 : m.start(1)] + str[m.end(4) :]
 
                     return str
 
 
                     return str
 
@@ -200,27 +204,25 @@ class Generate(object):
                     # Skip to next line
                     continue
 
                     # Skip to next line
                     continue
 
-
                 if siphon is None:
                     # Look for blocks we need to siphon
                     for p in siphon_patterns:
                         if p[0].match(str):
                 if siphon is None:
                     # Look for blocks we need to siphon
                     for p in siphon_patterns:
                         if p[0].match(str):
-                            siphon = [ p[1], str + "\n", 0 ]
+                            siphon = [p[1], str + "\n", 0]
                             siphon_line = line_num
 
                             # see if we have an initializer
                             m = self.siphon_initializer.search(str)
                             if m is not None:
                                 # count the braces on this line
                             siphon_line = line_num
 
                             # see if we have an initializer
                             m = self.siphon_initializer.search(str)
                             if m is not None:
                                 # count the braces on this line
-                                (count, index) = \
-                                    self.count_braces(str[m.start():])
+                                (count, index) = self.count_braces(str[m.start() :])
                                 siphon[2] = count
                                 # TODO - it's possible we have the
                                 # initializer all on the first line
                                 # we should check for it, but also
                                 # account for the possibility that
                                 # the open brace is on the next line
                                 siphon[2] = count
                                 # TODO - it's possible we have the
                                 # initializer all on the first line
                                 # we should check for it, but also
                                 # account for the possibility that
                                 # the open brace is on the next line
-                                #if count == 0:
+                                # if count == 0:
                                 #    # braces balanced
                                 #    close_siphon = siphon
                                 #    siphon = None
                                 #    # braces balanced
                                 #    close_siphon = siphon
                                 #    siphon = None
@@ -231,12 +233,11 @@ class Generate(object):
                 else:
                     # See if we should end the siphon here - do we have
                     # balanced braces?
                 else:
                     # See if we should end the siphon here - do we have
                     # balanced braces?
-                    (count, index) = self.count_braces(str,
-                            count=siphon[2], found=True)
+                    (count, index) = self.count_braces(str, count=siphon[2], found=True)
                     if count == 0:
                         # braces balanced - add the substring and
                         # close the siphon
                     if count == 0:
                         # braces balanced - add the substring and
                         # close the siphon
-                        siphon[1] += str[:index+1] + ";\n"
+                        siphon[1] += str[: index + 1] + ";\n"
                         close_siphon = siphon
                         siphon = None
                     else:
                         close_siphon = siphon
                         siphon = None
                     else:
@@ -259,15 +260,15 @@ class Generate(object):
                             details[key] = directives[key]
 
                     # Copy details for this block
                             details[key] = directives[key]
 
                     # Copy details for this block
-                    details['file'] = filename
-                    details['directory'] = directory
-                    details['line_start'] = siphon_line
-                    details['line_end'] = line_num
-                    details['siphon_block'] = siphon_block.strip()
+                    details["file"] = filename
+                    details["directory"] = directory
+                    details["line_start"] = siphon_line
+                    details["line_end"] = line_num
+                    details["siphon_block"] = siphon_block.strip()
                     details["block"] = close_siphon[1]
 
                     # Store the item
                     details["block"] = close_siphon[1]
 
                     # Store the item
-                    self.output[siphon_name]['items'].append(details)
+                    self.output[siphon_name]["items"].append(details)
 
                     # All done
                     close_siphon = None
 
                     # All done
                     close_siphon = None
@@ -275,7 +276,7 @@ class Generate(object):
 
             # Update globals
             for key in directives.keys():
 
             # Update globals
             for key in directives.keys():
-                if ':' not in key:
+                if ":" not in key:
                     continue
 
                 if filename.endswith("/dir.dox"):
                     continue
 
                 if filename.endswith("/dir.dox"):
@@ -288,19 +289,17 @@ class Generate(object):
 
                 if sn not in self.output:
                     self.output[sn] = {}
 
                 if sn not in self.output:
                     self.output[sn] = {}
-                if 'global' not in self.output[sn]:
-                    self.output[sn]['global'] = {}
-                if l not in self.output[sn]['global']:
-                    self.output[sn]['global'][l] = {}
+                if "global" not in self.output[sn]:
+                    self.output[sn]["global"] = {}
+                if l not in self.output[sn]["global"]:
+                    self.output[sn]["global"][l] = {}
 
 
-                self.output[sn]['global'][l][label] = directives[key]
+                self.output[sn]["global"][l][label] = directives[key]
 
     def deliver(self):
         # Write out the data
         for siphon in self.output.keys():
             self.log.info("Saving siphon data %s." % siphon)
             s = self.output[siphon]
 
     def deliver(self):
         # Write out the data
         for siphon in self.output.keys():
             self.log.info("Saving siphon data %s." % siphon)
             s = self.output[siphon]
-            with open(s['file'], "a") as fp:
-                json.dump(s, fp,
-                    separators=(',', ': '), indent=4, sort_keys=True)
-
+            with open(s["file"], "a") as fp:
+                json.dump(s, fp, separators=(",", ": "), indent=4, sort_keys=True)
index 6d24aaf..2e2f628 100644 (file)
@@ -17,8 +17,11 @@ import re
 from . import generate
 
 # Register our regexp
 from . import generate
 
 # Register our regexp
-generate.siphon_patterns.append((
-    re.compile("(?P<m>VLIB_CLI_COMMAND)\s*"
-        "[(](?P<name>[a-zA-Z0-9_]+)(,[^)]*)?[)]"),
-    "clicmd"
-))
+generate.siphon_patterns.append(
+    (
+        re.compile(
+            "(?P<m>VLIB_CLI_COMMAND)\s*" "[(](?P<name>[a-zA-Z0-9_]+)(,[^)]*)?[)]"
+        ),
+        "clicmd",
+    )
+)
index 52c802e..105a59c 100644 (file)
@@ -17,8 +17,12 @@ import re
 from . import generate
 
 # Register our regexp
 from . import generate
 
 # Register our regexp
-generate.siphon_patterns.append((
-    re.compile("(?P<m>VLIB_CONFIG_FUNCTION)\s*"
-        '[(](?P<fn>[a-zA-Z0-9_]+)\s*,\s*"(?P<name>[^"]*)"[)]'),
-    "syscfg"
-))
+generate.siphon_patterns.append(
+    (
+        re.compile(
+            "(?P<m>VLIB_CONFIG_FUNCTION)\s*"
+            '[(](?P<fn>[a-zA-Z0-9_]+)\s*,\s*"(?P<name>[^"]*)"[)]'
+        ),
+        "syscfg",
+    )
+)
index 162205d..1a7d1f5 100644 (file)
@@ -18,9 +18,10 @@ ident = pp.Word(pp.alphas + "_", pp.alphas + pp.nums + "_")
 intNum = pp.Word(pp.nums)
 hexNum = pp.Literal("0x") + pp.Word(pp.hexnums)
 octalNum = pp.Literal("0") + pp.Word("01234567")
 intNum = pp.Word(pp.nums)
 hexNum = pp.Literal("0x") + pp.Word(pp.hexnums)
 octalNum = pp.Literal("0") + pp.Word("01234567")
-integer = (hexNum | octalNum | intNum) + \
-    pp.Optional(pp.Literal("ULL") | pp.Literal("LL") | pp.Literal("L"))
-floatNum = pp.Regex(r'\d+(\.\d*)?([eE]\d+)?') + pp.Optional(pp.Literal("f"))
+integer = (hexNum | octalNum | intNum) + pp.Optional(
+    pp.Literal("ULL") | pp.Literal("LL") | pp.Literal("L")
+)
+floatNum = pp.Regex(r"\d+(\.\d*)?([eE]\d+)?") + pp.Optional(pp.Literal("f"))
 char = pp.Literal("'") + pp.Word(pp.printables, exact=1) + pp.Literal("'")
 arrayIndex = integer | ident
 
 char = pp.Literal("'") + pp.Word(pp.printables, exact=1) + pp.Literal("'")
 arrayIndex = integer | ident
 
@@ -36,23 +37,29 @@ semicolon = pp.Literal(";").suppress()
 # initializer := { [member = ] (variable | expression | { initializer } ) }
 typeName = ident
 varName = ident
 # initializer := { [member = ] (variable | expression | { initializer } ) }
 typeName = ident
 varName = ident
-typeSpec = pp.Optional("unsigned") + \
-           pp.oneOf("int long short float double char u8 i8 void") + \
-           pp.Optional(pp.Word("*"), default="")
-typeCast = pp.Combine( "(" + ( typeSpec | typeName ) + ")" ).suppress()
-
-string = pp.Combine(pp.OneOrMore(pp.QuotedString(quoteChar='"',
-    escChar='\\', multiline=True)), adjacent=False)
+typeSpec = (
+    pp.Optional("unsigned")
+    + pp.oneOf("int long short float double char u8 i8 void")
+    + pp.Optional(pp.Word("*"), default="")
+)
+typeCast = pp.Combine("(" + (typeSpec | typeName) + ")").suppress()
+
+string = pp.Combine(
+    pp.OneOrMore(pp.QuotedString(quoteChar='"', escChar="\\", multiline=True)),
+    adjacent=False,
+)
 literal = pp.Optional(typeCast) + (integer | floatNum | char | string)
 literal = pp.Optional(typeCast) + (integer | floatNum | char | string)
-var = pp.Combine(pp.Optional(typeCast) + varName +
-    pp.Optional("[" + arrayIndex + "]"))
+var = pp.Combine(pp.Optional(typeCast) + varName + pp.Optional("[" + arrayIndex + "]"))
 
 # This could be more complete, but suffices for our uses
 
 # This could be more complete, but suffices for our uses
-expr = (literal | var)
+expr = literal | var
 
 """Parse and render a block of text into a Python dictionary."""
 
 """Parse and render a block of text into a Python dictionary."""
+
+
 class Parser(object):
     """Compiled PyParsing BNF"""
 class Parser(object):
     """Compiled PyParsing BNF"""
+
     _parser = None
 
     def __init__(self):
     _parser = None
 
     def __init__(self):
@@ -71,6 +78,8 @@ class Parser(object):
 
 
 """Parser for function-like macros - without the closing semi-colon."""
 
 
 """Parser for function-like macros - without the closing semi-colon."""
+
+
 class ParserFunctionMacro(Parser):
     def BNF(self):
         # VLIB_CONFIG_FUNCTION (unix_config, "unix")
 class ParserFunctionMacro(Parser):
     def BNF(self):
         # VLIB_CONFIG_FUNCTION (unix_config, "unix")
@@ -91,6 +100,8 @@ class ParserFunctionMacro(Parser):
 
 
 """Parser for function-like macros with a closing semi-colon."""
 
 
 """Parser for function-like macros with a closing semi-colon."""
+
+
 class ParseFunctionMacroStmt(ParserFunctionMacro):
     def BNF(self):
         # VLIB_CONFIG_FUNCTION (unix_config, "unix");
 class ParseFunctionMacroStmt(ParserFunctionMacro):
     def BNF(self):
         # VLIB_CONFIG_FUNCTION (unix_config, "unix");
@@ -106,6 +117,8 @@ Parser for our struct initializers which are composed from a
 function-like macro, equals sign, and then a normal C struct initializer
 block.
 """
 function-like macro, equals sign, and then a normal C struct initializer
 block.
 """
+
+
 class MacroInitializer(ParserFunctionMacro):
     def BNF(self):
         # VLIB_CLI_COMMAND (show_sr_tunnel_command, static) = {
 class MacroInitializer(ParserFunctionMacro):
     def BNF(self):
         # VLIB_CLI_COMMAND (show_sr_tunnel_command, static) = {
@@ -115,14 +128,15 @@ class MacroInitializer(ParserFunctionMacro):
         # };
         cs = pp.Forward()
 
         # };
         cs = pp.Forward()
 
-
-        member = pp.Combine(dot + varName + pp.Optional("[" + arrayIndex + "]"),
-            adjacent=False)
-        value = (expr | cs)
+        member = pp.Combine(
+            dot + varName + pp.Optional("[" + arrayIndex + "]"), adjacent=False
+        )
+        value = expr | cs
 
         entry = pp.Group(pp.Optional(member + equals, default="") + value)
 
         entry = pp.Group(pp.Optional(member + equals, default="") + value)
-        entries = (pp.ZeroOrMore(entry + comma) + entry + pp.Optional(comma)) | \
-                  (pp.ZeroOrMore(entry + comma))
+        entries = (pp.ZeroOrMore(entry + comma) + entry + pp.Optional(comma)) | (
+            pp.ZeroOrMore(entry + comma)
+        )
 
         cs << (lbrace + entries + rbrace)
 
 
         cs << (lbrace + entries + rbrace)
 
index e3a7015..341b7cb 100644 (file)
@@ -88,7 +88,8 @@ class Siphon(object):
             loader=loader,
             trim_blocks=True,
             autoescape=False,
             loader=loader,
             trim_blocks=True,
             autoescape=False,
-            keep_trailing_newline=True)
+            keep_trailing_newline=True,
+        )
 
         # Convenience, get a reference to the internal escape and
         # unescape methods in html.parser. These then become
 
         # Convenience, get a reference to the internal escape and
         # unescape methods in html.parser. These then become
@@ -103,32 +104,38 @@ class Siphon(object):
     # Output renderers
 
     """Returns an object to be used as the sorting key in the item index."""
     # Output renderers
 
     """Returns an object to be used as the sorting key in the item index."""
+
     def index_sort_key(self, group):
         return group
 
     """Returns a string to use as the header at the top of the item index."""
     def index_sort_key(self, group):
         return group
 
     """Returns a string to use as the header at the top of the item index."""
+
     def index_header(self):
         return self.template("index_header")
 
     """Returns the string fragment to use for each section in the item
     index."""
     def index_header(self):
         return self.template("index_header")
 
     """Returns the string fragment to use for each section in the item
     index."""
+
     def index_section(self, group):
         return self.template("index_section", group=group)
 
     """Returns the string fragment to use for each entry in the item index."""
     def index_section(self, group):
         return self.template("index_section", group=group)
 
     """Returns the string fragment to use for each entry in the item index."""
+
     def index_entry(self, meta, item):
         return self.template("index_entry", meta=meta, item=item)
 
     """Returns an object, typically a string, to be used as the sorting key
     for items within a section."""
     def index_entry(self, meta, item):
         return self.template("index_entry", meta=meta, item=item)
 
     """Returns an object, typically a string, to be used as the sorting key
     for items within a section."""
+
     def item_sort_key(self, item):
     def item_sort_key(self, item):
-        return item['name']
+        return item["name"]
 
     """Returns a key for grouping items together."""
 
     """Returns a key for grouping items together."""
+
     def group_key(self, directory, file, macro, name):
     def group_key(self, directory, file, macro, name):
-        _global = self._cmds['_global']
+        _global = self._cmds["_global"]
 
 
-        if file in _global and 'group_label' in _global[file]:
+        if file in _global and "group_label" in _global[file]:
             self._group[file] = (directory, file)
             return file
 
             self._group[file] = (directory, file)
             return file
 
@@ -136,60 +143,59 @@ class Siphon(object):
         return directory
 
     """Returns a key for identifying items within a grouping."""
         return directory
 
     """Returns a key for identifying items within a grouping."""
+
     def item_key(self, directory, file, macro, name):
         return name
 
     """Returns a string to use as the header when rendering the item."""
     def item_key(self, directory, file, macro, name):
         return name
 
     """Returns a string to use as the header when rendering the item."""
+
     def item_header(self, group):
         return self.template("item_header", group=group)
 
     """Returns a string to use as the body when rendering the item."""
     def item_header(self, group):
         return self.template("item_header", group=group)
 
     """Returns a string to use as the body when rendering the item."""
+
     def item_format(self, meta, item):
         return self.template("item_format", meta=meta, item=item)
 
     """Returns a string to use as the label for the page reference."""
     def item_format(self, meta, item):
         return self.template("item_format", meta=meta, item=item)
 
     """Returns a string to use as the label for the page reference."""
+
     def page_label(self, group):
     def page_label(self, group):
-        return "_".join((
-            self.name,
-            self.sanitize_label(group)
-        ))
+        return "_".join((self.name, self.sanitize_label(group)))
 
     """Returns a title to use for a page."""
 
     """Returns a title to use for a page."""
+
     def page_title(self, group):
     def page_title(self, group):
-        _global = self._cmds['_global']
+        _global = self._cmds["_global"]
         (directory, file) = self._group[group]
 
         (directory, file) = self._group[group]
 
-        if file and file in _global and 'group_label' in _global[file]:
-            return _global[file]['group_label']
+        if file and file in _global and "group_label" in _global[file]:
+            return _global[file]["group_label"]
 
 
-        if directory in _global and 'group_label' in _global[directory]:
-            return _global[directory]['group_label']
+        if directory in _global and "group_label" in _global[directory]:
+            return _global[directory]["group_label"]
 
         return directory
 
     """Returns a string to use as the label for the section reference."""
 
         return directory
 
     """Returns a string to use as the label for the section reference."""
+
     def item_label(self, group, item):
     def item_label(self, group, item):
-        return "__".join((
-            self.name,
-            item
-        ))
+        return "__".join((self.name, item))
 
     """Label sanitizer; for creating Doxygen references"""
 
     """Label sanitizer; for creating Doxygen references"""
+
     def sanitize_label(self, value):
     def sanitize_label(self, value):
-        return value.replace(" ", "_") \
-                    .replace("/", "_") \
-                    .replace(".", "_")
+        return value.replace(" ", "_").replace("/", "_").replace(".", "_")
 
     """Template processor"""
 
     """Template processor"""
+
     def template(self, name, **kwargs):
         tpl = self._tplenv.get_template(name + self._format.extension)
     def template(self, name, **kwargs):
         tpl = self._tplenv.get_template(name + self._format.extension)
-        return tpl.render(
-            this=self,
-            **kwargs)
+        return tpl.render(this=self, **kwargs)
 
     # Processing methods
 
     """Parse the input file into a more usable dictionary structure."""
 
     # Processing methods
 
     """Parse the input file into a more usable dictionary structure."""
+
     def load_json(self, files):
         self._cmds = {}
         self._group = {}
     def load_json(self, files):
         self._cmds = {}
         self._group = {}
@@ -198,34 +204,37 @@ class Siphon(object):
         line_start = 0
         for filename in files:
             filename = os.path.relpath(filename)
         line_start = 0
         for filename in files:
             filename = os.path.relpath(filename)
-            self.log.info("Parsing items in file \"%s\"." % filename)
+            self.log.info('Parsing items in file "%s".' % filename)
             data = None
             with open(filename, "r") as fd:
                 data = json.load(fd)
 
             data = None
             with open(filename, "r") as fd:
                 data = json.load(fd)
 
-            self._cmds['_global'] = data['global']
+            self._cmds["_global"] = data["global"]
 
             # iterate the items loaded and regroup it
             for item in data["items"]:
                 try:
 
             # iterate the items loaded and regroup it
             for item in data["items"]:
                 try:
-                    o = self._parser.parse(item['block'])
+                    o = self._parser.parse(item["block"])
                 except Exception:
                 except Exception:
-                    self.log.error("Exception parsing item: %s\n%s"
-                                   % (json.dumps(item, separators=(',', ': '),
-                                                 indent=4),
-                                      item['block']))
+                    self.log.error(
+                        "Exception parsing item: %s\n%s"
+                        % (
+                            json.dumps(item, separators=(",", ": "), indent=4),
+                            item["block"],
+                        )
+                    )
                     raise
 
                 # Augment the item with metadata
                 o["meta"] = {}
                 for key in item:
                     raise
 
                 # Augment the item with metadata
                 o["meta"] = {}
                 for key in item:
-                    if key == 'block':
+                    if key == "block":
                         continue
                         continue
-                    o['meta'][key] = item[key]
+                    o["meta"][key] = item[key]
 
                 # Load some interesting fields
 
                 # Load some interesting fields
-                directory = item['directory']
-                file = item['file']
+                directory = item["directory"]
+                file = item["file"]
                 macro = o["macro"]
                 name = o["name"]
 
                 macro = o["macro"]
                 name = o["name"]
 
@@ -240,6 +249,7 @@ class Siphon(object):
 
     """Iterate over the input data, calling render methods to generate the
     output."""
 
     """Iterate over the input data, calling render methods to generate the
     output."""
+
     def process(self, out=None):
 
         if out is None:
     def process(self, out=None):
 
         if out is None:
@@ -257,11 +267,12 @@ class Siphon(object):
 
         # Iterate the dictionary and process it
         for group in sorted(self._cmds.keys(), key=group_sort_key):
 
         # Iterate the dictionary and process it
         for group in sorted(self._cmds.keys(), key=group_sort_key):
-            if group.startswith('_'):
+            if group.startswith("_"):
                 continue
 
                 continue
 
-            self.log.info("Processing items in group \"%s\" (%s)." %
-                          (group, group_sort_key(group)))
+            self.log.info(
+                'Processing items in group "%s" (%s).' % (group, group_sort_key(group))
+            )
 
             # Generate the section index entry (write it now)
             out.write(self.index_section(group))
 
             # Generate the section index entry (write it now)
             out.write(self.index_section(group))
@@ -273,15 +284,16 @@ class Siphon(object):
                 return self.item_sort_key(self._cmds[group][key])
 
             for key in sorted(self._cmds[group].keys(), key=item_sort_key):
                 return self.item_sort_key(self._cmds[group][key])
 
             for key in sorted(self._cmds[group].keys(), key=item_sort_key):
-                self.log.debug("--- Processing key \"%s\" (%s)." %
-                               (key, item_sort_key(key)))
+                self.log.debug(
+                    '--- Processing key "%s" (%s).' % (key, item_sort_key(key))
+                )
 
                 o = self._cmds[group][key]
                 meta = {
 
                 o = self._cmds[group][key]
                 meta = {
-                    "directory": o['meta']['directory'],
-                    "file": o['meta']['file'],
-                    "macro": o['macro'],
-                    "name": o['name'],
+                    "directory": o["meta"]["directory"],
+                    "file": o["meta"]["file"],
+                    "macro": o["macro"],
+                    "name": o["name"],
                     "key": key,
                     "label": self.item_label(group, key),
                 }
                     "key": key,
                     "label": self.item_label(group, key),
                 }
@@ -304,7 +316,7 @@ class Siphon(object):
 
     def do_cliexstart(self, matchobj):
         title = matchobj.group(1)
 
     def do_cliexstart(self, matchobj):
         title = matchobj.group(1)
-        title = ' '.join(title.splitlines())
+        title = " ".join(title.splitlines())
         content = matchobj.group(2)
         content = re.sub(r"\n", r"\n    ", content)
         return "\n\n.. code-block:: console\n\n    %s\n    %s\n\n" % (title, content)
         content = matchobj.group(2)
         content = re.sub(r"\n", r"\n    ", content)
         return "\n\n.. code-block:: console\n\n    %s\n    %s\n\n" % (title, content)
@@ -316,7 +328,7 @@ class Siphon(object):
 
     def do_cliexcmd(self, matchobj):
         content = matchobj.group(1)
 
     def do_cliexcmd(self, matchobj):
         content = matchobj.group(1)
-        content = ' '.join(content.splitlines())
+        content = " ".join(content.splitlines())
         return "\n\n.. code-block:: console\n\n    %s\n\n" % content
 
     def process_list(self, matchobj):
         return "\n\n.. code-block:: console\n\n    %s\n\n" % content
 
     def process_list(self, matchobj):
@@ -351,7 +363,9 @@ class Siphon(object):
         s = re.sub(r"@TODO[^\n]*", "", s)
         # ----------- code blocks
         s = re.sub(r"@cliexcmd{(.+?)}", self.do_cliexcmd, s, flags=re.DOTALL)
         s = re.sub(r"@TODO[^\n]*", "", s)
         # ----------- code blocks
         s = re.sub(r"@cliexcmd{(.+?)}", self.do_cliexcmd, s, flags=re.DOTALL)
-        s = re.sub(r"@cliexstart{(.+?)}(.+?)@cliexend", self.do_cliexstart, s, flags=re.DOTALL)
+        s = re.sub(
+            r"@cliexstart{(.+?)}(.+?)@cliexend", self.do_cliexstart, s, flags=re.DOTALL
+        )
         s = re.sub(r"@clistart(.+?)@cliend", self.do_clistart, s, flags=re.DOTALL)
         # ----------- lists
         s = re.sub(r"^\s*-", r"\n@@@@", s, flags=re.MULTILINE)
         s = re.sub(r"@clistart(.+?)@cliend", self.do_clistart, s, flags=re.DOTALL)
         # ----------- lists
         s = re.sub(r"^\s*-", r"\n@@@@", s, flags=re.MULTILINE)
@@ -377,6 +391,7 @@ class Siphon(object):
         s = re.sub(r"\n[ \f\v\t]*", "\n", s)
         return s
 
         s = re.sub(r"\n[ \f\v\t]*", "\n", s)
         return s
 
+
 class Format(object):
     """Output format class"""
 
 class Format(object):
     """Output format class"""
 
@@ -389,6 +404,7 @@ class Format(object):
 
 class FormatMarkdown(Format):
     """Markdown output format"""
 
 class FormatMarkdown(Format):
     """Markdown output format"""
+
     name = "markdown"
     extension = ".md"
 
     name = "markdown"
     extension = ".md"
 
@@ -399,6 +415,7 @@ formats["markdown"] = FormatMarkdown
 
 class FormatItemlist(Format):
     """Itemlist output format"""
 
 class FormatItemlist(Format):
     """Itemlist output format"""
+
     name = "itemlist"
     extension = ".itemlist"
 
     name = "itemlist"
     extension = ".itemlist"
 
index bf27051..afc24ae 100644 (file)
@@ -17,6 +17,7 @@
 from . import process, parsers
 import os
 
 from . import process, parsers
 import os
 
+
 class SiphonCLICMD(process.Siphon):
 
     name = "clicmd"
 class SiphonCLICMD(process.Siphon):
 
     name = "clicmd"
@@ -32,37 +33,36 @@ class SiphonCLICMD(process.Siphon):
         return self.page_label(group) + ".rst"
 
     def index_sort_key(self, group):
         return self.page_label(group) + ".rst"
 
     def index_sort_key(self, group):
-        _global = self._cmds['_global']
+        _global = self._cmds["_global"]
         if group not in self._group:
             return group
         (directory, file) = self._group[group]
 
         if group not in self._group:
             return group
         (directory, file) = self._group[group]
 
-        if file in _global and 'group_label' in _global[file]:
-            return _global[file]['group_label']
+        if file in _global and "group_label" in _global[file]:
+            return _global[file]["group_label"]
 
 
-        if directory in _global and 'group_label' in _global[directory]:
-            return _global[directory]['group_label']
+        if directory in _global and "group_label" in _global[directory]:
+            return _global[directory]["group_label"]
 
         return group
 
     def item_sort_key(self, item):
 
         return group
 
     def item_sort_key(self, item):
-        return item['value']['path']
+        return item["value"]["path"]
 
     def item_label(self, group, item):
 
     def item_label(self, group, item):
-        return "_".join((
-            self.name,
-            self.sanitize_label(self._cmds[group][item]['value']['path'])
-        ))
+        return "_".join(
+            (self.name, self.sanitize_label(self._cmds[group][item]["value"]["path"]))
+        )
 
     def page_title(self, group):
 
     def page_title(self, group):
-        _global = self._cmds['_global']
+        _global = self._cmds["_global"]
         (directory, file) = self._group[group]
 
         (directory, file) = self._group[group]
 
-        if file and file in _global and 'group_label' in _global[file]:
-            return _global[file]['group_label']
+        if file and file in _global and "group_label" in _global[file]:
+            return _global[file]["group_label"]
 
 
-        if directory in _global and 'group_label' in _global[directory]:
-            return _global[directory]['group_label']
+        if directory in _global and "group_label" in _global[directory]:
+            return _global[directory]["group_label"]
 
         file_ext = os.path.basename(directory)
         fname, ext = os.path.splitext(file_ext)
 
         file_ext = os.path.basename(directory)
         fname, ext = os.path.splitext(file_ext)
index 26ccb3f..550eee8 100644 (file)
@@ -20,14 +20,16 @@ import subprocess
 
 # -- Project information -----------------------------------------------------
 
 
 # -- Project information -----------------------------------------------------
 
-project = u'The Vector Packet Processor'
-copyright = u'2018-2022, Linux Foundation'
-author = u'FD.io VPP Community'
+project = "The Vector Packet Processor"
+copyright = "2018-2022, Linux Foundation"
+author = "FD.io VPP Community"
 
 # The short X.Y version
 version = subprocess.run(["git", "describe"], stdout=subprocess.PIPE, text=True).stdout
 # The full version, including alpha/beta/rc tags
 
 # The short X.Y version
 version = subprocess.run(["git", "describe"], stdout=subprocess.PIPE, text=True).stdout
 # The full version, including alpha/beta/rc tags
-release = subprocess.run(["git", "describe", "--long"], stdout=subprocess.PIPE, text=True).stdout
+release = subprocess.run(
+    ["git", "describe", "--long"], stdout=subprocess.PIPE, text=True
+).stdout
 
 
 # -- General configuration ---------------------------------------------------
 
 
 # -- General configuration ---------------------------------------------------
@@ -40,29 +42,27 @@ release = subprocess.run(["git", "describe", "--long"], stdout=subprocess.PIPE,
 # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
 # ones.
 extensions = [
 # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
 # ones.
 extensions = [
-    'sphinx.ext.autodoc',
-    'sphinx.ext.viewcode',
-    'recommonmark',
-    'sphinxcontrib.spelling']
+    "sphinx.ext.autodoc",
+    "sphinx.ext.viewcode",
+    "recommonmark",
+    "sphinxcontrib.spelling",
+]
 
 
-spelling_word_list_filename = 'spelling_wordlist.txt'
+spelling_word_list_filename = "spelling_wordlist.txt"
 
 # do not spell check those files
 
 # do not spell check those files
-spelling_exclude_patterns = ['aboutvpp/releasenotes/*']
+spelling_exclude_patterns = ["aboutvpp/releasenotes/*"]
 
 # Add any paths that contain templates here, relative to this directory.
 
 # Add any paths that contain templates here, relative to this directory.
-templates_path = ['_templates']
+templates_path = ["_templates"]
 
 # The suffix(es) of source filenames.
 # You can specify multiple suffix as a list of string:
 #
 
 # The suffix(es) of source filenames.
 # You can specify multiple suffix as a list of string:
 #
-source_suffix = {
-    '.rst': 'restructuredtext',
-    '.md': 'markdown'
-}
+source_suffix = {".rst": "restructuredtext", ".md": "markdown"}
 
 # The master toctree document.
 
 # The master toctree document.
-master_doc = 'index'
+master_doc = "index"
 
 # The language for content autogenerated by Sphinx. Refer to documentation
 # for a list of supported languages.
 
 # The language for content autogenerated by Sphinx. Refer to documentation
 # for a list of supported languages.
@@ -74,10 +74,10 @@ language = None
 # List of patterns, relative to source directory, that match files and
 # directories to ignore when looking for source files.
 # This pattern also affects html_static_path and html_extra_path .
 # List of patterns, relative to source directory, that match files and
 # directories to ignore when looking for source files.
 # This pattern also affects html_static_path and html_extra_path .
-exclude_patterns = ['Thumbs.db', '.DS_Store', '_scripts', 'venv', '_generated']
+exclude_patterns = ["Thumbs.db", ".DS_Store", "_scripts", "venv", "_generated"]
 
 # The name of the Pygments (syntax highlighting) style to use.
 
 # The name of the Pygments (syntax highlighting) style to use.
-pygments_style = 'default'
+pygments_style = "default"
 
 
 # -- Options for HTML output -------------------------------------------------
 
 
 # -- Options for HTML output -------------------------------------------------
@@ -88,15 +88,17 @@ pygments_style = 'default'
 
 # import sphinx_theme
 
 
 # import sphinx_theme
 
-templates_path = ['_templates']
+templates_path = ["_templates"]
 
 html_theme = "sphinx_rtd_theme"
 
 
 html_theme = "sphinx_rtd_theme"
 
-html_theme_path = ["_themes", ]
+html_theme_path = [
+    "_themes",
+]
 
 # The name of an image file (relative to this directory) to place at the top
 # of the sidebar.
 
 # The name of an image file (relative to this directory) to place at the top
 # of the sidebar.
-html_logo = '_static/fd-io_red_white.png'
+html_logo = "_static/fd-io_red_white.png"
 
 # Theme options are theme-specific and customize the look and feel of a theme
 # further.  For a list of options available for each theme, see the
 
 # Theme options are theme-specific and customize the look and feel of a theme
 # further.  For a list of options available for each theme, see the
@@ -107,11 +109,12 @@ html_logo = '_static/fd-io_red_white.png'
 # Add any paths that contain custom static files (such as style sheets) here,
 # relative to this directory. They are copied after the builtin static files,
 # so a file named "default.css" will overwrite the builtin "default.css".
 # Add any paths that contain custom static files (such as style sheets) here,
 # relative to this directory. They are copied after the builtin static files,
 # so a file named "default.css" will overwrite the builtin "default.css".
-html_static_path = ['_static']
+html_static_path = ["_static"]
 
 
 def setup(app):
 
 
 def setup(app):
-    app.add_css_file('css/rules.css')
+    app.add_css_file("css/rules.css")
+
 
 # Custom sidebar templates, must be a dictionary that maps document names
 # to template names.
 
 # Custom sidebar templates, must be a dictionary that maps document names
 # to template names.
@@ -127,7 +130,7 @@ def setup(app):
 # -- Options for HTMLHelp output ---------------------------------------------
 
 # Output file base name for HTML help builder.
 # -- Options for HTMLHelp output ---------------------------------------------
 
 # Output file base name for HTML help builder.
-htmlhelp_basename = 'Vector Packet Processor'
+htmlhelp_basename = "Vector Packet Processor"
 
 
 # -- Options for LaTeX output ------------------------------------------------
 
 
 # -- Options for LaTeX output ------------------------------------------------
@@ -136,15 +139,12 @@ latex_elements = {
     # The paper size ('letterpaper' or 'a4paper').
     #
     # 'papersize': 'letterpaper',
     # The paper size ('letterpaper' or 'a4paper').
     #
     # 'papersize': 'letterpaper',
-
     # The font size ('10pt', '11pt' or '12pt').
     #
     # 'pointsize': '10pt',
     # The font size ('10pt', '11pt' or '12pt').
     #
     # 'pointsize': '10pt',
-
     # Additional stuff for the LaTeX preamble.
     #
     # 'preamble': '',
     # Additional stuff for the LaTeX preamble.
     #
     # 'preamble': '',
-
     # Latex figure (float) alignment
     #
     # 'figure_align': 'htbp',
     # Latex figure (float) alignment
     #
     # 'figure_align': 'htbp',
@@ -154,9 +154,13 @@ latex_elements = {
 # (source start file, target name, title,
 #  author, documentclass [howto, manual, or own class]).
 latex_documents = [
 # (source start file, target name, title,
 #  author, documentclass [howto, manual, or own class]).
 latex_documents = [
-    (master_doc, 'Vector Packet Processor.tex',
-     u'Vector Packet Processor Documentation',
-     u'John DeNisco', 'manual'),
+    (
+        master_doc,
+        "Vector Packet Processor.tex",
+        "Vector Packet Processor Documentation",
+        "John DeNisco",
+        "manual",
+    ),
 ]
 
 
 ]
 
 
@@ -165,9 +169,13 @@ latex_documents = [
 # One entry per manual page. List of tuples
 # (source start file, name, description, authors, manual section).
 man_pages = [
 # One entry per manual page. List of tuples
 # (source start file, name, description, authors, manual section).
 man_pages = [
-    (master_doc, 'Vector Packet Processor',
-     u'Vector Packet Processor Documentation',
-     [author], 1)
+    (
+        master_doc,
+        "Vector Packet Processor",
+        "Vector Packet Processor Documentation",
+        [author],
+        1,
+    )
 ]
 
 
 ]
 
 
@@ -177,10 +185,15 @@ man_pages = [
 # (source start file, target name, title, author,
 #  dir menu entry, description, category)
 texinfo_documents = [
 # (source start file, target name, title, author,
 #  dir menu entry, description, category)
 texinfo_documents = [
-    (master_doc, 'Vector Packet Processor',
-     u'Vector Packet Processor Documentation',
-     author, 'Vector Packet Processor', 'One line description of project.',
-     'Miscellaneous'),
+    (
+        master_doc,
+        "Vector Packet Processor",
+        "Vector Packet Processor Documentation",
+        author,
+        "Vector Packet Processor",
+        "One line description of project.",
+        "Miscellaneous",
+    ),
 ]
 
 
 ]
 
 
index 6a625ac..4389c86 100755 (executable)
@@ -4,48 +4,58 @@ import json, argparse
 
 p = argparse.ArgumentParser()
 
 
 p = argparse.ArgumentParser()
 
-p.add_argument('-i', '--input', action="store",
-               help="input JSON file name", required = True)
-
-p.add_argument('-o', '--output', action="store",
-               help="output C file name", required = True)
-
-p.add_argument('-m', '--model', action="append",
-               help="CPU model in format: model[,stepping0]",
-               required = True)
+p.add_argument(
+    "-i", "--input", action="store", help="input JSON file name", required=True
+)
+
+p.add_argument(
+    "-o", "--output", action="store", help="output C file name", required=True
+)
+
+p.add_argument(
+    "-m",
+    "--model",
+    action="append",
+    help="CPU model in format: model[,stepping0]",
+    required=True,
+)
 
 r = p.parse_args()
 
 
 r = p.parse_args()
 
-with open(r.input, 'r') as fp:
+with open(r.input, "r") as fp:
     objects = json.load(fp)
 
     objects = json.load(fp)
 
-c = open(r.output, 'w')
+c = open(r.output, "w")
 
 
-c.write ("""
+c.write(
+    """
 #include <perfmon/perfmon_intel.h>
 
 static perfmon_intel_pmc_cpu_model_t cpu_model_table[] = {
 #include <perfmon/perfmon_intel.h>
 
 static perfmon_intel_pmc_cpu_model_t cpu_model_table[] = {
-""")
+"""
+)
 
 for v in r.model:
     if "," in v:
 
 for v in r.model:
     if "," in v:
-        (m, s)  = v.split(",")
+        (m, s) = v.split(",")
         m = int(m, 0)
         s = int(s, 0)
         m = int(m, 0)
         s = int(s, 0)
-        c.write ("  {}0x{:02X}, 0x{:02X}, 1{},\n".format("{", m, s, "}"))
+        c.write("  {}0x{:02X}, 0x{:02X}, 1{},\n".format("{", m, s, "}"))
     else:
         m = int(v, 0)
     else:
         m = int(v, 0)
-        c.write ("  {}0x{:02X}, 0x00, 0{},\n".format("{", m, "}"))
-c.write ("""
+        c.write("  {}0x{:02X}, 0x00, 0{},\n".format("{", m, "}"))
+c.write(
+    """
 };
 
 static perfmon_intel_pmc_event_t event_table[] = {
 };
 
 static perfmon_intel_pmc_event_t event_table[] = {
-""")
+"""
+)
 
 for obj in objects:
     MSRIndex = obj["MSRIndex"]
     if MSRIndex != "0":
 
 for obj in objects:
     MSRIndex = obj["MSRIndex"]
     if MSRIndex != "0":
-      continue
+        continue
 
     EventCode = obj["EventCode"]
     UMask = obj["UMask"]
 
     EventCode = obj["EventCode"]
     UMask = obj["UMask"]
@@ -53,20 +63,22 @@ for obj in objects:
     if "," in EventCode:
         continue
 
     if "," in EventCode:
         continue
 
-    c.write ("  {\n")
-    c.write ("   .event_code = {}{}{},\n".format("{", EventCode, "}"))
-    c.write ("   .umask = {},\n".format(UMask))
-    c.write ("   .event_name = \"{}\",\n".format(EventName))
-    c.write ("   },\n")
+    c.write("  {\n")
+    c.write("   .event_code = {}{}{},\n".format("{", EventCode, "}"))
+    c.write("   .umask = {},\n".format(UMask))
+    c.write('   .event_name = "{}",\n'.format(EventName))
+    c.write("   },\n")
 
 
 
 
-c.write ("""  {
+c.write(
+    """  {
    .event_name = 0,
    },
 };
 
 PERFMON_REGISTER_INTEL_PMC (cpu_model_table, event_table);
 
    .event_name = 0,
    },
 };
 
 PERFMON_REGISTER_INTEL_PMC (cpu_model_table, event_table);
 
-""")
+"""
+)
 
 c.close()
 
 c.close()
index c30a729..8c53b39 100644 (file)
@@ -43,16 +43,16 @@ from vpp_l2 import (
 from vpp_sub_interface import L2_VTR_OP, VppDot1QSubint
 from vpp_ip import DpoProto, get_dpo_proto
 from vpp_papi import VppEnum, MACAddress
 from vpp_sub_interface import L2_VTR_OP, VppDot1QSubint
 from vpp_ip import DpoProto, get_dpo_proto
 from vpp_papi import VppEnum, MACAddress
-from vpp_vxlan_gbp_tunnel import find_vxlan_gbp_tunnel, INDEX_INVALID, \
-    VppVxlanGbpTunnel
+from vpp_vxlan_gbp_tunnel import find_vxlan_gbp_tunnel, INDEX_INVALID, VppVxlanGbpTunnel
 from vpp_neighbor import VppNeighbor
 from vpp_acl import AclRule, VppAcl
 
 NUM_PKTS = 67
 
 
 from vpp_neighbor import VppNeighbor
 from vpp_acl import AclRule, VppAcl
 
 NUM_PKTS = 67
 
 
-def find_gbp_endpoint(test, sw_if_index=None, ip=None, mac=None,
-                      tep=None, sclass=None, flags=None):
+def find_gbp_endpoint(
+    test, sw_if_index=None, ip=None, mac=None, tep=None, sclass=None, flags=None
+):
     if ip:
         vip = ip
     if mac:
     if ip:
         vip = ip
     if mac:
@@ -64,8 +64,7 @@ def find_gbp_endpoint(test, sw_if_index=None, ip=None, mac=None,
         if tep:
             src = tep[0]
             dst = tep[1]
         if tep:
             src = tep[0]
             dst = tep[1]
-            if src != str(ep.endpoint.tun.src) or \
-               dst != str(ep.endpoint.tun.dst):
+            if src != str(ep.endpoint.tun.src) or dst != str(ep.endpoint.tun.dst):
                 continue
         if sw_if_index:
             if ep.endpoint.sw_if_index != sw_if_index:
                 continue
         if sw_if_index:
             if ep.endpoint.sw_if_index != sw_if_index:
@@ -128,11 +127,21 @@ class VppGbpEndpoint(VppObject):
     def fips(self):
         return [self.fip4, self.fip6]
 
     def fips(self):
         return [self.fip4, self.fip6]
 
-    def __init__(self, test, itf, epg, recirc, ip4, fip4, ip6, fip6,
-                 flags=0,
-                 tun_src="0.0.0.0",
-                 tun_dst="0.0.0.0",
-                 mac=True):
+    def __init__(
+        self,
+        test,
+        itf,
+        epg,
+        recirc,
+        ip4,
+        fip4,
+        ip6,
+        fip6,
+        flags=0,
+        tun_src="0.0.0.0",
+        tun_dst="0.0.0.0",
+        mac=True,
+    ):
         self._test = test
         self.itf = itf
         self.handle = None
         self._test = test
         self.itf = itf
         self.handle = None
@@ -179,15 +188,15 @@ class VppGbpEndpoint(VppObject):
         self._test.vapi.gbp_endpoint_del(handle=self.handle)
 
     def object_id(self):
         self._test.vapi.gbp_endpoint_del(handle=self.handle)
 
     def object_id(self):
-        return "gbp-endpoint:[%d==%d:%s:%d]" % (self.handle,
-                                                self.itf.sw_if_index,
-                                                self.ip4,
-                                                self.epg.sclass)
+        return "gbp-endpoint:[%d==%d:%s:%d]" % (
+            self.handle,
+            self.itf.sw_if_index,
+            self.ip4,
+            self.epg.sclass,
+        )
 
     def query_vpp_config(self):
 
     def query_vpp_config(self):
-        return find_gbp_endpoint(self._test,
-                                 self.itf.sw_if_index,
-                                 self.ip4)
+        return find_gbp_endpoint(self._test, self.itf.sw_if_index, self.ip4)
 
 
 class VppGbpRecirc(VppObject):
 
 
 class VppGbpRecirc(VppObject):
@@ -266,8 +275,10 @@ class VppGbpExtItf(VppObject):
         )
 
     def object_id(self):
         )
 
     def object_id(self):
-        return "gbp-ext-itf:[%d]%s" % (self.itf.sw_if_index,
-                                       " [anon]" if self.flags else "")
+        return "gbp-ext-itf:[%d]%s" % (
+            self.itf.sw_if_index,
+            " [anon]" if self.flags else "",
+        )
 
     def query_vpp_config(self):
         rs = self._test.vapi.gbp_ext_itf_dump()
 
     def query_vpp_config(self):
         rs = self._test.vapi.gbp_ext_itf_dump()
@@ -282,19 +293,25 @@ class VppGbpSubnet(VppObject):
     GBP Subnet
     """
 
     GBP Subnet
     """
 
-    def __init__(self, test, rd, address, address_len,
-                 type, sw_if_index=0xffffffff, sclass=0xffff):
+    def __init__(
+        self,
+        test,
+        rd,
+        address,
+        address_len,
+        type,
+        sw_if_index=0xFFFFFFFF,
+        sclass=0xFFFF,
+    ):
         # TODO: replace hardcoded defaults when vpp_papi supports
         #  defaults in typedefs
         self._test = test
         self.rd_id = rd.rd_id
         a = ip_address(address)
         if 4 == a.version:
         # TODO: replace hardcoded defaults when vpp_papi supports
         #  defaults in typedefs
         self._test = test
         self.rd_id = rd.rd_id
         a = ip_address(address)
         if 4 == a.version:
-            self.prefix = IPv4Network("%s/%d" % (address, address_len),
-                                      strict=False)
+            self.prefix = IPv4Network("%s/%d" % (address, address_len), strict=False)
         else:
         else:
-            self.prefix = IPv6Network("%s/%d" % (address, address_len),
-                                      strict=False)
+            self.prefix = IPv6Network("%s/%d" % (address, address_len), strict=False)
         self.type = type
         self.sw_if_index = sw_if_index
         self.sclass = sclass
         self.type = type
         self.sw_if_index = sw_if_index
         self.sclass = sclass
@@ -316,10 +333,7 @@ class VppGbpSubnet(VppObject):
         self._test.registry.register(self, self._test.logger)
 
     def remove_vpp_config(self):
         self._test.registry.register(self, self._test.logger)
 
     def remove_vpp_config(self):
-        self._test.vapi.gbp_subnet_add_del(
-            is_add=0,
-            subnet=self.encode()
-        )
+        self._test.vapi.gbp_subnet_add_del(is_add=0, subnet=self.encode())
 
     def object_id(self):
         return "gbp-subnet:[%d-%s]" % (self.rd_id, self.prefix)
 
     def object_id(self):
         return "gbp-subnet:[%d-%s]" % (self.rd_id, self.prefix)
@@ -327,19 +341,21 @@ class VppGbpSubnet(VppObject):
     def query_vpp_config(self):
         ss = self._test.vapi.gbp_subnet_dump()
         for s in ss:
     def query_vpp_config(self):
         ss = self._test.vapi.gbp_subnet_dump()
         for s in ss:
-            if s.subnet.rd_id == self.rd_id and \
-                    s.subnet.type == self.type and \
-                    s.subnet.prefix == self.prefix:
+            if (
+                s.subnet.rd_id == self.rd_id
+                and s.subnet.type == self.type
+                and s.subnet.prefix == self.prefix
+            ):
                 return True
         return False
 
 
 class VppGbpEndpointRetention(object):
                 return True
         return False
 
 
 class VppGbpEndpointRetention(object):
-    def __init__(self, remote_ep_timeout=0xffffffff):
+    def __init__(self, remote_ep_timeout=0xFFFFFFFF):
         self.remote_ep_timeout = remote_ep_timeout
 
     def encode(self):
         self.remote_ep_timeout = remote_ep_timeout
 
     def encode(self):
-        return {'remote_ep_timeout': self.remote_ep_timeout}
+        return {"remote_ep_timeout": self.remote_ep_timeout}
 
 
 class VppGbpEndpointGroup(VppObject):
 
 
 class VppGbpEndpointGroup(VppObject):
@@ -347,9 +363,19 @@ class VppGbpEndpointGroup(VppObject):
     GBP Endpoint Group
     """
 
     GBP Endpoint Group
     """
 
-    def __init__(self, test, vnid, sclass, rd, bd, uplink,
-                 bvi, bvi_ip4, bvi_ip6=None,
-                 retention=VppGbpEndpointRetention()):
+    def __init__(
+        self,
+        test,
+        vnid,
+        sclass,
+        rd,
+        bd,
+        uplink,
+        bvi,
+        bvi_ip4,
+        bvi_ip6=None,
+        retention=VppGbpEndpointRetention(),
+    ):
         self._test = test
         self.uplink = uplink
         self.bvi = bvi
         self._test = test
         self.uplink = uplink
         self.bvi = bvi
@@ -360,13 +386,14 @@ class VppGbpEndpointGroup(VppObject):
         self.rd = rd
         self.sclass = sclass
         if 0 == self.sclass:
         self.rd = rd
         self.sclass = sclass
         if 0 == self.sclass:
-            self.sclass = 0xffff
+            self.sclass = 0xFFFF
         self.retention = retention
 
     def encode(self) -> dict:
         return {
             "uplink_sw_if_index": self.uplink.sw_if_index
         self.retention = retention
 
     def encode(self) -> dict:
         return {
             "uplink_sw_if_index": self.uplink.sw_if_index
-            if self.uplink else INDEX_INVALID,
+            if self.uplink
+            else INDEX_INVALID,
             "bd_id": self.bd.bd.bd_id,
             "rd_id": self.rd.rd_id,
             "vnid": self.vnid,
             "bd_id": self.bd.bd.bd_id,
             "rd_id": self.rd.rd_id,
             "vnid": self.vnid,
@@ -397,11 +424,19 @@ class VppGbpBridgeDomain(VppObject):
     GBP Bridge Domain
     """
 
     GBP Bridge Domain
     """
 
-    def __init__(self, test, bd, rd, bvi,
-                 uu_fwd: typing.Optional[VppVxlanGbpTunnel] = None,
-                 bm_flood=None, learn=True,
-                 uu_drop=False, bm_drop=False,
-                 ucast_arp=False):
+    def __init__(
+        self,
+        test,
+        bd,
+        rd,
+        bvi,
+        uu_fwd: typing.Optional[VppVxlanGbpTunnel] = None,
+        bm_flood=None,
+        learn=True,
+        uu_drop=False,
+        bm_drop=False,
+        ucast_arp=False,
+    ):
         self._test = test
         self.bvi = bvi
         self.uu_fwd = uu_fwd
         self._test = test
         self.bvi = bvi
         self.uu_fwd = uu_fwd
@@ -426,9 +461,11 @@ class VppGbpBridgeDomain(VppObject):
             "flags": self.flags,
             "bvi_sw_if_index": self.bvi.sw_if_index,
             "uu_fwd_sw_if_index": self.uu_fwd.sw_if_index
             "flags": self.flags,
             "bvi_sw_if_index": self.bvi.sw_if_index,
             "uu_fwd_sw_if_index": self.uu_fwd.sw_if_index
-            if self.uu_fwd else INDEX_INVALID,
+            if self.uu_fwd
+            else INDEX_INVALID,
             "bm_flood_sw_if_index": self.bm_flood.sw_if_index
             "bm_flood_sw_if_index": self.bm_flood.sw_if_index
-            if self.bm_flood else INDEX_INVALID,
+            if self.bm_flood
+            else INDEX_INVALID,
             "bd_id": self.bd.bd_id,
             "rd_id": self.rd.rd_id,
         }
             "bd_id": self.bd.bd_id,
             "rd_id": self.rd.rd_id,
         }
@@ -474,10 +511,11 @@ class VppGbpRouteDomain(VppObject):
             "ip4_table_id": self.t4.table_id,
             "ip6_table_id": self.t6.table_id,
             "ip4_uu_sw_if_index": self.ip4_uu.sw_if_index
             "ip4_table_id": self.t4.table_id,
             "ip6_table_id": self.t6.table_id,
             "ip4_uu_sw_if_index": self.ip4_uu.sw_if_index
-            if self.ip4_uu else INDEX_INVALID,
+            if self.ip4_uu
+            else INDEX_INVALID,
             "ip6_uu_sw_if_index": self.ip6_uu.sw_if_index
             "ip6_uu_sw_if_index": self.ip6_uu.sw_if_index
-            if self.ip6_uu else INDEX_INVALID,
-
+            if self.ip6_uu
+            else INDEX_INVALID,
         }
 
     def add_vpp_config(self):
         }
 
     def add_vpp_config(self):
@@ -528,15 +566,16 @@ class VppGbpContractRule:
             nhs.append(nh.encode())
         while len(nhs) < 8:
             nhs.append({})
             nhs.append(nh.encode())
         while len(nhs) < 8:
             nhs.append({})
-        return {'action': self.action,
-                'nh_set': {
-                    'hash_mode': self.hash_mode,
-                    'n_nhs': len(self.nhs),
-                    'nhs': nhs}}
+        return {
+            "action": self.action,
+            "nh_set": {"hash_mode": self.hash_mode, "n_nhs": len(self.nhs), "nhs": nhs},
+        }
 
     def __repr__(self):
 
     def __repr__(self):
-        return '<VppGbpContractRule action=%s, hash_mode=%s>' % (
-            self.action, self.hash_mode)
+        return "<VppGbpContractRule action=%s, hash_mode=%s>" % (
+            self.action,
+            self.hash_mode,
+        )
 
 
 class VppGbpContract(VppObject):
 
 
 class VppGbpContract(VppObject):
@@ -544,8 +583,16 @@ class VppGbpContract(VppObject):
     GBP Contract
     """
 
     GBP Contract
     """
 
-    def __init__(self, test, scope, sclass, dclass, acl_index,
-                 rules: list, allowed_ethertypes: list):
+    def __init__(
+        self,
+        test,
+        scope,
+        sclass,
+        dclass,
+        acl_index,
+        rules: list,
+        allowed_ethertypes: list,
+    ):
         self._test = test
         self.scope = scope
         self.acl_index = acl_index
         self._test = test
         self.scope = scope
         self.acl_index = acl_index
@@ -553,7 +600,7 @@ class VppGbpContract(VppObject):
         self.dclass = dclass
         self.rules = rules
         self.allowed_ethertypes = allowed_ethertypes
         self.dclass = dclass
         self.rules = rules
         self.allowed_ethertypes = allowed_ethertypes
-        while (len(self.allowed_ethertypes) < 16):
+        while len(self.allowed_ethertypes) < 16:
             self.allowed_ethertypes.append(0)
 
     def encode(self) -> dict:
             self.allowed_ethertypes.append(0)
 
     def encode(self) -> dict:
@@ -561,21 +608,18 @@ class VppGbpContract(VppObject):
         for r in self.rules:
             rules.append(r.encode())
         return {
         for r in self.rules:
             rules.append(r.encode())
         return {
-            'acl_index': self.acl_index,
-            'scope': self.scope,
-            'sclass': self.sclass,
-            'dclass': self.dclass,
-            'n_rules': len(rules),
-            'rules': rules,
-            'n_ether_types': len(self.allowed_ethertypes),
-            'allowed_ethertypes': self.allowed_ethertypes,
+            "acl_index": self.acl_index,
+            "scope": self.scope,
+            "sclass": self.sclass,
+            "dclass": self.dclass,
+            "n_rules": len(rules),
+            "rules": rules,
+            "n_ether_types": len(self.allowed_ethertypes),
+            "allowed_ethertypes": self.allowed_ethertypes,
         }
 
     def add_vpp_config(self):
         }
 
     def add_vpp_config(self):
-        r = self._test.vapi.gbp_contract_add_del(
-            is_add=1,
-            contract=self.encode()
-        )
+        r = self._test.vapi.gbp_contract_add_del(is_add=1, contract=self.encode())
 
         self.stats_index = r.stats_index
         self._test.registry.register(self, self._test.logger)
 
         self.stats_index = r.stats_index
         self._test.registry.register(self, self._test.logger)
@@ -587,17 +631,21 @@ class VppGbpContract(VppObject):
         )
 
     def object_id(self):
         )
 
     def object_id(self):
-        return "gbp-contract:[%d:%d:%d:%d]" % (self.scope,
-                                               self.sclass,
-                                               self.dclass,
-                                               self.acl_index)
+        return "gbp-contract:[%d:%d:%d:%d]" % (
+            self.scope,
+            self.sclass,
+            self.dclass,
+            self.acl_index,
+        )
 
     def query_vpp_config(self):
         cs = self._test.vapi.gbp_contract_dump()
         for c in cs:
 
     def query_vpp_config(self):
         cs = self._test.vapi.gbp_contract_dump()
         for c in cs:
-            if c.contract.scope == self.scope \
-               and c.contract.sclass == self.sclass \
-               and c.contract.dclass == self.dclass:
+            if (
+                c.contract.scope == self.scope
+                and c.contract.sclass == self.sclass
+                and c.contract.dclass == self.dclass
+            ):
                 return True
         return False
 
                 return True
         return False
 
@@ -650,7 +698,7 @@ class VppGbpVxlanTunnel(VppInterface):
 
 @tag_fixme_vpp_workers
 class TestGBP(VppTestCase):
 
 @tag_fixme_vpp_workers
 class TestGBP(VppTestCase):
-    """ GBP Test Case """
+    """GBP Test Case"""
 
     @property
     def nat_config_flags(self):
 
     @property
     def nat_config_flags(self):
@@ -817,7 +865,7 @@ class TestGBP(VppTestCase):
         return rx
 
     def test_gbp(self):
         return rx
 
     def test_gbp(self):
-        """ Group Based Policy """
+        """Group Based Policy"""
 
         ep_flags = VppEnum.vl_api_gbp_endpoint_flags_t
 
 
         ep_flags = VppEnum.vl_api_gbp_endpoint_flags_t
 
@@ -862,26 +910,70 @@ class TestGBP(VppTestCase):
         # 3 EPGs, 2 of which share a BD.
         # 2 NAT EPGs, one for floating-IP subnets, the other for internet
         #
         # 3 EPGs, 2 of which share a BD.
         # 2 NAT EPGs, one for floating-IP subnets, the other for internet
         #
-        epgs = [VppGbpEndpointGroup(self, 220, 1220, rd0, gbd1,
-                                    self.pg4, self.loop0,
-                                    "10.0.0.128", "2001:10::128"),
-                VppGbpEndpointGroup(self, 221, 1221, rd0, gbd1,
-                                    self.pg5, self.loop0,
-                                    "10.0.1.128", "2001:10:1::128"),
-                VppGbpEndpointGroup(self, 222, 1222, rd0, gbd2,
-                                    self.pg6, self.loop1,
-                                    "10.0.2.128", "2001:10:2::128"),
-                VppGbpEndpointGroup(self, 333, 1333, rd20, gbd20,
-                                    self.pg7, self.loop2,
-                                    "11.0.0.128", "3001::128"),
-                VppGbpEndpointGroup(self, 444, 1444, rd20, gbd20,
-                                    self.pg8, self.loop2,
-                                    "11.0.0.129", "3001::129")]
-        recircs = [VppGbpRecirc(self, epgs[0], self.loop3),
-                   VppGbpRecirc(self, epgs[1], self.loop4),
-                   VppGbpRecirc(self, epgs[2], self.loop5),
-                   VppGbpRecirc(self, epgs[3], self.loop6, is_ext=True),
-                   VppGbpRecirc(self, epgs[4], self.loop7, is_ext=True)]
+        epgs = [
+            VppGbpEndpointGroup(
+                self,
+                220,
+                1220,
+                rd0,
+                gbd1,
+                self.pg4,
+                self.loop0,
+                "10.0.0.128",
+                "2001:10::128",
+            ),
+            VppGbpEndpointGroup(
+                self,
+                221,
+                1221,
+                rd0,
+                gbd1,
+                self.pg5,
+                self.loop0,
+                "10.0.1.128",
+                "2001:10:1::128",
+            ),
+            VppGbpEndpointGroup(
+                self,
+                222,
+                1222,
+                rd0,
+                gbd2,
+                self.pg6,
+                self.loop1,
+                "10.0.2.128",
+                "2001:10:2::128",
+            ),
+            VppGbpEndpointGroup(
+                self,
+                333,
+                1333,
+                rd20,
+                gbd20,
+                self.pg7,
+                self.loop2,
+                "11.0.0.128",
+                "3001::128",
+            ),
+            VppGbpEndpointGroup(
+                self,
+                444,
+                1444,
+                rd20,
+                gbd20,
+                self.pg8,
+                self.loop2,
+                "11.0.0.129",
+                "3001::129",
+            ),
+        ]
+        recircs = [
+            VppGbpRecirc(self, epgs[0], self.loop3),
+            VppGbpRecirc(self, epgs[1], self.loop4),
+            VppGbpRecirc(self, epgs[2], self.loop5),
+            VppGbpRecirc(self, epgs[3], self.loop6, is_ext=True),
+            VppGbpRecirc(self, epgs[4], self.loop7, is_ext=True),
+        ]
 
         epg_nat = epgs[3]
         recirc_nat = recircs[3]
 
         epg_nat = epgs[3]
         recirc_nat = recircs[3]
@@ -889,22 +981,48 @@ class TestGBP(VppTestCase):
         #
         # 4 end-points, 2 in the same subnet, 3 in the same BD
         #
         #
         # 4 end-points, 2 in the same subnet, 3 in the same BD
         #
-        eps = [VppGbpEndpoint(self, self.pg0,
-                              epgs[0], recircs[0],
-                              "10.0.0.1", "11.0.0.1",
-                              "2001:10::1", "3001::1"),
-               VppGbpEndpoint(self, self.pg1,
-                              epgs[0], recircs[0],
-                              "10.0.0.2", "11.0.0.2",
-                              "2001:10::2", "3001::2"),
-               VppGbpEndpoint(self, self.pg2,
-                              epgs[1], recircs[1],
-                              "10.0.1.1", "11.0.0.3",
-                              "2001:10:1::1", "3001::3"),
-               VppGbpEndpoint(self, self.pg3,
-                              epgs[2], recircs[2],
-                              "10.0.2.1", "11.0.0.4",
-                              "2001:10:2::1", "3001::4")]
+        eps = [
+            VppGbpEndpoint(
+                self,
+                self.pg0,
+                epgs[0],
+                recircs[0],
+                "10.0.0.1",
+                "11.0.0.1",
+                "2001:10::1",
+                "3001::1",
+            ),
+            VppGbpEndpoint(
+                self,
+                self.pg1,
+                epgs[0],
+                recircs[0],
+                "10.0.0.2",
+                "11.0.0.2",
+                "2001:10::2",
+                "3001::2",
+            ),
+            VppGbpEndpoint(
+                self,
+                self.pg2,
+                epgs[1],
+                recircs[1],
+                "10.0.1.1",
+                "11.0.0.3",
+                "2001:10:1::1",
+                "3001::3",
+            ),
+            VppGbpEndpoint(
+                self,
+                self.pg3,
+                epgs[2],
+                recircs[2],
+                "10.0.2.1",
+                "11.0.0.4",
+                "2001:10:2::1",
+                "3001::4",
+            ),
+        ]
 
         self.vapi.nat44_ed_plugin_enable_disable(enable=1)
         self.vapi.nat66_plugin_enable_disable(enable=1)
 
         self.vapi.nat44_ed_plugin_enable_disable(enable=1)
         self.vapi.nat66_plugin_enable_disable(enable=1)
@@ -915,39 +1033,37 @@ class TestGBP(VppTestCase):
         for epg in epgs:
             # IP config on the BVI interfaces
             if epg != epgs[1] and epg != epgs[4]:
         for epg in epgs:
             # IP config on the BVI interfaces
             if epg != epgs[1] and epg != epgs[4]:
-                b4 = VppIpInterfaceBind(self, epg.bvi,
-                                        epg.rd.t4).add_vpp_config()
-                b6 = VppIpInterfaceBind(self, epg.bvi,
-                                        epg.rd.t6).add_vpp_config()
+                b4 = VppIpInterfaceBind(self, epg.bvi, epg.rd.t4).add_vpp_config()
+                b6 = VppIpInterfaceBind(self, epg.bvi, epg.rd.t6).add_vpp_config()
                 epg.bvi.set_mac(self.router_mac)
 
                 # The BVIs are NAT inside interfaces
                 flags = self.nat_config_flags.NAT_IS_INSIDE
                 self.vapi.nat44_interface_add_del_feature(
                 epg.bvi.set_mac(self.router_mac)
 
                 # The BVIs are NAT inside interfaces
                 flags = self.nat_config_flags.NAT_IS_INSIDE
                 self.vapi.nat44_interface_add_del_feature(
-                    sw_if_index=epg.bvi.sw_if_index,
-                    flags=flags, is_add=1)
+                    sw_if_index=epg.bvi.sw_if_index, flags=flags, is_add=1
+                )
                 self.vapi.nat66_add_del_interface(
                 self.vapi.nat66_add_del_interface(
-                    sw_if_index=epg.bvi.sw_if_index,
-                    flags=flags, is_add=1)
+                    sw_if_index=epg.bvi.sw_if_index, flags=flags, is_add=1
+                )
 
 
-            if_ip4 = VppIpInterfaceAddress(self, epg.bvi,
-                                           epg.bvi_ip4, 32,
-                                           bind=b4).add_vpp_config()
-            if_ip6 = VppIpInterfaceAddress(self, epg.bvi,
-                                           epg.bvi_ip6, 128,
-                                           bind=b6).add_vpp_config()
+            if_ip4 = VppIpInterfaceAddress(
+                self, epg.bvi, epg.bvi_ip4, 32, bind=b4
+            ).add_vpp_config()
+            if_ip6 = VppIpInterfaceAddress(
+                self, epg.bvi, epg.bvi_ip6, 128, bind=b6
+            ).add_vpp_config()
 
             # EPG uplink interfaces in the RD
             VppIpInterfaceBind(self, epg.uplink, epg.rd.t4).add_vpp_config()
             VppIpInterfaceBind(self, epg.uplink, epg.rd.t6).add_vpp_config()
 
             # add the BD ARP termination entry for BVI IP
 
             # EPG uplink interfaces in the RD
             VppIpInterfaceBind(self, epg.uplink, epg.rd.t4).add_vpp_config()
             VppIpInterfaceBind(self, epg.uplink, epg.rd.t6).add_vpp_config()
 
             # add the BD ARP termination entry for BVI IP
-            epg.bd_arp_ip4 = VppBridgeDomainArpEntry(self, epg.bd.bd,
-                                                     str(self.router_mac),
-                                                     epg.bvi_ip4)
-            epg.bd_arp_ip6 = VppBridgeDomainArpEntry(self, epg.bd.bd,
-                                                     str(self.router_mac),
-                                                     epg.bvi_ip6)
+            epg.bd_arp_ip4 = VppBridgeDomainArpEntry(
+                self, epg.bd.bd, str(self.router_mac), epg.bvi_ip4
+            )
+            epg.bd_arp_ip6 = VppBridgeDomainArpEntry(
+                self, epg.bd.bd, str(self.router_mac), epg.bvi_ip6
+            )
             epg.bd_arp_ip4.add_vpp_config()
             epg.bd_arp_ip6.add_vpp_config()
 
             epg.bd_arp_ip4.add_vpp_config()
             epg.bd_arp_ip6.add_vpp_config()
 
@@ -956,22 +1072,24 @@ class TestGBP(VppTestCase):
 
         for recirc in recircs:
             # EPG's ingress recirculation interface maps to its RD
 
         for recirc in recircs:
             # EPG's ingress recirculation interface maps to its RD
-            VppIpInterfaceBind(self, recirc.recirc,
-                               recirc.epg.rd.t4).add_vpp_config()
-            VppIpInterfaceBind(self, recirc.recirc,
-                               recirc.epg.rd.t6).add_vpp_config()
+            VppIpInterfaceBind(self, recirc.recirc, recirc.epg.rd.t4).add_vpp_config()
+            VppIpInterfaceBind(self, recirc.recirc, recirc.epg.rd.t6).add_vpp_config()
 
             self.vapi.nat44_interface_add_del_feature(
 
             self.vapi.nat44_interface_add_del_feature(
-                sw_if_index=recirc.recirc.sw_if_index, is_add=1)
+                sw_if_index=recirc.recirc.sw_if_index, is_add=1
+            )
             self.vapi.nat66_add_del_interface(
             self.vapi.nat66_add_del_interface(
-                sw_if_index=recirc.recirc.sw_if_index, is_add=1)
+                sw_if_index=recirc.recirc.sw_if_index, is_add=1
+            )
 
             recirc.add_vpp_config()
 
         for recirc in recircs:
 
             recirc.add_vpp_config()
 
         for recirc in recircs:
-            self.assertTrue(find_bridge_domain_port(self,
-                                                    recirc.epg.bd.bd.bd_id,
-                                                    recirc.recirc.sw_if_index))
+            self.assertTrue(
+                find_bridge_domain_port(
+                    self, recirc.epg.bd.bd.bd_id, recirc.recirc.sw_if_index
+                )
+            )
 
         for ep in eps:
             self.pg_enable_capture(self.pg_interfaces)
 
         for ep in eps:
             self.pg_enable_capture(self.pg_interfaces)
@@ -991,12 +1109,12 @@ class TestGBP(VppTestCase):
                         external_ip_address=fip,
                         external_sw_if_index=0xFFFFFFFF,
                         vrf_id=0,
                         external_ip_address=fip,
                         external_sw_if_index=0xFFFFFFFF,
                         vrf_id=0,
-                        flags=flags)
+                        flags=flags,
+                    )
                 else:
                     self.vapi.nat66_add_del_static_mapping(
                 else:
                     self.vapi.nat66_add_del_static_mapping(
-                        local_ip_address=ip,
-                        external_ip_address=fip,
-                        vrf_id=0, is_add=1)
+                        local_ip_address=ip, external_ip_address=fip, vrf_id=0, is_add=1
+                    )
 
             # VPP EP create ...
             ep.add_vpp_config()
 
             # VPP EP create ...
             ep.add_vpp_config()
@@ -1019,36 +1137,41 @@ class TestGBP(VppTestCase):
 
             # add the BD ARP termination entry for floating IP
             for fip in ep.fips:
 
             # add the BD ARP termination entry for floating IP
             for fip in ep.fips:
-                ba = VppBridgeDomainArpEntry(self, epg_nat.bd.bd, ep.mac,
-                                             fip)
+                ba = VppBridgeDomainArpEntry(self, epg_nat.bd.bd, ep.mac, fip)
                 ba.add_vpp_config()
 
                 # floating IPs route via EPG recirc
                 r = VppIpRoute(
                 ba.add_vpp_config()
 
                 # floating IPs route via EPG recirc
                 r = VppIpRoute(
-                    self, fip, ip_address(fip).max_prefixlen,
-                    [VppRoutePath(fip,
-                                  ep.recirc.recirc.sw_if_index,
-                                  type=FibPathType.FIB_PATH_TYPE_DVR,
-                                  proto=get_dpo_proto(fip))],
-                    table_id=20)
+                    self,
+                    fip,
+                    ip_address(fip).max_prefixlen,
+                    [
+                        VppRoutePath(
+                            fip,
+                            ep.recirc.recirc.sw_if_index,
+                            type=FibPathType.FIB_PATH_TYPE_DVR,
+                            proto=get_dpo_proto(fip),
+                        )
+                    ],
+                    table_id=20,
+                )
                 r.add_vpp_config()
 
             # L2 FIB entries in the NAT EPG BD to bridge the packets from
             # the outside direct to the internal EPG
                 r.add_vpp_config()
 
             # L2 FIB entries in the NAT EPG BD to bridge the packets from
             # the outside direct to the internal EPG
-            lf = VppL2FibEntry(self, epg_nat.bd.bd, ep.mac,
-                               ep.recirc.recirc, bvi_mac=0)
+            lf = VppL2FibEntry(self, epg_nat.bd.bd, ep.mac, ep.recirc.recirc, bvi_mac=0)
             lf.add_vpp_config()
 
         #
         # ARP packets for unknown IP are sent to the EPG uplink
         #
             lf.add_vpp_config()
 
         #
         # ARP packets for unknown IP are sent to the EPG uplink
         #
-        pkt_arp = (Ether(dst="ff:ff:ff:ff:ff:ff",
-                         src=self.pg0.remote_mac) /
-                   ARP(op="who-has",
-                       hwdst="ff:ff:ff:ff:ff:ff",
-                       hwsrc=self.pg0.remote_mac,
-                       pdst="10.0.0.88",
-                       psrc="10.0.0.99"))
+        pkt_arp = Ether(dst="ff:ff:ff:ff:ff:ff", src=self.pg0.remote_mac) / ARP(
+            op="who-has",
+            hwdst="ff:ff:ff:ff:ff:ff",
+            hwsrc=self.pg0.remote_mac,
+            pdst="10.0.0.88",
+            psrc="10.0.0.99",
+        )
 
         self.vapi.cli("clear trace")
         self.pg0.add_stream(pkt_arp)
 
         self.vapi.cli("clear trace")
         self.pg0.add_stream(pkt_arp)
@@ -1061,33 +1184,35 @@ class TestGBP(VppTestCase):
         #
         # ARP/ND packets get a response
         #
         #
         # ARP/ND packets get a response
         #
-        pkt_arp = (Ether(dst="ff:ff:ff:ff:ff:ff",
-                         src=self.pg0.remote_mac) /
-                   ARP(op="who-has",
-                       hwdst="ff:ff:ff:ff:ff:ff",
-                       hwsrc=self.pg0.remote_mac,
-                       pdst=epgs[0].bvi_ip4,
-                       psrc=eps[0].ip4))
+        pkt_arp = Ether(dst="ff:ff:ff:ff:ff:ff", src=self.pg0.remote_mac) / ARP(
+            op="who-has",
+            hwdst="ff:ff:ff:ff:ff:ff",
+            hwsrc=self.pg0.remote_mac,
+            pdst=epgs[0].bvi_ip4,
+            psrc=eps[0].ip4,
+        )
 
         self.send_and_expect(self.pg0, [pkt_arp], self.pg0)
 
         nsma = in6_getnsma(inet_pton(AF_INET6, eps[0].ip6))
         d = inet_ntop(AF_INET6, nsma)
 
         self.send_and_expect(self.pg0, [pkt_arp], self.pg0)
 
         nsma = in6_getnsma(inet_pton(AF_INET6, eps[0].ip6))
         d = inet_ntop(AF_INET6, nsma)
-        pkt_nd = (Ether(dst=in6_getnsmac(nsma),
-                        src=self.pg0.remote_mac) /
-                  IPv6(dst=d, src=eps[0].ip6) /
-                  ICMPv6ND_NS(tgt=epgs[0].bvi_ip6) /
-                  ICMPv6NDOptSrcLLAddr(lladdr=self.pg0.remote_mac))
+        pkt_nd = (
+            Ether(dst=in6_getnsmac(nsma), src=self.pg0.remote_mac)
+            / IPv6(dst=d, src=eps[0].ip6)
+            / ICMPv6ND_NS(tgt=epgs[0].bvi_ip6)
+            / ICMPv6NDOptSrcLLAddr(lladdr=self.pg0.remote_mac)
+        )
         self.send_and_expect(self.pg0, [pkt_nd], self.pg0)
 
         #
         # broadcast packets are flooded
         #
         self.send_and_expect(self.pg0, [pkt_nd], self.pg0)
 
         #
         # broadcast packets are flooded
         #
-        pkt_bcast = (Ether(dst="ff:ff:ff:ff:ff:ff",
-                           src=self.pg0.remote_mac) /
-                     IP(src=eps[0].ip4, dst="232.1.1.1") /
-                     UDP(sport=1234, dport=1234) /
-                     Raw(b'\xa5' * 100))
+        pkt_bcast = (
+            Ether(dst="ff:ff:ff:ff:ff:ff", src=self.pg0.remote_mac)
+            / IP(src=eps[0].ip4, dst="232.1.1.1")
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
 
         self.vapi.cli("clear trace")
         self.pg0.add_stream(pkt_bcast)
 
         self.vapi.cli("clear trace")
         self.pg0.add_stream(pkt_bcast)
@@ -1103,52 +1228,74 @@ class TestGBP(VppTestCase):
         #
         # packets to non-local L3 destinations dropped
         #
         #
         # packets to non-local L3 destinations dropped
         #
-        pkt_intra_epg_220_ip4 = (Ether(src=self.pg0.remote_mac,
-                                       dst=str(self.router_mac)) /
-                                 IP(src=eps[0].ip4,
-                                    dst="10.0.0.99") /
-                                 UDP(sport=1234, dport=1234) /
-                                 Raw(b'\xa5' * 100))
-        pkt_inter_epg_222_ip4 = (Ether(src=self.pg0.remote_mac,
-                                       dst=str(self.router_mac)) /
-                                 IP(src=eps[0].ip4,
-                                    dst="10.0.1.99") /
-                                 UDP(sport=1234, dport=1234) /
-                                 Raw(b'\xa5' * 100))
-
-        self.send_and_assert_no_replies(self.pg0,
-                                        pkt_intra_epg_220_ip4 * NUM_PKTS)
-
-        pkt_inter_epg_222_ip6 = (Ether(src=self.pg0.remote_mac,
-                                       dst=str(self.router_mac)) /
-                                 IPv6(src=eps[0].ip6,
-                                      dst="2001:10::99") /
-                                 UDP(sport=1234, dport=1234) /
-                                 Raw(b'\xa5' * 100))
-        self.send_and_assert_no_replies(self.pg0,
-                                        pkt_inter_epg_222_ip6 * NUM_PKTS)
+        pkt_intra_epg_220_ip4 = (
+            Ether(src=self.pg0.remote_mac, dst=str(self.router_mac))
+            / IP(src=eps[0].ip4, dst="10.0.0.99")
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
+        pkt_inter_epg_222_ip4 = (
+            Ether(src=self.pg0.remote_mac, dst=str(self.router_mac))
+            / IP(src=eps[0].ip4, dst="10.0.1.99")
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
+
+        self.send_and_assert_no_replies(self.pg0, pkt_intra_epg_220_ip4 * NUM_PKTS)
+
+        pkt_inter_epg_222_ip6 = (
+            Ether(src=self.pg0.remote_mac, dst=str(self.router_mac))
+            / IPv6(src=eps[0].ip6, dst="2001:10::99")
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
+        self.send_and_assert_no_replies(self.pg0, pkt_inter_epg_222_ip6 * NUM_PKTS)
 
         #
         # Add the subnet routes
         #
         s41 = VppGbpSubnet(
 
         #
         # Add the subnet routes
         #
         s41 = VppGbpSubnet(
-            self, rd0, "10.0.0.0", 24,
-            VppEnum.vl_api_gbp_subnet_type_t.GBP_API_SUBNET_STITCHED_INTERNAL)
+            self,
+            rd0,
+            "10.0.0.0",
+            24,
+            VppEnum.vl_api_gbp_subnet_type_t.GBP_API_SUBNET_STITCHED_INTERNAL,
+        )
         s42 = VppGbpSubnet(
         s42 = VppGbpSubnet(
-            self, rd0, "10.0.1.0", 24,
-            VppEnum.vl_api_gbp_subnet_type_t.GBP_API_SUBNET_STITCHED_INTERNAL)
+            self,
+            rd0,
+            "10.0.1.0",
+            24,
+            VppEnum.vl_api_gbp_subnet_type_t.GBP_API_SUBNET_STITCHED_INTERNAL,
+        )
         s43 = VppGbpSubnet(
         s43 = VppGbpSubnet(
-            self, rd0, "10.0.2.0", 24,
-            VppEnum.vl_api_gbp_subnet_type_t.GBP_API_SUBNET_STITCHED_INTERNAL)
+            self,
+            rd0,
+            "10.0.2.0",
+            24,
+            VppEnum.vl_api_gbp_subnet_type_t.GBP_API_SUBNET_STITCHED_INTERNAL,
+        )
         s61 = VppGbpSubnet(
         s61 = VppGbpSubnet(
-            self, rd0, "2001:10::1", 64,
-            VppEnum.vl_api_gbp_subnet_type_t.GBP_API_SUBNET_STITCHED_INTERNAL)
+            self,
+            rd0,
+            "2001:10::1",
+            64,
+            VppEnum.vl_api_gbp_subnet_type_t.GBP_API_SUBNET_STITCHED_INTERNAL,
+        )
         s62 = VppGbpSubnet(
         s62 = VppGbpSubnet(
-            self, rd0, "2001:10:1::1", 64,
-            VppEnum.vl_api_gbp_subnet_type_t.GBP_API_SUBNET_STITCHED_INTERNAL)
+            self,
+            rd0,
+            "2001:10:1::1",
+            64,
+            VppEnum.vl_api_gbp_subnet_type_t.GBP_API_SUBNET_STITCHED_INTERNAL,
+        )
         s63 = VppGbpSubnet(
         s63 = VppGbpSubnet(
-            self, rd0, "2001:10:2::1", 64,
-            VppEnum.vl_api_gbp_subnet_type_t.GBP_API_SUBNET_STITCHED_INTERNAL)
+            self,
+            rd0,
+            "2001:10:2::1",
+            64,
+            VppEnum.vl_api_gbp_subnet_type_t.GBP_API_SUBNET_STITCHED_INTERNAL,
+        )
         s41.add_vpp_config()
         s42.add_vpp_config()
         s43.add_vpp_config()
         s41.add_vpp_config()
         s42.add_vpp_config()
         s43.add_vpp_config()
@@ -1156,15 +1303,15 @@ class TestGBP(VppTestCase):
         s62.add_vpp_config()
         s63.add_vpp_config()
 
         s62.add_vpp_config()
         s63.add_vpp_config()
 
-        self.send_and_expect_bridged(eps[0].itf,
-                                     pkt_intra_epg_220_ip4 * NUM_PKTS,
-                                     eps[0].epg.uplink)
-        self.send_and_expect_bridged(eps[0].itf,
-                                     pkt_inter_epg_222_ip4 * NUM_PKTS,
-                                     eps[0].epg.uplink)
-        self.send_and_expect_bridged6(eps[0].itf,
-                                      pkt_inter_epg_222_ip6 * NUM_PKTS,
-                                      eps[0].epg.uplink)
+        self.send_and_expect_bridged(
+            eps[0].itf, pkt_intra_epg_220_ip4 * NUM_PKTS, eps[0].epg.uplink
+        )
+        self.send_and_expect_bridged(
+            eps[0].itf, pkt_inter_epg_222_ip4 * NUM_PKTS, eps[0].epg.uplink
+        )
+        self.send_and_expect_bridged6(
+            eps[0].itf, pkt_inter_epg_222_ip6 * NUM_PKTS, eps[0].epg.uplink
+        )
 
         self.logger.info(self.vapi.cli("sh ip fib 11.0.0.2"))
         self.logger.info(self.vapi.cli("sh gbp endpoint-group"))
 
         self.logger.info(self.vapi.cli("sh ip fib 11.0.0.2"))
         self.logger.info(self.vapi.cli("sh gbp endpoint-group"))
@@ -1180,182 +1327,210 @@ class TestGBP(VppTestCase):
         #
         # Packet destined to unknown unicast is sent on the epg uplink ...
         #
         #
         # Packet destined to unknown unicast is sent on the epg uplink ...
         #
-        pkt_intra_epg_220_to_uplink = (Ether(src=self.pg0.remote_mac,
-                                             dst="00:00:00:33:44:55") /
-                                       IP(src=eps[0].ip4,
-                                          dst="10.0.0.99") /
-                                       UDP(sport=1234, dport=1234) /
-                                       Raw(b'\xa5' * 100))
+        pkt_intra_epg_220_to_uplink = (
+            Ether(src=self.pg0.remote_mac, dst="00:00:00:33:44:55")
+            / IP(src=eps[0].ip4, dst="10.0.0.99")
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
 
 
-        self.send_and_expect_bridged(eps[0].itf,
-                                     pkt_intra_epg_220_to_uplink * NUM_PKTS,
-                                     eps[0].epg.uplink)
+        self.send_and_expect_bridged(
+            eps[0].itf, pkt_intra_epg_220_to_uplink * NUM_PKTS, eps[0].epg.uplink
+        )
         # ... and nowhere else
         self.pg1.get_capture(0, timeout=0.1)
         self.pg1.assert_nothing_captured(remark="Flood onto other VMS")
 
         # ... and nowhere else
         self.pg1.get_capture(0, timeout=0.1)
         self.pg1.assert_nothing_captured(remark="Flood onto other VMS")
 
-        pkt_intra_epg_221_to_uplink = (Ether(src=self.pg2.remote_mac,
-                                             dst="00:00:00:33:44:66") /
-                                       IP(src=eps[0].ip4,
-                                          dst="10.0.0.99") /
-                                       UDP(sport=1234, dport=1234) /
-                                       Raw(b'\xa5' * 100))
+        pkt_intra_epg_221_to_uplink = (
+            Ether(src=self.pg2.remote_mac, dst="00:00:00:33:44:66")
+            / IP(src=eps[0].ip4, dst="10.0.0.99")
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
 
 
-        self.send_and_expect_bridged(eps[2].itf,
-                                     pkt_intra_epg_221_to_uplink * NUM_PKTS,
-                                     eps[2].epg.uplink)
+        self.send_and_expect_bridged(
+            eps[2].itf, pkt_intra_epg_221_to_uplink * NUM_PKTS, eps[2].epg.uplink
+        )
 
         #
         # Packets from the uplink are forwarded in the absence of a contract
         #
 
         #
         # Packets from the uplink are forwarded in the absence of a contract
         #
-        pkt_intra_epg_220_from_uplink = (Ether(src="00:00:00:33:44:55",
-                                               dst=self.pg0.remote_mac) /
-                                         IP(src=eps[0].ip4,
-                                            dst="10.0.0.99") /
-                                         UDP(sport=1234, dport=1234) /
-                                         Raw(b'\xa5' * 100))
+        pkt_intra_epg_220_from_uplink = (
+            Ether(src="00:00:00:33:44:55", dst=self.pg0.remote_mac)
+            / IP(src=eps[0].ip4, dst="10.0.0.99")
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
 
 
-        self.send_and_expect_bridged(self.pg4,
-                                     pkt_intra_epg_220_from_uplink * NUM_PKTS,
-                                     self.pg0)
+        self.send_and_expect_bridged(
+            self.pg4, pkt_intra_epg_220_from_uplink * NUM_PKTS, self.pg0
+        )
 
         #
         # in the absence of policy, endpoints in the same EPG
         # can communicate
         #
 
         #
         # in the absence of policy, endpoints in the same EPG
         # can communicate
         #
-        pkt_intra_epg = (Ether(src=self.pg0.remote_mac,
-                               dst=self.pg1.remote_mac) /
-                         IP(src=eps[0].ip4,
-                            dst=eps[1].ip4) /
-                         UDP(sport=1234, dport=1234) /
-                         Raw(b'\xa5' * 100))
+        pkt_intra_epg = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg1.remote_mac)
+            / IP(src=eps[0].ip4, dst=eps[1].ip4)
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
 
 
-        self.send_and_expect_bridged(self.pg0,
-                                     pkt_intra_epg * NUM_PKTS,
-                                     self.pg1)
+        self.send_and_expect_bridged(self.pg0, pkt_intra_epg * NUM_PKTS, self.pg1)
 
         #
         # in the absence of policy, endpoints in the different EPG
         # cannot communicate
         #
 
         #
         # in the absence of policy, endpoints in the different EPG
         # cannot communicate
         #
-        pkt_inter_epg_220_to_221 = (Ether(src=self.pg0.remote_mac,
-                                          dst=self.pg2.remote_mac) /
-                                    IP(src=eps[0].ip4,
-                                       dst=eps[2].ip4) /
-                                    UDP(sport=1234, dport=1234) /
-                                    Raw(b'\xa5' * 100))
-        pkt_inter_epg_221_to_220 = (Ether(src=self.pg2.remote_mac,
-                                          dst=self.pg0.remote_mac) /
-                                    IP(src=eps[2].ip4,
-                                       dst=eps[0].ip4) /
-                                    UDP(sport=1234, dport=1234) /
-                                    Raw(b'\xa5' * 100))
-        pkt_inter_epg_220_to_222 = (Ether(src=self.pg0.remote_mac,
-                                          dst=str(self.router_mac)) /
-                                    IP(src=eps[0].ip4,
-                                       dst=eps[3].ip4) /
-                                    UDP(sport=1234, dport=1234) /
-                                    Raw(b'\xa5' * 100))
-
-        self.send_and_assert_no_replies(eps[0].itf,
-                                        pkt_inter_epg_220_to_221 * NUM_PKTS)
-        self.send_and_assert_no_replies(eps[0].itf,
-                                        pkt_inter_epg_220_to_222 * NUM_PKTS)
+        pkt_inter_epg_220_to_221 = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg2.remote_mac)
+            / IP(src=eps[0].ip4, dst=eps[2].ip4)
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
+        pkt_inter_epg_221_to_220 = (
+            Ether(src=self.pg2.remote_mac, dst=self.pg0.remote_mac)
+            / IP(src=eps[2].ip4, dst=eps[0].ip4)
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
+        pkt_inter_epg_220_to_222 = (
+            Ether(src=self.pg0.remote_mac, dst=str(self.router_mac))
+            / IP(src=eps[0].ip4, dst=eps[3].ip4)
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
+
+        self.send_and_assert_no_replies(eps[0].itf, pkt_inter_epg_220_to_221 * NUM_PKTS)
+        self.send_and_assert_no_replies(eps[0].itf, pkt_inter_epg_220_to_222 * NUM_PKTS)
 
         #
         # A uni-directional contract from EPG 220 -> 221
         #
         rule = AclRule(is_permit=1, proto=17)
 
         #
         # A uni-directional contract from EPG 220 -> 221
         #
         rule = AclRule(is_permit=1, proto=17)
-        rule2 = AclRule(src_prefix=IPv6Network((0, 0)),
-                        dst_prefix=IPv6Network((0, 0)), is_permit=1, proto=17)
+        rule2 = AclRule(
+            src_prefix=IPv6Network((0, 0)),
+            dst_prefix=IPv6Network((0, 0)),
+            is_permit=1,
+            proto=17,
+        )
         acl = VppAcl(self, rules=[rule, rule2])
         acl.add_vpp_config()
 
         c1 = VppGbpContract(
         acl = VppAcl(self, rules=[rule, rule2])
         acl.add_vpp_config()
 
         c1 = VppGbpContract(
-            self, 400, epgs[0].sclass, epgs[1].sclass, acl.acl_index,
-            [VppGbpContractRule(
-                VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
-                VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
-                []),
+            self,
+            400,
+            epgs[0].sclass,
+            epgs[1].sclass,
+            acl.acl_index,
+            [
+                VppGbpContractRule(
+                    VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
+                    VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
+                    [],
+                ),
                 VppGbpContractRule(
                     VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
                     VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
                 VppGbpContractRule(
                     VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
                     VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
-                    [])],
-            [ETH_P_IP, ETH_P_IPV6])
+                    [],
+                ),
+            ],
+            [ETH_P_IP, ETH_P_IPV6],
+        )
         c1.add_vpp_config()
 
         c1.add_vpp_config()
 
-        self.send_and_expect_bridged(eps[0].itf,
-                                     pkt_inter_epg_220_to_221 * NUM_PKTS,
-                                     eps[2].itf)
-        self.send_and_assert_no_replies(eps[0].itf,
-                                        pkt_inter_epg_220_to_222 * NUM_PKTS)
+        self.send_and_expect_bridged(
+            eps[0].itf, pkt_inter_epg_220_to_221 * NUM_PKTS, eps[2].itf
+        )
+        self.send_and_assert_no_replies(eps[0].itf, pkt_inter_epg_220_to_222 * NUM_PKTS)
 
         #
         # contract for the return direction
         #
         c2 = VppGbpContract(
 
         #
         # contract for the return direction
         #
         c2 = VppGbpContract(
-            self, 400, epgs[1].sclass, epgs[0].sclass, acl.acl_index,
-            [VppGbpContractRule(
-                VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
-                VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
-                []),
+            self,
+            400,
+            epgs[1].sclass,
+            epgs[0].sclass,
+            acl.acl_index,
+            [
                 VppGbpContractRule(
                     VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
                     VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
                 VppGbpContractRule(
                     VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
                     VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
-                    [])],
-            [ETH_P_IP, ETH_P_IPV6])
+                    [],
+                ),
+                VppGbpContractRule(
+                    VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
+                    VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
+                    [],
+                ),
+            ],
+            [ETH_P_IP, ETH_P_IPV6],
+        )
         c2.add_vpp_config()
 
         c2.add_vpp_config()
 
-        self.send_and_expect_bridged(eps[0].itf,
-                                     pkt_inter_epg_220_to_221 * NUM_PKTS,
-                                     eps[2].itf)
-        self.send_and_expect_bridged(eps[2].itf,
-                                     pkt_inter_epg_221_to_220 * NUM_PKTS,
-                                     eps[0].itf)
+        self.send_and_expect_bridged(
+            eps[0].itf, pkt_inter_epg_220_to_221 * NUM_PKTS, eps[2].itf
+        )
+        self.send_and_expect_bridged(
+            eps[2].itf, pkt_inter_epg_221_to_220 * NUM_PKTS, eps[0].itf
+        )
 
         ds = c2.get_drop_stats()
 
         ds = c2.get_drop_stats()
-        self.assertEqual(ds['packets'], 0)
+        self.assertEqual(ds["packets"], 0)
         ps = c2.get_permit_stats()
         ps = c2.get_permit_stats()
-        self.assertEqual(ps['packets'], NUM_PKTS)
+        self.assertEqual(ps["packets"], NUM_PKTS)
 
         #
         # the contract does not allow non-IP
         #
 
         #
         # the contract does not allow non-IP
         #
-        pkt_non_ip_inter_epg_220_to_221 = (Ether(src=self.pg0.remote_mac,
-                                                 dst=self.pg2.remote_mac) /
-                                           ARP())
-        self.send_and_assert_no_replies(eps[0].itf,
-                                        pkt_non_ip_inter_epg_220_to_221 * 17)
+        pkt_non_ip_inter_epg_220_to_221 = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg2.remote_mac) / ARP()
+        )
+        self.send_and_assert_no_replies(
+            eps[0].itf, pkt_non_ip_inter_epg_220_to_221 * 17
+        )
 
         #
         # check that inter group is still disabled for the groups
         # not in the contract.
         #
 
         #
         # check that inter group is still disabled for the groups
         # not in the contract.
         #
-        self.send_and_assert_no_replies(eps[0].itf,
-                                        pkt_inter_epg_220_to_222 * NUM_PKTS)
+        self.send_and_assert_no_replies(eps[0].itf, pkt_inter_epg_220_to_222 * NUM_PKTS)
 
         #
         # A uni-directional contract from EPG 220 -> 222 'L3 routed'
         #
         c3 = VppGbpContract(
 
         #
         # A uni-directional contract from EPG 220 -> 222 'L3 routed'
         #
         c3 = VppGbpContract(
-            self, 400, epgs[0].sclass, epgs[2].sclass, acl.acl_index,
-            [VppGbpContractRule(
-                VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
-                VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
-                []),
+            self,
+            400,
+            epgs[0].sclass,
+            epgs[2].sclass,
+            acl.acl_index,
+            [
+                VppGbpContractRule(
+                    VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
+                    VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
+                    [],
+                ),
                 VppGbpContractRule(
                     VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
                     VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
                 VppGbpContractRule(
                     VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
                     VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
-                    [])],
-            [ETH_P_IP, ETH_P_IPV6])
+                    [],
+                ),
+            ],
+            [ETH_P_IP, ETH_P_IPV6],
+        )
         c3.add_vpp_config()
 
         self.logger.info(self.vapi.cli("sh gbp contract"))
 
         c3.add_vpp_config()
 
         self.logger.info(self.vapi.cli("sh gbp contract"))
 
-        self.send_and_expect_routed(eps[0].itf,
-                                    pkt_inter_epg_220_to_222 * NUM_PKTS,
-                                    eps[3].itf,
-                                    str(self.router_mac))
+        self.send_and_expect_routed(
+            eps[0].itf,
+            pkt_inter_epg_220_to_222 * NUM_PKTS,
+            eps[3].itf,
+            str(self.router_mac),
+        )
         #
         # remove both contracts, traffic stops in both directions
         #
         #
         # remove both contracts, traffic stops in both directions
         #
@@ -1364,13 +1539,9 @@ class TestGBP(VppTestCase):
         c3.remove_vpp_config()
         acl.remove_vpp_config()
 
         c3.remove_vpp_config()
         acl.remove_vpp_config()
 
-        self.send_and_assert_no_replies(eps[2].itf,
-                                        pkt_inter_epg_221_to_220 * NUM_PKTS)
-        self.send_and_assert_no_replies(eps[0].itf,
-                                        pkt_inter_epg_220_to_221 * NUM_PKTS)
-        self.send_and_expect_bridged(eps[0].itf,
-                                     pkt_intra_epg * NUM_PKTS,
-                                     eps[1].itf)
+        self.send_and_assert_no_replies(eps[2].itf, pkt_inter_epg_221_to_220 * NUM_PKTS)
+        self.send_and_assert_no_replies(eps[0].itf, pkt_inter_epg_220_to_221 * NUM_PKTS)
+        self.send_and_expect_bridged(eps[0].itf, pkt_intra_epg * NUM_PKTS, eps[1].itf)
 
         #
         # EPs to the outside world
 
         #
         # EPs to the outside world
@@ -1378,36 +1549,60 @@ class TestGBP(VppTestCase):
 
         # in the EP's RD an external subnet via the NAT EPG's recirc
         se1 = VppGbpSubnet(
 
         # in the EP's RD an external subnet via the NAT EPG's recirc
         se1 = VppGbpSubnet(
-            self, rd0, "0.0.0.0", 0,
+            self,
+            rd0,
+            "0.0.0.0",
+            0,
             VppEnum.vl_api_gbp_subnet_type_t.GBP_API_SUBNET_STITCHED_EXTERNAL,
             sw_if_index=recirc_nat.recirc.sw_if_index,
             VppEnum.vl_api_gbp_subnet_type_t.GBP_API_SUBNET_STITCHED_EXTERNAL,
             sw_if_index=recirc_nat.recirc.sw_if_index,
-            sclass=epg_nat.sclass)
+            sclass=epg_nat.sclass,
+        )
         se2 = VppGbpSubnet(
         se2 = VppGbpSubnet(
-            self, rd0, "11.0.0.0", 8,
+            self,
+            rd0,
+            "11.0.0.0",
+            8,
             VppEnum.vl_api_gbp_subnet_type_t.GBP_API_SUBNET_STITCHED_EXTERNAL,
             sw_if_index=recirc_nat.recirc.sw_if_index,
             VppEnum.vl_api_gbp_subnet_type_t.GBP_API_SUBNET_STITCHED_EXTERNAL,
             sw_if_index=recirc_nat.recirc.sw_if_index,
-            sclass=epg_nat.sclass)
+            sclass=epg_nat.sclass,
+        )
         se16 = VppGbpSubnet(
         se16 = VppGbpSubnet(
-            self, rd0, "::", 0,
+            self,
+            rd0,
+            "::",
+            0,
             VppEnum.vl_api_gbp_subnet_type_t.GBP_API_SUBNET_STITCHED_EXTERNAL,
             sw_if_index=recirc_nat.recirc.sw_if_index,
             VppEnum.vl_api_gbp_subnet_type_t.GBP_API_SUBNET_STITCHED_EXTERNAL,
             sw_if_index=recirc_nat.recirc.sw_if_index,
-            sclass=epg_nat.sclass)
+            sclass=epg_nat.sclass,
+        )
         # in the NAT RD an external subnet via the NAT EPG's uplink
         se3 = VppGbpSubnet(
         # in the NAT RD an external subnet via the NAT EPG's uplink
         se3 = VppGbpSubnet(
-            self, rd20, "0.0.0.0", 0,
+            self,
+            rd20,
+            "0.0.0.0",
+            0,
             VppEnum.vl_api_gbp_subnet_type_t.GBP_API_SUBNET_STITCHED_EXTERNAL,
             sw_if_index=epg_nat.uplink.sw_if_index,
             VppEnum.vl_api_gbp_subnet_type_t.GBP_API_SUBNET_STITCHED_EXTERNAL,
             sw_if_index=epg_nat.uplink.sw_if_index,
-            sclass=epg_nat.sclass)
+            sclass=epg_nat.sclass,
+        )
         se36 = VppGbpSubnet(
         se36 = VppGbpSubnet(
-            self, rd20, "::", 0,
+            self,
+            rd20,
+            "::",
+            0,
             VppEnum.vl_api_gbp_subnet_type_t.GBP_API_SUBNET_STITCHED_EXTERNAL,
             sw_if_index=epg_nat.uplink.sw_if_index,
             VppEnum.vl_api_gbp_subnet_type_t.GBP_API_SUBNET_STITCHED_EXTERNAL,
             sw_if_index=epg_nat.uplink.sw_if_index,
-            sclass=epg_nat.sclass)
+            sclass=epg_nat.sclass,
+        )
         se4 = VppGbpSubnet(
         se4 = VppGbpSubnet(
-            self, rd20, "11.0.0.0", 8,
+            self,
+            rd20,
+            "11.0.0.0",
+            8,
             VppEnum.vl_api_gbp_subnet_type_t.GBP_API_SUBNET_STITCHED_EXTERNAL,
             sw_if_index=epg_nat.uplink.sw_if_index,
             VppEnum.vl_api_gbp_subnet_type_t.GBP_API_SUBNET_STITCHED_EXTERNAL,
             sw_if_index=epg_nat.uplink.sw_if_index,
-            sclass=epg_nat.sclass)
+            sclass=epg_nat.sclass,
+        )
         se1.add_vpp_config()
         se2.add_vpp_config()
         se16.add_vpp_config()
         se1.add_vpp_config()
         se2.add_vpp_config()
         se16.add_vpp_config()
@@ -1418,132 +1613,153 @@ class TestGBP(VppTestCase):
         self.logger.info(self.vapi.cli("sh ip fib 0.0.0.0/0"))
         self.logger.info(self.vapi.cli("sh ip fib 11.0.0.1"))
         self.logger.info(self.vapi.cli("sh ip6 fib ::/0"))
         self.logger.info(self.vapi.cli("sh ip fib 0.0.0.0/0"))
         self.logger.info(self.vapi.cli("sh ip fib 11.0.0.1"))
         self.logger.info(self.vapi.cli("sh ip6 fib ::/0"))
-        self.logger.info(self.vapi.cli("sh ip6 fib %s" %
-                                       eps[0].fip6))
+        self.logger.info(self.vapi.cli("sh ip6 fib %s" % eps[0].fip6))
 
         #
         # From an EP to an outside address: IN2OUT
         #
 
         #
         # From an EP to an outside address: IN2OUT
         #
-        pkt_inter_epg_220_to_global = (Ether(src=self.pg0.remote_mac,
-                                             dst=str(self.router_mac)) /
-                                       IP(src=eps[0].ip4,
-                                          dst="1.1.1.1") /
-                                       UDP(sport=1234, dport=1234) /
-                                       Raw(b'\xa5' * 100))
+        pkt_inter_epg_220_to_global = (
+            Ether(src=self.pg0.remote_mac, dst=str(self.router_mac))
+            / IP(src=eps[0].ip4, dst="1.1.1.1")
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
 
         # no policy yet
 
         # no policy yet
-        self.send_and_assert_no_replies(eps[0].itf,
-                                        pkt_inter_epg_220_to_global * NUM_PKTS)
+        self.send_and_assert_no_replies(
+            eps[0].itf, pkt_inter_epg_220_to_global * NUM_PKTS
+        )
         rule = AclRule(is_permit=1, proto=17, ports=1234)
         rule = AclRule(is_permit=1, proto=17, ports=1234)
-        rule2 = AclRule(is_permit=1, proto=17, ports=1234,
-                        src_prefix=IPv6Network((0, 0)),
-                        dst_prefix=IPv6Network((0, 0)))
+        rule2 = AclRule(
+            is_permit=1,
+            proto=17,
+            ports=1234,
+            src_prefix=IPv6Network((0, 0)),
+            dst_prefix=IPv6Network((0, 0)),
+        )
         acl2 = VppAcl(self, rules=[rule, rule2])
         acl2.add_vpp_config()
 
         c4 = VppGbpContract(
         acl2 = VppAcl(self, rules=[rule, rule2])
         acl2.add_vpp_config()
 
         c4 = VppGbpContract(
-            self, 400, epgs[0].sclass, epgs[3].sclass, acl2.acl_index,
-            [VppGbpContractRule(
-                VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
-                VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
-                []),
+            self,
+            400,
+            epgs[0].sclass,
+            epgs[3].sclass,
+            acl2.acl_index,
+            [
+                VppGbpContractRule(
+                    VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
+                    VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
+                    [],
+                ),
                 VppGbpContractRule(
                     VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
                     VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
                 VppGbpContractRule(
                     VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
                     VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
-                    [])],
-            [ETH_P_IP, ETH_P_IPV6])
+                    [],
+                ),
+            ],
+            [ETH_P_IP, ETH_P_IPV6],
+        )
         c4.add_vpp_config()
 
         c4.add_vpp_config()
 
-        self.send_and_expect_natted(eps[0].itf,
-                                    pkt_inter_epg_220_to_global * NUM_PKTS,
-                                    self.pg7,
-                                    eps[0].fip4)
+        self.send_and_expect_natted(
+            eps[0].itf, pkt_inter_epg_220_to_global * NUM_PKTS, self.pg7, eps[0].fip4
+        )
 
 
-        pkt_inter_epg_220_to_global = (Ether(src=self.pg0.remote_mac,
-                                             dst=str(self.router_mac)) /
-                                       IPv6(src=eps[0].ip6,
-                                            dst="6001::1") /
-                                       UDP(sport=1234, dport=1234) /
-                                       Raw(b'\xa5' * 100))
+        pkt_inter_epg_220_to_global = (
+            Ether(src=self.pg0.remote_mac, dst=str(self.router_mac))
+            / IPv6(src=eps[0].ip6, dst="6001::1")
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
 
 
-        self.send_and_expect_natted6(self.pg0,
-                                     pkt_inter_epg_220_to_global * NUM_PKTS,
-                                     self.pg7,
-                                     eps[0].fip6)
+        self.send_and_expect_natted6(
+            self.pg0, pkt_inter_epg_220_to_global * NUM_PKTS, self.pg7, eps[0].fip6
+        )
         #
         # From a global address to an EP: OUT2IN
         #
         #
         # From a global address to an EP: OUT2IN
         #
-        pkt_inter_epg_220_from_global = (Ether(src=str(self.router_mac),
-                                               dst=self.pg0.remote_mac) /
-                                         IP(dst=eps[0].fip4,
-                                            src="1.1.1.1") /
-                                         UDP(sport=1234, dport=1234) /
-                                         Raw(b'\xa5' * 100))
+        pkt_inter_epg_220_from_global = (
+            Ether(src=str(self.router_mac), dst=self.pg0.remote_mac)
+            / IP(dst=eps[0].fip4, src="1.1.1.1")
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
 
         self.send_and_assert_no_replies(
 
         self.send_and_assert_no_replies(
-            self.pg7, pkt_inter_epg_220_from_global * NUM_PKTS)
+            self.pg7, pkt_inter_epg_220_from_global * NUM_PKTS
+        )
 
         c5 = VppGbpContract(
 
         c5 = VppGbpContract(
-            self, 400, epgs[3].sclass, epgs[0].sclass, acl2.acl_index,
-            [VppGbpContractRule(
-                VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
-                VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
-                []),
+            self,
+            400,
+            epgs[3].sclass,
+            epgs[0].sclass,
+            acl2.acl_index,
+            [
+                VppGbpContractRule(
+                    VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
+                    VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
+                    [],
+                ),
                 VppGbpContractRule(
                     VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
                     VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
                 VppGbpContractRule(
                     VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
                     VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
-                    [])],
-            [ETH_P_IP, ETH_P_IPV6])
+                    [],
+                ),
+            ],
+            [ETH_P_IP, ETH_P_IPV6],
+        )
         c5.add_vpp_config()
 
         c5.add_vpp_config()
 
-        self.send_and_expect_unnatted(self.pg7,
-                                      pkt_inter_epg_220_from_global * NUM_PKTS,
-                                      eps[0].itf,
-                                      eps[0].ip4)
+        self.send_and_expect_unnatted(
+            self.pg7, pkt_inter_epg_220_from_global * NUM_PKTS, eps[0].itf, eps[0].ip4
+        )
 
 
-        pkt_inter_epg_220_from_global = (Ether(src=str(self.router_mac),
-                                               dst=self.pg0.remote_mac) /
-                                         IPv6(dst=eps[0].fip6,
-                                              src="6001::1") /
-                                         UDP(sport=1234, dport=1234) /
-                                         Raw(b'\xa5' * 100))
+        pkt_inter_epg_220_from_global = (
+            Ether(src=str(self.router_mac), dst=self.pg0.remote_mac)
+            / IPv6(dst=eps[0].fip6, src="6001::1")
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
 
         self.send_and_expect_unnatted6(
 
         self.send_and_expect_unnatted6(
-            self.pg7,
-            pkt_inter_epg_220_from_global * NUM_PKTS,
-            eps[0].itf,
-            eps[0].ip6)
+            self.pg7, pkt_inter_epg_220_from_global * NUM_PKTS, eps[0].itf, eps[0].ip6
+        )
 
         #
         # From a local VM to another local VM using resp. public addresses:
         #  IN2OUT2IN
         #
 
         #
         # From a local VM to another local VM using resp. public addresses:
         #  IN2OUT2IN
         #
-        pkt_intra_epg_220_global = (Ether(src=self.pg0.remote_mac,
-                                          dst=str(self.router_mac)) /
-                                    IP(src=eps[0].ip4,
-                                       dst=eps[1].fip4) /
-                                    UDP(sport=1234, dport=1234) /
-                                    Raw(b'\xa5' * 100))
-
-        self.send_and_expect_double_natted(eps[0].itf,
-                                           pkt_intra_epg_220_global * NUM_PKTS,
-                                           eps[1].itf,
-                                           eps[0].fip4,
-                                           eps[1].ip4)
-
-        pkt_intra_epg_220_global = (Ether(src=self.pg0.remote_mac,
-                                          dst=str(self.router_mac)) /
-                                    IPv6(src=eps[0].ip6,
-                                         dst=eps[1].fip6) /
-                                    UDP(sport=1234, dport=1234) /
-                                    Raw(b'\xa5' * 100))
+        pkt_intra_epg_220_global = (
+            Ether(src=self.pg0.remote_mac, dst=str(self.router_mac))
+            / IP(src=eps[0].ip4, dst=eps[1].fip4)
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
+
+        self.send_and_expect_double_natted(
+            eps[0].itf,
+            pkt_intra_epg_220_global * NUM_PKTS,
+            eps[1].itf,
+            eps[0].fip4,
+            eps[1].ip4,
+        )
+
+        pkt_intra_epg_220_global = (
+            Ether(src=self.pg0.remote_mac, dst=str(self.router_mac))
+            / IPv6(src=eps[0].ip6, dst=eps[1].fip6)
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
 
         self.send_and_expect_double_natted6(
             eps[0].itf,
             pkt_intra_epg_220_global * NUM_PKTS,
             eps[1].itf,
             eps[0].fip6,
 
         self.send_and_expect_double_natted6(
             eps[0].itf,
             pkt_intra_epg_220_global * NUM_PKTS,
             eps[1].itf,
             eps[0].fip6,
-            eps[1].ip6)
+            eps[1].ip6,
+        )
 
         #
         # cleanup
 
         #
         # cleanup
@@ -1551,36 +1767,37 @@ class TestGBP(VppTestCase):
         self.vapi.nat44_ed_plugin_enable_disable(enable=0)
         self.vapi.nat66_plugin_enable_disable(enable=0)
 
         self.vapi.nat44_ed_plugin_enable_disable(enable=0)
         self.vapi.nat66_plugin_enable_disable(enable=0)
 
-    def wait_for_ep_timeout(self, sw_if_index=None, ip=None, mac=None,
-                            tep=None, n_tries=100, s_time=1):
+    def wait_for_ep_timeout(
+        self, sw_if_index=None, ip=None, mac=None, tep=None, n_tries=100, s_time=1
+    ):
         # only learnt EP can timeout
         ep_flags = VppEnum.vl_api_gbp_endpoint_flags_t
         flags = ep_flags.GBP_API_ENDPOINT_FLAG_LEARNT
         # only learnt EP can timeout
         ep_flags = VppEnum.vl_api_gbp_endpoint_flags_t
         flags = ep_flags.GBP_API_ENDPOINT_FLAG_LEARNT
-        while (n_tries):
-            if not find_gbp_endpoint(self, sw_if_index, ip, mac, tep=tep,
-                                     flags=flags):
+        while n_tries:
+            if not find_gbp_endpoint(self, sw_if_index, ip, mac, tep=tep, flags=flags):
                 return True
             n_tries = n_tries - 1
             self.sleep(s_time)
                 return True
             n_tries = n_tries - 1
             self.sleep(s_time)
-        self.assertFalse(find_gbp_endpoint(self, sw_if_index, ip, mac, tep=tep,
-                                           flags=flags))
+        self.assertFalse(
+            find_gbp_endpoint(self, sw_if_index, ip, mac, tep=tep, flags=flags)
+        )
         return False
 
     def test_gbp_learn_l2(self):
         return False
 
     def test_gbp_learn_l2(self):
-        """ GBP L2 Endpoint Learning """
+        """GBP L2 Endpoint Learning"""
 
         drop_no_contract = self.statistics.get_err_counter(
 
         drop_no_contract = self.statistics.get_err_counter(
-            '/err/gbp-policy-port/drop-no-contract')
+            "/err/gbp-policy-port/drop-no-contract"
+        )
         allow_intra_class = self.statistics.get_err_counter(
         allow_intra_class = self.statistics.get_err_counter(
-            '/err/gbp-policy-port/allow-intra-sclass')
+            "/err/gbp-policy-port/allow-intra-sclass"
+        )
 
         ep_flags = VppEnum.vl_api_gbp_endpoint_flags_t
 
         ep_flags = VppEnum.vl_api_gbp_endpoint_flags_t
-        learnt = [{'mac': '00:00:11:11:11:01',
-                   'ip': '10.0.0.1',
-                   'ip6': '2001:10::2'},
-                  {'mac': '00:00:11:11:11:02',
-                   'ip': '10.0.0.2',
-                   'ip6': '2001:10::3'}]
+        learnt = [
+            {"mac": "00:00:11:11:11:01", "ip": "10.0.0.1", "ip6": "2001:10::2"},
+            {"mac": "00:00:11:11:11:02", "ip": "10.0.0.2", "ip6": "2001:10::3"},
+        ]
 
         #
         # IP tables
 
         #
         # IP tables
@@ -1610,9 +1827,9 @@ class TestGBP(VppTestCase):
         #
         # Add a mcast destination VXLAN-GBP tunnel for B&M traffic
         #
         #
         # Add a mcast destination VXLAN-GBP tunnel for B&M traffic
         #
-        tun_bm = VppVxlanGbpTunnel(self, self.pg4.local_ip4,
-                                   "239.1.1.1", 88,
-                                   mcast_itf=self.pg4)
+        tun_bm = VppVxlanGbpTunnel(
+            self, self.pg4.local_ip4, "239.1.1.1", 88, mcast_itf=self.pg4
+        )
         tun_bm.add_vpp_config()
 
         #
         tun_bm.add_vpp_config()
 
         #
@@ -1620,8 +1837,7 @@ class TestGBP(VppTestCase):
         #
         bd1 = VppBridgeDomain(self, 1)
         bd1.add_vpp_config()
         #
         bd1 = VppBridgeDomain(self, 1)
         bd1.add_vpp_config()
-        gbd1 = VppGbpBridgeDomain(self, bd1, rd1, self.loop0,
-                                  self.pg3, tun_bm)
+        gbd1 = VppGbpBridgeDomain(self, bd1, rd1, self.loop0, self.pg3, tun_bm)
         gbd1.add_vpp_config()
 
         self.logger.info(self.vapi.cli("sh bridge 1 detail"))
         gbd1.add_vpp_config()
 
         self.logger.info(self.vapi.cli("sh bridge 1 detail"))
@@ -1634,17 +1850,31 @@ class TestGBP(VppTestCase):
         #
         # The Endpoint-group in which we are learning endpoints
         #
         #
         # The Endpoint-group in which we are learning endpoints
         #
-        epg_220 = VppGbpEndpointGroup(self, 220, 112, rd1, gbd1,
-                                      None, self.loop0,
-                                      "10.0.0.128",
-                                      "2001:10::128",
-                                      VppGbpEndpointRetention(4))
+        epg_220 = VppGbpEndpointGroup(
+            self,
+            220,
+            112,
+            rd1,
+            gbd1,
+            None,
+            self.loop0,
+            "10.0.0.128",
+            "2001:10::128",
+            VppGbpEndpointRetention(4),
+        )
         epg_220.add_vpp_config()
         epg_220.add_vpp_config()
-        epg_330 = VppGbpEndpointGroup(self, 330, 113, rd1, gbd1,
-                                      None, self.loop1,
-                                      "10.0.1.128",
-                                      "2001:11::128",
-                                      VppGbpEndpointRetention(4))
+        epg_330 = VppGbpEndpointGroup(
+            self,
+            330,
+            113,
+            rd1,
+            gbd1,
+            None,
+            self.loop1,
+            "10.0.1.128",
+            "2001:11::128",
+            VppGbpEndpointRetention(4),
+        )
         epg_330.add_vpp_config()
 
         #
         epg_330.add_vpp_config()
 
         #
@@ -1652,51 +1882,61 @@ class TestGBP(VppTestCase):
         # learning enabled
         #
         vx_tun_l2_1 = VppGbpVxlanTunnel(
         # learning enabled
         #
         vx_tun_l2_1 = VppGbpVxlanTunnel(
-            self, 99, bd1.bd_id,
+            self,
+            99,
+            bd1.bd_id,
             VppEnum.vl_api_gbp_vxlan_tunnel_mode_t.GBP_VXLAN_TUNNEL_MODE_L2,
             VppEnum.vl_api_gbp_vxlan_tunnel_mode_t.GBP_VXLAN_TUNNEL_MODE_L2,
-            self.pg2.local_ip4)
+            self.pg2.local_ip4,
+        )
         vx_tun_l2_1.add_vpp_config()
 
         #
         # A static endpoint that the learnt endpoints are trying to
         # talk to
         #
         vx_tun_l2_1.add_vpp_config()
 
         #
         # A static endpoint that the learnt endpoints are trying to
         # talk to
         #
-        ep = VppGbpEndpoint(self, self.pg0,
-                            epg_220, None,
-                            "10.0.0.127", "11.0.0.127",
-                            "2001:10::1", "3001::1")
+        ep = VppGbpEndpoint(
+            self,
+            self.pg0,
+            epg_220,
+            None,
+            "10.0.0.127",
+            "11.0.0.127",
+            "2001:10::1",
+            "3001::1",
+        )
         ep.add_vpp_config()
 
         self.assertTrue(find_route(self, ep.ip4, 32, table_id=1))
 
         # a packet with an sclass from an unknown EPG
         ep.add_vpp_config()
 
         self.assertTrue(find_route(self, ep.ip4, 32, table_id=1))
 
         # a packet with an sclass from an unknown EPG
-        p = (Ether(src=self.pg2.remote_mac,
-                   dst=self.pg2.local_mac) /
-             IP(src=self.pg2.remote_hosts[0].ip4,
-                dst=self.pg2.local_ip4) /
-             UDP(sport=1234, dport=48879) /
-             VXLAN(vni=99, gpid=88, flags=0x88) /
-             Ether(src=learnt[0]["mac"], dst=ep.mac) /
-             IP(src=learnt[0]["ip"], dst=ep.ip4) /
-             UDP(sport=1234, dport=1234) /
-             Raw(b'\xa5' * 100))
+        p = (
+            Ether(src=self.pg2.remote_mac, dst=self.pg2.local_mac)
+            / IP(src=self.pg2.remote_hosts[0].ip4, dst=self.pg2.local_ip4)
+            / UDP(sport=1234, dport=48879)
+            / VXLAN(vni=99, gpid=88, flags=0x88)
+            / Ether(src=learnt[0]["mac"], dst=ep.mac)
+            / IP(src=learnt[0]["ip"], dst=ep.ip4)
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
 
         self.send_and_assert_no_replies(self.pg2, p)
 
         self.logger.info(self.vapi.cli("sh error"))
         self.assert_error_counter_equal(
 
         self.send_and_assert_no_replies(self.pg2, p)
 
         self.logger.info(self.vapi.cli("sh error"))
         self.assert_error_counter_equal(
-            '/err/gbp-policy-port/drop-no-contract',
-            drop_no_contract + 1)
+            "/err/gbp-policy-port/drop-no-contract", drop_no_contract + 1
+        )
 
         #
         # we should not have learnt a new tunnel endpoint, since
         # the EPG was not learnt.
         #
 
         #
         # we should not have learnt a new tunnel endpoint, since
         # the EPG was not learnt.
         #
-        self.assertEqual(INDEX_INVALID,
-                         find_vxlan_gbp_tunnel(self,
-                                               self.pg2.local_ip4,
-                                               self.pg2.remote_hosts[0].ip4,
-                                               99))
+        self.assertEqual(
+            INDEX_INVALID,
+            find_vxlan_gbp_tunnel(
+                self, self.pg2.local_ip4, self.pg2.remote_hosts[0].ip4, 99
+            ),
+        )
 
         # ep is not learnt, because the EPG is unknown
         self.assertEqual(len(self.vapi.gbp_endpoint_dump()), 1)
 
         # ep is not learnt, because the EPG is unknown
         self.assertEqual(len(self.vapi.gbp_endpoint_dump()), 1)
@@ -1707,41 +1947,39 @@ class TestGBP(VppTestCase):
         for ii, l in enumerate(learnt):
             # a packet with an sclass from a known EPG
             # arriving on an unknown TEP
         for ii, l in enumerate(learnt):
             # a packet with an sclass from a known EPG
             # arriving on an unknown TEP
-            p = (Ether(src=self.pg2.remote_mac,
-                       dst=self.pg2.local_mac) /
-                 IP(src=self.pg2.remote_hosts[1].ip4,
-                    dst=self.pg2.local_ip4) /
-                 UDP(sport=1234, dport=48879) /
-                 VXLAN(vni=99, gpid=112, flags=0x88) /
-                 Ether(src=l['mac'], dst=ep.mac) /
-                 IP(src=l['ip'], dst=ep.ip4) /
-                 UDP(sport=1234, dport=1234) /
-                 Raw(b'\xa5' * 100))
+            p = (
+                Ether(src=self.pg2.remote_mac, dst=self.pg2.local_mac)
+                / IP(src=self.pg2.remote_hosts[1].ip4, dst=self.pg2.local_ip4)
+                / UDP(sport=1234, dport=48879)
+                / VXLAN(vni=99, gpid=112, flags=0x88)
+                / Ether(src=l["mac"], dst=ep.mac)
+                / IP(src=l["ip"], dst=ep.ip4)
+                / UDP(sport=1234, dport=1234)
+                / Raw(b"\xa5" * 100)
+            )
 
             rx = self.send_and_expect(self.pg2, [p], self.pg0)
 
             # the new TEP
             tep1_sw_if_index = find_vxlan_gbp_tunnel(
 
             rx = self.send_and_expect(self.pg2, [p], self.pg0)
 
             # the new TEP
             tep1_sw_if_index = find_vxlan_gbp_tunnel(
-                self,
-                self.pg2.local_ip4,
-                self.pg2.remote_hosts[1].ip4,
-                99)
+                self, self.pg2.local_ip4, self.pg2.remote_hosts[1].ip4, 99
+            )
             self.assertNotEqual(INDEX_INVALID, tep1_sw_if_index)
 
             #
             # the EP is learnt via the learnt TEP
             # both from its MAC and its IP
             #
             self.assertNotEqual(INDEX_INVALID, tep1_sw_if_index)
 
             #
             # the EP is learnt via the learnt TEP
             # both from its MAC and its IP
             #
-            self.assertTrue(find_gbp_endpoint(self,
-                                              vx_tun_l2_1.sw_if_index,
-                                              mac=l['mac']))
-            self.assertTrue(find_gbp_endpoint(self,
-                                              vx_tun_l2_1.sw_if_index,
-                                              ip=l['ip']))
+            self.assertTrue(
+                find_gbp_endpoint(self, vx_tun_l2_1.sw_if_index, mac=l["mac"])
+            )
+            self.assertTrue(
+                find_gbp_endpoint(self, vx_tun_l2_1.sw_if_index, ip=l["ip"])
+            )
 
         self.assert_error_counter_equal(
 
         self.assert_error_counter_equal(
-            '/err/gbp-policy-port/allow-intra-sclass',
-            allow_intra_class + 2)
+            "/err/gbp-policy-port/allow-intra-sclass", allow_intra_class + 2
+        )
 
         self.logger.info(self.vapi.cli("show gbp endpoint"))
         self.logger.info(self.vapi.cli("show gbp vxlan"))
 
         self.logger.info(self.vapi.cli("show gbp endpoint"))
         self.logger.info(self.vapi.cli("show gbp vxlan"))
@@ -1752,8 +1990,7 @@ class TestGBP(VppTestCase):
         # age out
         #
         for l in learnt:
         # age out
         #
         for l in learnt:
-            self.wait_for_ep_timeout(vx_tun_l2_1.sw_if_index,
-                                     mac=l['mac'])
+            self.wait_for_ep_timeout(vx_tun_l2_1.sw_if_index, mac=l["mac"])
 
         #
         # Learn new EPs from GARP packets received on the BD's mcast tunnel
 
         #
         # Learn new EPs from GARP packets received on the BD's mcast tunnel
@@ -1762,44 +1999,45 @@ class TestGBP(VppTestCase):
             # add some junk in the reserved field of the vxlan-header
             # next to the VNI. we should accept since reserved bits are
             # ignored on rx.
             # add some junk in the reserved field of the vxlan-header
             # next to the VNI. we should accept since reserved bits are
             # ignored on rx.
-            p = (Ether(src=self.pg2.remote_mac,
-                       dst=self.pg2.local_mac) /
-                 IP(src=self.pg2.remote_hosts[1].ip4,
-                    dst="239.1.1.1") /
-                 UDP(sport=1234, dport=48879) /
-                 VXLAN(vni=88, reserved2=0x80, gpid=112, flags=0x88) /
-                 Ether(src=l['mac'], dst="ff:ff:ff:ff:ff:ff") /
-                 ARP(op="who-has",
-                     psrc=l['ip'], pdst=l['ip'],
-                     hwsrc=l['mac'], hwdst="ff:ff:ff:ff:ff:ff"))
+            p = (
+                Ether(src=self.pg2.remote_mac, dst=self.pg2.local_mac)
+                / IP(src=self.pg2.remote_hosts[1].ip4, dst="239.1.1.1")
+                / UDP(sport=1234, dport=48879)
+                / VXLAN(vni=88, reserved2=0x80, gpid=112, flags=0x88)
+                / Ether(src=l["mac"], dst="ff:ff:ff:ff:ff:ff")
+                / ARP(
+                    op="who-has",
+                    psrc=l["ip"],
+                    pdst=l["ip"],
+                    hwsrc=l["mac"],
+                    hwdst="ff:ff:ff:ff:ff:ff",
+                )
+            )
 
             rx = self.send_and_expect(self.pg4, [p], self.pg0)
 
             # the new TEP
             tep1_sw_if_index = find_vxlan_gbp_tunnel(
 
             rx = self.send_and_expect(self.pg4, [p], self.pg0)
 
             # the new TEP
             tep1_sw_if_index = find_vxlan_gbp_tunnel(
-                self,
-                self.pg2.local_ip4,
-                self.pg2.remote_hosts[1].ip4,
-                99)
+                self, self.pg2.local_ip4, self.pg2.remote_hosts[1].ip4, 99
+            )
             self.assertNotEqual(INDEX_INVALID, tep1_sw_if_index)
 
             #
             # the EP is learnt via the learnt TEP
             # both from its MAC and its IP
             #
             self.assertNotEqual(INDEX_INVALID, tep1_sw_if_index)
 
             #
             # the EP is learnt via the learnt TEP
             # both from its MAC and its IP
             #
-            self.assertTrue(find_gbp_endpoint(self,
-                                              vx_tun_l2_1.sw_if_index,
-                                              mac=l['mac']))
-            self.assertTrue(find_gbp_endpoint(self,
-                                              vx_tun_l2_1.sw_if_index,
-                                              ip=l['ip']))
+            self.assertTrue(
+                find_gbp_endpoint(self, vx_tun_l2_1.sw_if_index, mac=l["mac"])
+            )
+            self.assertTrue(
+                find_gbp_endpoint(self, vx_tun_l2_1.sw_if_index, ip=l["ip"])
+            )
 
         #
         # wait for the learnt endpoints to age out
         #
         for l in learnt:
 
         #
         # wait for the learnt endpoints to age out
         #
         for l in learnt:
-            self.wait_for_ep_timeout(vx_tun_l2_1.sw_if_index,
-                                     mac=l['mac'])
+            self.wait_for_ep_timeout(vx_tun_l2_1.sw_if_index, mac=l["mac"])
 
         #
         # Learn new EPs from L2 packets
 
         #
         # Learn new EPs from L2 packets
@@ -1807,32 +2045,30 @@ class TestGBP(VppTestCase):
         for ii, l in enumerate(learnt):
             # a packet with an sclass from a known EPG
             # arriving on an unknown TEP
         for ii, l in enumerate(learnt):
             # a packet with an sclass from a known EPG
             # arriving on an unknown TEP
-            p = (Ether(src=self.pg2.remote_mac,
-                       dst=self.pg2.local_mac) /
-                 IP(src=self.pg2.remote_hosts[1].ip4,
-                    dst=self.pg2.local_ip4) /
-                 UDP(sport=1234, dport=48879) /
-                 VXLAN(vni=99, gpid=112, flags=0x88) /
-                 Ether(src=l['mac'], dst=ep.mac) /
-                 Raw(b'\xa5' * 100))
+            p = (
+                Ether(src=self.pg2.remote_mac, dst=self.pg2.local_mac)
+                / IP(src=self.pg2.remote_hosts[1].ip4, dst=self.pg2.local_ip4)
+                / UDP(sport=1234, dport=48879)
+                / VXLAN(vni=99, gpid=112, flags=0x88)
+                / Ether(src=l["mac"], dst=ep.mac)
+                / Raw(b"\xa5" * 100)
+            )
 
             rx = self.send_and_expect(self.pg2, [p], self.pg0)
 
             # the new TEP
             tep1_sw_if_index = find_vxlan_gbp_tunnel(
 
             rx = self.send_and_expect(self.pg2, [p], self.pg0)
 
             # the new TEP
             tep1_sw_if_index = find_vxlan_gbp_tunnel(
-                self,
-                self.pg2.local_ip4,
-                self.pg2.remote_hosts[1].ip4,
-                99)
+                self, self.pg2.local_ip4, self.pg2.remote_hosts[1].ip4, 99
+            )
             self.assertNotEqual(INDEX_INVALID, tep1_sw_if_index)
 
             #
             # the EP is learnt via the learnt TEP
             # both from its MAC and its IP
             #
             self.assertNotEqual(INDEX_INVALID, tep1_sw_if_index)
 
             #
             # the EP is learnt via the learnt TEP
             # both from its MAC and its IP
             #
-            self.assertTrue(find_gbp_endpoint(self,
-                                              vx_tun_l2_1.sw_if_index,
-                                              mac=l['mac']))
+            self.assertTrue(
+                find_gbp_endpoint(self, vx_tun_l2_1.sw_if_index, mac=l["mac"])
+            )
 
         self.logger.info(self.vapi.cli("show gbp endpoint"))
         self.logger.info(self.vapi.cli("show gbp vxlan"))
 
         self.logger.info(self.vapi.cli("show gbp endpoint"))
         self.logger.info(self.vapi.cli("show gbp vxlan"))
@@ -1842,31 +2078,30 @@ class TestGBP(VppTestCase):
         # wait for the learnt endpoints to age out
         #
         for l in learnt:
         # wait for the learnt endpoints to age out
         #
         for l in learnt:
-            self.wait_for_ep_timeout(vx_tun_l2_1.sw_if_index,
-                                     mac=l['mac'])
+            self.wait_for_ep_timeout(vx_tun_l2_1.sw_if_index, mac=l["mac"])
 
         #
         # repeat. the do not learn bit is set so the EPs are not learnt
         #
         for l in learnt:
             # a packet with an sclass from a known EPG
 
         #
         # repeat. the do not learn bit is set so the EPs are not learnt
         #
         for l in learnt:
             # a packet with an sclass from a known EPG
-            p = (Ether(src=self.pg2.remote_mac,
-                       dst=self.pg2.local_mac) /
-                 IP(src=self.pg2.remote_hosts[1].ip4,
-                    dst=self.pg2.local_ip4) /
-                 UDP(sport=1234, dport=48879) /
-                 VXLAN(vni=99, gpid=112, flags=0x88, gpflags="D") /
-                 Ether(src=l['mac'], dst=ep.mac) /
-                 IP(src=l['ip'], dst=ep.ip4) /
-                 UDP(sport=1234, dport=1234) /
-                 Raw(b'\xa5' * 100))
+            p = (
+                Ether(src=self.pg2.remote_mac, dst=self.pg2.local_mac)
+                / IP(src=self.pg2.remote_hosts[1].ip4, dst=self.pg2.local_ip4)
+                / UDP(sport=1234, dport=48879)
+                / VXLAN(vni=99, gpid=112, flags=0x88, gpflags="D")
+                / Ether(src=l["mac"], dst=ep.mac)
+                / IP(src=l["ip"], dst=ep.ip4)
+                / UDP(sport=1234, dport=1234)
+                / Raw(b"\xa5" * 100)
+            )
 
             rx = self.send_and_expect(self.pg2, p * NUM_PKTS, self.pg0)
 
         for l in learnt:
 
             rx = self.send_and_expect(self.pg2, p * NUM_PKTS, self.pg0)
 
         for l in learnt:
-            self.assertFalse(find_gbp_endpoint(self,
-                                               vx_tun_l2_1.sw_if_index,
-                                               mac=l['mac']))
+            self.assertFalse(
+                find_gbp_endpoint(self, vx_tun_l2_1.sw_if_index, mac=l["mac"])
+            )
 
         #
         # repeat
 
         #
         # repeat
@@ -1875,32 +2110,34 @@ class TestGBP(VppTestCase):
             # a packet with an sclass from a known EPG
             # set a reserved bit in addition to the G and I
             # reserved bits should not be checked on rx.
             # a packet with an sclass from a known EPG
             # set a reserved bit in addition to the G and I
             # reserved bits should not be checked on rx.
-            p = (Ether(src=self.pg2.remote_mac,
-                       dst=self.pg2.local_mac) /
-                 IP(src=self.pg2.remote_hosts[1].ip4,
-                    dst=self.pg2.local_ip4) /
-                 UDP(sport=1234, dport=48879) /
-                 VXLAN(vni=99, gpid=112, flags=0xc8) /
-                 Ether(src=l['mac'], dst=ep.mac) /
-                 IP(src=l['ip'], dst=ep.ip4) /
-                 UDP(sport=1234, dport=1234) /
-                 Raw(b'\xa5' * 100))
+            p = (
+                Ether(src=self.pg2.remote_mac, dst=self.pg2.local_mac)
+                / IP(src=self.pg2.remote_hosts[1].ip4, dst=self.pg2.local_ip4)
+                / UDP(sport=1234, dport=48879)
+                / VXLAN(vni=99, gpid=112, flags=0xC8)
+                / Ether(src=l["mac"], dst=ep.mac)
+                / IP(src=l["ip"], dst=ep.ip4)
+                / UDP(sport=1234, dport=1234)
+                / Raw(b"\xa5" * 100)
+            )
 
             rx = self.send_and_expect(self.pg2, p * NUM_PKTS, self.pg0)
 
 
             rx = self.send_and_expect(self.pg2, p * NUM_PKTS, self.pg0)
 
-            self.assertTrue(find_gbp_endpoint(self,
-                                              vx_tun_l2_1.sw_if_index,
-                                              mac=l['mac']))
+            self.assertTrue(
+                find_gbp_endpoint(self, vx_tun_l2_1.sw_if_index, mac=l["mac"])
+            )
 
         #
         # Static EP replies to dynamics
         #
         self.logger.info(self.vapi.cli("sh l2fib bd_id 1"))
         for l in learnt:
 
         #
         # Static EP replies to dynamics
         #
         self.logger.info(self.vapi.cli("sh l2fib bd_id 1"))
         for l in learnt:
-            p = (Ether(src=ep.mac, dst=l['mac']) /
-                 IP(dst=l['ip'], src=ep.ip4) /
-                 UDP(sport=1234, dport=1234) /
-                 Raw(b'\xa5' * 100))
+            p = (
+                Ether(src=ep.mac, dst=l["mac"])
+                / IP(dst=l["ip"], src=ep.ip4)
+                / UDP(sport=1234, dport=1234)
+                / Raw(b"\xa5" * 100)
+            )
 
             rxs = self.send_and_expect(self.pg0, p * 17, self.pg2)
 
 
             rxs = self.send_and_expect(self.pg0, p * 17, self.pg2)
 
@@ -1917,8 +2154,7 @@ class TestGBP(VppTestCase):
                 self.assertFalse(rx[VXLAN].gpflags.D)
 
         for l in learnt:
                 self.assertFalse(rx[VXLAN].gpflags.D)
 
         for l in learnt:
-            self.wait_for_ep_timeout(vx_tun_l2_1.sw_if_index,
-                                     mac=l['mac'])
+            self.wait_for_ep_timeout(vx_tun_l2_1.sw_if_index, mac=l["mac"])
 
         #
         # repeat in the other EPG
 
         #
         # repeat in the other EPG
@@ -1927,31 +2163,33 @@ class TestGBP(VppTestCase):
         #
         for l in learnt:
             # a packet with an sclass from a known EPG
         #
         for l in learnt:
             # a packet with an sclass from a known EPG
-            p = (Ether(src=self.pg2.remote_mac,
-                       dst=self.pg2.local_mac) /
-                 IP(src=self.pg2.remote_hosts[1].ip4,
-                    dst=self.pg2.local_ip4) /
-                 UDP(sport=1234, dport=48879) /
-                 VXLAN(vni=99, gpid=113, flags=0x88, gpflags='A') /
-                 Ether(src=l['mac'], dst=ep.mac) /
-                 IP(src=l['ip'], dst=ep.ip4) /
-                 UDP(sport=1234, dport=1234) /
-                 Raw(b'\xa5' * 100))
+            p = (
+                Ether(src=self.pg2.remote_mac, dst=self.pg2.local_mac)
+                / IP(src=self.pg2.remote_hosts[1].ip4, dst=self.pg2.local_ip4)
+                / UDP(sport=1234, dport=48879)
+                / VXLAN(vni=99, gpid=113, flags=0x88, gpflags="A")
+                / Ether(src=l["mac"], dst=ep.mac)
+                / IP(src=l["ip"], dst=ep.ip4)
+                / UDP(sport=1234, dport=1234)
+                / Raw(b"\xa5" * 100)
+            )
 
             rx = self.send_and_expect(self.pg2, p * NUM_PKTS, self.pg0)
 
 
             rx = self.send_and_expect(self.pg2, p * NUM_PKTS, self.pg0)
 
-            self.assertTrue(find_gbp_endpoint(self,
-                                              vx_tun_l2_1.sw_if_index,
-                                              mac=l['mac']))
+            self.assertTrue(
+                find_gbp_endpoint(self, vx_tun_l2_1.sw_if_index, mac=l["mac"])
+            )
 
         #
         # static EP cannot reach the learnt EPs since there is no contract
         # only test 1 EP as the others could timeout
         #
 
         #
         # static EP cannot reach the learnt EPs since there is no contract
         # only test 1 EP as the others could timeout
         #
-        p = (Ether(src=ep.mac, dst=l['mac']) /
-             IP(dst=learnt[0]['ip'], src=ep.ip4) /
-             UDP(sport=1234, dport=1234) /
-             Raw(b'\xa5' * 100))
+        p = (
+            Ether(src=ep.mac, dst=l["mac"])
+            / IP(dst=learnt[0]["ip"], src=ep.ip4)
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
 
         self.send_and_assert_no_replies(self.pg0, [p])
 
 
         self.send_and_assert_no_replies(self.pg0, [p])
 
@@ -1960,50 +2198,65 @@ class TestGBP(VppTestCase):
         #
         for l in learnt:
             # a packet with an sclass from a known EPG
         #
         for l in learnt:
             # a packet with an sclass from a known EPG
-            p = (Ether(src=self.pg2.remote_mac,
-                       dst=self.pg2.local_mac) /
-                 IP(src=self.pg2.remote_hosts[1].ip4,
-                    dst=self.pg2.local_ip4) /
-                 UDP(sport=1234, dport=48879) /
-                 VXLAN(vni=99, gpid=113, flags=0x88, gpflags='A') /
-                 Ether(src=l['mac'], dst=ep.mac) /
-                 IP(src=l['ip'], dst=ep.ip4) /
-                 UDP(sport=1234, dport=1234) /
-                 Raw(b'\xa5' * 100))
+            p = (
+                Ether(src=self.pg2.remote_mac, dst=self.pg2.local_mac)
+                / IP(src=self.pg2.remote_hosts[1].ip4, dst=self.pg2.local_ip4)
+                / UDP(sport=1234, dport=48879)
+                / VXLAN(vni=99, gpid=113, flags=0x88, gpflags="A")
+                / Ether(src=l["mac"], dst=ep.mac)
+                / IP(src=l["ip"], dst=ep.ip4)
+                / UDP(sport=1234, dport=1234)
+                / Raw(b"\xa5" * 100)
+            )
 
             rx = self.send_and_expect(self.pg2, p * NUM_PKTS, self.pg0)
 
 
             rx = self.send_and_expect(self.pg2, p * NUM_PKTS, self.pg0)
 
-            self.assertTrue(find_gbp_endpoint(self,
-                                              vx_tun_l2_1.sw_if_index,
-                                              mac=l['mac']))
+            self.assertTrue(
+                find_gbp_endpoint(self, vx_tun_l2_1.sw_if_index, mac=l["mac"])
+            )
 
         #
         # Add the contract so they can talk
         #
         rule = AclRule(is_permit=1, proto=17)
 
         #
         # Add the contract so they can talk
         #
         rule = AclRule(is_permit=1, proto=17)
-        rule2 = AclRule(src_prefix=IPv6Network((0, 0)),
-                        dst_prefix=IPv6Network((0, 0)), is_permit=1, proto=17)
+        rule2 = AclRule(
+            src_prefix=IPv6Network((0, 0)),
+            dst_prefix=IPv6Network((0, 0)),
+            is_permit=1,
+            proto=17,
+        )
         acl = VppAcl(self, rules=[rule, rule2])
         acl.add_vpp_config()
 
         c1 = VppGbpContract(
         acl = VppAcl(self, rules=[rule, rule2])
         acl.add_vpp_config()
 
         c1 = VppGbpContract(
-            self, 401, epg_220.sclass, epg_330.sclass, acl.acl_index,
-            [VppGbpContractRule(
-                VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
-                VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
-                []),
-             VppGbpContractRule(
-                 VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
-                 VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
-                 [])],
-            [ETH_P_IP, ETH_P_IPV6])
+            self,
+            401,
+            epg_220.sclass,
+            epg_330.sclass,
+            acl.acl_index,
+            [
+                VppGbpContractRule(
+                    VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
+                    VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
+                    [],
+                ),
+                VppGbpContractRule(
+                    VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
+                    VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
+                    [],
+                ),
+            ],
+            [ETH_P_IP, ETH_P_IPV6],
+        )
         c1.add_vpp_config()
 
         for l in learnt:
         c1.add_vpp_config()
 
         for l in learnt:
-            p = (Ether(src=ep.mac, dst=l['mac']) /
-                 IP(dst=l['ip'], src=ep.ip4) /
-                 UDP(sport=1234, dport=1234) /
-                 Raw(b'\xa5' * 100))
+            p = (
+                Ether(src=ep.mac, dst=l["mac"])
+                / IP(dst=l["ip"], src=ep.ip4)
+                / UDP(sport=1234, dport=1234)
+                / Raw(b"\xa5" * 100)
+            )
 
             self.send_and_expect(self.pg0, [p], self.pg2)
 
 
             self.send_and_expect(self.pg0, [p], self.pg2)
 
@@ -2012,18 +2265,22 @@ class TestGBP(VppTestCase):
         #
         self.logger.info(self.vapi.cli("sh gbp bridge"))
         self.logger.info(self.vapi.cli("sh bridge-domain 1 detail"))
         #
         self.logger.info(self.vapi.cli("sh gbp bridge"))
         self.logger.info(self.vapi.cli("sh bridge-domain 1 detail"))
-        p_uu = (Ether(src=ep.mac, dst="00:11:11:11:11:11") /
-                IP(dst="10.0.0.133", src=ep.ip4) /
-                UDP(sport=1234, dport=1234) /
-                Raw(b'\xa5' * 100))
+        p_uu = (
+            Ether(src=ep.mac, dst="00:11:11:11:11:11")
+            / IP(dst="10.0.0.133", src=ep.ip4)
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
         rxs = self.send_and_expect(ep.itf, [p_uu], gbd1.uu_fwd)
 
         self.logger.info(self.vapi.cli("sh bridge 1 detail"))
 
         rxs = self.send_and_expect(ep.itf, [p_uu], gbd1.uu_fwd)
 
         self.logger.info(self.vapi.cli("sh bridge 1 detail"))
 
-        p_bm = (Ether(src=ep.mac, dst="ff:ff:ff:ff:ff:ff") /
-                IP(dst="10.0.0.133", src=ep.ip4) /
-                UDP(sport=1234, dport=1234) /
-                Raw(b'\xa5' * 100))
+        p_bm = (
+            Ether(src=ep.mac, dst="ff:ff:ff:ff:ff:ff")
+            / IP(dst="10.0.0.133", src=ep.ip4)
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
         rxs = self.send_and_expect_only(ep.itf, [p_bm], tun_bm.mcast_itf)
 
         for rx in rxs:
         rxs = self.send_and_expect_only(ep.itf, [p_bm], tun_bm.mcast_itf)
 
         for rx in rxs:
@@ -2039,52 +2296,66 @@ class TestGBP(VppTestCase):
             self.assertFalse(rx[VXLAN].gpflags.D)
 
         rule = AclRule(is_permit=1, proto=17)
             self.assertFalse(rx[VXLAN].gpflags.D)
 
         rule = AclRule(is_permit=1, proto=17)
-        rule2 = AclRule(src_prefix=IPv6Network((0, 0)),
-                        dst_prefix=IPv6Network((0, 0)), is_permit=1, proto=17)
+        rule2 = AclRule(
+            src_prefix=IPv6Network((0, 0)),
+            dst_prefix=IPv6Network((0, 0)),
+            is_permit=1,
+            proto=17,
+        )
         acl = VppAcl(self, rules=[rule, rule2])
         acl.add_vpp_config()
 
         c2 = VppGbpContract(
         acl = VppAcl(self, rules=[rule, rule2])
         acl.add_vpp_config()
 
         c2 = VppGbpContract(
-            self, 401, epg_330.sclass, epg_220.sclass, acl.acl_index,
-            [VppGbpContractRule(
-                VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
-                VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
-                []),
+            self,
+            401,
+            epg_330.sclass,
+            epg_220.sclass,
+            acl.acl_index,
+            [
+                VppGbpContractRule(
+                    VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
+                    VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
+                    [],
+                ),
                 VppGbpContractRule(
                     VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
                     VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
                 VppGbpContractRule(
                     VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
                     VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
-                    [])],
-            [ETH_P_IP, ETH_P_IPV6])
+                    [],
+                ),
+            ],
+            [ETH_P_IP, ETH_P_IPV6],
+        )
         c2.add_vpp_config()
 
         for l in learnt:
         c2.add_vpp_config()
 
         for l in learnt:
-            self.wait_for_ep_timeout(vx_tun_l2_1.sw_if_index,
-                                     mac=l['mac'])
+            self.wait_for_ep_timeout(vx_tun_l2_1.sw_if_index, mac=l["mac"])
         #
         # Check v6 Endpoints learning
         #
         for l in learnt:
             # a packet with an sclass from a known EPG
         #
         # Check v6 Endpoints learning
         #
         for l in learnt:
             # a packet with an sclass from a known EPG
-            p = (Ether(src=self.pg2.remote_mac,
-                       dst=self.pg2.local_mac) /
-                 IP(src=self.pg2.remote_hosts[1].ip4,
-                    dst=self.pg2.local_ip4) /
-                 UDP(sport=1234, dport=48879) /
-                 VXLAN(vni=99, gpid=113, flags=0x88) /
-                 Ether(src=l['mac'], dst=ep.mac) /
-                 IPv6(src=l['ip6'], dst=ep.ip6) /
-                 UDP(sport=1234, dport=1234) /
-                 Raw(b'\xa5' * 100))
+            p = (
+                Ether(src=self.pg2.remote_mac, dst=self.pg2.local_mac)
+                / IP(src=self.pg2.remote_hosts[1].ip4, dst=self.pg2.local_ip4)
+                / UDP(sport=1234, dport=48879)
+                / VXLAN(vni=99, gpid=113, flags=0x88)
+                / Ether(src=l["mac"], dst=ep.mac)
+                / IPv6(src=l["ip6"], dst=ep.ip6)
+                / UDP(sport=1234, dport=1234)
+                / Raw(b"\xa5" * 100)
+            )
 
             rx = self.send_and_expect(self.pg2, p * NUM_PKTS, self.pg0)
             rx = self.send_and_expect(self.pg2, p * NUM_PKTS, self.pg0)
 
 
             rx = self.send_and_expect(self.pg2, p * NUM_PKTS, self.pg0)
             rx = self.send_and_expect(self.pg2, p * NUM_PKTS, self.pg0)
 
-            self.assertTrue(find_gbp_endpoint(
-                self,
-                vx_tun_l2_1.sw_if_index,
-                ip=l['ip6'],
-                tep=[self.pg2.local_ip4,
-                     self.pg2.remote_hosts[1].ip4]))
+            self.assertTrue(
+                find_gbp_endpoint(
+                    self,
+                    vx_tun_l2_1.sw_if_index,
+                    ip=l["ip6"],
+                    tep=[self.pg2.local_ip4, self.pg2.remote_hosts[1].ip4],
+                )
+            )
 
         self.logger.info(self.vapi.cli("sh int"))
         self.logger.info(self.vapi.cli("sh vxlan-gbp tunnel"))
 
         self.logger.info(self.vapi.cli("sh int"))
         self.logger.info(self.vapi.cli("sh vxlan-gbp tunnel"))
@@ -2097,36 +2368,40 @@ class TestGBP(VppTestCase):
         #
         for l in learnt:
             # a packet with an sclass from a known EPG
         #
         for l in learnt:
             # a packet with an sclass from a known EPG
-            p = (Ether(src=self.pg2.remote_mac,
-                       dst=self.pg2.local_mac) /
-                 IP(src=self.pg2.remote_hosts[2].ip4,
-                    dst=self.pg2.local_ip4) /
-                 UDP(sport=1234, dport=48879) /
-                 VXLAN(vni=99, gpid=113, flags=0x88) /
-                 Ether(src=l['mac'], dst=ep.mac) /
-                 IPv6(src=l['ip6'], dst=ep.ip6) /
-                 UDP(sport=1234, dport=1234) /
-                 Raw(b'\xa5' * 100))
+            p = (
+                Ether(src=self.pg2.remote_mac, dst=self.pg2.local_mac)
+                / IP(src=self.pg2.remote_hosts[2].ip4, dst=self.pg2.local_ip4)
+                / UDP(sport=1234, dport=48879)
+                / VXLAN(vni=99, gpid=113, flags=0x88)
+                / Ether(src=l["mac"], dst=ep.mac)
+                / IPv6(src=l["ip6"], dst=ep.ip6)
+                / UDP(sport=1234, dport=1234)
+                / Raw(b"\xa5" * 100)
+            )
 
             rx = self.send_and_expect(self.pg2, p * 1, self.pg0)
             rx = self.send_and_expect(self.pg2, p * NUM_PKTS, self.pg0)
 
 
             rx = self.send_and_expect(self.pg2, p * 1, self.pg0)
             rx = self.send_and_expect(self.pg2, p * NUM_PKTS, self.pg0)
 
-            self.assertTrue(find_gbp_endpoint(
-                self,
-                vx_tun_l2_1.sw_if_index,
-                sclass=113,
-                mac=l['mac'],
-                tep=[self.pg2.local_ip4,
-                     self.pg2.remote_hosts[2].ip4]))
+            self.assertTrue(
+                find_gbp_endpoint(
+                    self,
+                    vx_tun_l2_1.sw_if_index,
+                    sclass=113,
+                    mac=l["mac"],
+                    tep=[self.pg2.local_ip4, self.pg2.remote_hosts[2].ip4],
+                )
+            )
 
         #
         # v6 remote EP reachability
         #
         for l in learnt:
 
         #
         # v6 remote EP reachability
         #
         for l in learnt:
-            p = (Ether(src=ep.mac, dst=l['mac']) /
-                 IPv6(dst=l['ip6'], src=ep.ip6) /
-                 UDP(sport=1234, dport=1234) /
-                 Raw(b'\xa5' * 100))
+            p = (
+                Ether(src=ep.mac, dst=l["mac"])
+                / IPv6(dst=l["ip6"], src=ep.ip6)
+                / UDP(sport=1234, dport=1234)
+                / Raw(b"\xa5" * 100)
+            )
 
             rxs = self.send_and_expect(self.pg0, p * NUM_PKTS, self.pg2)
 
 
             rxs = self.send_and_expect(self.pg0, p * NUM_PKTS, self.pg2)
 
@@ -2141,46 +2416,51 @@ class TestGBP(VppTestCase):
                 self.assertTrue(rx[VXLAN].flags.Instance)
                 self.assertTrue(rx[VXLAN].gpflags.A)
                 self.assertFalse(rx[VXLAN].gpflags.D)
                 self.assertTrue(rx[VXLAN].flags.Instance)
                 self.assertTrue(rx[VXLAN].gpflags.A)
                 self.assertFalse(rx[VXLAN].gpflags.D)
-                self.assertEqual(rx[IPv6].dst, l['ip6'])
+                self.assertEqual(rx[IPv6].dst, l["ip6"])
 
         #
         # EP changes sclass
         #
         for l in learnt:
             # a packet with an sclass from a known EPG
 
         #
         # EP changes sclass
         #
         for l in learnt:
             # a packet with an sclass from a known EPG
-            p = (Ether(src=self.pg2.remote_mac,
-                       dst=self.pg2.local_mac) /
-                 IP(src=self.pg2.remote_hosts[2].ip4,
-                    dst=self.pg2.local_ip4) /
-                 UDP(sport=1234, dport=48879) /
-                 VXLAN(vni=99, gpid=112, flags=0x88) /
-                 Ether(src=l['mac'], dst=ep.mac) /
-                 IPv6(src=l['ip6'], dst=ep.ip6) /
-                 UDP(sport=1234, dport=1234) /
-                 Raw(b'\xa5' * 100))
+            p = (
+                Ether(src=self.pg2.remote_mac, dst=self.pg2.local_mac)
+                / IP(src=self.pg2.remote_hosts[2].ip4, dst=self.pg2.local_ip4)
+                / UDP(sport=1234, dport=48879)
+                / VXLAN(vni=99, gpid=112, flags=0x88)
+                / Ether(src=l["mac"], dst=ep.mac)
+                / IPv6(src=l["ip6"], dst=ep.ip6)
+                / UDP(sport=1234, dport=1234)
+                / Raw(b"\xa5" * 100)
+            )
 
             rx = self.send_and_expect(self.pg2, p * 1, self.pg0)
             rx = self.send_and_expect(self.pg2, p * NUM_PKTS, self.pg0)
 
 
             rx = self.send_and_expect(self.pg2, p * 1, self.pg0)
             rx = self.send_and_expect(self.pg2, p * NUM_PKTS, self.pg0)
 
-            self.assertTrue(find_gbp_endpoint(
-                self,
-                vx_tun_l2_1.sw_if_index,
-                mac=l['mac'],
-                sclass=112,
-                tep=[self.pg2.local_ip4,
-                     self.pg2.remote_hosts[2].ip4]))
+            self.assertTrue(
+                find_gbp_endpoint(
+                    self,
+                    vx_tun_l2_1.sw_if_index,
+                    mac=l["mac"],
+                    sclass=112,
+                    tep=[self.pg2.local_ip4, self.pg2.remote_hosts[2].ip4],
+                )
+            )
 
         #
         # check reachability and contract intra-epg
         #
         allow_intra_class = self.statistics.get_err_counter(
 
         #
         # check reachability and contract intra-epg
         #
         allow_intra_class = self.statistics.get_err_counter(
-            '/err/gbp-policy-mac/allow-intra-sclass')
+            "/err/gbp-policy-mac/allow-intra-sclass"
+        )
 
         for l in learnt:
 
         for l in learnt:
-            p = (Ether(src=ep.mac, dst=l['mac']) /
-                 IPv6(dst=l['ip6'], src=ep.ip6) /
-                 UDP(sport=1234, dport=1234) /
-                 Raw(b'\xa5' * 100))
+            p = (
+                Ether(src=ep.mac, dst=l["mac"])
+                / IPv6(dst=l["ip6"], src=ep.ip6)
+                / UDP(sport=1234, dport=1234)
+                / Raw(b"\xa5" * 100)
+            )
 
             rxs = self.send_and_expect(self.pg0, p * NUM_PKTS, self.pg2)
 
 
             rxs = self.send_and_expect(self.pg0, p * NUM_PKTS, self.pg2)
 
@@ -2194,26 +2474,25 @@ class TestGBP(VppTestCase):
                 self.assertTrue(rx[VXLAN].flags.Instance)
                 self.assertTrue(rx[VXLAN].gpflags.A)
                 self.assertFalse(rx[VXLAN].gpflags.D)
                 self.assertTrue(rx[VXLAN].flags.Instance)
                 self.assertTrue(rx[VXLAN].gpflags.A)
                 self.assertFalse(rx[VXLAN].gpflags.D)
-                self.assertEqual(rx[IPv6].dst, l['ip6'])
+                self.assertEqual(rx[IPv6].dst, l["ip6"])
 
             allow_intra_class += NUM_PKTS
 
         self.assert_error_counter_equal(
 
             allow_intra_class += NUM_PKTS
 
         self.assert_error_counter_equal(
-            '/err/gbp-policy-mac/allow-intra-sclass',
-            allow_intra_class)
+            "/err/gbp-policy-mac/allow-intra-sclass", allow_intra_class
+        )
 
         #
         # clean up
         #
         for l in learnt:
 
         #
         # clean up
         #
         for l in learnt:
-            self.wait_for_ep_timeout(vx_tun_l2_1.sw_if_index,
-                                     mac=l['mac'])
+            self.wait_for_ep_timeout(vx_tun_l2_1.sw_if_index, mac=l["mac"])
         self.pg2.unconfig_ip4()
         self.pg3.unconfig_ip4()
         self.pg4.unconfig_ip4()
 
     def test_gbp_contract(self):
         self.pg2.unconfig_ip4()
         self.pg3.unconfig_ip4()
         self.pg4.unconfig_ip4()
 
     def test_gbp_contract(self):
-        """ GBP Contracts """
+        """GBP Contracts"""
 
         #
         # Route Domains
 
         #
         # Route Domains
@@ -2245,34 +2524,86 @@ class TestGBP(VppTestCase):
         #
         # 3 EPGs, 2 of which share a BD.
         #
         #
         # 3 EPGs, 2 of which share a BD.
         #
-        epgs = [VppGbpEndpointGroup(self, 220, 1220, rd0, gbd1,
-                                    None, self.loop0,
-                                    "10.0.0.128", "2001:10::128"),
-                VppGbpEndpointGroup(self, 221, 1221, rd0, gbd1,
-                                    None, self.loop0,
-                                    "10.0.1.128", "2001:10:1::128"),
-                VppGbpEndpointGroup(self, 222, 1222, rd0, gbd2,
-                                    None, self.loop1,
-                                    "10.0.2.128", "2001:10:2::128")]
+        epgs = [
+            VppGbpEndpointGroup(
+                self,
+                220,
+                1220,
+                rd0,
+                gbd1,
+                None,
+                self.loop0,
+                "10.0.0.128",
+                "2001:10::128",
+            ),
+            VppGbpEndpointGroup(
+                self,
+                221,
+                1221,
+                rd0,
+                gbd1,
+                None,
+                self.loop0,
+                "10.0.1.128",
+                "2001:10:1::128",
+            ),
+            VppGbpEndpointGroup(
+                self,
+                222,
+                1222,
+                rd0,
+                gbd2,
+                None,
+                self.loop1,
+                "10.0.2.128",
+                "2001:10:2::128",
+            ),
+        ]
         #
         # 4 end-points, 2 in the same subnet, 3 in the same BD
         #
         #
         # 4 end-points, 2 in the same subnet, 3 in the same BD
         #
-        eps = [VppGbpEndpoint(self, self.pg0,
-                              epgs[0], None,
-                              "10.0.0.1", "11.0.0.1",
-                              "2001:10::1", "3001::1"),
-               VppGbpEndpoint(self, self.pg1,
-                              epgs[0], None,
-                              "10.0.0.2", "11.0.0.2",
-                              "2001:10::2", "3001::2"),
-               VppGbpEndpoint(self, self.pg2,
-                              epgs[1], None,
-                              "10.0.1.1", "11.0.0.3",
-                              "2001:10:1::1", "3001::3"),
-               VppGbpEndpoint(self, self.pg3,
-                              epgs[2], None,
-                              "10.0.2.1", "11.0.0.4",
-                              "2001:10:2::1", "3001::4")]
+        eps = [
+            VppGbpEndpoint(
+                self,
+                self.pg0,
+                epgs[0],
+                None,
+                "10.0.0.1",
+                "11.0.0.1",
+                "2001:10::1",
+                "3001::1",
+            ),
+            VppGbpEndpoint(
+                self,
+                self.pg1,
+                epgs[0],
+                None,
+                "10.0.0.2",
+                "11.0.0.2",
+                "2001:10::2",
+                "3001::2",
+            ),
+            VppGbpEndpoint(
+                self,
+                self.pg2,
+                epgs[1],
+                None,
+                "10.0.1.1",
+                "11.0.0.3",
+                "2001:10:1::1",
+                "3001::3",
+            ),
+            VppGbpEndpoint(
+                self,
+                self.pg3,
+                epgs[2],
+                None,
+                "10.0.2.1",
+                "11.0.0.4",
+                "2001:10:2::1",
+                "3001::4",
+            ),
+        ]
 
         #
         # Config related to each of the EPGs
 
         #
         # Config related to each of the EPGs
@@ -2280,23 +2611,21 @@ class TestGBP(VppTestCase):
         for epg in epgs:
             # IP config on the BVI interfaces
             if epg != epgs[1]:
         for epg in epgs:
             # IP config on the BVI interfaces
             if epg != epgs[1]:
-                b4 = VppIpInterfaceBind(self, epg.bvi,
-                                        epg.rd.t4).add_vpp_config()
-                b6 = VppIpInterfaceBind(self, epg.bvi,
-                                        epg.rd.t6).add_vpp_config()
+                b4 = VppIpInterfaceBind(self, epg.bvi, epg.rd.t4).add_vpp_config()
+                b6 = VppIpInterfaceBind(self, epg.bvi, epg.rd.t6).add_vpp_config()
                 epg.bvi.set_mac(self.router_mac)
 
                 epg.bvi.set_mac(self.router_mac)
 
-            if_ip4 = VppIpInterfaceAddress(self, epg.bvi,
-                                           epg.bvi_ip4, 32,
-                                           bind=b4).add_vpp_config()
-            if_ip6 = VppIpInterfaceAddress(self, epg.bvi,
-                                           epg.bvi_ip6, 128,
-                                           bind=b6).add_vpp_config()
+            if_ip4 = VppIpInterfaceAddress(
+                self, epg.bvi, epg.bvi_ip4, 32, bind=b4
+            ).add_vpp_config()
+            if_ip6 = VppIpInterfaceAddress(
+                self, epg.bvi, epg.bvi_ip6, 128, bind=b6
+            ).add_vpp_config()
 
             # add the BD ARP termination entry for BVI IP
 
             # add the BD ARP termination entry for BVI IP
-            epg.bd_arp_ip4 = VppBridgeDomainArpEntry(self, epg.bd.bd,
-                                                     str(self.router_mac),
-                                                     epg.bvi_ip4)
+            epg.bd_arp_ip4 = VppBridgeDomainArpEntry(
+                self, epg.bd.bd, str(self.router_mac), epg.bvi_ip4
+            )
             epg.bd_arp_ip4.add_vpp_config()
 
             # EPG in VPP
             epg.bd_arp_ip4.add_vpp_config()
 
             # EPG in VPP
@@ -2315,37 +2644,33 @@ class TestGBP(VppTestCase):
         #
         # Intra epg allowed without contract
         #
         #
         # Intra epg allowed without contract
         #
-        pkt_intra_epg_220_to_220 = (Ether(src=self.pg0.remote_mac,
-                                          dst=self.pg1.remote_mac) /
-                                    IP(src=eps[0].ip4,
-                                       dst=eps[1].ip4) /
-                                    UDP(sport=1234, dport=1234) /
-                                    Raw(b'\xa5' * 100))
+        pkt_intra_epg_220_to_220 = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg1.remote_mac)
+            / IP(src=eps[0].ip4, dst=eps[1].ip4)
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
 
 
-        self.send_and_expect_bridged(self.pg0,
-                                     pkt_intra_epg_220_to_220 * 65,
-                                     self.pg1)
+        self.send_and_expect_bridged(self.pg0, pkt_intra_epg_220_to_220 * 65, self.pg1)
 
 
-        pkt_intra_epg_220_to_220 = (Ether(src=self.pg0.remote_mac,
-                                          dst=self.pg1.remote_mac) /
-                                    IPv6(src=eps[0].ip6,
-                                         dst=eps[1].ip6) /
-                                    UDP(sport=1234, dport=1234) /
-                                    Raw(b'\xa5' * 100))
+        pkt_intra_epg_220_to_220 = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg1.remote_mac)
+            / IPv6(src=eps[0].ip6, dst=eps[1].ip6)
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
 
 
-        self.send_and_expect_bridged6(self.pg0,
-                                      pkt_intra_epg_220_to_220 * 65,
-                                      self.pg1)
+        self.send_and_expect_bridged6(self.pg0, pkt_intra_epg_220_to_220 * 65, self.pg1)
 
         #
         # Inter epg denied without contract
         #
 
         #
         # Inter epg denied without contract
         #
-        pkt_inter_epg_220_to_221 = (Ether(src=self.pg0.remote_mac,
-                                          dst=self.pg2.remote_mac) /
-                                    IP(src=eps[0].ip4,
-                                       dst=eps[2].ip4) /
-                                    UDP(sport=1234, dport=1234) /
-                                    Raw(b'\xa5' * 100))
+        pkt_inter_epg_220_to_221 = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg2.remote_mac)
+            / IP(src=eps[0].ip4, dst=eps[2].ip4)
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
 
         self.send_and_assert_no_replies(self.pg0, pkt_inter_epg_220_to_221)
 
 
         self.send_and_assert_no_replies(self.pg0, pkt_inter_epg_220_to_221)
 
@@ -2353,58 +2678,71 @@ class TestGBP(VppTestCase):
         # A uni-directional contract from EPG 220 -> 221
         #
         rule = AclRule(is_permit=1, proto=17)
         # A uni-directional contract from EPG 220 -> 221
         #
         rule = AclRule(is_permit=1, proto=17)
-        rule2 = AclRule(src_prefix=IPv6Network((0, 0)),
-                        dst_prefix=IPv6Network((0, 0)), is_permit=1, proto=17)
+        rule2 = AclRule(
+            src_prefix=IPv6Network((0, 0)),
+            dst_prefix=IPv6Network((0, 0)),
+            is_permit=1,
+            proto=17,
+        )
         rule3 = AclRule(is_permit=1, proto=1)
         acl = VppAcl(self, rules=[rule, rule2, rule3])
         acl.add_vpp_config()
 
         c1 = VppGbpContract(
         rule3 = AclRule(is_permit=1, proto=1)
         acl = VppAcl(self, rules=[rule, rule2, rule3])
         acl.add_vpp_config()
 
         c1 = VppGbpContract(
-            self, 400, epgs[0].sclass, epgs[1].sclass, acl.acl_index,
-            [VppGbpContractRule(
-                VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
-                VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
-                []),
-             VppGbpContractRule(
-                 VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
-                 VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
-                 []),
-             VppGbpContractRule(
-                 VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
-                 VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
-                 [])],
-            [ETH_P_IP, ETH_P_IPV6])
+            self,
+            400,
+            epgs[0].sclass,
+            epgs[1].sclass,
+            acl.acl_index,
+            [
+                VppGbpContractRule(
+                    VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
+                    VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
+                    [],
+                ),
+                VppGbpContractRule(
+                    VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
+                    VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
+                    [],
+                ),
+                VppGbpContractRule(
+                    VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
+                    VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
+                    [],
+                ),
+            ],
+            [ETH_P_IP, ETH_P_IPV6],
+        )
         c1.add_vpp_config()
 
         c1.add_vpp_config()
 
-        self.send_and_expect_bridged(eps[0].itf,
-                                     pkt_inter_epg_220_to_221 * 65,
-                                     eps[2].itf)
+        self.send_and_expect_bridged(
+            eps[0].itf, pkt_inter_epg_220_to_221 * 65, eps[2].itf
+        )
 
 
-        pkt_inter_epg_220_to_222 = (Ether(src=self.pg0.remote_mac,
-                                          dst=str(self.router_mac)) /
-                                    IP(src=eps[0].ip4,
-                                       dst=eps[3].ip4) /
-                                    UDP(sport=1234, dport=1234) /
-                                    Raw(b'\xa5' * 100))
-        self.send_and_assert_no_replies(eps[0].itf,
-                                        pkt_inter_epg_220_to_222 * 65)
+        pkt_inter_epg_220_to_222 = (
+            Ether(src=self.pg0.remote_mac, dst=str(self.router_mac))
+            / IP(src=eps[0].ip4, dst=eps[3].ip4)
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
+        self.send_and_assert_no_replies(eps[0].itf, pkt_inter_epg_220_to_222 * 65)
 
         #
         # ping router IP in different BD
         #
 
         #
         # ping router IP in different BD
         #
-        pkt_router_ping_220_to_221 = (Ether(src=self.pg0.remote_mac,
-                                            dst=str(self.router_mac)) /
-                                      IP(src=eps[0].ip4,
-                                         dst=epgs[1].bvi_ip4) /
-                                      ICMP(type='echo-request'))
+        pkt_router_ping_220_to_221 = (
+            Ether(src=self.pg0.remote_mac, dst=str(self.router_mac))
+            / IP(src=eps[0].ip4, dst=epgs[1].bvi_ip4)
+            / ICMP(type="echo-request")
+        )
 
         self.send_and_expect(self.pg0, [pkt_router_ping_220_to_221], self.pg0)
 
 
         self.send_and_expect(self.pg0, [pkt_router_ping_220_to_221], self.pg0)
 
-        pkt_router_ping_220_to_221 = (Ether(src=self.pg0.remote_mac,
-                                            dst=str(self.router_mac)) /
-                                      IPv6(src=eps[0].ip6,
-                                           dst=epgs[1].bvi_ip6) /
-                                      ICMPv6EchoRequest())
+        pkt_router_ping_220_to_221 = (
+            Ether(src=self.pg0.remote_mac, dst=str(self.router_mac))
+            / IPv6(src=eps[0].ip6, dst=epgs[1].bvi_ip6)
+            / ICMPv6EchoRequest()
+        )
 
         self.send_and_expect(self.pg0, [pkt_router_ping_220_to_221], self.pg0)
 
 
         self.send_and_expect(self.pg0, [pkt_router_ping_220_to_221], self.pg0)
 
@@ -2412,70 +2750,84 @@ class TestGBP(VppTestCase):
         # contract for the return direction
         #
         c2 = VppGbpContract(
         # contract for the return direction
         #
         c2 = VppGbpContract(
-            self, 400, epgs[1].sclass, epgs[0].sclass, acl.acl_index,
-            [VppGbpContractRule(
-                VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
-                VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
-                []),
-             VppGbpContractRule(
-                 VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
-                 VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
-                 [])],
-            [ETH_P_IP, ETH_P_IPV6])
+            self,
+            400,
+            epgs[1].sclass,
+            epgs[0].sclass,
+            acl.acl_index,
+            [
+                VppGbpContractRule(
+                    VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
+                    VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
+                    [],
+                ),
+                VppGbpContractRule(
+                    VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
+                    VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
+                    [],
+                ),
+            ],
+            [ETH_P_IP, ETH_P_IPV6],
+        )
         c2.add_vpp_config()
 
         c2.add_vpp_config()
 
-        self.send_and_expect_bridged(eps[0].itf,
-                                     pkt_inter_epg_220_to_221 * 65,
-                                     eps[2].itf)
-        pkt_inter_epg_221_to_220 = (Ether(src=self.pg2.remote_mac,
-                                          dst=self.pg0.remote_mac) /
-                                    IP(src=eps[2].ip4,
-                                       dst=eps[0].ip4) /
-                                    UDP(sport=1234, dport=1234) /
-                                    Raw(b'\xa5' * 100))
-        self.send_and_expect_bridged(eps[2].itf,
-                                     pkt_inter_epg_221_to_220 * 65,
-                                     eps[0].itf)
-        pkt_inter_epg_221_to_220 = (Ether(src=self.pg2.remote_mac,
-                                          dst=str(self.router_mac)) /
-                                    IP(src=eps[2].ip4,
-                                       dst=eps[0].ip4) /
-                                    UDP(sport=1234, dport=1234) /
-                                    Raw(b'\xa5' * 100))
-        self.send_and_expect_routed(eps[2].itf,
-                                    pkt_inter_epg_221_to_220 * 65,
-                                    eps[0].itf,
-                                    str(self.router_mac))
-        pkt_inter_epg_221_to_220 = (Ether(src=self.pg2.remote_mac,
-                                          dst=str(self.router_mac)) /
-                                    IPv6(src=eps[2].ip6,
-                                         dst=eps[0].ip6) /
-                                    UDP(sport=1234, dport=1234) /
-                                    Raw(b'\xa5' * 100))
-        self.send_and_expect_routed6(eps[2].itf,
-                                     pkt_inter_epg_221_to_220 * 65,
-                                     eps[0].itf,
-                                     str(self.router_mac))
+        self.send_and_expect_bridged(
+            eps[0].itf, pkt_inter_epg_220_to_221 * 65, eps[2].itf
+        )
+        pkt_inter_epg_221_to_220 = (
+            Ether(src=self.pg2.remote_mac, dst=self.pg0.remote_mac)
+            / IP(src=eps[2].ip4, dst=eps[0].ip4)
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
+        self.send_and_expect_bridged(
+            eps[2].itf, pkt_inter_epg_221_to_220 * 65, eps[0].itf
+        )
+        pkt_inter_epg_221_to_220 = (
+            Ether(src=self.pg2.remote_mac, dst=str(self.router_mac))
+            / IP(src=eps[2].ip4, dst=eps[0].ip4)
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
+        self.send_and_expect_routed(
+            eps[2].itf, pkt_inter_epg_221_to_220 * 65, eps[0].itf, str(self.router_mac)
+        )
+        pkt_inter_epg_221_to_220 = (
+            Ether(src=self.pg2.remote_mac, dst=str(self.router_mac))
+            / IPv6(src=eps[2].ip6, dst=eps[0].ip6)
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
+        self.send_and_expect_routed6(
+            eps[2].itf, pkt_inter_epg_221_to_220 * 65, eps[0].itf, str(self.router_mac)
+        )
 
         #
         # contract between 220 and 222 uni-direction
         #
         c3 = VppGbpContract(
 
         #
         # contract between 220 and 222 uni-direction
         #
         c3 = VppGbpContract(
-            self, 400, epgs[0].sclass, epgs[2].sclass, acl.acl_index,
-            [VppGbpContractRule(
-                VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
-                VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
-                []),
-             VppGbpContractRule(
-                 VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
-                 VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
-                 [])],
-            [ETH_P_IP, ETH_P_IPV6])
+            self,
+            400,
+            epgs[0].sclass,
+            epgs[2].sclass,
+            acl.acl_index,
+            [
+                VppGbpContractRule(
+                    VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
+                    VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
+                    [],
+                ),
+                VppGbpContractRule(
+                    VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
+                    VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
+                    [],
+                ),
+            ],
+            [ETH_P_IP, ETH_P_IPV6],
+        )
         c3.add_vpp_config()
 
         c3.add_vpp_config()
 
-        self.send_and_expect(eps[0].itf,
-                             pkt_inter_epg_220_to_222 * 65,
-                             eps[3].itf)
+        self.send_and_expect(eps[0].itf, pkt_inter_epg_220_to_222 * 65, eps[3].itf)
 
         c3.remove_vpp_config()
         c1.remove_vpp_config()
 
         c3.remove_vpp_config()
         c1.remove_vpp_config()
@@ -2483,7 +2835,7 @@ class TestGBP(VppTestCase):
         acl.remove_vpp_config()
 
     def test_gbp_bd_drop_flags(self):
         acl.remove_vpp_config()
 
     def test_gbp_bd_drop_flags(self):
-        """ GBP BD drop flags """
+        """GBP BD drop flags"""
 
         #
         # IP tables
 
         #
         # IP tables
@@ -2502,32 +2854,46 @@ class TestGBP(VppTestCase):
         bd1 = VppBridgeDomain(self, 1)
         bd1.add_vpp_config()
 
         bd1 = VppBridgeDomain(self, 1)
         bd1.add_vpp_config()
 
-        gbd1 = VppGbpBridgeDomain(self, bd1, rd1, self.loop0,
-                                  None, None,
-                                  uu_drop=True, bm_drop=True)
+        gbd1 = VppGbpBridgeDomain(
+            self, bd1, rd1, self.loop0, None, None, uu_drop=True, bm_drop=True
+        )
         gbd1.add_vpp_config()
 
         self.logger.info(self.vapi.cli("sh bridge 1 detail"))
         self.logger.info(self.vapi.cli("sh gbp bridge"))
 
         # ... and has a /32 applied
         gbd1.add_vpp_config()
 
         self.logger.info(self.vapi.cli("sh bridge 1 detail"))
         self.logger.info(self.vapi.cli("sh gbp bridge"))
 
         # ... and has a /32 applied
-        ip_addr = VppIpInterfaceAddress(self, gbd1.bvi,
-                                        "10.0.0.128", 32).add_vpp_config()
+        ip_addr = VppIpInterfaceAddress(
+            self, gbd1.bvi, "10.0.0.128", 32
+        ).add_vpp_config()
 
         #
         # The Endpoint-group
         #
 
         #
         # The Endpoint-group
         #
-        epg_220 = VppGbpEndpointGroup(self, 220, 112, rd1, gbd1,
-                                      None, self.loop0,
-                                      "10.0.0.128",
-                                      "2001:10::128",
-                                      VppGbpEndpointRetention(3))
+        epg_220 = VppGbpEndpointGroup(
+            self,
+            220,
+            112,
+            rd1,
+            gbd1,
+            None,
+            self.loop0,
+            "10.0.0.128",
+            "2001:10::128",
+            VppGbpEndpointRetention(3),
+        )
         epg_220.add_vpp_config()
 
         epg_220.add_vpp_config()
 
-        ep = VppGbpEndpoint(self, self.pg0,
-                            epg_220, None,
-                            "10.0.0.127", "11.0.0.127",
-                            "2001:10::1", "3001::1")
+        ep = VppGbpEndpoint(
+            self,
+            self.pg0,
+            epg_220,
+            None,
+            "10.0.0.127",
+            "11.0.0.127",
+            "2001:10::1",
+            "3001::1",
+        )
         ep.add_vpp_config()
 
         #
         ep.add_vpp_config()
 
         #
@@ -2536,16 +2902,20 @@ class TestGBP(VppTestCase):
         #
         self.logger.info(self.vapi.cli("sh bridge 1 detail"))
         self.logger.info(self.vapi.cli("sh gbp bridge"))
         #
         self.logger.info(self.vapi.cli("sh bridge 1 detail"))
         self.logger.info(self.vapi.cli("sh gbp bridge"))
-        p_uu = (Ether(src=ep.mac, dst="00:11:11:11:11:11") /
-                IP(dst="10.0.0.133", src=ep.ip4) /
-                UDP(sport=1234, dport=1234) /
-                Raw(b'\xa5' * 100))
+        p_uu = (
+            Ether(src=ep.mac, dst="00:11:11:11:11:11")
+            / IP(dst="10.0.0.133", src=ep.ip4)
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
         self.send_and_assert_no_replies(ep.itf, [p_uu])
 
         self.send_and_assert_no_replies(ep.itf, [p_uu])
 
-        p_bm = (Ether(src=ep.mac, dst="ff:ff:ff:ff:ff:ff") /
-                IP(dst="10.0.0.133", src=ep.ip4) /
-                UDP(sport=1234, dport=1234) /
-                Raw(b'\xa5' * 100))
+        p_bm = (
+            Ether(src=ep.mac, dst="ff:ff:ff:ff:ff:ff")
+            / IP(dst="10.0.0.133", src=ep.ip4)
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
         self.send_and_assert_no_replies(ep.itf, [p_bm])
 
         self.pg3.unconfig_ip4()
         self.send_and_assert_no_replies(ep.itf, [p_bm])
 
         self.pg3.unconfig_ip4()
@@ -2553,7 +2923,7 @@ class TestGBP(VppTestCase):
         self.logger.info(self.vapi.cli("sh int"))
 
     def test_gbp_bd_arp_flags(self):
         self.logger.info(self.vapi.cli("sh int"))
 
     def test_gbp_bd_arp_flags(self):
-        """ GBP BD arp flags """
+        """GBP BD arp flags"""
 
         #
         # IP tables
 
         #
         # IP tables
@@ -2575,9 +2945,9 @@ class TestGBP(VppTestCase):
         #
         # Add a mcast destination VXLAN-GBP tunnel for B&M traffic
         #
         #
         # Add a mcast destination VXLAN-GBP tunnel for B&M traffic
         #
-        tun_uu = VppVxlanGbpTunnel(self, self.pg4.local_ip4,
-                                   "239.1.1.1", 88,
-                                   mcast_itf=self.pg4)
+        tun_uu = VppVxlanGbpTunnel(
+            self, self.pg4.local_ip4, "239.1.1.1", 88, mcast_itf=self.pg4
+        )
         tun_uu.add_vpp_config()
 
         #
         tun_uu.add_vpp_config()
 
         #
@@ -2586,29 +2956,43 @@ class TestGBP(VppTestCase):
         bd1 = VppBridgeDomain(self, 1)
         bd1.add_vpp_config()
 
         bd1 = VppBridgeDomain(self, 1)
         bd1.add_vpp_config()
 
-        gbd1 = VppGbpBridgeDomain(self, bd1, rd1, self.loop0,
-                                  tun_uu, None,
-                                  ucast_arp=True)
+        gbd1 = VppGbpBridgeDomain(
+            self, bd1, rd1, self.loop0, tun_uu, None, ucast_arp=True
+        )
         gbd1.add_vpp_config()
 
         # ... and has a /32 applied
         gbd1.add_vpp_config()
 
         # ... and has a /32 applied
-        ip_addr = VppIpInterfaceAddress(self, gbd1.bvi,
-                                        "10.0.0.128", 32).add_vpp_config()
+        ip_addr = VppIpInterfaceAddress(
+            self, gbd1.bvi, "10.0.0.128", 32
+        ).add_vpp_config()
 
         #
         # The Endpoint-group
         #
 
         #
         # The Endpoint-group
         #
-        epg_220 = VppGbpEndpointGroup(self, 220, 112, rd1, gbd1,
-                                      None, self.loop0,
-                                      "10.0.0.128",
-                                      "2001:10::128",
-                                      VppGbpEndpointRetention(2))
+        epg_220 = VppGbpEndpointGroup(
+            self,
+            220,
+            112,
+            rd1,
+            gbd1,
+            None,
+            self.loop0,
+            "10.0.0.128",
+            "2001:10::128",
+            VppGbpEndpointRetention(2),
+        )
         epg_220.add_vpp_config()
 
         epg_220.add_vpp_config()
 
-        ep = VppGbpEndpoint(self, self.pg0,
-                            epg_220, None,
-                            "10.0.0.127", "11.0.0.127",
-                            "2001:10::1", "3001::1")
+        ep = VppGbpEndpoint(
+            self,
+            self.pg0,
+            epg_220,
+            None,
+            "10.0.0.127",
+            "11.0.0.127",
+            "2001:10::1",
+            "3001::1",
+        )
         ep.add_vpp_config()
 
         #
         ep.add_vpp_config()
 
         #
@@ -2616,25 +3000,25 @@ class TestGBP(VppTestCase):
         #
         self.logger.info(self.vapi.cli("sh bridge 1 detail"))
         self.logger.info(self.vapi.cli("sh gbp bridge"))
         #
         self.logger.info(self.vapi.cli("sh bridge 1 detail"))
         self.logger.info(self.vapi.cli("sh gbp bridge"))
-        p_arp = (Ether(src=ep.mac, dst="ff:ff:ff:ff:ff:ff") /
-                 ARP(op="who-has",
-                     psrc=ep.ip4, pdst="10.0.0.99",
-                     hwsrc=ep.mac,
-                     hwdst="ff:ff:ff:ff:ff:ff"))
+        p_arp = Ether(src=ep.mac, dst="ff:ff:ff:ff:ff:ff") / ARP(
+            op="who-has",
+            psrc=ep.ip4,
+            pdst="10.0.0.99",
+            hwsrc=ep.mac,
+            hwdst="ff:ff:ff:ff:ff:ff",
+        )
         self.send_and_expect(ep.itf, [p_arp], self.pg4)
 
         self.pg4.unconfig_ip4()
 
     def test_gbp_learn_vlan_l2(self):
         self.send_and_expect(ep.itf, [p_arp], self.pg4)
 
         self.pg4.unconfig_ip4()
 
     def test_gbp_learn_vlan_l2(self):
-        """ GBP L2 Endpoint w/ VLANs"""
+        """GBP L2 Endpoint w/ VLANs"""
 
         ep_flags = VppEnum.vl_api_gbp_endpoint_flags_t
 
         ep_flags = VppEnum.vl_api_gbp_endpoint_flags_t
-        learnt = [{'mac': '00:00:11:11:11:01',
-                   'ip': '10.0.0.1',
-                   'ip6': '2001:10::2'},
-                  {'mac': '00:00:11:11:11:02',
-                   'ip': '10.0.0.2',
-                   'ip6': '2001:10::3'}]
+        learnt = [
+            {"mac": "00:00:11:11:11:01", "ip": "10.0.0.1", "ip6": "2001:10::2"},
+            {"mac": "00:00:11:11:11:02", "ip": "10.0.0.2", "ip6": "2001:10::3"},
+        ]
 
         #
         # IP tables
 
         #
         # IP tables
@@ -2663,11 +3047,12 @@ class TestGBP(VppTestCase):
         vlan_11 = VppDot1QSubint(self, self.pg0, 11)
         vlan_11.admin_up()
         self.vapi.l2_interface_vlan_tag_rewrite(
         vlan_11 = VppDot1QSubint(self, self.pg0, 11)
         vlan_11.admin_up()
         self.vapi.l2_interface_vlan_tag_rewrite(
-            sw_if_index=vlan_11.sw_if_index, vtr_op=L2_VTR_OP.L2_POP_1,
-            push_dot1q=11)
+            sw_if_index=vlan_11.sw_if_index, vtr_op=L2_VTR_OP.L2_POP_1, push_dot1q=11
+        )
 
 
-        bd_uu_fwd = VppVxlanGbpTunnel(self, self.pg3.local_ip4,
-                                      self.pg3.remote_ip4, 116)
+        bd_uu_fwd = VppVxlanGbpTunnel(
+            self, self.pg3.local_ip4, self.pg3.remote_ip4, 116
+        )
         bd_uu_fwd.add_vpp_config()
 
         #
         bd_uu_fwd.add_vpp_config()
 
         #
@@ -2677,25 +3062,32 @@ class TestGBP(VppTestCase):
         #
         bd1 = VppBridgeDomain(self, 1)
         bd1.add_vpp_config()
         #
         bd1 = VppBridgeDomain(self, 1)
         bd1.add_vpp_config()
-        gbd1 = VppGbpBridgeDomain(self, bd1, rd1, self.loop0, bd_uu_fwd,
-                                  learn=False)
+        gbd1 = VppGbpBridgeDomain(self, bd1, rd1, self.loop0, bd_uu_fwd, learn=False)
         gbd1.add_vpp_config()
 
         self.logger.info(self.vapi.cli("sh bridge 1 detail"))
         self.logger.info(self.vapi.cli("sh gbp bridge"))
 
         # ... and has a /32 applied
         gbd1.add_vpp_config()
 
         self.logger.info(self.vapi.cli("sh bridge 1 detail"))
         self.logger.info(self.vapi.cli("sh gbp bridge"))
 
         # ... and has a /32 applied
-        ip_addr = VppIpInterfaceAddress(self, gbd1.bvi,
-                                        "10.0.0.128", 32).add_vpp_config()
+        ip_addr = VppIpInterfaceAddress(
+            self, gbd1.bvi, "10.0.0.128", 32
+        ).add_vpp_config()
 
         #
         # The Endpoint-group in which we are learning endpoints
         #
 
         #
         # The Endpoint-group in which we are learning endpoints
         #
-        epg_220 = VppGbpEndpointGroup(self, 220, 441, rd1, gbd1,
-                                      None, self.loop0,
-                                      "10.0.0.128",
-                                      "2001:10::128",
-                                      VppGbpEndpointRetention(4))
+        epg_220 = VppGbpEndpointGroup(
+            self,
+            220,
+            441,
+            rd1,
+            gbd1,
+            None,
+            self.loop0,
+            "10.0.0.128",
+            "2001:10::128",
+            VppGbpEndpointRetention(4),
+        )
         epg_220.add_vpp_config()
 
         #
         epg_220.add_vpp_config()
 
         #
@@ -2703,19 +3095,28 @@ class TestGBP(VppTestCase):
         # learning enabled
         #
         vx_tun_l2_1 = VppGbpVxlanTunnel(
         # learning enabled
         #
         vx_tun_l2_1 = VppGbpVxlanTunnel(
-            self, 99, bd1.bd_id,
+            self,
+            99,
+            bd1.bd_id,
             VppEnum.vl_api_gbp_vxlan_tunnel_mode_t.GBP_VXLAN_TUNNEL_MODE_L2,
             VppEnum.vl_api_gbp_vxlan_tunnel_mode_t.GBP_VXLAN_TUNNEL_MODE_L2,
-            self.pg2.local_ip4)
+            self.pg2.local_ip4,
+        )
         vx_tun_l2_1.add_vpp_config()
 
         #
         # A static endpoint that the learnt endpoints are trying to
         # talk to
         #
         vx_tun_l2_1.add_vpp_config()
 
         #
         # A static endpoint that the learnt endpoints are trying to
         # talk to
         #
-        ep = VppGbpEndpoint(self, vlan_11,
-                            epg_220, None,
-                            "10.0.0.127", "11.0.0.127",
-                            "2001:10::1", "3001::1")
+        ep = VppGbpEndpoint(
+            self,
+            vlan_11,
+            epg_220,
+            None,
+            "10.0.0.127",
+            "11.0.0.127",
+            "2001:10::1",
+            "3001::1",
+        )
         ep.add_vpp_config()
 
         self.assertTrue(find_route(self, ep.ip4, 32, table_id=1))
         ep.add_vpp_config()
 
         self.assertTrue(find_route(self, ep.ip4, 32, table_id=1))
@@ -2726,16 +3127,16 @@ class TestGBP(VppTestCase):
         for ii, l in enumerate(learnt):
             # a packet with an sclass from a known EPG
             # arriving on an unknown TEP
         for ii, l in enumerate(learnt):
             # a packet with an sclass from a known EPG
             # arriving on an unknown TEP
-            p = (Ether(src=self.pg2.remote_mac,
-                       dst=self.pg2.local_mac) /
-                 IP(src=self.pg2.remote_hosts[1].ip4,
-                    dst=self.pg2.local_ip4) /
-                 UDP(sport=1234, dport=48879) /
-                 VXLAN(vni=99, gpid=441, flags=0x88) /
-                 Ether(src=l['mac'], dst=ep.mac) /
-                 IP(src=l['ip'], dst=ep.ip4) /
-                 UDP(sport=1234, dport=1234) /
-                 Raw(b'\xa5' * 100))
+            p = (
+                Ether(src=self.pg2.remote_mac, dst=self.pg2.local_mac)
+                / IP(src=self.pg2.remote_hosts[1].ip4, dst=self.pg2.local_ip4)
+                / UDP(sport=1234, dport=48879)
+                / VXLAN(vni=99, gpid=441, flags=0x88)
+                / Ether(src=l["mac"], dst=ep.mac)
+                / IP(src=l["ip"], dst=ep.ip4)
+                / UDP(sport=1234, dport=1234)
+                / Raw(b"\xa5" * 100)
+            )
 
             rxs = self.send_and_expect(self.pg2, [p], self.pg0)
 
 
             rxs = self.send_and_expect(self.pg2, [p], self.pg0)
 
@@ -2749,15 +3150,15 @@ class TestGBP(VppTestCase):
             # the EP is not learnt since the BD setting prevents it
             # also no TEP too
             #
             # the EP is not learnt since the BD setting prevents it
             # also no TEP too
             #
-            self.assertFalse(find_gbp_endpoint(self,
-                                               vx_tun_l2_1.sw_if_index,
-                                               mac=l['mac']))
-            self.assertEqual(INDEX_INVALID,
-                             find_vxlan_gbp_tunnel(
-                                 self,
-                                 self.pg2.local_ip4,
-                                 self.pg2.remote_hosts[1].ip4,
-                                 99))
+            self.assertFalse(
+                find_gbp_endpoint(self, vx_tun_l2_1.sw_if_index, mac=l["mac"])
+            )
+            self.assertEqual(
+                INDEX_INVALID,
+                find_vxlan_gbp_tunnel(
+                    self, self.pg2.local_ip4, self.pg2.remote_hosts[1].ip4, 99
+                ),
+            )
 
         self.assertEqual(len(self.vapi.gbp_endpoint_dump()), 1)
 
 
         self.assertEqual(len(self.vapi.gbp_endpoint_dump()), 1)
 
@@ -2766,11 +3167,13 @@ class TestGBP(VppTestCase):
         # we didn't learn the remotes so they are sent to the UU-fwd
         #
         for l in learnt:
         # we didn't learn the remotes so they are sent to the UU-fwd
         #
         for l in learnt:
-            p = (Ether(src=ep.mac, dst=l['mac']) /
-                 Dot1Q(vlan=11) /
-                 IP(dst=l['ip'], src=ep.ip4) /
-                 UDP(sport=1234, dport=1234) /
-                 Raw(b'\xa5' * 100))
+            p = (
+                Ether(src=ep.mac, dst=l["mac"])
+                / Dot1Q(vlan=11)
+                / IP(dst=l["ip"], src=ep.ip4)
+                / UDP(sport=1234, dport=1234)
+                / Raw(b"\xa5" * 100)
+            )
 
             rxs = self.send_and_expect(self.pg0, p * 17, self.pg3)
 
 
             rxs = self.send_and_expect(self.pg0, p * 17, self.pg3)
 
@@ -2790,7 +3193,7 @@ class TestGBP(VppTestCase):
         self.pg3.unconfig_ip4()
 
     def test_gbp_learn_l3(self):
         self.pg3.unconfig_ip4()
 
     def test_gbp_learn_l3(self):
-        """ GBP L3 Endpoint Learning """
+        """GBP L3 Endpoint Learning"""
 
         self.vapi.cli("set logging class gbp level debug")
 
 
         self.vapi.cli("set logging class gbp level debug")
 
@@ -2798,12 +3201,10 @@ class TestGBP(VppTestCase):
         routed_dst_mac = "00:0c:0c:0c:0c:0c"
         routed_src_mac = "00:22:bd:f8:19:ff"
 
         routed_dst_mac = "00:0c:0c:0c:0c:0c"
         routed_src_mac = "00:22:bd:f8:19:ff"
 
-        learnt = [{'mac': '00:00:11:11:11:02',
-                   'ip': '10.0.1.2',
-                   'ip6': '2001:10::2'},
-                  {'mac': '00:00:11:11:11:03',
-                   'ip': '10.0.1.3',
-                   'ip6': '2001:10::3'}]
+        learnt = [
+            {"mac": "00:00:11:11:11:02", "ip": "10.0.1.2", "ip6": "2001:10::2"},
+            {"mac": "00:00:11:11:11:03", "ip": "10.0.1.3", "ip6": "2001:10::3"},
+        ]
 
         #
         # IP tables
 
         #
         # IP tables
@@ -2813,10 +3214,12 @@ class TestGBP(VppTestCase):
         t6 = VppIpTable(self, 1, True)
         t6.add_vpp_config()
 
         t6 = VppIpTable(self, 1, True)
         t6.add_vpp_config()
 
-        tun_ip4_uu = VppVxlanGbpTunnel(self, self.pg4.local_ip4,
-                                       self.pg4.remote_ip4, 114)
-        tun_ip6_uu = VppVxlanGbpTunnel(self, self.pg4.local_ip4,
-                                       self.pg4.remote_ip4, 116)
+        tun_ip4_uu = VppVxlanGbpTunnel(
+            self, self.pg4.local_ip4, self.pg4.remote_ip4, 114
+        )
+        tun_ip6_uu = VppVxlanGbpTunnel(
+            self, self.pg4.local_ip4, self.pg4.remote_ip4, 116
+        )
         tun_ip4_uu.add_vpp_config()
         tun_ip6_uu.add_vpp_config()
 
         tun_ip4_uu.add_vpp_config()
         tun_ip6_uu.add_vpp_config()
 
@@ -2859,40 +3262,56 @@ class TestGBP(VppTestCase):
         self.logger.info(self.vapi.cli("sh gbp route"))
 
         # ... and has a /32 and /128 applied
         self.logger.info(self.vapi.cli("sh gbp route"))
 
         # ... and has a /32 and /128 applied
-        ip4_addr = VppIpInterfaceAddress(self, gbd1.bvi,
-                                         "10.0.0.128", 32,
-                                         bind=b4).add_vpp_config()
-        ip6_addr = VppIpInterfaceAddress(self, gbd1.bvi,
-                                         "2001:10::128", 128,
-                                         bind=b6).add_vpp_config()
+        ip4_addr = VppIpInterfaceAddress(
+            self, gbd1.bvi, "10.0.0.128", 32, bind=b4
+        ).add_vpp_config()
+        ip6_addr = VppIpInterfaceAddress(
+            self, gbd1.bvi, "2001:10::128", 128, bind=b6
+        ).add_vpp_config()
 
         #
         # The Endpoint-group in which we are learning endpoints
         #
 
         #
         # The Endpoint-group in which we are learning endpoints
         #
-        epg_220 = VppGbpEndpointGroup(self, 220, 441, rd1, gbd1,
-                                      None, self.loop0,
-                                      "10.0.0.128",
-                                      "2001:10::128",
-                                      VppGbpEndpointRetention(4))
+        epg_220 = VppGbpEndpointGroup(
+            self,
+            220,
+            441,
+            rd1,
+            gbd1,
+            None,
+            self.loop0,
+            "10.0.0.128",
+            "2001:10::128",
+            VppGbpEndpointRetention(4),
+        )
         epg_220.add_vpp_config()
 
         #
         # The VXLAN GBP tunnel is in L3 mode with learning enabled
         #
         vx_tun_l3 = VppGbpVxlanTunnel(
         epg_220.add_vpp_config()
 
         #
         # The VXLAN GBP tunnel is in L3 mode with learning enabled
         #
         vx_tun_l3 = VppGbpVxlanTunnel(
-            self, 101, rd1.rd_id,
+            self,
+            101,
+            rd1.rd_id,
             VppEnum.vl_api_gbp_vxlan_tunnel_mode_t.GBP_VXLAN_TUNNEL_MODE_L3,
             VppEnum.vl_api_gbp_vxlan_tunnel_mode_t.GBP_VXLAN_TUNNEL_MODE_L3,
-            self.pg2.local_ip4)
+            self.pg2.local_ip4,
+        )
         vx_tun_l3.add_vpp_config()
 
         #
         # A static endpoint that the learnt endpoints are trying to
         # talk to
         #
         vx_tun_l3.add_vpp_config()
 
         #
         # A static endpoint that the learnt endpoints are trying to
         # talk to
         #
-        ep = VppGbpEndpoint(self, self.pg0,
-                            epg_220, None,
-                            "10.0.0.127", "11.0.0.127",
-                            "2001:10::1", "3001::1")
+        ep = VppGbpEndpoint(
+            self,
+            self.pg0,
+            epg_220,
+            None,
+            "10.0.0.127",
+            "11.0.0.127",
+            "2001:10::1",
+            "3001::1",
+        )
         ep.add_vpp_config()
 
         #
         ep.add_vpp_config()
 
         #
@@ -2901,40 +3320,38 @@ class TestGBP(VppTestCase):
         for ii, l in enumerate(learnt):
             # a packet with an sclass from a known EPG
             # arriving on an unknown TEP
         for ii, l in enumerate(learnt):
             # a packet with an sclass from a known EPG
             # arriving on an unknown TEP
-            p = (Ether(src=self.pg2.remote_mac,
-                       dst=self.pg2.local_mac) /
-                 IP(src=self.pg2.remote_hosts[1].ip4,
-                    dst=self.pg2.local_ip4) /
-                 UDP(sport=1234, dport=48879) /
-                 VXLAN(vni=101, gpid=441, flags=0x88) /
-                 Ether(src=l['mac'], dst="00:00:00:11:11:11") /
-                 IP(src=l['ip'], dst=ep.ip4) /
-                 UDP(sport=1234, dport=1234) /
-                 Raw(b'\xa5' * 100))
+            p = (
+                Ether(src=self.pg2.remote_mac, dst=self.pg2.local_mac)
+                / IP(src=self.pg2.remote_hosts[1].ip4, dst=self.pg2.local_ip4)
+                / UDP(sport=1234, dport=48879)
+                / VXLAN(vni=101, gpid=441, flags=0x88)
+                / Ether(src=l["mac"], dst="00:00:00:11:11:11")
+                / IP(src=l["ip"], dst=ep.ip4)
+                / UDP(sport=1234, dport=1234)
+                / Raw(b"\xa5" * 100)
+            )
 
             rx = self.send_and_expect(self.pg2, [p], self.pg0)
 
             # the new TEP
             tep1_sw_if_index = find_vxlan_gbp_tunnel(
 
             rx = self.send_and_expect(self.pg2, [p], self.pg0)
 
             # the new TEP
             tep1_sw_if_index = find_vxlan_gbp_tunnel(
-                self,
-                self.pg2.local_ip4,
-                self.pg2.remote_hosts[1].ip4,
-                vx_tun_l3.vni)
+                self, self.pg2.local_ip4, self.pg2.remote_hosts[1].ip4, vx_tun_l3.vni
+            )
             self.assertNotEqual(INDEX_INVALID, tep1_sw_if_index)
 
             # endpoint learnt via the parent GBP-vxlan interface
             self.assertNotEqual(INDEX_INVALID, tep1_sw_if_index)
 
             # endpoint learnt via the parent GBP-vxlan interface
-            self.assertTrue(find_gbp_endpoint(self,
-                                              vx_tun_l3._sw_if_index,
-                                              ip=l['ip']))
+            self.assertTrue(find_gbp_endpoint(self, vx_tun_l3._sw_if_index, ip=l["ip"]))
 
         #
         # Static IPv4 EP replies to learnt
         #
         for l in learnt:
 
         #
         # Static IPv4 EP replies to learnt
         #
         for l in learnt:
-            p = (Ether(src=ep.mac, dst=self.loop0.local_mac) /
-                 IP(dst=l['ip'], src=ep.ip4) /
-                 UDP(sport=1234, dport=1234) /
-                 Raw(b'\xa5' * 100))
+            p = (
+                Ether(src=ep.mac, dst=self.loop0.local_mac)
+                / IP(dst=l["ip"], src=ep.ip4)
+                / UDP(sport=1234, dport=1234)
+                / Raw(b"\xa5" * 100)
+            )
 
             rxs = self.send_and_expect(self.pg0, p * 1, self.pg2)
 
 
             rxs = self.send_and_expect(self.pg0, p * 1, self.pg2)
 
@@ -2955,12 +3372,10 @@ class TestGBP(VppTestCase):
                 self.assertEqual(inner[Ether].src, routed_src_mac)
                 self.assertEqual(inner[Ether].dst, routed_dst_mac)
                 self.assertEqual(inner[IP].src, ep.ip4)
                 self.assertEqual(inner[Ether].src, routed_src_mac)
                 self.assertEqual(inner[Ether].dst, routed_dst_mac)
                 self.assertEqual(inner[IP].src, ep.ip4)
-                self.assertEqual(inner[IP].dst, l['ip'])
+                self.assertEqual(inner[IP].dst, l["ip"])
 
         for l in learnt:
 
         for l in learnt:
-            self.assertFalse(find_gbp_endpoint(self,
-                                               tep1_sw_if_index,
-                                               ip=l['ip']))
+            self.assertFalse(find_gbp_endpoint(self, tep1_sw_if_index, ip=l["ip"]))
 
         #
         # learn some remote IPv6 EPs
 
         #
         # learn some remote IPv6 EPs
@@ -2968,25 +3383,23 @@ class TestGBP(VppTestCase):
         for ii, l in enumerate(learnt):
             # a packet with an sclass from a known EPG
             # arriving on an unknown TEP
         for ii, l in enumerate(learnt):
             # a packet with an sclass from a known EPG
             # arriving on an unknown TEP
-            p = (Ether(src=self.pg2.remote_mac,
-                       dst=self.pg2.local_mac) /
-                 IP(src=self.pg2.remote_hosts[1].ip4,
-                    dst=self.pg2.local_ip4) /
-                 UDP(sport=1234, dport=48879) /
-                 VXLAN(vni=101, gpid=441, flags=0x88) /
-                 Ether(src=l['mac'], dst="00:00:00:11:11:11") /
-                 IPv6(src=l['ip6'], dst=ep.ip6) /
-                 UDP(sport=1234, dport=1234) /
-                 Raw(b'\xa5' * 100))
+            p = (
+                Ether(src=self.pg2.remote_mac, dst=self.pg2.local_mac)
+                / IP(src=self.pg2.remote_hosts[1].ip4, dst=self.pg2.local_ip4)
+                / UDP(sport=1234, dport=48879)
+                / VXLAN(vni=101, gpid=441, flags=0x88)
+                / Ether(src=l["mac"], dst="00:00:00:11:11:11")
+                / IPv6(src=l["ip6"], dst=ep.ip6)
+                / UDP(sport=1234, dport=1234)
+                / Raw(b"\xa5" * 100)
+            )
 
             rx = self.send_and_expect(self.pg2, [p], self.pg0)
 
             # the new TEP
             tep1_sw_if_index = find_vxlan_gbp_tunnel(
 
             rx = self.send_and_expect(self.pg2, [p], self.pg0)
 
             # the new TEP
             tep1_sw_if_index = find_vxlan_gbp_tunnel(
-                self,
-                self.pg2.local_ip4,
-                self.pg2.remote_hosts[1].ip4,
-                vx_tun_l3.vni)
+                self, self.pg2.local_ip4, self.pg2.remote_hosts[1].ip4, vx_tun_l3.vni
+            )
             self.assertNotEqual(INDEX_INVALID, tep1_sw_if_index)
 
             self.logger.info(self.vapi.cli("show gbp bridge"))
             self.assertNotEqual(INDEX_INVALID, tep1_sw_if_index)
 
             self.logger.info(self.vapi.cli("show gbp bridge"))
@@ -2995,19 +3408,21 @@ class TestGBP(VppTestCase):
             self.logger.info(self.vapi.cli("show int addr"))
 
             # endpoint learnt via the TEP
             self.logger.info(self.vapi.cli("show int addr"))
 
             # endpoint learnt via the TEP
-            self.assertTrue(find_gbp_endpoint(self, ip=l['ip6']))
+            self.assertTrue(find_gbp_endpoint(self, ip=l["ip6"]))
 
         self.logger.info(self.vapi.cli("show gbp endpoint"))
 
         self.logger.info(self.vapi.cli("show gbp endpoint"))
-        self.logger.info(self.vapi.cli("show ip fib index 1 %s" % l['ip']))
+        self.logger.info(self.vapi.cli("show ip fib index 1 %s" % l["ip"]))
 
         #
         # Static EP replies to learnt
         #
         for l in learnt:
 
         #
         # Static EP replies to learnt
         #
         for l in learnt:
-            p = (Ether(src=ep.mac, dst=self.loop0.local_mac) /
-                 IPv6(dst=l['ip6'], src=ep.ip6) /
-                 UDP(sport=1234, dport=1234) /
-                 Raw(b'\xa5' * 100))
+            p = (
+                Ether(src=ep.mac, dst=self.loop0.local_mac)
+                / IPv6(dst=l["ip6"], src=ep.ip6)
+                / UDP(sport=1234, dport=1234)
+                / Raw(b"\xa5" * 100)
+            )
 
             rxs = self.send_and_expect(self.pg0, p * NUM_PKTS, self.pg2)
 
 
             rxs = self.send_and_expect(self.pg0, p * NUM_PKTS, self.pg2)
 
@@ -3028,19 +3443,21 @@ class TestGBP(VppTestCase):
                 self.assertEqual(inner[Ether].src, routed_src_mac)
                 self.assertEqual(inner[Ether].dst, routed_dst_mac)
                 self.assertEqual(inner[IPv6].src, ep.ip6)
                 self.assertEqual(inner[Ether].src, routed_src_mac)
                 self.assertEqual(inner[Ether].dst, routed_dst_mac)
                 self.assertEqual(inner[IPv6].src, ep.ip6)
-                self.assertEqual(inner[IPv6].dst, l['ip6'])
+                self.assertEqual(inner[IPv6].dst, l["ip6"])
 
         self.logger.info(self.vapi.cli("sh gbp endpoint"))
         for l in learnt:
 
         self.logger.info(self.vapi.cli("sh gbp endpoint"))
         for l in learnt:
-            self.wait_for_ep_timeout(ip=l['ip'])
+            self.wait_for_ep_timeout(ip=l["ip"])
 
         #
         # Static sends to unknown EP with no route
         #
 
         #
         # Static sends to unknown EP with no route
         #
-        p = (Ether(src=ep.mac, dst=self.loop0.local_mac) /
-             IP(dst="10.0.0.99", src=ep.ip4) /
-             UDP(sport=1234, dport=1234) /
-             Raw(b'\xa5' * 100))
+        p = (
+            Ether(src=ep.mac, dst=self.loop0.local_mac)
+            / IP(dst="10.0.0.99", src=ep.ip4)
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
 
         self.send_and_assert_no_replies(self.pg0, [p])
 
 
         self.send_and_assert_no_replies(self.pg0, [p])
 
@@ -3048,34 +3465,44 @@ class TestGBP(VppTestCase):
         # Add a route to static EP's v4 and v6 subnet
         #
         se_10_24 = VppGbpSubnet(
         # Add a route to static EP's v4 and v6 subnet
         #
         se_10_24 = VppGbpSubnet(
-            self, rd1, "10.0.0.0", 24,
-            VppEnum.vl_api_gbp_subnet_type_t.GBP_API_SUBNET_TRANSPORT)
+            self,
+            rd1,
+            "10.0.0.0",
+            24,
+            VppEnum.vl_api_gbp_subnet_type_t.GBP_API_SUBNET_TRANSPORT,
+        )
         se_10_24.add_vpp_config()
 
         #
         # static pings router
         #
         se_10_24.add_vpp_config()
 
         #
         # static pings router
         #
-        p = (Ether(src=ep.mac, dst=self.loop0.local_mac) /
-             IP(dst=epg_220.bvi_ip4, src=ep.ip4) /
-             UDP(sport=1234, dport=1234) /
-             Raw(b'\xa5' * 100))
+        p = (
+            Ether(src=ep.mac, dst=self.loop0.local_mac)
+            / IP(dst=epg_220.bvi_ip4, src=ep.ip4)
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
 
         self.send_and_expect(self.pg0, p * NUM_PKTS, self.pg0)
 
 
         self.send_and_expect(self.pg0, p * NUM_PKTS, self.pg0)
 
-        p = (Ether(src=ep.mac, dst=self.loop0.local_mac) /
-             IPv6(dst=epg_220.bvi_ip6, src=ep.ip6) /
-             UDP(sport=1234, dport=1234) /
-             Raw(b'\xa5' * 100))
+        p = (
+            Ether(src=ep.mac, dst=self.loop0.local_mac)
+            / IPv6(dst=epg_220.bvi_ip6, src=ep.ip6)
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
 
         self.send_and_expect(self.pg0, p * NUM_PKTS, self.pg0)
 
         #
         # packets to address in the subnet are sent on the uu-fwd
         #
 
         self.send_and_expect(self.pg0, p * NUM_PKTS, self.pg0)
 
         #
         # packets to address in the subnet are sent on the uu-fwd
         #
-        p = (Ether(src=ep.mac, dst=self.loop0.local_mac) /
-             IP(dst="10.0.0.99", src=ep.ip4) /
-             UDP(sport=1234, dport=1234) /
-             Raw(b'\xa5' * 100))
+        p = (
+            Ether(src=ep.mac, dst=self.loop0.local_mac)
+            / IP(dst="10.0.0.99", src=ep.ip4)
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
 
         rxs = self.send_and_expect(self.pg0, [p], self.pg4)
         for rx in rxs:
 
         rxs = self.send_and_expect(self.pg0, [p], self.pg4)
         for rx in rxs:
@@ -3097,43 +3524,45 @@ class TestGBP(VppTestCase):
         for ii, l in enumerate(learnt):
             # a packet with an sclass from a known EPG
             # arriving on an unknown TEP
         for ii, l in enumerate(learnt):
             # a packet with an sclass from a known EPG
             # arriving on an unknown TEP
-            p = (Ether(src=self.pg2.remote_mac,
-                       dst=self.pg2.local_mac) /
-                 IP(src=self.pg2.remote_hosts[2].ip4,
-                    dst=self.pg2.local_ip4) /
-                 UDP(sport=1234, dport=48879) /
-                 VXLAN(vni=101, gpid=441, flags=0x88) /
-                 Ether(src=l['mac'], dst="00:00:00:11:11:11") /
-                 IP(src=l['ip'], dst=ep.ip4) /
-                 UDP(sport=1234, dport=1234) /
-                 Raw(b'\xa5' * 100))
+            p = (
+                Ether(src=self.pg2.remote_mac, dst=self.pg2.local_mac)
+                / IP(src=self.pg2.remote_hosts[2].ip4, dst=self.pg2.local_ip4)
+                / UDP(sport=1234, dport=48879)
+                / VXLAN(vni=101, gpid=441, flags=0x88)
+                / Ether(src=l["mac"], dst="00:00:00:11:11:11")
+                / IP(src=l["ip"], dst=ep.ip4)
+                / UDP(sport=1234, dport=1234)
+                / Raw(b"\xa5" * 100)
+            )
 
             rx = self.send_and_expect(self.pg2, [p], self.pg0)
 
             # the new TEP
             tep1_sw_if_index = find_vxlan_gbp_tunnel(
 
             rx = self.send_and_expect(self.pg2, [p], self.pg0)
 
             # the new TEP
             tep1_sw_if_index = find_vxlan_gbp_tunnel(
-                self,
-                self.pg2.local_ip4,
-                self.pg2.remote_hosts[2].ip4,
-                vx_tun_l3.vni)
+                self, self.pg2.local_ip4, self.pg2.remote_hosts[2].ip4, vx_tun_l3.vni
+            )
             self.assertNotEqual(INDEX_INVALID, tep1_sw_if_index)
 
             # endpoint learnt via the parent GBP-vxlan interface
             self.assertNotEqual(INDEX_INVALID, tep1_sw_if_index)
 
             # endpoint learnt via the parent GBP-vxlan interface
-            self.assertTrue(find_gbp_endpoint(self,
-                                              vx_tun_l3._sw_if_index,
-                                              ip=l['ip']))
+            self.assertTrue(find_gbp_endpoint(self, vx_tun_l3._sw_if_index, ip=l["ip"]))
 
         #
         # Add a remote endpoint from the API
         #
 
         #
         # Add a remote endpoint from the API
         #
-        rep_88 = VppGbpEndpoint(self, vx_tun_l3,
-                                epg_220, None,
-                                "10.0.0.88", "11.0.0.88",
-                                "2001:10::88", "3001::88",
-                                ep_flags.GBP_API_ENDPOINT_FLAG_REMOTE,
-                                self.pg2.local_ip4,
-                                self.pg2.remote_hosts[2].ip4,
-                                mac=None)
+        rep_88 = VppGbpEndpoint(
+            self,
+            vx_tun_l3,
+            epg_220,
+            None,
+            "10.0.0.88",
+            "11.0.0.88",
+            "2001:10::88",
+            "3001::88",
+            ep_flags.GBP_API_ENDPOINT_FLAG_REMOTE,
+            self.pg2.local_ip4,
+            self.pg2.remote_hosts[2].ip4,
+            mac=None,
+        )
         rep_88.add_vpp_config()
 
         #
         rep_88.add_vpp_config()
 
         #
@@ -3141,14 +3570,20 @@ class TestGBP(VppTestCase):
         # this is a lower priority, hence the packet is sent to the DP leanrt
         # TEP
         #
         # this is a lower priority, hence the packet is sent to the DP leanrt
         # TEP
         #
-        rep_2 = VppGbpEndpoint(self, vx_tun_l3,
-                               epg_220, None,
-                               learnt[0]['ip'], "11.0.0.101",
-                               learnt[0]['ip6'], "3001::101",
-                               ep_flags.GBP_API_ENDPOINT_FLAG_REMOTE,
-                               self.pg2.local_ip4,
-                               self.pg2.remote_hosts[1].ip4,
-                               mac=None)
+        rep_2 = VppGbpEndpoint(
+            self,
+            vx_tun_l3,
+            epg_220,
+            None,
+            learnt[0]["ip"],
+            "11.0.0.101",
+            learnt[0]["ip6"],
+            "3001::101",
+            ep_flags.GBP_API_ENDPOINT_FLAG_REMOTE,
+            self.pg2.local_ip4,
+            self.pg2.remote_hosts[1].ip4,
+            mac=None,
+        )
         rep_2.add_vpp_config()
 
         #
         rep_2.add_vpp_config()
 
         #
@@ -3156,18 +3591,24 @@ class TestGBP(VppTestCase):
         #  packets should be send on the v4/v6 uu=fwd interface resp.
         #
         se_10_1_24 = VppGbpSubnet(
         #  packets should be send on the v4/v6 uu=fwd interface resp.
         #
         se_10_1_24 = VppGbpSubnet(
-            self, rd1, "10.0.1.0", 24,
-            VppEnum.vl_api_gbp_subnet_type_t.GBP_API_SUBNET_TRANSPORT)
+            self,
+            rd1,
+            "10.0.1.0",
+            24,
+            VppEnum.vl_api_gbp_subnet_type_t.GBP_API_SUBNET_TRANSPORT,
+        )
         se_10_1_24.add_vpp_config()
 
         self.logger.info(self.vapi.cli("show gbp endpoint"))
 
         se_10_1_24.add_vpp_config()
 
         self.logger.info(self.vapi.cli("show gbp endpoint"))
 
-        ips = ["10.0.0.88", learnt[0]['ip']]
+        ips = ["10.0.0.88", learnt[0]["ip"]]
         for ip in ips:
         for ip in ips:
-            p = (Ether(src=ep.mac, dst=self.loop0.local_mac) /
-                 IP(dst=ip, src=ep.ip4) /
-                 UDP(sport=1234, dport=1234) /
-                 Raw(b'\xa5' * 100))
+            p = (
+                Ether(src=ep.mac, dst=self.loop0.local_mac)
+                / IP(dst=ip, src=ep.ip4)
+                / UDP(sport=1234, dport=1234)
+                / Raw(b"\xa5" * 100)
+            )
 
             rxs = self.send_and_expect(self.pg0, p * NUM_PKTS, self.pg2)
 
 
             rxs = self.send_and_expect(self.pg0, p * NUM_PKTS, self.pg2)
 
@@ -3199,18 +3640,22 @@ class TestGBP(VppTestCase):
 
         self.assertTrue(find_gbp_endpoint(self, ip=rep_2.ip4))
 
 
         self.assertTrue(find_gbp_endpoint(self, ip=rep_2.ip4))
 
-        p = (Ether(src=ep.mac, dst=self.loop0.local_mac) /
-             IP(src=ep.ip4, dst=rep_2.ip4) /
-             UDP(sport=1234, dport=1234) /
-             Raw(b'\xa5' * 100))
+        p = (
+            Ether(src=ep.mac, dst=self.loop0.local_mac)
+            / IP(src=ep.ip4, dst=rep_2.ip4)
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
         rxs = self.send_and_expect(self.pg0, [p], self.pg2)
 
         self.assertFalse(find_gbp_endpoint(self, ip=rep_88.ip4))
 
         rxs = self.send_and_expect(self.pg0, [p], self.pg2)
 
         self.assertFalse(find_gbp_endpoint(self, ip=rep_88.ip4))
 
-        p = (Ether(src=ep.mac, dst=self.loop0.local_mac) /
-             IP(src=ep.ip4, dst=rep_88.ip4) /
-             UDP(sport=1234, dport=1234) /
-             Raw(b'\xa5' * 100))
+        p = (
+            Ether(src=ep.mac, dst=self.loop0.local_mac)
+            / IP(src=ep.ip4, dst=rep_88.ip4)
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
         rxs = self.send_and_expect(self.pg0, [p], self.pg4)
 
         #
         rxs = self.send_and_expect(self.pg0, [p], self.pg4)
 
         #
@@ -3225,38 +3670,49 @@ class TestGBP(VppTestCase):
         # Same as above, learn a remote EP via CP and DP
         # this time remove the DP one first. expect the CP data to remain
         #
         # Same as above, learn a remote EP via CP and DP
         # this time remove the DP one first. expect the CP data to remain
         #
-        rep_3 = VppGbpEndpoint(self, vx_tun_l3,
-                               epg_220, None,
-                               "10.0.1.4", "11.0.0.103",
-                               "2001::10:3", "3001::103",
-                               ep_flags.GBP_API_ENDPOINT_FLAG_REMOTE,
-                               self.pg2.local_ip4,
-                               self.pg2.remote_hosts[1].ip4,
-                               mac=None)
+        rep_3 = VppGbpEndpoint(
+            self,
+            vx_tun_l3,
+            epg_220,
+            None,
+            "10.0.1.4",
+            "11.0.0.103",
+            "2001::10:3",
+            "3001::103",
+            ep_flags.GBP_API_ENDPOINT_FLAG_REMOTE,
+            self.pg2.local_ip4,
+            self.pg2.remote_hosts[1].ip4,
+            mac=None,
+        )
         rep_3.add_vpp_config()
 
         rep_3.add_vpp_config()
 
-        p = (Ether(src=self.pg2.remote_mac,
-                   dst=self.pg2.local_mac) /
-             IP(src=self.pg2.remote_hosts[2].ip4,
-                dst=self.pg2.local_ip4) /
-             UDP(sport=1234, dport=48879) /
-             VXLAN(vni=101, gpid=441, flags=0x88) /
-             Ether(src=l['mac'], dst="00:00:00:11:11:11") /
-             IP(src="10.0.1.4", dst=ep.ip4) /
-             UDP(sport=1234, dport=1234) /
-             Raw(b'\xa5' * 100))
+        p = (
+            Ether(src=self.pg2.remote_mac, dst=self.pg2.local_mac)
+            / IP(src=self.pg2.remote_hosts[2].ip4, dst=self.pg2.local_ip4)
+            / UDP(sport=1234, dport=48879)
+            / VXLAN(vni=101, gpid=441, flags=0x88)
+            / Ether(src=l["mac"], dst="00:00:00:11:11:11")
+            / IP(src="10.0.1.4", dst=ep.ip4)
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
         rxs = self.send_and_expect(self.pg2, p * NUM_PKTS, self.pg0)
 
         rxs = self.send_and_expect(self.pg2, p * NUM_PKTS, self.pg0)
 
-        self.assertTrue(find_gbp_endpoint(self,
-                                          vx_tun_l3._sw_if_index,
-                                          ip=rep_3.ip4,
-                                          tep=[self.pg2.local_ip4,
-                                               self.pg2.remote_hosts[2].ip4]))
+        self.assertTrue(
+            find_gbp_endpoint(
+                self,
+                vx_tun_l3._sw_if_index,
+                ip=rep_3.ip4,
+                tep=[self.pg2.local_ip4, self.pg2.remote_hosts[2].ip4],
+            )
+        )
 
 
-        p = (Ether(src=ep.mac, dst=self.loop0.local_mac) /
-             IP(dst="10.0.1.4", src=ep.ip4) /
-             UDP(sport=1234, dport=1234) /
-             Raw(b'\xa5' * 100))
+        p = (
+            Ether(src=ep.mac, dst=self.loop0.local_mac)
+            / IP(dst="10.0.1.4", src=ep.ip4)
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
         rxs = self.send_and_expect(self.pg0, p * NUM_PKTS, self.pg2)
 
         # host 2 is the DP learned TEP
         rxs = self.send_and_expect(self.pg0, p * NUM_PKTS, self.pg2)
 
         # host 2 is the DP learned TEP
@@ -3264,9 +3720,9 @@ class TestGBP(VppTestCase):
             self.assertEqual(rx[IP].src, self.pg2.local_ip4)
             self.assertEqual(rx[IP].dst, self.pg2.remote_hosts[2].ip4)
 
             self.assertEqual(rx[IP].src, self.pg2.local_ip4)
             self.assertEqual(rx[IP].dst, self.pg2.remote_hosts[2].ip4)
 
-        self.wait_for_ep_timeout(ip=rep_3.ip4,
-                                 tep=[self.pg2.local_ip4,
-                                      self.pg2.remote_hosts[2].ip4])
+        self.wait_for_ep_timeout(
+            ip=rep_3.ip4, tep=[self.pg2.local_ip4, self.pg2.remote_hosts[2].ip4]
+        )
 
         rxs = self.send_and_expect(self.pg0, p * NUM_PKTS, self.pg2)
 
 
         rxs = self.send_and_expect(self.pg0, p * NUM_PKTS, self.pg2)
 
@@ -3278,23 +3734,21 @@ class TestGBP(VppTestCase):
         #
         # shutdown with learnt endpoint present
         #
         #
         # shutdown with learnt endpoint present
         #
-        p = (Ether(src=self.pg2.remote_mac,
-                   dst=self.pg2.local_mac) /
-             IP(src=self.pg2.remote_hosts[1].ip4,
-                dst=self.pg2.local_ip4) /
-             UDP(sport=1234, dport=48879) /
-             VXLAN(vni=101, gpid=441, flags=0x88) /
-             Ether(src=l['mac'], dst="00:00:00:11:11:11") /
-             IP(src=learnt[1]['ip'], dst=ep.ip4) /
-             UDP(sport=1234, dport=1234) /
-             Raw(b'\xa5' * 100))
+        p = (
+            Ether(src=self.pg2.remote_mac, dst=self.pg2.local_mac)
+            / IP(src=self.pg2.remote_hosts[1].ip4, dst=self.pg2.local_ip4)
+            / UDP(sport=1234, dport=48879)
+            / VXLAN(vni=101, gpid=441, flags=0x88)
+            / Ether(src=l["mac"], dst="00:00:00:11:11:11")
+            / IP(src=learnt[1]["ip"], dst=ep.ip4)
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
 
         rx = self.send_and_expect(self.pg2, [p], self.pg0)
 
         # endpoint learnt via the parent GBP-vxlan interface
 
         rx = self.send_and_expect(self.pg2, [p], self.pg0)
 
         # endpoint learnt via the parent GBP-vxlan interface
-        self.assertTrue(find_gbp_endpoint(self,
-                                          vx_tun_l3._sw_if_index,
-                                          ip=l['ip']))
+        self.assertTrue(find_gbp_endpoint(self, vx_tun_l3._sw_if_index, ip=l["ip"]))
 
         #
         # TODO
 
         #
         # TODO
@@ -3305,7 +3759,7 @@ class TestGBP(VppTestCase):
         self.pg4.unconfig_ip4()
 
     def test_gbp_redirect(self):
         self.pg4.unconfig_ip4()
 
     def test_gbp_redirect(self):
-        """ GBP Endpoint Redirect """
+        """GBP Endpoint Redirect"""
 
         self.vapi.cli("set logging class gbp level debug")
 
 
         self.vapi.cli("set logging class gbp level debug")
 
@@ -3313,12 +3767,10 @@ class TestGBP(VppTestCase):
         routed_dst_mac = "00:0c:0c:0c:0c:0c"
         routed_src_mac = "00:22:bd:f8:19:ff"
 
         routed_dst_mac = "00:0c:0c:0c:0c:0c"
         routed_src_mac = "00:22:bd:f8:19:ff"
 
-        learnt = [{'mac': '00:00:11:11:11:02',
-                   'ip': '10.0.1.2',
-                   'ip6': '2001:10::2'},
-                  {'mac': '00:00:11:11:11:03',
-                   'ip': '10.0.1.3',
-                   'ip6': '2001:10::3'}]
+        learnt = [
+            {"mac": "00:00:11:11:11:02", "ip": "10.0.1.2", "ip6": "2001:10::2"},
+            {"mac": "00:00:11:11:11:03", "ip": "10.0.1.3", "ip6": "2001:10::3"},
+        ]
 
         #
         # IP tables
 
         #
         # IP tables
@@ -3359,139 +3811,226 @@ class TestGBP(VppTestCase):
         gbd2.add_vpp_config()
 
         # ... and has a /32 and /128 applied
         gbd2.add_vpp_config()
 
         # ... and has a /32 and /128 applied
-        ip4_addr = VppIpInterfaceAddress(self, gbd1.bvi,
-                                         "10.0.0.128", 32,
-                                         bind=b_ip4).add_vpp_config()
-        ip6_addr = VppIpInterfaceAddress(self, gbd1.bvi,
-                                         "2001:10::128", 128,
-                                         bind=b_ip6).add_vpp_config()
-        ip4_addr = VppIpInterfaceAddress(self, gbd2.bvi,
-                                         "10.0.1.128", 32).add_vpp_config()
-        ip6_addr = VppIpInterfaceAddress(self, gbd2.bvi,
-                                         "2001:11::128", 128).add_vpp_config()
+        ip4_addr = VppIpInterfaceAddress(
+            self, gbd1.bvi, "10.0.0.128", 32, bind=b_ip4
+        ).add_vpp_config()
+        ip6_addr = VppIpInterfaceAddress(
+            self, gbd1.bvi, "2001:10::128", 128, bind=b_ip6
+        ).add_vpp_config()
+        ip4_addr = VppIpInterfaceAddress(
+            self, gbd2.bvi, "10.0.1.128", 32
+        ).add_vpp_config()
+        ip6_addr = VppIpInterfaceAddress(
+            self, gbd2.bvi, "2001:11::128", 128
+        ).add_vpp_config()
 
         #
         # The Endpoint-groups in which we are learning endpoints
         #
 
         #
         # The Endpoint-groups in which we are learning endpoints
         #
-        epg_220 = VppGbpEndpointGroup(self, 220, 440, rd1, gbd1,
-                                      None, gbd1.bvi,
-                                      "10.0.0.128",
-                                      "2001:10::128",
-                                      VppGbpEndpointRetention(60))
+        epg_220 = VppGbpEndpointGroup(
+            self,
+            220,
+            440,
+            rd1,
+            gbd1,
+            None,
+            gbd1.bvi,
+            "10.0.0.128",
+            "2001:10::128",
+            VppGbpEndpointRetention(60),
+        )
         epg_220.add_vpp_config()
         epg_220.add_vpp_config()
-        epg_221 = VppGbpEndpointGroup(self, 221, 441, rd1, gbd2,
-                                      None, gbd2.bvi,
-                                      "10.0.1.128",
-                                      "2001:11::128",
-                                      VppGbpEndpointRetention(60))
+        epg_221 = VppGbpEndpointGroup(
+            self,
+            221,
+            441,
+            rd1,
+            gbd2,
+            None,
+            gbd2.bvi,
+            "10.0.1.128",
+            "2001:11::128",
+            VppGbpEndpointRetention(60),
+        )
         epg_221.add_vpp_config()
         epg_221.add_vpp_config()
-        epg_222 = VppGbpEndpointGroup(self, 222, 442, rd1, gbd1,
-                                      None, gbd1.bvi,
-                                      "10.0.2.128",
-                                      "2001:12::128",
-                                      VppGbpEndpointRetention(60))
+        epg_222 = VppGbpEndpointGroup(
+            self,
+            222,
+            442,
+            rd1,
+            gbd1,
+            None,
+            gbd1.bvi,
+            "10.0.2.128",
+            "2001:12::128",
+            VppGbpEndpointRetention(60),
+        )
         epg_222.add_vpp_config()
 
         #
         # a GBP bridge domains for the SEPs
         #
         epg_222.add_vpp_config()
 
         #
         # a GBP bridge domains for the SEPs
         #
-        bd_uu1 = VppVxlanGbpTunnel(self, self.pg7.local_ip4,
-                                   self.pg7.remote_ip4, 116)
+        bd_uu1 = VppVxlanGbpTunnel(self, self.pg7.local_ip4, self.pg7.remote_ip4, 116)
         bd_uu1.add_vpp_config()
         bd_uu1.add_vpp_config()
-        bd_uu2 = VppVxlanGbpTunnel(self, self.pg7.local_ip4,
-                                   self.pg7.remote_ip4, 117)
+        bd_uu2 = VppVxlanGbpTunnel(self, self.pg7.local_ip4, self.pg7.remote_ip4, 117)
         bd_uu2.add_vpp_config()
 
         bd3 = VppBridgeDomain(self, 3)
         bd3.add_vpp_config()
         bd_uu2.add_vpp_config()
 
         bd3 = VppBridgeDomain(self, 3)
         bd3.add_vpp_config()
-        gbd3 = VppGbpBridgeDomain(self, bd3, rd1, self.loop2,
-                                  bd_uu1, learn=False)
+        gbd3 = VppGbpBridgeDomain(self, bd3, rd1, self.loop2, bd_uu1, learn=False)
         gbd3.add_vpp_config()
         bd4 = VppBridgeDomain(self, 4)
         bd4.add_vpp_config()
         gbd3.add_vpp_config()
         bd4 = VppBridgeDomain(self, 4)
         bd4.add_vpp_config()
-        gbd4 = VppGbpBridgeDomain(self, bd4, rd1, self.loop3,
-                                  bd_uu2, learn=False)
+        gbd4 = VppGbpBridgeDomain(self, bd4, rd1, self.loop3, bd_uu2, learn=False)
         gbd4.add_vpp_config()
 
         #
         # EPGs in which the service endpoints exist
         #
         gbd4.add_vpp_config()
 
         #
         # EPGs in which the service endpoints exist
         #
-        epg_320 = VppGbpEndpointGroup(self, 320, 550, rd1, gbd3,
-                                      None, gbd1.bvi,
-                                      "12.0.0.128",
-                                      "4001:10::128",
-                                      VppGbpEndpointRetention(60))
+        epg_320 = VppGbpEndpointGroup(
+            self,
+            320,
+            550,
+            rd1,
+            gbd3,
+            None,
+            gbd1.bvi,
+            "12.0.0.128",
+            "4001:10::128",
+            VppGbpEndpointRetention(60),
+        )
         epg_320.add_vpp_config()
         epg_320.add_vpp_config()
-        epg_321 = VppGbpEndpointGroup(self, 321, 551, rd1, gbd4,
-                                      None, gbd2.bvi,
-                                      "12.0.1.128",
-                                      "4001:11::128",
-                                      VppGbpEndpointRetention(60))
+        epg_321 = VppGbpEndpointGroup(
+            self,
+            321,
+            551,
+            rd1,
+            gbd4,
+            None,
+            gbd2.bvi,
+            "12.0.1.128",
+            "4001:11::128",
+            VppGbpEndpointRetention(60),
+        )
         epg_321.add_vpp_config()
 
         #
         # three local endpoints
         #
         epg_321.add_vpp_config()
 
         #
         # three local endpoints
         #
-        ep1 = VppGbpEndpoint(self, self.pg0,
-                             epg_220, None,
-                             "10.0.0.1", "11.0.0.1",
-                             "2001:10::1", "3001:10::1")
+        ep1 = VppGbpEndpoint(
+            self,
+            self.pg0,
+            epg_220,
+            None,
+            "10.0.0.1",
+            "11.0.0.1",
+            "2001:10::1",
+            "3001:10::1",
+        )
         ep1.add_vpp_config()
         ep1.add_vpp_config()
-        ep2 = VppGbpEndpoint(self, self.pg1,
-                             epg_221, None,
-                             "10.0.1.1", "11.0.1.1",
-                             "2001:11::1", "3001:11::1")
+        ep2 = VppGbpEndpoint(
+            self,
+            self.pg1,
+            epg_221,
+            None,
+            "10.0.1.1",
+            "11.0.1.1",
+            "2001:11::1",
+            "3001:11::1",
+        )
         ep2.add_vpp_config()
         ep2.add_vpp_config()
-        ep3 = VppGbpEndpoint(self, self.pg2,
-                             epg_222, None,
-                             "10.0.2.2", "11.0.2.2",
-                             "2001:12::1", "3001:12::1")
+        ep3 = VppGbpEndpoint(
+            self,
+            self.pg2,
+            epg_222,
+            None,
+            "10.0.2.2",
+            "11.0.2.2",
+            "2001:12::1",
+            "3001:12::1",
+        )
         ep3.add_vpp_config()
 
         #
         # service endpoints
         #
         ep3.add_vpp_config()
 
         #
         # service endpoints
         #
-        sep1 = VppGbpEndpoint(self, self.pg3,
-                              epg_320, None,
-                              "12.0.0.1", "13.0.0.1",
-                              "4001:10::1", "5001:10::1")
+        sep1 = VppGbpEndpoint(
+            self,
+            self.pg3,
+            epg_320,
+            None,
+            "12.0.0.1",
+            "13.0.0.1",
+            "4001:10::1",
+            "5001:10::1",
+        )
         sep1.add_vpp_config()
         sep1.add_vpp_config()
-        sep2 = VppGbpEndpoint(self, self.pg4,
-                              epg_320, None,
-                              "12.0.0.2", "13.0.0.2",
-                              "4001:10::2", "5001:10::2")
+        sep2 = VppGbpEndpoint(
+            self,
+            self.pg4,
+            epg_320,
+            None,
+            "12.0.0.2",
+            "13.0.0.2",
+            "4001:10::2",
+            "5001:10::2",
+        )
         sep2.add_vpp_config()
         sep2.add_vpp_config()
-        sep3 = VppGbpEndpoint(self, self.pg5,
-                              epg_321, None,
-                              "12.0.1.1", "13.0.1.1",
-                              "4001:11::1", "5001:11::1")
+        sep3 = VppGbpEndpoint(
+            self,
+            self.pg5,
+            epg_321,
+            None,
+            "12.0.1.1",
+            "13.0.1.1",
+            "4001:11::1",
+            "5001:11::1",
+        )
         sep3.add_vpp_config()
         # this EP is not installed immediately
         sep3.add_vpp_config()
         # this EP is not installed immediately
-        sep4 = VppGbpEndpoint(self, self.pg6,
-                              epg_321, None,
-                              "12.0.1.2", "13.0.1.2",
-                              "4001:11::2", "5001:11::2")
+        sep4 = VppGbpEndpoint(
+            self,
+            self.pg6,
+            epg_321,
+            None,
+            "12.0.1.2",
+            "13.0.1.2",
+            "4001:11::2",
+            "5001:11::2",
+        )
 
         #
         # an L2 switch packet between local EPs in different EPGs
         #  different dest ports on each so the are LB hashed differently
         #
 
         #
         # an L2 switch packet between local EPs in different EPGs
         #  different dest ports on each so the are LB hashed differently
         #
-        p4 = [(Ether(src=ep1.mac, dst=ep3.mac) /
-               IP(src=ep1.ip4, dst=ep3.ip4) /
-               UDP(sport=1234, dport=1234) /
-               Raw(b'\xa5' * 100)),
-              (Ether(src=ep3.mac, dst=ep1.mac) /
-               IP(src=ep3.ip4, dst=ep1.ip4) /
-               UDP(sport=1234, dport=1234) /
-               Raw(b'\xa5' * 100))]
-        p6 = [(Ether(src=ep1.mac, dst=ep3.mac) /
-               IPv6(src=ep1.ip6, dst=ep3.ip6) /
-               UDP(sport=1234, dport=1234) /
-               Raw(b'\xa5' * 100)),
-              (Ether(src=ep3.mac, dst=ep1.mac) /
-               IPv6(src=ep3.ip6, dst=ep1.ip6) /
-               UDP(sport=1234, dport=1230) /
-               Raw(b'\xa5' * 100))]
+        p4 = [
+            (
+                Ether(src=ep1.mac, dst=ep3.mac)
+                / IP(src=ep1.ip4, dst=ep3.ip4)
+                / UDP(sport=1234, dport=1234)
+                / Raw(b"\xa5" * 100)
+            ),
+            (
+                Ether(src=ep3.mac, dst=ep1.mac)
+                / IP(src=ep3.ip4, dst=ep1.ip4)
+                / UDP(sport=1234, dport=1234)
+                / Raw(b"\xa5" * 100)
+            ),
+        ]
+        p6 = [
+            (
+                Ether(src=ep1.mac, dst=ep3.mac)
+                / IPv6(src=ep1.ip6, dst=ep3.ip6)
+                / UDP(sport=1234, dport=1234)
+                / Raw(b"\xa5" * 100)
+            ),
+            (
+                Ether(src=ep3.mac, dst=ep1.mac)
+                / IPv6(src=ep3.ip6, dst=ep1.ip6)
+                / UDP(sport=1234, dport=1230)
+                / Raw(b"\xa5" * 100)
+            ),
+        ]
 
         # should be dropped since no contract yet
         self.send_and_assert_no_replies(self.pg0, [p4[0]])
 
         # should be dropped since no contract yet
         self.send_and_assert_no_replies(self.pg0, [p4[0]])
@@ -3502,8 +4041,12 @@ class TestGBP(VppTestCase):
         # one of the next-hops is via an EP that is not known
         #
         rule4 = AclRule(is_permit=1, proto=17)
         # one of the next-hops is via an EP that is not known
         #
         rule4 = AclRule(is_permit=1, proto=17)
-        rule6 = AclRule(src_prefix=IPv6Network((0, 0)),
-                        dst_prefix=IPv6Network((0, 0)), is_permit=1, proto=17)
+        rule6 = AclRule(
+            src_prefix=IPv6Network((0, 0)),
+            dst_prefix=IPv6Network((0, 0)),
+            is_permit=1,
+            proto=17,
+        )
         acl = VppAcl(self, rules=[rule4, rule6])
         acl.add_vpp_config()
 
         acl = VppAcl(self, rules=[rule4, rule6])
         acl.add_vpp_config()
 
@@ -3511,41 +4054,75 @@ class TestGBP(VppTestCase):
         # test the src-ip hash mode
         #
         c1 = VppGbpContract(
         # test the src-ip hash mode
         #
         c1 = VppGbpContract(
-            self, 402, epg_220.sclass, epg_222.sclass, acl.acl_index,
-            [VppGbpContractRule(
-                VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_REDIRECT,
-                VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
-                [VppGbpContractNextHop(sep1.vmac, sep1.epg.bd,
-                                       sep1.ip4, sep1.epg.rd),
-                 VppGbpContractNextHop(sep2.vmac, sep2.epg.bd,
-                                       sep2.ip4, sep2.epg.rd)]),
+            self,
+            402,
+            epg_220.sclass,
+            epg_222.sclass,
+            acl.acl_index,
+            [
+                VppGbpContractRule(
+                    VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_REDIRECT,
+                    VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
+                    [
+                        VppGbpContractNextHop(
+                            sep1.vmac, sep1.epg.bd, sep1.ip4, sep1.epg.rd
+                        ),
+                        VppGbpContractNextHop(
+                            sep2.vmac, sep2.epg.bd, sep2.ip4, sep2.epg.rd
+                        ),
+                    ],
+                ),
                 VppGbpContractRule(
                     VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_REDIRECT,
                     VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
                 VppGbpContractRule(
                     VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_REDIRECT,
                     VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
-                    [VppGbpContractNextHop(sep3.vmac, sep3.epg.bd,
-                                           sep3.ip6, sep3.epg.rd),
-                     VppGbpContractNextHop(sep4.vmac, sep4.epg.bd,
-                                           sep4.ip6, sep4.epg.rd)])],
-            [ETH_P_IP, ETH_P_IPV6])
+                    [
+                        VppGbpContractNextHop(
+                            sep3.vmac, sep3.epg.bd, sep3.ip6, sep3.epg.rd
+                        ),
+                        VppGbpContractNextHop(
+                            sep4.vmac, sep4.epg.bd, sep4.ip6, sep4.epg.rd
+                        ),
+                    ],
+                ),
+            ],
+            [ETH_P_IP, ETH_P_IPV6],
+        )
         c1.add_vpp_config()
 
         c2 = VppGbpContract(
         c1.add_vpp_config()
 
         c2 = VppGbpContract(
-            self, 402, epg_222.sclass, epg_220.sclass, acl.acl_index,
-            [VppGbpContractRule(
-                VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_REDIRECT,
-                VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
-                [VppGbpContractNextHop(sep1.vmac, sep1.epg.bd,
-                                       sep1.ip4, sep1.epg.rd),
-                 VppGbpContractNextHop(sep2.vmac, sep2.epg.bd,
-                                       sep2.ip4, sep2.epg.rd)]),
+            self,
+            402,
+            epg_222.sclass,
+            epg_220.sclass,
+            acl.acl_index,
+            [
+                VppGbpContractRule(
+                    VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_REDIRECT,
+                    VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
+                    [
+                        VppGbpContractNextHop(
+                            sep1.vmac, sep1.epg.bd, sep1.ip4, sep1.epg.rd
+                        ),
+                        VppGbpContractNextHop(
+                            sep2.vmac, sep2.epg.bd, sep2.ip4, sep2.epg.rd
+                        ),
+                    ],
+                ),
                 VppGbpContractRule(
                     VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_REDIRECT,
                     VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
                 VppGbpContractRule(
                     VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_REDIRECT,
                     VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
-                    [VppGbpContractNextHop(sep3.vmac, sep3.epg.bd,
-                                           sep3.ip6, sep3.epg.rd),
-                     VppGbpContractNextHop(sep4.vmac, sep4.epg.bd,
-                                           sep4.ip6, sep4.epg.rd)])],
-            [ETH_P_IP, ETH_P_IPV6])
+                    [
+                        VppGbpContractNextHop(
+                            sep3.vmac, sep3.epg.bd, sep3.ip6, sep3.epg.rd
+                        ),
+                        VppGbpContractNextHop(
+                            sep4.vmac, sep4.epg.bd, sep4.ip6, sep4.epg.rd
+                        ),
+                    ],
+                ),
+            ],
+            [ETH_P_IP, ETH_P_IPV6],
+        )
         c2.add_vpp_config()
 
         #
         c2.add_vpp_config()
 
         #
@@ -3643,41 +4220,75 @@ class TestGBP(VppTestCase):
         # test the symmetric hash mode
         #
         c1 = VppGbpContract(
         # test the symmetric hash mode
         #
         c1 = VppGbpContract(
-            self, 402, epg_220.sclass, epg_222.sclass, acl.acl_index,
-            [VppGbpContractRule(
-                VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_REDIRECT,
-                VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SYMMETRIC,
-                [VppGbpContractNextHop(sep1.vmac, sep1.epg.bd,
-                                       sep1.ip4, sep1.epg.rd),
-                 VppGbpContractNextHop(sep2.vmac, sep2.epg.bd,
-                                       sep2.ip4, sep2.epg.rd)]),
+            self,
+            402,
+            epg_220.sclass,
+            epg_222.sclass,
+            acl.acl_index,
+            [
+                VppGbpContractRule(
+                    VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_REDIRECT,
+                    VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SYMMETRIC,
+                    [
+                        VppGbpContractNextHop(
+                            sep1.vmac, sep1.epg.bd, sep1.ip4, sep1.epg.rd
+                        ),
+                        VppGbpContractNextHop(
+                            sep2.vmac, sep2.epg.bd, sep2.ip4, sep2.epg.rd
+                        ),
+                    ],
+                ),
                 VppGbpContractRule(
                     VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_REDIRECT,
                     VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SYMMETRIC,
                 VppGbpContractRule(
                     VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_REDIRECT,
                     VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SYMMETRIC,
-                    [VppGbpContractNextHop(sep3.vmac, sep3.epg.bd,
-                                           sep3.ip6, sep3.epg.rd),
-                     VppGbpContractNextHop(sep4.vmac, sep4.epg.bd,
-                                           sep4.ip6, sep4.epg.rd)])],
-            [ETH_P_IP, ETH_P_IPV6])
+                    [
+                        VppGbpContractNextHop(
+                            sep3.vmac, sep3.epg.bd, sep3.ip6, sep3.epg.rd
+                        ),
+                        VppGbpContractNextHop(
+                            sep4.vmac, sep4.epg.bd, sep4.ip6, sep4.epg.rd
+                        ),
+                    ],
+                ),
+            ],
+            [ETH_P_IP, ETH_P_IPV6],
+        )
         c1.add_vpp_config()
 
         c2 = VppGbpContract(
         c1.add_vpp_config()
 
         c2 = VppGbpContract(
-            self, 402, epg_222.sclass, epg_220.sclass, acl.acl_index,
-            [VppGbpContractRule(
-                VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_REDIRECT,
-                VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SYMMETRIC,
-                [VppGbpContractNextHop(sep1.vmac, sep1.epg.bd,
-                                       sep1.ip4, sep1.epg.rd),
-                 VppGbpContractNextHop(sep2.vmac, sep2.epg.bd,
-                                       sep2.ip4, sep2.epg.rd)]),
+            self,
+            402,
+            epg_222.sclass,
+            epg_220.sclass,
+            acl.acl_index,
+            [
                 VppGbpContractRule(
                     VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_REDIRECT,
                     VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SYMMETRIC,
                 VppGbpContractRule(
                     VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_REDIRECT,
                     VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SYMMETRIC,
-                    [VppGbpContractNextHop(sep3.vmac, sep3.epg.bd,
-                                           sep3.ip6, sep3.epg.rd),
-                     VppGbpContractNextHop(sep4.vmac, sep4.epg.bd,
-                                           sep4.ip6, sep4.epg.rd)])],
-            [ETH_P_IP, ETH_P_IPV6])
+                    [
+                        VppGbpContractNextHop(
+                            sep1.vmac, sep1.epg.bd, sep1.ip4, sep1.epg.rd
+                        ),
+                        VppGbpContractNextHop(
+                            sep2.vmac, sep2.epg.bd, sep2.ip4, sep2.epg.rd
+                        ),
+                    ],
+                ),
+                VppGbpContractRule(
+                    VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_REDIRECT,
+                    VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SYMMETRIC,
+                    [
+                        VppGbpContractNextHop(
+                            sep3.vmac, sep3.epg.bd, sep3.ip6, sep3.epg.rd
+                        ),
+                        VppGbpContractNextHop(
+                            sep4.vmac, sep4.epg.bd, sep4.ip6, sep4.epg.rd
+                        ),
+                    ],
+                ),
+            ],
+            [ETH_P_IP, ETH_P_IPV6],
+        )
         c2.add_vpp_config()
 
         #
         c2.add_vpp_config()
 
         #
@@ -3709,40 +4320,69 @@ class TestGBP(VppTestCase):
         # an L3 switch packet between local EPs in different EPGs
         #  different dest ports on each so the are LB hashed differently
         #
         # an L3 switch packet between local EPs in different EPGs
         #  different dest ports on each so the are LB hashed differently
         #
-        p4 = [(Ether(src=ep1.mac, dst=str(self.router_mac)) /
-               IP(src=ep1.ip4, dst=ep2.ip4) /
-               UDP(sport=1234, dport=1234) /
-               Raw(b'\xa5' * 100)),
-              (Ether(src=ep2.mac, dst=str(self.router_mac)) /
-               IP(src=ep2.ip4, dst=ep1.ip4) /
-               UDP(sport=1234, dport=1234) /
-               Raw(b'\xa5' * 100))]
-        p6 = [(Ether(src=ep1.mac, dst=str(self.router_mac)) /
-               IPv6(src=ep1.ip6, dst=ep2.ip6) /
-               UDP(sport=1234, dport=1234) /
-               Raw(b'\xa5' * 100)),
-              (Ether(src=ep2.mac, dst=str(self.router_mac)) /
-               IPv6(src=ep2.ip6, dst=ep1.ip6) /
-               UDP(sport=1234, dport=1234) /
-               Raw(b'\xa5' * 100))]
+        p4 = [
+            (
+                Ether(src=ep1.mac, dst=str(self.router_mac))
+                / IP(src=ep1.ip4, dst=ep2.ip4)
+                / UDP(sport=1234, dport=1234)
+                / Raw(b"\xa5" * 100)
+            ),
+            (
+                Ether(src=ep2.mac, dst=str(self.router_mac))
+                / IP(src=ep2.ip4, dst=ep1.ip4)
+                / UDP(sport=1234, dport=1234)
+                / Raw(b"\xa5" * 100)
+            ),
+        ]
+        p6 = [
+            (
+                Ether(src=ep1.mac, dst=str(self.router_mac))
+                / IPv6(src=ep1.ip6, dst=ep2.ip6)
+                / UDP(sport=1234, dport=1234)
+                / Raw(b"\xa5" * 100)
+            ),
+            (
+                Ether(src=ep2.mac, dst=str(self.router_mac))
+                / IPv6(src=ep2.ip6, dst=ep1.ip6)
+                / UDP(sport=1234, dport=1234)
+                / Raw(b"\xa5" * 100)
+            ),
+        ]
 
         c3 = VppGbpContract(
 
         c3 = VppGbpContract(
-            self, 402, epg_220.sclass, epg_221.sclass, acl.acl_index,
-            [VppGbpContractRule(
-                VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_REDIRECT,
-                VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SYMMETRIC,
-                [VppGbpContractNextHop(sep1.vmac, sep1.epg.bd,
-                                       sep1.ip4, sep1.epg.rd),
-                 VppGbpContractNextHop(sep2.vmac, sep2.epg.bd,
-                                       sep2.ip4, sep2.epg.rd)]),
+            self,
+            402,
+            epg_220.sclass,
+            epg_221.sclass,
+            acl.acl_index,
+            [
+                VppGbpContractRule(
+                    VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_REDIRECT,
+                    VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SYMMETRIC,
+                    [
+                        VppGbpContractNextHop(
+                            sep1.vmac, sep1.epg.bd, sep1.ip4, sep1.epg.rd
+                        ),
+                        VppGbpContractNextHop(
+                            sep2.vmac, sep2.epg.bd, sep2.ip4, sep2.epg.rd
+                        ),
+                    ],
+                ),
                 VppGbpContractRule(
                     VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_REDIRECT,
                     VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SYMMETRIC,
                 VppGbpContractRule(
                     VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_REDIRECT,
                     VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SYMMETRIC,
-                    [VppGbpContractNextHop(sep3.vmac, sep3.epg.bd,
-                                           sep3.ip6, sep3.epg.rd),
-                     VppGbpContractNextHop(sep4.vmac, sep4.epg.bd,
-                                           sep4.ip6, sep4.epg.rd)])],
-            [ETH_P_IP, ETH_P_IPV6])
+                    [
+                        VppGbpContractNextHop(
+                            sep3.vmac, sep3.epg.bd, sep3.ip6, sep3.epg.rd
+                        ),
+                        VppGbpContractNextHop(
+                            sep4.vmac, sep4.epg.bd, sep4.ip6, sep4.epg.rd
+                        ),
+                    ],
+                ),
+            ],
+            [ETH_P_IP, ETH_P_IPV6],
+        )
         c3.add_vpp_config()
 
         rxs = self.send_and_expect(self.pg0, p4[0] * 17, sep1.itf)
         c3.add_vpp_config()
 
         rxs = self.send_and_expect(self.pg0, p4[0] * 17, sep1.itf)
@@ -3758,40 +4398,60 @@ class TestGBP(VppTestCase):
         #   packets coming from unknown remote EPs will be leant & redirected
         #
         vx_tun_l3 = VppGbpVxlanTunnel(
         #   packets coming from unknown remote EPs will be leant & redirected
         #
         vx_tun_l3 = VppGbpVxlanTunnel(
-            self, 444, rd1.rd_id,
+            self,
+            444,
+            rd1.rd_id,
             VppEnum.vl_api_gbp_vxlan_tunnel_mode_t.GBP_VXLAN_TUNNEL_MODE_L3,
             VppEnum.vl_api_gbp_vxlan_tunnel_mode_t.GBP_VXLAN_TUNNEL_MODE_L3,
-            self.pg2.local_ip4)
+            self.pg2.local_ip4,
+        )
         vx_tun_l3.add_vpp_config()
 
         c4 = VppGbpContract(
         vx_tun_l3.add_vpp_config()
 
         c4 = VppGbpContract(
-            self, 402, epg_221.sclass, epg_220.sclass, acl.acl_index,
-            [VppGbpContractRule(
-                VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_REDIRECT,
-                VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
-                [VppGbpContractNextHop(sep1.vmac, sep1.epg.bd,
-                                       sep1.ip4, sep1.epg.rd),
-                 VppGbpContractNextHop(sep2.vmac, sep2.epg.bd,
-                                       sep2.ip4, sep2.epg.rd)]),
+            self,
+            402,
+            epg_221.sclass,
+            epg_220.sclass,
+            acl.acl_index,
+            [
+                VppGbpContractRule(
+                    VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_REDIRECT,
+                    VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
+                    [
+                        VppGbpContractNextHop(
+                            sep1.vmac, sep1.epg.bd, sep1.ip4, sep1.epg.rd
+                        ),
+                        VppGbpContractNextHop(
+                            sep2.vmac, sep2.epg.bd, sep2.ip4, sep2.epg.rd
+                        ),
+                    ],
+                ),
                 VppGbpContractRule(
                     VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_REDIRECT,
                     VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
                 VppGbpContractRule(
                     VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_REDIRECT,
                     VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
-                    [VppGbpContractNextHop(sep3.vmac, sep3.epg.bd,
-                                           sep3.ip6, sep3.epg.rd),
-                     VppGbpContractNextHop(sep4.vmac, sep4.epg.bd,
-                                           sep4.ip6, sep4.epg.rd)])],
-            [ETH_P_IP, ETH_P_IPV6])
+                    [
+                        VppGbpContractNextHop(
+                            sep3.vmac, sep3.epg.bd, sep3.ip6, sep3.epg.rd
+                        ),
+                        VppGbpContractNextHop(
+                            sep4.vmac, sep4.epg.bd, sep4.ip6, sep4.epg.rd
+                        ),
+                    ],
+                ),
+            ],
+            [ETH_P_IP, ETH_P_IPV6],
+        )
         c4.add_vpp_config()
 
         c4.add_vpp_config()
 
-        p = (Ether(src=self.pg7.remote_mac,
-                   dst=self.pg7.local_mac) /
-             IP(src=self.pg7.remote_ip4,
-                dst=self.pg7.local_ip4) /
-             UDP(sport=1234, dport=48879) /
-             VXLAN(vni=444, gpid=441, flags=0x88) /
-             Ether(src="00:22:22:22:22:33", dst=str(self.router_mac)) /
-             IP(src="10.0.0.88", dst=ep1.ip4) /
-             UDP(sport=1234, dport=1234) /
-             Raw(b'\xa5' * 100))
+        p = (
+            Ether(src=self.pg7.remote_mac, dst=self.pg7.local_mac)
+            / IP(src=self.pg7.remote_ip4, dst=self.pg7.local_ip4)
+            / UDP(sport=1234, dport=48879)
+            / VXLAN(vni=444, gpid=441, flags=0x88)
+            / Ether(src="00:22:22:22:22:33", dst=str(self.router_mac))
+            / IP(src="10.0.0.88", dst=ep1.ip4)
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
 
         # unknown remote EP to local EP redirected
         rxs = self.send_and_expect(self.pg7, [p], sep1.itf)
 
         # unknown remote EP to local EP redirected
         rxs = self.send_and_expect(self.pg7, [p], sep1.itf)
@@ -3803,20 +4463,18 @@ class TestGBP(VppTestCase):
             self.assertEqual(rx[IP].dst, ep1.ip4)
 
         # endpoint learnt via the parent GBP-vxlan interface
             self.assertEqual(rx[IP].dst, ep1.ip4)
 
         # endpoint learnt via the parent GBP-vxlan interface
-        self.assertTrue(find_gbp_endpoint(self,
-                                          vx_tun_l3._sw_if_index,
-                                          ip="10.0.0.88"))
-
-        p = (Ether(src=self.pg7.remote_mac,
-                   dst=self.pg7.local_mac) /
-             IP(src=self.pg7.remote_ip4,
-                dst=self.pg7.local_ip4) /
-             UDP(sport=1234, dport=48879) /
-             VXLAN(vni=444, gpid=441, flags=0x88) /
-             Ether(src="00:22:22:22:22:33", dst=str(self.router_mac)) /
-             IPv6(src="2001:10::88", dst=ep1.ip6) /
-             UDP(sport=1234, dport=1234) /
-             Raw(b'\xa5' * 100))
+        self.assertTrue(find_gbp_endpoint(self, vx_tun_l3._sw_if_index, ip="10.0.0.88"))
+
+        p = (
+            Ether(src=self.pg7.remote_mac, dst=self.pg7.local_mac)
+            / IP(src=self.pg7.remote_ip4, dst=self.pg7.local_ip4)
+            / UDP(sport=1234, dport=48879)
+            / VXLAN(vni=444, gpid=441, flags=0x88)
+            / Ether(src="00:22:22:22:22:33", dst=str(self.router_mac))
+            / IPv6(src="2001:10::88", dst=ep1.ip6)
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
 
         # unknown remote EP to local EP redirected (ipv6)
         rxs = self.send_and_expect(self.pg7, [p], sep3.itf)
 
         # unknown remote EP to local EP redirected (ipv6)
         rxs = self.send_and_expect(self.pg7, [p], sep3.itf)
@@ -3828,21 +4486,29 @@ class TestGBP(VppTestCase):
             self.assertEqual(rx[IPv6].dst, ep1.ip6)
 
         # endpoint learnt via the parent GBP-vxlan interface
             self.assertEqual(rx[IPv6].dst, ep1.ip6)
 
         # endpoint learnt via the parent GBP-vxlan interface
-        self.assertTrue(find_gbp_endpoint(self,
-                                          vx_tun_l3._sw_if_index,
-                                          ip="2001:10::88"))
+        self.assertTrue(
+            find_gbp_endpoint(self, vx_tun_l3._sw_if_index, ip="2001:10::88")
+        )
 
         #
         # L3 switch from local to remote EP
         #
 
         #
         # L3 switch from local to remote EP
         #
-        p4 = [(Ether(src=ep1.mac, dst=str(self.router_mac)) /
-               IP(src=ep1.ip4, dst="10.0.0.88") /
-               UDP(sport=1234, dport=1234) /
-               Raw(b'\xa5' * 100))]
-        p6 = [(Ether(src=ep1.mac, dst=str(self.router_mac)) /
-               IPv6(src=ep1.ip6, dst="2001:10::88") /
-               UDP(sport=1234, dport=1234) /
-               Raw(b'\xa5' * 100))]
+        p4 = [
+            (
+                Ether(src=ep1.mac, dst=str(self.router_mac))
+                / IP(src=ep1.ip4, dst="10.0.0.88")
+                / UDP(sport=1234, dport=1234)
+                / Raw(b"\xa5" * 100)
+            )
+        ]
+        p6 = [
+            (
+                Ether(src=ep1.mac, dst=str(self.router_mac))
+                / IPv6(src=ep1.ip6, dst="2001:10::88")
+                / UDP(sport=1234, dport=1234)
+                / Raw(b"\xa5" * 100)
+            )
+        ]
 
         rxs = self.send_and_expect(self.pg0, p4[0] * 17, sep1.itf)
 
 
         rxs = self.send_and_expect(self.pg0, p4[0] * 17, sep1.itf)
 
@@ -3864,22 +4530,39 @@ class TestGBP(VppTestCase):
         # test the dst-ip hash mode
         #
         c5 = VppGbpContract(
         # test the dst-ip hash mode
         #
         c5 = VppGbpContract(
-            self, 402, epg_220.sclass, epg_221.sclass, acl.acl_index,
-            [VppGbpContractRule(
-                VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_REDIRECT,
-                VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_DST_IP,
-                [VppGbpContractNextHop(sep1.vmac, sep1.epg.bd,
-                                       sep1.ip4, sep1.epg.rd),
-                 VppGbpContractNextHop(sep2.vmac, sep2.epg.bd,
-                                       sep2.ip4, sep2.epg.rd)]),
+            self,
+            402,
+            epg_220.sclass,
+            epg_221.sclass,
+            acl.acl_index,
+            [
                 VppGbpContractRule(
                     VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_REDIRECT,
                     VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_DST_IP,
                 VppGbpContractRule(
                     VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_REDIRECT,
                     VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_DST_IP,
-                    [VppGbpContractNextHop(sep3.vmac, sep3.epg.bd,
-                                           sep3.ip6, sep3.epg.rd),
-                     VppGbpContractNextHop(sep4.vmac, sep4.epg.bd,
-                                           sep4.ip6, sep4.epg.rd)])],
-            [ETH_P_IP, ETH_P_IPV6])
+                    [
+                        VppGbpContractNextHop(
+                            sep1.vmac, sep1.epg.bd, sep1.ip4, sep1.epg.rd
+                        ),
+                        VppGbpContractNextHop(
+                            sep2.vmac, sep2.epg.bd, sep2.ip4, sep2.epg.rd
+                        ),
+                    ],
+                ),
+                VppGbpContractRule(
+                    VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_REDIRECT,
+                    VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_DST_IP,
+                    [
+                        VppGbpContractNextHop(
+                            sep3.vmac, sep3.epg.bd, sep3.ip6, sep3.epg.rd
+                        ),
+                        VppGbpContractNextHop(
+                            sep4.vmac, sep4.epg.bd, sep4.ip6, sep4.epg.rd
+                        ),
+                    ],
+                ),
+            ],
+            [ETH_P_IP, ETH_P_IPV6],
+        )
         c5.add_vpp_config()
 
         rxs = self.send_and_expect(self.pg0, p4[0] * 17, sep1.itf)
         c5.add_vpp_config()
 
         rxs = self.send_and_expect(self.pg0, p4[0] * 17, sep1.itf)
@@ -3904,20 +4587,29 @@ class TestGBP(VppTestCase):
 
         # gbp vxlan tunnel for the remote SEP
         vx_tun_l3_sep = VppGbpVxlanTunnel(
 
         # gbp vxlan tunnel for the remote SEP
         vx_tun_l3_sep = VppGbpVxlanTunnel(
-            self, 555, rd1.rd_id,
+            self,
+            555,
+            rd1.rd_id,
             VppEnum.vl_api_gbp_vxlan_tunnel_mode_t.GBP_VXLAN_TUNNEL_MODE_L3,
             VppEnum.vl_api_gbp_vxlan_tunnel_mode_t.GBP_VXLAN_TUNNEL_MODE_L3,
-            self.pg2.local_ip4)
+            self.pg2.local_ip4,
+        )
         vx_tun_l3_sep.add_vpp_config()
 
         # remote SEP
         vx_tun_l3_sep.add_vpp_config()
 
         # remote SEP
-        sep5 = VppGbpEndpoint(self, vx_tun_l3_sep,
-                              epg_320, None,
-                              "12.0.0.10", "13.0.0.10",
-                              "4001:10::10", "5001:10::10",
-                              ep_flags.GBP_API_ENDPOINT_FLAG_REMOTE,
-                              self.pg7.local_ip4,
-                              self.pg7.remote_ip4,
-                              mac=None)
+        sep5 = VppGbpEndpoint(
+            self,
+            vx_tun_l3_sep,
+            epg_320,
+            None,
+            "12.0.0.10",
+            "13.0.0.10",
+            "4001:10::10",
+            "5001:10::10",
+            ep_flags.GBP_API_ENDPOINT_FLAG_REMOTE,
+            self.pg7.local_ip4,
+            self.pg7.remote_ip4,
+            mac=None,
+        )
         sep5.add_vpp_config()
 
         #
         sep5.add_vpp_config()
 
         #
@@ -3934,101 +4626,187 @@ class TestGBP(VppTestCase):
         gebd = VppGbpBridgeDomain(self, ebd, rd1, self.loop4, None, None)
         gebd.add_vpp_config()
         # the external epg
         gebd = VppGbpBridgeDomain(self, ebd, rd1, self.loop4, None, None)
         gebd.add_vpp_config()
         # the external epg
-        eepg = VppGbpEndpointGroup(self, 888, 765, rd1, gebd,
-                                   None, gebd.bvi,
-                                   "10.1.0.128",
-                                   "2001:10:1::128",
-                                   VppGbpEndpointRetention(60))
-        eepg.add_vpp_config()
-        # add subnets to BVI
-        VppIpInterfaceAddress(
+        eepg = VppGbpEndpointGroup(
             self,
             self,
+            888,
+            765,
+            rd1,
+            gebd,
+            None,
             gebd.bvi,
             "10.1.0.128",
             gebd.bvi,
             "10.1.0.128",
-            24, bind=b_lo4_ip4).add_vpp_config()
+            "2001:10:1::128",
+            VppGbpEndpointRetention(60),
+        )
+        eepg.add_vpp_config()
+        # add subnets to BVI
         VppIpInterfaceAddress(
         VppIpInterfaceAddress(
+            self, gebd.bvi, "10.1.0.128", 24, bind=b_lo4_ip4
+        ).add_vpp_config()
+        VppIpInterfaceAddress(
+            self, gebd.bvi, "2001:10:1::128", 64, bind=b_lo4_ip6
+        ).add_vpp_config()
+        # ... which are L3-out subnets
+        VppGbpSubnet(
             self,
             self,
-            gebd.bvi,
+            rd1,
+            "10.1.0.0",
+            24,
+            VppEnum.vl_api_gbp_subnet_type_t.GBP_API_SUBNET_L3_OUT,
+            sclass=765,
+        ).add_vpp_config()
+        VppGbpSubnet(
+            self,
+            rd1,
             "2001:10:1::128",
             "2001:10:1::128",
-            64, bind=b_lo4_ip6).add_vpp_config()
-        # ... which are L3-out subnets
-        VppGbpSubnet(self, rd1, "10.1.0.0", 24,
-                     VppEnum.vl_api_gbp_subnet_type_t.GBP_API_SUBNET_L3_OUT,
-                     sclass=765).add_vpp_config()
-        VppGbpSubnet(self, rd1, "2001:10:1::128", 64,
-                     VppEnum.vl_api_gbp_subnet_type_t.GBP_API_SUBNET_L3_OUT,
-                     sclass=765).add_vpp_config()
+            64,
+            VppEnum.vl_api_gbp_subnet_type_t.GBP_API_SUBNET_L3_OUT,
+            sclass=765,
+        ).add_vpp_config()
         # external endpoints
         VppL2Vtr(self, self.vlan_100, L2_VTR_OP.L2_POP_1).add_vpp_config()
         # external endpoints
         VppL2Vtr(self, self.vlan_100, L2_VTR_OP.L2_POP_1).add_vpp_config()
-        eep1 = VppGbpEndpoint(self, self.vlan_100, eepg, None, "10.1.0.1",
-                              "11.1.0.1", "2001:10:1::1", "3001:10:1::1",
-                              ep_flags.GBP_API_ENDPOINT_FLAG_EXTERNAL)
+        eep1 = VppGbpEndpoint(
+            self,
+            self.vlan_100,
+            eepg,
+            None,
+            "10.1.0.1",
+            "11.1.0.1",
+            "2001:10:1::1",
+            "3001:10:1::1",
+            ep_flags.GBP_API_ENDPOINT_FLAG_EXTERNAL,
+        )
         eep1.add_vpp_config()
         VppL2Vtr(self, self.vlan_101, L2_VTR_OP.L2_POP_1).add_vpp_config()
         eep1.add_vpp_config()
         VppL2Vtr(self, self.vlan_101, L2_VTR_OP.L2_POP_1).add_vpp_config()
-        eep2 = VppGbpEndpoint(self, self.vlan_101, eepg, None, "10.1.0.2",
-                              "11.1.0.2", "2001:10:1::2", "3001:10:1::2",
-                              ep_flags.GBP_API_ENDPOINT_FLAG_EXTERNAL)
+        eep2 = VppGbpEndpoint(
+            self,
+            self.vlan_101,
+            eepg,
+            None,
+            "10.1.0.2",
+            "11.1.0.2",
+            "2001:10:1::2",
+            "3001:10:1::2",
+            ep_flags.GBP_API_ENDPOINT_FLAG_EXTERNAL,
+        )
         eep2.add_vpp_config()
 
         # external subnets reachable though eep1 and eep2 respectively
         eep2.add_vpp_config()
 
         # external subnets reachable though eep1 and eep2 respectively
-        VppIpRoute(self, "10.220.0.0", 24,
-                   [VppRoutePath(eep1.ip4, eep1.epg.bvi.sw_if_index)],
-                   table_id=t4.table_id).add_vpp_config()
-        VppGbpSubnet(self, rd1, "10.220.0.0", 24,
-                     VppEnum.vl_api_gbp_subnet_type_t.GBP_API_SUBNET_L3_OUT,
-                     sclass=4220).add_vpp_config()
-        VppIpRoute(self, "10:220::", 64,
-                   [VppRoutePath(eep1.ip6, eep1.epg.bvi.sw_if_index)],
-                   table_id=t6.table_id).add_vpp_config()
-        VppGbpSubnet(self, rd1, "10:220::", 64,
-                     VppEnum.vl_api_gbp_subnet_type_t.GBP_API_SUBNET_L3_OUT,
-                     sclass=4220).add_vpp_config()
-        VppIpRoute(self, "10.221.0.0", 24,
-                   [VppRoutePath(eep2.ip4, eep2.epg.bvi.sw_if_index)],
-                   table_id=t4.table_id).add_vpp_config()
-        VppGbpSubnet(self, rd1, "10.221.0.0", 24,
-                     VppEnum.vl_api_gbp_subnet_type_t.GBP_API_SUBNET_L3_OUT,
-                     sclass=4221).add_vpp_config()
-        VppIpRoute(self, "10:221::", 64,
-                   [VppRoutePath(eep2.ip6, eep2.epg.bvi.sw_if_index)],
-                   table_id=t6.table_id).add_vpp_config()
-        VppGbpSubnet(self, rd1, "10:221::", 64,
-                     VppEnum.vl_api_gbp_subnet_type_t.GBP_API_SUBNET_L3_OUT,
-                     sclass=4221).add_vpp_config()
+        VppIpRoute(
+            self,
+            "10.220.0.0",
+            24,
+            [VppRoutePath(eep1.ip4, eep1.epg.bvi.sw_if_index)],
+            table_id=t4.table_id,
+        ).add_vpp_config()
+        VppGbpSubnet(
+            self,
+            rd1,
+            "10.220.0.0",
+            24,
+            VppEnum.vl_api_gbp_subnet_type_t.GBP_API_SUBNET_L3_OUT,
+            sclass=4220,
+        ).add_vpp_config()
+        VppIpRoute(
+            self,
+            "10:220::",
+            64,
+            [VppRoutePath(eep1.ip6, eep1.epg.bvi.sw_if_index)],
+            table_id=t6.table_id,
+        ).add_vpp_config()
+        VppGbpSubnet(
+            self,
+            rd1,
+            "10:220::",
+            64,
+            VppEnum.vl_api_gbp_subnet_type_t.GBP_API_SUBNET_L3_OUT,
+            sclass=4220,
+        ).add_vpp_config()
+        VppIpRoute(
+            self,
+            "10.221.0.0",
+            24,
+            [VppRoutePath(eep2.ip4, eep2.epg.bvi.sw_if_index)],
+            table_id=t4.table_id,
+        ).add_vpp_config()
+        VppGbpSubnet(
+            self,
+            rd1,
+            "10.221.0.0",
+            24,
+            VppEnum.vl_api_gbp_subnet_type_t.GBP_API_SUBNET_L3_OUT,
+            sclass=4221,
+        ).add_vpp_config()
+        VppIpRoute(
+            self,
+            "10:221::",
+            64,
+            [VppRoutePath(eep2.ip6, eep2.epg.bvi.sw_if_index)],
+            table_id=t6.table_id,
+        ).add_vpp_config()
+        VppGbpSubnet(
+            self,
+            rd1,
+            "10:221::",
+            64,
+            VppEnum.vl_api_gbp_subnet_type_t.GBP_API_SUBNET_L3_OUT,
+            sclass=4221,
+        ).add_vpp_config()
 
         #
         # l3out redirect to remote (known, then unknown) SEP
         #
 
         # packets from 1 external subnet to the other
 
         #
         # l3out redirect to remote (known, then unknown) SEP
         #
 
         # packets from 1 external subnet to the other
-        p = [(Ether(src=eep1.mac, dst=self.router_mac) /
-              Dot1Q(vlan=100) /
-              IP(src="10.220.0.17", dst="10.221.0.65") /
-              UDP(sport=1234, dport=1234) /
-              Raw(b'\xa5' * 100)),
-             (Ether(src=eep1.mac, dst=self.router_mac) /
-              Dot1Q(vlan=100) /
-              IPv6(src="10:220::17", dst="10:221::65") /
-              UDP(sport=1234, dport=1234) /
-              Raw(b'\xa5' * 100))]
+        p = [
+            (
+                Ether(src=eep1.mac, dst=self.router_mac)
+                / Dot1Q(vlan=100)
+                / IP(src="10.220.0.17", dst="10.221.0.65")
+                / UDP(sport=1234, dport=1234)
+                / Raw(b"\xa5" * 100)
+            ),
+            (
+                Ether(src=eep1.mac, dst=self.router_mac)
+                / Dot1Q(vlan=100)
+                / IPv6(src="10:220::17", dst="10:221::65")
+                / UDP(sport=1234, dport=1234)
+                / Raw(b"\xa5" * 100)
+            ),
+        ]
 
         # packets should be dropped in absence of contract
         self.send_and_assert_no_replies(self.pg0, p)
 
         # contract redirecting to sep5
         VppGbpContract(
 
         # packets should be dropped in absence of contract
         self.send_and_assert_no_replies(self.pg0, p)
 
         # contract redirecting to sep5
         VppGbpContract(
-            self, 402, 4220, 4221, acl.acl_index,
-            [VppGbpContractRule(
-                VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_REDIRECT,
-                VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_DST_IP,
-                [VppGbpContractNextHop(sep5.vmac, sep5.epg.bd,
-                                       sep5.ip4, sep5.epg.rd)]),
+            self,
+            402,
+            4220,
+            4221,
+            acl.acl_index,
+            [
+                VppGbpContractRule(
+                    VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_REDIRECT,
+                    VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_DST_IP,
+                    [
+                        VppGbpContractNextHop(
+                            sep5.vmac, sep5.epg.bd, sep5.ip4, sep5.epg.rd
+                        )
+                    ],
+                ),
                 VppGbpContractRule(
                     VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_REDIRECT,
                     VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_DST_IP,
                 VppGbpContractRule(
                     VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_REDIRECT,
                     VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_DST_IP,
-                    [VppGbpContractNextHop(sep5.vmac, sep5.epg.bd,
-                                           sep5.ip6, sep5.epg.rd)])],
-            [ETH_P_IP, ETH_P_IPV6]).add_vpp_config()
+                    [
+                        VppGbpContractNextHop(
+                            sep5.vmac, sep5.epg.bd, sep5.ip6, sep5.epg.rd
+                        )
+                    ],
+                ),
+            ],
+            [ETH_P_IP, ETH_P_IPV6],
+        ).add_vpp_config()
 
         rxs = self.send_and_expect(self.pg0, p, self.pg7)
 
 
         rxs = self.send_and_expect(self.pg0, p, self.pg7)
 
@@ -4081,18 +4859,33 @@ class TestGBP(VppTestCase):
         # change the contract between l3out to redirect to local SEPs
         # instead of remote SEP
         VppGbpContract(
         # change the contract between l3out to redirect to local SEPs
         # instead of remote SEP
         VppGbpContract(
-            self, 402, 4220, 4221, acl.acl_index,
-            [VppGbpContractRule(
-                VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_REDIRECT,
-                VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_DST_IP,
-                [VppGbpContractNextHop(sep1.vmac, sep1.epg.bd,
-                                       sep1.ip4, sep1.epg.rd)]),
+            self,
+            402,
+            4220,
+            4221,
+            acl.acl_index,
+            [
                 VppGbpContractRule(
                     VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_REDIRECT,
                     VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_DST_IP,
                 VppGbpContractRule(
                     VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_REDIRECT,
                     VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_DST_IP,
-                    [VppGbpContractNextHop(sep1.vmac, sep1.epg.bd,
-                                           sep1.ip6, sep1.epg.rd)])],
-            [ETH_P_IP, ETH_P_IPV6]).add_vpp_config()
+                    [
+                        VppGbpContractNextHop(
+                            sep1.vmac, sep1.epg.bd, sep1.ip4, sep1.epg.rd
+                        )
+                    ],
+                ),
+                VppGbpContractRule(
+                    VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_REDIRECT,
+                    VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_DST_IP,
+                    [
+                        VppGbpContractNextHop(
+                            sep1.vmac, sep1.epg.bd, sep1.ip6, sep1.epg.rd
+                        )
+                    ],
+                ),
+            ],
+            [ETH_P_IP, ETH_P_IPV6],
+        ).add_vpp_config()
 
         rxs = self.send_and_expect(self.pg0, p, sep1.itf)
         for rx, tx in zip(rxs, p):
 
         rxs = self.send_and_expect(self.pg0, p, sep1.itf)
         for rx, tx in zip(rxs, p):
@@ -4112,34 +4905,57 @@ class TestGBP(VppTestCase):
 
         # contract to redirect to learnt SEP
         VppGbpContract(
 
         # contract to redirect to learnt SEP
         VppGbpContract(
-            self, 402, epg_221.sclass, epg_222.sclass, acl.acl_index,
-            [VppGbpContractRule(
-                VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_REDIRECT,
-                VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_DST_IP,
-                [VppGbpContractNextHop(sep5.vmac, sep5.epg.bd,
-                                       sep5.ip4, sep5.epg.rd)]),
+            self,
+            402,
+            epg_221.sclass,
+            epg_222.sclass,
+            acl.acl_index,
+            [
+                VppGbpContractRule(
+                    VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_REDIRECT,
+                    VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_DST_IP,
+                    [
+                        VppGbpContractNextHop(
+                            sep5.vmac, sep5.epg.bd, sep5.ip4, sep5.epg.rd
+                        )
+                    ],
+                ),
                 VppGbpContractRule(
                     VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_REDIRECT,
                     VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_DST_IP,
                 VppGbpContractRule(
                     VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_REDIRECT,
                     VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_DST_IP,
-                    [VppGbpContractNextHop(sep5.vmac, sep5.epg.bd,
-                                           sep5.ip6, sep5.epg.rd)])],
-            [ETH_P_IP, ETH_P_IPV6]).add_vpp_config()
+                    [
+                        VppGbpContractNextHop(
+                            sep5.vmac, sep5.epg.bd, sep5.ip6, sep5.epg.rd
+                        )
+                    ],
+                ),
+            ],
+            [ETH_P_IP, ETH_P_IPV6],
+        ).add_vpp_config()
 
         # packets from unknown EP 221 to known EP in EPG 222
         # should be redirected to known remote SEP
 
         # packets from unknown EP 221 to known EP in EPG 222
         # should be redirected to known remote SEP
-        base = (Ether(src=self.pg7.remote_mac, dst=self.pg7.local_mac) /
-                IP(src=self.pg7.remote_ip4, dst=self.pg7.local_ip4) /
-                UDP(sport=1234, dport=48879) /
-                VXLAN(vni=444, gpid=441, flags=0x88) /
-                Ether(src="00:22:22:22:22:44", dst=str(self.router_mac)))
-        p = [(base /
-              IP(src="10.0.1.100", dst=ep3.ip4) /
-              UDP(sport=1234, dport=1234) /
-              Raw(b'\xa5' * 100)),
-             (base /
-              IPv6(src="2001:10::100", dst=ep3.ip6) /
-              UDP(sport=1234, dport=1234) /
-              Raw(b'\xa5' * 100))]
+        base = (
+            Ether(src=self.pg7.remote_mac, dst=self.pg7.local_mac)
+            / IP(src=self.pg7.remote_ip4, dst=self.pg7.local_ip4)
+            / UDP(sport=1234, dport=48879)
+            / VXLAN(vni=444, gpid=441, flags=0x88)
+            / Ether(src="00:22:22:22:22:44", dst=str(self.router_mac))
+        )
+        p = [
+            (
+                base
+                / IP(src="10.0.1.100", dst=ep3.ip4)
+                / UDP(sport=1234, dport=1234)
+                / Raw(b"\xa5" * 100)
+            ),
+            (
+                base
+                / IPv6(src="2001:10::100", dst=ep3.ip6)
+                / UDP(sport=1234, dport=1234)
+                / Raw(b"\xa5" * 100)
+            ),
+        ]
 
         # unknown remote EP to local EP redirected to known remote SEP
         rxs = self.send_and_expect(self.pg7, p, self.pg7)
 
         # unknown remote EP to local EP redirected to known remote SEP
         rxs = self.send_and_expect(self.pg7, p, self.pg7)
@@ -4163,12 +4979,12 @@ class TestGBP(VppTestCase):
             self.assertEqual(rxip.dst, txip.dst)
 
         # endpoint learnt via the parent GBP-vxlan interface
             self.assertEqual(rxip.dst, txip.dst)
 
         # endpoint learnt via the parent GBP-vxlan interface
-        self.assertTrue(find_gbp_endpoint(self,
-                                          vx_tun_l3._sw_if_index,
-                                          ip="10.0.1.100"))
-        self.assertTrue(find_gbp_endpoint(self,
-                                          vx_tun_l3._sw_if_index,
-                                          ip="2001:10::100"))
+        self.assertTrue(
+            find_gbp_endpoint(self, vx_tun_l3._sw_if_index, ip="10.0.1.100")
+        )
+        self.assertTrue(
+            find_gbp_endpoint(self, vx_tun_l3._sw_if_index, ip="2001:10::100")
+        )
 
         # remote SEP: it is now an unknown remote SEP and should go
         # to spine proxy
 
         # remote SEP: it is now an unknown remote SEP and should go
         # to spine proxy
@@ -4202,7 +5018,7 @@ class TestGBP(VppTestCase):
         self.pg7.unconfig_ip4()
 
     def test_gbp_redirect_extended(self):
         self.pg7.unconfig_ip4()
 
     def test_gbp_redirect_extended(self):
-        """ GBP Endpoint Redirect Extended """
+        """GBP Endpoint Redirect Extended"""
 
         self.vapi.cli("set logging class gbp level debug")
 
 
         self.vapi.cli("set logging class gbp level debug")
 
@@ -4210,12 +5026,10 @@ class TestGBP(VppTestCase):
         routed_dst_mac = "00:0c:0c:0c:0c:0c"
         routed_src_mac = "00:22:bd:f8:19:ff"
 
         routed_dst_mac = "00:0c:0c:0c:0c:0c"
         routed_src_mac = "00:22:bd:f8:19:ff"
 
-        learnt = [{'mac': '00:00:11:11:11:02',
-                   'ip': '10.0.1.2',
-                   'ip6': '2001:10::2'},
-                  {'mac': '00:00:11:11:11:03',
-                   'ip': '10.0.1.3',
-                   'ip6': '2001:10::3'}]
+        learnt = [
+            {"mac": "00:00:11:11:11:02", "ip": "10.0.1.2", "ip6": "2001:10::2"},
+            {"mac": "00:00:11:11:11:03", "ip": "10.0.1.3", "ip6": "2001:10::3"},
+        ]
 
         #
         # IP tables
 
         #
         # IP tables
@@ -4232,8 +5046,10 @@ class TestGBP(VppTestCase):
             self.pg7.local_ip4,
             self.pg7.remote_ip4,
             114,
             self.pg7.local_ip4,
             self.pg7.remote_ip4,
             114,
-            mode=(VppEnum.vl_api_vxlan_gbp_api_tunnel_mode_t.
-                  VXLAN_GBP_API_TUNNEL_MODE_L3))
+            mode=(
+                VppEnum.vl_api_vxlan_gbp_api_tunnel_mode_t.VXLAN_GBP_API_TUNNEL_MODE_L3
+            ),
+        )
         rd_uu4.add_vpp_config()
         VppIpInterfaceBind(self, rd_uu4, t4).add_vpp_config()
 
         rd_uu4.add_vpp_config()
         VppIpInterfaceBind(self, rd_uu4, t4).add_vpp_config()
 
@@ -4242,8 +5058,10 @@ class TestGBP(VppTestCase):
             self.pg7.local_ip4,
             self.pg7.remote_ip4,
             115,
             self.pg7.local_ip4,
             self.pg7.remote_ip4,
             115,
-            mode=(VppEnum.vl_api_vxlan_gbp_api_tunnel_mode_t.
-                  VXLAN_GBP_API_TUNNEL_MODE_L3))
+            mode=(
+                VppEnum.vl_api_vxlan_gbp_api_tunnel_mode_t.VXLAN_GBP_API_TUNNEL_MODE_L3
+            ),
+        )
         rd_uu6.add_vpp_config()
         VppIpInterfaceBind(self, rd_uu6, t4).add_vpp_config()
 
         rd_uu6.add_vpp_config()
         VppIpInterfaceBind(self, rd_uu6, t4).add_vpp_config()
 
@@ -4284,54 +5102,66 @@ class TestGBP(VppTestCase):
         gbd2.add_vpp_config()
 
         # ... and has a /32 and /128 applied
         gbd2.add_vpp_config()
 
         # ... and has a /32 and /128 applied
-        ip4_addr1 = VppIpInterfaceAddress(self, gbd1.bvi,
-                                          "10.0.0.128", 32,
-                                          bind=b_lo0_ip4).add_vpp_config()
-        ip6_addr1 = VppIpInterfaceAddress(self, gbd1.bvi,
-                                          "2001:10::128", 128,
-                                          bind=b_lo0_ip6).add_vpp_config()
-        ip4_addr2 = VppIpInterfaceAddress(self, gbd2.bvi,
-                                          "10.0.1.128", 32,
-                                          bind=b_lo1_ip4).add_vpp_config()
-        ip6_addr2 = VppIpInterfaceAddress(self, gbd2.bvi,
-                                          "2001:11::128", 128,
-                                          bind=b_lo1_ip6).add_vpp_config()
+        ip4_addr1 = VppIpInterfaceAddress(
+            self, gbd1.bvi, "10.0.0.128", 32, bind=b_lo0_ip4
+        ).add_vpp_config()
+        ip6_addr1 = VppIpInterfaceAddress(
+            self, gbd1.bvi, "2001:10::128", 128, bind=b_lo0_ip6
+        ).add_vpp_config()
+        ip4_addr2 = VppIpInterfaceAddress(
+            self, gbd2.bvi, "10.0.1.128", 32, bind=b_lo1_ip4
+        ).add_vpp_config()
+        ip6_addr2 = VppIpInterfaceAddress(
+            self, gbd2.bvi, "2001:11::128", 128, bind=b_lo1_ip6
+        ).add_vpp_config()
 
         #
         # The Endpoint-groups
         #
 
         #
         # The Endpoint-groups
         #
-        epg_220 = VppGbpEndpointGroup(self, 220, 440, rd1, gbd1,
-                                      None, gbd1.bvi,
-                                      "10.0.0.128",
-                                      "2001:10::128",
-                                      VppGbpEndpointRetention(60))
+        epg_220 = VppGbpEndpointGroup(
+            self,
+            220,
+            440,
+            rd1,
+            gbd1,
+            None,
+            gbd1.bvi,
+            "10.0.0.128",
+            "2001:10::128",
+            VppGbpEndpointRetention(60),
+        )
         epg_220.add_vpp_config()
         epg_220.add_vpp_config()
-        epg_221 = VppGbpEndpointGroup(self, 221, 441, rd1, gbd2,
-                                      None, gbd2.bvi,
-                                      "10.0.1.128",
-                                      "2001:11::128",
-                                      VppGbpEndpointRetention(60))
+        epg_221 = VppGbpEndpointGroup(
+            self,
+            221,
+            441,
+            rd1,
+            gbd2,
+            None,
+            gbd2.bvi,
+            "10.0.1.128",
+            "2001:11::128",
+            VppGbpEndpointRetention(60),
+        )
         epg_221.add_vpp_config()
 
         #
         # a GBP bridge domains for the SEPs
         #
         epg_221.add_vpp_config()
 
         #
         # a GBP bridge domains for the SEPs
         #
-        bd_uu3 = VppVxlanGbpTunnel(self, self.pg7.local_ip4,
-                                   self.pg7.remote_ip4, 116)
+        bd_uu3 = VppVxlanGbpTunnel(self, self.pg7.local_ip4, self.pg7.remote_ip4, 116)
         bd_uu3.add_vpp_config()
 
         bd3 = VppBridgeDomain(self, 3)
         bd3.add_vpp_config()
         bd_uu3.add_vpp_config()
 
         bd3 = VppBridgeDomain(self, 3)
         bd3.add_vpp_config()
-        gbd3 = VppGbpBridgeDomain(self, bd3, rd1, self.loop2,
-                                  bd_uu3, learn=False)
+        gbd3 = VppGbpBridgeDomain(self, bd3, rd1, self.loop2, bd_uu3, learn=False)
         gbd3.add_vpp_config()
 
         gbd3.add_vpp_config()
 
-        ip4_addr3 = VppIpInterfaceAddress(self, gbd3.bvi,
-                                          "12.0.0.128", 32,
-                                          bind=b_lo2_ip4).add_vpp_config()
-        ip6_addr3 = VppIpInterfaceAddress(self, gbd3.bvi,
-                                          "4001:10::128", 128,
-                                          bind=b_lo2_ip6).add_vpp_config()
+        ip4_addr3 = VppIpInterfaceAddress(
+            self, gbd3.bvi, "12.0.0.128", 32, bind=b_lo2_ip4
+        ).add_vpp_config()
+        ip6_addr3 = VppIpInterfaceAddress(
+            self, gbd3.bvi, "4001:10::128", 128, bind=b_lo2_ip6
+        ).add_vpp_config()
 
         #
         # self.logger.info(self.vapi.cli("show gbp bridge"))
 
         #
         # self.logger.info(self.vapi.cli("show gbp bridge"))
@@ -4343,38 +5173,69 @@ class TestGBP(VppTestCase):
         #
         # EPGs in which the service endpoints exist
         #
         #
         # EPGs in which the service endpoints exist
         #
-        epg_320 = VppGbpEndpointGroup(self, 320, 550, rd1, gbd3,
-                                      None, gbd3.bvi,
-                                      "12.0.0.128",
-                                      "4001:10::128",
-                                      VppGbpEndpointRetention(60))
+        epg_320 = VppGbpEndpointGroup(
+            self,
+            320,
+            550,
+            rd1,
+            gbd3,
+            None,
+            gbd3.bvi,
+            "12.0.0.128",
+            "4001:10::128",
+            VppGbpEndpointRetention(60),
+        )
         epg_320.add_vpp_config()
 
         #
         # endpoints
         #
         epg_320.add_vpp_config()
 
         #
         # endpoints
         #
-        ep1 = VppGbpEndpoint(self, self.pg0,
-                             epg_220, None,
-                             "10.0.0.1", "11.0.0.1",
-                             "2001:10::1", "3001:10::1")
+        ep1 = VppGbpEndpoint(
+            self,
+            self.pg0,
+            epg_220,
+            None,
+            "10.0.0.1",
+            "11.0.0.1",
+            "2001:10::1",
+            "3001:10::1",
+        )
         ep1.add_vpp_config()
         ep1.add_vpp_config()
-        ep2 = VppGbpEndpoint(self, self.pg1,
-                             epg_221, None,
-                             "10.0.1.1", "11.0.1.1",
-                             "2001:11::1", "3001:11::1")
+        ep2 = VppGbpEndpoint(
+            self,
+            self.pg1,
+            epg_221,
+            None,
+            "10.0.1.1",
+            "11.0.1.1",
+            "2001:11::1",
+            "3001:11::1",
+        )
         ep2.add_vpp_config()
 
         #
         # service endpoints
         #
         ep2.add_vpp_config()
 
         #
         # service endpoints
         #
-        sep1 = VppGbpEndpoint(self, self.pg3,
-                              epg_320, None,
-                              "12.0.0.1", "13.0.0.1",
-                              "4001:10::1", "5001:10::1")
-        sep2 = VppGbpEndpoint(self, self.pg4,
-                              epg_320, None,
-                              "12.0.0.2", "13.0.0.2",
-                              "4001:10::2", "5001:10::2")
+        sep1 = VppGbpEndpoint(
+            self,
+            self.pg3,
+            epg_320,
+            None,
+            "12.0.0.1",
+            "13.0.0.1",
+            "4001:10::1",
+            "5001:10::1",
+        )
+        sep2 = VppGbpEndpoint(
+            self,
+            self.pg4,
+            epg_320,
+            None,
+            "12.0.0.2",
+            "13.0.0.2",
+            "4001:10::2",
+            "5001:10::2",
+        )
 
         # sep1 and sep2 are not added to config yet
         # they are unknown for now
 
         # sep1 and sep2 are not added to config yet
         # they are unknown for now
@@ -4382,34 +5243,54 @@ class TestGBP(VppTestCase):
         #
         # add routes to EPG subnets
         #
         #
         # add routes to EPG subnets
         #
-        VppGbpSubnet(self, rd1, "10.0.0.0", 24,
-                     VppEnum.vl_api_gbp_subnet_type_t.GBP_API_SUBNET_TRANSPORT
-                     ).add_vpp_config()
-        VppGbpSubnet(self, rd1, "10.0.1.0", 24,
-                     VppEnum.vl_api_gbp_subnet_type_t.GBP_API_SUBNET_TRANSPORT
-                     ).add_vpp_config()
+        VppGbpSubnet(
+            self,
+            rd1,
+            "10.0.0.0",
+            24,
+            VppEnum.vl_api_gbp_subnet_type_t.GBP_API_SUBNET_TRANSPORT,
+        ).add_vpp_config()
+        VppGbpSubnet(
+            self,
+            rd1,
+            "10.0.1.0",
+            24,
+            VppEnum.vl_api_gbp_subnet_type_t.GBP_API_SUBNET_TRANSPORT,
+        ).add_vpp_config()
 
         #
         # Local host to known local host in different BD
         # with SFC contract (source and destination are in
         # one node and service endpoint in another node)
         #
 
         #
         # Local host to known local host in different BD
         # with SFC contract (source and destination are in
         # one node and service endpoint in another node)
         #
-        p4 = [(Ether(src=ep1.mac, dst=str(self.router_mac)) /
-               IP(src=ep1.ip4, dst=ep2.ip4) /
-               UDP(sport=1234, dport=1234) /
-               Raw(b'\xa5' * 100)),
-              (Ether(src=ep2.mac, dst=str(self.router_mac)) /
-               IP(src=ep2.ip4, dst=ep1.ip4) /
-               UDP(sport=1234, dport=1234) /
-               Raw(b'\xa5' * 100))]
-        p6 = [(Ether(src=ep1.mac, dst=str(self.router_mac)) /
-               IPv6(src=ep1.ip6, dst=ep2.ip6) /
-               UDP(sport=1234, dport=1234) /
-               Raw(b'\xa5' * 100)),
-              (Ether(src=ep2.mac, dst=str(self.router_mac)) /
-               IPv6(src=ep2.ip6, dst=ep1.ip6) /
-               UDP(sport=1234, dport=1230) /
-               Raw(b'\xa5' * 100))]
+        p4 = [
+            (
+                Ether(src=ep1.mac, dst=str(self.router_mac))
+                / IP(src=ep1.ip4, dst=ep2.ip4)
+                / UDP(sport=1234, dport=1234)
+                / Raw(b"\xa5" * 100)
+            ),
+            (
+                Ether(src=ep2.mac, dst=str(self.router_mac))
+                / IP(src=ep2.ip4, dst=ep1.ip4)
+                / UDP(sport=1234, dport=1234)
+                / Raw(b"\xa5" * 100)
+            ),
+        ]
+        p6 = [
+            (
+                Ether(src=ep1.mac, dst=str(self.router_mac))
+                / IPv6(src=ep1.ip6, dst=ep2.ip6)
+                / UDP(sport=1234, dport=1234)
+                / Raw(b"\xa5" * 100)
+            ),
+            (
+                Ether(src=ep2.mac, dst=str(self.router_mac))
+                / IPv6(src=ep2.ip6, dst=ep1.ip6)
+                / UDP(sport=1234, dport=1230)
+                / Raw(b"\xa5" * 100)
+            ),
+        ]
 
         # should be dropped since no contract yet
         self.send_and_assert_no_replies(self.pg0, [p4[0]])
 
         # should be dropped since no contract yet
         self.send_and_assert_no_replies(self.pg0, [p4[0]])
@@ -4420,8 +5301,12 @@ class TestGBP(VppTestCase):
         # one of the next-hops is via an EP that is not known
         #
         rule4 = AclRule(is_permit=1, proto=17)
         # one of the next-hops is via an EP that is not known
         #
         rule4 = AclRule(is_permit=1, proto=17)
-        rule6 = AclRule(src_prefix=IPv6Network((0, 0)),
-                        dst_prefix=IPv6Network((0, 0)), is_permit=1, proto=17)
+        rule6 = AclRule(
+            src_prefix=IPv6Network((0, 0)),
+            dst_prefix=IPv6Network((0, 0)),
+            is_permit=1,
+            proto=17,
+        )
         acl = VppAcl(self, rules=[rule4, rule6])
         acl.add_vpp_config()
 
         acl = VppAcl(self, rules=[rule4, rule6])
         acl.add_vpp_config()
 
@@ -4429,33 +5314,63 @@ class TestGBP(VppTestCase):
         # test the src-ip hash mode
         #
         c1 = VppGbpContract(
         # test the src-ip hash mode
         #
         c1 = VppGbpContract(
-            self, 402, epg_220.sclass, epg_221.sclass, acl.acl_index,
-            [VppGbpContractRule(
-                VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_REDIRECT,
-                VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SYMMETRIC,
-                [VppGbpContractNextHop(sep1.vmac, sep1.epg.bd,
-                                       sep1.ip4, sep1.epg.rd)]),
-             VppGbpContractRule(
-                VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_REDIRECT,
-                VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SYMMETRIC,
-                [VppGbpContractNextHop(sep1.vmac, sep1.epg.bd,
-                                       sep1.ip6, sep1.epg.rd)])],
-            [ETH_P_IP, ETH_P_IPV6])
+            self,
+            402,
+            epg_220.sclass,
+            epg_221.sclass,
+            acl.acl_index,
+            [
+                VppGbpContractRule(
+                    VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_REDIRECT,
+                    VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SYMMETRIC,
+                    [
+                        VppGbpContractNextHop(
+                            sep1.vmac, sep1.epg.bd, sep1.ip4, sep1.epg.rd
+                        )
+                    ],
+                ),
+                VppGbpContractRule(
+                    VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_REDIRECT,
+                    VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SYMMETRIC,
+                    [
+                        VppGbpContractNextHop(
+                            sep1.vmac, sep1.epg.bd, sep1.ip6, sep1.epg.rd
+                        )
+                    ],
+                ),
+            ],
+            [ETH_P_IP, ETH_P_IPV6],
+        )
         c1.add_vpp_config()
 
         c2 = VppGbpContract(
         c1.add_vpp_config()
 
         c2 = VppGbpContract(
-            self, 402, epg_221.sclass, epg_220.sclass, acl.acl_index,
-            [VppGbpContractRule(
-                VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_REDIRECT,
-                VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SYMMETRIC,
-                [VppGbpContractNextHop(sep1.vmac, sep1.epg.bd,
-                                       sep1.ip4, sep1.epg.rd)]),
-             VppGbpContractRule(
-                VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_REDIRECT,
-                VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SYMMETRIC,
-                [VppGbpContractNextHop(sep1.vmac, sep1.epg.bd,
-                                       sep1.ip6, sep1.epg.rd)])],
-            [ETH_P_IP, ETH_P_IPV6])
+            self,
+            402,
+            epg_221.sclass,
+            epg_220.sclass,
+            acl.acl_index,
+            [
+                VppGbpContractRule(
+                    VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_REDIRECT,
+                    VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SYMMETRIC,
+                    [
+                        VppGbpContractNextHop(
+                            sep1.vmac, sep1.epg.bd, sep1.ip4, sep1.epg.rd
+                        )
+                    ],
+                ),
+                VppGbpContractRule(
+                    VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_REDIRECT,
+                    VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SYMMETRIC,
+                    [
+                        VppGbpContractNextHop(
+                            sep1.vmac, sep1.epg.bd, sep1.ip6, sep1.epg.rd
+                        )
+                    ],
+                ),
+            ],
+            [ETH_P_IP, ETH_P_IPV6],
+        )
         c2.add_vpp_config()
 
         # ep1 <--> ep2 redirected through sep1
         c2.add_vpp_config()
 
         # ep1 <--> ep2 redirected through sep1
@@ -4564,16 +5479,16 @@ class TestGBP(VppTestCase):
             self.assertEqual(rx[IPv6].dst, ep1.ip6)
 
         # packet coming from the l2 spine-proxy to sep1
             self.assertEqual(rx[IPv6].dst, ep1.ip6)
 
         # packet coming from the l2 spine-proxy to sep1
-        p = (Ether(src=self.pg7.remote_mac,
-                   dst=self.pg7.local_mac) /
-             IP(src=self.pg7.remote_ip4,
-                dst=self.pg7.local_ip4) /
-             UDP(sport=1234, dport=48879) /
-             VXLAN(vni=116, gpid=440, gpflags=0x08, flags=0x88) /
-             Ether(src=str(self.router_mac), dst=sep1.mac) /
-             IP(src=ep1.ip4, dst=ep2.ip4) /
-             UDP(sport=1234, dport=1234) /
-             Raw(b'\xa5' * 100))
+        p = (
+            Ether(src=self.pg7.remote_mac, dst=self.pg7.local_mac)
+            / IP(src=self.pg7.remote_ip4, dst=self.pg7.local_ip4)
+            / UDP(sport=1234, dport=48879)
+            / VXLAN(vni=116, gpid=440, gpflags=0x08, flags=0x88)
+            / Ether(src=str(self.router_mac), dst=sep1.mac)
+            / IP(src=ep1.ip4, dst=ep2.ip4)
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
 
         rxs = self.send_and_expect(self.pg7, [p] * 17, sep1.itf)
 
 
         rxs = self.send_and_expect(self.pg7, [p] * 17, sep1.itf)
 
@@ -4585,14 +5500,23 @@ class TestGBP(VppTestCase):
 
         # contract for SEP to communicate with dst EP
         c3 = VppGbpContract(
 
         # contract for SEP to communicate with dst EP
         c3 = VppGbpContract(
-            self, 402, epg_320.sclass, epg_221.sclass, acl.acl_index,
-            [VppGbpContractRule(
-                VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
-                VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SYMMETRIC),
-             VppGbpContractRule(
-                VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
-                VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SYMMETRIC)],
-            [ETH_P_IP, ETH_P_IPV6])
+            self,
+            402,
+            epg_320.sclass,
+            epg_221.sclass,
+            acl.acl_index,
+            [
+                VppGbpContractRule(
+                    VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
+                    VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SYMMETRIC,
+                ),
+                VppGbpContractRule(
+                    VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
+                    VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SYMMETRIC,
+                ),
+            ],
+            [ETH_P_IP, ETH_P_IPV6],
+        )
         c3.add_vpp_config()
 
         # temporarily remove ep2, so that ep2 is remote & unknown
         c3.add_vpp_config()
 
         # temporarily remove ep2, so that ep2 is remote & unknown
@@ -4602,10 +5526,12 @@ class TestGBP(VppTestCase):
         # as ep2 is now unknown (see above), it must go through
         # the rd UU (packet is routed)
 
         # as ep2 is now unknown (see above), it must go through
         # the rd UU (packet is routed)
 
-        p1 = (Ether(src=sep1.mac, dst=self.router_mac) /
-              IP(src=ep1.ip4, dst=ep2.ip4) /
-              UDP(sport=1234, dport=1234) /
-              Raw(b'\xa5' * 100))
+        p1 = (
+            Ether(src=sep1.mac, dst=self.router_mac)
+            / IP(src=ep1.ip4, dst=ep2.ip4)
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
 
         rxs = self.send_and_expect(self.pg3, [p1] * 17, self.pg7)
 
 
         rxs = self.send_and_expect(self.pg3, [p1] * 17, self.pg7)
 
@@ -4634,16 +5560,16 @@ class TestGBP(VppTestCase):
         ep2.add_vpp_config()
 
         # packet coming back from the remote sep through rd UU
         ep2.add_vpp_config()
 
         # packet coming back from the remote sep through rd UU
-        p2 = (Ether(src=self.pg7.remote_mac,
-                    dst=self.pg7.local_mac) /
-              IP(src=self.pg7.remote_ip4,
-                 dst=self.pg7.local_ip4) /
-              UDP(sport=1234, dport=48879) /
-              VXLAN(vni=114, gpid=441, gpflags=0x09, flags=0x88) /
-              Ether(src=str(self.router_mac), dst=self.router_mac) /
-              IP(src=ep1.ip4, dst=ep2.ip4) /
-              UDP(sport=1234, dport=1234) /
-              Raw(b'\xa5' * 100))
+        p2 = (
+            Ether(src=self.pg7.remote_mac, dst=self.pg7.local_mac)
+            / IP(src=self.pg7.remote_ip4, dst=self.pg7.local_ip4)
+            / UDP(sport=1234, dport=48879)
+            / VXLAN(vni=114, gpid=441, gpflags=0x09, flags=0x88)
+            / Ether(src=str(self.router_mac), dst=self.router_mac)
+            / IP(src=ep1.ip4, dst=ep2.ip4)
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
 
         rxs = self.send_and_expect(self.pg7, [p2], self.pg1)
 
 
         rxs = self.send_and_expect(self.pg7, [p2], self.pg1)
 
@@ -4666,7 +5592,7 @@ class TestGBP(VppTestCase):
         self.pg7.unconfig_ip4()
 
     def test_gbp_l3_out(self):
         self.pg7.unconfig_ip4()
 
     def test_gbp_l3_out(self):
-        """ GBP L3 Out """
+        """GBP L3 Out"""
 
         ep_flags = VppEnum.vl_api_gbp_endpoint_flags_t
         self.vapi.cli("set logging class gbp level debug")
 
         ep_flags = VppEnum.vl_api_gbp_endpoint_flags_t
         self.vapi.cli("set logging class gbp level debug")
@@ -4703,9 +5629,9 @@ class TestGBP(VppTestCase):
         #
         # a multicast vxlan-gbp tunnel for broadcast in the BD
         #
         #
         # a multicast vxlan-gbp tunnel for broadcast in the BD
         #
-        tun_bm = VppVxlanGbpTunnel(self, self.pg7.local_ip4,
-                                   "239.1.1.1", 88,
-                                   mcast_itf=self.pg7)
+        tun_bm = VppVxlanGbpTunnel(
+            self, self.pg7.local_ip4, "239.1.1.1", 88, mcast_itf=self.pg7
+        )
         tun_bm.add_vpp_config()
 
         #
         tun_bm.add_vpp_config()
 
         #
@@ -4719,24 +5645,37 @@ class TestGBP(VppTestCase):
         #
         # The Endpoint-groups in which the external endpoints exist
         #
         #
         # The Endpoint-groups in which the external endpoints exist
         #
-        epg_220 = VppGbpEndpointGroup(self, 220, 113, rd1, gbd1,
-                                      None, gbd1.bvi,
-                                      "10.0.0.128",
-                                      "2001:10::128",
-                                      VppGbpEndpointRetention(4))
+        epg_220 = VppGbpEndpointGroup(
+            self,
+            220,
+            113,
+            rd1,
+            gbd1,
+            None,
+            gbd1.bvi,
+            "10.0.0.128",
+            "2001:10::128",
+            VppGbpEndpointRetention(4),
+        )
         epg_220.add_vpp_config()
 
         # the BVIs have the subnets applied ...
         epg_220.add_vpp_config()
 
         # the BVIs have the subnets applied ...
-        ip4_addr = VppIpInterfaceAddress(self, gbd1.bvi, "10.0.0.128",
-                                         24, bind=b_ip4).add_vpp_config()
-        ip6_addr = VppIpInterfaceAddress(self, gbd1.bvi, "2001:10::128",
-                                         64, bind=b_ip6).add_vpp_config()
+        ip4_addr = VppIpInterfaceAddress(
+            self, gbd1.bvi, "10.0.0.128", 24, bind=b_ip4
+        ).add_vpp_config()
+        ip6_addr = VppIpInterfaceAddress(
+            self, gbd1.bvi, "2001:10::128", 64, bind=b_ip6
+        ).add_vpp_config()
 
         # ... which are L3-out subnets
         l3o_1 = VppGbpSubnet(
 
         # ... which are L3-out subnets
         l3o_1 = VppGbpSubnet(
-            self, rd1, "10.0.0.0", 24,
+            self,
+            rd1,
+            "10.0.0.0",
+            24,
             VppEnum.vl_api_gbp_subnet_type_t.GBP_API_SUBNET_L3_OUT,
             VppEnum.vl_api_gbp_subnet_type_t.GBP_API_SUBNET_L3_OUT,
-            sclass=113)
+            sclass=113,
+        )
         l3o_1.add_vpp_config()
 
         #
         l3o_1.add_vpp_config()
 
         #
@@ -4753,90 +5692,139 @@ class TestGBP(VppTestCase):
         # an unicast vxlan-gbp for inter-RD traffic
         #
         vx_tun_l3 = VppGbpVxlanTunnel(
         # an unicast vxlan-gbp for inter-RD traffic
         #
         vx_tun_l3 = VppGbpVxlanTunnel(
-            self, 444, rd1.rd_id,
+            self,
+            444,
+            rd1.rd_id,
             VppEnum.vl_api_gbp_vxlan_tunnel_mode_t.GBP_VXLAN_TUNNEL_MODE_L3,
             VppEnum.vl_api_gbp_vxlan_tunnel_mode_t.GBP_VXLAN_TUNNEL_MODE_L3,
-            self.pg2.local_ip4)
+            self.pg2.local_ip4,
+        )
         vx_tun_l3.add_vpp_config()
 
         #
         # External Endpoints
         #
         vx_tun_l3.add_vpp_config()
 
         #
         # External Endpoints
         #
-        eep1 = VppGbpEndpoint(self, self.vlan_100,
-                              epg_220, None,
-                              "10.0.0.1", "11.0.0.1",
-                              "2001:10::1", "3001::1",
-                              ep_flags.GBP_API_ENDPOINT_FLAG_EXTERNAL)
+        eep1 = VppGbpEndpoint(
+            self,
+            self.vlan_100,
+            epg_220,
+            None,
+            "10.0.0.1",
+            "11.0.0.1",
+            "2001:10::1",
+            "3001::1",
+            ep_flags.GBP_API_ENDPOINT_FLAG_EXTERNAL,
+        )
         eep1.add_vpp_config()
         eep1.add_vpp_config()
-        eep2 = VppGbpEndpoint(self, self.vlan_101,
-                              epg_220, None,
-                              "10.0.0.2", "11.0.0.2",
-                              "2001:10::2", "3001::2",
-                              ep_flags.GBP_API_ENDPOINT_FLAG_EXTERNAL)
+        eep2 = VppGbpEndpoint(
+            self,
+            self.vlan_101,
+            epg_220,
+            None,
+            "10.0.0.2",
+            "11.0.0.2",
+            "2001:10::2",
+            "3001::2",
+            ep_flags.GBP_API_ENDPOINT_FLAG_EXTERNAL,
+        )
         eep2.add_vpp_config()
         eep2.add_vpp_config()
-        eep3 = VppGbpEndpoint(self, self.vlan_102,
-                              epg_220, None,
-                              "10.0.0.3", "11.0.0.3",
-                              "2001:10::3", "3001::3",
-                              ep_flags.GBP_API_ENDPOINT_FLAG_EXTERNAL)
+        eep3 = VppGbpEndpoint(
+            self,
+            self.vlan_102,
+            epg_220,
+            None,
+            "10.0.0.3",
+            "11.0.0.3",
+            "2001:10::3",
+            "3001::3",
+            ep_flags.GBP_API_ENDPOINT_FLAG_EXTERNAL,
+        )
         eep3.add_vpp_config()
 
         #
         # A remote external endpoint
         #
         eep3.add_vpp_config()
 
         #
         # A remote external endpoint
         #
-        rep = VppGbpEndpoint(self, vx_tun_l3,
-                             epg_220, None,
-                             "10.0.0.101", "11.0.0.101",
-                             "2001:10::101", "3001::101",
-                             ep_flags.GBP_API_ENDPOINT_FLAG_REMOTE,
-                             self.pg7.local_ip4,
-                             self.pg7.remote_ip4,
-                             mac=None)
+        rep = VppGbpEndpoint(
+            self,
+            vx_tun_l3,
+            epg_220,
+            None,
+            "10.0.0.101",
+            "11.0.0.101",
+            "2001:10::101",
+            "3001::101",
+            ep_flags.GBP_API_ENDPOINT_FLAG_REMOTE,
+            self.pg7.local_ip4,
+            self.pg7.remote_ip4,
+            mac=None,
+        )
         rep.add_vpp_config()
 
         #
         # EP1 impersonating EP3 is dropped
         #
         rep.add_vpp_config()
 
         #
         # EP1 impersonating EP3 is dropped
         #
-        p = (Ether(src=eep1.mac, dst="ff:ff:ff:ff:ff:ff") /
-             Dot1Q(vlan=100) /
-             ARP(op="who-has",
-                 psrc="10.0.0.3", pdst="10.0.0.128",
-                 hwsrc=eep1.mac, hwdst="ff:ff:ff:ff:ff:ff"))
+        p = (
+            Ether(src=eep1.mac, dst="ff:ff:ff:ff:ff:ff")
+            / Dot1Q(vlan=100)
+            / ARP(
+                op="who-has",
+                psrc="10.0.0.3",
+                pdst="10.0.0.128",
+                hwsrc=eep1.mac,
+                hwdst="ff:ff:ff:ff:ff:ff",
+            )
+        )
         self.send_and_assert_no_replies(self.pg0, p)
 
         #
         # ARP packet from External EPs are accepted and replied to
         #
         self.send_and_assert_no_replies(self.pg0, p)
 
         #
         # ARP packet from External EPs are accepted and replied to
         #
-        p_arp = (Ether(src=eep1.mac, dst="ff:ff:ff:ff:ff:ff") /
-                 Dot1Q(vlan=100) /
-                 ARP(op="who-has",
-                     psrc=eep1.ip4, pdst="10.0.0.128",
-                     hwsrc=eep1.mac, hwdst="ff:ff:ff:ff:ff:ff"))
+        p_arp = (
+            Ether(src=eep1.mac, dst="ff:ff:ff:ff:ff:ff")
+            / Dot1Q(vlan=100)
+            / ARP(
+                op="who-has",
+                psrc=eep1.ip4,
+                pdst="10.0.0.128",
+                hwsrc=eep1.mac,
+                hwdst="ff:ff:ff:ff:ff:ff",
+            )
+        )
         rxs = self.send_and_expect(self.pg0, p_arp * 1, self.pg0)
 
         #
         # ARP packet from host in remote subnet are accepted and replied to
         #
         rxs = self.send_and_expect(self.pg0, p_arp * 1, self.pg0)
 
         #
         # ARP packet from host in remote subnet are accepted and replied to
         #
-        p_arp = (Ether(src=eep3.mac, dst="ff:ff:ff:ff:ff:ff") /
-                 Dot1Q(vlan=102) /
-                 ARP(op="who-has",
-                     psrc=eep3.ip4, pdst="10.0.0.128",
-                     hwsrc=eep3.mac, hwdst="ff:ff:ff:ff:ff:ff"))
+        p_arp = (
+            Ether(src=eep3.mac, dst="ff:ff:ff:ff:ff:ff")
+            / Dot1Q(vlan=102)
+            / ARP(
+                op="who-has",
+                psrc=eep3.ip4,
+                pdst="10.0.0.128",
+                hwsrc=eep3.mac,
+                hwdst="ff:ff:ff:ff:ff:ff",
+            )
+        )
         rxs = self.send_and_expect(self.pg0, p_arp * 1, self.pg0)
 
         #
         # packets destined to unknown addresses in the BVI's subnet
         # are ARP'd for
         #
         rxs = self.send_and_expect(self.pg0, p_arp * 1, self.pg0)
 
         #
         # packets destined to unknown addresses in the BVI's subnet
         # are ARP'd for
         #
-        p4 = (Ether(src=eep1.mac, dst=str(self.router_mac)) /
-              Dot1Q(vlan=100) /
-              IP(src="10.0.0.1", dst="10.0.0.88") /
-              UDP(sport=1234, dport=1234) /
-              Raw(b'\xa5' * 100))
-        p6 = (Ether(src=eep1.mac, dst=str(self.router_mac)) /
-              Dot1Q(vlan=100) /
-              IPv6(src="2001:10::1", dst="2001:10::88") /
-              UDP(sport=1234, dport=1234) /
-              Raw(b'\xa5' * 100))
+        p4 = (
+            Ether(src=eep1.mac, dst=str(self.router_mac))
+            / Dot1Q(vlan=100)
+            / IP(src="10.0.0.1", dst="10.0.0.88")
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
+        p6 = (
+            Ether(src=eep1.mac, dst=str(self.router_mac))
+            / Dot1Q(vlan=100)
+            / IPv6(src="2001:10::1", dst="2001:10::88")
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
 
         rxs = self.send_and_expect(self.pg0, p4 * 1, self.pg7)
 
 
         rxs = self.send_and_expect(self.pg0, p4 * 1, self.pg7)
 
@@ -4860,26 +5848,28 @@ class TestGBP(VppTestCase):
         #
         # remote to external
         #
         #
         # remote to external
         #
-        p = (Ether(src=self.pg7.remote_mac,
-                   dst=self.pg7.local_mac) /
-             IP(src=self.pg7.remote_ip4,
-                dst=self.pg7.local_ip4) /
-             UDP(sport=1234, dport=48879) /
-             VXLAN(vni=444, gpid=113, flags=0x88) /
-             Ether(src=self.pg0.remote_mac, dst=str(self.router_mac)) /
-             IP(src="10.0.0.101", dst="10.0.0.1") /
-             UDP(sport=1234, dport=1234) /
-             Raw(b'\xa5' * 100))
+        p = (
+            Ether(src=self.pg7.remote_mac, dst=self.pg7.local_mac)
+            / IP(src=self.pg7.remote_ip4, dst=self.pg7.local_ip4)
+            / UDP(sport=1234, dport=48879)
+            / VXLAN(vni=444, gpid=113, flags=0x88)
+            / Ether(src=self.pg0.remote_mac, dst=str(self.router_mac))
+            / IP(src="10.0.0.101", dst="10.0.0.1")
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
 
         rxs = self.send_and_expect(self.pg7, p * 1, self.pg0)
 
         #
         # local EP pings router
         #
 
         rxs = self.send_and_expect(self.pg7, p * 1, self.pg0)
 
         #
         # local EP pings router
         #
-        p = (Ether(src=eep1.mac, dst=str(self.router_mac)) /
-             Dot1Q(vlan=100) /
-             IP(src=eep1.ip4, dst="10.0.0.128") /
-             ICMP(type='echo-request'))
+        p = (
+            Ether(src=eep1.mac, dst=str(self.router_mac))
+            / Dot1Q(vlan=100)
+            / IP(src=eep1.ip4, dst="10.0.0.128")
+            / ICMP(type="echo-request")
+        )
 
         rxs = self.send_and_expect(self.pg0, p * 1, self.pg0)
 
 
         rxs = self.send_and_expect(self.pg0, p * 1, self.pg0)
 
@@ -4891,10 +5881,12 @@ class TestGBP(VppTestCase):
         #
         # local EP pings other local EP
         #
         #
         # local EP pings other local EP
         #
-        p = (Ether(src=eep1.mac, dst=eep2.mac) /
-             Dot1Q(vlan=100) /
-             IP(src=eep1.ip4, dst=eep2.ip4) /
-             ICMP(type='echo-request'))
+        p = (
+            Ether(src=eep1.mac, dst=eep2.mac)
+            / Dot1Q(vlan=100)
+            / IP(src=eep1.ip4, dst=eep2.ip4)
+            / ICMP(type="echo-request")
+        )
 
         rxs = self.send_and_expect(self.pg0, p * 1, self.pg0)
 
 
         rxs = self.send_and_expect(self.pg0, p * 1, self.pg0)
 
@@ -4906,10 +5898,12 @@ class TestGBP(VppTestCase):
         #
         # local EP pings router w/o vlan tag poped
         #
         #
         # local EP pings router w/o vlan tag poped
         #
-        p = (Ether(src=eep3.mac, dst=str(self.router_mac)) /
-             Dot1Q(vlan=102) /
-             IP(src=eep3.ip4, dst="10.0.0.128") /
-             ICMP(type='echo-request'))
+        p = (
+            Ether(src=eep3.mac, dst=str(self.router_mac))
+            / Dot1Q(vlan=102)
+            / IP(src=eep3.ip4, dst="10.0.0.128")
+            / ICMP(type="echo-request")
+        )
 
         rxs = self.send_and_expect(self.pg0, p * 1, self.pg0)
 
 
         rxs = self.send_and_expect(self.pg0, p * 1, self.pg0)
 
@@ -4920,56 +5914,79 @@ class TestGBP(VppTestCase):
         #
         # A ip4 subnet reachable through the external EP1
         #
         #
         # A ip4 subnet reachable through the external EP1
         #
-        ip_220 = VppIpRoute(self, "10.220.0.0", 24,
-                            [VppRoutePath(eep1.ip4,
-                                          eep1.epg.bvi.sw_if_index)],
-                            table_id=t4.table_id)
+        ip_220 = VppIpRoute(
+            self,
+            "10.220.0.0",
+            24,
+            [VppRoutePath(eep1.ip4, eep1.epg.bvi.sw_if_index)],
+            table_id=t4.table_id,
+        )
         ip_220.add_vpp_config()
 
         l3o_220 = VppGbpSubnet(
         ip_220.add_vpp_config()
 
         l3o_220 = VppGbpSubnet(
-            self, rd1, "10.220.0.0", 24,
+            self,
+            rd1,
+            "10.220.0.0",
+            24,
             VppEnum.vl_api_gbp_subnet_type_t.GBP_API_SUBNET_L3_OUT,
             VppEnum.vl_api_gbp_subnet_type_t.GBP_API_SUBNET_L3_OUT,
-            sclass=4220)
+            sclass=4220,
+        )
         l3o_220.add_vpp_config()
 
         #
         # An ip6 subnet reachable through the external EP1
         #
         l3o_220.add_vpp_config()
 
         #
         # An ip6 subnet reachable through the external EP1
         #
-        ip6_220 = VppIpRoute(self, "10:220::", 64,
-                             [VppRoutePath(eep1.ip6,
-                                           eep1.epg.bvi.sw_if_index)],
-                             table_id=t6.table_id)
+        ip6_220 = VppIpRoute(
+            self,
+            "10:220::",
+            64,
+            [VppRoutePath(eep1.ip6, eep1.epg.bvi.sw_if_index)],
+            table_id=t6.table_id,
+        )
         ip6_220.add_vpp_config()
 
         l3o6_220 = VppGbpSubnet(
         ip6_220.add_vpp_config()
 
         l3o6_220 = VppGbpSubnet(
-            self, rd1, "10:220::", 64,
+            self,
+            rd1,
+            "10:220::",
+            64,
             VppEnum.vl_api_gbp_subnet_type_t.GBP_API_SUBNET_L3_OUT,
             VppEnum.vl_api_gbp_subnet_type_t.GBP_API_SUBNET_L3_OUT,
-            sclass=4220)
+            sclass=4220,
+        )
         l3o6_220.add_vpp_config()
 
         #
         # A subnet reachable through the external EP2
         #
         l3o6_220.add_vpp_config()
 
         #
         # A subnet reachable through the external EP2
         #
-        ip_221 = VppIpRoute(self, "10.221.0.0", 24,
-                            [VppRoutePath(eep2.ip4,
-                                          eep2.epg.bvi.sw_if_index)],
-                            table_id=t4.table_id)
+        ip_221 = VppIpRoute(
+            self,
+            "10.221.0.0",
+            24,
+            [VppRoutePath(eep2.ip4, eep2.epg.bvi.sw_if_index)],
+            table_id=t4.table_id,
+        )
         ip_221.add_vpp_config()
 
         l3o_221 = VppGbpSubnet(
         ip_221.add_vpp_config()
 
         l3o_221 = VppGbpSubnet(
-            self, rd1, "10.221.0.0", 24,
+            self,
+            rd1,
+            "10.221.0.0",
+            24,
             VppEnum.vl_api_gbp_subnet_type_t.GBP_API_SUBNET_L3_OUT,
             VppEnum.vl_api_gbp_subnet_type_t.GBP_API_SUBNET_L3_OUT,
-            sclass=4221)
+            sclass=4221,
+        )
         l3o_221.add_vpp_config()
 
         #
         # ping between hosts in remote subnets
         #  dropped without a contract
         #
         l3o_221.add_vpp_config()
 
         #
         # ping between hosts in remote subnets
         #  dropped without a contract
         #
-        p = (Ether(src=eep1.mac, dst=str(self.router_mac)) /
-             Dot1Q(vlan=100) /
-             IP(src="10.220.0.1", dst="10.221.0.1") /
-             ICMP(type='echo-request'))
+        p = (
+            Ether(src=eep1.mac, dst=str(self.router_mac))
+            / Dot1Q(vlan=100)
+            / IP(src="10.220.0.1", dst="10.221.0.1")
+            / ICMP(type="echo-request")
+        )
 
         self.send_and_assert_no_replies(self.pg0, p * 1)
 
 
         self.send_and_assert_no_replies(self.pg0, p * 1)
 
@@ -4977,8 +5994,12 @@ class TestGBP(VppTestCase):
         # contract for the external nets to communicate
         #
         rule4 = AclRule(is_permit=1, proto=17)
         # contract for the external nets to communicate
         #
         rule4 = AclRule(is_permit=1, proto=17)
-        rule6 = AclRule(src_prefix=IPv6Network((0, 0)),
-                        dst_prefix=IPv6Network((0, 0)), is_permit=1, proto=17)
+        rule6 = AclRule(
+            src_prefix=IPv6Network((0, 0)),
+            dst_prefix=IPv6Network((0, 0)),
+            is_permit=1,
+            proto=17,
+        )
         acl = VppAcl(self, rules=[rule4, rule6])
         acl.add_vpp_config()
 
         acl = VppAcl(self, rules=[rule4, rule6])
         acl.add_vpp_config()
 
@@ -4986,68 +6007,106 @@ class TestGBP(VppTestCase):
         # A contract with the wrong scope is not matched
         #
         c_44 = VppGbpContract(
         # A contract with the wrong scope is not matched
         #
         c_44 = VppGbpContract(
-            self, 44, 4220, 4221, acl.acl_index,
-            [VppGbpContractRule(
-                VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
-                VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
-                []),
-             VppGbpContractRule(
-                 VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
-                 VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
-                 [])],
-            [ETH_P_IP, ETH_P_IPV6])
+            self,
+            44,
+            4220,
+            4221,
+            acl.acl_index,
+            [
+                VppGbpContractRule(
+                    VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
+                    VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
+                    [],
+                ),
+                VppGbpContractRule(
+                    VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
+                    VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
+                    [],
+                ),
+            ],
+            [ETH_P_IP, ETH_P_IPV6],
+        )
         c_44.add_vpp_config()
         self.send_and_assert_no_replies(self.pg0, p * 1)
 
         c1 = VppGbpContract(
         c_44.add_vpp_config()
         self.send_and_assert_no_replies(self.pg0, p * 1)
 
         c1 = VppGbpContract(
-            self, 55, 4220, 4221, acl.acl_index,
-            [VppGbpContractRule(
-                VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
-                VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
-                []),
+            self,
+            55,
+            4220,
+            4221,
+            acl.acl_index,
+            [
                 VppGbpContractRule(
                     VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
                     VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
                 VppGbpContractRule(
                     VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
                     VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
-                    [])],
-            [ETH_P_IP, ETH_P_IPV6])
+                    [],
+                ),
+                VppGbpContractRule(
+                    VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
+                    VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
+                    [],
+                ),
+            ],
+            [ETH_P_IP, ETH_P_IPV6],
+        )
         c1.add_vpp_config()
 
         #
         # Contracts allowing ext-net 200 to talk with external EPs
         #
         c2 = VppGbpContract(
         c1.add_vpp_config()
 
         #
         # Contracts allowing ext-net 200 to talk with external EPs
         #
         c2 = VppGbpContract(
-            self, 55, 4220, 113, acl.acl_index,
-            [VppGbpContractRule(
-                VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
-                VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
-                []),
+            self,
+            55,
+            4220,
+            113,
+            acl.acl_index,
+            [
                 VppGbpContractRule(
                     VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
                     VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
                 VppGbpContractRule(
                     VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
                     VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
-                    [])],
-            [ETH_P_IP, ETH_P_IPV6])
+                    [],
+                ),
+                VppGbpContractRule(
+                    VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
+                    VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
+                    [],
+                ),
+            ],
+            [ETH_P_IP, ETH_P_IPV6],
+        )
         c2.add_vpp_config()
         c3 = VppGbpContract(
         c2.add_vpp_config()
         c3 = VppGbpContract(
-            self, 55, 113, 4220, acl.acl_index,
-            [VppGbpContractRule(
-                VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
-                VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
-                []),
+            self,
+            55,
+            113,
+            4220,
+            acl.acl_index,
+            [
+                VppGbpContractRule(
+                    VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
+                    VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
+                    [],
+                ),
                 VppGbpContractRule(
                     VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
                     VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
                 VppGbpContractRule(
                     VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
                     VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
-                    [])],
-            [ETH_P_IP, ETH_P_IPV6])
+                    [],
+                ),
+            ],
+            [ETH_P_IP, ETH_P_IPV6],
+        )
         c3.add_vpp_config()
 
         #
         # ping between hosts in remote subnets
         #
         c3.add_vpp_config()
 
         #
         # ping between hosts in remote subnets
         #
-        p = (Ether(src=eep1.mac, dst=str(self.router_mac)) /
-             Dot1Q(vlan=100) /
-             IP(src="10.220.0.1", dst="10.221.0.1") /
-             UDP(sport=1234, dport=1234) /
-             Raw(b'\xa5' * 100))
+        p = (
+            Ether(src=eep1.mac, dst=str(self.router_mac))
+            / Dot1Q(vlan=100)
+            / IP(src="10.220.0.1", dst="10.221.0.1")
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
 
         rxs = self.send_and_expect(self.pg0, p * 1, self.pg0)
 
 
         rxs = self.send_and_expect(self.pg0, p * 1, self.pg0)
 
@@ -5063,27 +6122,29 @@ class TestGBP(VppTestCase):
         #
         # from remote external EP to local external EP
         #
         #
         # from remote external EP to local external EP
         #
-        p = (Ether(src=self.pg7.remote_mac,
-                   dst=self.pg7.local_mac) /
-             IP(src=self.pg7.remote_ip4,
-                dst=self.pg7.local_ip4) /
-             UDP(sport=1234, dport=48879) /
-             VXLAN(vni=444, gpid=113, flags=0x88) /
-             Ether(src=self.pg0.remote_mac, dst=str(self.router_mac)) /
-             IP(src="10.0.0.101", dst="10.220.0.1") /
-             UDP(sport=1234, dport=1234) /
-             Raw(b'\xa5' * 100))
+        p = (
+            Ether(src=self.pg7.remote_mac, dst=self.pg7.local_mac)
+            / IP(src=self.pg7.remote_ip4, dst=self.pg7.local_ip4)
+            / UDP(sport=1234, dport=48879)
+            / VXLAN(vni=444, gpid=113, flags=0x88)
+            / Ether(src=self.pg0.remote_mac, dst=str(self.router_mac))
+            / IP(src="10.0.0.101", dst="10.220.0.1")
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
 
         rxs = self.send_and_expect(self.pg7, p * 1, self.pg0)
 
         #
         # ping from an external host to the remote external EP
         #
 
         rxs = self.send_and_expect(self.pg7, p * 1, self.pg0)
 
         #
         # ping from an external host to the remote external EP
         #
-        p = (Ether(src=eep1.mac, dst=str(self.router_mac)) /
-             Dot1Q(vlan=100) /
-             IP(src="10.220.0.1", dst=rep.ip4) /
-             UDP(sport=1234, dport=1234) /
-             Raw(b'\xa5' * 100))
+        p = (
+            Ether(src=eep1.mac, dst=str(self.router_mac))
+            / Dot1Q(vlan=100)
+            / IP(src="10.220.0.1", dst=rep.ip4)
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
 
         rxs = self.send_and_expect(self.pg0, p * 1, self.pg7)
 
 
         rxs = self.send_and_expect(self.pg0, p * 1, self.pg7)
 
@@ -5113,10 +6174,14 @@ class TestGBP(VppTestCase):
         # first the VXLAN-GBP tunnel over which it is reached
         #
         vx_tun_r1 = VppVxlanGbpTunnel(
         # first the VXLAN-GBP tunnel over which it is reached
         #
         vx_tun_r1 = VppVxlanGbpTunnel(
-            self, self.pg7.local_ip4,
-            self.pg7.remote_ip4, 445,
-            mode=(VppEnum.vl_api_vxlan_gbp_api_tunnel_mode_t.
-                  VXLAN_GBP_API_TUNNEL_MODE_L3))
+            self,
+            self.pg7.local_ip4,
+            self.pg7.remote_ip4,
+            445,
+            mode=(
+                VppEnum.vl_api_vxlan_gbp_api_tunnel_mode_t.VXLAN_GBP_API_TUNNEL_MODE_L3
+            ),
+        )
         vx_tun_r1.add_vpp_config()
         VppIpInterfaceBind(self, vx_tun_r1, t4).add_vpp_config()
 
         vx_tun_r1.add_vpp_config()
         VppIpInterfaceBind(self, vx_tun_r1, t4).add_vpp_config()
 
@@ -5125,36 +6190,44 @@ class TestGBP(VppTestCase):
         #
         # then the special adj to resolve through on that tunnel
         #
         #
         # then the special adj to resolve through on that tunnel
         #
-        n1 = VppNeighbor(self,
-                         vx_tun_r1.sw_if_index,
-                         "00:0c:0c:0c:0c:0c",
-                         self.pg7.remote_ip4)
+        n1 = VppNeighbor(
+            self, vx_tun_r1.sw_if_index, "00:0c:0c:0c:0c:0c", self.pg7.remote_ip4
+        )
         n1.add_vpp_config()
 
         #
         # the route via the adj above
         #
         n1.add_vpp_config()
 
         #
         # the route via the adj above
         #
-        ip_222 = VppIpRoute(self, "10.222.0.0", 24,
-                            [VppRoutePath(self.pg7.remote_ip4,
-                                          vx_tun_r1.sw_if_index)],
-                            table_id=t4.table_id)
+        ip_222 = VppIpRoute(
+            self,
+            "10.222.0.0",
+            24,
+            [VppRoutePath(self.pg7.remote_ip4, vx_tun_r1.sw_if_index)],
+            table_id=t4.table_id,
+        )
         ip_222.add_vpp_config()
 
         l3o_222 = VppGbpSubnet(
         ip_222.add_vpp_config()
 
         l3o_222 = VppGbpSubnet(
-            self, rd1, "10.222.0.0", 24,
+            self,
+            rd1,
+            "10.222.0.0",
+            24,
             VppEnum.vl_api_gbp_subnet_type_t.GBP_API_SUBNET_L3_OUT,
             VppEnum.vl_api_gbp_subnet_type_t.GBP_API_SUBNET_L3_OUT,
-            sclass=4222)
+            sclass=4222,
+        )
         l3o_222.add_vpp_config()
 
         #
         # ping between hosts in local and remote external subnets
         #  dropped without a contract
         #
         l3o_222.add_vpp_config()
 
         #
         # ping between hosts in local and remote external subnets
         #  dropped without a contract
         #
-        p = (Ether(src=eep1.mac, dst=str(self.router_mac)) /
-             Dot1Q(vlan=100) /
-             IP(src="10.220.0.1", dst="10.222.0.1") /
-             UDP(sport=1234, dport=1234) /
-             Raw(b'\xa5' * 100))
+        p = (
+            Ether(src=eep1.mac, dst=str(self.router_mac))
+            / Dot1Q(vlan=100)
+            / IP(src="10.220.0.1", dst="10.222.0.1")
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
 
         rxs = self.send_and_assert_no_replies(self.pg0, p * 1)
 
 
         rxs = self.send_and_assert_no_replies(self.pg0, p * 1)
 
@@ -5162,26 +6235,37 @@ class TestGBP(VppTestCase):
         # Add contracts ext-nets for 220 -> 222
         #
         c4 = VppGbpContract(
         # Add contracts ext-nets for 220 -> 222
         #
         c4 = VppGbpContract(
-            self, 55, 4220, 4222, acl.acl_index,
-            [VppGbpContractRule(
-                VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
-                VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
-                []),
+            self,
+            55,
+            4220,
+            4222,
+            acl.acl_index,
+            [
                 VppGbpContractRule(
                     VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
                     VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
                 VppGbpContractRule(
                     VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
                     VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
-                    [])],
-            [ETH_P_IP, ETH_P_IPV6])
+                    [],
+                ),
+                VppGbpContractRule(
+                    VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
+                    VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
+                    [],
+                ),
+            ],
+            [ETH_P_IP, ETH_P_IPV6],
+        )
         c4.add_vpp_config()
 
         #
         # ping from host in local to remote external subnets
         #
         c4.add_vpp_config()
 
         #
         # ping from host in local to remote external subnets
         #
-        p = (Ether(src=eep1.mac, dst=str(self.router_mac)) /
-             Dot1Q(vlan=100) /
-             IP(src="10.220.0.1", dst="10.222.0.1") /
-             UDP(sport=1234, dport=1234) /
-             Raw(b'\xa5' * 100))
+        p = (
+            Ether(src=eep1.mac, dst=str(self.router_mac))
+            / Dot1Q(vlan=100)
+            / IP(src="10.220.0.1", dst="10.222.0.1")
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
 
         rxs = self.send_and_expect(self.pg0, p * 3, self.pg7)
 
 
         rxs = self.send_and_expect(self.pg0, p * 3, self.pg7)
 
@@ -5208,39 +6292,50 @@ class TestGBP(VppTestCase):
         # make the external subnet ECMP
         #
         vx_tun_r2 = VppVxlanGbpTunnel(
         # make the external subnet ECMP
         #
         vx_tun_r2 = VppVxlanGbpTunnel(
-            self, self.pg7.local_ip4,
-            self.pg7.remote_ip4, 446,
-            mode=(VppEnum.vl_api_vxlan_gbp_api_tunnel_mode_t.
-                  VXLAN_GBP_API_TUNNEL_MODE_L3))
+            self,
+            self.pg7.local_ip4,
+            self.pg7.remote_ip4,
+            446,
+            mode=(
+                VppEnum.vl_api_vxlan_gbp_api_tunnel_mode_t.VXLAN_GBP_API_TUNNEL_MODE_L3
+            ),
+        )
         vx_tun_r2.add_vpp_config()
         VppIpInterfaceBind(self, vx_tun_r2, t4).add_vpp_config()
 
         self.logger.info(self.vapi.cli("sh vxlan-gbp tunnel"))
 
         vx_tun_r2.add_vpp_config()
         VppIpInterfaceBind(self, vx_tun_r2, t4).add_vpp_config()
 
         self.logger.info(self.vapi.cli("sh vxlan-gbp tunnel"))
 
-        n2 = VppNeighbor(self,
-                         vx_tun_r2.sw_if_index,
-                         "00:0c:0c:0c:0c:0c",
-                         self.pg7.remote_ip4)
+        n2 = VppNeighbor(
+            self, vx_tun_r2.sw_if_index, "00:0c:0c:0c:0c:0c", self.pg7.remote_ip4
+        )
         n2.add_vpp_config()
 
         n2.add_vpp_config()
 
-        ip_222.modify([VppRoutePath(self.pg7.remote_ip4,
-                                    vx_tun_r1.sw_if_index),
-                       VppRoutePath(self.pg7.remote_ip4,
-                                    vx_tun_r2.sw_if_index)])
+        ip_222.modify(
+            [
+                VppRoutePath(self.pg7.remote_ip4, vx_tun_r1.sw_if_index),
+                VppRoutePath(self.pg7.remote_ip4, vx_tun_r2.sw_if_index),
+            ]
+        )
 
         #
         # now expect load-balance
         #
 
         #
         # now expect load-balance
         #
-        p = [(Ether(src=eep1.mac, dst=str(self.router_mac)) /
-              Dot1Q(vlan=100) /
-              IP(src="10.220.0.1", dst="10.222.0.1") /
-              UDP(sport=1234, dport=1234) /
-              Raw(b'\xa5' * 100)),
-             (Ether(src=eep1.mac, dst=str(self.router_mac)) /
-              Dot1Q(vlan=100) /
-              IP(src="10.220.0.1", dst="10.222.0.1") /
-              UDP(sport=1222, dport=1235) /
-              Raw(b'\xa5' * 100))]
+        p = [
+            (
+                Ether(src=eep1.mac, dst=str(self.router_mac))
+                / Dot1Q(vlan=100)
+                / IP(src="10.220.0.1", dst="10.222.0.1")
+                / UDP(sport=1234, dport=1234)
+                / Raw(b"\xa5" * 100)
+            ),
+            (
+                Ether(src=eep1.mac, dst=str(self.router_mac))
+                / Dot1Q(vlan=100)
+                / IP(src="10.220.0.1", dst="10.222.0.1")
+                / UDP(sport=1222, dport=1235)
+                / Raw(b"\xa5" * 100)
+            ),
+        ]
 
         rxs = self.send_and_expect(self.pg0, p, self.pg7)
 
 
         rxs = self.send_and_expect(self.pg0, p, self.pg7)
 
@@ -5250,41 +6345,53 @@ class TestGBP(VppTestCase):
         #
         # Same LB test for v6
         #
         #
         # Same LB test for v6
         #
-        n3 = VppNeighbor(self,
-                         vx_tun_r1.sw_if_index,
-                         "00:0c:0c:0c:0c:0c",
-                         self.pg7.remote_ip6)
+        n3 = VppNeighbor(
+            self, vx_tun_r1.sw_if_index, "00:0c:0c:0c:0c:0c", self.pg7.remote_ip6
+        )
         n3.add_vpp_config()
         n3.add_vpp_config()
-        n4 = VppNeighbor(self,
-                         vx_tun_r2.sw_if_index,
-                         "00:0c:0c:0c:0c:0c",
-                         self.pg7.remote_ip6)
+        n4 = VppNeighbor(
+            self, vx_tun_r2.sw_if_index, "00:0c:0c:0c:0c:0c", self.pg7.remote_ip6
+        )
         n4.add_vpp_config()
 
         n4.add_vpp_config()
 
-        ip_222_6 = VppIpRoute(self, "10:222::", 64,
-                              [VppRoutePath(self.pg7.remote_ip6,
-                                            vx_tun_r1.sw_if_index),
-                               VppRoutePath(self.pg7.remote_ip6,
-                                            vx_tun_r2.sw_if_index)],
-                              table_id=t6.table_id)
+        ip_222_6 = VppIpRoute(
+            self,
+            "10:222::",
+            64,
+            [
+                VppRoutePath(self.pg7.remote_ip6, vx_tun_r1.sw_if_index),
+                VppRoutePath(self.pg7.remote_ip6, vx_tun_r2.sw_if_index),
+            ],
+            table_id=t6.table_id,
+        )
         ip_222_6.add_vpp_config()
 
         l3o_222_6 = VppGbpSubnet(
         ip_222_6.add_vpp_config()
 
         l3o_222_6 = VppGbpSubnet(
-            self, rd1, "10:222::", 64,
+            self,
+            rd1,
+            "10:222::",
+            64,
             VppEnum.vl_api_gbp_subnet_type_t.GBP_API_SUBNET_L3_OUT,
             VppEnum.vl_api_gbp_subnet_type_t.GBP_API_SUBNET_L3_OUT,
-            sclass=4222)
+            sclass=4222,
+        )
         l3o_222_6.add_vpp_config()
 
         l3o_222_6.add_vpp_config()
 
-        p = [(Ether(src=eep1.mac, dst=str(self.router_mac)) /
-              Dot1Q(vlan=100) /
-              IPv6(src="10:220::1", dst="10:222::1") /
-              UDP(sport=1234, dport=1234) /
-              Raw(b'\xa5' * 100)),
-             (Ether(src=eep1.mac, dst=str(self.router_mac)) /
-              Dot1Q(vlan=100) /
-              IPv6(src="10:220::1", dst="10:222::1") /
-              UDP(sport=7777, dport=8881) /
-              Raw(b'\xa5' * 100))]
+        p = [
+            (
+                Ether(src=eep1.mac, dst=str(self.router_mac))
+                / Dot1Q(vlan=100)
+                / IPv6(src="10:220::1", dst="10:222::1")
+                / UDP(sport=1234, dport=1234)
+                / Raw(b"\xa5" * 100)
+            ),
+            (
+                Ether(src=eep1.mac, dst=str(self.router_mac))
+                / Dot1Q(vlan=100)
+                / IPv6(src="10:220::1", dst="10:222::1")
+                / UDP(sport=7777, dport=8881)
+                / Raw(b"\xa5" * 100)
+            ),
+        ]
 
         self.logger.info(self.vapi.cli("sh ip6 fib 10:222::1"))
         rxs = self.send_and_expect(self.pg0, p, self.pg7)
 
         self.logger.info(self.vapi.cli("sh ip6 fib 10:222::1"))
         rxs = self.send_and_expect(self.pg0, p, self.pg7)
@@ -5296,14 +6403,16 @@ class TestGBP(VppTestCase):
         # ping from host in remote to local external subnets
         # there's no contract for this, but the A bit is set.
         #
         # ping from host in remote to local external subnets
         # there's no contract for this, but the A bit is set.
         #
-        p = (Ether(src=self.pg7.remote_mac, dst=self.pg7.local_mac) /
-             IP(src=self.pg7.remote_ip4, dst=self.pg7.local_ip4) /
-             UDP(sport=1234, dport=48879) /
-             VXLAN(vni=445, gpid=4222, flags=0x88, gpflags='A') /
-             Ether(src=self.pg0.remote_mac, dst=str(self.router_mac)) /
-             IP(src="10.222.0.1", dst="10.220.0.1") /
-             UDP(sport=1234, dport=1234) /
-             Raw(b'\xa5' * 100))
+        p = (
+            Ether(src=self.pg7.remote_mac, dst=self.pg7.local_mac)
+            / IP(src=self.pg7.remote_ip4, dst=self.pg7.local_ip4)
+            / UDP(sport=1234, dport=48879)
+            / VXLAN(vni=445, gpid=4222, flags=0x88, gpflags="A")
+            / Ether(src=self.pg0.remote_mac, dst=str(self.router_mac))
+            / IP(src="10.222.0.1", dst="10.220.0.1")
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
 
         rxs = self.send_and_expect(self.pg7, p * 3, self.pg0)
         self.assertFalse(find_gbp_endpoint(self, ip="10.222.0.1"))
 
         rxs = self.send_and_expect(self.pg7, p * 3, self.pg0)
         self.assertFalse(find_gbp_endpoint(self, ip="10.222.0.1"))
@@ -5312,45 +6421,57 @@ class TestGBP(VppTestCase):
         # ping from host in remote to remote external subnets
         #   this is dropped by reflection check.
         #
         # ping from host in remote to remote external subnets
         #   this is dropped by reflection check.
         #
-        p = (Ether(src=self.pg7.remote_mac, dst=self.pg7.local_mac) /
-             IP(src=self.pg7.remote_ip4, dst=self.pg7.local_ip4) /
-             UDP(sport=1234, dport=48879) /
-             VXLAN(vni=445, gpid=4222, flags=0x88, gpflags='A') /
-             Ether(src=self.pg0.remote_mac, dst=str(self.router_mac)) /
-             IP(src="10.222.0.1", dst="10.222.0.2") /
-             UDP(sport=1234, dport=1234) /
-             Raw(b'\xa5' * 100))
+        p = (
+            Ether(src=self.pg7.remote_mac, dst=self.pg7.local_mac)
+            / IP(src=self.pg7.remote_ip4, dst=self.pg7.local_ip4)
+            / UDP(sport=1234, dport=48879)
+            / VXLAN(vni=445, gpid=4222, flags=0x88, gpflags="A")
+            / Ether(src=self.pg0.remote_mac, dst=str(self.router_mac))
+            / IP(src="10.222.0.1", dst="10.222.0.2")
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
 
         rxs = self.send_and_assert_no_replies(self.pg7, p * 3)
 
 
         rxs = self.send_and_assert_no_replies(self.pg7, p * 3)
 
-        p = (Ether(src=self.pg7.remote_mac, dst=self.pg7.local_mac) /
-             IP(src=self.pg7.remote_ip4, dst=self.pg7.local_ip4) /
-             UDP(sport=1234, dport=48879) /
-             VXLAN(vni=445, gpid=4222, flags=0x88, gpflags='A') /
-             Ether(src=self.pg0.remote_mac, dst=str(self.router_mac)) /
-             IPv6(src="10:222::1", dst="10:222::2") /
-             UDP(sport=1234, dport=1234) /
-             Raw(b'\xa5' * 100))
+        p = (
+            Ether(src=self.pg7.remote_mac, dst=self.pg7.local_mac)
+            / IP(src=self.pg7.remote_ip4, dst=self.pg7.local_ip4)
+            / UDP(sport=1234, dport=48879)
+            / VXLAN(vni=445, gpid=4222, flags=0x88, gpflags="A")
+            / Ether(src=self.pg0.remote_mac, dst=str(self.router_mac))
+            / IPv6(src="10:222::1", dst="10:222::2")
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
 
         rxs = self.send_and_assert_no_replies(self.pg7, p * 3)
 
         #
         # local EP
         #
 
         rxs = self.send_and_assert_no_replies(self.pg7, p * 3)
 
         #
         # local EP
         #
-        lep1 = VppGbpEndpoint(self, vlan_144,
-                              epg_220, None,
-                              "10.0.0.44", "11.0.0.44",
-                              "2001:10::44", "3001::44")
+        lep1 = VppGbpEndpoint(
+            self,
+            vlan_144,
+            epg_220,
+            None,
+            "10.0.0.44",
+            "11.0.0.44",
+            "2001:10::44",
+            "3001::44",
+        )
         lep1.add_vpp_config()
 
         #
         # local EP to local ip4 external subnet
         #
         lep1.add_vpp_config()
 
         #
         # local EP to local ip4 external subnet
         #
-        p = (Ether(src=lep1.mac, dst=str(self.router_mac)) /
-             Dot1Q(vlan=144) /
-             IP(src=lep1.ip4, dst="10.220.0.1") /
-             UDP(sport=1234, dport=1234) /
-             Raw(b'\xa5' * 100))
+        p = (
+            Ether(src=lep1.mac, dst=str(self.router_mac))
+            / Dot1Q(vlan=144)
+            / IP(src=lep1.ip4, dst="10.220.0.1")
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
 
         rxs = self.send_and_expect(self.pg0, p * 1, self.pg0)
 
 
         rxs = self.send_and_expect(self.pg0, p * 1, self.pg0)
 
@@ -5362,11 +6483,13 @@ class TestGBP(VppTestCase):
         #
         # local EP to local ip6 external subnet
         #
         #
         # local EP to local ip6 external subnet
         #
-        p = (Ether(src=lep1.mac, dst=str(self.router_mac)) /
-             Dot1Q(vlan=144) /
-             IPv6(src=lep1.ip6, dst="10:220::1") /
-             UDP(sport=1234, dport=1234) /
-             Raw(b'\xa5' * 100))
+        p = (
+            Ether(src=lep1.mac, dst=str(self.router_mac))
+            / Dot1Q(vlan=144)
+            / IPv6(src=lep1.ip6, dst="10:220::1")
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
 
         rxs = self.send_and_expect(self.pg0, p * 1, self.pg0)
 
 
         rxs = self.send_and_expect(self.pg0, p * 1, self.pg0)
 
@@ -5378,48 +6501,70 @@ class TestGBP(VppTestCase):
         #
         # ip4 and ip6 subnets that load-balance
         #
         #
         # ip4 and ip6 subnets that load-balance
         #
-        ip_20 = VppIpRoute(self, "10.20.0.0", 24,
-                           [VppRoutePath(eep1.ip4,
-                                         eep1.epg.bvi.sw_if_index),
-                            VppRoutePath(eep2.ip4,
-                                         eep2.epg.bvi.sw_if_index)],
-                           table_id=t4.table_id)
+        ip_20 = VppIpRoute(
+            self,
+            "10.20.0.0",
+            24,
+            [
+                VppRoutePath(eep1.ip4, eep1.epg.bvi.sw_if_index),
+                VppRoutePath(eep2.ip4, eep2.epg.bvi.sw_if_index),
+            ],
+            table_id=t4.table_id,
+        )
         ip_20.add_vpp_config()
 
         l3o_20 = VppGbpSubnet(
         ip_20.add_vpp_config()
 
         l3o_20 = VppGbpSubnet(
-            self, rd1, "10.20.0.0", 24,
+            self,
+            rd1,
+            "10.20.0.0",
+            24,
             VppEnum.vl_api_gbp_subnet_type_t.GBP_API_SUBNET_L3_OUT,
             VppEnum.vl_api_gbp_subnet_type_t.GBP_API_SUBNET_L3_OUT,
-            sclass=4220)
+            sclass=4220,
+        )
         l3o_20.add_vpp_config()
 
         l3o_20.add_vpp_config()
 
-        ip6_20 = VppIpRoute(self, "10:20::", 64,
-                            [VppRoutePath(eep1.ip6,
-                                          eep1.epg.bvi.sw_if_index),
-                             VppRoutePath(eep2.ip6,
-                                          eep2.epg.bvi.sw_if_index)],
-                            table_id=t6.table_id)
+        ip6_20 = VppIpRoute(
+            self,
+            "10:20::",
+            64,
+            [
+                VppRoutePath(eep1.ip6, eep1.epg.bvi.sw_if_index),
+                VppRoutePath(eep2.ip6, eep2.epg.bvi.sw_if_index),
+            ],
+            table_id=t6.table_id,
+        )
         ip6_20.add_vpp_config()
 
         l3o6_20 = VppGbpSubnet(
         ip6_20.add_vpp_config()
 
         l3o6_20 = VppGbpSubnet(
-            self, rd1, "10:20::", 64,
+            self,
+            rd1,
+            "10:20::",
+            64,
             VppEnum.vl_api_gbp_subnet_type_t.GBP_API_SUBNET_L3_OUT,
             VppEnum.vl_api_gbp_subnet_type_t.GBP_API_SUBNET_L3_OUT,
-            sclass=4220)
+            sclass=4220,
+        )
         l3o6_20.add_vpp_config()
 
         self.logger.info(self.vapi.cli("sh ip fib 10.20.0.1"))
         self.logger.info(self.vapi.cli("sh ip6 fib 10:20::1"))
 
         # two ip6 packets whose port are chosen so they load-balance
         l3o6_20.add_vpp_config()
 
         self.logger.info(self.vapi.cli("sh ip fib 10.20.0.1"))
         self.logger.info(self.vapi.cli("sh ip6 fib 10:20::1"))
 
         # two ip6 packets whose port are chosen so they load-balance
-        p = [(Ether(src=lep1.mac, dst=str(self.router_mac)) /
-              Dot1Q(vlan=144) /
-              IPv6(src=lep1.ip6, dst="10:20::1") /
-              UDP(sport=1234, dport=1234) /
-              Raw(b'\xa5' * 100)),
-             (Ether(src=lep1.mac, dst=str(self.router_mac)) /
-              Dot1Q(vlan=144) /
-              IPv6(src=lep1.ip6, dst="10:20::1") /
-              UDP(sport=124, dport=1230) /
-              Raw(b'\xa5' * 100))]
+        p = [
+            (
+                Ether(src=lep1.mac, dst=str(self.router_mac))
+                / Dot1Q(vlan=144)
+                / IPv6(src=lep1.ip6, dst="10:20::1")
+                / UDP(sport=1234, dport=1234)
+                / Raw(b"\xa5" * 100)
+            ),
+            (
+                Ether(src=lep1.mac, dst=str(self.router_mac))
+                / Dot1Q(vlan=144)
+                / IPv6(src=lep1.ip6, dst="10:20::1")
+                / UDP(sport=124, dport=1230)
+                / Raw(b"\xa5" * 100)
+            ),
+        ]
 
         rxs = self.send_and_expect(self.pg0, p, self.pg0, 2)
 
 
         rxs = self.send_and_expect(self.pg0, p, self.pg0, 2)
 
@@ -5427,16 +6572,22 @@ class TestGBP(VppTestCase):
         self.assertEqual(rxs[1][Dot1Q].vlan, 100)
 
         # two ip4 packets whose port are chosen so they load-balance
         self.assertEqual(rxs[1][Dot1Q].vlan, 100)
 
         # two ip4 packets whose port are chosen so they load-balance
-        p = [(Ether(src=lep1.mac, dst=str(self.router_mac)) /
-              Dot1Q(vlan=144) /
-              IP(src=lep1.ip4, dst="10.20.0.1") /
-              UDP(sport=1235, dport=1235) /
-              Raw(b'\xa5' * 100)),
-             (Ether(src=lep1.mac, dst=str(self.router_mac)) /
-              Dot1Q(vlan=144) /
-              IP(src=lep1.ip4, dst="10.20.0.1") /
-              UDP(sport=124, dport=1230) /
-              Raw(b'\xa5' * 100))]
+        p = [
+            (
+                Ether(src=lep1.mac, dst=str(self.router_mac))
+                / Dot1Q(vlan=144)
+                / IP(src=lep1.ip4, dst="10.20.0.1")
+                / UDP(sport=1235, dport=1235)
+                / Raw(b"\xa5" * 100)
+            ),
+            (
+                Ether(src=lep1.mac, dst=str(self.router_mac))
+                / Dot1Q(vlan=144)
+                / IP(src=lep1.ip4, dst="10.20.0.1")
+                / UDP(sport=124, dport=1230)
+                / Raw(b"\xa5" * 100)
+            ),
+        ]
 
         rxs = self.send_and_expect(self.pg0, p, self.pg0, 2)
 
 
         rxs = self.send_and_expect(self.pg0, p, self.pg0, 2)
 
@@ -5452,7 +6603,7 @@ class TestGBP(VppTestCase):
         self.vlan_100.set_vtr(L2_VTR_OP.L2_DISABLED)
 
     def test_gbp_anon_l3_out(self):
         self.vlan_100.set_vtr(L2_VTR_OP.L2_DISABLED)
 
     def test_gbp_anon_l3_out(self):
-        """ GBP Anonymous L3 Out """
+        """GBP Anonymous L3 Out"""
 
         ep_flags = VppEnum.vl_api_gbp_endpoint_flags_t
         self.vapi.cli("set logging class gbp level debug")
 
         ep_flags = VppEnum.vl_api_gbp_endpoint_flags_t
         self.vapi.cli("set logging class gbp level debug")
@@ -5497,23 +6648,34 @@ class TestGBP(VppTestCase):
         #
         # The Endpoint-groups in which the external endpoints exist
         #
         #
         # The Endpoint-groups in which the external endpoints exist
         #
-        epg_220 = VppGbpEndpointGroup(self, 220, 113, rd1, gbd1,
-                                      None, gbd1.bvi,
-                                      "10.0.0.128",
-                                      "2001:10::128",
-                                      VppGbpEndpointRetention(4))
+        epg_220 = VppGbpEndpointGroup(
+            self,
+            220,
+            113,
+            rd1,
+            gbd1,
+            None,
+            gbd1.bvi,
+            "10.0.0.128",
+            "2001:10::128",
+            VppGbpEndpointRetention(4),
+        )
         epg_220.add_vpp_config()
 
         # the BVIs have the subnet applied ...
         epg_220.add_vpp_config()
 
         # the BVIs have the subnet applied ...
-        ip4_addr = VppIpInterfaceAddress(self, gbd1.bvi,
-                                         "10.0.0.128", 24,
-                                         bind=bind_l0_ip4).add_vpp_config()
+        ip4_addr = VppIpInterfaceAddress(
+            self, gbd1.bvi, "10.0.0.128", 24, bind=bind_l0_ip4
+        ).add_vpp_config()
 
         # ... which is an Anonymous L3-out subnets
         l3o_1 = VppGbpSubnet(
 
         # ... which is an Anonymous L3-out subnets
         l3o_1 = VppGbpSubnet(
-            self, rd1, "10.0.0.0", 24,
+            self,
+            rd1,
+            "10.0.0.0",
+            24,
             VppEnum.vl_api_gbp_subnet_type_t.GBP_API_SUBNET_ANON_L3_OUT,
             VppEnum.vl_api_gbp_subnet_type_t.GBP_API_SUBNET_ANON_L3_OUT,
-            sclass=113)
+            sclass=113,
+        )
         l3o_1.add_vpp_config()
 
         #
         l3o_1.add_vpp_config()
 
         #
@@ -5535,22 +6697,31 @@ class TestGBP(VppTestCase):
         # an unicast vxlan-gbp for inter-RD traffic
         #
         vx_tun_l3 = VppGbpVxlanTunnel(
         # an unicast vxlan-gbp for inter-RD traffic
         #
         vx_tun_l3 = VppGbpVxlanTunnel(
-            self, 444, rd1.rd_id,
+            self,
+            444,
+            rd1.rd_id,
             VppEnum.vl_api_gbp_vxlan_tunnel_mode_t.GBP_VXLAN_TUNNEL_MODE_L3,
             VppEnum.vl_api_gbp_vxlan_tunnel_mode_t.GBP_VXLAN_TUNNEL_MODE_L3,
-            self.pg2.local_ip4)
+            self.pg2.local_ip4,
+        )
         vx_tun_l3.add_vpp_config()
 
         #
         # A remote external endpoint
         #
         vx_tun_l3.add_vpp_config()
 
         #
         # A remote external endpoint
         #
-        rep = VppGbpEndpoint(self, vx_tun_l3,
-                             epg_220, None,
-                             "10.0.0.201", "11.0.0.201",
-                             "2001:10::201", "3001::101",
-                             ep_flags.GBP_API_ENDPOINT_FLAG_REMOTE,
-                             self.pg7.local_ip4,
-                             self.pg7.remote_ip4,
-                             mac=None)
+        rep = VppGbpEndpoint(
+            self,
+            vx_tun_l3,
+            epg_220,
+            None,
+            "10.0.0.201",
+            "11.0.0.201",
+            "2001:10::201",
+            "3001::101",
+            ep_flags.GBP_API_ENDPOINT_FLAG_REMOTE,
+            self.pg7.local_ip4,
+            self.pg7.remote_ip4,
+            mac=None,
+        )
         rep.add_vpp_config()
 
         #
         rep.add_vpp_config()
 
         #
@@ -5559,48 +6730,56 @@ class TestGBP(VppTestCase):
         #   - APR request flooded over the other vlan subif
         #   - ARP reply from BVI
         #
         #   - APR request flooded over the other vlan subif
         #   - ARP reply from BVI
         #
-        p_arp = (Ether(src=self.vlan_100.remote_mac,
-                       dst="ff:ff:ff:ff:ff:ff") /
-                 Dot1Q(vlan=100) /
-                 ARP(op="who-has",
-                     psrc="10.0.0.100",
-                     pdst="10.0.0.128",
-                     hwsrc=self.vlan_100.remote_mac,
-                     hwdst="ff:ff:ff:ff:ff:ff"))
+        p_arp = (
+            Ether(src=self.vlan_100.remote_mac, dst="ff:ff:ff:ff:ff:ff")
+            / Dot1Q(vlan=100)
+            / ARP(
+                op="who-has",
+                psrc="10.0.0.100",
+                pdst="10.0.0.128",
+                hwsrc=self.vlan_100.remote_mac,
+                hwdst="ff:ff:ff:ff:ff:ff",
+            )
+        )
         rxs = self.send_and_expect(self.pg0, p_arp * 1, self.pg0, n_rx=2)
 
         rxs = self.send_and_expect(self.pg0, p_arp * 1, self.pg0, n_rx=2)
 
-        p_arp = (Ether(src=self.vlan_101.remote_mac,
-                       dst="ff:ff:ff:ff:ff:ff") /
-                 Dot1Q(vlan=101) /
-                 ARP(op="who-has",
-                     psrc='10.0.0.101',
-                     pdst="10.0.0.128",
-                     hwsrc=self.vlan_101.remote_mac,
-                     hwdst="ff:ff:ff:ff:ff:ff"))
+        p_arp = (
+            Ether(src=self.vlan_101.remote_mac, dst="ff:ff:ff:ff:ff:ff")
+            / Dot1Q(vlan=101)
+            / ARP(
+                op="who-has",
+                psrc="10.0.0.101",
+                pdst="10.0.0.128",
+                hwsrc=self.vlan_101.remote_mac,
+                hwdst="ff:ff:ff:ff:ff:ff",
+            )
+        )
         rxs = self.send_and_expect(self.pg0, p_arp * 1, self.pg0, n_rx=2)
 
         #
         # remote to external
         #
         rxs = self.send_and_expect(self.pg0, p_arp * 1, self.pg0, n_rx=2)
 
         #
         # remote to external
         #
-        p = (Ether(src=self.pg7.remote_mac,
-                   dst=self.pg7.local_mac) /
-             IP(src=self.pg7.remote_ip4,
-                dst=self.pg7.local_ip4) /
-             UDP(sport=1234, dport=48879) /
-             VXLAN(vni=vx_tun_l3.vni, gpid=epg_220.sclass, flags=0x88) /
-             Ether(src=self.pg0.remote_mac, dst=str(self.router_mac)) /
-             IP(src=str(rep.ip4), dst="10.0.0.100") /
-             UDP(sport=1234, dport=1234) /
-             Raw(b'\xa5' * 100))
+        p = (
+            Ether(src=self.pg7.remote_mac, dst=self.pg7.local_mac)
+            / IP(src=self.pg7.remote_ip4, dst=self.pg7.local_ip4)
+            / UDP(sport=1234, dport=48879)
+            / VXLAN(vni=vx_tun_l3.vni, gpid=epg_220.sclass, flags=0x88)
+            / Ether(src=self.pg0.remote_mac, dst=str(self.router_mac))
+            / IP(src=str(rep.ip4), dst="10.0.0.100")
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
         rxs = self.send_and_expect(self.pg7, p * 1, self.pg0)
 
         #
         # local EP pings router
         #
         rxs = self.send_and_expect(self.pg7, p * 1, self.pg0)
 
         #
         # local EP pings router
         #
-        p = (Ether(src=self.vlan_100.remote_mac, dst=str(self.router_mac)) /
-             Dot1Q(vlan=100) /
-             IP(src="10.0.0.100", dst="10.0.0.128") /
-             ICMP(type='echo-request'))
+        p = (
+            Ether(src=self.vlan_100.remote_mac, dst=str(self.router_mac))
+            / Dot1Q(vlan=100)
+            / IP(src="10.0.0.100", dst="10.0.0.128")
+            / ICMP(type="echo-request")
+        )
         rxs = self.send_and_expect(self.pg0, p * 1, self.pg0)
 
         for rx in rxs:
         rxs = self.send_and_expect(self.pg0, p * 1, self.pg0)
 
         for rx in rxs:
@@ -5611,11 +6790,12 @@ class TestGBP(VppTestCase):
         #
         # local EP pings other local EP
         #
         #
         # local EP pings other local EP
         #
-        p = (Ether(src=self.vlan_100.remote_mac,
-                   dst=self.vlan_101.remote_mac) /
-             Dot1Q(vlan=100) /
-             IP(src="10.0.0.100", dst="10.0.0.101") /
-             ICMP(type='echo-request'))
+        p = (
+            Ether(src=self.vlan_100.remote_mac, dst=self.vlan_101.remote_mac)
+            / Dot1Q(vlan=100)
+            / IP(src="10.0.0.100", dst="10.0.0.101")
+            / ICMP(type="echo-request")
+        )
         rxs = self.send_and_expect(self.pg0, p * 1, self.pg0)
 
         for rx in rxs:
         rxs = self.send_and_expect(self.pg0, p * 1, self.pg0)
 
         for rx in rxs:
@@ -5626,43 +6806,59 @@ class TestGBP(VppTestCase):
         #
         # A subnet reachable through an external router on vlan 100
         #
         #
         # A subnet reachable through an external router on vlan 100
         #
-        ip_220 = VppIpRoute(self, "10.220.0.0", 24,
-                            [VppRoutePath("10.0.0.100",
-                                          epg_220.bvi.sw_if_index)],
-                            table_id=t4.table_id)
+        ip_220 = VppIpRoute(
+            self,
+            "10.220.0.0",
+            24,
+            [VppRoutePath("10.0.0.100", epg_220.bvi.sw_if_index)],
+            table_id=t4.table_id,
+        )
         ip_220.add_vpp_config()
 
         l3o_220 = VppGbpSubnet(
         ip_220.add_vpp_config()
 
         l3o_220 = VppGbpSubnet(
-            self, rd1, "10.220.0.0", 24,
+            self,
+            rd1,
+            "10.220.0.0",
+            24,
             # note: this a "regular" L3 out subnet (not connected)
             VppEnum.vl_api_gbp_subnet_type_t.GBP_API_SUBNET_L3_OUT,
             # note: this a "regular" L3 out subnet (not connected)
             VppEnum.vl_api_gbp_subnet_type_t.GBP_API_SUBNET_L3_OUT,
-            sclass=4220)
+            sclass=4220,
+        )
         l3o_220.add_vpp_config()
 
         #
         # A subnet reachable through an external router on vlan 101
         #
         l3o_220.add_vpp_config()
 
         #
         # A subnet reachable through an external router on vlan 101
         #
-        ip_221 = VppIpRoute(self, "10.221.0.0", 24,
-                            [VppRoutePath("10.0.0.101",
-                                          epg_220.bvi.sw_if_index)],
-                            table_id=t4.table_id)
+        ip_221 = VppIpRoute(
+            self,
+            "10.221.0.0",
+            24,
+            [VppRoutePath("10.0.0.101", epg_220.bvi.sw_if_index)],
+            table_id=t4.table_id,
+        )
         ip_221.add_vpp_config()
 
         l3o_221 = VppGbpSubnet(
         ip_221.add_vpp_config()
 
         l3o_221 = VppGbpSubnet(
-            self, rd1, "10.221.0.0", 24,
+            self,
+            rd1,
+            "10.221.0.0",
+            24,
             # note: this a "regular" L3 out subnet (not connected)
             VppEnum.vl_api_gbp_subnet_type_t.GBP_API_SUBNET_L3_OUT,
             # note: this a "regular" L3 out subnet (not connected)
             VppEnum.vl_api_gbp_subnet_type_t.GBP_API_SUBNET_L3_OUT,
-            sclass=4221)
+            sclass=4221,
+        )
         l3o_221.add_vpp_config()
 
         #
         # ping between hosts in remote subnets
         #  dropped without a contract
         #
         l3o_221.add_vpp_config()
 
         #
         # ping between hosts in remote subnets
         #  dropped without a contract
         #
-        p = (Ether(src=self.vlan_100.remote_mac, dst=str(self.router_mac)) /
-             Dot1Q(vlan=100) /
-             IP(src="10.220.0.1", dst="10.221.0.1") /
-             ICMP(type='echo-request'))
+        p = (
+            Ether(src=self.vlan_100.remote_mac, dst=str(self.router_mac))
+            / Dot1Q(vlan=100)
+            / IP(src="10.220.0.1", dst="10.221.0.1")
+            / ICMP(type="echo-request")
+        )
 
         rxs = self.send_and_assert_no_replies(self.pg0, p * 1)
 
 
         rxs = self.send_and_assert_no_replies(self.pg0, p * 1)
 
@@ -5670,60 +6866,93 @@ class TestGBP(VppTestCase):
         # contract for the external nets to communicate
         #
         rule4 = AclRule(is_permit=1, proto=17)
         # contract for the external nets to communicate
         #
         rule4 = AclRule(is_permit=1, proto=17)
-        rule6 = AclRule(src_prefix=IPv6Network((0, 0)),
-                        dst_prefix=IPv6Network((0, 0)), is_permit=1, proto=17)
+        rule6 = AclRule(
+            src_prefix=IPv6Network((0, 0)),
+            dst_prefix=IPv6Network((0, 0)),
+            is_permit=1,
+            proto=17,
+        )
         acl = VppAcl(self, rules=[rule4, rule6])
         acl.add_vpp_config()
 
         c1 = VppGbpContract(
         acl = VppAcl(self, rules=[rule4, rule6])
         acl.add_vpp_config()
 
         c1 = VppGbpContract(
-            self, 55, 4220, 4221, acl.acl_index,
-            [VppGbpContractRule(
-                VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
-                VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
-                []),
+            self,
+            55,
+            4220,
+            4221,
+            acl.acl_index,
+            [
+                VppGbpContractRule(
+                    VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
+                    VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
+                    [],
+                ),
                 VppGbpContractRule(
                     VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
                     VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
                 VppGbpContractRule(
                     VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
                     VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
-                    [])],
-            [ETH_P_IP, ETH_P_IPV6])
+                    [],
+                ),
+            ],
+            [ETH_P_IP, ETH_P_IPV6],
+        )
         c1.add_vpp_config()
 
         #
         # Contracts allowing ext-net 200 to talk with external EPs
         #
         c2 = VppGbpContract(
         c1.add_vpp_config()
 
         #
         # Contracts allowing ext-net 200 to talk with external EPs
         #
         c2 = VppGbpContract(
-            self, 55, 4220, 113, acl.acl_index,
-            [VppGbpContractRule(
-                VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
-                VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
-                []),
+            self,
+            55,
+            4220,
+            113,
+            acl.acl_index,
+            [
+                VppGbpContractRule(
+                    VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
+                    VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
+                    [],
+                ),
                 VppGbpContractRule(
                     VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
                     VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
                 VppGbpContractRule(
                     VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
                     VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
-                    [])],
-            [ETH_P_IP, ETH_P_IPV6])
+                    [],
+                ),
+            ],
+            [ETH_P_IP, ETH_P_IPV6],
+        )
         c2.add_vpp_config()
         c3 = VppGbpContract(
         c2.add_vpp_config()
         c3 = VppGbpContract(
-            self, 55, 113, 4220, acl.acl_index,
-            [VppGbpContractRule(
-                VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
-                VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
-                []),
+            self,
+            55,
+            113,
+            4220,
+            acl.acl_index,
+            [
+                VppGbpContractRule(
+                    VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
+                    VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
+                    [],
+                ),
                 VppGbpContractRule(
                     VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
                     VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
                 VppGbpContractRule(
                     VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
                     VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
-                    [])],
-            [ETH_P_IP, ETH_P_IPV6])
+                    [],
+                ),
+            ],
+            [ETH_P_IP, ETH_P_IPV6],
+        )
         c3.add_vpp_config()
 
         #
         # ping between hosts in remote subnets
         #
         c3.add_vpp_config()
 
         #
         # ping between hosts in remote subnets
         #
-        p = (Ether(src=self.vlan_100.remote_mac, dst=str(self.router_mac)) /
-             Dot1Q(vlan=100) /
-             IP(src="10.220.0.1", dst="10.221.0.1") /
-             UDP(sport=1234, dport=1234) /
-             Raw(b'\xa5' * 100))
+        p = (
+            Ether(src=self.vlan_100.remote_mac, dst=str(self.router_mac))
+            / Dot1Q(vlan=100)
+            / IP(src="10.220.0.1", dst="10.221.0.1")
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
 
         rxs = self.send_and_expect(self.pg0, p * 1, self.pg0)
 
 
         rxs = self.send_and_expect(self.pg0, p * 1, self.pg0)
 
@@ -5739,27 +6968,29 @@ class TestGBP(VppTestCase):
         #
         # from remote external EP to local external EP
         #
         #
         # from remote external EP to local external EP
         #
-        p = (Ether(src=self.pg7.remote_mac,
-                   dst=self.pg7.local_mac) /
-             IP(src=self.pg7.remote_ip4,
-                dst=self.pg7.local_ip4) /
-             UDP(sport=1234, dport=48879) /
-             VXLAN(vni=444, gpid=113, flags=0x88) /
-             Ether(src=self.pg0.remote_mac, dst=str(self.router_mac)) /
-             IP(src=rep.ip4, dst="10.220.0.1") /
-             UDP(sport=1234, dport=1234) /
-             Raw(b'\xa5' * 100))
+        p = (
+            Ether(src=self.pg7.remote_mac, dst=self.pg7.local_mac)
+            / IP(src=self.pg7.remote_ip4, dst=self.pg7.local_ip4)
+            / UDP(sport=1234, dport=48879)
+            / VXLAN(vni=444, gpid=113, flags=0x88)
+            / Ether(src=self.pg0.remote_mac, dst=str(self.router_mac))
+            / IP(src=rep.ip4, dst="10.220.0.1")
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
 
         rxs = self.send_and_expect(self.pg7, p * 1, self.pg0)
 
         #
         # ping from an external host to the remote external EP
         #
 
         rxs = self.send_and_expect(self.pg7, p * 1, self.pg0)
 
         #
         # ping from an external host to the remote external EP
         #
-        p = (Ether(src=self.vlan_100.remote_mac, dst=str(self.router_mac)) /
-             Dot1Q(vlan=100) /
-             IP(src="10.220.0.1", dst=rep.ip4) /
-             UDP(sport=1234, dport=1234) /
-             Raw(b'\xa5' * 100))
+        p = (
+            Ether(src=self.vlan_100.remote_mac, dst=str(self.router_mac))
+            / Dot1Q(vlan=100)
+            / IP(src="10.220.0.1", dst=rep.ip4)
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
 
         rxs = self.send_and_expect(self.pg0, p * 1, self.pg7)
 
 
         rxs = self.send_and_expect(self.pg0, p * 1, self.pg7)
 
@@ -5789,10 +7020,14 @@ class TestGBP(VppTestCase):
         # first the VXLAN-GBP tunnel over which it is reached
         #
         vx_tun_r = VppVxlanGbpTunnel(
         # first the VXLAN-GBP tunnel over which it is reached
         #
         vx_tun_r = VppVxlanGbpTunnel(
-            self, self.pg7.local_ip4,
-            self.pg7.remote_ip4, 445,
-            mode=(VppEnum.vl_api_vxlan_gbp_api_tunnel_mode_t.
-                  VXLAN_GBP_API_TUNNEL_MODE_L3))
+            self,
+            self.pg7.local_ip4,
+            self.pg7.remote_ip4,
+            445,
+            mode=(
+                VppEnum.vl_api_vxlan_gbp_api_tunnel_mode_t.VXLAN_GBP_API_TUNNEL_MODE_L3
+            ),
+        )
         vx_tun_r.add_vpp_config()
         VppIpInterfaceBind(self, vx_tun_r, t4).add_vpp_config()
 
         vx_tun_r.add_vpp_config()
         VppIpInterfaceBind(self, vx_tun_r, t4).add_vpp_config()
 
@@ -5801,37 +7036,45 @@ class TestGBP(VppTestCase):
         #
         # then the special adj to resolve through on that tunnel
         #
         #
         # then the special adj to resolve through on that tunnel
         #
-        n1 = VppNeighbor(self,
-                         vx_tun_r.sw_if_index,
-                         "00:0c:0c:0c:0c:0c",
-                         self.pg7.remote_ip4)
+        n1 = VppNeighbor(
+            self, vx_tun_r.sw_if_index, "00:0c:0c:0c:0c:0c", self.pg7.remote_ip4
+        )
         n1.add_vpp_config()
 
         #
         # the route via the adj above
         #
         n1.add_vpp_config()
 
         #
         # the route via the adj above
         #
-        ip_222 = VppIpRoute(self, "10.222.0.0", 24,
-                            [VppRoutePath(self.pg7.remote_ip4,
-                                          vx_tun_r.sw_if_index)],
-                            table_id=t4.table_id)
+        ip_222 = VppIpRoute(
+            self,
+            "10.222.0.0",
+            24,
+            [VppRoutePath(self.pg7.remote_ip4, vx_tun_r.sw_if_index)],
+            table_id=t4.table_id,
+        )
         ip_222.add_vpp_config()
 
         l3o_222 = VppGbpSubnet(
         ip_222.add_vpp_config()
 
         l3o_222 = VppGbpSubnet(
-            self, rd1, "10.222.0.0", 24,
+            self,
+            rd1,
+            "10.222.0.0",
+            24,
             # note: this a "regular" l3out subnet (not connected)
             VppEnum.vl_api_gbp_subnet_type_t.GBP_API_SUBNET_L3_OUT,
             # note: this a "regular" l3out subnet (not connected)
             VppEnum.vl_api_gbp_subnet_type_t.GBP_API_SUBNET_L3_OUT,
-            sclass=4222)
+            sclass=4222,
+        )
         l3o_222.add_vpp_config()
 
         #
         # ping between hosts in local and remote external subnets
         #  dropped without a contract
         #
         l3o_222.add_vpp_config()
 
         #
         # ping between hosts in local and remote external subnets
         #  dropped without a contract
         #
-        p = (Ether(src=self.vlan_100.remote_mac, dst=str(self.router_mac)) /
-             Dot1Q(vlan=100) /
-             IP(src="10.220.0.1", dst="10.222.0.1") /
-             UDP(sport=1234, dport=1234) /
-             Raw(b'\xa5' * 100))
+        p = (
+            Ether(src=self.vlan_100.remote_mac, dst=str(self.router_mac))
+            / Dot1Q(vlan=100)
+            / IP(src="10.220.0.1", dst="10.222.0.1")
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
 
         rxs = self.send_and_assert_no_replies(self.pg0, p * 1)
 
 
         rxs = self.send_and_assert_no_replies(self.pg0, p * 1)
 
@@ -5839,26 +7082,37 @@ class TestGBP(VppTestCase):
         # Add contracts ext-nets for 220 -> 222
         #
         c4 = VppGbpContract(
         # Add contracts ext-nets for 220 -> 222
         #
         c4 = VppGbpContract(
-            self, 55, 4220, 4222, acl.acl_index,
-            [VppGbpContractRule(
-                VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
-                VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
-                []),
+            self,
+            55,
+            4220,
+            4222,
+            acl.acl_index,
+            [
                 VppGbpContractRule(
                     VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
                     VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
                 VppGbpContractRule(
                     VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
                     VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
-                    [])],
-            [ETH_P_IP, ETH_P_IPV6])
+                    [],
+                ),
+                VppGbpContractRule(
+                    VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
+                    VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
+                    [],
+                ),
+            ],
+            [ETH_P_IP, ETH_P_IPV6],
+        )
         c4.add_vpp_config()
 
         #
         # ping from host in local to remote external subnets
         #
         c4.add_vpp_config()
 
         #
         # ping from host in local to remote external subnets
         #
-        p = (Ether(src=self.vlan_100.remote_mac, dst=str(self.router_mac)) /
-             Dot1Q(vlan=100) /
-             IP(src="10.220.0.1", dst="10.222.0.1") /
-             UDP(sport=1234, dport=1234) /
-             Raw(b'\xa5' * 100))
+        p = (
+            Ether(src=self.vlan_100.remote_mac, dst=str(self.router_mac))
+            / Dot1Q(vlan=100)
+            / IP(src="10.220.0.1", dst="10.222.0.1")
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
 
         rxs = self.send_and_expect(self.pg0, p * 3, self.pg7)
 
 
         rxs = self.send_and_expect(self.pg0, p * 3, self.pg7)
 
@@ -5885,14 +7139,16 @@ class TestGBP(VppTestCase):
         # ping from host in remote to local external subnets
         # there's no contract for this, but the A bit is set.
         #
         # ping from host in remote to local external subnets
         # there's no contract for this, but the A bit is set.
         #
-        p = (Ether(src=self.pg7.remote_mac, dst=self.pg7.local_mac) /
-             IP(src=self.pg7.remote_ip4, dst=self.pg7.local_ip4) /
-             UDP(sport=1234, dport=48879) /
-             VXLAN(vni=445, gpid=4222, flags=0x88, gpflags='A') /
-             Ether(src=self.pg0.remote_mac, dst=str(self.router_mac)) /
-             IP(src="10.222.0.1", dst="10.220.0.1") /
-             UDP(sport=1234, dport=1234) /
-             Raw(b'\xa5' * 100))
+        p = (
+            Ether(src=self.pg7.remote_mac, dst=self.pg7.local_mac)
+            / IP(src=self.pg7.remote_ip4, dst=self.pg7.local_ip4)
+            / UDP(sport=1234, dport=48879)
+            / VXLAN(vni=445, gpid=4222, flags=0x88, gpflags="A")
+            / Ether(src=self.pg0.remote_mac, dst=str(self.router_mac))
+            / IP(src="10.222.0.1", dst="10.220.0.1")
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
 
         rxs = self.send_and_expect(self.pg7, p * 3, self.pg0)
         self.assertFalse(find_gbp_endpoint(self, ip="10.222.0.1"))
 
         rxs = self.send_and_expect(self.pg7, p * 3, self.pg0)
         self.assertFalse(find_gbp_endpoint(self, ip="10.222.0.1"))
@@ -5901,14 +7157,16 @@ class TestGBP(VppTestCase):
         # ping from host in remote to remote external subnets
         #   this is dropped by reflection check.
         #
         # ping from host in remote to remote external subnets
         #   this is dropped by reflection check.
         #
-        p = (Ether(src=self.pg7.remote_mac, dst=self.pg7.local_mac) /
-             IP(src=self.pg7.remote_ip4, dst=self.pg7.local_ip4) /
-             UDP(sport=1234, dport=48879) /
-             VXLAN(vni=445, gpid=4222, flags=0x88, gpflags='A') /
-             Ether(src=self.pg0.remote_mac, dst=str(self.router_mac)) /
-             IP(src="10.222.0.1", dst="10.222.0.2") /
-             UDP(sport=1234, dport=1234) /
-             Raw(b'\xa5' * 100))
+        p = (
+            Ether(src=self.pg7.remote_mac, dst=self.pg7.local_mac)
+            / IP(src=self.pg7.remote_ip4, dst=self.pg7.local_ip4)
+            / UDP(sport=1234, dport=48879)
+            / VXLAN(vni=445, gpid=4222, flags=0x88, gpflags="A")
+            / Ether(src=self.pg0.remote_mac, dst=str(self.router_mac))
+            / IP(src="10.222.0.1", dst="10.222.0.2")
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
 
         rxs = self.send_and_assert_no_replies(self.pg7, p * 3)
 
 
         rxs = self.send_and_assert_no_replies(self.pg7, p * 3)
 
@@ -5922,5 +7180,5 @@ class TestGBP(VppTestCase):
         self.wait_for_ep_timeout(sw_if_index=rep.itf.sw_if_index, ip=rep.ip4)
 
 
         self.wait_for_ep_timeout(sw_if_index=rep.itf.sw_if_index, ip=rep.ip4)
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index f332ace..1d64937 100644 (file)
@@ -16,37 +16,43 @@ from vpp_ip import INVALID_INDEX
 
 
 class TestVxlanGbp(VppTestCase):
 
 
 class TestVxlanGbp(VppTestCase):
-    """ VXLAN GBP Test Case """
+    """VXLAN GBP Test Case"""
 
     @property
     def frame_request(self):
 
     @property
     def frame_request(self):
-        """ Ethernet frame modeling a generic request """
-        return (Ether(src='00:00:00:00:00:01', dst='00:00:00:00:00:02') /
-                IP(src='1.2.3.4', dst='4.3.2.1') /
-                UDP(sport=10000, dport=20000) /
-                Raw(b'\xa5' * 100))
+        """Ethernet frame modeling a generic request"""
+        return (
+            Ether(src="00:00:00:00:00:01", dst="00:00:00:00:00:02")
+            / IP(src="1.2.3.4", dst="4.3.2.1")
+            / UDP(sport=10000, dport=20000)
+            / Raw(b"\xa5" * 100)
+        )
 
     @property
     def frame_reply(self):
 
     @property
     def frame_reply(self):
-        """ Ethernet frame modeling a generic reply """
-        return (Ether(src='00:00:00:00:00:02', dst='00:00:00:00:00:01') /
-                IP(src='4.3.2.1', dst='1.2.3.4') /
-                UDP(sport=20000, dport=10000) /
-                Raw(b'\xa5' * 100))
+        """Ethernet frame modeling a generic reply"""
+        return (
+            Ether(src="00:00:00:00:00:02", dst="00:00:00:00:00:01")
+            / IP(src="4.3.2.1", dst="1.2.3.4")
+            / UDP(sport=20000, dport=10000)
+            / Raw(b"\xa5" * 100)
+        )
 
     def encapsulate(self, pkt, vni):
         """
         Encapsulate the original payload frame by adding VXLAN GBP header with
         its UDP, IP and Ethernet fields
         """
 
     def encapsulate(self, pkt, vni):
         """
         Encapsulate the original payload frame by adding VXLAN GBP header with
         its UDP, IP and Ethernet fields
         """
-        return (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-                IP(src=self.pg0.remote_ip4, dst=self.pg0.local_ip4) /
-                UDP(sport=self.dport, dport=self.dport, chksum=0) /
-                VXLAN(vni=vni, flags=self.flags, gpflags=self.gpflags,
-                gpid=self.sclass) / pkt)
+        return (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg0.local_ip4)
+            / UDP(sport=self.dport, dport=self.dport, chksum=0)
+            / VXLAN(vni=vni, flags=self.flags, gpflags=self.gpflags, gpid=self.sclass)
+            / pkt
+        )
 
     def ip_range(self, start, end):
 
     def ip_range(self, start, end):
-        """ range of remote ip's """
+        """range of remote ip's"""
         return ip4_range(self.pg0.remote_ip4, start, end)
 
     def decapsulate(self, pkt):
         return ip4_range(self.pg0.remote_ip4, start, end)
 
     def decapsulate(self, pkt):
@@ -54,7 +60,7 @@ class TestVxlanGbp(VppTestCase):
         Decapsulate the original payload frame by removing VXLAN header
         """
         # check if is set G and I flag
         Decapsulate the original payload frame by removing VXLAN header
         """
         # check if is set G and I flag
-        self.assertEqual(pkt[VXLAN].flags, int('0x88', 16))
+        self.assertEqual(pkt[VXLAN].flags, int("0x88", 16))
         return pkt[VXLAN].payload
 
     # Method for checking VXLAN GBP encapsulation.
         return pkt[VXLAN].payload
 
     # Method for checking VXLAN GBP encapsulation.
@@ -94,28 +100,28 @@ class TestVxlanGbp(VppTestCase):
         ip_range_start = 10
         ip_range_end = ip_range_start + n_ucast_tunnels
         next_hop_address = cls.pg0.remote_ip4
         ip_range_start = 10
         ip_range_end = ip_range_start + n_ucast_tunnels
         next_hop_address = cls.pg0.remote_ip4
-        for dest_ip4 in ip4_range(cls.pg0.remote_ip4,
-                                  ip_range_start,
-                                  ip_range_end):
+        for dest_ip4 in ip4_range(cls.pg0.remote_ip4, ip_range_start, ip_range_end):
             # add host route so dest_ip4 will not be resolved
             # add host route so dest_ip4 will not be resolved
-            rip = VppIpRoute(cls, dest_ip4, 32,
-                             [VppRoutePath(next_hop_address,
-                                           INVALID_INDEX)],
-                             register=False)
+            rip = VppIpRoute(
+                cls,
+                dest_ip4,
+                32,
+                [VppRoutePath(next_hop_address, INVALID_INDEX)],
+                register=False,
+            )
             rip.add_vpp_config()
             r = cls.vapi.vxlan_gbp_tunnel_add_del(
                 tunnel={
             rip.add_vpp_config()
             r = cls.vapi.vxlan_gbp_tunnel_add_del(
                 tunnel={
-                    'src': cls.pg0.local_ip4,
-                    'dst': dest_ip4,
-                    'vni': vni,
-                    'instance': INVALID_INDEX,
-                    'mcast_sw_if_index': INVALID_INDEX,
-                    'mode': 1,
+                    "src": cls.pg0.local_ip4,
+                    "dst": dest_ip4,
+                    "vni": vni,
+                    "instance": INVALID_INDEX,
+                    "mcast_sw_if_index": INVALID_INDEX,
+                    "mode": 1,
                 },
                 },
-                is_add=1
+                is_add=1,
             )
             )
-            cls.vapi.sw_interface_set_l2_bridge(rx_sw_if_index=r.sw_if_index,
-                                                bd_id=vni)
+            cls.vapi.sw_interface_set_l2_bridge(rx_sw_if_index=r.sw_if_index, bd_id=vni)
 
     # Class method to start the VXLAN GBP test case.
     #  Overrides setUpClass method in VppTestCase class.
 
     # Class method to start the VXLAN GBP test case.
     #  Overrides setUpClass method in VppTestCase class.
@@ -146,33 +152,33 @@ class TestVxlanGbp(VppTestCase):
             # Create VXLAN GBP VTEP on VPP pg0, and put vxlan_gbp_tunnel0 and
             # pg1 into BD.
             cls.single_tunnel_bd = 1
             # Create VXLAN GBP VTEP on VPP pg0, and put vxlan_gbp_tunnel0 and
             # pg1 into BD.
             cls.single_tunnel_bd = 1
-            cls.single_tunnel_vni = 0xabcde
+            cls.single_tunnel_vni = 0xABCDE
             r = cls.vapi.vxlan_gbp_tunnel_add_del(
                 tunnel={
             r = cls.vapi.vxlan_gbp_tunnel_add_del(
                 tunnel={
-                    'src': cls.pg0.local_ip4,
-                    'dst': cls.pg0.remote_ip4,
-                    'vni': cls.single_tunnel_vni,
-                    'instance': INVALID_INDEX,
-                    'mcast_sw_if_index': INVALID_INDEX,
-                    'mode': 1,
+                    "src": cls.pg0.local_ip4,
+                    "dst": cls.pg0.remote_ip4,
+                    "vni": cls.single_tunnel_vni,
+                    "instance": INVALID_INDEX,
+                    "mcast_sw_if_index": INVALID_INDEX,
+                    "mode": 1,
                 },
                 },
-                is_add=1
+                is_add=1,
+            )
+            cls.vapi.sw_interface_set_l2_bridge(
+                rx_sw_if_index=r.sw_if_index, bd_id=cls.single_tunnel_bd
             )
             )
-            cls.vapi.sw_interface_set_l2_bridge(rx_sw_if_index=r.sw_if_index,
-                                                bd_id=cls.single_tunnel_bd)
             cls.vapi.sw_interface_set_l2_bridge(
             cls.vapi.sw_interface_set_l2_bridge(
-                rx_sw_if_index=cls.pg1.sw_if_index,
-                bd_id=cls.single_tunnel_bd)
+                rx_sw_if_index=cls.pg1.sw_if_index, bd_id=cls.single_tunnel_bd
+            )
 
             # Setup vni 2 to test multicast flooding
             cls.n_ucast_tunnels = 2
             # Setup vni 3 to test unicast flooding
             cls.ucast_flood_bd = 3
 
             # Setup vni 2 to test multicast flooding
             cls.n_ucast_tunnels = 2
             # Setup vni 3 to test unicast flooding
             cls.ucast_flood_bd = 3
-            cls.create_vxlan_gbp_flood_test_bd(cls.ucast_flood_bd,
-                                               cls.n_ucast_tunnels)
+            cls.create_vxlan_gbp_flood_test_bd(cls.ucast_flood_bd, cls.n_ucast_tunnels)
             cls.vapi.sw_interface_set_l2_bridge(
             cls.vapi.sw_interface_set_l2_bridge(
-                rx_sw_if_index=cls.pg3.sw_if_index,
-                bd_id=cls.ucast_flood_bd)
+                rx_sw_if_index=cls.pg3.sw_if_index, bd_id=cls.ucast_flood_bd
+            )
         except Exception:
             super(TestVxlanGbp, cls).tearDownClass()
             raise
         except Exception:
             super(TestVxlanGbp, cls).tearDownClass()
             raise
@@ -182,7 +188,7 @@ class TestVxlanGbp(VppTestCase):
         super(TestVxlanGbp, cls).tearDownClass()
 
     def assert_eq_pkts(self, pkt1, pkt2):
         super(TestVxlanGbp, cls).tearDownClass()
 
     def assert_eq_pkts(self, pkt1, pkt2):
-        """ Verify the Ether, IP, UDP, payload are equal in both
+        """Verify the Ether, IP, UDP, payload are equal in both
         packets
         """
         self.assertEqual(pkt1[Ether].src, pkt2[Ether].src)
         packets
         """
         self.assertEqual(pkt1[Ether].src, pkt2[Ether].src)
@@ -194,14 +200,17 @@ class TestVxlanGbp(VppTestCase):
         self.assertEqual(pkt1[Raw], pkt2[Raw])
 
     def test_decap(self):
         self.assertEqual(pkt1[Raw], pkt2[Raw])
 
     def test_decap(self):
-        """ Decapsulation test
+        """Decapsulation test
         Send encapsulated frames from pg0
         Verify receipt of decapsulated frames on pg1
         """
         Send encapsulated frames from pg0
         Verify receipt of decapsulated frames on pg1
         """
-        encapsulated_pkt = self.encapsulate(self.frame_request,
-                                            self.single_tunnel_vni)
+        encapsulated_pkt = self.encapsulate(self.frame_request, self.single_tunnel_vni)
 
 
-        self.pg0.add_stream([encapsulated_pkt, ])
+        self.pg0.add_stream(
+            [
+                encapsulated_pkt,
+            ]
+        )
 
         self.pg1.enable_capture()
 
 
         self.pg1.enable_capture()
 
@@ -214,7 +223,7 @@ class TestVxlanGbp(VppTestCase):
         self.assert_eq_pkts(pkt, self.frame_request)
 
     def test_encap(self):
         self.assert_eq_pkts(pkt, self.frame_request)
 
     def test_encap(self):
-        """ Encapsulation test
+        """Encapsulation test
         Send frames from pg1
         Verify receipt of encapsulated frames on pg0
         """
         Send frames from pg1
         Verify receipt of encapsulated frames on pg0
         """
@@ -233,7 +242,7 @@ class TestVxlanGbp(VppTestCase):
         self.assert_eq_pkts(payload, self.frame_reply)
 
     def test_ucast_flood(self):
         self.assert_eq_pkts(payload, self.frame_reply)
 
     def test_ucast_flood(self):
-        """ Unicast flood test
+        """Unicast flood test
         Send frames from pg3
         Verify receipt of encapsulated frames on pg0
         """
         Send frames from pg3
         Verify receipt of encapsulated frames on pg0
         """
@@ -251,16 +260,18 @@ class TestVxlanGbp(VppTestCase):
             self.assert_eq_pkts(payload, self.frame_reply)
 
     def test_encap_big_packet(self):
             self.assert_eq_pkts(payload, self.frame_reply)
 
     def test_encap_big_packet(self):
-        """ Encapsulation test send big frame from pg1
+        """Encapsulation test send big frame from pg1
         Verify receipt of encapsulated frames on pg0
         """
 
         self.vapi.sw_interface_set_mtu(self.pg0.sw_if_index, [1500, 0, 0, 0])
 
         Verify receipt of encapsulated frames on pg0
         """
 
         self.vapi.sw_interface_set_mtu(self.pg0.sw_if_index, [1500, 0, 0, 0])
 
-        frame = (Ether(src='00:00:00:00:00:02', dst='00:00:00:00:00:01') /
-                 IP(src='4.3.2.1', dst='1.2.3.4') /
-                 UDP(sport=20000, dport=10000) /
-                 Raw(b'\xa5' * 1450))
+        frame = (
+            Ether(src="00:00:00:00:00:02", dst="00:00:00:00:00:01")
+            / IP(src="4.3.2.1", dst="1.2.3.4")
+            / UDP(sport=20000, dport=10000)
+            / Raw(b"\xa5" * 1450)
+        )
 
         self.pg1.add_stream([frame])
 
 
         self.pg1.add_stream([frame])
 
@@ -276,9 +287,9 @@ class TestVxlanGbp(VppTestCase):
         payload = self.decapsulate(pkt)
         self.assert_eq_pkts(payload, frame)
 
         payload = self.decapsulate(pkt)
         self.assert_eq_pkts(payload, frame)
 
-# Method to define VPP actions before tear down of the test case.
-#  Overrides tearDown method in VppTestCase class.
-#  @param self The object pointer.
+    # Method to define VPP actions before tear down of the test case.
+    #  Overrides tearDown method in VppTestCase class.
+    #  @param self The object pointer.
     def tearDown(self):
         super(TestVxlanGbp, self).tearDown()
 
     def tearDown(self):
         super(TestVxlanGbp, self).tearDown()
 
@@ -289,5 +300,5 @@ class TestVxlanGbp(VppTestCase):
         self.logger.info(self.vapi.cli("show error"))
 
 
         self.logger.info(self.vapi.cli("show error"))
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index 0898bd9..1b6b4e7 100644 (file)
@@ -1,17 +1,18 @@
-
 from vpp_interface import VppInterface
 from vpp_papi import VppEnum
 
 
 from vpp_interface import VppInterface
 from vpp_papi import VppEnum
 
 
-INDEX_INVALID = 0xffffffff
+INDEX_INVALID = 0xFFFFFFFF
 
 
 def find_vxlan_gbp_tunnel(test, src, dst, vni):
     ts = test.vapi.vxlan_gbp_tunnel_dump(INDEX_INVALID)
     for t in ts:
 
 
 def find_vxlan_gbp_tunnel(test, src, dst, vni):
     ts = test.vapi.vxlan_gbp_tunnel_dump(INDEX_INVALID)
     for t in ts:
-        if src == str(t.tunnel.src) and \
-           dst == str(t.tunnel.dst) and \
-           t.tunnel.vni == vni:
+        if (
+            src == str(t.tunnel.src)
+            and dst == str(t.tunnel.dst)
+            and t.tunnel.vni == vni
+        ):
             return t.tunnel.sw_if_index
     return INDEX_INVALID
 
             return t.tunnel.sw_if_index
     return INDEX_INVALID
 
@@ -21,9 +22,19 @@ class VppVxlanGbpTunnel(VppInterface):
     VPP VXLAN GBP interface
     """
 
     VPP VXLAN GBP interface
     """
 
-    def __init__(self, test, src, dst, vni, mcast_itf=None, mode=None,
-                 is_ipv6=None, encap_table_id=None, instance=0xffffffff):
-        """ Create VXLAN-GBP Tunnel interface """
+    def __init__(
+        self,
+        test,
+        src,
+        dst,
+        vni,
+        mcast_itf=None,
+        mode=None,
+        is_ipv6=None,
+        encap_table_id=None,
+        instance=0xFFFFFFFF,
+    ):
+        """Create VXLAN-GBP Tunnel interface"""
         super(VppVxlanGbpTunnel, self).__init__(test)
         self.src = src
         self.dst = dst
         super(VppVxlanGbpTunnel, self).__init__(test)
         self.src = src
         self.dst = dst
@@ -33,21 +44,23 @@ class VppVxlanGbpTunnel(VppInterface):
         self.encap_table_id = encap_table_id
         self.instance = instance
         if not mode:
         self.encap_table_id = encap_table_id
         self.instance = instance
         if not mode:
-            self.mode = (VppEnum.vl_api_vxlan_gbp_api_tunnel_mode_t.
-                         VXLAN_GBP_API_TUNNEL_MODE_L2)
+            self.mode = (
+                VppEnum.vl_api_vxlan_gbp_api_tunnel_mode_t.VXLAN_GBP_API_TUNNEL_MODE_L2
+            )
         else:
             self.mode = mode
 
     def encode(self):
         return {
         else:
             self.mode = mode
 
     def encode(self):
         return {
-            'src': self.src,
-            'dst': self.dst,
-            'mode': self.mode,
-            'vni': self.vni,
-            'mcast_sw_if_index': self.mcast_itf.sw_if_index
-            if self.mcast_itf else INDEX_INVALID,
-            'encap_table_id': self.encap_table_id,
-            'instance': self.instance,
+            "src": self.src,
+            "dst": self.dst,
+            "mode": self.mode,
+            "vni": self.vni,
+            "mcast_sw_if_index": self.mcast_itf.sw_if_index
+            if self.mcast_itf
+            else INDEX_INVALID,
+            "encap_table_id": self.encap_table_id,
+            "instance": self.instance,
         }
 
     def add_vpp_config(self):
         }
 
     def add_vpp_config(self):
@@ -65,11 +78,14 @@ class VppVxlanGbpTunnel(VppInterface):
         )
 
     def query_vpp_config(self):
         )
 
     def query_vpp_config(self):
-        return (INDEX_INVALID != find_vxlan_gbp_tunnel(self._test,
-                                                       self.src,
-                                                       self.dst,
-                                                       self.vni))
+        return INDEX_INVALID != find_vxlan_gbp_tunnel(
+            self._test, self.src, self.dst, self.vni
+        )
 
     def object_id(self):
 
     def object_id(self):
-        return "vxlan-gbp-%d-%d-%s-%s" % (self.sw_if_index, self.vni,
-                                          self.src, self.dst)
+        return "vxlan-gbp-%d-%d-%s-%s" % (
+            self.sw_if_index,
+            self.vni,
+            self.src,
+            self.dst,
+        )
index a77b935..5194429 100644 (file)
@@ -4,13 +4,12 @@
 import unittest
 import os
 import signal
 import unittest
 import os
 import signal
-from framework import VppTestCase, running_extended_tests, \
-    VppTestRunner, Worker
+from framework import VppTestCase, running_extended_tests, VppTestRunner, Worker
 
 
 @unittest.skipUnless(running_extended_tests, "part of extended tests")
 class VOMTestCase(VppTestCase):
 
 
 @unittest.skipUnless(running_extended_tests, "part of extended tests")
 class VOMTestCase(VppTestCase):
-    """ VPP Object Model Test """
+    """VPP Object Model Test"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -21,14 +20,14 @@ class VOMTestCase(VppTestCase):
         super(VOMTestCase, cls).tearDownClass()
 
     def test_vom_cpp(self):
         super(VOMTestCase, cls).tearDownClass()
 
     def test_vom_cpp(self):
-        """ run C++ VOM tests """
+        """run C++ VOM tests"""
         var = "TEST_BR"
         built_root = os.getenv(var, None)
         var = "TEST_BR"
         built_root = os.getenv(var, None)
-        self.assertIsNotNone(built_root,
-                             "Environment variable `%s' not set" % var)
+        self.assertIsNotNone(built_root, "Environment variable `%s' not set" % var)
         executable = "%s/vom_test/vom_test" % built_root
         executable = "%s/vom_test/vom_test" % built_root
-        worker = Worker([executable, "vpp object model",
-                         self.get_api_segment_prefix()], self.logger)
+        worker = Worker(
+            [executable, "vpp object model", self.get_api_segment_prefix()], self.logger
+        )
         worker.start()
         timeout = 120
         worker.join(timeout)
         worker.start()
         timeout = 120
         worker.join(timeout)
@@ -37,17 +36,15 @@ class VOMTestCase(VppTestCase):
         if worker.result is None:
             try:
                 error = True
         if worker.result is None:
             try:
                 error = True
-                self.logger.error(
-                    "Timeout! Worker did not finish in %ss" % timeout)
+                self.logger.error("Timeout! Worker did not finish in %ss" % timeout)
                 os.killpg(os.getpgid(worker.process.pid), signal.SIGTERM)
                 worker.join()
             except:
                 raise Exception("Couldn't kill worker-spawned process")
         if error:
                 os.killpg(os.getpgid(worker.process.pid), signal.SIGTERM)
                 worker.join()
             except:
                 raise Exception("Couldn't kill worker-spawned process")
         if error:
-            raise Exception(
-                "Timeout! Worker did not finish in %ss" % timeout)
+            raise Exception("Timeout! Worker did not finish in %ss" % timeout)
         self.assert_equal(worker.result, 0, "Binary test return code")
 
 
         self.assert_equal(worker.result, 0, "Binary test return code")
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index f3021c3..01cb025 100755 (executable)
@@ -1,9 +1,9 @@
 #!/usr/bin/env python3
 
 #!/usr/bin/env python3
 
-'''
+"""
 crcchecker is a tool to used to enforce that .api messages do not change.
 API files with a semantic version < 1.0.0 are ignored.
 crcchecker is a tool to used to enforce that .api messages do not change.
 API files with a semantic version < 1.0.0 are ignored.
-'''
+"""
 
 import sys
 import os
 
 import sys
 import os
@@ -14,67 +14,75 @@ from subprocess import run, PIPE, check_output, CalledProcessError
 
 # pylint: disable=subprocess-run-check
 
 
 # pylint: disable=subprocess-run-check
 
-ROOTDIR = os.path.dirname(os.path.realpath(__file__)) + '/../..'
-APIGENBIN = f'{ROOTDIR}/src/tools/vppapigen/vppapigen.py'
+ROOTDIR = os.path.dirname(os.path.realpath(__file__)) + "/../.."
+APIGENBIN = f"{ROOTDIR}/src/tools/vppapigen/vppapigen.py"
 
 
 def crc_from_apigen(revision, filename):
 
 
 def crc_from_apigen(revision, filename):
-    '''Runs vppapigen with crc plugin returning a JSON object with CRCs for
-    all APIs in filename'''
+    """Runs vppapigen with crc plugin returning a JSON object with CRCs for
+    all APIs in filename"""
     if not revision and not os.path.isfile(filename):
     if not revision and not os.path.isfile(filename):
-        print(f'skipping: {filename}', file=sys.stderr)
+        print(f"skipping: {filename}", file=sys.stderr)
         # Return <class 'set'> instead of <class 'dict'>
         return {-1}
 
     if revision:
         # Return <class 'set'> instead of <class 'dict'>
         return {-1}
 
     if revision:
-        apigen = (f'{APIGENBIN} --git-revision {revision} --includedir src '
-                  f'--input {filename} CRC')
+        apigen = (
+            f"{APIGENBIN} --git-revision {revision} --includedir src "
+            f"--input {filename} CRC"
+        )
     else:
     else:
-        apigen = (f'{APIGENBIN} --includedir src --input {filename} CRC')
+        apigen = f"{APIGENBIN} --includedir src --input {filename} CRC"
     returncode = run(apigen.split(), stdout=PIPE, stderr=PIPE)
     if returncode.returncode == 2:  # No such file
     returncode = run(apigen.split(), stdout=PIPE, stderr=PIPE)
     if returncode.returncode == 2:  # No such file
-        print(f'skipping: {revision}:{filename} {returncode}', file=sys.stderr)
+        print(f"skipping: {revision}:{filename} {returncode}", file=sys.stderr)
         return {}
     if returncode.returncode != 0:
         return {}
     if returncode.returncode != 0:
-        print(f'vppapigen failed for {revision}:{filename} with '
-              'command\n {apigen}\n error: {rv}',
-              returncode.stderr.decode('ascii'), file=sys.stderr)
+        print(
+            f"vppapigen failed for {revision}:{filename} with "
+            "command\n {apigen}\n error: {rv}",
+            returncode.stderr.decode("ascii"),
+            file=sys.stderr,
+        )
         sys.exit(-2)
 
     return json.loads(returncode.stdout)
 
 
 def dict_compare(dict1, dict2):
         sys.exit(-2)
 
     return json.loads(returncode.stdout)
 
 
 def dict_compare(dict1, dict2):
-    '''Compare two dictionaries returning added, removed, modified
-    and equal entries'''
+    """Compare two dictionaries returning added, removed, modified
+    and equal entries"""
     d1_keys = set(dict1.keys())
     d2_keys = set(dict2.keys())
     intersect_keys = d1_keys.intersection(d2_keys)
     added = d1_keys - d2_keys
     removed = d2_keys - d1_keys
     d1_keys = set(dict1.keys())
     d2_keys = set(dict2.keys())
     intersect_keys = d1_keys.intersection(d2_keys)
     added = d1_keys - d2_keys
     removed = d2_keys - d1_keys
-    modified = {o: (dict1[o], dict2[o]) for o in intersect_keys
-                if dict1[o]['crc'] != dict2[o]['crc']}
+    modified = {
+        o: (dict1[o], dict2[o])
+        for o in intersect_keys
+        if dict1[o]["crc"] != dict2[o]["crc"]
+    }
     same = set(o for o in intersect_keys if dict1[o] == dict2[o])
     return added, removed, modified, same
 
 
 def filelist_from_git_ls():
     same = set(o for o in intersect_keys if dict1[o] == dict2[o])
     return added, removed, modified, same
 
 
 def filelist_from_git_ls():
-    '''Returns a list of all api files in the git repository'''
+    """Returns a list of all api files in the git repository"""
     filelist = []
     filelist = []
-    git_ls = 'git ls-files *.api'
+    git_ls = "git ls-files *.api"
     returncode = run(git_ls.split(), stdout=PIPE, stderr=PIPE)
     if returncode.returncode != 0:
         sys.exit(returncode.returncode)
 
     returncode = run(git_ls.split(), stdout=PIPE, stderr=PIPE)
     if returncode.returncode != 0:
         sys.exit(returncode.returncode)
 
-    for line in returncode.stdout.decode('ascii').split('\n'):
+    for line in returncode.stdout.decode("ascii").split("\n"):
         if line:
             filelist.append(line)
     return filelist
 
 
 def is_uncommitted_changes():
         if line:
             filelist.append(line)
     return filelist
 
 
 def is_uncommitted_changes():
-    '''Returns true if there are uncommitted changes in the repo'''
-    git_status = 'git status --porcelain -uno'
+    """Returns true if there are uncommitted changes in the repo"""
+    git_status = "git status --porcelain -uno"
     returncode = run(git_status.split(), stdout=PIPE, stderr=PIPE)
     if returncode.returncode != 0:
         sys.exit(returncode.returncode)
     returncode = run(git_status.split(), stdout=PIPE, stderr=PIPE)
     if returncode.returncode != 0:
         sys.exit(returncode.returncode)
@@ -85,27 +93,29 @@ def is_uncommitted_changes():
 
 
 def filelist_from_git_grep(filename):
 
 
 def filelist_from_git_grep(filename):
-    '''Returns a list of api files that this <filename> api files imports.'''
+    """Returns a list of api files that this <filename> api files imports."""
     filelist = []
     try:
     filelist = []
     try:
-        returncode = check_output(f'git grep -e "import .*{filename}"'
-                                  ' -- *.api',
-                                  shell=True)
+        returncode = check_output(
+            f'git grep -e "import .*{filename}"' " -- *.api", shell=True
+        )
     except CalledProcessError:
         return []
     except CalledProcessError:
         return []
-    for line in returncode.decode('ascii').split('\n'):
+    for line in returncode.decode("ascii").split("\n"):
         if line:
         if line:
-            filename, _ = line.split(':')
+            filename, _ = line.split(":")
             filelist.append(filename)
     return filelist
 
 
 def filelist_from_patchset(pattern):
             filelist.append(filename)
     return filelist
 
 
 def filelist_from_patchset(pattern):
-    '''Returns list of api files in changeset and the list of api
-    files they import.'''
+    """Returns list of api files in changeset and the list of api
+    files they import."""
     filelist = []
     filelist = []
-    git_cmd = ('((git diff HEAD~1.. --name-only;git ls-files -m) | '
-               'sort -u | grep "\\.api$")')
+    git_cmd = (
+        "((git diff HEAD~1.. --name-only;git ls-files -m) | "
+        'sort -u | grep "\\.api$")'
+    )
     try:
         res = check_output(git_cmd, shell=True)
     except CalledProcessError:
     try:
         res = check_output(git_cmd, shell=True)
     except CalledProcessError:
@@ -113,7 +123,7 @@ def filelist_from_patchset(pattern):
 
     # Check for dependencies (imports)
     imported_files = []
 
     # Check for dependencies (imports)
     imported_files = []
-    for line in res.decode('ascii').split('\n'):
+    for line in res.decode("ascii").split("\n"):
         if not line:
             continue
         if not re.search(pattern, line):
         if not line:
             continue
         if not re.search(pattern, line):
@@ -126,88 +136,91 @@ def filelist_from_patchset(pattern):
 
 
 def is_deprecated(message):
 
 
 def is_deprecated(message):
-    '''Given a message, return True if message is deprecated'''
-    if 'options' in message:
-        if 'deprecated' in message['options']:
+    """Given a message, return True if message is deprecated"""
+    if "options" in message:
+        if "deprecated" in message["options"]:
             return True
         # recognize the deprecated format
             return True
         # recognize the deprecated format
-        if 'status' in message['options'] and \
-           message['options']['status'] == 'deprecated':
+        if (
+            "status" in message["options"]
+            and message["options"]["status"] == "deprecated"
+        ):
             print("WARNING: please use 'option deprecated;'")
             return True
     return False
 
 
 def is_in_progress(message):
             print("WARNING: please use 'option deprecated;'")
             return True
     return False
 
 
 def is_in_progress(message):
-    '''Given a message, return True if message is marked as in_progress'''
-    if 'options' in message:
-        if 'in_progress' in message['options']:
+    """Given a message, return True if message is marked as in_progress"""
+    if "options" in message:
+        if "in_progress" in message["options"]:
             return True
         # recognize the deprecated format
             return True
         # recognize the deprecated format
-        if 'status' in message['options'] and \
-           message['options']['status'] == 'in_progress':
+        if (
+            "status" in message["options"]
+            and message["options"]["status"] == "in_progress"
+        ):
             print("WARNING: please use 'option in_progress;'")
             return True
     return False
 
 
 def report(new, old):
             print("WARNING: please use 'option in_progress;'")
             return True
     return False
 
 
 def report(new, old):
-    '''Given a dictionary of new crcs and old crcs, print all the
+    """Given a dictionary of new crcs and old crcs, print all the
     added, removed, modified, in-progress, deprecated messages.
     added, removed, modified, in-progress, deprecated messages.
-    Return the number of backwards incompatible changes made.'''
+    Return the number of backwards incompatible changes made."""
 
     # pylint: disable=too-many-branches
 
 
     # pylint: disable=too-many-branches
 
-    new.pop('_version', None)
-    old.pop('_version', None)
+    new.pop("_version", None)
+    old.pop("_version", None)
     added, removed, modified, _ = dict_compare(new, old)
     backwards_incompatible = 0
 
     # print the full list of in-progress messages
     # they should eventually either disappear of become supported
     for k in new.keys():
     added, removed, modified, _ = dict_compare(new, old)
     backwards_incompatible = 0
 
     # print the full list of in-progress messages
     # they should eventually either disappear of become supported
     for k in new.keys():
-        newversion = int(new[k]['version'])
+        newversion = int(new[k]["version"])
         if newversion == 0 or is_in_progress(new[k]):
         if newversion == 0 or is_in_progress(new[k]):
-            print(f'in-progress: {k}')
+            print(f"in-progress: {k}")
     for k in added:
     for k in added:
-        print(f'added: {k}')
+        print(f"added: {k}")
     for k in removed:
     for k in removed:
-        oldversion = int(old[k]['version'])
-        if oldversion > 0 and not is_deprecated(old[k]) and not \
-           is_in_progress(old[k]):
+        oldversion = int(old[k]["version"])
+        if oldversion > 0 and not is_deprecated(old[k]) and not is_in_progress(old[k]):
             backwards_incompatible += 1
             backwards_incompatible += 1
-            print(f'removed: ** {k}')
+            print(f"removed: ** {k}")
         else:
         else:
-            print(f'removed: {k}')
+            print(f"removed: {k}")
     for k in modified.keys():
     for k in modified.keys():
-        oldversion = int(old[k]['version'])
-        newversion = int(new[k]['version'])
+        oldversion = int(old[k]["version"])
+        newversion = int(new[k]["version"])
         if oldversion > 0 and not is_in_progress(old[k]):
             backwards_incompatible += 1
         if oldversion > 0 and not is_in_progress(old[k]):
             backwards_incompatible += 1
-            print(f'modified: ** {k}')
+            print(f"modified: ** {k}")
         else:
         else:
-            print(f'modified: {k}')
+            print(f"modified: {k}")
 
     # check which messages are still there but were marked for deprecation
     for k in new.keys():
 
     # check which messages are still there but were marked for deprecation
     for k in new.keys():
-        newversion = int(new[k]['version'])
+        newversion = int(new[k]["version"])
         if newversion > 0 and is_deprecated(new[k]):
             if k in old:
                 if not is_deprecated(old[k]):
         if newversion > 0 and is_deprecated(new[k]):
             if k in old:
                 if not is_deprecated(old[k]):
-                    print(f'deprecated: {k}')
+                    print(f"deprecated: {k}")
             else:
             else:
-                print(f'added+deprecated: {k}')
+                print(f"added+deprecated: {k}")
 
     return backwards_incompatible
 
 
 def check_patchset():
 
     return backwards_incompatible
 
 
 def check_patchset():
-    '''Compare the changes to API messages in this changeset.
+    """Compare the changes to API messages in this changeset.
     Ignores API files with version < 1.0.0.
     Only considers API files located under the src directory in the repo.
     Ignores API files with version < 1.0.0.
     Only considers API files located under the src directory in the repo.
-    '''
-    files = filelist_from_patchset('^src/')
-    revision = 'HEAD~1'
+    """
+    files = filelist_from_patchset("^src/")
+    revision = "HEAD~1"
 
     oldcrcs = {}
     newcrcs = {}
 
     oldcrcs = {}
     newcrcs = {}
@@ -216,7 +229,7 @@ def check_patchset():
         _ = crc_from_apigen(None, filename)
         # Ignore removed files
         if isinstance(_, set) == 0:
         _ = crc_from_apigen(None, filename)
         # Ignore removed files
         if isinstance(_, set) == 0:
-            if isinstance(_, set) == 0 and _['_version']['major'] == '0':
+            if isinstance(_, set) == 0 and _["_version"]["major"] == "0":
                 continue
             newcrcs.update(_)
 
                 continue
             newcrcs.update(_)
 
@@ -225,27 +238,31 @@ def check_patchset():
     backwards_incompatible = report(newcrcs, oldcrcs)
     if backwards_incompatible:
         # alert on changing production API
     backwards_incompatible = report(newcrcs, oldcrcs)
     if backwards_incompatible:
         # alert on changing production API
-        print("crcchecker: Changing production APIs in an incompatible way",
-              file=sys.stderr)
+        print(
+            "crcchecker: Changing production APIs in an incompatible way",
+            file=sys.stderr,
+        )
         sys.exit(-1)
     else:
         sys.exit(-1)
     else:
-        print('*' * 67)
-        print('* VPP CHECKAPI SUCCESSFULLY COMPLETED')
-        print('*' * 67)
+        print("*" * 67)
+        print("* VPP CHECKAPI SUCCESSFULLY COMPLETED")
+        print("*" * 67)
 
 
 def main():
 
 
 def main():
-    '''Main entry point.'''
-    parser = argparse.ArgumentParser(description='VPP CRC checker.')
-    parser.add_argument('--git-revision',
-                        help='Git revision to compare against')
-    parser.add_argument('--dump-manifest', action='store_true',
-                        help='Dump CRC for all messages')
-    parser.add_argument('--check-patchset', action='store_true',
-                        help='Check patchset for backwards incompatbile changes')
-    parser.add_argument('files', nargs='*')
-    parser.add_argument('--diff', help='Files to compare (on filesystem)',
-                        nargs=2)
+    """Main entry point."""
+    parser = argparse.ArgumentParser(description="VPP CRC checker.")
+    parser.add_argument("--git-revision", help="Git revision to compare against")
+    parser.add_argument(
+        "--dump-manifest", action="store_true", help="Dump CRC for all messages"
+    )
+    parser.add_argument(
+        "--check-patchset",
+        action="store_true",
+        help="Check patchset for backwards incompatbile changes",
+    )
+    parser.add_argument("files", nargs="*")
+    parser.add_argument("--diff", help="Files to compare (on filesystem)", nargs=2)
 
     args = parser.parse_args()
 
 
     args = parser.parse_args()
 
@@ -267,17 +284,16 @@ def main():
         for filename in files:
             crcs.update(crc_from_apigen(args.git_revision, filename))
         for k, value in crcs.items():
         for filename in files:
             crcs.update(crc_from_apigen(args.git_revision, filename))
         for k, value in crcs.items():
-            print(f'{k}: {value}')
+            print(f"{k}: {value}")
         sys.exit(0)
 
     # Find changes between current patchset and given revision (previous)
     if args.check_patchset:
         if args.git_revision:
         sys.exit(0)
 
     # Find changes between current patchset and given revision (previous)
     if args.check_patchset:
         if args.git_revision:
-            print('Argument git-revision ignored', file=sys.stderr)
+            print("Argument git-revision ignored", file=sys.stderr)
         # Check there are no uncomitted changes
         if is_uncommitted_changes():
         # Check there are no uncomitted changes
         if is_uncommitted_changes():
-            print('Please stash or commit changes in workspace',
-                  file=sys.stderr)
+            print("Please stash or commit changes in workspace", file=sys.stderr)
             sys.exit(-1)
         check_patchset()
         sys.exit(0)
             sys.exit(-1)
         check_patchset()
         sys.exit(0)
@@ -286,7 +302,7 @@ def main():
     # Find changes between a given file and a revision
     files = args.files if args.files else filelist_from_git_ls()
 
     # Find changes between a given file and a revision
     files = args.files if args.files else filelist_from_git_ls()
 
-    revision = args.git_revision if args.git_revision else 'HEAD~1'
+    revision = args.git_revision if args.git_revision else "HEAD~1"
 
     oldcrcs = {}
     newcrcs = {}
 
     oldcrcs = {}
     newcrcs = {}
@@ -299,13 +315,16 @@ def main():
     if args.check_patchset:
         if backwards_incompatible:
             # alert on changing production API
     if args.check_patchset:
         if backwards_incompatible:
             # alert on changing production API
-            print("crcchecker: Changing production APIs in an incompatible way", file=sys.stderr)
+            print(
+                "crcchecker: Changing production APIs in an incompatible way",
+                file=sys.stderr,
+            )
             sys.exit(-1)
         else:
             sys.exit(-1)
         else:
-            print('*' * 67)
-            print('* VPP CHECKAPI SUCCESSFULLY COMPLETED')
-            print('*' * 67)
+            print("*" * 67)
+            print("* VPP CHECKAPI SUCCESSFULLY COMPLETED")
+            print("*" * 67)
 
 
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     main()
     main()
index ac8cf47..7433f54 100755 (executable)
@@ -4,21 +4,21 @@ import fnmatch
 import os
 import subprocess
 
 import os
 import subprocess
 
-starttag = 'v19.08-rc0'
-endtag = 'HEAD'
+starttag = "v19.08-rc0"
+endtag = "HEAD"
 emit_md = True
 apifiles = []
 
 emit_md = True
 apifiles = []
 
-for root, dirnames, filenames in os.walk('.'):
-    for filename in fnmatch.filter(filenames, '*.api'):
+for root, dirnames, filenames in os.walk("."):
+    for filename in fnmatch.filter(filenames, "*.api"):
         apifiles.append(os.path.join(root, filename))
 
 for f in apifiles:
         apifiles.append(os.path.join(root, filename))
 
 for f in apifiles:
-    commits = subprocess.check_output(['git', 'log',
-                                       '--oneline', starttag + '..' + endtag,
-                                       f])
+    commits = subprocess.check_output(
+        ["git", "log", "--oneline", starttag + ".." + endtag, f]
+    )
     if commits:
     if commits:
-        if f[0:2] == './':
+        if f[0:2] == "./":
             f = f[2:]
         if emit_md:
             print("| @c %s ||" % f)
             f = f[2:]
         if emit_md:
             print("| @c %s ||" % f)
@@ -27,9 +27,10 @@ for f in apifiles:
                 parts = line.strip().split()
                 commit = parts[0]
                 message = b" ".join(parts[1:]).decode().replace("|", r"\|")
                 parts = line.strip().split()
                 commit = parts[0]
                 message = b" ".join(parts[1:]).decode().replace("|", r"\|")
-                print("| [%s](https://gerrit.fd.io/r/gitweb?"
-                      "p=vpp.git;a=commit;h=%s) | %s |" % (
-                            commit, commit, message))
+                print(
+                    "| [%s](https://gerrit.fd.io/r/gitweb?"
+                    "p=vpp.git;a=commit;h=%s) | %s |" % (commit, commit, message)
+                )
             print()
         else:
             print(f)
             print()
         else:
             print(f)
index 80edb3b..140e434 100755 (executable)
@@ -56,9 +56,10 @@ args = []
 
 
 def usage():
 
 
 def usage():
-    '''Print usage information for the program'''
+    """Print usage information for the program"""
     argv0 = basename(sys.argv[0])
     argv0 = basename(sys.argv[0])
-    print("""
+    print(
+        """
 Usage:
 ------
 
 Usage:
 ------
 
@@ -115,33 +116,40 @@ To unbind 0000:01:00.0 from using any driver
 To bind 0000:02:00.0 and 0000:02:00.1 to the ixgbe kernel driver
         %(argv0)s -b ixgbe 02:00.0 02:00.1
 
 To bind 0000:02:00.0 and 0000:02:00.1 to the ixgbe kernel driver
         %(argv0)s -b ixgbe 02:00.0 02:00.1
 
-    """ % locals())  # replace items from local variables
+    """
+        % locals()
+    )  # replace items from local variables
 
 
 # This is roughly compatible with check_output function in subprocess module
 # which is only available in python 2.7.
 def check_output(args, stderr=None):
 
 
 # This is roughly compatible with check_output function in subprocess module
 # which is only available in python 2.7.
 def check_output(args, stderr=None):
-    '''Run a command and capture its output'''
-    return subprocess.Popen(args, stdout=subprocess.PIPE,
-                            stderr=stderr).communicate()[0]
+    """Run a command and capture its output"""
+    return subprocess.Popen(args, stdout=subprocess.PIPE, stderr=stderr).communicate()[
+        0
+    ]
 
 
 def find_module(mod):
 
 
 def find_module(mod):
-    '''find the .ko file for kernel module named mod.
+    """find the .ko file for kernel module named mod.
     Searches the $RTE_SDK/$RTE_TARGET directory, the kernel
     modules directory and finally under the parent directory of
     Searches the $RTE_SDK/$RTE_TARGET directory, the kernel
     modules directory and finally under the parent directory of
-    the script '''
+    the script"""
     # check $RTE_SDK/$RTE_TARGET directory
     # check $RTE_SDK/$RTE_TARGET directory
-    if 'RTE_SDK' in os.environ and 'RTE_TARGET' in os.environ:
-        path = "%s/%s/kmod/%s.ko" % (os.environ['RTE_SDK'],
-                                     os.environ['RTE_TARGET'], mod)
+    if "RTE_SDK" in os.environ and "RTE_TARGET" in os.environ:
+        path = "%s/%s/kmod/%s.ko" % (
+            os.environ["RTE_SDK"],
+            os.environ["RTE_TARGET"],
+            mod,
+        )
         if exists(path):
             return path
 
     # check using depmod
     try:
         if exists(path):
             return path
 
     # check using depmod
     try:
-        depmod_out = check_output(["modinfo", "-n", mod],
-                                  stderr=subprocess.STDOUT).lower()
+        depmod_out = check_output(
+            ["modinfo", "-n", mod], stderr=subprocess.STDOUT
+        ).lower()
         if "error" not in depmod_out:
             path = depmod_out.strip()
             if exists(path):
         if "error" not in depmod_out:
             path = depmod_out.strip()
             if exists(path):
@@ -151,7 +159,7 @@ def find_module(mod):
 
     # check for a copy based off current path
     tools_dir = dirname(abspath(sys.argv[0]))
 
     # check for a copy based off current path
     tools_dir = dirname(abspath(sys.argv[0]))
-    if (tools_dir.endswith("tools")):
+    if tools_dir.endswith("tools"):
         base_dir = dirname(tools_dir)
         find_out = check_output(["find", base_dir, "-name", mod + ".ko"])
         if len(find_out) > 0:  # something matched
         base_dir = dirname(tools_dir)
         find_out = check_output(["find", base_dir, "-name", mod + ".ko"])
         if len(find_out) > 0:  # something matched
@@ -161,7 +169,7 @@ def find_module(mod):
 
 
 def check_modules():
 
 
 def check_modules():
-    '''Checks that igb_uio is loaded'''
+    """Checks that igb_uio is loaded"""
     global dpdk_drivers
 
     # list of supported modules
     global dpdk_drivers
 
     # list of supported modules
@@ -170,20 +178,21 @@ def check_modules():
     # first check if module is loaded
     try:
         # Get list of sysfs modules (both built-in and dynamically loaded)
     # first check if module is loaded
     try:
         # Get list of sysfs modules (both built-in and dynamically loaded)
-        sysfs_path = '/sys/module/'
+        sysfs_path = "/sys/module/"
 
         # Get the list of directories in sysfs_path
 
         # Get the list of directories in sysfs_path
-        sysfs_mods = [os.path.join(sysfs_path, o) for o
-                      in os.listdir(sysfs_path)
-                      if os.path.isdir(os.path.join(sysfs_path, o))]
+        sysfs_mods = [
+            os.path.join(sysfs_path, o)
+            for o in os.listdir(sysfs_path)
+            if os.path.isdir(os.path.join(sysfs_path, o))
+        ]
 
         # Extract the last element of '/sys/module/abc' in the array
 
         # Extract the last element of '/sys/module/abc' in the array
-        sysfs_mods = [a.split('/')[-1] for a in sysfs_mods]
+        sysfs_mods = [a.split("/")[-1] for a in sysfs_mods]
 
         # special case for vfio_pci (module is named vfio-pci,
         # but its .ko is named vfio_pci)
 
         # special case for vfio_pci (module is named vfio-pci,
         # but its .ko is named vfio_pci)
-        sysfs_mods = map(lambda a:
-                         a if a != 'vfio_pci' else 'vfio-pci', sysfs_mods)
+        sysfs_mods = map(lambda a: a if a != "vfio_pci" else "vfio-pci", sysfs_mods)
 
         for mod in mods:
             if mod["Name"] in sysfs_mods:
 
         for mod in mods:
             if mod["Name"] in sysfs_mods:
@@ -204,12 +213,12 @@ def check_modules():
 
 
 def has_driver(dev_id):
 
 
 def has_driver(dev_id):
-    '''return true if a device is assigned to a driver. False otherwise'''
+    """return true if a device is assigned to a driver. False otherwise"""
     return "Driver_str" in devices[dev_id]
 
 
 def get_pci_device_details(dev_id):
     return "Driver_str" in devices[dev_id]
 
 
 def get_pci_device_details(dev_id):
-    '''This function gets additional details for a PCI device'''
+    """This function gets additional details for a PCI device"""
     device = {}
 
     extra_info = check_output(["lspci", "-vmmks", dev_id]).splitlines()
     device = {}
 
     extra_info = check_output(["lspci", "-vmmks", dev_id]).splitlines()
@@ -225,8 +234,7 @@ def get_pci_device_details(dev_id):
     device["Interface"] = ""
     for base, dirs, _ in os.walk("/sys/bus/pci/devices/%s/" % dev_id):
         if "net" in dirs:
     device["Interface"] = ""
     for base, dirs, _ in os.walk("/sys/bus/pci/devices/%s/" % dev_id):
         if "net" in dirs:
-            device["Interface"] = \
-                ",".join(os.listdir(os.path.join(base, "net")))
+            device["Interface"] = ",".join(os.listdir(os.path.join(base, "net")))
             break
     # check if a port is used for ssh connection
     device["Ssh_if"] = False
             break
     # check if a port is used for ssh connection
     device["Ssh_if"] = False
@@ -236,9 +244,9 @@ def get_pci_device_details(dev_id):
 
 
 def get_nic_details():
 
 
 def get_nic_details():
-    '''This function populates the "devices" dictionary. The keys used are
+    """This function populates the "devices" dictionary. The keys used are
     the pci addresses (domain:bus:slot.func). The values are themselves
     the pci addresses (domain:bus:slot.func). The values are themselves
-    dictionaries - one for each NIC.'''
+    dictionaries - one for each NIC."""
     global devices
     global dpdk_drivers
 
     global devices
     global dpdk_drivers
 
@@ -249,7 +257,7 @@ def get_nic_details():
     dev = {}
     dev_lines = check_output(["lspci", "-Dvmmn"]).splitlines()
     for dev_line in dev_lines:
     dev = {}
     dev_lines = check_output(["lspci", "-Dvmmn"]).splitlines()
     for dev_line in dev_lines:
-        if (len(dev_line) == 0):
+        if len(dev_line) == 0:
             if dev["Class"][0:2] == NETWORK_BASE_CLASS:
                 # convert device and vendor ids to numbers, then add to global
                 dev["Vendor"] = int(dev["Vendor"], 16)
             if dev["Class"][0:2] == NETWORK_BASE_CLASS:
                 # convert device and vendor ids to numbers, then add to global
                 dev["Vendor"] = int(dev["Vendor"], 16)
@@ -265,12 +273,13 @@ def get_nic_details():
     ssh_if = []
     route = check_output(["ip", "-o", "route"])
     # filter out all lines for 169.254 routes
     ssh_if = []
     route = check_output(["ip", "-o", "route"])
     # filter out all lines for 169.254 routes
-    route = "\n".join(filter(lambda ln: not ln.startswith("169.254"),
-                             route.decode().splitlines()))
+    route = "\n".join(
+        filter(lambda ln: not ln.startswith("169.254"), route.decode().splitlines())
+    )
     rt_info = route.split()
     for i in range(len(rt_info) - 1):
         if rt_info[i] == "dev":
     rt_info = route.split()
     for i in range(len(rt_info) - 1):
         if rt_info[i] == "dev":
-            ssh_if.append(rt_info[i+1])
+            ssh_if.append(rt_info[i + 1])
 
     # based on the basic info, get extended text details
     for d in devices.keys():
 
     # based on the basic info, get extended text details
     for d in devices.keys():
@@ -288,8 +297,7 @@ def get_nic_details():
         if "Module_str" in devices[d]:
             for driver in dpdk_drivers:
                 if driver not in devices[d]["Module_str"]:
         if "Module_str" in devices[d]:
             for driver in dpdk_drivers:
                 if driver not in devices[d]["Module_str"]:
-                    devices[d]["Module_str"] = \
-                        devices[d]["Module_str"] + ",%s" % driver
+                    devices[d]["Module_str"] = devices[d]["Module_str"] + ",%s" % driver
         else:
             devices[d]["Module_str"] = ",".join(dpdk_drivers)
 
         else:
             devices[d]["Module_str"] = ",".join(dpdk_drivers)
 
@@ -302,9 +310,9 @@ def get_nic_details():
 
 
 def get_crypto_details():
 
 
 def get_crypto_details():
-    '''This function populates the "devices" dictionary. The keys used are
+    """This function populates the "devices" dictionary. The keys used are
     the pci addresses (domain:bus:slot.func). The values are themselves
     the pci addresses (domain:bus:slot.func). The values are themselves
-    dictionaries - one for each NIC.'''
+    dictionaries - one for each NIC."""
     global devices
     global dpdk_drivers
 
     global devices
     global dpdk_drivers
 
@@ -315,8 +323,8 @@ def get_crypto_details():
     dev = {}
     dev_lines = check_output(["lspci", "-Dvmmn"]).splitlines()
     for dev_line in dev_lines:
     dev = {}
     dev_lines = check_output(["lspci", "-Dvmmn"]).splitlines()
     for dev_line in dev_lines:
-        if (len(dev_line) == 0):
-            if (dev["Class"][0:2] == CRYPTO_BASE_CLASS):
+        if len(dev_line) == 0:
+            if dev["Class"][0:2] == CRYPTO_BASE_CLASS:
                 # convert device and vendor ids to numbers, then add to global
                 dev["Vendor"] = int(dev["Vendor"], 16)
                 dev["Device"] = int(dev["Device"], 16)
                 # convert device and vendor ids to numbers, then add to global
                 dev["Vendor"] = int(dev["Vendor"], 16)
                 dev["Device"] = int(dev["Device"], 16)
@@ -336,8 +344,7 @@ def get_crypto_details():
         if "Module_str" in devices[d]:
             for driver in dpdk_drivers:
                 if driver not in devices[d]["Module_str"]:
         if "Module_str" in devices[d]:
             for driver in dpdk_drivers:
                 if driver not in devices[d]["Module_str"]:
-                    devices[d]["Module_str"] = \
-                        devices[d]["Module_str"] + ",%s" % driver
+                    devices[d]["Module_str"] = devices[d]["Module_str"] + ",%s" % driver
         else:
             devices[d]["Module_str"] = ",".join(dpdk_drivers)
 
         else:
             devices[d]["Module_str"] = ",".join(dpdk_drivers)
 
@@ -350,9 +357,9 @@ def get_crypto_details():
 
 
 def dev_id_from_dev_name(dev_name):
 
 
 def dev_id_from_dev_name(dev_name):
-    '''Take a device "name" - a string passed in by user to identify a NIC
+    """Take a device "name" - a string passed in by user to identify a NIC
     device, and determine the device id - i.e. the domain:bus:slot.func - for
     device, and determine the device id - i.e. the domain:bus:slot.func - for
-    it, which can then be used to index into the devices array'''
+    it, which can then be used to index into the devices array"""
 
     # check if it's already a suitable index
     if dev_name in devices:
 
     # check if it's already a suitable index
     if dev_name in devices:
@@ -366,23 +373,29 @@ def dev_id_from_dev_name(dev_name):
             if dev_name in devices[d]["Interface"].split(","):
                 return devices[d]["Slot"]
     # if nothing else matches - error
             if dev_name in devices[d]["Interface"].split(","):
                 return devices[d]["Slot"]
     # if nothing else matches - error
-    print("Unknown device: %s. "
-          "Please specify device in \"bus:slot.func\" format" % dev_name)
+    print(
+        "Unknown device: %s. "
+        'Please specify device in "bus:slot.func" format' % dev_name
+    )
     sys.exit(1)
 
 
 def unbind_one(dev_id, force):
     sys.exit(1)
 
 
 def unbind_one(dev_id, force):
-    '''Unbind the device identified by "dev_id" from its current driver'''
+    """Unbind the device identified by "dev_id" from its current driver"""
     dev = devices[dev_id]
     if not has_driver(dev_id):
     dev = devices[dev_id]
     if not has_driver(dev_id):
-        print("%s %s %s is not currently managed by any driver\n" %
-              (dev["Slot"], dev["Device_str"], dev["Interface"]))
+        print(
+            "%s %s %s is not currently managed by any driver\n"
+            % (dev["Slot"], dev["Device_str"], dev["Interface"])
+        )
         return
 
     # prevent us disconnecting ourselves
     if dev["Ssh_if"] and not force:
         return
 
     # prevent us disconnecting ourselves
     if dev["Ssh_if"] and not force:
-        print("Routing table indicates that interface %s is active. "
-              "Skipping unbind" % (dev_id))
+        print(
+            "Routing table indicates that interface %s is active. "
+            "Skipping unbind" % (dev_id)
+        )
         return
 
     # write to /sys to unbind
         return
 
     # write to /sys to unbind
@@ -390,30 +403,30 @@ def unbind_one(dev_id, force):
     try:
         f = open(filename, "a")
     except:
     try:
         f = open(filename, "a")
     except:
-        print("Error: unbind failed for %s - Cannot open %s"
-              % (dev_id, filename))
+        print("Error: unbind failed for %s - Cannot open %s" % (dev_id, filename))
         sys.exit(1)
     f.write(dev_id)
     f.close()
 
 
 def bind_one(dev_id, driver, force):
         sys.exit(1)
     f.write(dev_id)
     f.close()
 
 
 def bind_one(dev_id, driver, force):
-    '''Bind the device given by "dev_id" to the driver "driver". If the device
-    is already bound to a different driver, it will be unbound first'''
+    """Bind the device given by "dev_id" to the driver "driver". If the device
+    is already bound to a different driver, it will be unbound first"""
     dev = devices[dev_id]
     saved_driver = None  # used to rollback any unbind in case of failure
 
     # prevent disconnection of our ssh session
     if dev["Ssh_if"] and not force:
     dev = devices[dev_id]
     saved_driver = None  # used to rollback any unbind in case of failure
 
     # prevent disconnection of our ssh session
     if dev["Ssh_if"] and not force:
-        print("Routing table indicates that interface %s is active. "
-              "Not modifying" % (dev_id))
+        print(
+            "Routing table indicates that interface %s is active. "
+            "Not modifying" % (dev_id)
+        )
         return
 
     # unbind any existing drivers we don't want
     if has_driver(dev_id):
         if dev["Driver_str"] == driver:
         return
 
     # unbind any existing drivers we don't want
     if has_driver(dev_id):
         if dev["Driver_str"] == driver:
-            print("%s already bound to driver %s, skipping\n"
-                  % (dev_id, driver))
+            print("%s already bound to driver %s, skipping\n" % (dev_id, driver))
             return
         else:
             saved_driver = dev["Driver_str"]
             return
         else:
             saved_driver = dev["Driver_str"]
@@ -426,15 +439,16 @@ def bind_one(dev_id, driver, force):
         try:
             f = open(filename, "w")
         except:
         try:
             f = open(filename, "w")
         except:
-            print("Error: bind failed for %s - Cannot open %s"
-                  % (dev_id, filename))
+            print("Error: bind failed for %s - Cannot open %s" % (dev_id, filename))
             return
         try:
             f.write("%04x %04x" % (dev["Vendor"], dev["Device"]))
             f.close()
         except:
             return
         try:
             f.write("%04x %04x" % (dev["Vendor"], dev["Device"]))
             f.close()
         except:
-            print("Error: bind failed for %s - Cannot write new PCI ID to "
-                  "driver %s" % (dev_id, driver))
+            print(
+                "Error: bind failed for %s - Cannot write new PCI ID to "
+                "driver %s" % (dev_id, driver)
+            )
             return
 
     # do the bind by writing to /sys
             return
 
     # do the bind by writing to /sys
@@ -442,8 +456,7 @@ def bind_one(dev_id, driver, force):
     try:
         f = open(filename, "a")
     except:
     try:
         f = open(filename, "a")
     except:
-        print("Error: bind failed for %s - Cannot open %s"
-              % (dev_id, filename))
+        print("Error: bind failed for %s - Cannot open %s" % (dev_id, filename))
         if saved_driver is not None:  # restore any previous driver
             bind_one(dev_id, saved_driver, force)
         return
         if saved_driver is not None:  # restore any previous driver
             bind_one(dev_id, saved_driver, force)
         return
@@ -457,8 +470,7 @@ def bind_one(dev_id, driver, force):
         tmp = get_pci_device_details(dev_id)
         if "Driver_str" in tmp and tmp["Driver_str"] == driver:
             return
         tmp = get_pci_device_details(dev_id)
         if "Driver_str" in tmp and tmp["Driver_str"] == driver:
             return
-        print("Error: bind failed for %s - Cannot bind to driver %s"
-              % (dev_id, driver))
+        print("Error: bind failed for %s - Cannot bind to driver %s" % (dev_id, driver))
         if saved_driver is not None:  # restore any previous driver
             bind_one(dev_id, saved_driver, force)
         return
         if saved_driver is not None:  # restore any previous driver
             bind_one(dev_id, saved_driver, force)
         return
@@ -491,8 +503,7 @@ def bind_all(dev_list, driver, force=False):
             continue
 
         # update information about this device
             continue
 
         # update information about this device
-        devices[d] = dict(devices[d].items() +
-                          get_pci_device_details(d).items())
+        devices[d] = dict(devices[d].items() + get_pci_device_details(d).items())
 
         # check if updated information indicates that the device was bound
         if "Driver_str" in devices[d]:
 
         # check if updated information indicates that the device was bound
         if "Driver_str" in devices[d]:
@@ -500,20 +511,21 @@ def bind_all(dev_list, driver, force=False):
 
 
 def display_devices(title, dev_list, extra_params=None):
 
 
 def display_devices(title, dev_list, extra_params=None):
-    '''Displays to the user the details of a list of devices given in
+    """Displays to the user the details of a list of devices given in
     "dev_list". The "extra_params" parameter, if given, should contain a string
      with %()s fields in it for replacement by the named fields in each
     "dev_list". The "extra_params" parameter, if given, should contain a string
      with %()s fields in it for replacement by the named fields in each
-     device's dictionary.'''
+     device's dictionary."""
     strings = []  # this holds the strings to print. We sort before printing
     print("\n%s" % title)
     strings = []  # this holds the strings to print. We sort before printing
     print("\n%s" % title)
-    print("="*len(title))
+    print("=" * len(title))
     if len(dev_list) == 0:
         strings.append("<none>")
     else:
         for dev in dev_list:
             if extra_params is not None:
     if len(dev_list) == 0:
         strings.append("<none>")
     else:
         for dev in dev_list:
             if extra_params is not None:
-                strings.append("%s '%s' %s" % (dev["Slot"],
-                               dev["Device_str"], extra_params % dev))
+                strings.append(
+                    "%s '%s' %s" % (dev["Slot"], dev["Device_str"], extra_params % dev)
+                )
             else:
                 strings.append("%s '%s'" % (dev["Slot"], dev["Device_str"]))
     # sort before printing, so that the entries appear in PCI order
             else:
                 strings.append("%s '%s'" % (dev["Slot"], dev["Device_str"]))
     # sort before printing, so that the entries appear in PCI order
@@ -522,9 +534,9 @@ def display_devices(title, dev_list, extra_params=None):
 
 
 def show_status():
 
 
 def show_status():
-    '''Function called when the script is passed the "--status" option.
+    """Function called when the script is passed the "--status" option.
     Displays to the user what devices are bound to the igb_uio driver, the
     Displays to the user what devices are bound to the igb_uio driver, the
-    kernel driver or to no driver'''
+    kernel driver or to no driver"""
     global dpdk_drivers
     kernel_drv = []
     dpdk_drv = []
     global dpdk_drivers
     kernel_drv = []
     dpdk_drv = []
@@ -532,7 +544,7 @@ def show_status():
 
     # split our list of network devices into the three categories above
     for d in devices.keys():
 
     # split our list of network devices into the three categories above
     for d in devices.keys():
-        if (NETWORK_BASE_CLASS in devices[d]["Class"]):
+        if NETWORK_BASE_CLASS in devices[d]["Class"]:
             if not has_driver(d):
                 no_drv.append(devices[d])
                 continue
             if not has_driver(d):
                 no_drv.append(devices[d])
                 continue
@@ -542,11 +554,16 @@ def show_status():
                 kernel_drv.append(devices[d])
 
     # print each category separately, so we can clearly see what's used by DPDK
                 kernel_drv.append(devices[d])
 
     # print each category separately, so we can clearly see what's used by DPDK
-    display_devices("Network devices using DPDK-compatible driver", dpdk_drv,
-                    "drv=%(Driver_str)s unused=%(Module_str)s")
-    display_devices("Network devices using kernel driver", kernel_drv,
-                    "if=%(Interface)s drv=%(Driver_str)s "
-                    "unused=%(Module_str)s %(Active)s")
+    display_devices(
+        "Network devices using DPDK-compatible driver",
+        dpdk_drv,
+        "drv=%(Driver_str)s unused=%(Module_str)s",
+    )
+    display_devices(
+        "Network devices using kernel driver",
+        kernel_drv,
+        "if=%(Interface)s drv=%(Driver_str)s " "unused=%(Module_str)s %(Active)s",
+    )
     display_devices("Other network devices", no_drv, "unused=%(Module_str)s")
 
     # split our list of crypto devices into the three categories above
     display_devices("Other network devices", no_drv, "unused=%(Module_str)s")
 
     # split our list of crypto devices into the three categories above
@@ -555,7 +572,7 @@ def show_status():
     no_drv = []
 
     for d in devices.keys():
     no_drv = []
 
     for d in devices.keys():
-        if (CRYPTO_BASE_CLASS in devices[d]["Class"]):
+        if CRYPTO_BASE_CLASS in devices[d]["Class"]:
             if not has_driver(d):
                 no_drv.append(devices[d])
                 continue
             if not has_driver(d):
                 no_drv.append(devices[d])
                 continue
@@ -564,17 +581,22 @@ def show_status():
             else:
                 kernel_drv.append(devices[d])
 
             else:
                 kernel_drv.append(devices[d])
 
-    display_devices("Crypto devices using DPDK-compatible driver", dpdk_drv,
-                    "drv=%(Driver_str)s unused=%(Module_str)s")
-    display_devices("Crypto devices using kernel driver", kernel_drv,
-                    "drv=%(Driver_str)s "
-                    "unused=%(Module_str)s")
+    display_devices(
+        "Crypto devices using DPDK-compatible driver",
+        dpdk_drv,
+        "drv=%(Driver_str)s unused=%(Module_str)s",
+    )
+    display_devices(
+        "Crypto devices using kernel driver",
+        kernel_drv,
+        "drv=%(Driver_str)s " "unused=%(Module_str)s",
+    )
     display_devices("Other crypto devices", no_drv, "unused=%(Module_str)s")
 
 
 def parse_args():
     display_devices("Other crypto devices", no_drv, "unused=%(Module_str)s")
 
 
 def parse_args():
-    '''Parses the command-line arguments given by the user and takes the
-    appropriate action for each'''
+    """Parses the command-line arguments given by the user and takes the
+    appropriate action for each"""
     global b_flag
     global status_flag
     global force_flag
     global b_flag
     global status_flag
     global force_flag
@@ -584,9 +606,11 @@ def parse_args():
         sys.exit(0)
 
     try:
         sys.exit(0)
 
     try:
-        opts, args = getopt.getopt(sys.argv[1:], "b:us",
-                                   ["help", "usage", "status", "force",
-                                    "bind=", "unbind"])
+        opts, args = getopt.getopt(
+            sys.argv[1:],
+            "b:us",
+            ["help", "usage", "status", "force", "bind=", "unbind"],
+        )
     except getopt.GetoptError as error:
         print(str(error))
         print("Run '%s --usage' for further information" % sys.argv[0])
     except getopt.GetoptError as error:
         print(str(error))
         print("Run '%s --usage' for further information" % sys.argv[0])
@@ -611,15 +635,14 @@ def parse_args():
 
 
 def do_arg_actions():
 
 
 def do_arg_actions():
-    '''do the actual action requested by the user'''
+    """do the actual action requested by the user"""
     global b_flag
     global status_flag
     global force_flag
     global args
 
     if b_flag is None and not status_flag:
     global b_flag
     global status_flag
     global force_flag
     global args
 
     if b_flag is None and not status_flag:
-        print("Error: No action specified for devices."
-              "Please give a -b or -u option")
+        print("Error: No action specified for devices." "Please give a -b or -u option")
         print("Run '%s --usage' for further information" % sys.argv[0])
         sys.exit(1)
 
         print("Run '%s --usage' for further information" % sys.argv[0])
         sys.exit(1)
 
@@ -640,7 +663,7 @@ def do_arg_actions():
 
 
 def main():
 
 
 def main():
-    '''program main function'''
+    """program main function"""
     parse_args()
     check_modules()
     get_nic_details()
     parse_args()
     check_modules()
     get_nic_details()
index 64f75d7..010920b 100644 (file)
@@ -1,33 +1,31 @@
 from setuptools import setup
 
 from setuptools import setup
 
-setup(name="vpp_config",
-      version="20.05.1",
-      author="John DeNisco",
-      author_email="jdenisco@cisco.com",
-      description="VPP Configuration Utility",
-      license='Apache-2.0',
-      keywords="vppconfig",
-      url='https://wiki.fd.io/view/VPP',
-      py_modules=['vpp_config'],
-      install_requires=['distro', 'pyyaml', 'requests'],
-      extra_requires=["ipaddress; python_version < '3.3'"],
-      packages=['vpplib'],
-      entry_points={
-          'console_scripts': ['vpp-config=vpp_config:config_main'],
-      },
-      data_files=[('vpp/vpp-config/scripts', ['scripts/dpdk-devbind.py']),
-                  ('vpp/vpp-config/configs', ['data/auto-config.yaml']),
-                  ('vpp/vpp-config/configs', ['data/cloud-config.iso']),
-                  ('vpp/vpp-config/configs',
-                   ['data/iperf-centos.xml.template']),
-                  ('vpp/vpp-config/configs',
-                   ['data/iperf-ubuntu.xml.template']),
-                  ('vpp/vpp-config/dryrun/sysctl.d',
-                   ['data/80-vpp.conf.template']),
-                  ('vpp/vpp-config/dryrun/default', ['data/grub.template']),
-                  ('vpp/vpp-config/dryrun/vpp',
-                   ['data/startup.conf.template']),
-                  ],
-      long_description="The VPP configuration utility can be used to "
-                       "easily configure VPP.",
-      )
+setup(
+    name="vpp_config",
+    version="20.05.1",
+    author="John DeNisco",
+    author_email="jdenisco@cisco.com",
+    description="VPP Configuration Utility",
+    license="Apache-2.0",
+    keywords="vppconfig",
+    url="https://wiki.fd.io/view/VPP",
+    py_modules=["vpp_config"],
+    install_requires=["distro", "pyyaml", "requests"],
+    extra_requires=["ipaddress; python_version < '3.3'"],
+    packages=["vpplib"],
+    entry_points={
+        "console_scripts": ["vpp-config=vpp_config:config_main"],
+    },
+    data_files=[
+        ("vpp/vpp-config/scripts", ["scripts/dpdk-devbind.py"]),
+        ("vpp/vpp-config/configs", ["data/auto-config.yaml"]),
+        ("vpp/vpp-config/configs", ["data/cloud-config.iso"]),
+        ("vpp/vpp-config/configs", ["data/iperf-centos.xml.template"]),
+        ("vpp/vpp-config/configs", ["data/iperf-ubuntu.xml.template"]),
+        ("vpp/vpp-config/dryrun/sysctl.d", ["data/80-vpp.conf.template"]),
+        ("vpp/vpp-config/dryrun/default", ["data/grub.template"]),
+        ("vpp/vpp-config/dryrun/vpp", ["data/startup.conf.template"]),
+    ],
+    long_description="The VPP configuration utility can be used to "
+    "easily configure VPP.",
+)
index e863cde..7405130 100755 (executable)
@@ -32,16 +32,16 @@ try:
 except NameError:
     pass
 
 except NameError:
     pass
 
-VPP_DRYRUNDIR = '/vpp/vpp-config/dryrun'
-VPP_AUTO_CONFIGURATION_FILE = '/vpp/vpp-config/configs/auto-config.yaml'
-VPP_HUGE_PAGE_FILE = '/vpp/vpp-config/dryrun/sysctl.d/80-vpp.conf'
-VPP_STARTUP_FILE = '/vpp/vpp-config/dryrun/vpp/startup.conf'
-VPP_GRUB_FILE = '/vpp/vpp-config/dryrun/default/grub'
-VPP_REAL_HUGE_PAGE_FILE = '/etc/sysctl.d/80-vpp.conf'
-VPP_REAL_STARTUP_FILE = '/etc/vpp/startup.conf'
-VPP_REAL_GRUB_FILE = '/etc/default/grub'
+VPP_DRYRUNDIR = "/vpp/vpp-config/dryrun"
+VPP_AUTO_CONFIGURATION_FILE = "/vpp/vpp-config/configs/auto-config.yaml"
+VPP_HUGE_PAGE_FILE = "/vpp/vpp-config/dryrun/sysctl.d/80-vpp.conf"
+VPP_STARTUP_FILE = "/vpp/vpp-config/dryrun/vpp/startup.conf"
+VPP_GRUB_FILE = "/vpp/vpp-config/dryrun/default/grub"
+VPP_REAL_HUGE_PAGE_FILE = "/etc/sysctl.d/80-vpp.conf"
+VPP_REAL_STARTUP_FILE = "/etc/vpp/startup.conf"
+VPP_REAL_GRUB_FILE = "/etc/default/grub"
 
 
-rootdir = ''
+rootdir = ""
 
 
 def autoconfig_yn(question, default):
 
 
 def autoconfig_yn(question, default):
@@ -57,16 +57,16 @@ def autoconfig_yn(question, default):
     """
     input_valid = False
     default = default.lower()
     """
     input_valid = False
     default = default.lower()
-    answer = ''
+    answer = ""
     while not input_valid:
         answer = input(question)
         if len(answer) == 0:
             answer = default
     while not input_valid:
         answer = input(question)
         if len(answer) == 0:
             answer = default
-        if re.findall(r'[YyNn]', answer):
+        if re.findall(r"[YyNn]", answer):
             input_valid = True
             answer = answer[0].lower()
         else:
             input_valid = True
             answer = answer[0].lower()
         else:
-            print ("Please answer Y, N or Return.")
+            print("Please answer Y, N or Return.")
 
     return answer
 
 
     return answer
 
@@ -86,24 +86,21 @@ def autoconfig_cp(node, src, dst):
 
     # If the destination file exist, create a copy if one does not already
     # exist
 
     # If the destination file exist, create a copy if one does not already
     # exist
-    ofile = dst + '.orig'
-    (ret, stdout, stderr) = VPPUtil.exec_command('ls {}'.format(dst))
+    ofile = dst + ".orig"
+    (ret, stdout, stderr) = VPPUtil.exec_command("ls {}".format(dst))
     if ret == 0:
     if ret == 0:
-        cmd = 'cp {} {}'.format(dst, ofile)
+        cmd = "cp {} {}".format(dst, ofile)
         (ret, stdout, stderr) = VPPUtil.exec_command(cmd)
         if ret != 0:
         (ret, stdout, stderr) = VPPUtil.exec_command(cmd)
         if ret != 0:
-            raise RuntimeError('{} failed on node {} {} {}'.
-                               format(cmd,
-                                      node['host'],
-                                      stdout,
-                                      stderr))
+            raise RuntimeError(
+                "{} failed on node {} {} {}".format(cmd, node["host"], stdout, stderr)
+            )
 
     # Copy the source file
 
     # Copy the source file
-    cmd = 'cp {} {}'.format(src, os.path.dirname(dst))
+    cmd = "cp {} {}".format(src, os.path.dirname(dst))
     (ret, stdout, stderr) = VPPUtil.exec_command(cmd)
     if ret != 0:
     (ret, stdout, stderr) = VPPUtil.exec_command(cmd)
     if ret != 0:
-        raise RuntimeError('{} failed on node {} {}'.
-                           format(cmd, node['host'], stderr))
+        raise RuntimeError("{} failed on node {} {}".format(cmd, node["host"], stderr))
 
 
 def autoconfig_diff(node, src, dst):
 
 
 def autoconfig_diff(node, src, dst):
@@ -124,12 +121,10 @@ def autoconfig_diff(node, src, dst):
     # Diff the files and return the output
     cmd = "diff {} {}".format(src, dst)
     (ret, stdout, stderr) = VPPUtil.exec_command(cmd)
     # Diff the files and return the output
     cmd = "diff {} {}".format(src, dst)
     (ret, stdout, stderr) = VPPUtil.exec_command(cmd)
-    if stderr != '':
-        raise RuntimeError('{} failed on node {} {} {}'.
-                           format(cmd,
-                                  node['host'],
-                                  ret,
-                                  stderr))
+    if stderr != "":
+        raise RuntimeError(
+            "{} failed on node {} {} {}".format(cmd, node["host"], ret, stderr)
+        )
 
     return stdout
 
 
     return stdout
 
@@ -160,13 +155,15 @@ def autoconfig_hugepage_apply(node, ask_questions=True):
     """
 
     diffs = autoconfig_diff(node, VPP_REAL_HUGE_PAGE_FILE, rootdir + VPP_HUGE_PAGE_FILE)
     """
 
     diffs = autoconfig_diff(node, VPP_REAL_HUGE_PAGE_FILE, rootdir + VPP_HUGE_PAGE_FILE)
-    if diffs != '':
-        print ("These are the changes we will apply to")
-        print ("the huge page file ({}).\n".format(VPP_REAL_HUGE_PAGE_FILE))
-        print (diffs)
+    if diffs != "":
+        print("These are the changes we will apply to")
+        print("the huge page file ({}).\n".format(VPP_REAL_HUGE_PAGE_FILE))
+        print(diffs)
         if ask_questions:
         if ask_questions:
-            answer = autoconfig_yn("\nAre you sure you want to apply these changes [Y/n]? ", 'y')
-            if answer == 'n':
+            answer = autoconfig_yn(
+                "\nAre you sure you want to apply these changes [Y/n]? ", "y"
+            )
+            if answer == "n":
                 return -1
 
         # Copy and sysctl
                 return -1
 
         # Copy and sysctl
@@ -174,10 +171,11 @@ def autoconfig_hugepage_apply(node, ask_questions=True):
         cmd = "sysctl -p {}".format(VPP_REAL_HUGE_PAGE_FILE)
         (ret, stdout, stderr) = VPPUtil.exec_command(cmd)
         if ret != 0:
         cmd = "sysctl -p {}".format(VPP_REAL_HUGE_PAGE_FILE)
         (ret, stdout, stderr) = VPPUtil.exec_command(cmd)
         if ret != 0:
-            raise RuntimeError('{} failed on node {} {} {}'.
-                               format(cmd, node['host'], stdout, stderr))
+            raise RuntimeError(
+                "{} failed on node {} {} {}".format(cmd, node["host"], stdout, stderr)
+            )
     else:
     else:
-        print ('\nThere are no changes to the huge page configuration.')
+        print("\nThere are no changes to the huge page configuration.")
 
     return 0
 
 
     return 0
 
@@ -196,19 +194,21 @@ def autoconfig_vpp_apply(node, ask_questions=True):
     """
 
     diffs = autoconfig_diff(node, VPP_REAL_STARTUP_FILE, rootdir + VPP_STARTUP_FILE)
     """
 
     diffs = autoconfig_diff(node, VPP_REAL_STARTUP_FILE, rootdir + VPP_STARTUP_FILE)
-    if diffs != '':
-        print ("These are the changes we will apply to")
-        print ("the VPP startup file ({}).\n".format(VPP_REAL_STARTUP_FILE))
-        print (diffs)
+    if diffs != "":
+        print("These are the changes we will apply to")
+        print("the VPP startup file ({}).\n".format(VPP_REAL_STARTUP_FILE))
+        print(diffs)
         if ask_questions:
         if ask_questions:
-            answer = autoconfig_yn("\nAre you sure you want to apply these changes [Y/n]? ", 'y')
-            if answer == 'n':
+            answer = autoconfig_yn(
+                "\nAre you sure you want to apply these changes [Y/n]? ", "y"
+            )
+            if answer == "n":
                 return -1
 
         # Copy the VPP startup
         autoconfig_cp(node, rootdir + VPP_STARTUP_FILE, VPP_REAL_STARTUP_FILE)
     else:
                 return -1
 
         # Copy the VPP startup
         autoconfig_cp(node, rootdir + VPP_STARTUP_FILE, VPP_REAL_STARTUP_FILE)
     else:
-        print ('\nThere are no changes to VPP startup.')
+        print("\nThere are no changes to VPP startup.")
 
     return 0
 
 
     return 0
 
@@ -226,49 +226,52 @@ def autoconfig_grub_apply(node, ask_questions=True):
 
     """
 
 
     """
 
-    print ("\nThe configured grub cmdline looks like this:")
-    configured_cmdline = node['grub']['default_cmdline']
-    current_cmdline = node['grub']['current_cmdline']
-    print (configured_cmdline)
-    print ("\nThe current boot cmdline looks like this:")
-    print (current_cmdline)
+    print("\nThe configured grub cmdline looks like this:")
+    configured_cmdline = node["grub"]["default_cmdline"]
+    current_cmdline = node["grub"]["current_cmdline"]
+    print(configured_cmdline)
+    print("\nThe current boot cmdline looks like this:")
+    print(current_cmdline)
     if ask_questions:
         question = "\nDo you want to keep the current boot cmdline [Y/n]? "
     if ask_questions:
         question = "\nDo you want to keep the current boot cmdline [Y/n]? "
-        answer = autoconfig_yn(question, 'y')
-        if answer == 'y':
+        answer = autoconfig_yn(question, "y")
+        if answer == "y":
             return
 
             return
 
-    node['grub']['keep_cmdline'] = False
+    node["grub"]["keep_cmdline"] = False
 
     # Diff the file
     diffs = autoconfig_diff(node, VPP_REAL_GRUB_FILE, rootdir + VPP_GRUB_FILE)
 
     # Diff the file
     diffs = autoconfig_diff(node, VPP_REAL_GRUB_FILE, rootdir + VPP_GRUB_FILE)
-    if diffs != '':
-        print ("These are the changes we will apply to")
-        print ("the GRUB file ({}).\n".format(VPP_REAL_GRUB_FILE))
-        print (diffs)
+    if diffs != "":
+        print("These are the changes we will apply to")
+        print("the GRUB file ({}).\n".format(VPP_REAL_GRUB_FILE))
+        print(diffs)
         if ask_questions:
         if ask_questions:
-            answer = autoconfig_yn("\nAre you sure you want to apply these changes [y/N]? ", 'n')
-            if answer == 'n':
+            answer = autoconfig_yn(
+                "\nAre you sure you want to apply these changes [y/N]? ", "n"
+            )
+            if answer == "n":
                 return -1
 
         # Copy and update grub
         autoconfig_cp(node, rootdir + VPP_GRUB_FILE, VPP_REAL_GRUB_FILE)
         distro = VPPUtil.get_linux_distro()
                 return -1
 
         # Copy and update grub
         autoconfig_cp(node, rootdir + VPP_GRUB_FILE, VPP_REAL_GRUB_FILE)
         distro = VPPUtil.get_linux_distro()
-        if distro[0] == 'Ubuntu':
+        if distro[0] == "Ubuntu":
             cmd = "update-grub"
         else:
             cmd = "grub2-mkconfig -o /boot/grub2/grub.cfg"
 
         (ret, stdout, stderr) = VPPUtil.exec_command(cmd)
         if ret != 0:
             cmd = "update-grub"
         else:
             cmd = "grub2-mkconfig -o /boot/grub2/grub.cfg"
 
         (ret, stdout, stderr) = VPPUtil.exec_command(cmd)
         if ret != 0:
-            raise RuntimeError('{} failed on node {} {} {}'.
-                               format(cmd, node['host'], stdout, stderr))
+            raise RuntimeError(
+                "{} failed on node {} {} {}".format(cmd, node["host"], stdout, stderr)
+            )
 
 
-        print ("There have been changes to the GRUB config a", end=' ')
-        print ("reboot will be required.")
+        print("There have been changes to the GRUB config a", end=" ")
+        print("reboot will be required.")
         return -1
     else:
         return -1
     else:
-        print ('\nThere are no changes to the GRUB config.')
+        print("\nThere are no changes to the GRUB config.")
 
     return 0
 
 
     return 0
 
@@ -289,15 +292,15 @@ def autoconfig_apply(ask_questions=True):
     vutil = VPPUtil()
     pkgs = vutil.get_installed_vpp_pkgs()
     if len(pkgs) == 0:
     vutil = VPPUtil()
     pkgs = vutil.get_installed_vpp_pkgs()
     if len(pkgs) == 0:
-        print ("\nVPP is not installed, Install VPP with option 4.")
+        print("\nVPP is not installed, Install VPP with option 4.")
         return
 
     acfg = AutoConfig(rootdir, VPP_AUTO_CONFIGURATION_FILE)
 
     if ask_questions:
         return
 
     acfg = AutoConfig(rootdir, VPP_AUTO_CONFIGURATION_FILE)
 
     if ask_questions:
-        print ("\nWe are now going to configure your system(s).\n")
-        answer = autoconfig_yn("Are you sure you want to do this [Y/n]? ", 'y')
-        if answer == 'n':
+        print("\nWe are now going to configure your system(s).\n")
+        answer = autoconfig_yn("Are you sure you want to do this [Y/n]? ", "y")
+        if answer == "n":
             return
 
     nodes = acfg.get_nodes()
             return
 
     nodes = acfg.get_nodes()
@@ -369,7 +372,9 @@ def autoconfig_dryrun(ask_questions=True):
     for i in nodes.items():
         node = i[1]
         if not acfg.has_interfaces(node):
     for i in nodes.items():
         node = i[1]
         if not acfg.has_interfaces(node):
-            print("\nThere are no VPP interfaces configured, please configure at least 1.")
+            print(
+                "\nThere are no VPP interfaces configured, please configure at least 1."
+            )
             return
 
     # Modify CPU
             return
 
     # Modify CPU
@@ -414,34 +419,31 @@ def autoconfig_install():
         pkgs = vutil.get_installed_vpp_pkgs()
 
         if len(pkgs) > 0:
         pkgs = vutil.get_installed_vpp_pkgs()
 
         if len(pkgs) > 0:
-            print ("\nThese packages are installed on node {}"
-                   .format(node['host']))
-            print ("{:25} {}".format("Name", "Version"))
+            print("\nThese packages are installed on node {}".format(node["host"]))
+            print("{:25} {}".format("Name", "Version"))
             for pkg in pkgs:
                 try:
             for pkg in pkgs:
                 try:
-                    print ("{:25} {}".format(
-                        pkg['name'], pkg['version']))
+                    print("{:25} {}".format(pkg["name"], pkg["version"]))
                 except KeyError:
                 except KeyError:
-                    print ("{}".format(pkg['name']))
+                    print("{}".format(pkg["name"]))
 
             question = "\nDo you want to uninstall these "
             question += "packages [y/N]? "
 
             question = "\nDo you want to uninstall these "
             question += "packages [y/N]? "
-            answer = autoconfig_yn(question, 'n')
-            if answer == 'y':
+            answer = autoconfig_yn(question, "n")
+            if answer == "y":
                 logger.setLevel(logging.INFO)
                 vutil.uninstall_vpp(node)
         else:
                 logger.setLevel(logging.INFO)
                 vutil.uninstall_vpp(node)
         else:
-            print ("\nThere are no VPP packages on node {}."
-                   .format(node['host']))
+            print("\nThere are no VPP packages on node {}.".format(node["host"]))
             question = "Do you want to install VPP [Y/n]? "
             question = "Do you want to install VPP [Y/n]? "
-            answer = autoconfig_yn(question, 'y')
-            if answer == 'y':
+            answer = autoconfig_yn(question, "y")
+            if answer == "y":
                 question = "Do you want to install the release version [Y/n]? "
                 question = "Do you want to install the release version [Y/n]? "
-                answer = autoconfig_yn(question, 'y')
-                if answer == 'y':
-                    branch = 'release'
+                answer = autoconfig_yn(question, "y")
+                if answer == "y":
+                    branch = "release"
                 else:
                 else:
-                    branch = 'master'
+                    branch = "master"
                 logger.setLevel(logging.INFO)
                 vutil.install_vpp(node, branch)
 
                 logger.setLevel(logging.INFO)
                 vutil.install_vpp(node, branch)
 
@@ -486,9 +488,9 @@ def autoconfig_create_iperf_vm():
     """
 
     acfg = AutoConfig(rootdir, VPP_AUTO_CONFIGURATION_FILE)
     """
 
     acfg = AutoConfig(rootdir, VPP_AUTO_CONFIGURATION_FILE)
-    acfg.destroy_iperf_vm('iperf-server')
+    acfg.destroy_iperf_vm("iperf-server")
     acfg.create_and_bridge_iperf_virtual_interface()
     acfg.create_and_bridge_iperf_virtual_interface()
-    acfg.create_iperf_vm('iperf-server')
+    acfg.create_iperf_vm("iperf-server")
 
 
 def autoconfig_not_implemented():
 
 
 def autoconfig_not_implemented():
@@ -497,7 +499,7 @@ def autoconfig_not_implemented():
 
     """
 
 
     """
 
-    print ("\nThis Feature is not implemented yet....")
+    print("\nThis Feature is not implemented yet....")
 
 
 def autoconfig_basic_test_menu():
 
 
 def autoconfig_basic_test_menu():
@@ -506,28 +508,28 @@ def autoconfig_basic_test_menu():
 
     """
 
 
     """
 
-    basic_menu_text = '\nWhat would you like to do?\n\n\
+    basic_menu_text = "\nWhat would you like to do?\n\n\
 1) List/Create Simple IPv4 Setup\n\
 2) Create an iperf VM and Connect to VPP an interface\n\
 1) List/Create Simple IPv4 Setup\n\
 2) Create an iperf VM and Connect to VPP an interface\n\
-9 or q) Back to main menu.'
+9 or q) Back to main menu."
 
 
-    print ("{}".format(basic_menu_text))
+    print("{}".format(basic_menu_text))
 
     input_valid = False
 
     input_valid = False
-    answer = ''
+    answer = ""
     while not input_valid:
         answer = input("\nCommand: ")
         if len(answer) > 1:
     while not input_valid:
         answer = input("\nCommand: ")
         if len(answer) > 1:
-            print ("Please enter only 1 character.")
+            print("Please enter only 1 character.")
             continue
             continue
-        if re.findall(r'[Qq1-29]', answer):
+        if re.findall(r"[Qq1-29]", answer):
             input_valid = True
             answer = answer[0].lower()
         else:
             input_valid = True
             answer = answer[0].lower()
         else:
-            print ("Please enter a character between 1 and 2 or 9.")
+            print("Please enter a character between 1 and 2 or 9.")
 
 
-        if answer == '9':
-            answer = 'q'
+        if answer == "9":
+            answer = "q"
 
     return answer
 
 
     return answer
 
@@ -540,17 +542,17 @@ def autoconfig_basic_test():
     vutil = VPPUtil()
     pkgs = vutil.get_installed_vpp_pkgs()
     if len(pkgs) == 0:
     vutil = VPPUtil()
     pkgs = vutil.get_installed_vpp_pkgs()
     if len(pkgs) == 0:
-        print ("\nVPP is not installed, install VPP with option 4.")
+        print("\nVPP is not installed, install VPP with option 4.")
         return
 
         return
 
-    answer = ''
-    while answer != 'q':
+    answer = ""
+    while answer != "q":
         answer = autoconfig_basic_test_menu()
         answer = autoconfig_basic_test_menu()
-        if answer == '1':
+        if answer == "1":
             autoconfig_ipv4_setup()
             autoconfig_ipv4_setup()
-        elif answer == '2':
+        elif answer == "2":
             autoconfig_create_iperf_vm()
             autoconfig_create_iperf_vm()
-        elif answer == '9' or answer == 'q':
+        elif answer == "9" or answer == "q":
             return
         else:
             autoconfig_not_implemented()
             return
         else:
             autoconfig_not_implemented()
@@ -562,30 +564,32 @@ def autoconfig_main_menu():
 
     """
 
 
     """
 
-    main_menu_text = '\nWhat would you like to do?\n\n\
+    main_menu_text = "\nWhat would you like to do?\n\n\
 1) Show basic system information\n\
 2) Dry Run (Saves the configuration files in {}/vpp/vpp-config/dryrun.\n\
 3) Full configuration (WARNING: This will change the system configuration)\n\
 4) List/Install/Uninstall VPP.\n\
 1) Show basic system information\n\
 2) Dry Run (Saves the configuration files in {}/vpp/vpp-config/dryrun.\n\
 3) Full configuration (WARNING: This will change the system configuration)\n\
 4) List/Install/Uninstall VPP.\n\
-q) Quit'.format(rootdir, rootdir)
+q) Quit".format(
+        rootdir, rootdir
+    )
 
     # 5) Dry Run from {}/vpp/vpp-config/auto-config.yaml (will not ask questions).\n\
     # 6) Install QEMU patch (Needed when running openstack).\n\
 
 
     # 5) Dry Run from {}/vpp/vpp-config/auto-config.yaml (will not ask questions).\n\
     # 6) Install QEMU patch (Needed when running openstack).\n\
 
-    print ("{}".format(main_menu_text))
+    print("{}".format(main_menu_text))
 
     input_valid = False
 
     input_valid = False
-    answer = ''
+    answer = ""
     while not input_valid:
         answer = input("\nCommand: ")
         if len(answer) > 1:
     while not input_valid:
         answer = input("\nCommand: ")
         if len(answer) > 1:
-            print ("Please enter only 1 character.")
+            print("Please enter only 1 character.")
             continue
             continue
-        if re.findall(r'[Qq1-4]', answer):
+        if re.findall(r"[Qq1-4]", answer):
             input_valid = True
             answer = answer[0].lower()
         else:
             input_valid = True
             answer = answer[0].lower()
         else:
-            print ("Please enter a character between 1 and 4 or q.")
+            print("Please enter a character between 1 and 4 or q.")
 
     return answer
 
 
     return answer
 
@@ -599,18 +603,18 @@ def autoconfig_main():
     # Setup
     autoconfig_setup()
 
     # Setup
     autoconfig_setup()
 
-    answer = ''
-    while answer != 'q':
+    answer = ""
+    while answer != "q":
         answer = autoconfig_main_menu()
         answer = autoconfig_main_menu()
-        if answer == '1':
+        if answer == "1":
             autoconfig_show_system()
             autoconfig_show_system()
-        elif answer == '2':
+        elif answer == "2":
             autoconfig_dryrun()
             autoconfig_dryrun()
-        elif answer == '3':
+        elif answer == "3":
             autoconfig_apply()
             autoconfig_apply()
-        elif answer == '4':
+        elif answer == "4":
             autoconfig_install()
             autoconfig_install()
-        elif answer == 'q':
+        elif answer == "q":
             return
         else:
             autoconfig_not_implemented()
             return
         else:
             autoconfig_not_implemented()
@@ -627,53 +631,65 @@ def autoconfig_setup(ask_questions=True):
     global rootdir
 
     distro = VPPUtil.get_linux_distro()
     global rootdir
 
     distro = VPPUtil.get_linux_distro()
-    if distro[0] == 'Ubuntu':
-        rootdir = '/usr/local'
+    if distro[0] == "Ubuntu":
+        rootdir = "/usr/local"
     else:
     else:
-        rootdir = '/usr'
+        rootdir = "/usr"
 
     # If there is a system configuration file use that, if not use the initial auto-config file
     filename = rootdir + VPP_AUTO_CONFIGURATION_FILE
     if os.path.isfile(filename) is True:
         acfg = AutoConfig(rootdir, VPP_AUTO_CONFIGURATION_FILE)
     else:
 
     # If there is a system configuration file use that, if not use the initial auto-config file
     filename = rootdir + VPP_AUTO_CONFIGURATION_FILE
     if os.path.isfile(filename) is True:
         acfg = AutoConfig(rootdir, VPP_AUTO_CONFIGURATION_FILE)
     else:
-        raise RuntimeError('The Auto configuration file does not exist {}'.
-                           format(filename))
+        raise RuntimeError(
+            "The Auto configuration file does not exist {}".format(filename)
+        )
 
     if ask_questions:
 
     if ask_questions:
-        print ("\nWelcome to the VPP system configuration utility")
+        print("\nWelcome to the VPP system configuration utility")
 
 
-        print ("\nThese are the files we will modify:")
-        print ("    /etc/vpp/startup.conf")
-        print ("    /etc/sysctl.d/80-vpp.conf")
-        print ("    /etc/default/grub")
+        print("\nThese are the files we will modify:")
+        print("    /etc/vpp/startup.conf")
+        print("    /etc/sysctl.d/80-vpp.conf")
+        print("    /etc/default/grub")
 
 
-        print (
+        print(
             "\nBefore we change them, we'll create working copies in "
             "\nBefore we change them, we'll create working copies in "
-            "{}".format(rootdir + VPP_DRYRUNDIR))
-        print (
+            "{}".format(rootdir + VPP_DRYRUNDIR)
+        )
+        print(
             "Please inspect them carefully before applying the actual "
             "Please inspect them carefully before applying the actual "
-            "configuration (option 3)!")
+            "configuration (option 3)!"
+        )
 
     nodes = acfg.get_nodes()
     for i in nodes.items():
         node = i[1]
 
 
     nodes = acfg.get_nodes()
     for i in nodes.items():
         node = i[1]
 
-        if (os.path.isfile(rootdir + VPP_STARTUP_FILE) is not True) and \
-                (os.path.isfile(VPP_REAL_STARTUP_FILE) is True):
-            autoconfig_cp(node, VPP_REAL_STARTUP_FILE, '{}'.format(rootdir + VPP_STARTUP_FILE))
-        if (os.path.isfile(rootdir + VPP_HUGE_PAGE_FILE) is not True) and \
-                (os.path.isfile(VPP_REAL_HUGE_PAGE_FILE) is True):
-            autoconfig_cp(node, VPP_REAL_HUGE_PAGE_FILE, '{}'.format(rootdir + VPP_HUGE_PAGE_FILE))
-        if (os.path.isfile(rootdir + VPP_GRUB_FILE) is not True) and \
-                (os.path.isfile(VPP_REAL_GRUB_FILE) is True):
-            autoconfig_cp(node, VPP_REAL_GRUB_FILE, '{}'.format(rootdir + VPP_GRUB_FILE))
+        if (os.path.isfile(rootdir + VPP_STARTUP_FILE) is not True) and (
+            os.path.isfile(VPP_REAL_STARTUP_FILE) is True
+        ):
+            autoconfig_cp(
+                node, VPP_REAL_STARTUP_FILE, "{}".format(rootdir + VPP_STARTUP_FILE)
+            )
+        if (os.path.isfile(rootdir + VPP_HUGE_PAGE_FILE) is not True) and (
+            os.path.isfile(VPP_REAL_HUGE_PAGE_FILE) is True
+        ):
+            autoconfig_cp(
+                node, VPP_REAL_HUGE_PAGE_FILE, "{}".format(rootdir + VPP_HUGE_PAGE_FILE)
+            )
+        if (os.path.isfile(rootdir + VPP_GRUB_FILE) is not True) and (
+            os.path.isfile(VPP_REAL_GRUB_FILE) is True
+        ):
+            autoconfig_cp(
+                node, VPP_REAL_GRUB_FILE, "{}".format(rootdir + VPP_GRUB_FILE)
+            )
 
         # Be sure the uio_pci_generic driver is installed
 
         # Be sure the uio_pci_generic driver is installed
-        cmd = 'modprobe uio_pci_generic'
+        cmd = "modprobe uio_pci_generic"
         (ret, stdout, stderr) = VPPUtil.exec_command(cmd)
         if ret != 0:
         (ret, stdout, stderr) = VPPUtil.exec_command(cmd)
         if ret != 0:
-            logging.warning('{} failed on node {} {}'. format(cmd, node['host'], stderr))
+            logging.warning("{} failed on node {} {}".format(cmd, node["host"], stderr))
 
 
 # noinspection PyUnresolvedReferences
 
 
 # noinspection PyUnresolvedReferences
@@ -707,10 +723,9 @@ def config_main():
 
     # Check for root
     if not os.geteuid() == 0:
 
     # Check for root
     if not os.geteuid() == 0:
-        sys.exit('\nPlease run the VPP Configuration Utility as root.')
+        sys.exit("\nPlease run the VPP Configuration Utility as root.")
 
 
-    if len(sys.argv) > 1 and ((sys.argv[1] == '-d') or (
-            sys.argv[1] == '--debug')):
+    if len(sys.argv) > 1 and ((sys.argv[1] == "-d") or (sys.argv[1] == "--debug")):
         logging.basicConfig(level=logging.DEBUG)
     else:
         logging.basicConfig(level=logging.ERROR)
         logging.basicConfig(level=logging.DEBUG)
     else:
         logging.basicConfig(level=logging.ERROR)
@@ -720,37 +735,44 @@ def config_main():
     if len(sys.argv) == 1:
         autoconfig_main()
         return
     if len(sys.argv) == 1:
         autoconfig_main()
         return
-    elif len(sys.argv) == 2 and ((sys.argv[1] == '-d') or (
-            sys.argv[1] == '--debug')):
+    elif len(sys.argv) == 2 and ((sys.argv[1] == "-d") or (sys.argv[1] == "--debug")):
         autoconfig_main()
         return
 
     # There were arguments specified, so execute the utility using
     # command line arguments
         autoconfig_main()
         return
 
     # There were arguments specified, so execute the utility using
     # command line arguments
-    description = 'The VPP configuration utility allows the user to '
-    'configure VPP in a simple and safe manner. The utility takes input '
-    'from the user or the specified .yaml file. The user should then '
-    'examine these files to be sure they are correct and then actually '
-    'apply the configuration. When run without arguments the utility run '
-    'in an interactive mode'
+    description = "The VPP configuration utility allows the user to "
+    "configure VPP in a simple and safe manner. The utility takes input "
+    "from the user or the specified .yaml file. The user should then "
+    "examine these files to be sure they are correct and then actually "
+    "apply the configuration. When run without arguments the utility run "
+    "in an interactive mode"
 
     main_parser = argparse.ArgumentParser(
 
     main_parser = argparse.ArgumentParser(
-        prog='arg-test',
+        prog="arg-test",
         description=description,
         description=description,
-        epilog='See "%(prog)s help COMMAND" for help on a specific command.')
-    main_parser.add_argument('--apply', '-a', action='store_true',
-                             help='Apply the cofiguration.')
-    main_parser.add_argument('--dry-run', '-dr', action='store_true',
-                             help='Create the dryrun configuration files.')
-    main_parser.add_argument('--show', '-s', action='store_true',
-                             help='Shows basic system information')
-    main_parser.add_argument('--debug', '-d', action='count',
-                             help='Print debug output (multiple levels)')
+        epilog='See "%(prog)s help COMMAND" for help on a specific command.',
+    )
+    main_parser.add_argument(
+        "--apply", "-a", action="store_true", help="Apply the cofiguration."
+    )
+    main_parser.add_argument(
+        "--dry-run",
+        "-dr",
+        action="store_true",
+        help="Create the dryrun configuration files.",
+    )
+    main_parser.add_argument(
+        "--show", "-s", action="store_true", help="Shows basic system information"
+    )
+    main_parser.add_argument(
+        "--debug", "-d", action="count", help="Print debug output (multiple levels)"
+    )
 
     args = main_parser.parse_args()
 
     return execute_with_args(args)
 
 
 
     args = main_parser.parse_args()
 
     return execute_with_args(args)
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     config_main()
     config_main()
index 62f18e2..9a79039 100644 (file)
@@ -41,9 +41,9 @@ MIN_SYSTEM_CPUS = 2
 MIN_TOTAL_HUGE_PAGES = 1024
 MAX_PERCENT_FOR_HUGE_PAGES = 70
 
 MIN_TOTAL_HUGE_PAGES = 1024
 MAX_PERCENT_FOR_HUGE_PAGES = 70
 
-IPERFVM_XML = 'configs/iperf-vm.xml'
-IPERFVM_IMAGE = 'images/xenial-mod.img'
-IPERFVM_ISO = 'configs/cloud-config.iso'
+IPERFVM_XML = "configs/iperf-vm.xml"
+IPERFVM_IMAGE = "images/xenial-mod.img"
+IPERFVM_ISO = "configs/cloud-config.iso"
 
 
 class AutoConfig(object):
 
 
 class AutoConfig(object):
@@ -90,12 +90,12 @@ class AutoConfig(object):
         """
 
         # Does a copy of the file exist, if not create one
         """
 
         # Does a copy of the file exist, if not create one
-        ofile = filename + '.orig'
-        (ret, stdout, stderr) = VPPUtil.exec_command('ls {}'.format(ofile))
+        ofile = filename + ".orig"
+        (ret, stdout, stderr) = VPPUtil.exec_command("ls {}".format(ofile))
         if ret != 0:
             logging.debug(stderr)
         if ret != 0:
             logging.debug(stderr)
-            if stdout.strip('\n') != ofile:
-                cmd = 'sudo cp {} {}'.format(filename, ofile)
+            if stdout.strip("\n") != ofile:
+                cmd = "sudo cp {} {}".format(filename, ofile)
                 (ret, stdout, stderr) = VPPUtil.exec_command(cmd)
                 if ret != 0:
                     logging.debug(stderr)
                 (ret, stdout, stderr) = VPPUtil.exec_command(cmd)
                 if ret != 0:
                     logging.debug(stderr)
@@ -114,14 +114,14 @@ class AutoConfig(object):
         while True:
             answer = input("Please enter the IPv4 Address [n.n.n.n/n]: ")
             try:
         while True:
             answer = input("Please enter the IPv4 Address [n.n.n.n/n]: ")
             try:
-                ipinput = answer.split('/')
+                ipinput = answer.split("/")
                 ipaddr = ip_address(ipinput[0])
                 if len(ipinput) > 1:
                 ipaddr = ip_address(ipinput[0])
                 if len(ipinput) > 1:
-                    plen = answer.split('/')[1]
+                    plen = answer.split("/")[1]
                 else:
                     answer = input("Please enter the netmask [n.n.n.n]: ")
                     plen = ip_address(answer).netmask_bits()
                 else:
                     answer = input("Please enter the netmask [n.n.n.n]: ")
                     plen = ip_address(answer).netmask_bits()
-                return '{}/{}'.format(ipaddr, plen)
+                return "{}/{}".format(ipaddr, plen)
             except ValueError:
                 print("Please enter a valid IPv4 address.")
 
             except ValueError:
                 print("Please enter a valid IPv4 address.")
 
@@ -145,18 +145,22 @@ class AutoConfig(object):
 
         while True:
             answer = input(question)
 
         while True:
             answer = input(question)
-            if answer == '':
+            if answer == "":
                 answer = default
                 break
                 answer = default
                 break
-            if re.findall(r'[0-9+]', answer):
+            if re.findall(r"[0-9+]", answer):
                 if int(answer) in range(first, last + 1):
                     break
                 else:
                 if int(answer) in range(first, last + 1):
                     break
                 else:
-                    print("Please a value between {} and {} or Return.".
-                          format(first, last))
+                    print(
+                        "Please a value between {} and {} or Return.".format(
+                            first, last
+                        )
+                    )
             else:
             else:
-                print("Please a number between {} and {} or Return.".
-                      format(first, last))
+                print(
+                    "Please a number between {} and {} or Return.".format(first, last)
+                )
 
         return int(answer)
 
 
         return int(answer)
 
@@ -175,12 +179,12 @@ class AutoConfig(object):
 
         input_valid = False
         default = default.lower()
 
         input_valid = False
         default = default.lower()
-        answer = ''
+        answer = ""
         while not input_valid:
             answer = input(question)
         while not input_valid:
             answer = input(question)
-            if answer == '':
+            if answer == "":
                 answer = default
                 answer = default
-            if re.findall(r'[YyNn]', answer):
+            if re.findall(r"[YyNn]", answer):
                 input_valid = True
                 answer = answer[0].lower()
             else:
                 input_valid = True
                 answer = answer[0].lower()
             else:
@@ -196,36 +200,40 @@ class AutoConfig(object):
 
         # Get the Topology, from the topology layout file
         topo = {}
 
         # Get the Topology, from the topology layout file
         topo = {}
-        with open(self._autoconfig_filename, 'r') as stream:
+        with open(self._autoconfig_filename, "r") as stream:
             try:
                 topo = yaml.load(stream)
             try:
                 topo = yaml.load(stream)
-                if 'metadata' in topo:
-                    self._metadata = topo['metadata']
+                if "metadata" in topo:
+                    self._metadata = topo["metadata"]
             except yaml.YAMLError as exc:
                 raise RuntimeError(
                     "Couldn't read the Auto config file {}.".format(
             except yaml.YAMLError as exc:
                 raise RuntimeError(
                     "Couldn't read the Auto config file {}.".format(
-                        self._autoconfig_filename, exc))
+                        self._autoconfig_filename, exc
+                    )
+                )
 
 
-        systemfile = self._rootdir + self._metadata['system_config_file']
+        systemfile = self._rootdir + self._metadata["system_config_file"]
         if self._clean is False and os.path.isfile(systemfile):
         if self._clean is False and os.path.isfile(systemfile):
-            with open(systemfile, 'r') as sysstream:
+            with open(systemfile, "r") as sysstream:
                 try:
                     systopo = yaml.load(sysstream)
                 try:
                     systopo = yaml.load(sysstream)
-                    if 'nodes' in systopo:
-                        self._nodes = systopo['nodes']
+                    if "nodes" in systopo:
+                        self._nodes = systopo["nodes"]
                 except yaml.YAMLError as sysexc:
                     raise RuntimeError(
                         "Couldn't read the System config file {}.".format(
                 except yaml.YAMLError as sysexc:
                     raise RuntimeError(
                         "Couldn't read the System config file {}.".format(
-                            systemfile, sysexc))
+                            systemfile, sysexc
+                        )
+                    )
         else:
             # Get the nodes from Auto Config
         else:
             # Get the nodes from Auto Config
-            if 'nodes' in topo:
-                self._nodes = topo['nodes']
+            if "nodes" in topo:
+                self._nodes = topo["nodes"]
 
         # Set the root directory in all the nodes
         for i in self._nodes.items():
             node = i[1]
 
         # Set the root directory in all the nodes
         for i in self._nodes.items():
             node = i[1]
-            node['rootdir'] = self._rootdir
+            node["rootdir"] = self._rootdir
 
     def updateconfig(self):
         """
 
     def updateconfig(self):
         """
@@ -236,11 +244,11 @@ class AutoConfig(object):
         """
 
         # Initialize the yaml data
         """
 
         # Initialize the yaml data
-        ydata = {'metadata': self._metadata, 'nodes': self._nodes}
+        ydata = {"metadata": self._metadata, "nodes": self._nodes}
 
         # Write the system config file
 
         # Write the system config file
-        filename = self._rootdir + self._metadata['system_config_file']
-        with open(filename, 'w') as yamlfile:
+        filename = self._rootdir + self._metadata["system_config_file"]
+        with open(filename, "w") as yamlfile:
             yaml.dump(ydata, yamlfile)
 
     def _update_auto_config(self):
             yaml.dump(ydata, yamlfile)
 
     def _update_auto_config(self):
@@ -252,11 +260,11 @@ class AutoConfig(object):
 
         # Initialize the yaml data
         nodes = {}
 
         # Initialize the yaml data
         nodes = {}
-        with open(self._autoconfig_filename, 'r') as stream:
+        with open(self._autoconfig_filename, "r") as stream:
             try:
                 ydata = yaml.load(stream)
             try:
                 ydata = yaml.load(stream)
-                if 'nodes' in ydata:
-                    nodes = ydata['nodes']
+                if "nodes" in ydata:
+                    nodes = ydata["nodes"]
             except yaml.YAMLError as exc:
                 print(exc)
                 return
             except yaml.YAMLError as exc:
                 print(exc)
                 return
@@ -266,41 +274,45 @@ class AutoConfig(object):
             node = i[1]
 
             # Interfaces
             node = i[1]
 
             # Interfaces
-            node['interfaces'] = {}
-            for item in self._nodes[key]['interfaces'].items():
+            node["interfaces"] = {}
+            for item in self._nodes[key]["interfaces"].items():
                 port = item[0]
                 interface = item[1]
 
                 port = item[0]
                 interface = item[1]
 
-                node['interfaces'][port] = {}
-                addr = '{}'.format(interface['pci_address'])
-                node['interfaces'][port]['pci_address'] = addr
-                if 'mac_address' in interface:
-                    node['interfaces'][port]['mac_address'] = \
-                        interface['mac_address']
-
-            if 'total_other_cpus' in self._nodes[key]['cpu']:
-                node['cpu']['total_other_cpus'] = \
-                    self._nodes[key]['cpu']['total_other_cpus']
-            if 'total_vpp_cpus' in self._nodes[key]['cpu']:
-                node['cpu']['total_vpp_cpus'] = \
-                    self._nodes[key]['cpu']['total_vpp_cpus']
-            if 'reserve_vpp_main_core' in self._nodes[key]['cpu']:
-                node['cpu']['reserve_vpp_main_core'] = \
-                    self._nodes[key]['cpu']['reserve_vpp_main_core']
+                node["interfaces"][port] = {}
+                addr = "{}".format(interface["pci_address"])
+                node["interfaces"][port]["pci_address"] = addr
+                if "mac_address" in interface:
+                    node["interfaces"][port]["mac_address"] = interface["mac_address"]
+
+            if "total_other_cpus" in self._nodes[key]["cpu"]:
+                node["cpu"]["total_other_cpus"] = self._nodes[key]["cpu"][
+                    "total_other_cpus"
+                ]
+            if "total_vpp_cpus" in self._nodes[key]["cpu"]:
+                node["cpu"]["total_vpp_cpus"] = self._nodes[key]["cpu"][
+                    "total_vpp_cpus"
+                ]
+            if "reserve_vpp_main_core" in self._nodes[key]["cpu"]:
+                node["cpu"]["reserve_vpp_main_core"] = self._nodes[key]["cpu"][
+                    "reserve_vpp_main_core"
+                ]
 
             # TCP
 
             # TCP
-            if 'active_open_sessions' in self._nodes[key]['tcp']:
-                node['tcp']['active_open_sessions'] = \
-                    self._nodes[key]['tcp']['active_open_sessions']
-            if 'passive_open_sessions' in self._nodes[key]['tcp']:
-                node['tcp']['passive_open_sessions'] = \
-                    self._nodes[key]['tcp']['passive_open_sessions']
+            if "active_open_sessions" in self._nodes[key]["tcp"]:
+                node["tcp"]["active_open_sessions"] = self._nodes[key]["tcp"][
+                    "active_open_sessions"
+                ]
+            if "passive_open_sessions" in self._nodes[key]["tcp"]:
+                node["tcp"]["passive_open_sessions"] = self._nodes[key]["tcp"][
+                    "passive_open_sessions"
+                ]
 
             # Huge pages
 
             # Huge pages
-            node['hugepages']['total'] = self._nodes[key]['hugepages']['total']
+            node["hugepages"]["total"] = self._nodes[key]["hugepages"]["total"]
 
         # Write the auto config config file
 
         # Write the auto config config file
-        with open(self._autoconfig_filename, 'w') as yamlfile:
+        with open(self._autoconfig_filename, "w") as yamlfile:
             yaml.dump(ydata, yamlfile)
 
     def apply_huge_pages(self):
             yaml.dump(ydata, yamlfile)
 
     def apply_huge_pages(self):
@@ -325,28 +337,28 @@ class AutoConfig(object):
         """
 
         # Get main core
         """
 
         # Get main core
-        cpu = '\n'
-        if 'vpp_main_core' in node['cpu']:
-            vpp_main_core = node['cpu']['vpp_main_core']
+        cpu = "\n"
+        if "vpp_main_core" in node["cpu"]:
+            vpp_main_core = node["cpu"]["vpp_main_core"]
         else:
             vpp_main_core = 0
         if vpp_main_core != 0:
         else:
             vpp_main_core = 0
         if vpp_main_core != 0:
-            cpu += '  main-core {}\n'.format(vpp_main_core)
+            cpu += "  main-core {}\n".format(vpp_main_core)
 
         # Get workers
 
         # Get workers
-        vpp_workers = node['cpu']['vpp_workers']
+        vpp_workers = node["cpu"]["vpp_workers"]
         vpp_worker_len = len(vpp_workers)
         if vpp_worker_len > 0:
         vpp_worker_len = len(vpp_workers)
         if vpp_worker_len > 0:
-            vpp_worker_str = ''
+            vpp_worker_str = ""
             for i, worker in enumerate(vpp_workers):
                 if i > 0:
             for i, worker in enumerate(vpp_workers):
                 if i > 0:
-                    vpp_worker_str += ','
+                    vpp_worker_str += ","
                 if worker[0] == worker[1]:
                     vpp_worker_str += "{}".format(worker[0])
                 else:
                     vpp_worker_str += "{}-{}".format(worker[0], worker[1])
 
                 if worker[0] == worker[1]:
                     vpp_worker_str += "{}".format(worker[0])
                 else:
                     vpp_worker_str += "{}-{}".format(worker[0], worker[1])
 
-            cpu += '  corelist-workers {}\n'.format(vpp_worker_str)
+            cpu += "  corelist-workers {}\n".format(vpp_worker_str)
 
         return cpu
 
 
         return cpu
 
@@ -359,41 +371,41 @@ class AutoConfig(object):
         :type node: dict
         """
 
         :type node: dict
         """
 
-        devices = ''
-        ports_per_numa = node['cpu']['ports_per_numa']
+        devices = ""
+        ports_per_numa = node["cpu"]["ports_per_numa"]
 
         for item in ports_per_numa.items():
             value = item[1]
 
         for item in ports_per_numa.items():
             value = item[1]
-            interfaces = value['interfaces']
+            interfaces = value["interfaces"]
 
             # if 0 was specified for the number of vpp workers, use 1 queue
             num_rx_queues = None
             num_tx_queues = None
 
             # if 0 was specified for the number of vpp workers, use 1 queue
             num_rx_queues = None
             num_tx_queues = None
-            if 'rx_queues' in value:
-                num_rx_queues = value['rx_queues']
-            if 'tx_queues' in value:
-                num_tx_queues = value['tx_queues']
+            if "rx_queues" in value:
+                num_rx_queues = value["rx_queues"]
+            if "tx_queues" in value:
+                num_tx_queues = value["tx_queues"]
 
             num_rx_desc = None
             num_tx_desc = None
 
             # Create the devices string
             for interface in interfaces:
 
             num_rx_desc = None
             num_tx_desc = None
 
             # Create the devices string
             for interface in interfaces:
-                pci_address = interface['pci_address']
+                pci_address = interface["pci_address"]
                 pci_address = pci_address.lstrip("'").rstrip("'")
                 pci_address = pci_address.lstrip("'").rstrip("'")
-                devices += '\n'
-                devices += '  dev {} {{ \n'.format(pci_address)
+                devices += "\n"
+                devices += "  dev {} {{ \n".format(pci_address)
                 if num_rx_queues:
                 if num_rx_queues:
-                    devices += '    num-rx-queues {}\n'.format(num_rx_queues)
+                    devices += "    num-rx-queues {}\n".format(num_rx_queues)
                 else:
                 else:
-                    devices += '    num-rx-queues {}\n'.format(1)
+                    devices += "    num-rx-queues {}\n".format(1)
                 if num_tx_queues:
                 if num_tx_queues:
-                    devices += '    num-tx-queues {}\n'.format(num_tx_queues)
+                    devices += "    num-tx-queues {}\n".format(num_tx_queues)
                 if num_rx_desc:
                 if num_rx_desc:
-                    devices += '    num-rx-desc {}\n'.format(num_rx_desc)
+                    devices += "    num-rx-desc {}\n".format(num_rx_desc)
                 if num_tx_desc:
                 if num_tx_desc:
-                    devices += '    num-tx-desc {}\n'.format(num_tx_desc)
-                devices += '  }'
+                    devices += "    num-tx-desc {}\n".format(num_tx_desc)
+                devices += "  }"
 
         return devices
 
 
         return devices
 
@@ -405,20 +417,25 @@ class AutoConfig(object):
         :param node: Node dictionary with cpuinfo.
         :type node: dict
         """
         :param node: Node dictionary with cpuinfo.
         :type node: dict
         """
-        buffers = ''
-        total_mbufs = node['cpu']['total_mbufs']
+        buffers = ""
+        total_mbufs = node["cpu"]["total_mbufs"]
 
         # If the total mbufs is not 0 or less than the default, set num-bufs
         logging.debug("Total mbufs: {}".format(total_mbufs))
         if total_mbufs != 0 and total_mbufs > 16384:
 
         # If the total mbufs is not 0 or less than the default, set num-bufs
         logging.debug("Total mbufs: {}".format(total_mbufs))
         if total_mbufs != 0 and total_mbufs > 16384:
-            buffers += '  buffers-per-numa {}'.format(total_mbufs)
+            buffers += "  buffers-per-numa {}".format(total_mbufs)
 
         return buffers
 
     @staticmethod
 
         return buffers
 
     @staticmethod
-    def _calc_vpp_workers(node, vpp_workers, numa_node, other_cpus_end,
-                          total_vpp_workers,
-                          reserve_vpp_main_core):
+    def _calc_vpp_workers(
+        node,
+        vpp_workers,
+        numa_node,
+        other_cpus_end,
+        total_vpp_workers,
+        reserve_vpp_main_core,
+    ):
         """
         Calculate the VPP worker information
 
         """
         Calculate the VPP worker information
 
@@ -440,7 +457,7 @@ class AutoConfig(object):
         """
 
         # Can we fit the workers in one of these slices
         """
 
         # Can we fit the workers in one of these slices
-        cpus = node['cpu']['cpus_per_node'][numa_node]
+        cpus = node["cpu"]["cpus_per_node"][numa_node]
         for cpu in cpus:
             start = cpu[0]
             end = cpu[1]
         for cpu in cpus:
             start = cpu[0]
             end = cpu[1]
@@ -454,7 +471,7 @@ class AutoConfig(object):
 
             if workers_end <= end:
                 if reserve_vpp_main_core:
 
             if workers_end <= end:
                 if reserve_vpp_main_core:
-                    node['cpu']['vpp_main_core'] = start - 1
+                    node["cpu"]["vpp_main_core"] = start - 1
                 reserve_vpp_main_core = False
                 if total_vpp_workers:
                     vpp_workers.append((start, workers_end))
                 reserve_vpp_main_core = False
                 if total_vpp_workers:
                     vpp_workers.append((start, workers_end))
@@ -462,15 +479,14 @@ class AutoConfig(object):
 
         # We still need to reserve the main core
         if reserve_vpp_main_core:
 
         # We still need to reserve the main core
         if reserve_vpp_main_core:
-            node['cpu']['vpp_main_core'] = other_cpus_end + 1
+            node["cpu"]["vpp_main_core"] = other_cpus_end + 1
 
         return reserve_vpp_main_core
 
     @staticmethod
 
         return reserve_vpp_main_core
 
     @staticmethod
-    def _calc_desc_and_queues(total_numa_nodes,
-                              total_ports_per_numa,
-                              total_rx_queues,
-                              ports_per_numa_value):
+    def _calc_desc_and_queues(
+        total_numa_nodes, total_ports_per_numa, total_rx_queues, ports_per_numa_value
+    ):
         """
         Calculate the number of descriptors and queues
 
         """
         Calculate the number of descriptors and queues
 
@@ -494,8 +510,10 @@ class AutoConfig(object):
 
         # Get the descriptor entries
         desc_entries = 1024
 
         # Get the descriptor entries
         desc_entries = 1024
-        ports_per_numa_value['rx_queues'] = rx_queues
-        total_mbufs = ((rx_queues * desc_entries) + (tx_queues * desc_entries)) * total_ports_per_numa
+        ports_per_numa_value["rx_queues"] = rx_queues
+        total_mbufs = (
+            (rx_queues * desc_entries) + (tx_queues * desc_entries)
+        ) * total_ports_per_numa
 
         return total_mbufs
 
 
         return total_mbufs
 
@@ -515,12 +533,12 @@ class AutoConfig(object):
         ports_per_numa = {}
         for item in interfaces.items():
             i = item[1]
         ports_per_numa = {}
         for item in interfaces.items():
             i = item[1]
-            if i['numa_node'] not in ports_per_numa:
-                ports_per_numa[i['numa_node']] = {'interfaces': []}
-                ports_per_numa[i['numa_node']]['interfaces'].append(i)
+            if i["numa_node"] not in ports_per_numa:
+                ports_per_numa[i["numa_node"]] = {"interfaces": []}
+                ports_per_numa[i["numa_node"]]["interfaces"].append(i)
             else:
             else:
-                ports_per_numa[i['numa_node']]['interfaces'].append(i)
-        node['cpu']['ports_per_numa'] = ports_per_numa
+                ports_per_numa[i["numa_node"]]["interfaces"].append(i)
+        node["cpu"]["ports_per_numa"] = ports_per_numa
 
         return ports_per_numa
 
 
         return ports_per_numa
 
@@ -536,24 +554,24 @@ class AutoConfig(object):
             node = i[1]
 
             # get total number of nic ports
             node = i[1]
 
             # get total number of nic ports
-            interfaces = node['interfaces']
+            interfaces = node["interfaces"]
 
             # Make a list of ports by numa node
             ports_per_numa = self._create_ports_per_numa(node, interfaces)
 
             # Get the number of cpus to skip, we never use the first cpu
             other_cpus_start = 1
 
             # Make a list of ports by numa node
             ports_per_numa = self._create_ports_per_numa(node, interfaces)
 
             # Get the number of cpus to skip, we never use the first cpu
             other_cpus_start = 1
-            other_cpus_end = other_cpus_start + node['cpu']['total_other_cpus'] - 1
+            other_cpus_end = other_cpus_start + node["cpu"]["total_other_cpus"] - 1
             other_workers = None
             if other_cpus_end != 0:
                 other_workers = (other_cpus_start, other_cpus_end)
             other_workers = None
             if other_cpus_end != 0:
                 other_workers = (other_cpus_start, other_cpus_end)
-            node['cpu']['other_workers'] = other_workers
+            node["cpu"]["other_workers"] = other_workers
 
             # Allocate the VPP main core and workers
             vpp_workers = []
 
             # Allocate the VPP main core and workers
             vpp_workers = []
-            reserve_vpp_main_core = node['cpu']['reserve_vpp_main_core']
-            total_vpp_cpus = node['cpu']['total_vpp_cpus']
-            total_rx_queues = node['cpu']['total_rx_queues']
+            reserve_vpp_main_core = node["cpu"]["reserve_vpp_main_core"]
+            total_vpp_cpus = node["cpu"]["total_vpp_cpus"]
+            total_rx_queues = node["cpu"]["total_rx_queues"]
 
             # If total_vpp_cpus is 0 or is less than the numa nodes with ports
             #  then we shouldn't get workers
 
             # If total_vpp_cpus is 0 or is less than the numa nodes with ports
             #  then we shouldn't get workers
@@ -572,14 +590,21 @@ class AutoConfig(object):
                     # Get the number of descriptors and queues
                     mbufs = self._calc_desc_and_queues(
                         len(ports_per_numa),
                     # Get the number of descriptors and queues
                     mbufs = self._calc_desc_and_queues(
                         len(ports_per_numa),
-                        len(value['interfaces']), total_rx_queues, value)
+                        len(value["interfaces"]),
+                        total_rx_queues,
+                        value,
+                    )
                     total_mbufs += mbufs
 
                     # Get the VPP workers
                     reserve_vpp_main_core = self._calc_vpp_workers(
                     total_mbufs += mbufs
 
                     # Get the VPP workers
                     reserve_vpp_main_core = self._calc_vpp_workers(
-                        node, vpp_workers, numa_node,
-                        other_cpus_end, total_workers_node,
-                        reserve_vpp_main_core)
+                        node,
+                        vpp_workers,
+                        numa_node,
+                        other_cpus_end,
+                        total_workers_node,
+                        reserve_vpp_main_core,
+                    )
 
                 total_mbufs *= 2.5
                 total_mbufs = int(total_mbufs)
 
                 total_mbufs *= 2.5
                 total_mbufs = int(total_mbufs)
@@ -587,8 +612,8 @@ class AutoConfig(object):
                 total_mbufs = 0
 
             # Save the info
                 total_mbufs = 0
 
             # Save the info
-            node['cpu']['vpp_workers'] = vpp_workers
-            node['cpu']['total_mbufs'] = total_mbufs
+            node["cpu"]["vpp_workers"] = vpp_workers
+            node["cpu"]["total_mbufs"] = total_mbufs
 
         # Write the config
         self.updateconfig()
 
         # Write the config
         self.updateconfig()
@@ -602,54 +627,55 @@ class AutoConfig(object):
         :type node: dict
         """
 
         :type node: dict
         """
 
-        active_open_sessions = node['tcp']['active_open_sessions']
+        active_open_sessions = node["tcp"]["active_open_sessions"]
         aos = int(active_open_sessions)
 
         aos = int(active_open_sessions)
 
-        passive_open_sessions = node['tcp']['passive_open_sessions']
+        passive_open_sessions = node["tcp"]["passive_open_sessions"]
         pos = int(passive_open_sessions)
 
         # Generate the api-segment gid vpp sheit in any case
         if (aos + pos) == 0:
         pos = int(passive_open_sessions)
 
         # Generate the api-segment gid vpp sheit in any case
         if (aos + pos) == 0:
-            tcp = '\n'.join([
+            tcp = "\n".join(["api-segment {", "  gid vpp", "}"])
+            return tcp.rstrip("\n")
+
+        tcp = "\n".join(
+            [
+                "# TCP stack-related configuration parameters",
+                "# expecting {:d} client sessions, {:d} server sessions\n".format(
+                    aos, pos
+                ),
+                "heapsize 4g\n",
                 "api-segment {",
                 "api-segment {",
-                "  gid vpp",
-                "}"
-            ])
-            return tcp.rstrip('\n')
-
-        tcp = '\n'.join([
-            "# TCP stack-related configuration parameters",
-            "# expecting {:d} client sessions, {:d} server sessions\n".format(
-                aos, pos),
-            "heapsize 4g\n",
-            "api-segment {",
-            "  global-size 2000M",
-            "  api-size 1G",
-            "}\n",
-
-            "session {",
-            "  event-queue-length {:d}".format(aos + pos),
-            "  preallocated-sessions {:d}".format(aos + pos),
-            "  v4-session-table-buckets {:d}".format((aos + pos) // 4),
-            "  v4-session-table-memory 3g\n"
-        ])
+                "  global-size 2000M",
+                "  api-size 1G",
+                "}\n",
+                "session {",
+                "  event-queue-length {:d}".format(aos + pos),
+                "  preallocated-sessions {:d}".format(aos + pos),
+                "  v4-session-table-buckets {:d}".format((aos + pos) // 4),
+                "  v4-session-table-memory 3g\n",
+            ]
+        )
         if aos > 0:
         if aos > 0:
-            tcp = tcp + "  v4-halfopen-table-buckets {:d}".format(
-                (aos + pos) // 4) + "\n"
+            tcp = (
+                tcp + "  v4-halfopen-table-buckets {:d}".format((aos + pos) // 4) + "\n"
+            )
             tcp = tcp + "  v4-halfopen-table-memory 3g\n"
             tcp = tcp + "  v4-halfopen-table-memory 3g\n"
-            tcp = tcp + "  local-endpoints-table-buckets {:d}".format(
-                (aos + pos) // 4) + "\n"
+            tcp = (
+                tcp
+                + "  local-endpoints-table-buckets {:d}".format((aos + pos) // 4)
+                + "\n"
+            )
             tcp = tcp + "  local-endpoints-table-memory 3g\n"
         tcp = tcp + "}\n\n"
 
         tcp = tcp + "tcp {\n"
         tcp = tcp + "  preallocated-connections {:d}".format(aos + pos) + "\n"
         if aos > 0:
             tcp = tcp + "  local-endpoints-table-memory 3g\n"
         tcp = tcp + "}\n\n"
 
         tcp = tcp + "tcp {\n"
         tcp = tcp + "  preallocated-connections {:d}".format(aos + pos) + "\n"
         if aos > 0:
-            tcp = tcp + "  preallocated-half-open-connections {:d}".format(
-                aos) + "\n"
+            tcp = tcp + "  preallocated-half-open-connections {:d}".format(aos) + "\n"
         tcp = tcp + "}\n\n"
 
         tcp = tcp + "}\n\n"
 
-        return tcp.rstrip('\n')
+        return tcp.rstrip("\n")
 
     def apply_vpp_startup(self):
         """
 
     def apply_vpp_startup(self):
         """
@@ -662,8 +688,8 @@ class AutoConfig(object):
             node = i[1]
 
             # Get the startup file
             node = i[1]
 
             # Get the startup file
-            rootdir = node['rootdir']
-            sfile = rootdir + node['vpp']['startup_config_file']
+            rootdir = node["rootdir"]
+            sfile = rootdir + node["vpp"]["startup_config_file"]
 
             # Get the buffers
             devices = self._apply_vpp_devices(node)
 
             # Get the buffers
             devices = self._apply_vpp_devices(node)
@@ -680,27 +706,22 @@ class AutoConfig(object):
             self._autoconfig_backup_file(sfile)
 
             # Get the template
             self._autoconfig_backup_file(sfile)
 
             # Get the template
-            tfile = sfile + '.template'
-            (ret, stdout, stderr) = \
-                VPPUtil.exec_command('cat {}'.format(tfile))
+            tfile = sfile + ".template"
+            (ret, stdout, stderr) = VPPUtil.exec_command("cat {}".format(tfile))
             if ret != 0:
             if ret != 0:
-                raise RuntimeError('Executing cat command failed to node {}'.
-                                   format(node['host']))
-            startup = stdout.format(cpu=cpu,
-                                    buffers=buffers,
-                                    devices=devices,
-                                    tcp=tcp)
-
-            (ret, stdout, stderr) = \
-                VPPUtil.exec_command('rm {}'.format(sfile))
+                raise RuntimeError(
+                    "Executing cat command failed to node {}".format(node["host"])
+                )
+            startup = stdout.format(cpu=cpu, buffers=buffers, devices=devices, tcp=tcp)
+
+            (ret, stdout, stderr) = VPPUtil.exec_command("rm {}".format(sfile))
             if ret != 0:
                 logging.debug(stderr)
 
             cmd = "sudo cat > {0} << EOF\n{1}\n".format(sfile, startup)
             (ret, stdout, stderr) = VPPUtil.exec_command(cmd)
             if ret != 0:
             if ret != 0:
                 logging.debug(stderr)
 
             cmd = "sudo cat > {0} << EOF\n{1}\n".format(sfile, startup)
             (ret, stdout, stderr) = VPPUtil.exec_command(cmd)
             if ret != 0:
-                raise RuntimeError('Writing config failed node {}'.
-                                   format(node['host']))
+                raise RuntimeError("Writing config failed node {}".format(node["host"]))
 
     def apply_grub_cmdline(self):
         """
 
     def apply_grub_cmdline(self):
         """
@@ -712,10 +733,10 @@ class AutoConfig(object):
             node = i[1]
 
             # Get the isolated CPUs
             node = i[1]
 
             # Get the isolated CPUs
-            other_workers = node['cpu']['other_workers']
-            vpp_workers = node['cpu']['vpp_workers']
-            if 'vpp_main_core' in node['cpu']:
-                vpp_main_core = node['cpu']['vpp_main_core']
+            other_workers = node["cpu"]["other_workers"]
+            vpp_workers = node["cpu"]["vpp_workers"]
+            if "vpp_main_core" in node["cpu"]:
+                vpp_main_core = node["cpu"]["vpp_main_core"]
             else:
                 vpp_main_core = 0
             all_workers = []
             else:
                 vpp_main_core = 0
             all_workers = []
@@ -724,12 +745,12 @@ class AutoConfig(object):
             if vpp_main_core != 0:
                 all_workers += [(vpp_main_core, vpp_main_core)]
             all_workers += vpp_workers
             if vpp_main_core != 0:
                 all_workers += [(vpp_main_core, vpp_main_core)]
             all_workers += vpp_workers
-            isolated_cpus = ''
+            isolated_cpus = ""
             for idx, worker in enumerate(all_workers):
                 if worker is None:
                     continue
                 if idx > 0:
             for idx, worker in enumerate(all_workers):
                 if worker is None:
                     continue
                 if idx > 0:
-                    isolated_cpus += ','
+                    isolated_cpus += ","
                 if worker[0] == worker[1]:
                     isolated_cpus += "{}".format(worker[0])
                 else:
                 if worker[0] == worker[1]:
                     isolated_cpus += "{}".format(worker[0])
                 else:
@@ -737,11 +758,10 @@ class AutoConfig(object):
 
             vppgrb = VppGrubUtil(node)
             current_cmdline = vppgrb.get_current_cmdline()
 
             vppgrb = VppGrubUtil(node)
             current_cmdline = vppgrb.get_current_cmdline()
-            if 'grub' not in node:
-                node['grub'] = {}
-            node['grub']['current_cmdline'] = current_cmdline
-            node['grub']['default_cmdline'] = \
-                vppgrb.apply_cmdline(node, isolated_cpus)
+            if "grub" not in node:
+                node["grub"] = {}
+            node["grub"]["current_cmdline"] = current_cmdline
+            node["grub"]["default_cmdline"] = vppgrb.apply_cmdline(node, isolated_cpus)
 
         self.updateconfig()
 
 
         self.updateconfig()
 
@@ -756,14 +776,14 @@ class AutoConfig(object):
 
             hpg = VppHugePageUtil(node)
             max_map_count, shmmax = hpg.get_huge_page_config()
 
             hpg = VppHugePageUtil(node)
             max_map_count, shmmax = hpg.get_huge_page_config()
-            node['hugepages']['max_map_count'] = max_map_count
-            node['hugepages']['shmax'] = shmmax
+            node["hugepages"]["max_map_count"] = max_map_count
+            node["hugepages"]["shmax"] = shmmax
             total, free, size, memtotal, memfree = hpg.get_actual_huge_pages()
             total, free, size, memtotal, memfree = hpg.get_actual_huge_pages()
-            node['hugepages']['actual_total'] = total
-            node['hugepages']['free'] = free
-            node['hugepages']['size'] = size
-            node['hugepages']['memtotal'] = memtotal
-            node['hugepages']['memfree'] = memfree
+            node["hugepages"]["actual_total"] = total
+            node["hugepages"]["free"] = free
+            node["hugepages"]["size"] = size
+            node["hugepages"]["memtotal"] = memtotal
+            node["hugepages"]["memfree"] = memfree
 
         self.updateconfig()
 
 
         self.updateconfig()
 
@@ -782,14 +802,14 @@ class AutoConfig(object):
 
             # Get the total number of isolated CPUs
             current_iso_cpus = 0
 
             # Get the total number of isolated CPUs
             current_iso_cpus = 0
-            iso_cpur = re.findall(r'isolcpus=[\w+\-,]+', current_cmdline)
+            iso_cpur = re.findall(r"isolcpus=[\w+\-,]+", current_cmdline)
             iso_cpurl = len(iso_cpur)
             if iso_cpurl > 0:
                 iso_cpu_str = iso_cpur[0]
             iso_cpurl = len(iso_cpur)
             if iso_cpurl > 0:
                 iso_cpu_str = iso_cpur[0]
-                iso_cpu_str = iso_cpu_str.split('=')[1]
-                iso_cpul = iso_cpu_str.split(',')
+                iso_cpu_str = iso_cpu_str.split("=")[1]
+                iso_cpul = iso_cpu_str.split(",")
                 for iso_cpu in iso_cpul:
                 for iso_cpu in iso_cpul:
-                    isocpuspl = iso_cpu.split('-')
+                    isocpuspl = iso_cpu.split("-")
                     if len(isocpuspl) == 1:
                         current_iso_cpus += 1
                     else:
                     if len(isocpuspl) == 1:
                         current_iso_cpus += 1
                     else:
@@ -800,11 +820,11 @@ class AutoConfig(object):
                         else:
                             current_iso_cpus += second - first
 
                         else:
                             current_iso_cpus += second - first
 
-            if 'grub' not in node:
-                node['grub'] = {}
-            node['grub']['current_cmdline'] = current_cmdline
-            node['grub']['default_cmdline'] = default_cmdline
-            node['grub']['current_iso_cpus'] = current_iso_cpus
+            if "grub" not in node:
+                node["grub"] = {}
+            node["grub"]["current_cmdline"] = current_cmdline
+            node["grub"]["default_cmdline"] = default_cmdline
+            node["grub"]["current_iso_cpus"] = current_iso_cpus
 
         self.updateconfig()
 
 
         self.updateconfig()
 
@@ -822,11 +842,11 @@ class AutoConfig(object):
         vpp.get_all_devices()
 
         # Save the device information
         vpp.get_all_devices()
 
         # Save the device information
-        node['devices'] = {}
-        node['devices']['dpdk_devices'] = vpp.get_dpdk_devices()
-        node['devices']['kernel_devices'] = vpp.get_kernel_devices()
-        node['devices']['other_devices'] = vpp.get_other_devices()
-        node['devices']['linkup_devices'] = vpp.get_link_up_devices()
+        node["devices"] = {}
+        node["devices"]["dpdk_devices"] = vpp.get_dpdk_devices()
+        node["devices"]["kernel_devices"] = vpp.get_kernel_devices()
+        node["devices"]["other_devices"] = vpp.get_other_devices()
+        node["devices"]["linkup_devices"] = vpp.get_link_up_devices()
 
     def get_devices_per_node(self):
         """
 
     def get_devices_per_node(self):
         """
@@ -856,20 +876,25 @@ class AutoConfig(object):
         :rtype: list
         """
 
         :rtype: list
         """
 
-        cmd = 'lscpu -p'
+        cmd = "lscpu -p"
         (ret, stdout, stderr) = VPPUtil.exec_command(cmd)
         if ret != 0:
         (ret, stdout, stderr) = VPPUtil.exec_command(cmd)
         if ret != 0:
-            raise RuntimeError('{} failed on node {} {}'.
-                               format(cmd, node['host'], stderr))
+            raise RuntimeError(
+                "{} failed on node {} {}".format(cmd, node["host"], stderr)
+            )
 
         pcpus = []
 
         pcpus = []
-        lines = stdout.split('\n')
+        lines = stdout.split("\n")
         for line in lines:
         for line in lines:
-            if line == '' or line[0] == '#':
+            if line == "" or line[0] == "#":
                 continue
                 continue
-            linesplit = line.split(',')
-            layout = {'cpu': linesplit[0], 'core': linesplit[1],
-                      'socket': linesplit[2], 'node': linesplit[3]}
+            linesplit = line.split(",")
+            layout = {
+                "cpu": linesplit[0],
+                "core": linesplit[1],
+                "socket": linesplit[2],
+                "node": linesplit[3],
+            }
 
             # cpu, core, socket, node
             pcpus.append(layout)
 
             # cpu, core, socket, node
             pcpus.append(layout)
@@ -890,14 +915,14 @@ class AutoConfig(object):
 
             # Get the cpu layout
             layout = self.get_cpu_layout(node)
 
             # Get the cpu layout
             layout = self.get_cpu_layout(node)
-            node['cpu']['layout'] = layout
+            node["cpu"]["layout"] = layout
 
 
-            cpuinfo = node['cpuinfo']
+            cpuinfo = node["cpuinfo"]
             smt_enabled = CpuUtils.is_smt_enabled(cpuinfo)
             smt_enabled = CpuUtils.is_smt_enabled(cpuinfo)
-            node['cpu']['smt_enabled'] = smt_enabled
+            node["cpu"]["smt_enabled"] = smt_enabled
 
             # We don't want to write the cpuinfo
 
             # We don't want to write the cpuinfo
-            node['cpuinfo'] = ""
+            node["cpuinfo"] = ""
 
         # Write the config
         self.updateconfig()
 
         # Write the config
         self.updateconfig()
@@ -932,46 +957,59 @@ class AutoConfig(object):
         :type numa_nodes: list
         """
 
         :type numa_nodes: list
         """
 
-        print("\nYour system has {} core(s) and {} Numa Nodes.".
-              format(total_cpus, len(numa_nodes)))
-        print("To begin, we suggest not reserving any cores for "
-              "VPP or other processes.")
-        print("Then to improve performance start reserving cores and "
-              "adding queues as needed.")
+        print(
+            "\nYour system has {} core(s) and {} Numa Nodes.".format(
+                total_cpus, len(numa_nodes)
+            )
+        )
+        print(
+            "To begin, we suggest not reserving any cores for "
+            "VPP or other processes."
+        )
+        print(
+            "Then to improve performance start reserving cores and "
+            "adding queues as needed."
+        )
 
         # Leave 1 for the general system
         total_cpus -= 1
         max_vpp_cpus = min(total_cpus, 4)
         total_vpp_cpus = 0
         if max_vpp_cpus > 0:
 
         # Leave 1 for the general system
         total_cpus -= 1
         max_vpp_cpus = min(total_cpus, 4)
         total_vpp_cpus = 0
         if max_vpp_cpus > 0:
-            question = "\nHow many core(s) shall we reserve for " \
-                       "VPP [0-{}][0]? ".format(max_vpp_cpus)
+            question = (
+                "\nHow many core(s) shall we reserve for "
+                "VPP [0-{}][0]? ".format(max_vpp_cpus)
+            )
             total_vpp_cpus = self._ask_user_range(question, 0, max_vpp_cpus, 0)
             total_vpp_cpus = self._ask_user_range(question, 0, max_vpp_cpus, 0)
-            node['cpu']['total_vpp_cpus'] = total_vpp_cpus
+            node["cpu"]["total_vpp_cpus"] = total_vpp_cpus
 
         total_other_cpus = 0
         max_other_cores = total_cpus - total_vpp_cpus
         if max_other_cores > 0:
 
         total_other_cpus = 0
         max_other_cores = total_cpus - total_vpp_cpus
         if max_other_cores > 0:
-            question = 'How many core(s) do you want to reserve for ' \
-                       'processes other than VPP? [0-{}][0]? '. format(str(max_other_cores))
+            question = (
+                "How many core(s) do you want to reserve for "
+                "processes other than VPP? [0-{}][0]? ".format(str(max_other_cores))
+            )
             total_other_cpus = self._ask_user_range(question, 0, max_other_cores, 0)
             total_other_cpus = self._ask_user_range(question, 0, max_other_cores, 0)
-            node['cpu']['total_other_cpus'] = total_other_cpus
+            node["cpu"]["total_other_cpus"] = total_other_cpus
 
         max_main_cpus = total_cpus - total_vpp_cpus - total_other_cpus
         reserve_vpp_main_core = False
         if max_main_cpus > 0:
             question = "Should we reserve 1 core for the VPP Main thread? "
             question += "[y/N]? "
 
         max_main_cpus = total_cpus - total_vpp_cpus - total_other_cpus
         reserve_vpp_main_core = False
         if max_main_cpus > 0:
             question = "Should we reserve 1 core for the VPP Main thread? "
             question += "[y/N]? "
-            answer = self._ask_user_yn(question, 'n')
-            if answer == 'y':
+            answer = self._ask_user_yn(question, "n")
+            if answer == "y":
                 reserve_vpp_main_core = True
                 reserve_vpp_main_core = True
-            node['cpu']['reserve_vpp_main_core'] = reserve_vpp_main_core
-            node['cpu']['vpp_main_core'] = 0
+            node["cpu"]["reserve_vpp_main_core"] = reserve_vpp_main_core
+            node["cpu"]["vpp_main_core"] = 0
 
 
-        question = "How many RX queues per port shall we use for " \
-                   "VPP [1-4][1]? ".format(max_vpp_cpus)
+        question = (
+            "How many RX queues per port shall we use for "
+            "VPP [1-4][1]? ".format(max_vpp_cpus)
+        )
         total_rx_queues = self._ask_user_range(question, 1, 4, 1)
         total_rx_queues = self._ask_user_range(question, 1, 4, 1)
-        node['cpu']['total_rx_queues'] = total_rx_queues
+        node["cpu"]["total_rx_queues"] = total_rx_queues
 
     def modify_cpu(self, ask_questions=True):
         """
 
     def modify_cpu(self, ask_questions=True):
         """
@@ -995,50 +1033,50 @@ class AutoConfig(object):
 
             # Assume the number of cpus per slice is always the same as the
             # first slice
 
             # Assume the number of cpus per slice is always the same as the
             # first slice
-            first_node = '0'
+            first_node = "0"
             for cpu in cpu_layout:
             for cpu in cpu_layout:
-                if cpu['node'] != first_node:
+                if cpu["node"] != first_node:
                     break
                 total_cpus_per_slice += 1
 
             # Get the total number of cpus, cores, and numa nodes from the
             # cpu layout
             for cpul in cpu_layout:
                     break
                 total_cpus_per_slice += 1
 
             # Get the total number of cpus, cores, and numa nodes from the
             # cpu layout
             for cpul in cpu_layout:
-                numa_node = cpul['node']
-                core = cpul['core']
-                cpu = cpul['cpu']
+                numa_node = cpul["node"]
+                core = cpul["core"]
+                cpu = cpul["cpu"]
                 total_cpus += 1
 
                 if numa_node not in cpus_per_node:
                     cpus_per_node[numa_node] = []
                 cpuperslice = int(cpu) % total_cpus_per_slice
                 if cpuperslice == 0:
                 total_cpus += 1
 
                 if numa_node not in cpus_per_node:
                     cpus_per_node[numa_node] = []
                 cpuperslice = int(cpu) % total_cpus_per_slice
                 if cpuperslice == 0:
-                    cpus_per_node[numa_node].append((int(cpu), int(cpu) +
-                                                     total_cpus_per_slice - 1))
+                    cpus_per_node[numa_node].append(
+                        (int(cpu), int(cpu) + total_cpus_per_slice - 1)
+                    )
                 if numa_node not in numa_nodes:
                     numa_nodes.append(numa_node)
                 if core not in cores:
                     cores.append(core)
                 if numa_node not in numa_nodes:
                     numa_nodes.append(numa_node)
                 if core not in cores:
                     cores.append(core)
-            node['cpu']['cpus_per_node'] = cpus_per_node
+            node["cpu"]["cpus_per_node"] = cpus_per_node
 
             # Ask the user some questions
             if ask_questions and total_cpus >= 4:
                 self._modify_cpu_questions(node, total_cpus, numa_nodes)
 
             # Populate the interfaces with the numa node
 
             # Ask the user some questions
             if ask_questions and total_cpus >= 4:
                 self._modify_cpu_questions(node, total_cpus, numa_nodes)
 
             # Populate the interfaces with the numa node
-            if 'interfaces' in node:
-                ikeys = node['interfaces'].keys()
+            if "interfaces" in node:
+                ikeys = node["interfaces"].keys()
                 VPPUtil.get_interfaces_numa_node(node, *tuple(ikeys))
 
             # We don't want to write the cpuinfo
                 VPPUtil.get_interfaces_numa_node(node, *tuple(ikeys))
 
             # We don't want to write the cpuinfo
-            node['cpuinfo'] = ""
+            node["cpuinfo"] = ""
 
         # Write the configs
         self._update_auto_config()
         self.updateconfig()
 
 
         # Write the configs
         self._update_auto_config()
         self.updateconfig()
 
-    def _modify_other_devices(self, node,
-                              other_devices, kernel_devices, dpdk_devices):
+    def _modify_other_devices(self, node, other_devices, kernel_devices, dpdk_devices):
         """
         Modify the devices configuration, asking for the user for the values.
 
         """
         Modify the devices configuration, asking for the user for the values.
 
@@ -1046,31 +1084,31 @@ class AutoConfig(object):
 
         odevices_len = len(other_devices)
         if odevices_len > 0:
 
         odevices_len = len(other_devices)
         if odevices_len > 0:
-            print("\nThese device(s) are currently NOT being used "
-                  "by VPP or the OS.\n")
+            print(
+                "\nThese device(s) are currently NOT being used " "by VPP or the OS.\n"
+            )
             VppPCIUtil.show_vpp_devices(other_devices, show_interfaces=False)
             question = "\nWould you like to give any of these devices"
             question += " back to the OS [Y/n]? "
             VppPCIUtil.show_vpp_devices(other_devices, show_interfaces=False)
             question = "\nWould you like to give any of these devices"
             question += " back to the OS [Y/n]? "
-            answer = self._ask_user_yn(question, 'Y')
-            if answer == 'y':
+            answer = self._ask_user_yn(question, "Y")
+            if answer == "y":
                 vppd = {}
                 for dit in other_devices.items():
                     dvid = dit[0]
                     device = dit[1]
                 vppd = {}
                 for dit in other_devices.items():
                     dvid = dit[0]
                     device = dit[1]
-                    question = "Would you like to use device {} for". \
-                        format(dvid)
+                    question = "Would you like to use device {} for".format(dvid)
                     question += " the OS [y/N]? "
                     question += " the OS [y/N]? "
-                    answer = self._ask_user_yn(question, 'n')
-                    if answer == 'y':
-                        if 'unused' in device and len(
-                                device['unused']) != 0 and \
-                                device['unused'][0] != '':
-                            driver = device['unused'][0]
-                            ret = VppPCIUtil.bind_vpp_device(
-                                node, driver, dvid)
+                    answer = self._ask_user_yn(question, "n")
+                    if answer == "y":
+                        if (
+                            "unused" in device
+                            and len(device["unused"]) != 0
+                            and device["unused"][0] != ""
+                        ):
+                            driver = device["unused"][0]
+                            ret = VppPCIUtil.bind_vpp_device(node, driver, dvid)
                             if ret:
                             if ret:
-                                logging.debug(
-                                    'Could not bind device {}'.format(dvid))
+                                logging.debug("Could not bind device {}".format(dvid))
                             else:
                                 vppd[dvid] = device
                 for dit in vppd.items():
                             else:
                                 vppd[dvid] = device
                 for dit in vppd.items():
@@ -1081,34 +1119,35 @@ class AutoConfig(object):
 
         odevices_len = len(other_devices)
         if odevices_len > 0:
 
         odevices_len = len(other_devices)
         if odevices_len > 0:
-            print("\nThese device(s) are still NOT being used "
-                  "by VPP or the OS.\n")
+            print("\nThese device(s) are still NOT being used " "by VPP or the OS.\n")
             VppPCIUtil.show_vpp_devices(other_devices, show_interfaces=False)
             question = "\nWould you like use any of these for VPP [y/N]? "
             VppPCIUtil.show_vpp_devices(other_devices, show_interfaces=False)
             question = "\nWould you like use any of these for VPP [y/N]? "
-            answer = self._ask_user_yn(question, 'N')
-            if answer == 'y':
+            answer = self._ask_user_yn(question, "N")
+            if answer == "y":
                 vppd = {}
                 for dit in other_devices.items():
                     dvid = dit[0]
                     device = dit[1]
                     question = "Would you like to use device {} ".format(dvid)
                     question += "for VPP [y/N]? "
                 vppd = {}
                 for dit in other_devices.items():
                     dvid = dit[0]
                     device = dit[1]
                     question = "Would you like to use device {} ".format(dvid)
                     question += "for VPP [y/N]? "
-                    answer = self._ask_user_yn(question, 'n')
-                    if answer == 'y':
+                    answer = self._ask_user_yn(question, "n")
+                    if answer == "y":
                         vppd[dvid] = device
                 for dit in vppd.items():
                     dvid = dit[0]
                     device = dit[1]
                         vppd[dvid] = device
                 for dit in vppd.items():
                     dvid = dit[0]
                     device = dit[1]
-                    if 'unused' in device and len(device['unused']) != 0 and \
-                            device['unused'][0] != '':
-                        driver = device['unused'][0]
+                    if (
+                        "unused" in device
+                        and len(device["unused"]) != 0
+                        and device["unused"][0] != ""
+                    ):
+                        driver = device["unused"][0]
                         logging.debug(
                         logging.debug(
-                            'Binding device {} to driver {}'.format(dvid,
-                                                                    driver))
+                            "Binding device {} to driver {}".format(dvid, driver)
+                        )
                         ret = VppPCIUtil.bind_vpp_device(node, driver, dvid)
                         if ret:
                         ret = VppPCIUtil.bind_vpp_device(node, driver, dvid)
                         if ret:
-                            logging.debug(
-                                'Could not bind device {}'.format(dvid))
+                            logging.debug("Could not bind device {}".format(dvid))
                         else:
                             dpdk_devices[dvid] = device
                             del other_devices[dvid]
                         else:
                             dpdk_devices[dvid] = device
                             del other_devices[dvid]
@@ -1121,22 +1160,23 @@ class AutoConfig(object):
 
         for i in self._nodes.items():
             node = i[1]
 
         for i in self._nodes.items():
             node = i[1]
-            devices = node['devices']
-            all_devices = devices['other_devices']
-            all_devices.update(devices['dpdk_devices'])
-            all_devices.update(devices['kernel_devices'])
+            devices = node["devices"]
+            all_devices = devices["other_devices"]
+            all_devices.update(devices["dpdk_devices"])
+            all_devices.update(devices["kernel_devices"])
 
             current_ifcs = {}
             interfaces = {}
 
             current_ifcs = {}
             interfaces = {}
-            if 'interfaces' in node:
-                current_ifcs = node['interfaces']
+            if "interfaces" in node:
+                current_ifcs = node["interfaces"]
             if current_ifcs:
                 for ifc in current_ifcs.values():
             if current_ifcs:
                 for ifc in current_ifcs.values():
-                    dvid = ifc['pci_address']
+                    dvid = ifc["pci_address"]
                     if dvid in all_devices:
                     if dvid in all_devices:
-                        VppPCIUtil.vpp_create_interface(interfaces, dvid,
-                                                        all_devices[dvid])
-            node['interfaces'] = interfaces
+                        VppPCIUtil.vpp_create_interface(
+                            interfaces, dvid, all_devices[dvid]
+                        )
+            node["interfaces"] = interfaces
 
         self.updateconfig()
 
 
         self.updateconfig()
 
@@ -1148,86 +1188,98 @@ class AutoConfig(object):
 
         for i in self._nodes.items():
             node = i[1]
 
         for i in self._nodes.items():
             node = i[1]
-            devices = node['devices']
-            other_devices = devices['other_devices']
-            kernel_devices = devices['kernel_devices']
-            dpdk_devices = devices['dpdk_devices']
+            devices = node["devices"]
+            other_devices = devices["other_devices"]
+            kernel_devices = devices["kernel_devices"]
+            dpdk_devices = devices["dpdk_devices"]
 
             if other_devices:
 
             if other_devices:
-                self._modify_other_devices(node, other_devices,
-                                           kernel_devices, dpdk_devices)
+                self._modify_other_devices(
+                    node, other_devices, kernel_devices, dpdk_devices
+                )
 
                 # Get the devices again for this node
                 self._get_device(node)
 
                 # Get the devices again for this node
                 self._get_device(node)
-                devices = node['devices']
-                kernel_devices = devices['kernel_devices']
-                dpdk_devices = devices['dpdk_devices']
+                devices = node["devices"]
+                kernel_devices = devices["kernel_devices"]
+                dpdk_devices = devices["dpdk_devices"]
 
             klen = len(kernel_devices)
             if klen > 0:
                 print("\nThese devices are safe to be used with VPP.\n")
                 VppPCIUtil.show_vpp_devices(kernel_devices)
 
             klen = len(kernel_devices)
             if klen > 0:
                 print("\nThese devices are safe to be used with VPP.\n")
                 VppPCIUtil.show_vpp_devices(kernel_devices)
-                question = "\nWould you like to use any of these " \
-                           "device(s) for VPP [y/N]? "
-                answer = self._ask_user_yn(question, 'n')
-                if answer == 'y':
+                question = (
+                    "\nWould you like to use any of these " "device(s) for VPP [y/N]? "
+                )
+                answer = self._ask_user_yn(question, "n")
+                if answer == "y":
                     vppd = {}
                     for dit in kernel_devices.items():
                         dvid = dit[0]
                         device = dit[1]
                         question = "Would you like to use device {} ".format(dvid)
                         question += "for VPP [y/N]? "
                     vppd = {}
                     for dit in kernel_devices.items():
                         dvid = dit[0]
                         device = dit[1]
                         question = "Would you like to use device {} ".format(dvid)
                         question += "for VPP [y/N]? "
-                        answer = self._ask_user_yn(question, 'n')
-                        if answer == 'y':
+                        answer = self._ask_user_yn(question, "n")
+                        if answer == "y":
                             vppd[dvid] = device
                     for dit in vppd.items():
                         dvid = dit[0]
                         device = dit[1]
                             vppd[dvid] = device
                     for dit in vppd.items():
                         dvid = dit[0]
                         device = dit[1]
-                        if 'unused' in device and len(
-                                device['unused']) != 0 and device['unused'][0] != '':
-                            driver = device['unused'][0]
-                            question = "Would you like to bind the driver {} for {} [y/N]? ".format(driver, dvid)
-                            answer = self._ask_user_yn(question, 'n')
-                            if answer == 'y':
-                                logging.debug('Binding device {} to driver {}'.format(dvid, driver))
+                        if (
+                            "unused" in device
+                            and len(device["unused"]) != 0
+                            and device["unused"][0] != ""
+                        ):
+                            driver = device["unused"][0]
+                            question = "Would you like to bind the driver {} for {} [y/N]? ".format(
+                                driver, dvid
+                            )
+                            answer = self._ask_user_yn(question, "n")
+                            if answer == "y":
+                                logging.debug(
+                                    "Binding device {} to driver {}".format(
+                                        dvid, driver
+                                    )
+                                )
                                 ret = VppPCIUtil.bind_vpp_device(node, driver, dvid)
                                 if ret:
                                 ret = VppPCIUtil.bind_vpp_device(node, driver, dvid)
                                 if ret:
-                                    logging.debug('Could not bind device {}'.format(dvid))
+                                    logging.debug(
+                                        "Could not bind device {}".format(dvid)
+                                    )
                         dpdk_devices[dvid] = device
                         del kernel_devices[dvid]
 
             dlen = len(dpdk_devices)
             if dlen > 0:
                 print("\nThese device(s) are already using DPDK.\n")
                         dpdk_devices[dvid] = device
                         del kernel_devices[dvid]
 
             dlen = len(dpdk_devices)
             if dlen > 0:
                 print("\nThese device(s) are already using DPDK.\n")
-                VppPCIUtil.show_vpp_devices(dpdk_devices,
-                                            show_interfaces=False)
+                VppPCIUtil.show_vpp_devices(dpdk_devices, show_interfaces=False)
                 question = "\nWould you like to remove any of "
                 question += "these device(s) [y/N]? "
                 question = "\nWould you like to remove any of "
                 question += "these device(s) [y/N]? "
-                answer = self._ask_user_yn(question, 'n')
-                if answer == 'y':
+                answer = self._ask_user_yn(question, "n")
+                if answer == "y":
                     vppdl = {}
                     for dit in dpdk_devices.items():
                         dvid = dit[0]
                         device = dit[1]
                     vppdl = {}
                     for dit in dpdk_devices.items():
                         dvid = dit[0]
                         device = dit[1]
-                        question = "Would you like to remove {} [y/N]? ". \
-                            format(dvid)
-                        answer = self._ask_user_yn(question, 'n')
-                        if answer == 'y':
+                        question = "Would you like to remove {} [y/N]? ".format(dvid)
+                        answer = self._ask_user_yn(question, "n")
+                        if answer == "y":
                             vppdl[dvid] = device
                     for dit in vppdl.items():
                         dvid = dit[0]
                         device = dit[1]
                             vppdl[dvid] = device
                     for dit in vppdl.items():
                         dvid = dit[0]
                         device = dit[1]
-                        if 'unused' in device and len(
-                                device['unused']) != 0 and device['unused'][0] != '':
-                            driver = device['unused'][0]
+                        if (
+                            "unused" in device
+                            and len(device["unused"]) != 0
+                            and device["unused"][0] != ""
+                        ):
+                            driver = device["unused"][0]
                             logging.debug(
                             logging.debug(
-                                'Binding device {} to driver {}'.format(
-                                    dvid, driver))
-                            ret = VppPCIUtil.bind_vpp_device(node, driver,
-                                                             dvid)
+                                "Binding device {} to driver {}".format(dvid, driver)
+                            )
+                            ret = VppPCIUtil.bind_vpp_device(node, driver, dvid)
                             if ret:
                             if ret:
-                                logging.debug(
-                                    'Could not bind device {}'.format(dvid))
+                                logging.debug("Could not bind device {}".format(dvid))
                             else:
                                 kernel_devices[dvid] = device
                                 del dpdk_devices[dvid]
                             else:
                                 kernel_devices[dvid] = device
                                 del dpdk_devices[dvid]
@@ -1237,7 +1289,7 @@ class AutoConfig(object):
                 dvid = dit[0]
                 device = dit[1]
                 VppPCIUtil.vpp_create_interface(interfaces, dvid, device)
                 dvid = dit[0]
                 device = dit[1]
                 VppPCIUtil.vpp_create_interface(interfaces, dvid, device)
-            node['interfaces'] = interfaces
+            node["interfaces"] = interfaces
 
         self._update_auto_config()
         self.updateconfig()
 
         self._update_auto_config()
         self.updateconfig()
@@ -1251,29 +1303,27 @@ class AutoConfig(object):
         for i in self._nodes.items():
             node = i[1]
 
         for i in self._nodes.items():
             node = i[1]
 
-            total = node['hugepages']['actual_total']
-            free = node['hugepages']['free']
-            size = node['hugepages']['size']
-            memfree = node['hugepages']['memfree'].split(' ')[0]
-            hugesize = int(size.split(' ')[0])
+            total = node["hugepages"]["actual_total"]
+            free = node["hugepages"]["free"]
+            size = node["hugepages"]["size"]
+            memfree = node["hugepages"]["memfree"].split(" ")[0]
+            hugesize = int(size.split(" ")[0])
             # The max number of huge pages should be no more than
             # 70% of total free memory
             maxpages = (int(memfree) * MAX_PERCENT_FOR_HUGE_PAGES // 100) // hugesize
             # The max number of huge pages should be no more than
             # 70% of total free memory
             maxpages = (int(memfree) * MAX_PERCENT_FOR_HUGE_PAGES // 100) // hugesize
-            print("\nThere currently {} {} huge pages free.".format(
-                free, size))
-            question = "Do you want to reconfigure the number of " \
-                       "huge pages [y/N]? "
-            answer = self._ask_user_yn(question, 'n')
-            if answer == 'n':
-                node['hugepages']['total'] = total
+            print("\nThere currently {} {} huge pages free.".format(free, size))
+            question = "Do you want to reconfigure the number of " "huge pages [y/N]? "
+            answer = self._ask_user_yn(question, "n")
+            if answer == "n":
+                node["hugepages"]["total"] = total
                 continue
 
                 continue
 
-            print("\nThere currently a total of {} huge pages.".
-                  format(total))
-            question = "How many huge pages do you want [{} - {}][{}]? ". \
-                format(MIN_TOTAL_HUGE_PAGES, maxpages, MIN_TOTAL_HUGE_PAGES)
+            print("\nThere currently a total of {} huge pages.".format(total))
+            question = "How many huge pages do you want [{} - {}][{}]? ".format(
+                MIN_TOTAL_HUGE_PAGES, maxpages, MIN_TOTAL_HUGE_PAGES
+            )
             answer = self._ask_user_range(question, 1024, maxpages, 1024)
             answer = self._ask_user_range(question, 1024, maxpages, 1024)
-            node['hugepages']['total'] = str(answer)
+            node["hugepages"]["total"] = str(answer)
 
         # Update auto-config.yaml
         self._update_auto_config()
 
         # Update auto-config.yaml
         self._update_auto_config()
@@ -1298,21 +1348,25 @@ class AutoConfig(object):
         for i in self._nodes.items():
             node = i[1]
 
         for i in self._nodes.items():
             node = i[1]
 
-            question = "\nHow many active-open / tcp client sessions are " \
-                       "expected [0-10000000][0]? "
+            question = (
+                "\nHow many active-open / tcp client sessions are "
+                "expected [0-10000000][0]? "
+            )
             answer = self._ask_user_range(question, 0, 10000000, 0)
             # Less than 10K is equivalent to 0
             if int(answer) < 10000:
                 answer = 0
             answer = self._ask_user_range(question, 0, 10000000, 0)
             # Less than 10K is equivalent to 0
             if int(answer) < 10000:
                 answer = 0
-            node['tcp']['active_open_sessions'] = answer
+            node["tcp"]["active_open_sessions"] = answer
 
 
-            question = "How many passive-open / tcp server sessions are " \
-                       "expected [0-10000000][0]? "
+            question = (
+                "How many passive-open / tcp server sessions are "
+                "expected [0-10000000][0]? "
+            )
             answer = self._ask_user_range(question, 0, 10000000, 0)
             # Less than 10K is equivalent to 0
             if int(answer) < 10000:
                 answer = 0
             answer = self._ask_user_range(question, 0, 10000000, 0)
             # Less than 10K is equivalent to 0
             if int(answer) < 10000:
                 answer = 0
-            node['tcp']['passive_open_sessions'] = answer
+            node["tcp"]["passive_open_sessions"] = answer
 
         # Update auto-config.yaml
         self._update_auto_config()
 
         # Update auto-config.yaml
         self._update_auto_config()
@@ -1329,7 +1383,7 @@ class AutoConfig(object):
         :type node: dict
         """
 
         :type node: dict
         """
 
-        print('\nWe are patching the node "{}":\n'.format(node['host']))
+        print('\nWe are patching the node "{}":\n'.format(node["host"]))
         QemuUtils.build_qemu(node, force_install=True, apply_patch=True)
 
     @staticmethod
         QemuUtils.build_qemu(node, force_install=True, apply_patch=True)
 
     @staticmethod
@@ -1341,44 +1395,44 @@ class AutoConfig(object):
 
         cpu = CpuUtils.get_cpu_info_per_node(node)
 
 
         cpu = CpuUtils.get_cpu_info_per_node(node)
 
-        item = 'Model name'
+        item = "Model name"
         if item in cpu:
             print("{:>20}:    {}".format(item, cpu[item]))
         if item in cpu:
             print("{:>20}:    {}".format(item, cpu[item]))
-        item = 'CPU(s)'
+        item = "CPU(s)"
         if item in cpu:
             print("{:>20}:    {}".format(item, cpu[item]))
         if item in cpu:
             print("{:>20}:    {}".format(item, cpu[item]))
-        item = 'Thread(s) per core'
+        item = "Thread(s) per core"
         if item in cpu:
             print("{:>20}:    {}".format(item, cpu[item]))
         if item in cpu:
             print("{:>20}:    {}".format(item, cpu[item]))
-        item = 'Core(s) per socket'
+        item = "Core(s) per socket"
         if item in cpu:
             print("{:>20}:    {}".format(item, cpu[item]))
         if item in cpu:
             print("{:>20}:    {}".format(item, cpu[item]))
-        item = 'Socket(s)'
+        item = "Socket(s)"
         if item in cpu:
             print("{:>20}:    {}".format(item, cpu[item]))
         if item in cpu:
             print("{:>20}:    {}".format(item, cpu[item]))
-        item = 'NUMA node(s)'
+        item = "NUMA node(s)"
         numa_nodes = 0
         if item in cpu:
             numa_nodes = int(cpu[item])
         for i in range(0, numa_nodes):
             item = "NUMA node{} CPU(s)".format(i)
             print("{:>20}:    {}".format(item, cpu[item]))
         numa_nodes = 0
         if item in cpu:
             numa_nodes = int(cpu[item])
         for i in range(0, numa_nodes):
             item = "NUMA node{} CPU(s)".format(i)
             print("{:>20}:    {}".format(item, cpu[item]))
-        item = 'CPU max MHz'
+        item = "CPU max MHz"
         if item in cpu:
             print("{:>20}:    {}".format(item, cpu[item]))
         if item in cpu:
             print("{:>20}:    {}".format(item, cpu[item]))
-        item = 'CPU min MHz'
+        item = "CPU min MHz"
         if item in cpu:
             print("{:>20}:    {}".format(item, cpu[item]))
 
         if item in cpu:
             print("{:>20}:    {}".format(item, cpu[item]))
 
-        if node['cpu']['smt_enabled']:
-            smt = 'Enabled'
+        if node["cpu"]["smt_enabled"]:
+            smt = "Enabled"
         else:
         else:
-            smt = 'Disabled'
-        print("{:>20}:    {}".format('SMT', smt))
+            smt = "Disabled"
+        print("{:>20}:    {}".format("SMT", smt))
 
         # VPP Threads
         print("\nVPP Threads: (Name: Cpu Number)")
 
         # VPP Threads
         print("\nVPP Threads: (Name: Cpu Number)")
-        vpp_processes = cpu['vpp_processes']
+        vpp_processes = cpu["vpp_processes"]
         for i in vpp_processes.items():
             print("  {:10}: {:4}".format(i[0], i[1]))
 
         for i in vpp_processes.items():
             print("  {:10}: {:4}".format(i[0], i[1]))
 
@@ -1389,8 +1443,8 @@ class AutoConfig(object):
 
         """
 
 
         """
 
-        if 'cpu' in node and 'total_mbufs' in node['cpu']:
-            total_mbufs = node['cpu']['total_mbufs']
+        if "cpu" in node and "total_mbufs" in node["cpu"]:
+            total_mbufs = node["cpu"]["total_mbufs"]
             if total_mbufs != 0:
                 print("Total Number of Buffers: {}".format(total_mbufs))
 
             if total_mbufs != 0:
                 print("Total Number of Buffers: {}".format(total_mbufs))
 
@@ -1412,16 +1466,14 @@ class AutoConfig(object):
         dpdk_devs = vpp.get_dpdk_devices()
         if len(dpdk_devs):
             print("\nDevices bound to DPDK drivers:")
         dpdk_devs = vpp.get_dpdk_devices()
         if len(dpdk_devs):
             print("\nDevices bound to DPDK drivers:")
-            vpp.show_vpp_devices(dpdk_devs, show_interfaces=True,
-                                 show_header=False)
+            vpp.show_vpp_devices(dpdk_devs, show_interfaces=True, show_header=False)
         else:
             print("\nNo devices bound to DPDK drivers")
 
         other_devs = vpp.get_other_devices()
         if len(other_devs):
             print("\nDevices not bound to Kernel or DPDK drivers:")
         else:
             print("\nNo devices bound to DPDK drivers")
 
         other_devs = vpp.get_other_devices()
         if len(other_devs):
             print("\nDevices not bound to Kernel or DPDK drivers:")
-            vpp.show_vpp_devices(other_devs, show_interfaces=True,
-                                 show_header=False)
+            vpp.show_vpp_devices(other_devs, show_interfaces=True, show_header=False)
         else:
             print("\nNo devices not bound to Kernel or DPDK drivers")
 
         else:
             print("\nNo devices not bound to Kernel or DPDK drivers")
 
@@ -1436,28 +1488,33 @@ class AutoConfig(object):
             print("None")
             return
 
             print("None")
             return
 
-        print("{:30} {:4} {:4} {:7} {:4} {:7}".
-              format('Name', 'Numa', 'RXQs',
-                     'RXDescs', 'TXQs', 'TXDescs'))
+        print(
+            "{:30} {:4} {:4} {:7} {:4} {:7}".format(
+                "Name", "Numa", "RXQs", "RXDescs", "TXQs", "TXDescs"
+            )
+        )
         for intf in sorted(interfaces.items()):
             name = intf[0]
             value = intf[1]
         for intf in sorted(interfaces.items()):
             name = intf[0]
             value = intf[1]
-            if name == 'local0':
+            if name == "local0":
                 continue
                 continue
-            numa = rx_qs = rx_ds = tx_qs = tx_ds = ''
-            if 'numa' in value:
-                numa = int(value['numa'])
-            if 'rx queues' in value:
-                rx_qs = int(value['rx queues'])
-            if 'rx descs' in value:
-                rx_ds = int(value['rx descs'])
-            if 'tx queues' in value:
-                tx_qs = int(value['tx queues'])
-            if 'tx descs' in value:
-                tx_ds = int(value['tx descs'])
-
-            print("{:30} {:>4} {:>4} {:>7} {:>4} {:>7}".
-                  format(name, numa, rx_qs, rx_ds, tx_qs, tx_ds))
+            numa = rx_qs = rx_ds = tx_qs = tx_ds = ""
+            if "numa" in value:
+                numa = int(value["numa"])
+            if "rx queues" in value:
+                rx_qs = int(value["rx queues"])
+            if "rx descs" in value:
+                rx_ds = int(value["rx descs"])
+            if "tx queues" in value:
+                tx_qs = int(value["tx queues"])
+            if "tx descs" in value:
+                tx_ds = int(value["tx descs"])
+
+            print(
+                "{:30} {:>4} {:>4} {:>7} {:>4} {:>7}".format(
+                    name, numa, rx_qs, rx_ds, tx_qs, tx_ds
+                )
+            )
 
     @staticmethod
     def hugepage_info(node):
 
     @staticmethod
     def hugepage_info(node):
@@ -1476,7 +1533,7 @@ class AutoConfig(object):
 
         :returns: boolean
         """
 
         :returns: boolean
         """
-        if 'interfaces' in node and len(node['interfaces']):
+        if "interfaces" in node and len(node["interfaces"]):
             return True
         else:
             return False
             return True
         else:
             return False
@@ -1493,30 +1550,33 @@ class AutoConfig(object):
         min_sys_res = True
 
         # CPUs
         min_sys_res = True
 
         # CPUs
-        if 'layout' in node['cpu']:
-            total_cpus = len(node['cpu']['layout'])
+        if "layout" in node["cpu"]:
+            total_cpus = len(node["cpu"]["layout"])
             if total_cpus < 2:
             if total_cpus < 2:
-                print("\nThere is only {} CPU(s) available on this system. "
-                      "This is not enough to run VPP.".format(total_cpus))
+                print(
+                    "\nThere is only {} CPU(s) available on this system. "
+                    "This is not enough to run VPP.".format(total_cpus)
+                )
                 min_sys_res = False
 
         # System Memory
                 min_sys_res = False
 
         # System Memory
-        if 'free' in node['hugepages'] and \
-                'memfree' in node['hugepages'] and \
-                'size' in node['hugepages']:
-            free = node['hugepages']['free']
-            memfree = float(node['hugepages']['memfree'].split(' ')[0])
-            hugesize = float(node['hugepages']['size'].split(' ')[0])
+        if (
+            "free" in node["hugepages"]
+            and "memfree" in node["hugepages"]
+            and "size" in node["hugepages"]
+        ):
+            free = node["hugepages"]["free"]
+            memfree = float(node["hugepages"]["memfree"].split(" ")[0])
+            hugesize = float(node["hugepages"]["size"].split(" ")[0])
 
             memhugepages = MIN_TOTAL_HUGE_PAGES * hugesize
             percentmemhugepages = (memhugepages / memfree) * 100
 
             memhugepages = MIN_TOTAL_HUGE_PAGES * hugesize
             percentmemhugepages = (memhugepages / memfree) * 100
-            if free is '0' and \
-                    percentmemhugepages > MAX_PERCENT_FOR_HUGE_PAGES:
+            if free is "0" and percentmemhugepages > MAX_PERCENT_FOR_HUGE_PAGES:
                 print(
                     "\nThe System has only {} of free memory. You will not "
                     "be able to allocate enough Huge Pages for VPP.".format(
                 print(
                     "\nThe System has only {} of free memory. You will not "
                     "be able to allocate enough Huge Pages for VPP.".format(
-                        int(
-                            memfree))
+                        int(memfree)
+                    )
                 )
                 min_sys_res = False
 
                 )
                 min_sys_res = False
 
@@ -1541,11 +1601,9 @@ class AutoConfig(object):
 
             # Grub
             print("\nGrub Command Line:")
 
             # Grub
             print("\nGrub Command Line:")
-            if 'grub' in node:
-                print("  Current: {}".format(
-                    node['grub']['current_cmdline']))
-                print("  Configured: {}".format(
-                    node['grub']['default_cmdline']))
+            if "grub" in node:
+                print("  Current: {}".format(node["grub"]["current_cmdline"]))
+                print("  Configured: {}".format(node["grub"]["default_cmdline"]))
 
             # Huge Pages
             print("\nHuge Pages:")
 
             # Huge Pages
             print("\nHuge Pages:")
@@ -1586,17 +1644,18 @@ class AutoConfig(object):
         interfaces_with_ip = []
         for intf in sorted(interfaces.items()):
             name = intf[0]
         interfaces_with_ip = []
         for intf in sorted(interfaces.items()):
             name = intf[0]
-            if name == 'local0':
+            if name == "local0":
                 continue
 
                 continue
 
-            question = "Would you like add address to " \
-                       "interface {} [Y/n]? ".format(name)
-            answer = self._ask_user_yn(question, 'y')
-            if answer == 'y':
+            question = "Would you like add address to " "interface {} [Y/n]? ".format(
+                name
+            )
+            answer = self._ask_user_yn(question, "y")
+            if answer == "y":
                 address = {}
                 addr = self._ask_user_ipv4()
                 address = {}
                 addr = self._ask_user_ipv4()
-                address['name'] = name
-                address['addr'] = addr
+                address["name"] = name
+                address["addr"] = addr
                 interfaces_with_ip.append(address)
 
         return interfaces_with_ip
                 interfaces_with_ip.append(address)
 
         return interfaces_with_ip
@@ -1618,40 +1677,37 @@ class AutoConfig(object):
                 for items in sorted(current_ints.items()):
                     name = items[0]
                     value = items[1]
                 for items in sorted(current_ints.items()):
                     name = items[0]
                     value = items[1]
-                    if 'address' not in value:
-                        address = 'Not Set'
+                    if "address" not in value:
+                        address = "Not Set"
                     else:
                     else:
-                        address = value['address']
-                    print("{:30} {:20} {:10}".format(name, address,
-                                                     value['state']))
-                question = "\nWould you like to keep this configuration " \
-                           "[Y/n]? "
-                answer = self._ask_user_yn(question, 'y')
-                if answer == 'y':
+                        address = value["address"]
+                    print("{:30} {:20} {:10}".format(name, address, value["state"]))
+                question = "\nWould you like to keep this configuration " "[Y/n]? "
+                answer = self._ask_user_yn(question, "y")
+                if answer == "y":
                     continue
             else:
                     continue
             else:
-                print("\nThere are currently no interfaces with IP "
-                      "addresses.")
+                print("\nThere are currently no interfaces with IP " "addresses.")
 
             # Create a script that add the ip addresses to the interfaces
             # and brings the interfaces up
             ints_with_addrs = self._ipv4_interface_setup_questions(node)
 
             # Create a script that add the ip addresses to the interfaces
             # and brings the interfaces up
             ints_with_addrs = self._ipv4_interface_setup_questions(node)
-            content = ''
+            content = ""
             for ints in ints_with_addrs:
             for ints in ints_with_addrs:
-                name = ints['name']
-                addr = ints['addr']
-                setipstr = 'set int ip address {} {}\n'.format(name, addr)
-                setintupstr = 'set int state {} up\n'.format(name)
+                name = ints["name"]
+                addr = ints["addr"]
+                setipstr = "set int ip address {} {}\n".format(name, addr)
+                setintupstr = "set int state {} up\n".format(name)
                 content += setipstr + setintupstr
 
             # Write the content to the script
                 content += setipstr + setintupstr
 
             # Write the content to the script
-            rootdir = node['rootdir']
-            filename = rootdir + '/vpp/vpp-config/scripts/set_int_ipv4_and_up'
-            with open(filename, 'w+') as sfile:
+            rootdir = node["rootdir"]
+            filename = rootdir + "/vpp/vpp-config/scripts/set_int_ipv4_and_up"
+            with open(filename, "w+") as sfile:
                 sfile.write(content)
 
             # Execute the script
                 sfile.write(content)
 
             # Execute the script
-            cmd = 'vppctl exec {}'.format(filename)
+            cmd = "vppctl exec {}".format(filename)
             (ret, stdout, stderr) = VPPUtil.exec_command(cmd)
             if ret != 0:
                 logging.debug(stderr)
             (ret, stdout, stderr) = VPPUtil.exec_command(cmd)
             if ret != 0:
                 logging.debug(stderr)
@@ -1679,12 +1735,13 @@ class AutoConfig(object):
         # First delete all the Virtual interfaces
         for intf in sorted(interfaces.items()):
             name = intf[0]
         # First delete all the Virtual interfaces
         for intf in sorted(interfaces.items()):
             name = intf[0]
-            if name[:7] == 'Virtual':
-                cmd = 'vppctl delete vhost-user {}'.format(name)
+            if name[:7] == "Virtual":
+                cmd = "vppctl delete vhost-user {}".format(name)
                 (ret, stdout, stderr) = vpputl.exec_command(cmd)
                 if ret != 0:
                 (ret, stdout, stderr) = vpputl.exec_command(cmd)
                 if ret != 0:
-                    logging.debug('{} failed on node {} {}'.format(
-                        cmd, node['host'], stderr))
+                    logging.debug(
+                        "{} failed on node {} {}".format(cmd, node["host"], stderr)
+                    )
 
         # Create a virtual interface, for each interface the user wants to use
         interfaces = vpputl.get_hardware(node)
 
         # Create a virtual interface, for each interface the user wants to use
         interfaces = vpputl.get_hardware(node)
@@ -1694,36 +1751,38 @@ class AutoConfig(object):
         inum = 1
         for intf in sorted(interfaces.items()):
             name = intf[0]
         inum = 1
         for intf in sorted(interfaces.items()):
             name = intf[0]
-            if name == 'local0':
+            if name == "local0":
                 continue
 
                 continue
 
-            question = "Would you like connect this interface {} to " \
-                       "the VM [Y/n]? ".format(name)
-            answer = self._ask_user_yn(question, 'y')
-            if answer == 'y':
-                sockfilename = '/var/run/vpp/{}.sock'.format(
-                    name.replace('/', '_'))
+            question = (
+                "Would you like connect this interface {} to "
+                "the VM [Y/n]? ".format(name)
+            )
+            answer = self._ask_user_yn(question, "y")
+            if answer == "y":
+                sockfilename = "/var/run/vpp/{}.sock".format(name.replace("/", "_"))
                 if os.path.exists(sockfilename):
                     os.remove(sockfilename)
                 if os.path.exists(sockfilename):
                     os.remove(sockfilename)
-                cmd = 'vppctl create vhost-user socket {} server'.format(
-                    sockfilename)
+                cmd = "vppctl create vhost-user socket {} server".format(sockfilename)
                 (ret, stdout, stderr) = vpputl.exec_command(cmd)
                 if ret != 0:
                     raise RuntimeError(
                 (ret, stdout, stderr) = vpputl.exec_command(cmd)
                 if ret != 0:
                     raise RuntimeError(
-                        "Couldn't execute the command {}, {}.".format(cmd,
-                                                                      stderr))
-                vintname = stdout.rstrip('\r\n')
+                        "Couldn't execute the command {}, {}.".format(cmd, stderr)
+                    )
+                vintname = stdout.rstrip("\r\n")
 
 
-                cmd = 'chmod 777 {}'.format(sockfilename)
+                cmd = "chmod 777 {}".format(sockfilename)
                 (ret, stdout, stderr) = vpputl.exec_command(cmd)
                 if ret != 0:
                     raise RuntimeError(
                 (ret, stdout, stderr) = vpputl.exec_command(cmd)
                 if ret != 0:
                     raise RuntimeError(
-                        "Couldn't execute the command {}, {}.".format(cmd,
-                                                                      stderr))
-
-                interface = {'name': name,
-                             'virtualinterface': '{}'.format(vintname),
-                             'bridge': '{}'.format(inum)}
+                        "Couldn't execute the command {}, {}.".format(cmd, stderr)
+                    )
+
+                interface = {
+                    "name": name,
+                    "virtualinterface": "{}".format(vintname),
+                    "bridge": "{}".format(inum),
+                }
                 inum += 1
                 interfaces_with_virtual_interfaces.append(interface)
 
                 inum += 1
                 interfaces_with_virtual_interfaces.append(interface)
 
@@ -1743,49 +1802,58 @@ class AutoConfig(object):
             print("\nThis the current bridge configuration:")
             VPPUtil.show_bridge(node)
             question = "\nWould you like to keep this configuration [Y/n]? "
             print("\nThis the current bridge configuration:")
             VPPUtil.show_bridge(node)
             question = "\nWould you like to keep this configuration [Y/n]? "
-            answer = self._ask_user_yn(question, 'y')
-            if answer == 'y':
+            answer = self._ask_user_yn(question, "y")
+            if answer == "y":
                 continue
 
             # Create a script that builds a bridge configuration with
             # physical interfaces and virtual interfaces
             ints_with_vints = self._create_vints_questions(node)
                 continue
 
             # Create a script that builds a bridge configuration with
             # physical interfaces and virtual interfaces
             ints_with_vints = self._create_vints_questions(node)
-            content = ''
+            content = ""
             for intf in ints_with_vints:
             for intf in ints_with_vints:
-                vhoststr = '\n'.join([
-                    'comment { The following command creates the socket }',
-                    'comment { and returns a virtual interface }',
-                    'comment {{ create vhost-user socket '
-                    '/var/run/vpp/sock{}.sock server }}\n'.format(
-                        intf['bridge'])
-                ])
-
-                setintdnstr = 'set interface state {} down\n'.format(
-                    intf['name'])
-
-                setintbrstr = 'set interface l2 bridge {} {}\n'.format(
-                    intf['name'], intf['bridge'])
-                setvintbrstr = 'set interface l2 bridge {} {}\n'.format(
-                    intf['virtualinterface'], intf['bridge'])
+                vhoststr = "\n".join(
+                    [
+                        "comment { The following command creates the socket }",
+                        "comment { and returns a virtual interface }",
+                        "comment {{ create vhost-user socket "
+                        "/var/run/vpp/sock{}.sock server }}\n".format(intf["bridge"]),
+                    ]
+                )
+
+                setintdnstr = "set interface state {} down\n".format(intf["name"])
+
+                setintbrstr = "set interface l2 bridge {} {}\n".format(
+                    intf["name"], intf["bridge"]
+                )
+                setvintbrstr = "set interface l2 bridge {} {}\n".format(
+                    intf["virtualinterface"], intf["bridge"]
+                )
 
                 # set interface state VirtualEthernet/0/0/0 up
 
                 # set interface state VirtualEthernet/0/0/0 up
-                setintvststr = 'set interface state {} up\n'.format(
-                    intf['virtualinterface'])
+                setintvststr = "set interface state {} up\n".format(
+                    intf["virtualinterface"]
+                )
 
                 # set interface state VirtualEthernet/0/0/0 down
 
                 # set interface state VirtualEthernet/0/0/0 down
-                setintupstr = 'set interface state {} up\n'.format(
-                    intf['name'])
-
-                content += vhoststr + setintdnstr + setintbrstr + setvintbrstr + setintvststr + setintupstr
+                setintupstr = "set interface state {} up\n".format(intf["name"])
+
+                content += (
+                    vhoststr
+                    + setintdnstr
+                    + setintbrstr
+                    + setvintbrstr
+                    + setintvststr
+                    + setintupstr
+                )
 
             # Write the content to the script
 
             # Write the content to the script
-            rootdir = node['rootdir']
-            filename = rootdir + '/vpp/vpp-config/scripts/create_vms_and_connect_to_vpp'
-            with open(filename, 'w+') as sfile:
+            rootdir = node["rootdir"]
+            filename = rootdir + "/vpp/vpp-config/scripts/create_vms_and_connect_to_vpp"
+            with open(filename, "w+") as sfile:
                 sfile.write(content)
 
             # Execute the script
                 sfile.write(content)
 
             # Execute the script
-            cmd = 'vppctl exec {}'.format(filename)
+            cmd = "vppctl exec {}".format(filename)
             (ret, stdout, stderr) = VPPUtil.exec_command(cmd)
             if ret != 0:
                 logging.debug(stderr)
             (ret, stdout, stderr) = VPPUtil.exec_command(cmd)
             if ret != 0:
                 logging.debug(stderr)
@@ -1813,12 +1881,13 @@ class AutoConfig(object):
         # First delete all the Virtual interfaces
         for intf in sorted(interfaces.items()):
             name = intf[0]
         # First delete all the Virtual interfaces
         for intf in sorted(interfaces.items()):
             name = intf[0]
-            if name[:7] == 'Virtual':
-                cmd = 'vppctl delete vhost-user {}'.format(name)
+            if name[:7] == "Virtual":
+                cmd = "vppctl delete vhost-user {}".format(name)
                 (ret, stdout, stderr) = vpputl.exec_command(cmd)
                 if ret != 0:
                 (ret, stdout, stderr) = vpputl.exec_command(cmd)
                 if ret != 0:
-                    logging.debug('{} failed on node {} {}'.format(
-                        cmd, node['host'], stderr))
+                    logging.debug(
+                        "{} failed on node {} {}".format(cmd, node["host"], stderr)
+                    )
 
         # Create a virtual interface, for each interface the user wants to use
         interfaces = vpputl.get_hardware(node)
 
         # Create a virtual interface, for each interface the user wants to use
         interfaces = vpputl.get_hardware(node)
@@ -1828,39 +1897,45 @@ class AutoConfig(object):
         inum = 1
 
         while True:
         inum = 1
 
         while True:
-            print('\nPlease pick one interface to connect to the iperf VM.')
+            print("\nPlease pick one interface to connect to the iperf VM.")
             for intf in sorted(interfaces.items()):
                 name = intf[0]
             for intf in sorted(interfaces.items()):
                 name = intf[0]
-                if name == 'local0':
+                if name == "local0":
                     continue
 
                     continue
 
-                question = "Would you like connect this interface {} to " \
-                           "the VM [y/N]? ".format(name)
-                answer = self._ask_user_yn(question, 'n')
-                if answer == 'y':
-                    self._sockfilename = '/var/run/vpp/{}.sock'.format(
-                        name.replace('/', '_'))
+                question = (
+                    "Would you like connect this interface {} to "
+                    "the VM [y/N]? ".format(name)
+                )
+                answer = self._ask_user_yn(question, "n")
+                if answer == "y":
+                    self._sockfilename = "/var/run/vpp/{}.sock".format(
+                        name.replace("/", "_")
+                    )
                     if os.path.exists(self._sockfilename):
                         os.remove(self._sockfilename)
                     if os.path.exists(self._sockfilename):
                         os.remove(self._sockfilename)
-                    cmd = 'vppctl create vhost-user socket {} server'.format(
-                        self._sockfilename)
+                    cmd = "vppctl create vhost-user socket {} server".format(
+                        self._sockfilename
+                    )
                     (ret, stdout, stderr) = vpputl.exec_command(cmd)
                     if ret != 0:
                         raise RuntimeError(
                     (ret, stdout, stderr) = vpputl.exec_command(cmd)
                     if ret != 0:
                         raise RuntimeError(
-                            "Couldn't execute the command {}, {}.".format(
-                                cmd, stderr))
-                    vintname = stdout.rstrip('\r\n')
+                            "Couldn't execute the command {}, {}.".format(cmd, stderr)
+                        )
+                    vintname = stdout.rstrip("\r\n")
 
 
-                    cmd = 'chmod 777 {}'.format(self._sockfilename)
+                    cmd = "chmod 777 {}".format(self._sockfilename)
                     (ret, stdout, stderr) = vpputl.exec_command(cmd)
                     if ret != 0:
                         raise RuntimeError(
                     (ret, stdout, stderr) = vpputl.exec_command(cmd)
                     if ret != 0:
                         raise RuntimeError(
-                            "Couldn't execute the command {}, {}.".format(
-                                cmd, stderr))
-
-                    interface = {'name': name,
-                                 'virtualinterface': '{}'.format(vintname),
-                                 'bridge': '{}'.format(inum)}
+                            "Couldn't execute the command {}, {}.".format(cmd, stderr)
+                        )
+
+                    interface = {
+                        "name": name,
+                        "virtualinterface": "{}".format(vintname),
+                        "bridge": "{}".format(inum),
+                    }
                     inum += 1
                     interfaces_with_virtual_interfaces.append(interface)
                     return interfaces_with_virtual_interfaces
                     inum += 1
                     interfaces_with_virtual_interfaces.append(interface)
                     return interfaces_with_virtual_interfaces
@@ -1879,52 +1954,62 @@ class AutoConfig(object):
             print("\nThis the current bridge configuration:")
             ifaces = VPPUtil.show_bridge(node)
             question = "\nWould you like to keep this configuration [Y/n]? "
             print("\nThis the current bridge configuration:")
             ifaces = VPPUtil.show_bridge(node)
             question = "\nWould you like to keep this configuration [Y/n]? "
-            answer = self._ask_user_yn(question, 'y')
-            if answer == 'y':
-                self._sockfilename = '/var/run/vpp/{}.sock'.format(
-                    ifaces[0]['name'].replace('/', '_'))
+            answer = self._ask_user_yn(question, "y")
+            if answer == "y":
+                self._sockfilename = "/var/run/vpp/{}.sock".format(
+                    ifaces[0]["name"].replace("/", "_")
+                )
                 if os.path.exists(self._sockfilename):
                     continue
 
             # Create a script that builds a bridge configuration with
             # physical interfaces and virtual interfaces
             ints_with_vints = self._iperf_vm_questions(node)
                 if os.path.exists(self._sockfilename):
                     continue
 
             # Create a script that builds a bridge configuration with
             # physical interfaces and virtual interfaces
             ints_with_vints = self._iperf_vm_questions(node)
-            content = ''
+            content = ""
             for intf in ints_with_vints:
             for intf in ints_with_vints:
-                vhoststr = '\n'.join([
-                    'comment { The following command creates the socket }',
-                    'comment { and returns a virtual interface }',
-                    'comment {{ create vhost-user socket '
-                    '/var/run/vpp/sock{}.sock server }}\n'.format(
-                        intf['bridge'])
-                ])
-
-                setintdnstr = 'set interface state {} down\n'.format(
-                    intf['name'])
-
-                setintbrstr = 'set interface l2 bridge {} {}\n'.format(
-                    intf['name'], intf['bridge'])
-                setvintbrstr = 'set interface l2 bridge {} {}\n'.format(
-                    intf['virtualinterface'], intf['bridge'])
+                vhoststr = "\n".join(
+                    [
+                        "comment { The following command creates the socket }",
+                        "comment { and returns a virtual interface }",
+                        "comment {{ create vhost-user socket "
+                        "/var/run/vpp/sock{}.sock server }}\n".format(intf["bridge"]),
+                    ]
+                )
+
+                setintdnstr = "set interface state {} down\n".format(intf["name"])
+
+                setintbrstr = "set interface l2 bridge {} {}\n".format(
+                    intf["name"], intf["bridge"]
+                )
+                setvintbrstr = "set interface l2 bridge {} {}\n".format(
+                    intf["virtualinterface"], intf["bridge"]
+                )
 
                 # set interface state VirtualEthernet/0/0/0 up
 
                 # set interface state VirtualEthernet/0/0/0 up
-                setintvststr = 'set interface state {} up\n'.format(
-                    intf['virtualinterface'])
+                setintvststr = "set interface state {} up\n".format(
+                    intf["virtualinterface"]
+                )
 
                 # set interface state VirtualEthernet/0/0/0 down
 
                 # set interface state VirtualEthernet/0/0/0 down
-                setintupstr = 'set interface state {} up\n'.format(
-                    intf['name'])
-
-                content += vhoststr + setintdnstr + setintbrstr + setvintbrstr + setintvststr + setintupstr
+                setintupstr = "set interface state {} up\n".format(intf["name"])
+
+                content += (
+                    vhoststr
+                    + setintdnstr
+                    + setintbrstr
+                    + setvintbrstr
+                    + setintvststr
+                    + setintupstr
+                )
 
             # Write the content to the script
 
             # Write the content to the script
-            rootdir = node['rootdir']
-            filename = rootdir + '/vpp/vpp-config/scripts/create_iperf_vm'
-            with open(filename, 'w+') as sfile:
+            rootdir = node["rootdir"]
+            filename = rootdir + "/vpp/vpp-config/scripts/create_iperf_vm"
+            with open(filename, "w+") as sfile:
                 sfile.write(content)
 
             # Execute the script
                 sfile.write(content)
 
             # Execute the script
-            cmd = 'vppctl exec {}'.format(filename)
+            cmd = "vppctl exec {}".format(filename)
             (ret, stdout, stderr) = VPPUtil.exec_command(cmd)
             if ret != 0:
                 logging.debug(stderr)
             (ret, stdout, stderr) = VPPUtil.exec_command(cmd)
             if ret != 0:
                 logging.debug(stderr)
@@ -1943,21 +2028,22 @@ class AutoConfig(object):
         :type name: str
         """
 
         :type name: str
         """
 
-        cmd = 'virsh list'
+        cmd = "virsh list"
         (ret, stdout, stderr) = VPPUtil.exec_command(cmd)
         if ret != 0:
             logging.debug(stderr)
             raise RuntimeError(
         (ret, stdout, stderr) = VPPUtil.exec_command(cmd)
         if ret != 0:
             logging.debug(stderr)
             raise RuntimeError(
-                "Couldn't execute the command {} : {}".format(cmd, stderr))
+                "Couldn't execute the command {} : {}".format(cmd, stderr)
+            )
 
         if re.findall(name, stdout):
 
         if re.findall(name, stdout):
-            cmd = 'virsh destroy {}'.format(name)
+            cmd = "virsh destroy {}".format(name)
             (ret, stdout, stderr) = VPPUtil.exec_command(cmd)
             if ret != 0:
                 logging.debug(stderr)
                 raise RuntimeError(
             (ret, stdout, stderr) = VPPUtil.exec_command(cmd)
             if ret != 0:
                 logging.debug(stderr)
                 raise RuntimeError(
-                    "Couldn't execute the command {} : {}".format(
-                        cmd, stderr))
+                    "Couldn't execute the command {} : {}".format(cmd, stderr)
+                )
 
     def create_iperf_vm(self, vmname):
         """
 
     def create_iperf_vm(self, vmname):
         """
@@ -1968,36 +2054,39 @@ class AutoConfig(object):
 
         # Read the iperf VM template file
         distro = VPPUtil.get_linux_distro()
 
         # Read the iperf VM template file
         distro = VPPUtil.get_linux_distro()
-        if distro[0] == 'Ubuntu':
-            tfilename = \
-                '{}/vpp/vpp-config/configs/iperf-ubuntu.xml.template'.format(
-                    self._rootdir)
+        if distro[0] == "Ubuntu":
+            tfilename = "{}/vpp/vpp-config/configs/iperf-ubuntu.xml.template".format(
+                self._rootdir
+            )
         else:
         else:
-            tfilename = \
-                '{}/vpp/vpp-config/configs/iperf-centos.xml.template'.format(
-                    self._rootdir)
+            tfilename = "{}/vpp/vpp-config/configs/iperf-centos.xml.template".format(
+                self._rootdir
+            )
 
 
-        with open(tfilename, 'r') as tfile:
+        with open(tfilename, "r") as tfile:
             tcontents = tfile.read()
         tfile.close()
 
         # Add the variables
             tcontents = tfile.read()
         tfile.close()
 
         # Add the variables
-        imagename = '{}/vpp/vpp-config/{}'.format(
-            self._rootdir, IPERFVM_IMAGE)
-        isoname = '{}/vpp/vpp-config/{}'.format(self._rootdir, IPERFVM_ISO)
-        tcontents = tcontents.format(vmname=vmname, imagename=imagename,
-                                     isoname=isoname,
-                                     vhostsocketname=self._sockfilename)
+        imagename = "{}/vpp/vpp-config/{}".format(self._rootdir, IPERFVM_IMAGE)
+        isoname = "{}/vpp/vpp-config/{}".format(self._rootdir, IPERFVM_ISO)
+        tcontents = tcontents.format(
+            vmname=vmname,
+            imagename=imagename,
+            isoname=isoname,
+            vhostsocketname=self._sockfilename,
+        )
 
         # Write the xml
 
         # Write the xml
-        ifilename = '{}/vpp/vpp-config/{}'.format(self._rootdir, IPERFVM_XML)
-        with open(ifilename, 'w+') as ifile:
+        ifilename = "{}/vpp/vpp-config/{}".format(self._rootdir, IPERFVM_XML)
+        with open(ifilename, "w+") as ifile:
             ifile.write(tcontents)
         ifile.close()
 
             ifile.write(tcontents)
         ifile.close()
 
-        cmd = 'virsh create {}'.format(ifilename)
+        cmd = "virsh create {}".format(ifilename)
         (ret, stdout, stderr) = VPPUtil.exec_command(cmd)
         if ret != 0:
             logging.debug(stderr)
             raise RuntimeError(
         (ret, stdout, stderr) = VPPUtil.exec_command(cmd)
         if ret != 0:
             logging.debug(stderr)
             raise RuntimeError(
-                "Couldn't execute the command {} : {}".format(cmd, stderr))
+                "Couldn't execute the command {} : {}".format(cmd, stderr)
+            )
index 23f418d..f6ba3d7 100644 (file)
@@ -78,13 +78,14 @@ class CpuUtils(object):
             #           1,1,0,0,,1,1,1,0
             if ret != 0:
                 raise RuntimeError(
             #           1,1,0,0,,1,1,1,0
             if ret != 0:
                 raise RuntimeError(
-                    "Failed to execute ssh command, ret: {} err: {}".format(
-                        ret, stderr))
-            node['cpuinfo'] = list()
+                    "Failed to execute ssh command, ret: {} err: {}".format(ret, stderr)
+                )
+            node["cpuinfo"] = list()
             for line in stdout.split("\n"):
             for line in stdout.split("\n"):
-                if line != '' and line[0] != "#":
-                    node['cpuinfo'].append([CpuUtils.__str2int(x) for x in
-                                            line.split(",")])
+                if line != "" and line[0] != "#":
+                    node["cpuinfo"].append(
+                        [CpuUtils.__str2int(x) for x in line.split(",")]
+                    )
 
     @staticmethod
     def cpu_node_count(node):
 
     @staticmethod
     def cpu_node_count(node):
@@ -137,13 +138,14 @@ class CpuUtils(object):
 
         if smt_enabled and not smt_used:
             cpu_list_len = len(cpu_list)
 
         if smt_enabled and not smt_used:
             cpu_list_len = len(cpu_list)
-            cpu_list = cpu_list[:cpu_list_len // CpuUtils.NR_OF_THREADS]
+            cpu_list = cpu_list[: cpu_list_len // CpuUtils.NR_OF_THREADS]
 
         return cpu_list
 
     @staticmethod
 
         return cpu_list
 
     @staticmethod
-    def cpu_slice_of_list_per_node(node, cpu_node, skip_cnt=0, cpu_cnt=0,
-                                   smt_used=False):
+    def cpu_slice_of_list_per_node(
+        node, cpu_node, skip_cnt=0, cpu_cnt=0, smt_used=False
+    ):
         """Return string of node related list of CPU numbers.
 
         :param node: Node dictionary with cpuinfo.
         """Return string of node related list of CPU numbers.
 
         :param node: Node dictionary with cpuinfo.
@@ -171,20 +173,20 @@ class CpuUtils(object):
             cpu_cnt = cpu_list_len - skip_cnt
 
         if smt_used:
             cpu_cnt = cpu_list_len - skip_cnt
 
         if smt_used:
-            cpu_list_0 = cpu_list[:cpu_list_len // CpuUtils.NR_OF_THREADS]
-            cpu_list_1 = cpu_list[cpu_list_len // CpuUtils.NR_OF_THREADS:]
-            cpu_list = [cpu for cpu in cpu_list_0[skip_cnt:skip_cnt + cpu_cnt]]
-            cpu_list_ex = [cpu for cpu in
-                           cpu_list_1[skip_cnt:skip_cnt + cpu_cnt]]
+            cpu_list_0 = cpu_list[: cpu_list_len // CpuUtils.NR_OF_THREADS]
+            cpu_list_1 = cpu_list[cpu_list_len // CpuUtils.NR_OF_THREADS :]
+            cpu_list = [cpu for cpu in cpu_list_0[skip_cnt : skip_cnt + cpu_cnt]]
+            cpu_list_ex = [cpu for cpu in cpu_list_1[skip_cnt : skip_cnt + cpu_cnt]]
             cpu_list.extend(cpu_list_ex)
         else:
             cpu_list.extend(cpu_list_ex)
         else:
-            cpu_list = [cpu for cpu in cpu_list[skip_cnt:skip_cnt + cpu_cnt]]
+            cpu_list = [cpu for cpu in cpu_list[skip_cnt : skip_cnt + cpu_cnt]]
 
         return cpu_list
 
     @staticmethod
 
         return cpu_list
 
     @staticmethod
-    def cpu_list_per_node_str(node, cpu_node, skip_cnt=0, cpu_cnt=0, sep=",",
-                              smt_used=False):
+    def cpu_list_per_node_str(
+        node, cpu_node, skip_cnt=0, cpu_cnt=0, sep=",", smt_used=False
+    ):
         """Return string of node related list of CPU numbers.
 
         :param node: Node dictionary with cpuinfo.
         """Return string of node related list of CPU numbers.
 
         :param node: Node dictionary with cpuinfo.
@@ -203,15 +205,15 @@ class CpuUtils(object):
         :rtype: str
         """
 
         :rtype: str
         """
 
-        cpu_list = CpuUtils.cpu_slice_of_list_per_node(node, cpu_node,
-                                                       skip_cnt=skip_cnt,
-                                                       cpu_cnt=cpu_cnt,
-                                                       smt_used=smt_used)
+        cpu_list = CpuUtils.cpu_slice_of_list_per_node(
+            node, cpu_node, skip_cnt=skip_cnt, cpu_cnt=cpu_cnt, smt_used=smt_used
+        )
         return sep.join(str(cpu) for cpu in cpu_list)
 
     @staticmethod
         return sep.join(str(cpu) for cpu in cpu_list)
 
     @staticmethod
-    def cpu_range_per_node_str(node, cpu_node, skip_cnt=0, cpu_cnt=0, sep="-",
-                               smt_used=False):
+    def cpu_range_per_node_str(
+        node, cpu_node, skip_cnt=0, cpu_cnt=0, sep="-", smt_used=False
+    ):
         """Return string of node related range of CPU numbers, e.g. 0-4.
 
         :param node: Node dictionary with cpuinfo.
         """Return string of node related range of CPU numbers, e.g. 0-4.
 
         :param node: Node dictionary with cpuinfo.
@@ -230,18 +232,16 @@ class CpuUtils(object):
         :rtype: str
         """
 
         :rtype: str
         """
 
-        cpu_list = CpuUtils.cpu_slice_of_list_per_node(node, cpu_node,
-                                                       skip_cnt=skip_cnt,
-                                                       cpu_cnt=cpu_cnt,
-                                                       smt_used=smt_used)
+        cpu_list = CpuUtils.cpu_slice_of_list_per_node(
+            node, cpu_node, skip_cnt=skip_cnt, cpu_cnt=cpu_cnt, smt_used=smt_used
+        )
         if smt_used:
             cpu_list_len = len(cpu_list)
         if smt_used:
             cpu_list_len = len(cpu_list)
-            cpu_list_0 = cpu_list[:cpu_list_len // CpuUtils.NR_OF_THREADS]
-            cpu_list_1 = cpu_list[cpu_list_len // CpuUtils.NR_OF_THREADS:]
-            cpu_range = "{}{}{},{}{}{}".format(cpu_list_0[0], sep,
-                                               cpu_list_0[-1],
-                                               cpu_list_1[0], sep,
-                                               cpu_list_1[-1])
+            cpu_list_0 = cpu_list[: cpu_list_len // CpuUtils.NR_OF_THREADS]
+            cpu_list_1 = cpu_list[cpu_list_len // CpuUtils.NR_OF_THREADS :]
+            cpu_range = "{}{}{},{}{}{}".format(
+                cpu_list_0[0], sep, cpu_list_0[-1], cpu_list_1[0], sep, cpu_list_1[-1]
+            )
         else:
             cpu_range = "{}{}{}".format(cpu_list[0], sep, cpu_list[-1])
 
         else:
             cpu_range = "{}{}{}".format(cpu_list[0], sep, cpu_list[-1])
 
@@ -260,28 +260,30 @@ class CpuUtils(object):
         cmd = "lscpu"
         ret, stdout, stderr = VPPUtil.exec_command(cmd)
         if ret != 0:
         cmd = "lscpu"
         ret, stdout, stderr = VPPUtil.exec_command(cmd)
         if ret != 0:
-            raise RuntimeError("lscpu command failed on node {} {}."
-                               .format(node['host'], stderr))
+            raise RuntimeError(
+                "lscpu command failed on node {} {}.".format(node["host"], stderr)
+            )
 
         cpuinfo = {}
 
         cpuinfo = {}
-        lines = stdout.split('\n')
+        lines = stdout.split("\n")
         for line in lines:
         for line in lines:
-            if line != '':
-                linesplit = re.split(r':\s+', line)
+            if line != "":
+                linesplit = re.split(r":\s+", line)
                 cpuinfo[linesplit[0]] = linesplit[1]
 
         cmd = "cat /proc/*/task/*/stat | awk '{print $1" "$2" "$39}'"
         ret, stdout, stderr = VPPUtil.exec_command(cmd)
         if ret != 0:
                 cpuinfo[linesplit[0]] = linesplit[1]
 
         cmd = "cat /proc/*/task/*/stat | awk '{print $1" "$2" "$39}'"
         ret, stdout, stderr = VPPUtil.exec_command(cmd)
         if ret != 0:
-            raise RuntimeError("cat command failed on node {} {}."
-                               .format(node['host'], stderr))
+            raise RuntimeError(
+                "cat command failed on node {} {}.".format(node["host"], stderr)
+            )
 
         vpp_processes = {}
 
         vpp_processes = {}
-        vpp_lines = re.findall(r'\w+\(vpp_\w+\)\w+', stdout)
+        vpp_lines = re.findall(r"\w+\(vpp_\w+\)\w+", stdout)
         for line in vpp_lines:
         for line in vpp_lines:
-            linesplit = re.split(r'\w+\(', line)[1].split(')')
+            linesplit = re.split(r"\w+\(", line)[1].split(")")
             vpp_processes[linesplit[0]] = linesplit[1]
 
             vpp_processes[linesplit[0]] = linesplit[1]
 
-        cpuinfo['vpp_processes'] = vpp_processes
+        cpuinfo["vpp_processes"] = vpp_processes
 
         return cpuinfo
 
         return cpuinfo
index 0b7e08b..e1da7ae 100644 (file)
@@ -12,7 +12,7 @@
 # limitations under the License.
 
 """QEMU utilities library."""
 # limitations under the License.
 
 """QEMU utilities library."""
-from  __future__ import absolute_import, division
+from __future__ import absolute_import, division
 
 from time import time, sleep
 import json
 
 from time import time, sleep
 import json
@@ -24,12 +24,13 @@ from vpplib.constants import Constants
 
 class NodeType(object):
     """Defines node types used in topology dictionaries."""
 
 class NodeType(object):
     """Defines node types used in topology dictionaries."""
+
     # Device Under Test (this node has VPP running on it)
     # Device Under Test (this node has VPP running on it)
-    DUT = 'DUT'
+    DUT = "DUT"
     # Traffic Generator (this node has traffic generator on it)
     # Traffic Generator (this node has traffic generator on it)
-    TG = 'TG'
+    TG = "TG"
     # Virtual Machine (this node running on DUT node)
     # Virtual Machine (this node running on DUT node)
-    VM = 'VM'
+    VM = "VM"
 
 
 class QemuUtils(object):
 
 
 class QemuUtils(object):
@@ -39,43 +40,46 @@ class QemuUtils(object):
     def __init__(self, qemu_id=1):
         self._qemu_id = qemu_id
         # Path to QEMU binary
     def __init__(self, qemu_id=1):
         self._qemu_id = qemu_id
         # Path to QEMU binary
-        self._qemu_bin = '/usr/bin/qemu-system-x86_64'
+        self._qemu_bin = "/usr/bin/qemu-system-x86_64"
         # QEMU Machine Protocol socket
         # QEMU Machine Protocol socket
-        self._qmp_sock = '/tmp/qmp{0}.sock'.format(self._qemu_id)
+        self._qmp_sock = "/tmp/qmp{0}.sock".format(self._qemu_id)
         # QEMU Guest Agent socket
         # QEMU Guest Agent socket
-        self._qga_sock = '/tmp/qga{0}.sock'.format(self._qemu_id)
+        self._qga_sock = "/tmp/qga{0}.sock".format(self._qemu_id)
         # QEMU PID file
         # QEMU PID file
-        self._pid_file = '/tmp/qemu{0}.pid'.format(self._qemu_id)
+        self._pid_file = "/tmp/qemu{0}.pid".format(self._qemu_id)
         self._qemu_opt = {}
         # Default 1 CPU.
         self._qemu_opt = {}
         # Default 1 CPU.
-        self._qemu_opt['smp'] = '-smp 1,sockets=1,cores=1,threads=1'
+        self._qemu_opt["smp"] = "-smp 1,sockets=1,cores=1,threads=1"
         # Daemonize the QEMU process after initialization. Default one
         # management interface.
         # Daemonize the QEMU process after initialization. Default one
         # management interface.
-        self._qemu_opt['options'] = '-cpu host -daemonize -enable-kvm ' \
-            '-machine pc,accel=kvm,usb=off,mem-merge=off ' \
-            '-net nic,macaddr=52:54:00:00:{0:02x}:ff -balloon none'\
-            .format(self._qemu_id)
-        self._qemu_opt['ssh_fwd_port'] = 10021 + qemu_id
+        self._qemu_opt["options"] = (
+            "-cpu host -daemonize -enable-kvm "
+            "-machine pc,accel=kvm,usb=off,mem-merge=off "
+            "-net nic,macaddr=52:54:00:00:{0:02x}:ff -balloon none".format(
+                self._qemu_id
+            )
+        )
+        self._qemu_opt["ssh_fwd_port"] = 10021 + qemu_id
         # Default serial console port
         # Default serial console port
-        self._qemu_opt['serial_port'] = 4555 + qemu_id
+        self._qemu_opt["serial_port"] = 4555 + qemu_id
         # Default 512MB virtual RAM
         # Default 512MB virtual RAM
-        self._qemu_opt['mem_size'] = 512
+        self._qemu_opt["mem_size"] = 512
         # Default huge page mount point, required for Vhost-user interfaces.
         # Default huge page mount point, required for Vhost-user interfaces.
-        self._qemu_opt['huge_mnt'] = '/mnt/huge'
+        self._qemu_opt["huge_mnt"] = "/mnt/huge"
         # Default do not allocate huge pages.
         # Default do not allocate huge pages.
-        self._qemu_opt['huge_allocate'] = False
+        self._qemu_opt["huge_allocate"] = False
         # Default image for CSIT virl setup
         # Default image for CSIT virl setup
-        self._qemu_opt['disk_image'] = '/var/lib/vm/vhost-nested.img'
+        self._qemu_opt["disk_image"] = "/var/lib/vm/vhost-nested.img"
         # VM node info dict
         self._vm_info = {
         # VM node info dict
         self._vm_info = {
-            'type': NodeType.VM,
-            'port': self._qemu_opt['ssh_fwd_port'],
-            'username': 'cisco',
-            'password': 'cisco',
-            'interfaces': {},
+            "type": NodeType.VM,
+            "port": self._qemu_opt["ssh_fwd_port"],
+            "username": "cisco",
+            "password": "cisco",
+            "interfaces": {},
         }
         # Virtio queue count
         }
         # Virtio queue count
-        self._qemu_opt['queues'] = 1
+        self._qemu_opt["queues"] = 1
         self._vhost_id = 0
         self._ssh = None
         self._node = None
         self._vhost_id = 0
         self._ssh = None
         self._node = None
@@ -101,9 +105,9 @@ class QemuUtils(object):
         :type threads: int
         :type sockets: int
         """
         :type threads: int
         :type sockets: int
         """
-        self._qemu_opt['smp'] = \
-            '-smp {},cores={},threads={},sockets={}'.format(
-                cpus, cores, threads, sockets)
+        self._qemu_opt["smp"] = "-smp {},cores={},threads={},sockets={}".format(
+            cpus, cores, threads, sockets
+        )
 
     def qemu_set_ssh_fwd_port(self, fwd_port):
         """Set host port for guest SSH forwarding.
 
     def qemu_set_ssh_fwd_port(self, fwd_port):
         """Set host port for guest SSH forwarding.
@@ -111,8 +115,8 @@ class QemuUtils(object):
         :param fwd_port: Port number on host for guest SSH forwarding.
         :type fwd_port: int
         """
         :param fwd_port: Port number on host for guest SSH forwarding.
         :type fwd_port: int
         """
-        self._qemu_opt['ssh_fwd_port'] = fwd_port
-        self._vm_info['port'] = fwd_port
+        self._qemu_opt["ssh_fwd_port"] = fwd_port
+        self._vm_info["port"] = fwd_port
 
     def qemu_set_serial_port(self, port):
         """Set serial console port.
 
     def qemu_set_serial_port(self, port):
         """Set serial console port.
@@ -120,7 +124,7 @@ class QemuUtils(object):
         :param port: Serial console port.
         :type port: int
         """
         :param port: Serial console port.
         :type port: int
         """
-        self._qemu_opt['serial_port'] = port
+        self._qemu_opt["serial_port"] = port
 
     def qemu_set_mem_size(self, mem_size):
         """Set virtual RAM size.
 
     def qemu_set_mem_size(self, mem_size):
         """Set virtual RAM size.
@@ -128,7 +132,7 @@ class QemuUtils(object):
         :param mem_size: RAM size in Mega Bytes.
         :type mem_size: int
         """
         :param mem_size: RAM size in Mega Bytes.
         :type mem_size: int
         """
-        self._qemu_opt['mem_size'] = int(mem_size)
+        self._qemu_opt["mem_size"] = int(mem_size)
 
     def qemu_set_huge_mnt(self, huge_mnt):
         """Set hugefile mount point.
 
     def qemu_set_huge_mnt(self, huge_mnt):
         """Set hugefile mount point.
@@ -136,11 +140,11 @@ class QemuUtils(object):
         :param huge_mnt: System hugefile mount point.
         :type huge_mnt: int
         """
         :param huge_mnt: System hugefile mount point.
         :type huge_mnt: int
         """
-        self._qemu_opt['huge_mnt'] = huge_mnt
+        self._qemu_opt["huge_mnt"] = huge_mnt
 
     def qemu_set_huge_allocate(self):
         """Set flag to allocate more huge pages if needed."""
 
     def qemu_set_huge_allocate(self):
         """Set flag to allocate more huge pages if needed."""
-        self._qemu_opt['huge_allocate'] = True
+        self._qemu_opt["huge_allocate"] = True
 
     def qemu_set_disk_image(self, disk_image):
         """Set disk image.
 
     def qemu_set_disk_image(self, disk_image):
         """Set disk image.
@@ -148,7 +152,7 @@ class QemuUtils(object):
         :param disk_image: Path of the disk image.
         :type disk_image: str
         """
         :param disk_image: Path of the disk image.
         :type disk_image: str
         """
-        self._qemu_opt['disk_image'] = disk_image
+        self._qemu_opt["disk_image"] = disk_image
 
     def qemu_set_affinity(self, *host_cpus):
         """Set qemu affinity by getting thread PIDs via QMP and taskset to list
 
     def qemu_set_affinity(self, *host_cpus):
         """Set qemu affinity by getting thread PIDs via QMP and taskset to list
@@ -157,36 +161,41 @@ class QemuUtils(object):
         :param host_cpus: List of CPU cores.
         :type host_cpus: list
         """
         :param host_cpus: List of CPU cores.
         :type host_cpus: list
         """
-        qemu_cpus = self._qemu_qmp_exec('query-cpus')['return']
+        qemu_cpus = self._qemu_qmp_exec("query-cpus")["return"]
 
         if len(qemu_cpus) != len(host_cpus):
 
         if len(qemu_cpus) != len(host_cpus):
-            logging.debug('Host CPU count {0}, Qemu Thread count {1}'.format(
-                len(host_cpus), len(qemu_cpus)))
-            raise ValueError('Host CPU count must match Qemu Thread count')
+            logging.debug(
+                "Host CPU count {0}, Qemu Thread count {1}".format(
+                    len(host_cpus), len(qemu_cpus)
+                )
+            )
+            raise ValueError("Host CPU count must match Qemu Thread count")
 
         for qemu_cpu, host_cpu in zip(qemu_cpus, host_cpus):
 
         for qemu_cpu, host_cpu in zip(qemu_cpus, host_cpus):
-            cmd = 'taskset -pc {0} {1}'.format(host_cpu, qemu_cpu['thread_id'])
+            cmd = "taskset -pc {0} {1}".format(host_cpu, qemu_cpu["thread_id"])
             (ret_code, _, stderr) = self._ssh.exec_command_sudo(cmd)
             if int(ret_code) != 0:
             (ret_code, _, stderr) = self._ssh.exec_command_sudo(cmd)
             if int(ret_code) != 0:
-                logging.debug('Set affinity failed {0}'.format(stderr))
-                raise RuntimeError('Set affinity failed on {0}'.format(
-                    self._node['host']))
+                logging.debug("Set affinity failed {0}".format(stderr))
+                raise RuntimeError(
+                    "Set affinity failed on {0}".format(self._node["host"])
+                )
 
     def qemu_set_scheduler_policy(self):
         """Set scheduler policy to SCHED_RR with priority 1 for all Qemu CPU
 
     def qemu_set_scheduler_policy(self):
         """Set scheduler policy to SCHED_RR with priority 1 for all Qemu CPU
-        processes.
+         processes.
 
 
-       :raises RuntimeError: Set scheduler policy failed.
+        :raises RuntimeError: Set scheduler policy failed.
         """
         """
-        qemu_cpus = self._qemu_qmp_exec('query-cpus')['return']
+        qemu_cpus = self._qemu_qmp_exec("query-cpus")["return"]
 
         for qemu_cpu in qemu_cpus:
 
         for qemu_cpu in qemu_cpus:
-            cmd = 'chrt -r -p 1 {0}'.format(qemu_cpu['thread_id'])
+            cmd = "chrt -r -p 1 {0}".format(qemu_cpu["thread_id"])
             (ret_code, _, stderr) = self._ssh.exec_command_sudo(cmd)
             if int(ret_code) != 0:
             (ret_code, _, stderr) = self._ssh.exec_command_sudo(cmd)
             if int(ret_code) != 0:
-                logging.debug('Set SCHED_RR failed {0}'.format(stderr))
-                raise RuntimeError('Set SCHED_RR failed on {0}'.format(
-                    self._node['host']))
+                logging.debug("Set SCHED_RR failed {0}".format(stderr))
+                raise RuntimeError(
+                    "Set SCHED_RR failed on {0}".format(self._node["host"])
+                )
 
     def qemu_set_node(self, node):
         """Set node to run QEMU on.
 
     def qemu_set_node(self, node):
         """Set node to run QEMU on.
@@ -195,7 +204,7 @@ class QemuUtils(object):
         :type node: dict
         """
         self._node = node
         :type node: dict
         """
         self._node = node
-        self._vm_info['host'] = node['host']
+        self._vm_info["host"] = node["host"]
 
     def qemu_add_vhost_user_if(self, socket, server=True, mac=None):
         """Add Vhost-user interface.
 
     def qemu_add_vhost_user_if(self, socket, server=True, mac=None):
         """Add Vhost-user interface.
@@ -210,31 +219,33 @@ class QemuUtils(object):
         """
         self._vhost_id += 1
         # Create unix socket character device.
         """
         self._vhost_id += 1
         # Create unix socket character device.
-        chardev = ' -chardev socket,id=char{0},path={1}'.format(self._vhost_id,
-                                                                socket)
+        chardev = " -chardev socket,id=char{0},path={1}".format(self._vhost_id, socket)
         if server is True:
         if server is True:
-            chardev += ',server'
-        self._qemu_opt['options'] += chardev
+            chardev += ",server"
+        self._qemu_opt["options"] += chardev
         # Create Vhost-user network backend.
         # Create Vhost-user network backend.
-        netdev = (' -netdev vhost-user,id=vhost{0},chardev=char{0},queues={1}'
-                  .format(self._vhost_id, self._qemu_opt['queues']))
-        self._qemu_opt['options'] += netdev
+        netdev = " -netdev vhost-user,id=vhost{0},chardev=char{0},queues={1}".format(
+            self._vhost_id, self._qemu_opt["queues"]
+        )
+        self._qemu_opt["options"] += netdev
         # If MAC is not specified use auto-generated MAC address based on
         # template 52:54:00:00:<qemu_id>:<vhost_id>, e.g. vhost1 MAC of QEMU
         #  with ID 1 is 52:54:00:00:01:01
         if mac is None:
         # If MAC is not specified use auto-generated MAC address based on
         # template 52:54:00:00:<qemu_id>:<vhost_id>, e.g. vhost1 MAC of QEMU
         #  with ID 1 is 52:54:00:00:01:01
         if mac is None:
-            mac = '52:54:00:00:{0:02x}:{1:02x}'.\
-                format(self._qemu_id, self._vhost_id)
-        extend_options = 'mq=on,csum=off,gso=off,guest_tso4=off,'\
-            'guest_tso6=off,guest_ecn=off,mrg_rxbuf=off'
+            mac = "52:54:00:00:{0:02x}:{1:02x}".format(self._qemu_id, self._vhost_id)
+        extend_options = (
+            "mq=on,csum=off,gso=off,guest_tso4=off,"
+            "guest_tso6=off,guest_ecn=off,mrg_rxbuf=off"
+        )
         # Create Virtio network device.
         # Create Virtio network device.
-        device = ' -device virtio-net-pci,netdev=vhost{0},mac={1},{2}'.format(
-            self._vhost_id, mac, extend_options)
-        self._qemu_opt['options'] += device
+        device = " -device virtio-net-pci,netdev=vhost{0},mac={1},{2}".format(
+            self._vhost_id, mac, extend_options
+        )
+        self._qemu_opt["options"] += device
         # Add interface MAC and socket to the node dict
         # Add interface MAC and socket to the node dict
-        if_data = {'mac_address': mac, 'socket': socket}
-        if_name = 'vhost{}'.format(self._vhost_id)
-        self._vm_info['interfaces'][if_name] = if_data
+        if_data = {"mac_address": mac, "socket": socket}
+        if_name = "vhost{}".format(self._vhost_id)
+        self._vm_info["interfaces"][if_name] = if_data
         # Add socket to the socket list
         self._socks.append(socket)
 
         # Add socket to the socket list
         self._socks.append(socket)
 
@@ -250,41 +261,44 @@ class QemuUtils(object):
             response will contain the "error" keyword instead of "return".
         """
         # To enter command mode, the qmp_capabilities command must be issued.
             response will contain the "error" keyword instead of "return".
         """
         # To enter command mode, the qmp_capabilities command must be issued.
-        qmp_cmd = 'echo "{ \\"execute\\": \\"qmp_capabilities\\" }' \
-                  '{ \\"execute\\": \\"' + cmd + \
-                  '\\" }" | sudo -S socat - UNIX-CONNECT:' + self._qmp_sock
+        qmp_cmd = (
+            'echo "{ \\"execute\\": \\"qmp_capabilities\\" }'
+            '{ \\"execute\\": \\"'
+            + cmd
+            + '\\" }" | sudo -S socat - UNIX-CONNECT:'
+            + self._qmp_sock
+        )
 
         (ret_code, stdout, stderr) = self._ssh.exec_command(qmp_cmd)
         if int(ret_code) != 0:
 
         (ret_code, stdout, stderr) = self._ssh.exec_command(qmp_cmd)
         if int(ret_code) != 0:
-            logging.debug('QMP execute failed {0}'.format(stderr))
-            raise RuntimeError('QMP execute "{0}"'
-                               ' failed on {1}'.format(
-                cmd, self._node['host']))
+            logging.debug("QMP execute failed {0}".format(stderr))
+            raise RuntimeError(
+                'QMP execute "{0}"' " failed on {1}".format(cmd, self._node["host"])
+            )
         logging.debug(stdout)
         # Skip capabilities negotiation messages.
         out_list = stdout.splitlines()
         if len(out_list) < 3:
         logging.debug(stdout)
         # Skip capabilities negotiation messages.
         out_list = stdout.splitlines()
         if len(out_list) < 3:
-            raise RuntimeError('Invalid QMP output on {0}'.format(
-                self._node['host']))
+            raise RuntimeError("Invalid QMP output on {0}".format(self._node["host"]))
         return json.loads(out_list[2])
 
     def _qemu_qga_flush(self):
         return json.loads(out_list[2])
 
     def _qemu_qga_flush(self):
-        """Flush the QGA parser state
-        """
-        qga_cmd = '(printf "\xFF"; sleep 1) | ' \
-                  'sudo -S socat - UNIX-CONNECT:' + \
-                  self._qga_sock
+        """Flush the QGA parser state"""
+        qga_cmd = (
+            '(printf "\xFF"; sleep 1) | '
+            "sudo -S socat - UNIX-CONNECT:" + self._qga_sock
+        )
         # TODO: probably need something else
         (ret_code, stdout, stderr) = self._ssh.exec_command(qga_cmd)
         if int(ret_code) != 0:
         # TODO: probably need something else
         (ret_code, stdout, stderr) = self._ssh.exec_command(qga_cmd)
         if int(ret_code) != 0:
-            logging.debug('QGA execute failed {0}'.format(stderr))
-            raise RuntimeError('QGA execute "{0}" '
-                               'failed on {1}'.format(qga_cmd,
-                                                      self._node['host']))
+            logging.debug("QGA execute failed {0}".format(stderr))
+            raise RuntimeError(
+                'QGA execute "{0}" ' "failed on {1}".format(qga_cmd, self._node["host"])
+            )
         logging.debug(stdout)
         if not stdout:
             return {}
         logging.debug(stdout)
         if not stdout:
             return {}
-        return json.loads(stdout.split('\n', 1)[0])
+        return json.loads(stdout.split("\n", 1)[0])
 
     def _qemu_qga_exec(self, cmd):
         """Execute QGA command.
 
     def _qemu_qga_exec(self, cmd):
         """Execute QGA command.
@@ -294,20 +308,22 @@ class QemuUtils(object):
         :param cmd: QGA command to execute.
         :type cmd: str
         """
         :param cmd: QGA command to execute.
         :type cmd: str
         """
-        qga_cmd = '(echo "{ \\"execute\\": \\"' + \
-                  cmd + \
-                  '\\" }"; sleep 1) | sudo -S socat - UNIX-CONNECT:' + \
-                  self._qga_sock
+        qga_cmd = (
+            '(echo "{ \\"execute\\": \\"'
+            + cmd
+            + '\\" }"; sleep 1) | sudo -S socat - UNIX-CONNECT:'
+            + self._qga_sock
+        )
         (ret_code, stdout, stderr) = self._ssh.exec_command(qga_cmd)
         if int(ret_code) != 0:
         (ret_code, stdout, stderr) = self._ssh.exec_command(qga_cmd)
         if int(ret_code) != 0:
-            logging.debug('QGA execute failed {0}'.format(stderr))
-            raise RuntimeError('QGA execute "{0}"'
-                               ' failed on {1}'.format(
-                cmd, self._node['host']))
+            logging.debug("QGA execute failed {0}".format(stderr))
+            raise RuntimeError(
+                'QGA execute "{0}"' " failed on {1}".format(cmd, self._node["host"])
+            )
         logging.debug(stdout)
         if not stdout:
             return {}
         logging.debug(stdout)
         if not stdout:
             return {}
-        return json.loads(stdout.split('\n', 1)[0])
+        return json.loads(stdout.split("\n", 1)[0])
 
     def _wait_until_vm_boot(self, timeout=60):
         """Wait until QEMU VM is booted.
 
     def _wait_until_vm_boot(self, timeout=60):
         """Wait until QEMU VM is booted.
@@ -320,65 +336,69 @@ class QemuUtils(object):
         start = time()
         while True:
             if time() - start > timeout:
         start = time()
         while True:
             if time() - start > timeout:
-                raise RuntimeError('timeout, VM {0} not booted on {1}'.format(
-                    self._qemu_opt['disk_image'], self._node['host']))
+                raise RuntimeError(
+                    "timeout, VM {0} not booted on {1}".format(
+                        self._qemu_opt["disk_image"], self._node["host"]
+                    )
+                )
             out = None
             try:
                 self._qemu_qga_flush()
             out = None
             try:
                 self._qemu_qga_flush()
-                out = self._qemu_qga_exec('guest-ping')
+                out = self._qemu_qga_exec("guest-ping")
             except ValueError:
             except ValueError:
-                logging.debug(
-                    'QGA guest-ping unexpected output {}'.format(out))
+                logging.debug("QGA guest-ping unexpected output {}".format(out))
             # Empty output - VM not booted yet
             if not out:
                 sleep(5)
             # Non-error return - VM booted
             # Empty output - VM not booted yet
             if not out:
                 sleep(5)
             # Non-error return - VM booted
-            elif out.get('return') is not None:
+            elif out.get("return") is not None:
                 break
             # Skip error and wait
                 break
             # Skip error and wait
-            elif out.get('error') is not None:
+            elif out.get("error") is not None:
                 sleep(5)
             else:
                 # If there is an unexpected output from QGA guest-info, try
                 # again until timeout.
                 sleep(5)
             else:
                 # If there is an unexpected output from QGA guest-info, try
                 # again until timeout.
-                logging.debug(
-                    'QGA guest-ping unexpected output {}'.format(out))
+                logging.debug("QGA guest-ping unexpected output {}".format(out))
 
         logging.debug(
 
         logging.debug(
-            'VM {0} booted on {1}'.format(self._qemu_opt['disk_image'],
-                                          self._node['host']))
+            "VM {0} booted on {1}".format(
+                self._qemu_opt["disk_image"], self._node["host"]
+            )
+        )
 
     def _update_vm_interfaces(self):
         """Update interface names in VM node dict."""
         # Send guest-network-get-interfaces command via QGA, output example:
         # {"return": [{"name": "eth0", "hardware-address": "52:54:00:00:04:01"},
         # {"name": "eth1", "hardware-address": "52:54:00:00:04:02"}]}
 
     def _update_vm_interfaces(self):
         """Update interface names in VM node dict."""
         # Send guest-network-get-interfaces command via QGA, output example:
         # {"return": [{"name": "eth0", "hardware-address": "52:54:00:00:04:01"},
         # {"name": "eth1", "hardware-address": "52:54:00:00:04:02"}]}
-        out = self._qemu_qga_exec('guest-network-get-interfaces')
-        interfaces = out.get('return')
+        out = self._qemu_qga_exec("guest-network-get-interfaces")
+        interfaces = out.get("return")
         mac_name = {}
         if not interfaces:
             raise RuntimeError(
         mac_name = {}
         if not interfaces:
             raise RuntimeError(
-                'Get VM {0} interface list failed on {1}'.format(
-                    self._qemu_opt['disk_image'], self._node['host']))
+                "Get VM {0} interface list failed on {1}".format(
+                    self._qemu_opt["disk_image"], self._node["host"]
+                )
+            )
         # Create MAC-name dict
         for interface in interfaces:
         # Create MAC-name dict
         for interface in interfaces:
-            if 'hardware-address' not in interface:
+            if "hardware-address" not in interface:
                 continue
                 continue
-            mac_name[interface['hardware-address']] = interface['name']
+            mac_name[interface["hardware-address"]] = interface["name"]
         # Match interface by MAC and save interface name
         # Match interface by MAC and save interface name
-        for interface in self._vm_info['interfaces'].values():
-            mac = interface.get('mac_address')
+        for interface in self._vm_info["interfaces"].values():
+            mac = interface.get("mac_address")
             if_name = mac_name.get(mac)
             if if_name is None:
             if_name = mac_name.get(mac)
             if if_name is None:
-                logging.debug(
-                    'Interface name for MAC {} not found'.format(mac))
+                logging.debug("Interface name for MAC {} not found".format(mac))
             else:
             else:
-                interface['name'] = if_name
+                interface["name"] = if_name
 
     def _huge_page_check(self, allocate=False):
         """Huge page check."""
 
     def _huge_page_check(self, allocate=False):
         """Huge page check."""
-        huge_mnt = self._qemu_opt.get('huge_mnt')
-        mem_size = self._qemu_opt.get('mem_size')
+        huge_mnt = self._qemu_opt.get("huge_mnt")
+        mem_size = self._qemu_opt.get("mem_size")
 
         # Get huge pages information
         huge_size = self._get_huge_page_size()
 
         # Get huge pages information
         huge_size = self._get_huge_page_size()
@@ -391,55 +411,55 @@ class QemuUtils(object):
             if allocate:
                 mem_needed = abs((huge_free * huge_size) - (mem_size * 1024))
                 huge_to_allocate = ((mem_needed // huge_size) * 2) + huge_total
             if allocate:
                 mem_needed = abs((huge_free * huge_size) - (mem_size * 1024))
                 huge_to_allocate = ((mem_needed // huge_size) * 2) + huge_total
-                max_map_count = huge_to_allocate*4
+                max_map_count = huge_to_allocate * 4
                 # Increase maximum number of memory map areas a
                 # process may have
                 # Increase maximum number of memory map areas a
                 # process may have
-                cmd = \
-                    'echo "{0}" | sudo tee /proc/sys/vm/max_map_count'.format(
-                    max_map_count)
+                cmd = 'echo "{0}" | sudo tee /proc/sys/vm/max_map_count'.format(
+                    max_map_count
+                )
                 (ret_code, _, stderr) = self._ssh.exec_command_sudo(cmd)
                 # Increase hugepage count
                 (ret_code, _, stderr) = self._ssh.exec_command_sudo(cmd)
                 # Increase hugepage count
-                cmd = \
-                    'echo "{0}" | sudo tee /proc/sys/vm/nr_hugepages'.format(
-                    huge_to_allocate)
+                cmd = 'echo "{0}" | sudo tee /proc/sys/vm/nr_hugepages'.format(
+                    huge_to_allocate
+                )
                 (ret_code, _, stderr) = self._ssh.exec_command_sudo(cmd)
                 if int(ret_code) != 0:
                 (ret_code, _, stderr) = self._ssh.exec_command_sudo(cmd)
                 if int(ret_code) != 0:
-                    logging.debug(
-                        'Mount huge pages failed {0}'.format(stderr))
+                    logging.debug("Mount huge pages failed {0}".format(stderr))
                     raise RuntimeError(
                     raise RuntimeError(
-                        'Mount huge pages failed on {0}'.format(
-                            self._node['host']))
+                        "Mount huge pages failed on {0}".format(self._node["host"])
+                    )
             # If we do not want to allocate dynamicaly end with error
             else:
                 raise RuntimeError(
             # If we do not want to allocate dynamicaly end with error
             else:
                 raise RuntimeError(
-                    'Not enough free huge pages: {0}, '
-                    '{1} MB'.format(huge_free, huge_free * huge_size)
+                    "Not enough free huge pages: {0}, "
+                    "{1} MB".format(huge_free, huge_free * huge_size)
                 )
         # Check if huge pages mount point exist
         has_huge_mnt = False
                 )
         # Check if huge pages mount point exist
         has_huge_mnt = False
-        (_, output, _) = self._ssh.exec_command('cat /proc/mounts')
+        (_, output, _) = self._ssh.exec_command("cat /proc/mounts")
         for line in output.splitlines():
             # Try to find something like:
             # none /mnt/huge hugetlbfs rw,relatime,pagesize=2048k 0 0
             mount = line.split()
         for line in output.splitlines():
             # Try to find something like:
             # none /mnt/huge hugetlbfs rw,relatime,pagesize=2048k 0 0
             mount = line.split()
-            if mount[2] == 'hugetlbfs' and mount[1] == huge_mnt:
+            if mount[2] == "hugetlbfs" and mount[1] == huge_mnt:
                 has_huge_mnt = True
                 break
         # If huge page mount point not exist create one
         if not has_huge_mnt:
                 has_huge_mnt = True
                 break
         # If huge page mount point not exist create one
         if not has_huge_mnt:
-            cmd = 'mkdir -p {0}'.format(huge_mnt)
+            cmd = "mkdir -p {0}".format(huge_mnt)
             (ret_code, _, stderr) = self._ssh.exec_command_sudo(cmd)
             if int(ret_code) != 0:
             (ret_code, _, stderr) = self._ssh.exec_command_sudo(cmd)
             if int(ret_code) != 0:
-                logging.debug('Create mount dir failed: {0}'.format(stderr))
-                raise RuntimeError('Create mount dir failed on {0}'.format(
-                    self._node['host']))
-            cmd = 'mount -t hugetlbfs -o pagesize=2048k none {0}'.format(
-                huge_mnt)
+                logging.debug("Create mount dir failed: {0}".format(stderr))
+                raise RuntimeError(
+                    "Create mount dir failed on {0}".format(self._node["host"])
+                )
+            cmd = "mount -t hugetlbfs -o pagesize=2048k none {0}".format(huge_mnt)
             (ret_code, _, stderr) = self._ssh.exec_command_sudo(cmd)
             if int(ret_code) != 0:
             (ret_code, _, stderr) = self._ssh.exec_command_sudo(cmd)
             if int(ret_code) != 0:
-                logging.debug('Mount huge pages failed {0}'.format(stderr))
-                raise RuntimeError('Mount huge pages failed on {0}'.format(
-                    self._node['host']))
+                logging.debug("Mount huge pages failed {0}".format(stderr))
+                raise RuntimeError(
+                    "Mount huge pages failed on {0}".format(self._node["host"])
+                )
 
     def _get_huge_page_size(self):
         """Get default size of huge pages in system.
 
     def _get_huge_page_size(self):
         """Get default size of huge pages in system.
@@ -456,11 +476,11 @@ class QemuUtils(object):
                 try:
                     huge_size = int(out)
                 except ValueError:
                 try:
                     huge_size = int(out)
                 except ValueError:
-                    logging.debug('Reading huge page size information failed')
+                    logging.debug("Reading huge page size information failed")
                 else:
                     break
         else:
                 else:
                     break
         else:
-            raise RuntimeError('Getting huge page size information failed.')
+            raise RuntimeError("Getting huge page size information failed.")
         return huge_size
 
     def _get_huge_page_free(self, huge_size):
         return huge_size
 
     def _get_huge_page_free(self, huge_size):
@@ -474,20 +494,21 @@ class QemuUtils(object):
         """
         # TODO: add numa aware option
         # TODO: remove to dedicated library
         """
         # TODO: add numa aware option
         # TODO: remove to dedicated library
-        cmd_huge_free = 'cat /sys/kernel/mm/hugepages/hugepages-{0}kB/'\
-            'free_hugepages'.format(huge_size)
+        cmd_huge_free = (
+            "cat /sys/kernel/mm/hugepages/hugepages-{0}kB/"
+            "free_hugepages".format(huge_size)
+        )
         for _ in range(3):
             (ret, out, _) = self._ssh.exec_command_sudo(cmd_huge_free)
             if ret == 0:
                 try:
                     huge_free = int(out)
                 except ValueError:
         for _ in range(3):
             (ret, out, _) = self._ssh.exec_command_sudo(cmd_huge_free)
             if ret == 0:
                 try:
                     huge_free = int(out)
                 except ValueError:
-                    logging.debug(
-                        'Reading free huge pages information failed')
+                    logging.debug("Reading free huge pages information failed")
                 else:
                     break
         else:
                 else:
                     break
         else:
-            raise RuntimeError('Getting free huge pages information failed.')
+            raise RuntimeError("Getting free huge pages information failed.")
         return huge_free
 
     def _get_huge_page_total(self, huge_size):
         return huge_free
 
     def _get_huge_page_total(self, huge_size):
@@ -501,20 +522,21 @@ class QemuUtils(object):
         """
         # TODO: add numa aware option
         # TODO: remove to dedicated library
         """
         # TODO: add numa aware option
         # TODO: remove to dedicated library
-        cmd_huge_total = 'cat /sys/kernel/mm/hugepages/hugepages-{0}kB/'\
-            'nr_hugepages'.format(huge_size)
+        cmd_huge_total = (
+            "cat /sys/kernel/mm/hugepages/hugepages-{0}kB/"
+            "nr_hugepages".format(huge_size)
+        )
         for _ in range(3):
             (ret, out, _) = self._ssh.exec_command_sudo(cmd_huge_total)
             if ret == 0:
                 try:
                     huge_total = int(out)
                 except ValueError:
         for _ in range(3):
             (ret, out, _) = self._ssh.exec_command_sudo(cmd_huge_total)
             if ret == 0:
                 try:
                     huge_total = int(out)
                 except ValueError:
-                    logging.debug(
-                        'Reading total huge pages information failed')
+                    logging.debug("Reading total huge pages information failed")
                 else:
                     break
         else:
                 else:
                     break
         else:
-            raise RuntimeError('Getting total huge pages information failed.')
+            raise RuntimeError("Getting total huge pages information failed.")
         return huge_total
 
     def qemu_start(self):
         return huge_total
 
     def qemu_start(self):
@@ -526,45 +548,63 @@ class QemuUtils(object):
         .. warning:: Starts only one VM on the node.
         """
         # SSH forwarding
         .. warning:: Starts only one VM on the node.
         """
         # SSH forwarding
-        ssh_fwd = '-net user,hostfwd=tcp::{0}-:22'.format(
-            self._qemu_opt.get('ssh_fwd_port'))
+        ssh_fwd = "-net user,hostfwd=tcp::{0}-:22".format(
+            self._qemu_opt.get("ssh_fwd_port")
+        )
         # Memory and huge pages
         # Memory and huge pages
-        mem = '-object memory-backend-file,id=mem,size={0}M,mem-path={1},' \
-            'share=on -m {0} -numa node,memdev=mem'.format(
-                self._qemu_opt.get('mem_size'), self._qemu_opt.get('huge_mnt'))
+        mem = (
+            "-object memory-backend-file,id=mem,size={0}M,mem-path={1},"
+            "share=on -m {0} -numa node,memdev=mem".format(
+                self._qemu_opt.get("mem_size"), self._qemu_opt.get("huge_mnt")
+            )
+        )
 
         # By default check only if hugepages are available.
         # If 'huge_allocate' is set to true try to allocate as well.
 
         # By default check only if hugepages are available.
         # If 'huge_allocate' is set to true try to allocate as well.
-        self._huge_page_check(allocate=self._qemu_opt.get('huge_allocate'))
+        self._huge_page_check(allocate=self._qemu_opt.get("huge_allocate"))
 
         # Disk option
 
         # Disk option
-        drive = '-drive file={0},format=raw,cache=none,if=virtio'.format(
-            self._qemu_opt.get('disk_image'))
+        drive = "-drive file={0},format=raw,cache=none,if=virtio".format(
+            self._qemu_opt.get("disk_image")
+        )
         # Setup QMP via unix socket
         # Setup QMP via unix socket
-        qmp = '-qmp unix:{0},server,nowait'.format(self._qmp_sock)
+        qmp = "-qmp unix:{0},server,nowait".format(self._qmp_sock)
         # Setup serial console
         # Setup serial console
-        serial = '-chardev socket,host=127.0.0.1,port={0},id=gnc0,server,' \
-            'nowait -device isa-serial,chardev=gnc0'.format(
-                self._qemu_opt.get('serial_port'))
+        serial = (
+            "-chardev socket,host=127.0.0.1,port={0},id=gnc0,server,"
+            "nowait -device isa-serial,chardev=gnc0".format(
+                self._qemu_opt.get("serial_port")
+            )
+        )
         # Setup QGA via chardev (unix socket) and isa-serial channel
         # Setup QGA via chardev (unix socket) and isa-serial channel
-        qga = '-chardev socket,path={0},server,nowait,id=qga0 ' \
-            '-device isa-serial,chardev=qga0'.format(self._qga_sock)
+        qga = (
+            "-chardev socket,path={0},server,nowait,id=qga0 "
+            "-device isa-serial,chardev=qga0".format(self._qga_sock)
+        )
         # Graphic setup
         # Graphic setup
-        graphic = '-monitor none -display none -vga none'
+        graphic = "-monitor none -display none -vga none"
         # PID file
         # PID file
-        pid = '-pidfile {}'.format(self._pid_file)
+        pid = "-pidfile {}".format(self._pid_file)
 
         # Run QEMU
 
         # Run QEMU
-        cmd = '{0} {1} {2} {3} {4} {5} {6} {7} {8} {9} {10}'.format(
-            self._qemu_bin, self._qemu_opt.get('smp'), mem, ssh_fwd,
-            self._qemu_opt.get('options'),
-            drive, qmp, serial, qga, graphic, pid)
+        cmd = "{0} {1} {2} {3} {4} {5} {6} {7} {8} {9} {10}".format(
+            self._qemu_bin,
+            self._qemu_opt.get("smp"),
+            mem,
+            ssh_fwd,
+            self._qemu_opt.get("options"),
+            drive,
+            qmp,
+            serial,
+            qga,
+            graphic,
+            pid,
+        )
         (ret_code, _, stderr) = self._ssh.exec_command_sudo(cmd, timeout=300)
         if int(ret_code) != 0:
         (ret_code, _, stderr) = self._ssh.exec_command_sudo(cmd, timeout=300)
         if int(ret_code) != 0:
-            logging.debug('QEMU start failed {0}'.format(stderr))
-            raise RuntimeError('QEMU start failed on {0}'.format(
-                self._node['host']))
-        logging.debug('QEMU running')
+            logging.debug("QEMU start failed {0}".format(stderr))
+            raise RuntimeError("QEMU start failed on {0}".format(self._node["host"]))
+        logging.debug("QEMU running")
         # Wait until VM boot
         try:
             self._wait_until_vm_boot()
         # Wait until VM boot
         try:
             self._wait_until_vm_boot()
@@ -579,40 +619,43 @@ class QemuUtils(object):
 
     def qemu_quit(self):
         """Quit the QEMU emulator."""
 
     def qemu_quit(self):
         """Quit the QEMU emulator."""
-        out = self._qemu_qmp_exec('quit')
-        err = out.get('error')
+        out = self._qemu_qmp_exec("quit")
+        err = out.get("error")
         if err is not None:
         if err is not None:
-            raise RuntimeError('QEMU quit failed on {0}, error: {1}'.format(
-                self._node['host'], json.dumps(err)))
+            raise RuntimeError(
+                "QEMU quit failed on {0}, error: {1}".format(
+                    self._node["host"], json.dumps(err)
+                )
+            )
 
     def qemu_system_powerdown(self):
         """Power down the system (if supported)."""
 
     def qemu_system_powerdown(self):
         """Power down the system (if supported)."""
-        out = self._qemu_qmp_exec('system_powerdown')
-        err = out.get('error')
+        out = self._qemu_qmp_exec("system_powerdown")
+        err = out.get("error")
         if err is not None:
             raise RuntimeError(
         if err is not None:
             raise RuntimeError(
-                'QEMU system powerdown failed on {0}, '
-                'error: {1}'.format(self._node['host'], json.dumps(err))
+                "QEMU system powerdown failed on {0}, "
+                "error: {1}".format(self._node["host"], json.dumps(err))
             )
 
     def qemu_system_reset(self):
         """Reset the system."""
             )
 
     def qemu_system_reset(self):
         """Reset the system."""
-        out = self._qemu_qmp_exec('system_reset')
-        err = out.get('error')
+        out = self._qemu_qmp_exec("system_reset")
+        err = out.get("error")
         if err is not None:
             raise RuntimeError(
         if err is not None:
             raise RuntimeError(
-                'QEMU system reset failed on {0}, '
-                'error: {1}'.format(self._node['host'], json.dumps(err)))
+                "QEMU system reset failed on {0}, "
+                "error: {1}".format(self._node["host"], json.dumps(err))
+            )
 
     def qemu_kill(self):
         """Kill qemu process."""
         # Note: in QEMU start phase there are 3 QEMU processes because we
         # daemonize QEMU
 
     def qemu_kill(self):
         """Kill qemu process."""
         # Note: in QEMU start phase there are 3 QEMU processes because we
         # daemonize QEMU
-        self._ssh.exec_command_sudo('chmod +r {}'.format(self._pid_file))
-        self._ssh.exec_command_sudo('kill -SIGKILL $(cat {})'
-                                    .format(self._pid_file))
+        self._ssh.exec_command_sudo("chmod +r {}".format(self._pid_file))
+        self._ssh.exec_command_sudo("kill -SIGKILL $(cat {})".format(self._pid_file))
         # Delete PID file
         # Delete PID file
-        cmd = 'rm -f {}'.format(self._pid_file)
+        cmd = "rm -f {}".format(self._pid_file)
         self._ssh.exec_command_sudo(cmd)
 
     def qemu_kill_all(self, node=None):
         self._ssh.exec_command_sudo(cmd)
 
     def qemu_kill_all(self, node=None):
@@ -623,16 +666,16 @@ class QemuUtils(object):
         """
         if node:
             self.qemu_set_node(node)
         """
         if node:
             self.qemu_set_node(node)
-        self._ssh.exec_command_sudo('pkill -SIGKILL qemu')
+        self._ssh.exec_command_sudo("pkill -SIGKILL qemu")
 
     def qemu_clear_socks(self):
         """Remove all sockets created by QEMU."""
         # If serial console port still open kill process
 
     def qemu_clear_socks(self):
         """Remove all sockets created by QEMU."""
         # If serial console port still open kill process
-        cmd = 'fuser -k {}/tcp'.format(self._qemu_opt.get('serial_port'))
+        cmd = "fuser -k {}/tcp".format(self._qemu_opt.get("serial_port"))
         self._ssh.exec_command_sudo(cmd)
         # Delete all created sockets
         for sock in self._socks:
         self._ssh.exec_command_sudo(cmd)
         # Delete all created sockets
         for sock in self._socks:
-            cmd = 'rm -f {}'.format(sock)
+            cmd = "rm -f {}".format(sock)
             self._ssh.exec_command_sudo(cmd)
 
     def qemu_system_status(self):
             self._ssh.exec_command_sudo(cmd)
 
     def qemu_system_status(self):
@@ -659,15 +702,16 @@ class QemuUtils(object):
         :return: VM status.
         :rtype: str
         """
         :return: VM status.
         :rtype: str
         """
-        out = self._qemu_qmp_exec('query-status')
-        ret = out.get('return')
+        out = self._qemu_qmp_exec("query-status")
+        ret = out.get("return")
         if ret is not None:
         if ret is not None:
-            return ret.get('status')
+            return ret.get("status")
         else:
         else:
-            err = out.get('error')
+            err = out.get("error")
             raise RuntimeError(
             raise RuntimeError(
-                'QEMU query-status failed on {0}, '
-                'error: {1}'.format(self._node['host'], json.dumps(err)))
+                "QEMU query-status failed on {0}, "
+                "error: {1}".format(self._node["host"], json.dumps(err))
+            )
 
     @staticmethod
     def build_qemu(node, force_install=False, apply_patch=False):
 
     @staticmethod
     def build_qemu(node, force_install=False, apply_patch=False):
@@ -682,17 +726,23 @@ class QemuUtils(object):
         :raises: RuntimeError if building QEMU failed.
         """
 
         :raises: RuntimeError if building QEMU failed.
         """
 
-        directory = ' --directory={0}'.format(Constants.QEMU_INSTALL_DIR)
-        version = ' --version={0}'.format(Constants.QEMU_INSTALL_VERSION)
-        force = ' --force' if force_install else ''
-        patch = ' --patch' if apply_patch else ''
-
-        (ret_code, stdout, stderr) = VPPUtil. \
-            exec_command(
-            "sudo -E sh -c '{0}/{1}/qemu_build.sh{2}{3}{4}{5}'".
-                format(Constants.REMOTE_FW_DIR, Constants.RESOURCES_LIB_SH,
-                       version, directory, force, patch), 1000)
+        directory = " --directory={0}".format(Constants.QEMU_INSTALL_DIR)
+        version = " --version={0}".format(Constants.QEMU_INSTALL_VERSION)
+        force = " --force" if force_install else ""
+        patch = " --patch" if apply_patch else ""
+
+        (ret_code, stdout, stderr) = VPPUtil.exec_command(
+            "sudo -E sh -c '{0}/{1}/qemu_build.sh{2}{3}{4}{5}'".format(
+                Constants.REMOTE_FW_DIR,
+                Constants.RESOURCES_LIB_SH,
+                version,
+                directory,
+                force,
+                patch,
+            ),
+            1000,
+        )
 
         if int(ret_code) != 0:
 
         if int(ret_code) != 0:
-            logging.debug('QEMU build failed {0}'.format(stdout + stderr))
-            raise RuntimeError('QEMU build failed on {0}'.format(node['host']))
+            logging.debug("QEMU build failed {0}".format(stdout + stderr))
+            raise RuntimeError("QEMU build failed on {0}".format(node["host"]))
index 97747a3..711f103 100644 (file)
@@ -23,15 +23,53 @@ from collections import Counter
 
 import distro
 
 
 import distro
 
-ubuntu_pkgs = {'release': ['vpp', 'vpp-plugin-core', 'vpp-plugin-dpdk', 'vpp-api-python', 'python3-vpp-api',
-                           'vpp-dbg', 'vpp-dev', 'vpp-ext-deps'],
-               'master': ['vpp', 'vpp-plugin-core', 'vpp-plugin-dpdk', 'vpp-api-python', 'python3-vpp-api',
-                          'vpp-dbg', 'vpp-dev', 'vpp-ext-deps']}
-
-centos_pkgs = {'release': ['vpp', 'vpp-selinux-policy', 'vpp-plugins', 'vpp-api-lua',
-                           'vpp-api-python', 'vpp-debuginfo', 'vpp-devel', 'libvpp0', 'vpp-ext-deps'],
-               'master': ['vpp', 'vpp-selinux-policy', 'vpp-plugins', 'vpp-api-lua',
-                          'vpp-api-python', 'vpp-debuginfo', 'vpp-devel', 'libvpp0', 'vpp-ext-deps']}
+ubuntu_pkgs = {
+    "release": [
+        "vpp",
+        "vpp-plugin-core",
+        "vpp-plugin-dpdk",
+        "vpp-api-python",
+        "python3-vpp-api",
+        "vpp-dbg",
+        "vpp-dev",
+        "vpp-ext-deps",
+    ],
+    "master": [
+        "vpp",
+        "vpp-plugin-core",
+        "vpp-plugin-dpdk",
+        "vpp-api-python",
+        "python3-vpp-api",
+        "vpp-dbg",
+        "vpp-dev",
+        "vpp-ext-deps",
+    ],
+}
+
+centos_pkgs = {
+    "release": [
+        "vpp",
+        "vpp-selinux-policy",
+        "vpp-plugins",
+        "vpp-api-lua",
+        "vpp-api-python",
+        "vpp-debuginfo",
+        "vpp-devel",
+        "libvpp0",
+        "vpp-ext-deps",
+    ],
+    "master": [
+        "vpp",
+        "vpp-selinux-policy",
+        "vpp-plugins",
+        "vpp-api-lua",
+        "vpp-api-python",
+        "vpp-debuginfo",
+        "vpp-devel",
+        "libvpp0",
+        "vpp-ext-deps",
+    ],
+}
 
 
 class VPPUtil(object):
 
 
 class VPPUtil(object):
@@ -50,19 +88,23 @@ class VPPUtil(object):
         """
 
         logging.info(" Local Command: {}".format(cmd))
         """
 
         logging.info(" Local Command: {}".format(cmd))
-        out = ''
-        err = ''
-        prc = subprocess.Popen(cmd, shell=True, bufsize=1,
-                               stdin=subprocess.PIPE,
-                               stdout=subprocess.PIPE,
-                               stderr=subprocess.PIPE)
+        out = ""
+        err = ""
+        prc = subprocess.Popen(
+            cmd,
+            shell=True,
+            bufsize=1,
+            stdin=subprocess.PIPE,
+            stdout=subprocess.PIPE,
+            stderr=subprocess.PIPE,
+        )
 
         with prc.stdout:
             lines = prc.stdout.readlines()
             for line in lines:
                 if type(line) != str:
                     line = line.decode()
 
         with prc.stdout:
             lines = prc.stdout.readlines()
             for line in lines:
                 if type(line) != str:
                     line = line.decode()
-                logging.info("  {}".format(line.strip('\n')))
+                logging.info("  {}".format(line.strip("\n")))
                 out += line
 
         with prc.stderr:
                 out += line
 
         with prc.stderr:
@@ -70,7 +112,7 @@ class VPPUtil(object):
             for line in lines:
                 if type(line) != str:
                     line = line.decode()
             for line in lines:
                 if type(line) != str:
                     line = line.decode()
-                logging.warning("  {}".format(line.strip('\n')))
+                logging.warning("  {}".format(line.strip("\n")))
                 err += line
 
         ret = prc.wait()
                 err += line
 
         ret = prc.wait()
@@ -86,17 +128,17 @@ class VPPUtil(object):
         """
 
         # Does a copy of the file exist, if not create one
         """
 
         # Does a copy of the file exist, if not create one
-        ofile = filename + '.orig'
-        (ret, stdout, stderr) = self.exec_command('ls {}'.format(ofile))
+        ofile = filename + ".orig"
+        (ret, stdout, stderr) = self.exec_command("ls {}".format(ofile))
         if ret != 0:
             logging.debug(stderr)
         if ret != 0:
             logging.debug(stderr)
-            if stdout.strip('\n') != ofile:
-                cmd = 'sudo cp {} {}'.format(filename, ofile)
+            if stdout.strip("\n") != ofile:
+                cmd = "sudo cp {} {}".format(filename, ofile)
                 (ret, stdout, stderr) = self.exec_command(cmd)
                 if ret != 0:
                     logging.debug(stderr)
 
                 (ret, stdout, stderr) = self.exec_command(cmd)
                 if ret != 0:
                     logging.debug(stderr)
 
-    def _install_vpp_ubuntu(self, node, branch, ubuntu_version='xenial'):
+    def _install_vpp_ubuntu(self, node, branch, ubuntu_version="xenial"):
         """
         Install the VPP packages
 
         """
         Install the VPP packages
 
@@ -109,49 +151,49 @@ class VPPUtil(object):
         """
 
         # Modify the sources list
         """
 
         # Modify the sources list
-        sfile = '/etc/apt/sources.list.d/99fd.io.list'
+        sfile = "/etc/apt/sources.list.d/99fd.io.list"
 
         # Backup the sources list
         self._autoconfig_backup_file(sfile)
 
 
         # Backup the sources list
         self._autoconfig_backup_file(sfile)
 
-        reps = 'deb [trusted=yes] https://packagecloud.io/fdio/'
-        reps += '{}/ubuntu {} main\n'.format(branch, ubuntu_version)
+        reps = "deb [trusted=yes] https://packagecloud.io/fdio/"
+        reps += "{}/ubuntu {} main\n".format(branch, ubuntu_version)
 
 
-        with open(sfile, 'w') as sfd:
+        with open(sfile, "w") as sfd:
             sfd.write(reps)
             sfd.close()
 
         # Add the key
 
             sfd.write(reps)
             sfd.close()
 
         # Add the key
 
-        key = requests.get(
-            'https://packagecloud.io/fdio/{}/gpgkey'.format(branch))
+        key = requests.get("https://packagecloud.io/fdio/{}/gpgkey".format(branch))
         cmd = 'echo "{}" | apt-key add -'.format(key.content.decode(key.encoding))
         (ret, stdout, stderr) = self.exec_command(cmd)
         if ret != 0:
         cmd = 'echo "{}" | apt-key add -'.format(key.content.decode(key.encoding))
         (ret, stdout, stderr) = self.exec_command(cmd)
         if ret != 0:
-            raise RuntimeError('{} failed on node {} {}'.format(
-                cmd,
-                node['host'],
-                stderr))
+            raise RuntimeError(
+                "{} failed on node {} {}".format(cmd, node["host"], stderr)
+            )
 
         # Install the package
 
         # Install the package
-        cmd = 'apt-get -y update'
+        cmd = "apt-get -y update"
         (ret, stdout, stderr) = self.exec_command(cmd)
         if ret != 0:
         (ret, stdout, stderr) = self.exec_command(cmd)
         if ret != 0:
-            raise RuntimeError('{} apt-get update failed on node {} {}'.format(
-                cmd,
-                node['host'],
-                stderr))
+            raise RuntimeError(
+                "{} apt-get update failed on node {} {}".format(
+                    cmd, node["host"], stderr
+                )
+            )
 
         # Get the package list
 
         # Get the package list
-        pkgstr = ''
+        pkgstr = ""
         for ps in ubuntu_pkgs[branch]:
         for ps in ubuntu_pkgs[branch]:
-            pkgstr += ps + ' '
+            pkgstr += ps + " "
 
 
-        cmd = 'apt-get -y install {}'.format(pkgstr)
+        cmd = "apt-get -y install {}".format(pkgstr)
         (ret, stdout, stderr) = self.exec_command(cmd)
         if ret != 0:
         (ret, stdout, stderr) = self.exec_command(cmd)
         if ret != 0:
-            raise RuntimeError('{} failed on node {} {} {}'.format(
-                cmd, node['host'], stdout, stderr))
+            raise RuntimeError(
+                "{} failed on node {} {} {}".format(cmd, node["host"], stdout, stderr)
+            )
 
     def _install_vpp_centos(self, node, branch):
         """
 
     def _install_vpp_centos(self, node, branch):
         """
@@ -164,95 +206,82 @@ class VPPUtil(object):
         """
 
         # Be sure the correct system packages are installed
         """
 
         # Be sure the correct system packages are installed
-        cmd = 'yum -y update'
+        cmd = "yum -y update"
         (ret, stdout, stderr) = self.exec_command(cmd)
         if ret != 0:
         (ret, stdout, stderr) = self.exec_command(cmd)
         if ret != 0:
-            logging.debug('{} failed on node {} {}'.format(
-                cmd,
-                node['host'],
-                stderr))
+            logging.debug("{} failed on node {} {}".format(cmd, node["host"], stderr))
 
 
-        cmd = 'yum -y install pygpgme yum-utils'
+        cmd = "yum -y install pygpgme yum-utils"
         (ret, stdout, stderr) = self.exec_command(cmd)
         if ret != 0:
         (ret, stdout, stderr) = self.exec_command(cmd)
         if ret != 0:
-            logging.debug('{} failed on node {} {}'.format(
-                cmd,
-                node['host'],
-                stderr))
+            logging.debug("{} failed on node {} {}".format(cmd, node["host"], stderr))
 
         # Modify the sources list
 
         # Modify the sources list
-        sfile = '/etc/yum.repos.d/fdio-release.repo'
+        sfile = "/etc/yum.repos.d/fdio-release.repo"
 
         # Backup the sources list
         self._autoconfig_backup_file(sfile)
 
         # Remove the current file
 
         # Backup the sources list
         self._autoconfig_backup_file(sfile)
 
         # Remove the current file
-        cmd = 'rm {}'.format(sfile)
+        cmd = "rm {}".format(sfile)
         (ret, stdout, stderr) = self.exec_command(cmd)
         if ret != 0:
         (ret, stdout, stderr) = self.exec_command(cmd)
         if ret != 0:
-            logging.debug('{} failed on node {} {}'.format(
-                cmd,
-                node['host'],
-                stderr))
+            logging.debug("{} failed on node {} {}".format(cmd, node["host"], stderr))
 
         # Get the file contents
 
 
         # Get the file contents
 
-        reps = '\n'.join([
-            '[fdio_{}]'.format(branch),
-            'name=fdio_{}'.format(branch),
-            'baseurl=https://packagecloud.io/fdio/{}/el/7/$basearch'.format(
-                branch),
-            'repo_gpgcheck=1',
-            'gpgcheck=0',
-            'enabled=1',
-            'gpgkey=https://packagecloud.io/fdio/{}/gpgkey'.format(branch),
-            'sslverify=1',
-            'sslcacert=/etc/pki/tls/certs/ca-bundle.crt',
-            'metadata_expire=300\n',
-            '[fdio_{}-source]'.format(branch),
-            'name=fdio_release-{}'.format(branch),
-            'baseurl=https://packagecloud.io/fdio/{}/el/7/SRPMS'.format(
-                branch),
-            'repo_gpgcheck=1',
-            'gpgcheck=0',
-            'enabled=1',
-            'gpgkey=https://packagecloud.io/fdio/{}/gpgkey'.format(branch),
-            'sslverify =1',
-            'sslcacert=/etc/pki/tls/certs/ca-bundle.crt',
-            'metadata_expire=300\n'
-        ])
-        with open(sfile, 'w') as sfd:
+        reps = "\n".join(
+            [
+                "[fdio_{}]".format(branch),
+                "name=fdio_{}".format(branch),
+                "baseurl=https://packagecloud.io/fdio/{}/el/7/$basearch".format(branch),
+                "repo_gpgcheck=1",
+                "gpgcheck=0",
+                "enabled=1",
+                "gpgkey=https://packagecloud.io/fdio/{}/gpgkey".format(branch),
+                "sslverify=1",
+                "sslcacert=/etc/pki/tls/certs/ca-bundle.crt",
+                "metadata_expire=300\n",
+                "[fdio_{}-source]".format(branch),
+                "name=fdio_release-{}".format(branch),
+                "baseurl=https://packagecloud.io/fdio/{}/el/7/SRPMS".format(branch),
+                "repo_gpgcheck=1",
+                "gpgcheck=0",
+                "enabled=1",
+                "gpgkey=https://packagecloud.io/fdio/{}/gpgkey".format(branch),
+                "sslverify =1",
+                "sslcacert=/etc/pki/tls/certs/ca-bundle.crt",
+                "metadata_expire=300\n",
+            ]
+        )
+        with open(sfile, "w") as sfd:
             sfd.write(reps)
             sfd.close()
 
         # Update the fdio repo
             sfd.write(reps)
             sfd.close()
 
         # Update the fdio repo
-        cmd = 'yum clean all'
+        cmd = "yum clean all"
         (ret, stdout, stderr) = self.exec_command(cmd)
         if ret != 0:
         (ret, stdout, stderr) = self.exec_command(cmd)
         if ret != 0:
-            logging.debug('{} failed on node {} {}'.format(
-                cmd,
-                node['host'],
-                stderr))
+            logging.debug("{} failed on node {} {}".format(cmd, node["host"], stderr))
 
 
-        cmd = "yum -q makecache -y --disablerepo='*' " \
-              "--enablerepo='fdio_{}'".format(branch)
+        cmd = "yum -q makecache -y --disablerepo='*' " "--enablerepo='fdio_{}'".format(
+            branch
+        )
         (ret, stdout, stderr) = self.exec_command(cmd)
         if ret != 0:
         (ret, stdout, stderr) = self.exec_command(cmd)
         if ret != 0:
-            logging.debug('{} failed on node {} {}'.format(
-                cmd,
-                node['host'],
-                stderr))
+            logging.debug("{} failed on node {} {}".format(cmd, node["host"], stderr))
 
         # Get the package list
 
         # Get the package list
-        pkgstr = ''
+        pkgstr = ""
         for ps in centos_pkgs[branch]:
         for ps in centos_pkgs[branch]:
-            pkgstr += ps + ' '
+            pkgstr += ps + " "
 
 
-        cmd = 'yum -y install {}'.format(pkgstr)
+        cmd = "yum -y install {}".format(pkgstr)
         (ret, stdout, stderr) = self.exec_command(cmd)
         if ret != 0:
         (ret, stdout, stderr) = self.exec_command(cmd)
         if ret != 0:
-            raise RuntimeError('{} failed on node {} {} {}'.format(
-                cmd, node['host'], stdout, stderr))
+            raise RuntimeError(
+                "{} failed on node {} {} {}".format(cmd, node["host"], stdout, stderr)
+            )
 
     def install_vpp(self, node, branch):
         """
 
     def install_vpp(self, node, branch):
         """
@@ -266,10 +295,10 @@ class VPPUtil(object):
         """
         distro = self.get_linux_distro()
         logging.info("  {}".format(distro[0]))
         """
         distro = self.get_linux_distro()
         logging.info("  {}".format(distro[0]))
-        if distro[0] == 'Ubuntu':
+        if distro[0] == "Ubuntu":
             logging.info("Install Ubuntu")
             self._install_vpp_ubuntu(node, branch, ubuntu_version=distro[2])
             logging.info("Install Ubuntu")
             self._install_vpp_ubuntu(node, branch, ubuntu_version=distro[2])
-        elif distro[0] == 'CentOS Linux':
+        elif distro[0] == "CentOS Linux":
             logging.info("Install CentOS")
             self._install_vpp_centos(node, branch)
         else:
             logging.info("Install CentOS")
             self._install_vpp_centos(node, branch)
         else:
@@ -286,17 +315,18 @@ class VPPUtil(object):
         """
 
         # get the package list
         """
 
         # get the package list
-        pkgstr = ''
+        pkgstr = ""
         pkgs = self.get_installed_vpp_pkgs()
         for pkg in pkgs:
         pkgs = self.get_installed_vpp_pkgs()
         for pkg in pkgs:
-            pkgname = pkg['name']
-            pkgstr += pkgname + ' '
+            pkgname = pkg["name"]
+            pkgstr += pkgname + " "
 
 
-        cmd = 'dpkg --purge {}'.format(pkgstr)
+        cmd = "dpkg --purge {}".format(pkgstr)
         (ret, stdout, stderr) = self.exec_command(cmd)
         if ret != 0:
         (ret, stdout, stderr) = self.exec_command(cmd)
         if ret != 0:
-            raise RuntimeError('{} failed on node {} {} {}'.format(
-                cmd, node['host'], stdout, stderr))
+            raise RuntimeError(
+                "{} failed on node {} {} {}".format(cmd, node["host"], stdout, stderr)
+            )
 
     def _uninstall_vpp_centos(self, node):
         """
 
     def _uninstall_vpp_centos(self, node):
         """
@@ -306,18 +336,19 @@ class VPPUtil(object):
         :type node: dict
         """
 
         :type node: dict
         """
 
-        pkgstr = ''
+        pkgstr = ""
         pkgs = self.get_installed_vpp_pkgs()
         for pkg in pkgs:
         pkgs = self.get_installed_vpp_pkgs()
         for pkg in pkgs:
-            pkgname = pkg['name']
-            pkgstr += pkgname + ' '
+            pkgname = pkg["name"]
+            pkgstr += pkgname + " "
 
         logging.info("Uninstalling {}".format(pkgstr))
 
         logging.info("Uninstalling {}".format(pkgstr))
-        cmd = 'yum -y remove {}'.format(pkgstr)
+        cmd = "yum -y remove {}".format(pkgstr)
         (ret, stdout, stderr) = self.exec_command(cmd)
         if ret != 0:
         (ret, stdout, stderr) = self.exec_command(cmd)
         if ret != 0:
-            raise RuntimeError('{} failed on node {} {} {}'.format(
-                cmd, node['host'], stdout, stderr))
+            raise RuntimeError(
+                "{} failed on node {} {} {}".format(cmd, node["host"], stdout, stderr)
+            )
 
     def uninstall_vpp(self, node):
         """
 
     def uninstall_vpp(self, node):
         """
@@ -330,10 +361,10 @@ class VPPUtil(object):
         # First stop VPP
         self.stop(node)
         distro = self.get_linux_distro()
         # First stop VPP
         self.stop(node)
         distro = self.get_linux_distro()
-        if distro[0] == 'Ubuntu':
+        if distro[0] == "Ubuntu":
             logging.info("Uninstall Ubuntu")
             self._uninstall_vpp_ubuntu(node)
             logging.info("Uninstall Ubuntu")
             self._uninstall_vpp_ubuntu(node)
-        elif distro[0] == 'CentOS Linux':
+        elif distro[0] == "CentOS Linux":
             logging.info("Uninstall CentOS")
             self._uninstall_vpp_centos(node)
         else:
             logging.info("Uninstall CentOS")
             self._uninstall_vpp_centos(node)
         else:
@@ -352,21 +383,20 @@ class VPPUtil(object):
         :type additional_cmds: tuple
         """
         def_setting_tb_displayed = {
         :type additional_cmds: tuple
         """
         def_setting_tb_displayed = {
-            'IPv6 FIB': 'ip6 fib',
-            'IPv4 FIB': 'ip fib',
-            'Interface IP': 'int addr',
-            'Interfaces': 'int',
-            'ARP': 'ip arp',
-            'Errors': 'err'
+            "IPv6 FIB": "ip6 fib",
+            "IPv4 FIB": "ip fib",
+            "Interface IP": "int addr",
+            "Interfaces": "int",
+            "ARP": "ip arp",
+            "Errors": "err",
         }
 
         if additional_cmds:
             for cmd in additional_cmds:
         }
 
         if additional_cmds:
             for cmd in additional_cmds:
-                def_setting_tb_displayed['Custom Setting: {}'.format(cmd)] \
-                    = cmd
+                def_setting_tb_displayed["Custom Setting: {}".format(cmd)] = cmd
 
                 for _, value in def_setting_tb_displayed.items():
 
                 for _, value in def_setting_tb_displayed.items():
-                    self.exec_command('vppctl sh {}'.format(value))
+                    self.exec_command("vppctl sh {}".format(value))
 
     @staticmethod
     def get_vms(node):
 
     @staticmethod
     def get_vms(node):
@@ -397,32 +427,32 @@ class VPPUtil(object):
         :rtype: dictionary
         """
         interfaces = {}
         :rtype: dictionary
         """
         interfaces = {}
-        cmd = 'vppctl show int addr'
+        cmd = "vppctl show int addr"
         (ret, stdout, stderr) = VPPUtil.exec_command(cmd)
         if ret != 0:
             return interfaces
 
         (ret, stdout, stderr) = VPPUtil.exec_command(cmd)
         if ret != 0:
             return interfaces
 
-        lines = stdout.split('\n')
+        lines = stdout.split("\n")
         if len(lines[0]) != 0:
         if len(lines[0]) != 0:
-            if lines[0].split(' ')[0] == 'FileNotFoundError':
+            if lines[0].split(" ")[0] == "FileNotFoundError":
                 return interfaces
 
                 return interfaces
 
-        name = ''
+        name = ""
         for line in lines:
             if len(line) == 0:
                 continue
 
             # If the first character is not whitespace
             # create a new interface
         for line in lines:
             if len(line) == 0:
                 continue
 
             # If the first character is not whitespace
             # create a new interface
-            if len(re.findall(r'\s', line[0])) == 0:
+            if len(re.findall(r"\s", line[0])) == 0:
                 spl = line.split()
                 name = spl[0]
                 spl = line.split()
                 name = spl[0]
-                if name == 'local0':
+                if name == "local0":
                     continue
                 interfaces[name] = {}
                     continue
                 interfaces[name] = {}
-                interfaces[name]['state'] = spl[1].lstrip('(').rstrip('):\r')
+                interfaces[name]["state"] = spl[1].lstrip("(").rstrip("):\r")
             else:
             else:
-                interfaces[name]['address'] = line.lstrip(' ').rstrip('\r')
+                interfaces[name]["address"] = line.lstrip(" ").rstrip("\r")
 
         return interfaces
 
 
         return interfaces
 
@@ -439,14 +469,14 @@ class VPPUtil(object):
         """
 
         interfaces = {}
         """
 
         interfaces = {}
-        cmd = 'vppctl show hard'
+        cmd = "vppctl show hard"
         (ret, stdout, stderr) = VPPUtil.exec_command(cmd)
         if ret != 0:
             return interfaces
 
         (ret, stdout, stderr) = VPPUtil.exec_command(cmd)
         if ret != 0:
             return interfaces
 
-        lines = stdout.split('\n')
+        lines = stdout.split("\n")
         if len(lines[0]) != 0:
         if len(lines[0]) != 0:
-            if lines[0].split(' ')[0] == 'FileNotFoundError':
+            if lines[0].split(" ")[0] == "FileNotFoundError":
                 return interfaces
 
         for line in lines:
                 return interfaces
 
         for line in lines:
@@ -455,46 +485,46 @@ class VPPUtil(object):
 
             # If the first character is not whitespace
             # create a new interface
 
             # If the first character is not whitespace
             # create a new interface
-            if len(re.findall(r'\s', line[0])) == 0:
+            if len(re.findall(r"\s", line[0])) == 0:
                 spl = line.split()
                 name = spl[0]
                 interfaces[name] = {}
                 spl = line.split()
                 name = spl[0]
                 interfaces[name] = {}
-                interfaces[name]['index'] = spl[1]
-                interfaces[name]['state'] = spl[2]
+                interfaces[name]["index"] = spl[1]
+                interfaces[name]["state"] = spl[2]
 
             # Ethernet address
 
             # Ethernet address
-            rfall = re.findall(r'Ethernet address', line)
+            rfall = re.findall(r"Ethernet address", line)
             if rfall:
                 spl = line.split()
             if rfall:
                 spl = line.split()
-                interfaces[name]['mac'] = spl[2]
+                interfaces[name]["mac"] = spl[2]
 
             # Carrier
 
             # Carrier
-            rfall = re.findall(r'carrier', line)
+            rfall = re.findall(r"carrier", line)
             if rfall:
             if rfall:
-                spl = line.split('carrier ')
-                interfaces[name]['carrier'] = spl[1]
+                spl = line.split("carrier ")
+                interfaces[name]["carrier"] = spl[1]
 
             # Socket
 
             # Socket
-            spl = ''
-            rfall = re.findall(r'numa \d+', line)
+            spl = ""
+            rfall = re.findall(r"numa \d+", line)
             if rfall:
                 spl = rfall[0].split()
             if rfall:
                 spl = rfall[0].split()
-                interfaces[name]['numa'] = rfall[0].split()[1]
+                interfaces[name]["numa"] = rfall[0].split()[1]
 
             # Queues and Descriptors
 
             # Queues and Descriptors
-            rfall = re.findall(r'rx\: queues \d+', line)
+            rfall = re.findall(r"rx\: queues \d+", line)
             if rfall:
             if rfall:
-                interfaces[name]['rx queues'] = rfall[0].split()[2]
-                rdesc = re.findall(r'desc \d+', line)
+                interfaces[name]["rx queues"] = rfall[0].split()[2]
+                rdesc = re.findall(r"desc \d+", line)
                 if rdesc:
                 if rdesc:
-                    interfaces[name]['rx descs'] = rdesc[0].split()[1]
+                    interfaces[name]["rx descs"] = rdesc[0].split()[1]
 
 
-            rfall = re.findall(r'tx\: queues \d+', line)
+            rfall = re.findall(r"tx\: queues \d+", line)
             if rfall:
             if rfall:
-                interfaces[name]['tx queues'] = rfall[0].split()[2]
-                rdesc = re.findall(r'desc \d+', line)
+                interfaces[name]["tx queues"] = rfall[0].split()[2]
+                rdesc = re.findall(r"desc \d+", line)
                 if rdesc:
                 if rdesc:
-                    interfaces[name]['tx descs'] = rdesc[0].split()[1]
+                    interfaces[name]["tx descs"] = rdesc[0].split()[1]
 
         return interfaces
 
 
         return interfaces
 
@@ -508,17 +538,17 @@ class VPPUtil(object):
         """
 
         pkgs = []
         """
 
         pkgs = []
-        cmd = 'dpkg -l | grep vpp'
+        cmd = "dpkg -l | grep vpp"
         (ret, stdout, stderr) = self.exec_command(cmd)
         if ret != 0:
             return pkgs
 
         (ret, stdout, stderr) = self.exec_command(cmd)
         if ret != 0:
             return pkgs
 
-        lines = stdout.split('\n')
+        lines = stdout.split("\n")
         for line in lines:
             items = line.split()
             if len(items) < 2:
                 continue
         for line in lines:
             items = line.split()
             if len(items) < 2:
                 continue
-            pkg = {'name': items[1], 'version': items[2]}
+            pkg = {"name": items[1], "version": items[2]}
             pkgs.append(pkg)
 
         return pkgs
             pkgs.append(pkg)
 
         return pkgs
@@ -533,21 +563,21 @@ class VPPUtil(object):
         """
 
         pkgs = []
         """
 
         pkgs = []
-        cmd = 'rpm -qa | grep vpp'
+        cmd = "rpm -qa | grep vpp"
         (ret, stdout, stderr) = self.exec_command(cmd)
         if ret != 0:
             return pkgs
 
         (ret, stdout, stderr) = self.exec_command(cmd)
         if ret != 0:
             return pkgs
 
-        lines = stdout.split('\n')
+        lines = stdout.split("\n")
         for line in lines:
             if len(line) == 0:
                 continue
 
             items = line.split()
             if len(items) < 2:
         for line in lines:
             if len(line) == 0:
                 continue
 
             items = line.split()
             if len(items) < 2:
-                pkg = {'name': items[0]}
+                pkg = {"name": items[0]}
             else:
             else:
-                pkg = {'name': items[1], 'version': items[2]}
+                pkg = {"name": items[1], "version": items[2]}
 
             pkgs.append(pkg)
 
 
             pkgs.append(pkg)
 
@@ -563,9 +593,9 @@ class VPPUtil(object):
         """
 
         distro = self.get_linux_distro()
         """
 
         distro = self.get_linux_distro()
-        if distro[0] == 'Ubuntu':
+        if distro[0] == "Ubuntu":
             pkgs = self._get_installed_vpp_pkgs_ubuntu()
             pkgs = self._get_installed_vpp_pkgs_ubuntu()
-        elif distro[0] == 'CentOS Linux':
+        elif distro[0] == "CentOS Linux":
             pkgs = self._get_installed_vpp_pkgs_centos()
         else:
             pkgs = self._get_installed_vpp_pkgs_centos()
             pkgs = self._get_installed_vpp_pkgs_centos()
         else:
             pkgs = self._get_installed_vpp_pkgs_centos()
@@ -594,7 +624,7 @@ class VPPUtil(object):
         numa_list = []
         for if_key in iface_keys:
             try:
         numa_list = []
         for if_key in iface_keys:
             try:
-                numa_list.append(node['interfaces'][if_key].get('numa_node'))
+                numa_list.append(node["interfaces"][if_key].get("numa_node"))
             except KeyError:
                 pass
 
             except KeyError:
                 pass
 
@@ -617,12 +647,12 @@ class VPPUtil(object):
         :type node: dict
         """
 
         :type node: dict
         """
 
-        cmd = 'service vpp restart'
+        cmd = "service vpp restart"
         (ret, stdout, stderr) = VPPUtil.exec_command(cmd)
         if ret != 0:
         (ret, stdout, stderr) = VPPUtil.exec_command(cmd)
         if ret != 0:
-            raise RuntimeError('{} failed on node {} {} {}'.
-                               format(cmd, node['host'],
-                                      stdout, stderr))
+            raise RuntimeError(
+                "{} failed on node {} {} {}".format(cmd, node["host"], stdout, stderr)
+            )
 
     @staticmethod
     def start(node):
 
     @staticmethod
     def start(node):
@@ -634,12 +664,12 @@ class VPPUtil(object):
         :type node: dict
         """
 
         :type node: dict
         """
 
-        cmd = 'service vpp start'
+        cmd = "service vpp start"
         (ret, stdout, stderr) = VPPUtil.exec_command(cmd)
         if ret != 0:
         (ret, stdout, stderr) = VPPUtil.exec_command(cmd)
         if ret != 0:
-            raise RuntimeError('{} failed on node {} {} {}'.
-                               format(cmd, node['host'],
-                                      stdout, stderr))
+            raise RuntimeError(
+                "{} failed on node {} {} {}".format(cmd, node["host"], stdout, stderr)
+            )
 
     @staticmethod
     def stop(node):
 
     @staticmethod
     def stop(node):
@@ -651,12 +681,12 @@ class VPPUtil(object):
         :type node: dict
         """
 
         :type node: dict
         """
 
-        cmd = 'service vpp stop'
+        cmd = "service vpp stop"
         (ret, stdout, stderr) = VPPUtil.exec_command(cmd)
         if ret != 0:
         (ret, stdout, stderr) = VPPUtil.exec_command(cmd)
         if ret != 0:
-            logging.debug('{} failed on node {} {} {}'.
-                          format(cmd, node['host'],
-                                 stdout, stderr))
+            logging.debug(
+                "{} failed on node {} {} {}".format(cmd, node["host"], stdout, stderr)
+            )
 
     # noinspection RegExpRedundantEscape
     @staticmethod
 
     # noinspection RegExpRedundantEscape
     @staticmethod
@@ -676,11 +706,11 @@ class VPPUtil(object):
         if len(pkgs) == 0:
             return "Not Installed", errors
 
         if len(pkgs) == 0:
             return "Not Installed", errors
 
-        cmd = 'service vpp status'
+        cmd = "service vpp status"
         (ret, stdout, stderr) = VPPUtil.exec_command(cmd)
 
         # Get the active status
         (ret, stdout, stderr) = VPPUtil.exec_command(cmd)
 
         # Get the active status
-        state = re.findall(r'Active:[\w (\)]+', stdout)[0].split(' ')
+        state = re.findall(r"Active:[\w (\)]+", stdout)[0].split(" ")
         if len(state) > 2:
             statestr = "{} {}".format(state[1], state[2])
         else:
         if len(state) > 2:
             statestr = "{} {}".format(state[1], state[2])
         else:
@@ -707,13 +737,10 @@ class VPPUtil(object):
         """
 
         dist = distro.linux_distribution()
         """
 
         dist = distro.linux_distribution()
-        if dist[0] == 'Ubuntu' or \
-                dist[0] == 'CentOS Linux' or \
-                dist[:7] == 'Red Hat':
+        if dist[0] == "Ubuntu" or dist[0] == "CentOS Linux" or dist[:7] == "Red Hat":
             return dist
         else:
             return dist
         else:
-            raise RuntimeError(
-                'Linux Distribution {} is not supported'.format(dist[0]))
+            raise RuntimeError("Linux Distribution {} is not supported".format(dist[0]))
 
     @staticmethod
     def version():
 
     @staticmethod
     def version():
@@ -726,21 +753,21 @@ class VPPUtil(object):
         """
 
         version = {}
         """
 
         version = {}
-        cmd = 'vppctl show version verbose'
+        cmd = "vppctl show version verbose"
         (ret, stdout, stderr) = VPPUtil.exec_command(cmd)
         if ret != 0:
             return version
 
         (ret, stdout, stderr) = VPPUtil.exec_command(cmd)
         if ret != 0:
             return version
 
-        lines = stdout.split('\n')
+        lines = stdout.split("\n")
         if len(lines[0]) != 0:
         if len(lines[0]) != 0:
-            if lines[0].split(' ')[0] == 'FileNotFoundError':
+            if lines[0].split(" ")[0] == "FileNotFoundError":
                 return version
 
         for line in lines:
             if len(line) == 0:
                 continue
                 return version
 
         for line in lines:
             if len(line) == 0:
                 continue
-            dct = line.split(':')
-            version[dct[0]] = dct[1].lstrip(' ')
+            dct = line.split(":")
+            version[dct[0]] = dct[1].lstrip(" ")
 
         return version
 
 
         return version
 
@@ -755,38 +782,40 @@ class VPPUtil(object):
         """
 
         ifaces = []
         """
 
         ifaces = []
-        cmd = 'vppctl show bridge'
+        cmd = "vppctl show bridge"
         (ret, stdout, stderr) = VPPUtil.exec_command(cmd)
         if ret != 0:
         (ret, stdout, stderr) = VPPUtil.exec_command(cmd)
         if ret != 0:
-            raise RuntimeError('{} failed on node {} {} {}'.
-                               format(cmd, node['host'],
-                                      stdout, stderr))
-        lines = stdout.split('\r\n')
+            raise RuntimeError(
+                "{} failed on node {} {} {}".format(cmd, node["host"], stdout, stderr)
+            )
+        lines = stdout.split("\r\n")
         bridges = []
         for line in lines:
         bridges = []
         for line in lines:
-            if line == 'no bridge-domains in use':
+            if line == "no bridge-domains in use":
                 print(line)
                 return ifaces
             if len(line) == 0:
                 continue
 
                 print(line)
                 return ifaces
             if len(line) == 0:
                 continue
 
-            lspl = line.lstrip(' ').split()
-            if lspl[0] != 'BD-ID':
+            lspl = line.lstrip(" ").split()
+            if lspl[0] != "BD-ID":
                 bridges.append(lspl[0])
 
         for bridge in bridges:
                 bridges.append(lspl[0])
 
         for bridge in bridges:
-            cmd = 'vppctl show bridge {} detail'.format(bridge)
+            cmd = "vppctl show bridge {} detail".format(bridge)
             (ret, stdout, stderr) = VPPUtil.exec_command(cmd)
             if ret != 0:
             (ret, stdout, stderr) = VPPUtil.exec_command(cmd)
             if ret != 0:
-                raise RuntimeError('{} failed on node {} {} {}'.
-                                   format(cmd, node['host'],
-                                          stdout, stderr))
+                raise RuntimeError(
+                    "{} failed on node {} {} {}".format(
+                        cmd, node["host"], stdout, stderr
+                    )
+                )
 
 
-        lines = stdout.split('\r\n')
+        lines = stdout.split("\r\n")
         for line in lines:
         for line in lines:
-            iface = re.findall(r'[a-zA-z]+\d+/\d+/\d+', line)
+            iface = re.findall(r"[a-zA-z]+\d+/\d+/\d+", line)
             if len(iface):
             if len(iface):
-                ifcidx = {'name': iface[0], 'index': line.split()[1]}
+                ifcidx = {"name": iface[0], "index": line.split()[1]}
                 ifaces.append(ifcidx)
 
         print(stdout)
                 ifaces.append(ifcidx)
 
         print(stdout)
index f17efd8..976b200 100644 (file)
@@ -17,11 +17,11 @@ import re
 
 from vpplib.VPPUtil import VPPUtil
 
 
 from vpplib.VPPUtil import VPPUtil
 
-__all__ = ['VppGrubUtil']
+__all__ = ["VppGrubUtil"]
 
 
 class VppGrubUtil(object):
 
 
 class VppGrubUtil(object):
-    """ VPP Grub Utilities."""
+    """VPP Grub Utilities."""
 
     def _get_current_cmdline(self):
         """
 
     def _get_current_cmdline(self):
         """
@@ -32,14 +32,14 @@ class VppGrubUtil(object):
         """
 
         # Get the memory information using /proc/meminfo
         """
 
         # Get the memory information using /proc/meminfo
-        cmd = 'sudo cat /proc/cmdline'
+        cmd = "sudo cat /proc/cmdline"
         (ret, stdout, stderr) = VPPUtil.exec_command(cmd)
         if ret != 0:
         (ret, stdout, stderr) = VPPUtil.exec_command(cmd)
         if ret != 0:
-            raise RuntimeError('{} on node {} {} {}'.
-                               format(cmd, self._node['host'],
-                                      stdout, stderr))
+            raise RuntimeError(
+                "{} on node {} {} {}".format(cmd, self._node["host"], stdout, stderr)
+            )
 
 
-        self._current_cmdline = stdout.strip('\n')
+        self._current_cmdline = stdout.strip("\n")
 
     def _get_default_cmdline(self):
         """
 
     def _get_default_cmdline(self):
         """
@@ -50,21 +50,24 @@ class VppGrubUtil(object):
         """
 
         # Get the default grub cmdline
         """
 
         # Get the default grub cmdline
-        rootdir = self._node['rootdir']
-        gfile = self._node['cpu']['grub_config_file']
-        grubcmdline = self._node['cpu']['grubcmdline']
-        cmd = 'cat {}'.format(rootdir + gfile)
+        rootdir = self._node["rootdir"]
+        gfile = self._node["cpu"]["grub_config_file"]
+        grubcmdline = self._node["cpu"]["grubcmdline"]
+        cmd = "cat {}".format(rootdir + gfile)
         (ret, stdout, stderr) = VPPUtil.exec_command(cmd)
         if ret != 0:
         (ret, stdout, stderr) = VPPUtil.exec_command(cmd)
         if ret != 0:
-            raise RuntimeError('{} Executing failed on node {} {}'.
-                               format(cmd, self._node['host'], stderr))
+            raise RuntimeError(
+                "{} Executing failed on node {} {}".format(
+                    cmd, self._node["host"], stderr
+                )
+            )
 
         # Get the Default Linux command line, ignoring commented lines
 
         # Get the Default Linux command line, ignoring commented lines
-        lines = stdout.split('\n')
+        lines = stdout.split("\n")
         for line in lines:
         for line in lines:
-            if line == '' or line[0] == '#':
+            if line == "" or line[0] == "#":
                 continue
                 continue
-            ldefault = re.findall(r'{}=.+'.format(grubcmdline), line)
+            ldefault = re.findall(r"{}=.+".format(grubcmdline), line)
             if ldefault:
                 self._default_cmdline = ldefault[0]
                 break
             if ldefault:
                 self._default_cmdline = ldefault[0]
                 break
@@ -96,9 +99,9 @@ class VppGrubUtil(object):
         :returns: The command line
         :rtype: string
         """
         :returns: The command line
         :rtype: string
         """
-        grubcmdline = self._node['cpu']['grubcmdline']
+        grubcmdline = self._node["cpu"]["grubcmdline"]
         cmdline = self._default_cmdline
         cmdline = self._default_cmdline
-        value = cmdline.split('{}='.format(grubcmdline))[1]
+        value = cmdline.split("{}=".format(grubcmdline))[1]
         value = value.rstrip('"').lstrip('"')
 
         # jadfix intel_pstate=disable sometimes cause networks to
         value = value.rstrip('"').lstrip('"')
 
         # jadfix intel_pstate=disable sometimes cause networks to
@@ -111,43 +114,43 @@ class VppGrubUtil(object):
         #    value = '{} intel_pstate=disable'.format(value)
 
         # Replace isolcpus with ours
         #    value = '{} intel_pstate=disable'.format(value)
 
         # Replace isolcpus with ours
-        isolcpus = re.findall(r'isolcpus=[\w+\-,]+', value)
+        isolcpus = re.findall(r"isolcpus=[\w+\-,]+", value)
         if not isolcpus:
         if not isolcpus:
-            if isolated_cpus != '':
+            if isolated_cpus != "":
                 value = "{} isolcpus={}".format(value, isolated_cpus)
         else:
                 value = "{} isolcpus={}".format(value, isolated_cpus)
         else:
-            if isolated_cpus != '':
-                value = re.sub(r'isolcpus=[\w+\-,]+',
-                               'isolcpus={}'.format(isolated_cpus),
-                               value)
+            if isolated_cpus != "":
+                value = re.sub(
+                    r"isolcpus=[\w+\-,]+", "isolcpus={}".format(isolated_cpus), value
+                )
             else:
             else:
-                value = re.sub(r'isolcpus=[\w+\-,]+', '', value)
+                value = re.sub(r"isolcpus=[\w+\-,]+", "", value)
 
 
-        nohz = re.findall(r'nohz_full=[\w+\-,]+', value)
+        nohz = re.findall(r"nohz_full=[\w+\-,]+", value)
         if not nohz:
         if not nohz:
-            if isolated_cpus != '':
+            if isolated_cpus != "":
                 value = "{} nohz_full={}".format(value, isolated_cpus)
         else:
                 value = "{} nohz_full={}".format(value, isolated_cpus)
         else:
-            if isolated_cpus != '':
-                value = re.sub(r'nohz_full=[\w+\-,]+',
-                               'nohz_full={}'.format(isolated_cpus),
-                               value)
+            if isolated_cpus != "":
+                value = re.sub(
+                    r"nohz_full=[\w+\-,]+", "nohz_full={}".format(isolated_cpus), value
+                )
             else:
             else:
-                value = re.sub(r'nohz_full=[\w+\-,]+', '', value)
+                value = re.sub(r"nohz_full=[\w+\-,]+", "", value)
 
 
-        rcu = re.findall(r'rcu_nocbs=[\w+\-,]+', value)
+        rcu = re.findall(r"rcu_nocbs=[\w+\-,]+", value)
         if not rcu:
         if not rcu:
-            if isolated_cpus != '':
+            if isolated_cpus != "":
                 value = "{} rcu_nocbs={}".format(value, isolated_cpus)
         else:
                 value = "{} rcu_nocbs={}".format(value, isolated_cpus)
         else:
-            if isolated_cpus != '':
-                value = re.sub(r'rcu_nocbs=[\w+\-,]+',
-                               'rcu_nocbs={}'.format(isolated_cpus),
-                               value)
+            if isolated_cpus != "":
+                value = re.sub(
+                    r"rcu_nocbs=[\w+\-,]+", "rcu_nocbs={}".format(isolated_cpus), value
+                )
             else:
             else:
-                value = re.sub(r'rcu_nocbs=[\w+\-,]+', '', value)
+                value = re.sub(r"rcu_nocbs=[\w+\-,]+", "", value)
 
 
-        value = value.lstrip(' ').rstrip(' ')
+        value = value.lstrip(" ").rstrip(" ")
         cmdline = '{}="{}"'.format(grubcmdline, value)
         return cmdline
 
         cmdline = '{}="{}"'.format(grubcmdline, value)
         return cmdline
 
@@ -167,69 +170,68 @@ class VppGrubUtil(object):
         if len(vpp_cmdline):
             # Update grub
             # Save the original file
         if len(vpp_cmdline):
             # Update grub
             # Save the original file
-            rootdir = node['rootdir']
-            grubcmdline = node['cpu']['grubcmdline']
-            ofilename = rootdir + node['cpu']['grub_config_file'] + '.orig'
-            filename = rootdir + node['cpu']['grub_config_file']
+            rootdir = node["rootdir"]
+            grubcmdline = node["cpu"]["grubcmdline"]
+            ofilename = rootdir + node["cpu"]["grub_config_file"] + ".orig"
+            filename = rootdir + node["cpu"]["grub_config_file"]
 
             # Write the output file
             # Does a copy of the original file exist, if not create one
 
             # Write the output file
             # Does a copy of the original file exist, if not create one
-            (ret, stdout, stderr) = VPPUtil.exec_command(
-                'ls {}'.format(ofilename))
+            (ret, stdout, stderr) = VPPUtil.exec_command("ls {}".format(ofilename))
             if ret != 0:
             if ret != 0:
-                if stdout.strip('\n') != ofilename:
-                    cmd = 'sudo cp {} {}'.format(filename, ofilename)
+                if stdout.strip("\n") != ofilename:
+                    cmd = "sudo cp {} {}".format(filename, ofilename)
                     (ret, stdout, stderr) = VPPUtil.exec_command(cmd)
                     if ret != 0:
                     (ret, stdout, stderr) = VPPUtil.exec_command(cmd)
                     if ret != 0:
-                        raise RuntimeError('{} failed on node {} {}'.
-                                           format(cmd, self._node['host'],
-                                                  stderr))
+                        raise RuntimeError(
+                            "{} failed on node {} {}".format(
+                                cmd, self._node["host"], stderr
+                            )
+                        )
 
             # Get the contents of the current grub config file
 
             # Get the contents of the current grub config file
-            cmd = 'cat {}'.format(filename)
+            cmd = "cat {}".format(filename)
             (ret, stdout, stderr) = VPPUtil.exec_command(cmd)
             if ret != 0:
             (ret, stdout, stderr) = VPPUtil.exec_command(cmd)
             if ret != 0:
-                raise RuntimeError('{} failed on node {} {}'.format(
-                    cmd,
-                    self._node['host'],
-                    stderr))
+                raise RuntimeError(
+                    "{} failed on node {} {}".format(cmd, self._node["host"], stderr)
+                )
 
             # Write the new contents
             # Get the Default Linux command line, ignoring commented lines
             content = ""
 
             # Write the new contents
             # Get the Default Linux command line, ignoring commented lines
             content = ""
-            lines = stdout.split('\n')
+            lines = stdout.split("\n")
             for line in lines:
             for line in lines:
-                if line == '':
-                    content += line + '\n'
+                if line == "":
+                    content += line + "\n"
                     continue
                     continue
-                if line[0] == '#':
-                    content += line + '\n'
+                if line[0] == "#":
+                    content += line + "\n"
                     continue
 
                     continue
 
-                ldefault = re.findall(r'{}=.+'.format(grubcmdline), line)
+                ldefault = re.findall(r"{}=.+".format(grubcmdline), line)
                 if ldefault:
                 if ldefault:
-                    content += vpp_cmdline + '\n'
+                    content += vpp_cmdline + "\n"
                 else:
                 else:
-                    content += line + '\n'
+                    content += line + "\n"
 
             content = content.replace(r"`", r"\`")
 
             content = content.replace(r"`", r"\`")
-            content = content.rstrip('\n')
+            content = content.rstrip("\n")
             cmd = "sudo cat > {0} << EOF\n{1}\n".format(filename, content)
             (ret, stdout, stderr) = VPPUtil.exec_command(cmd)
             if ret != 0:
             cmd = "sudo cat > {0} << EOF\n{1}\n".format(filename, content)
             (ret, stdout, stderr) = VPPUtil.exec_command(cmd)
             if ret != 0:
-                raise RuntimeError('{} failed on node {} {}'.format(
-                    cmd,
-                    self._node['host'],
-                    stderr))
+                raise RuntimeError(
+                    "{} failed on node {} {}".format(cmd, self._node["host"], stderr)
+                )
 
         return vpp_cmdline
 
     def __init__(self, node):
         distro = VPPUtil.get_linux_distro()
 
         return vpp_cmdline
 
     def __init__(self, node):
         distro = VPPUtil.get_linux_distro()
-        if distro[0] == 'Ubuntu':
-            node['cpu']['grubcmdline'] = 'GRUB_CMDLINE_LINUX_DEFAULT'
+        if distro[0] == "Ubuntu":
+            node["cpu"]["grubcmdline"] = "GRUB_CMDLINE_LINUX_DEFAULT"
         else:
         else:
-            node['cpu']['grubcmdline'] = 'GRUB_CMDLINE_LINUX'
+            node["cpu"]["grubcmdline"] = "GRUB_CMDLINE_LINUX"
 
         self._node = node
         self._current_cmdline = ""
 
         self._node = node
         self._current_cmdline = ""
index 3a63282..4899109 100644 (file)
@@ -33,6 +33,7 @@ class VppHugePageUtil(object):
     """
     Huge Page Utilities
     """
     """
     Huge Page Utilities
     """
+
     def hugepages_dryrun_apply(self):
         """
         Apply the huge page configuration
     def hugepages_dryrun_apply(self):
         """
         Apply the huge page configuration
@@ -40,23 +41,23 @@ class VppHugePageUtil(object):
         """
 
         node = self._node
         """
 
         node = self._node
-        hugepages = node['hugepages']
+        hugepages = node["hugepages"]
 
         vpp_hugepage_config = VPP_HUGEPAGE_CONFIG.format(
 
         vpp_hugepage_config = VPP_HUGEPAGE_CONFIG.format(
-            nr_hugepages=hugepages['total'],
-            max_map_count=hugepages['max_map_count'],
-            shmmax=hugepages['shmax'])
+            nr_hugepages=hugepages["total"],
+            max_map_count=hugepages["max_map_count"],
+            shmmax=hugepages["shmax"],
+        )
 
 
-        rootdir = node['rootdir']
-        filename = rootdir + node['hugepages']['hugepage_config_file']
+        rootdir = node["rootdir"]
+        filename = rootdir + node["hugepages"]["hugepage_config_file"]
 
 
-        cmd = 'echo "{0}" | sudo tee {1}'.\
-            format(vpp_hugepage_config, filename)
+        cmd = 'echo "{0}" | sudo tee {1}'.format(vpp_hugepage_config, filename)
         (ret, stdout, stderr) = VPPUtil.exec_command(cmd)
         if ret != 0:
         (ret, stdout, stderr) = VPPUtil.exec_command(cmd)
         if ret != 0:
-            raise RuntimeError('{} failed on node {} {} {}'.
-                               format(cmd, node['host'],
-                                      stdout, stderr))
+            raise RuntimeError(
+                "{} failed on node {} {} {}".format(cmd, node["host"], stdout, stderr)
+            )
 
     def get_actual_huge_pages(self):
         """
 
     def get_actual_huge_pages(self):
         """
@@ -68,25 +69,26 @@ class VppHugePageUtil(object):
         """
 
         # Get the memory information using /proc/meminfo
         """
 
         # Get the memory information using /proc/meminfo
-        cmd = 'sudo cat /proc/meminfo'
+        cmd = "sudo cat /proc/meminfo"
         (ret, stdout, stderr) = VPPUtil.exec_command(cmd)
         if ret != 0:
             raise RuntimeError(
         (ret, stdout, stderr) = VPPUtil.exec_command(cmd)
         if ret != 0:
             raise RuntimeError(
-                '{} failed on node {} {} {}'.format(
-                    cmd, self._node['host'],
-                    stdout, stderr))
-
-        total = re.findall(r'HugePages_Total:\s+\w+', stdout)
-        free = re.findall(r'HugePages_Free:\s+\w+', stdout)
-        size = re.findall(r'Hugepagesize:\s+\w+\s+\w+', stdout)
-        memtotal = re.findall(r'MemTotal:\s+\w+\s+\w+', stdout)
-        memfree = re.findall(r'MemFree:\s+\w+\s+\w+', stdout)
-
-        total = total[0].split(':')[1].lstrip()
-        free = free[0].split(':')[1].lstrip()
-        size = size[0].split(':')[1].lstrip()
-        memtotal = memtotal[0].split(':')[1].lstrip()
-        memfree = memfree[0].split(':')[1].lstrip()
+                "{} failed on node {} {} {}".format(
+                    cmd, self._node["host"], stdout, stderr
+                )
+            )
+
+        total = re.findall(r"HugePages_Total:\s+\w+", stdout)
+        free = re.findall(r"HugePages_Free:\s+\w+", stdout)
+        size = re.findall(r"Hugepagesize:\s+\w+\s+\w+", stdout)
+        memtotal = re.findall(r"MemTotal:\s+\w+\s+\w+", stdout)
+        memfree = re.findall(r"MemFree:\s+\w+\s+\w+", stdout)
+
+        total = total[0].split(":")[1].lstrip()
+        free = free[0].split(":")[1].lstrip()
+        size = size[0].split(":")[1].lstrip()
+        memtotal = memtotal[0].split(":")[1].lstrip()
+        memfree = memfree[0].split(":")[1].lstrip()
         return total, free, size, memtotal, memfree
 
     def show_huge_pages(self):
         return total, free, size, memtotal, memfree
 
     def show_huge_pages(self):
@@ -96,17 +98,13 @@ class VppHugePageUtil(object):
         """
 
         node = self._node
         """
 
         node = self._node
-        hugepages = node['hugepages']
-        print ("  {:30}: {}".format("Total System Memory",
-                                   hugepages['memtotal']))
-        print ("  {:30}: {}".format("Total Free Memory",
-                                    hugepages['memfree']))
-        print ("  {:30}: {}".format("Actual Huge Page Total",
-                                    hugepages['actual_total']))
-        print ("  {:30}: {}".format("Configured Huge Page Total",
-                                    hugepages['total']))
-        print ("  {:30}: {}".format("Huge Pages Free", hugepages['free']))
-        print ("  {:30}: {}".format("Huge Page Size", hugepages['size']))
+        hugepages = node["hugepages"]
+        print("  {:30}: {}".format("Total System Memory", hugepages["memtotal"]))
+        print("  {:30}: {}".format("Total Free Memory", hugepages["memfree"]))
+        print("  {:30}: {}".format("Actual Huge Page Total", hugepages["actual_total"]))
+        print("  {:30}: {}".format("Configured Huge Page Total", hugepages["total"]))
+        print("  {:30}: {}".format("Huge Pages Free", hugepages["free"]))
+        print("  {:30}: {}".format("Huge Page Size", hugepages["size"]))
 
     def get_huge_page_config(self):
         """
 
     def get_huge_page_config(self):
         """
@@ -115,7 +113,7 @@ class VppHugePageUtil(object):
         :returns: The map max count and shmmax
         """
 
         :returns: The map max count and shmmax
         """
 
-        total = self._node['hugepages']['total']
+        total = self._node["hugepages"]["total"]
         max_map_count = int(total) * 2 + 1024
         shmmax = int(total) * 2 * 1024 * 1024
         return max_map_count, shmmax
         max_map_count = int(total) * 2 + 1024
         shmmax = int(total) * 2 * 1024 * 1024
         return max_map_count, shmmax
index ceda46f..032a262 100644 (file)
@@ -23,7 +23,7 @@ from vpplib.VPPUtil import VPPUtil
 DPDK_SCRIPT = "/vpp/vpp-config/scripts/dpdk-devbind.py"
 
 # PCI Device id regular expresssion
 DPDK_SCRIPT = "/vpp/vpp-config/scripts/dpdk-devbind.py"
 
 # PCI Device id regular expresssion
-PCI_DEV_ID_REGEX = '[0-9A-Fa-f]+:[0-9A-Fa-f]+:[0-9A-Fa-f]+.[0-9A-Fa-f]+'
+PCI_DEV_ID_REGEX = "[0-9A-Fa-f]+:[0-9A-Fa-f]+:[0-9A-Fa-f]+.[0-9A-Fa-f]+"
 
 
 class VppPCIUtil(object):
 
 
 class VppPCIUtil(object):
@@ -45,51 +45,47 @@ class VppPCIUtil(object):
         devices = {}
 
         ids = re.findall(PCI_DEV_ID_REGEX, device_string)
         devices = {}
 
         ids = re.findall(PCI_DEV_ID_REGEX, device_string)
-        descriptions = re.findall(r'\'([\s\S]*?)\'', device_string)
-        unused = re.findall(r'unused=\w+|unused=', device_string)
+        descriptions = re.findall(r"\'([\s\S]*?)\'", device_string)
+        unused = re.findall(r"unused=\w+|unused=", device_string)
 
         for i, j in enumerate(ids):
 
         for i, j in enumerate(ids):
-            device = {'description': descriptions[i]}
+            device = {"description": descriptions[i]}
             if unused:
             if unused:
-                device['unused'] = unused[i].split('=')[1].split(',')
+                device["unused"] = unused[i].split("=")[1].split(",")
 
 
-            cmd = 'ls /sys/bus/pci/devices/{}/driver/module/drivers'. \
-                format(ids[i])
+            cmd = "ls /sys/bus/pci/devices/{}/driver/module/drivers".format(ids[i])
             (ret, stdout, stderr) = VPPUtil.exec_command(cmd)
             if ret == 0:
             (ret, stdout, stderr) = VPPUtil.exec_command(cmd)
             if ret == 0:
-                device['driver'] = stdout.split(':')[1].rstrip('\n')
+                device["driver"] = stdout.split(":")[1].rstrip("\n")
 
 
-            cmd = 'cat /sys/bus/pci/devices/{}/numa_node'.format(ids[i])
+            cmd = "cat /sys/bus/pci/devices/{}/numa_node".format(ids[i])
             (ret, stdout, stderr) = VPPUtil.exec_command(cmd)
             if ret != 0:
             (ret, stdout, stderr) = VPPUtil.exec_command(cmd)
             if ret != 0:
-                raise RuntimeError('{} failed {} {}'.
-                                   format(cmd, stderr, stdout))
-            numa_node = stdout.rstrip('\n')
-            if numa_node == '-1':
-                device['numa_node'] = '0'
+                raise RuntimeError("{} failed {} {}".format(cmd, stderr, stdout))
+            numa_node = stdout.rstrip("\n")
+            if numa_node == "-1":
+                device["numa_node"] = "0"
             else:
             else:
-                device['numa_node'] = numa_node
+                device["numa_node"] = numa_node
 
             interfaces = []
 
             interfaces = []
-            device['interfaces'] = []
-            cmd = 'ls /sys/bus/pci/devices/{}/net'.format(ids[i])
+            device["interfaces"] = []
+            cmd = "ls /sys/bus/pci/devices/{}/net".format(ids[i])
             (ret, stdout, stderr) = VPPUtil.exec_command(cmd)
             if ret == 0:
             (ret, stdout, stderr) = VPPUtil.exec_command(cmd)
             if ret == 0:
-                interfaces = stdout.rstrip('\n').split()
-                device['interfaces'] = interfaces
+                interfaces = stdout.rstrip("\n").split()
+                device["interfaces"] = interfaces
 
             l2_addrs = []
             for intf in interfaces:
 
             l2_addrs = []
             for intf in interfaces:
-                cmd = 'cat /sys/bus/pci/devices/{}/net/{}/address'.format(
-                    ids[i], intf)
+                cmd = "cat /sys/bus/pci/devices/{}/net/{}/address".format(ids[i], intf)
                 (ret, stdout, stderr) = VPPUtil.exec_command(cmd)
                 if ret != 0:
                 (ret, stdout, stderr) = VPPUtil.exec_command(cmd)
                 if ret != 0:
-                    raise RuntimeError('{} failed {} {}'.
-                                       format(cmd, stderr, stdout))
+                    raise RuntimeError("{} failed {} {}".format(cmd, stderr, stdout))
 
 
-                l2_addrs.append(stdout.rstrip('\n'))
+                l2_addrs.append(stdout.rstrip("\n"))
 
 
-            device['l2addr'] = l2_addrs
+            device["l2addr"] = l2_addrs
 
             devices[ids[i]] = device
 
 
             devices[ids[i]] = device
 
@@ -112,66 +108,62 @@ class VppPCIUtil(object):
         """
 
         node = self._node
         """
 
         node = self._node
-        rootdir = node['rootdir']
+        rootdir = node["rootdir"]
         dpdk_script = rootdir + DPDK_SCRIPT
         dpdk_script = rootdir + DPDK_SCRIPT
-        cmd = dpdk_script + ' --status'
+        cmd = dpdk_script + " --status"
         (ret, stdout, stderr) = VPPUtil.exec_command(cmd)
         if ret != 0:
         (ret, stdout, stderr) = VPPUtil.exec_command(cmd)
         if ret != 0:
-            raise RuntimeError('{} failed on node {} {}'.format(
-                cmd,
-                node['host'],
-                stderr))
+            raise RuntimeError(
+                "{} failed on node {} {}".format(cmd, node["host"], stderr)
+            )
 
         # Get the network devices using the DPDK
         # First get everything after using DPDK
 
         # Get the network devices using the DPDK
         # First get everything after using DPDK
-        stda = stdout.split('Network devices using DPDK-compatible driver')[1]
+        stda = stdout.split("Network devices using DPDK-compatible driver")[1]
         # Then get everything before using kernel driver
         # Then get everything before using kernel driver
-        using_dpdk = stda.split('Network devices using kernel driver')[0]
+        using_dpdk = stda.split("Network devices using kernel driver")[0]
         self._dpdk_devices = self._create_device_list(using_dpdk)
 
         # Get the network devices using the kernel
         self._dpdk_devices = self._create_device_list(using_dpdk)
 
         # Get the network devices using the kernel
-        stda = stdout.split('Network devices using kernel driver')[1]
-        using_kernel = stda.split('Other network devices')[0]
+        stda = stdout.split("Network devices using kernel driver")[1]
+        using_kernel = stda.split("Other network devices")[0]
         self._kernel_devices = self._create_device_list(using_kernel)
 
         # Get the other network devices
         self._kernel_devices = self._create_device_list(using_kernel)
 
         # Get the other network devices
-        stda = stdout.split('Other network devices')[1]
-        other = stda.split('Crypto devices using DPDK-compatible driver')[0]
+        stda = stdout.split("Other network devices")[1]
+        other = stda.split("Crypto devices using DPDK-compatible driver")[0]
         self._other_devices = self._create_device_list(other)
 
         # Get the crypto devices using the DPDK
         self._other_devices = self._create_device_list(other)
 
         # Get the crypto devices using the DPDK
-        stda = stdout.split('Crypto devices using DPDK-compatible driver')[1]
-        crypto_using_dpdk = stda.split('Crypto devices using kernel driver')[0]
-        self._crypto_dpdk_devices = self._create_device_list(
-            crypto_using_dpdk)
+        stda = stdout.split("Crypto devices using DPDK-compatible driver")[1]
+        crypto_using_dpdk = stda.split("Crypto devices using kernel driver")[0]
+        self._crypto_dpdk_devices = self._create_device_list(crypto_using_dpdk)
 
         # Get the network devices using the kernel
 
         # Get the network devices using the kernel
-        stda = stdout.split('Crypto devices using kernel driver')[1]
-        crypto_using_kernel = stda.split('Other crypto devices')[0]
-        self._crypto_kernel_devices = self._create_device_list(
-            crypto_using_kernel)
+        stda = stdout.split("Crypto devices using kernel driver")[1]
+        crypto_using_kernel = stda.split("Other crypto devices")[0]
+        self._crypto_kernel_devices = self._create_device_list(crypto_using_kernel)
 
         # Get the other network devices
 
         # Get the other network devices
-        crypto_other = stdout.split('Other crypto devices')[1]
+        crypto_other = stdout.split("Other crypto devices")[1]
         self._crypto_other_devices = self._create_device_list(crypto_other)
 
         # Get the devices used by the kernel
         for devk in self._kernel_devices.items():
             dvid = devk[0]
             device = devk[1]
         self._crypto_other_devices = self._create_device_list(crypto_other)
 
         # Get the devices used by the kernel
         for devk in self._kernel_devices.items():
             dvid = devk[0]
             device = devk[1]
-            for i in device['interfaces']:
+            for i in device["interfaces"]:
                 cmd = "ip addr show " + i
                 (ret, stdout, stderr) = VPPUtil.exec_command(cmd)
                 if ret != 0:
                 cmd = "ip addr show " + i
                 (ret, stdout, stderr) = VPPUtil.exec_command(cmd)
                 if ret != 0:
-                    raise RuntimeError('{} failed on node {} {}'.format(
-                        cmd,
-                        node['host'],
-                        stderr))
-                lstate = re.findall(r'state \w+', stdout)[0].split(' ')[1]
+                    raise RuntimeError(
+                        "{} failed on node {} {}".format(cmd, node["host"], stderr)
+                    )
+                lstate = re.findall(r"state \w+", stdout)[0].split(" ")[1]
 
                 # Take care of the links that are UP
 
                 # Take care of the links that are UP
-                if lstate == 'UP':
-                    device['linkup'] = True
+                if lstate == "UP":
+                    device["linkup"] = True
                     self._link_up_devices[dvid] = device
 
         for devl in self._link_up_devices.items():
                     self._link_up_devices[dvid] = device
 
         for devl in self._link_up_devices.items():
@@ -234,18 +226,18 @@ class VppPCIUtil(object):
 
         """
 
 
         """
 
-        name = 'port' + str(len(interfaces))
+        name = "port" + str(len(interfaces))
         interfaces[name] = {}
         interfaces[name] = {}
-        interfaces[name]['pci_address'] = device_id
-        interfaces[name]['numa_node'] = device['numa_node']
-        if 'l2addr' in device:
-            l2_addrs = device['l2addr']
+        interfaces[name]["pci_address"] = device_id
+        interfaces[name]["numa_node"] = device["numa_node"]
+        if "l2addr" in device:
+            l2_addrs = device["l2addr"]
             for i, j in enumerate(l2_addrs):
                 if i > 0:
             for i, j in enumerate(l2_addrs):
                 if i > 0:
-                    mname = 'mac_address' + str(i + 1)
+                    mname = "mac_address" + str(i + 1)
                     interfaces[name][mname] = l2_addrs[i]
                 else:
                     interfaces[name][mname] = l2_addrs[i]
                 else:
-                    interfaces[name]['mac_address'] = l2_addrs[i]
+                    interfaces[name]["mac_address"] = l2_addrs[i]
 
     @staticmethod
     def show_vpp_devices(devices, show_interfaces=True, show_header=True):
 
     @staticmethod
     def show_vpp_devices(devices, show_interfaces=True, show_header=True):
@@ -261,34 +253,33 @@ class VppPCIUtil(object):
         """
 
         if show_interfaces:
         """
 
         if show_interfaces:
-            header = "{:15} {:25} {:50}".format("PCI ID",
-                                                "Kernel Interface(s)",
-                                                "Description")
+            header = "{:15} {:25} {:50}".format(
+                "PCI ID", "Kernel Interface(s)", "Description"
+            )
         else:
         else:
-            header = "{:15} {:50}".format("PCI ID",
-                                          "Description")
-        dashseparator = ("-" * (len(header) - 2))
+            header = "{:15} {:50}".format("PCI ID", "Description")
+        dashseparator = "-" * (len(header) - 2)
 
         if show_header is True:
 
         if show_header is True:
-            print (header)
-            print (dashseparator)
+            print(header)
+            print(dashseparator)
         for dit in devices.items():
             dvid = dit[0]
             device = dit[1]
             if show_interfaces:
         for dit in devices.items():
             dvid = dit[0]
             device = dit[1]
             if show_interfaces:
-                interfaces = device['interfaces']
-                interface = ''
+                interfaces = device["interfaces"]
+                interface = ""
                 for i, j in enumerate(interfaces):
                     if i > 0:
                 for i, j in enumerate(interfaces):
                     if i > 0:
-                        interface += ',' + interfaces[i]
+                        interface += "," + interfaces[i]
                     else:
                         interface = interfaces[i]
 
                     else:
                         interface = interfaces[i]
 
-                print ("{:15} {:25} {:50}".format(
-                    dvid, interface, device['description']))
+                print(
+                    "{:15} {:25} {:50}".format(dvid, interface, device["description"])
+                )
             else:
             else:
-                print ("{:15} {:50}".format(
-                    dvid, device['description']))
+                print("{:15} {:50}".format(dvid, device["description"]))
 
     @staticmethod
     def unbind_vpp_device(node, device_id):
 
     @staticmethod
     def unbind_vpp_device(node, device_id):
@@ -301,14 +292,14 @@ class VppPCIUtil(object):
         :type device_id: string
         """
 
         :type device_id: string
         """
 
-        rootdir = node['rootdir']
+        rootdir = node["rootdir"]
         dpdk_script = rootdir + DPDK_SCRIPT
         dpdk_script = rootdir + DPDK_SCRIPT
-        cmd = dpdk_script + ' -u ' + ' ' + device_id
+        cmd = dpdk_script + " -u " + " " + device_id
         (ret, stdout, stderr) = VPPUtil.exec_command(cmd)
         if ret != 0:
         (ret, stdout, stderr) = VPPUtil.exec_command(cmd)
         if ret != 0:
-            raise RuntimeError('{} failed on node {} {} {}'.format(
-                cmd, node['host'],
-                stdout, stderr))
+            raise RuntimeError(
+                "{} failed on node {} {} {}".format(cmd, node["host"], stdout, stderr)
+            )
 
     @staticmethod
     def bind_vpp_device(node, driver, device_id):
 
     @staticmethod
     def bind_vpp_device(node, driver, device_id):
@@ -324,14 +315,14 @@ class VppPCIUtil(object):
         :returns ret: Command return code
         """
 
         :returns ret: Command return code
         """
 
-        rootdir = node['rootdir']
+        rootdir = node["rootdir"]
         dpdk_script = rootdir + DPDK_SCRIPT
         dpdk_script = rootdir + DPDK_SCRIPT
-        cmd = dpdk_script + ' -b ' + driver + ' ' + device_id
+        cmd = dpdk_script + " -b " + driver + " " + device_id
         (ret, stdout, stderr) = VPPUtil.exec_command(cmd)
         if ret != 0:
         (ret, stdout, stderr) = VPPUtil.exec_command(cmd)
         if ret != 0:
-            logging.error('{} failed on node {}'.format(
-                cmd, node['host'], stdout, stderr))
-            logging.error('{} {}'.format(
-                stdout, stderr))
+            logging.error(
+                "{} failed on node {}".format(cmd, node["host"], stdout, stderr)
+            )
+            logging.error("{} {}".format(stdout, stderr))
 
         return ret
 
         return ret
index 051a21c..63428b0 100644 (file)
@@ -18,31 +18,31 @@ class Constants(object):
     """Constants used in CSIT."""
 
     # OpenVPP testing directory location at topology nodes
     """Constants used in CSIT."""
 
     # OpenVPP testing directory location at topology nodes
-    REMOTE_FW_DIR = '/tmp/openvpp-testing'
+    REMOTE_FW_DIR = "/tmp/openvpp-testing"
 
     # shell scripts location
 
     # shell scripts location
-    RESOURCES_LIB_SH = 'resources/libraries/bash'
+    RESOURCES_LIB_SH = "resources/libraries/bash"
 
     # vat templates location
 
     # vat templates location
-    RESOURCES_TPL_VAT = 'resources/templates/vat'
+    RESOURCES_TPL_VAT = "resources/templates/vat"
 
     # OpenVPP VAT binary name
 
     # OpenVPP VAT binary name
-    VAT_BIN_NAME = 'vpp_api_test'
+    VAT_BIN_NAME = "vpp_api_test"
 
     # QEMU version to install
 
     # QEMU version to install
-    QEMU_INSTALL_VERSION = 'qemu-2.5.0'
+    QEMU_INSTALL_VERSION = "qemu-2.5.0"
 
     # QEMU install directory
 
     # QEMU install directory
-    QEMU_INSTALL_DIR = '/opt/qemu-2.5.0'
+    QEMU_INSTALL_DIR = "/opt/qemu-2.5.0"
 
     # Honeycomb directory location at topology nodes:
 
     # Honeycomb directory location at topology nodes:
-    REMOTE_HC_DIR = '/opt/honeycomb'
+    REMOTE_HC_DIR = "/opt/honeycomb"
 
     # Honeycomb persistence files location
 
     # Honeycomb persistence files location
-    REMOTE_HC_PERSIST = '/var/lib/honeycomb/persist'
+    REMOTE_HC_PERSIST = "/var/lib/honeycomb/persist"
 
     # Honeycomb templates location
 
     # Honeycomb templates location
-    RESOURCES_TPL_HC = 'resources/templates/honeycomb'
+    RESOURCES_TPL_HC = "resources/templates/honeycomb"
 
     # ODL Client Restconf listener port
     ODL_PORT = 8181
 
     # ODL Client Restconf listener port
     ODL_PORT = 8181
index 7964aa9..d22d463 100755 (executable)
@@ -20,38 +20,63 @@ import sys
 # map add domain ip4-pfx <pfx> ip6-pfx ::/0 ip6-src <ip6-src> ea-bits-len 0 psid-offset 6 psid-len 6
 # map add rule index <0> psid <psid> ip6-dst <ip6-dst>
 
 # map add domain ip4-pfx <pfx> ip6-pfx ::/0 ip6-src <ip6-src> ea-bits-len 0 psid-offset 6 psid-len 6
 # map add rule index <0> psid <psid> ip6-dst <ip6-dst>
 
-def_ip4_pfx = '192.0.2.0/24'
-def_ip6_pfx = '2001:db8::/32'
-def_ip6_src = '2001:db8::1'
+def_ip4_pfx = "192.0.2.0/24"
+def_ip6_pfx = "2001:db8::/32"
+def_ip6_src = "2001:db8::1"
 def_psid_offset = 6
 def_psid_len = 6
 def_ea_bits_len = 0
 
 def_psid_offset = 6
 def_psid_len = 6
 def_ea_bits_len = 0
 
-parser = argparse.ArgumentParser(description='MAP VPP configuration generator')
-parser.add_argument('-t', action="store", dest="mapmode")
-parser.add_argument('-f', action="store", dest="format", default="vpp")
-parser.add_argument('--ip4-prefix', action="store", dest="ip4_pfx", default=def_ip4_pfx)
-parser.add_argument('--ip6-prefix', action="store", dest="ip6_pfx", default=def_ip6_pfx)
-parser.add_argument('--ip6-src', action="store", dest="ip6_src", default=def_ip6_src)
-parser.add_argument('--psid-len', action="store", dest="psid_len", default=def_psid_len)
-parser.add_argument('--psid-offset', action="store", dest="psid_offset", default=def_psid_offset)
-parser.add_argument('--ea-bits-len', action="store", dest="ea_bits_len", default=def_ea_bits_len)
+parser = argparse.ArgumentParser(description="MAP VPP configuration generator")
+parser.add_argument("-t", action="store", dest="mapmode")
+parser.add_argument("-f", action="store", dest="format", default="vpp")
+parser.add_argument("--ip4-prefix", action="store", dest="ip4_pfx", default=def_ip4_pfx)
+parser.add_argument("--ip6-prefix", action="store", dest="ip6_pfx", default=def_ip6_pfx)
+parser.add_argument("--ip6-src", action="store", dest="ip6_src", default=def_ip6_src)
+parser.add_argument("--psid-len", action="store", dest="psid_len", default=def_psid_len)
+parser.add_argument(
+    "--psid-offset", action="store", dest="psid_offset", default=def_psid_offset
+)
+parser.add_argument(
+    "--ea-bits-len", action="store", dest="ea_bits_len", default=def_ea_bits_len
+)
 args = parser.parse_args()
 
 #
 # Print domain
 #
 def domain_print(i, ip4_pfx, ip6_pfx, ip6_src, eabits_len, psid_offset, psid_len):
 args = parser.parse_args()
 
 #
 # Print domain
 #
 def domain_print(i, ip4_pfx, ip6_pfx, ip6_src, eabits_len, psid_offset, psid_len):
-    if format == 'vpp':
-        print("map add domain ip4-pfx " + ip4_pfx + " ip6-pfx", ip6_pfx, "ip6-src " + ip6_src +
-              " ea-bits-len", eabits_len, "psid-offset", psid_offset, "psid-len", psid_len)
-    if format == 'confd':
-        print("vpp softwire softwire-instances softwire-instance", i, "br-ipv6 " + ip6_src +
-              " ipv6-prefix " + ip6_pfx + " ipv4-prefix " + ip4_pfx +
-              " ea-bits-len", eabits_len, "psid-offset", psid_offset, "psid-len", psid_len)
-    if format == 'xml':
+    if format == "vpp":
+        print(
+            "map add domain ip4-pfx " + ip4_pfx + " ip6-pfx",
+            ip6_pfx,
+            "ip6-src " + ip6_src + " ea-bits-len",
+            eabits_len,
+            "psid-offset",
+            psid_offset,
+            "psid-len",
+            psid_len,
+        )
+    if format == "confd":
+        print(
+            "vpp softwire softwire-instances softwire-instance",
+            i,
+            "br-ipv6 "
+            + ip6_src
+            + " ipv6-prefix "
+            + ip6_pfx
+            + " ipv4-prefix "
+            + ip4_pfx
+            + " ea-bits-len",
+            eabits_len,
+            "psid-offset",
+            psid_offset,
+            "psid-len",
+            psid_len,
+        )
+    if format == "xml":
         print("<softwire-instance>")
         print("<softwire-instance>")
-        print("<id>", i, "</id>");
+        print("<id>", i, "</id>")
         print("  <br-ipv6>" + ip6_src + "</br-ipv6>")
         print("  <ipv6-prefix>" + ip6_pfx + "</ipv6-prefix>")
         print("  <ipv4-prefix>" + ip4_pfx + "</ipv4-prefix>")
         print("  <br-ipv6>" + ip6_src + "</br-ipv6>")
         print("  <ipv6-prefix>" + ip6_pfx + "</ipv6-prefix>")
         print("  <ipv4-prefix>" + ip4_pfx + "</ipv4-prefix>")
@@ -59,32 +84,54 @@ def domain_print(i, ip4_pfx, ip6_pfx, ip6_src, eabits_len, psid_offset, psid_len
         print("  <psid-len>", psid_len, "</psid-len>")
         print("  <psid-offset>", psid_offset, "</psid-offset>")
 
         print("  <psid-len>", psid_len, "</psid-len>")
         print("  <psid-offset>", psid_offset, "</psid-offset>")
 
+
 def domain_print_end():
 def domain_print_end():
-    if format == 'xml':
+    if format == "xml":
         print("</softwire-instance>")
 
         print("</softwire-instance>")
 
+
 def rule_print(i, psid, dst):
 def rule_print(i, psid, dst):
-    if format == 'vpp':
+    if format == "vpp":
         print("map add rule index", i, "psid", psid, "ip6-dst", dst)
         print("map add rule index", i, "psid", psid, "ip6-dst", dst)
-    if format == 'confd':
+    if format == "confd":
         print("binding", psid, "ipv6-addr", dst)
         print("binding", psid, "ipv6-addr", dst)
-    if format == 'xml':
+    if format == "xml":
         print("  <binding>")
         print("    <psid>", psid, "</psid>")
         print("    <ipv6-addr>", dst, "</ipv6-addr>")
         print("  </binding>")
 
         print("  <binding>")
         print("    <psid>", psid, "</psid>")
         print("    <ipv6-addr>", dst, "</ipv6-addr>")
         print("  </binding>")
 
+
 #
 # Algorithmic mapping Shared IPv4 address
 #
 #
 # Algorithmic mapping Shared IPv4 address
 #
-def algo(ip4_pfx_str, ip6_pfx_str, ip6_src_str, ea_bits_len, psid_offset, psid_len, ip6_src_ecmp = False):
-    domain_print(0, ip4_pfx_str, ip6_pfx_str, ip6_src_str, ea_bits_len, psid_offset, psid_len)
+def algo(
+    ip4_pfx_str,
+    ip6_pfx_str,
+    ip6_src_str,
+    ea_bits_len,
+    psid_offset,
+    psid_len,
+    ip6_src_ecmp=False,
+):
+    domain_print(
+        0, ip4_pfx_str, ip6_pfx_str, ip6_src_str, ea_bits_len, psid_offset, psid_len
+    )
     domain_print_end()
 
     domain_print_end()
 
+
 #
 # 1:1 Full IPv4 address
 #
 #
 # 1:1 Full IPv4 address
 #
-def lw46(ip4_pfx_str, ip6_pfx_str, ip6_src_str, ea_bits_len, psid_offset, psid_len, ip6_src_ecmp = False):
+def lw46(
+    ip4_pfx_str,
+    ip6_pfx_str,
+    ip6_src_str,
+    ea_bits_len,
+    psid_offset,
+    psid_len,
+    ip6_src_ecmp=False,
+):
     ip4_pfx = ipaddress.ip_network(ip4_pfx_str)
     ip6_src = ipaddress.ip_address(ip6_src_str)
     ip6_dst = ipaddress.ip_network(ip6_pfx_str)
     ip4_pfx = ipaddress.ip_network(ip4_pfx_str)
     ip6_src = ipaddress.ip_address(ip6_src_str)
     ip6_dst = ipaddress.ip_network(ip6_pfx_str)
@@ -92,15 +139,26 @@ def lw46(ip4_pfx_str, ip6_pfx_str, ip6_src_str, ea_bits_len, psid_offset, psid_l
     mod = ip4_pfx.num_addresses / 1024
 
     for i in range(ip4_pfx.num_addresses):
     mod = ip4_pfx.num_addresses / 1024
 
     for i in range(ip4_pfx.num_addresses):
-        domain_print(i, str(ip4_pfx[i]) + "/32", str(ip6_dst[i]) + "/128", str(ip6_src), 0, 0, 0)
+        domain_print(
+            i, str(ip4_pfx[i]) + "/32", str(ip6_dst[i]) + "/128", str(ip6_src), 0, 0, 0
+        )
         domain_print_end()
         if ip6_src_ecmp and not i % mod:
             ip6_src = ip6_src + 1
 
         domain_print_end()
         if ip6_src_ecmp and not i % mod:
             ip6_src = ip6_src + 1
 
+
 #
 # 1:1 Shared IPv4 address, shared BR (16) VPP CLI
 #
 #
 # 1:1 Shared IPv4 address, shared BR (16) VPP CLI
 #
-def lw46_shared(ip4_pfx_str, ip6_pfx_str, ip6_src_str, ea_bits_len, psid_offset, psid_len, ip6_src_ecmp = False):
+def lw46_shared(
+    ip4_pfx_str,
+    ip6_pfx_str,
+    ip6_src_str,
+    ea_bits_len,
+    psid_offset,
+    psid_len,
+    ip6_src_ecmp=False,
+):
     ip4_pfx = ipaddress.ip_network(ip4_pfx_str)
     ip6_src = ipaddress.ip_address(ip6_src_str)
     ip6_dst = ipaddress.ip_network(ip6_pfx_str)
     ip4_pfx = ipaddress.ip_network(ip4_pfx_str)
     ip6_src = ipaddress.ip_address(ip6_src_str)
     ip6_dst = ipaddress.ip_network(ip6_pfx_str)
@@ -109,7 +167,7 @@ def lw46_shared(ip4_pfx_str, ip6_pfx_str, ip6_src_str, ea_bits_len, psid_offset,
     for i in range(ip4_pfx.num_addresses):
         domain_print(i, str(ip4_pfx[i]) + "/32", "::/0", str(ip6_src), 0, 0, psid_len)
         for psid in range(0x1 << int(psid_len)):
     for i in range(ip4_pfx.num_addresses):
         domain_print(i, str(ip4_pfx[i]) + "/32", "::/0", str(ip6_src), 0, 0, psid_len)
         for psid in range(0x1 << int(psid_len)):
-            rule_print(i, psid, str(ip6_dst[(i * (0x1<<int(psid_len))) + psid]))
+            rule_print(i, psid, str(ip6_dst[(i * (0x1 << int(psid_len))) + psid]))
         domain_print_end()
         if ip6_src_ecmp and not i % mod:
             ip6_src = ip6_src + 1
         domain_print_end()
         if ip6_src_ecmp and not i % mod:
             ip6_src = ip6_src + 1
@@ -118,7 +176,15 @@ def lw46_shared(ip4_pfx_str, ip6_pfx_str, ip6_src_str, ea_bits_len, psid_offset,
 #
 # 1:1 Shared IPv4 address, shared BR
 #
 #
 # 1:1 Shared IPv4 address, shared BR
 #
-def lw46_shared_b(ip4_pfx_str, ip6_pfx_str, ip6_src_str, ea_bits_len, psid_offset, psid_len, ip6_src_ecmp = False):
+def lw46_shared_b(
+    ip4_pfx_str,
+    ip6_pfx_str,
+    ip6_src_str,
+    ea_bits_len,
+    psid_offset,
+    psid_len,
+    ip6_src_ecmp=False,
+):
     ip4_pfx = ipaddress.ip_network(ip4_pfx_str)
     ip6_src = ipaddress.ip_address(ip6_src_str)
     ip6_dst = list(ipaddress.ip_network(ip6_pfx_str).subnets(new_prefix=56))
     ip4_pfx = ipaddress.ip_network(ip4_pfx_str)
     ip6_src = ipaddress.ip_address(ip6_src_str)
     ip6_dst = list(ipaddress.ip_network(ip6_pfx_str).subnets(new_prefix=56))
@@ -127,15 +193,16 @@ def lw46_shared_b(ip4_pfx_str, ip6_pfx_str, ip6_src_str, ea_bits_len, psid_offse
     for i in range(ip4_pfx.num_addresses):
         domain_print(i, str(ip4_pfx[i]) + "/32", "::/0", str(ip6_src), 0, 0, psid_len)
         for psid in range(0x1 << psid_len):
     for i in range(ip4_pfx.num_addresses):
         domain_print(i, str(ip4_pfx[i]) + "/32", "::/0", str(ip6_src), 0, 0, psid_len)
         for psid in range(0x1 << psid_len):
-            enduserprefix = list(ip6_dst.pop(0).subnets(new_prefix=64))[255-1]
-            rule_print(i, psid, enduserprefix[(i * (0x1<<psid_len)) + psid])
+            enduserprefix = list(ip6_dst.pop(0).subnets(new_prefix=64))[255 - 1]
+            rule_print(i, psid, enduserprefix[(i * (0x1 << psid_len)) + psid])
         domain_print_end()
         if ip6_src_ecmp and not i % mod:
             ip6_src = ip6_src + 1
 
 
 def xml_header_print():
         domain_print_end()
         if ip6_src_ecmp and not i % mod:
             ip6_src = ip6_src + 1
 
 
 def xml_header_print():
-    print('''
+    print(
+        """
 <?xml version="1.0" encoding="UTF-8"?>
     <hello xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
     <capabilities>
 <?xml version="1.0" encoding="UTF-8"?>
     <hello xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
     <capabilities>
@@ -156,10 +223,13 @@ def xml_header_print():
  <softwire>
  <softwire-instances>
 
  <softwire>
  <softwire-instances>
 
-    ''')
+    """
+    )
+
 
 def xml_footer_print():
 
 def xml_footer_print():
-    print('''
+    print(
+        """
 </softwire-instances>
 </softwire>
 </vpp>
 </softwire-instances>
 </softwire>
 </vpp>
@@ -175,12 +245,20 @@ def xml_footer_print():
     </rpc>
 
 ]]>]]>
     </rpc>
 
 ]]>]]>
-    ''')
+    """
+    )
 
 
 format = args.format
 
 
 format = args.format
-if format == 'xml':
+if format == "xml":
     xml_header_print()
     xml_header_print()
-globals()[args.mapmode](args.ip4_pfx, args.ip6_pfx, args.ip6_src, args.ea_bits_len, args.psid_offset, args.psid_len)
-if format == 'xml':
+globals()[args.mapmode](
+    args.ip4_pfx,
+    args.ip6_pfx,
+    args.ip6_src,
+    args.ea_bits_len,
+    args.psid_offset,
+    args.psid_len,
+)
+if format == "xml":
     xml_footer_print()
     xml_footer_print()
index 7a48964..02df640 100755 (executable)
@@ -1,10 +1,10 @@
 #!/usr/bin/env python3
 
 #!/usr/bin/env python3
 
-import time,argparse,sys,cmd, unittest
+import time, argparse, sys, cmd, unittest
 from ipaddress import *
 
 from ipaddress import *
 
-parser = argparse.ArgumentParser(description='VPP MAP test')
-parser.add_argument('-i', nargs='*', action="store", dest="inputdir")
+parser = argparse.ArgumentParser(description="VPP MAP test")
+parser.add_argument("-i", nargs="*", action="store", dest="inputdir")
 args = parser.parse_args()
 
 for dir in args.inputdir:
 args = parser.parse_args()
 
 for dir in args.inputdir:
@@ -14,115 +14,150 @@ from vpp_papi import *
 #
 # 1:1 Shared IPv4 address, shared BR (16) VPP CLI
 #
 #
 # 1:1 Shared IPv4 address, shared BR (16) VPP CLI
 #
-def lw46_shared(ip4_pfx_str, ip6_pfx_str, ip6_src_str, ea_bits_len, psid_offset, psid_len, ip6_src_ecmp = False):
+def lw46_shared(
+    ip4_pfx_str,
+    ip6_pfx_str,
+    ip6_src_str,
+    ea_bits_len,
+    psid_offset,
+    psid_len,
+    ip6_src_ecmp=False,
+):
     ip4_pfx = ip_network(ip4_pfx_str)
     ip6_src = ip_address(ip6_src_str)
     ip6_dst = ip_network(ip6_pfx_str)
     ip4_pfx = ip_network(ip4_pfx_str)
     ip6_src = ip_address(ip6_src_str)
     ip6_dst = ip_network(ip6_pfx_str)
-    ip6_nul = IPv6Address(u'0::0')
+    ip6_nul = IPv6Address("0::0")
     mod = ip4_pfx.num_addresses / 1024
 
     for i in range(ip4_pfx.num_addresses):
         a = time.clock()
     mod = ip4_pfx.num_addresses / 1024
 
     for i in range(ip4_pfx.num_addresses):
         a = time.clock()
-        t = map_add_domain(0, ip6_nul.packed, ip4_pfx[i].packed, ip6_src.packed, 0, 32, 128, ea_bits_len, psid_offset, psid_len, 0, 0)
-        #print "Return from map_add_domain", t
+        t = map_add_domain(
+            0,
+            ip6_nul.packed,
+            ip4_pfx[i].packed,
+            ip6_src.packed,
+            0,
+            32,
+            128,
+            ea_bits_len,
+            psid_offset,
+            psid_len,
+            0,
+            0,
+        )
+        # print "Return from map_add_domain", t
         if t == None:
         if t == None:
-            print "map_add_domain failed"
+            print("map_add_domain failed")
             continue
         if t.retval != 0:
             continue
         if t.retval != 0:
-            print "map_add_domain failed", t
+            print(f"map_add_domain failed, {t}")
             continue
         for psid in range(0x1 << int(psid_len)):
             continue
         for psid in range(0x1 << int(psid_len)):
-            r = map_add_del_rule(0, t.index, 1, (ip6_dst[(i * (0x1<<int(psid_len))) + psid]).packed, psid)
-            #print "Return from map_add_del_rule", r
+            r = map_add_del_rule(
+                0,
+                t.index,
+                1,
+                (ip6_dst[(i * (0x1 << int(psid_len))) + psid]).packed,
+                psid,
+            )
+            # print "Return from map_add_del_rule", r
 
         if ip6_src_ecmp and not i % mod:
             ip6_src = ip6_src + 1
 
 
         if ip6_src_ecmp and not i % mod:
             ip6_src = ip6_src + 1
 
-        print "Running time:", time.clock() - a
+        print(f"Running time: {time.clock() - a}")
+
 
 class TestMAP(unittest.TestCase):
 
 class TestMAP(unittest.TestCase):
-    '''
+    """
     def test_delete_all(self):
         t = map_domain_dump(0)
         self.assertNotEqual(t, None)
     def test_delete_all(self):
         t = map_domain_dump(0)
         self.assertNotEqual(t, None)
-        print "Number of domains configured: ", len(t)
+        print(f"Number of domains configured: {len(t)}")
         for d in t:
             ts = map_del_domain(0, d.domainindex)
             self.assertNotEqual(ts, None)
         t = map_domain_dump(0)
         self.assertNotEqual(t, None)
         for d in t:
             ts = map_del_domain(0, d.domainindex)
             self.assertNotEqual(ts, None)
         t = map_domain_dump(0)
         self.assertNotEqual(t, None)
-        print "Number of domains configured: ", len(t)
-        self.assertEqual(len(t), 0)
+        print(f"Number of domains configured: {len(t)}")
+        self.assertEqual(len(t), 0)/
 
 
-    '''
+    """
 
     def test_a_million_rules(self):
 
     def test_a_million_rules(self):
-        ip4_pfx = u'192.0.2.0/24'
-        ip6_pfx = u'2001:db8::/32'
-        ip6_src = u'2001:db8::1'
+        ip4_pfx = "192.0.2.0/24"
+        ip6_pfx = "2001:db8::/32"
+        ip6_src = "2001:db8::1"
         psid_offset = 6
         psid_len = 6
         ea_bits_len = 0
         lw46_shared(ip4_pfx, ip6_pfx, ip6_src, ea_bits_len, psid_offset, psid_len)
 
         psid_offset = 6
         psid_len = 6
         ea_bits_len = 0
         lw46_shared(ip4_pfx, ip6_pfx, ip6_src, ea_bits_len, psid_offset, psid_len)
 
+
 #
 # RX thread, that should sit on blocking vpe_api_read()
 
 #
 # RX thread, that should sit on blocking vpe_api_read()
 
-# 
+#
 
 
 #
 #
 #
 import threading
 
 
 #
 #
 #
 import threading
-class RXThread (threading.Thread):
+
+
+class RXThread(threading.Thread):
     def __init__(self):
         threading.Thread.__init__(self)
 
     def run(self):
     def __init__(self):
         threading.Thread.__init__(self)
 
     def run(self):
-        print "Starting "
+        print("Starting ")
         i = 0
         while True:
             msg = vpe_api_read()
             if msg:
         i = 0
         while True:
             msg = vpe_api_read()
             if msg:
-                #print msg
-                id = unpack('>H', msg[0:2])
-                size = unpack('>H', msg[2:4])
-                print "Received", id, "of size", size
+                # print msg
+                id = unpack(">H", msg[0:2])
+                size = unpack(">H", msg[2:4])
+                print(f"Received {id} of size {size}")
                 i += 1
                 i += 1
-                #del msg
+                # del msg
                 continue
 
                 continue
 
-            #time.sleep(0.001)
+            # time.sleep(0.001)
         return
 
         return
 
+
 # Create RX thread
 rxthread = RXThread()
 rxthread.setDaemon(True)
 # Create RX thread
 rxthread = RXThread()
 rxthread.setDaemon(True)
-        
-print "Connect", connect_to_vpe("client124")
+
+print(f"Connect {connect_to_vpe('client124')}")
 import timeit
 import timeit
+
 rxthread.start()
 rxthread.start()
-print "After thread started"
+print("After thread started")
 
 
-#pneum_kill_thread()
-print "After thread killed"
+# pneum_kill_thread()
+print("After thread killed")
 
 
-#t = show_version(0)
-#print "Result from show version", t
+# t = show_version(0)
+# print "Result from show version", t
 
 
-print timeit.timeit('t = show_version(0)', number=1000, setup="from __main__ import show_version")
+print(
+    f"{timeit.timeit('t = show_version(0)', number=1000, setup='from __main__ import show_version')}"
+)
 time.sleep(10)
 time.sleep(10)
-#print timeit.timeit('control_ping(0)', number=10, setup="from __main__ import control_ping")
+# print timeit.timeit('control_ping(0)', number=10, setup="from __main__ import control_ping")
 
 
 disconnect_from_vpe()
 sys.exit()
 
 
 
 
 disconnect_from_vpe()
 sys.exit()
 
 
-print t.program, t.version,t.builddate,t.builddirectory
+print(f"{t.program} {t.version}{t.builddate}{t.builddirectory}")
 
 
-'''
+"""
 
 t = map_domain_dump(0)
 if not t:
 
 t = map_domain_dump(0)
 if not t:
@@ -131,11 +166,9 @@ if not t:
 for d in t:
     print("IP6 prefix:",str(IPv6Address(d.ip6prefix)))
     print( "IP4 prefix:",str(IPv4Address(d.ip4prefix)))
 for d in t:
     print("IP6 prefix:",str(IPv6Address(d.ip6prefix)))
     print( "IP4 prefix:",str(IPv4Address(d.ip4prefix)))
-'''
+"""
 
 suite = unittest.TestLoader().loadTestsFromTestCase(TestMAP)
 unittest.TextTestRunner(verbosity=2).run(suite)
 
 disconnect_from_vpe()
 
 suite = unittest.TestLoader().loadTestsFromTestCase(TestMAP)
 unittest.TextTestRunner(verbosity=2).run(suite)
 
 disconnect_from_vpe()
-
-
index e43b8e1..7e74f14 100755 (executable)
@@ -21,87 +21,142 @@ import sys
 # map add domain ip4-pfx <pfx> ip6-pfx ::/0 ip6-src <ip6-src> ea-bits-len 0 psid-offset 6 psid-len 6
 # map add rule index <0> psid <psid> ip6-dst <ip6-dst>
 
 # map add domain ip4-pfx <pfx> ip6-pfx ::/0 ip6-src <ip6-src> ea-bits-len 0 psid-offset 6 psid-len 6
 # map add rule index <0> psid <psid> ip6-dst <ip6-dst>
 
-parser = argparse.ArgumentParser(description='MAP VPP configuration generator')
-parser.add_argument('-t', action="store", dest="mapmode")
+parser = argparse.ArgumentParser(description="MAP VPP configuration generator")
+parser.add_argument("-t", action="store", dest="mapmode")
 args = parser.parse_args()
 
 #
 # 1:1 Shared IPv4 address, shared BR
 #
 def shared11br():
 args = parser.parse_args()
 
 #
 # 1:1 Shared IPv4 address, shared BR
 #
 def shared11br():
-    ip4_pfx = ipaddress.ip_network('20.0.0.0/16')
-    ip6_dst = ipaddress.ip_network('bbbb::/32')
+    ip4_pfx = ipaddress.ip_network("20.0.0.0/16")
+    ip6_dst = ipaddress.ip_network("bbbb::/32")
     psid_len = 6
     for i in range(ip4_pfx.num_addresses):
     psid_len = 6
     for i in range(ip4_pfx.num_addresses):
-        print("map add domain ip4-pfx " + str(ip4_pfx[i]) +  "/32 ip6-pfx ::/0 ip6-shared-src cccc:bbbb::1",
-              "ea-bits-len 0 psid-offset 6 psid-len", psid_len)
+        print(
+            "map add domain ip4-pfx "
+            + str(ip4_pfx[i])
+            + "/32 ip6-pfx ::/0 ip6-shared-src cccc:bbbb::1",
+            "ea-bits-len 0 psid-offset 6 psid-len",
+            psid_len,
+        )
         for psid in range(0x1 << psid_len):
         for psid in range(0x1 << psid_len):
-            print("map add rule index", i, "psid", psid, "ip6-dst", ip6_dst[(i * (0x1<<psid_len)) + psid])
+            print(
+                "map add rule index",
+                i,
+                "psid",
+                psid,
+                "ip6-dst",
+                ip6_dst[(i * (0x1 << psid_len)) + psid],
+            )
 
 
 #
 # 1:1 Shared IPv4 address
 #
 def shared11():
 
 
 #
 # 1:1 Shared IPv4 address
 #
 def shared11():
-    ip4_pfx = ipaddress.ip_network('20.0.0.0/16')
-    ip6_src = ipaddress.ip_network('cccc:bbbb::/64')
-    ip6_dst = ipaddress.ip_network('bbbb::/32')
+    ip4_pfx = ipaddress.ip_network("20.0.0.0/16")
+    ip6_src = ipaddress.ip_network("cccc:bbbb::/64")
+    ip6_dst = ipaddress.ip_network("bbbb::/32")
     psid_len = 6
     for i in range(ip4_pfx.num_addresses):
     psid_len = 6
     for i in range(ip4_pfx.num_addresses):
-        print("map add domain ip4-pfx " + str(ip4_pfx[i]) +  "/32 ip6-pfx ::/0 ip6-src", ip6_src[i],
-              "ea-bits-len 0 psid-offset 6 psid-len", psid_len)
+        print(
+            "map add domain ip4-pfx " + str(ip4_pfx[i]) + "/32 ip6-pfx ::/0 ip6-src",
+            ip6_src[i],
+            "ea-bits-len 0 psid-offset 6 psid-len",
+            psid_len,
+        )
         for psid in range(0x1 << psid_len):
         for psid in range(0x1 << psid_len):
-            print("map add rule index", i, "psid", psid, "ip6-dst", ip6_dst[(i * (0x1<<psid_len)) + psid])
+            print(
+                "map add rule index",
+                i,
+                "psid",
+                psid,
+                "ip6-dst",
+                ip6_dst[(i * (0x1 << psid_len)) + psid],
+            )
+
 
 #
 # 1:1 Shared IPv4 address small
 #
 def smallshared11():
 
 #
 # 1:1 Shared IPv4 address small
 #
 def smallshared11():
-    ip4_pfx = ipaddress.ip_network('20.0.0.0/24')
-    ip6_src = ipaddress.ip_network('cccc:bbbb::/64')
-    ip6_dst = ipaddress.ip_network('bbbb::/32')
+    ip4_pfx = ipaddress.ip_network("20.0.0.0/24")
+    ip6_src = ipaddress.ip_network("cccc:bbbb::/64")
+    ip6_dst = ipaddress.ip_network("bbbb::/32")
     psid_len = 6
     for i in range(ip4_pfx.num_addresses):
     psid_len = 6
     for i in range(ip4_pfx.num_addresses):
-        print("map add domain ip4-pfx " + str(ip4_pfx[i]) +  "/32 ip6-pfx ::/0 ip6-src", ip6_src[i],
-              "ea-bits-len 0 psid-offset 6 psid-len", psid_len)
+        print(
+            "map add domain ip4-pfx " + str(ip4_pfx[i]) + "/32 ip6-pfx ::/0 ip6-src",
+            ip6_src[i],
+            "ea-bits-len 0 psid-offset 6 psid-len",
+            psid_len,
+        )
         for psid in range(0x1 << psid_len):
         for psid in range(0x1 << psid_len):
-            print("map add rule index", i, "psid", psid, "ip6-dst", ip6_dst[(i * (0x1<<psid_len)) + psid])
+            print(
+                "map add rule index",
+                i,
+                "psid",
+                psid,
+                "ip6-dst",
+                ip6_dst[(i * (0x1 << psid_len)) + psid],
+            )
+
 
 #
 # 1:1 Full IPv4 address
 #
 def full11():
 
 #
 # 1:1 Full IPv4 address
 #
 def full11():
-    ip4_pfx = ipaddress.ip_network('20.0.0.0/16')
-    ip6_src = ipaddress.ip_network('cccc:bbbb::/64')
-    ip6_dst = ipaddress.ip_network('bbbb::/32')
+    ip4_pfx = ipaddress.ip_network("20.0.0.0/16")
+    ip6_src = ipaddress.ip_network("cccc:bbbb::/64")
+    ip6_dst = ipaddress.ip_network("bbbb::/32")
     psid_len = 0
     for i in range(ip4_pfx.num_addresses):
     psid_len = 0
     for i in range(ip4_pfx.num_addresses):
-        print("map add domain ip4-pfx " + str(ip4_pfx[i]) +  "/32 ip6-pfx " + str(ip6_dst[i]) + "/128 ip6-src", ip6_src[i],
-              "ea-bits-len 0 psid-offset 0 psid-len 0")
+        print(
+            "map add domain ip4-pfx "
+            + str(ip4_pfx[i])
+            + "/32 ip6-pfx "
+            + str(ip6_dst[i])
+            + "/128 ip6-src",
+            ip6_src[i],
+            "ea-bits-len 0 psid-offset 0 psid-len 0",
+        )
+
+
 def full11br():
 def full11br():
-    ip4_pfx = ipaddress.ip_network('20.0.0.0/16')
-    ip6_dst = ipaddress.ip_network('bbbb::/32')
+    ip4_pfx = ipaddress.ip_network("20.0.0.0/16")
+    ip6_dst = ipaddress.ip_network("bbbb::/32")
     psid_len = 0
     for i in range(ip4_pfx.num_addresses):
     psid_len = 0
     for i in range(ip4_pfx.num_addresses):
-        print("map add domain ip4-pfx " + str(ip4_pfx[i]) +  "/32 ip6-pfx " + str(ip6_dst[i]) + "/128 ip6-shared-src cccc:bbbb::1",
-              "ea-bits-len 0 psid-offset 0 psid-len 0")
+        print(
+            "map add domain ip4-pfx "
+            + str(ip4_pfx[i])
+            + "/32 ip6-pfx "
+            + str(ip6_dst[i])
+            + "/128 ip6-shared-src cccc:bbbb::1",
+            "ea-bits-len 0 psid-offset 0 psid-len 0",
+        )
+
 
 #
 # Algorithmic mapping Shared IPv4 address
 #
 def algo():
 
 #
 # Algorithmic mapping Shared IPv4 address
 #
 def algo():
-    print("map add domain ip4-pfx 20.0.0.0/24 ip6-pfx bbbb::/32 ip6-src cccc:bbbb::1 ea-bits-len 16 psid-offset 6 psid-len 8")
-    print("map add domain ip4-pfx 20.0.1.0/24 ip6-pfx bbbb:1::/32 ip6-src cccc:bbbb::2 ea-bits-len 8 psid-offset 0 psid-len 0")
+    print(
+        "map add domain ip4-pfx 20.0.0.0/24 ip6-pfx bbbb::/32 ip6-src cccc:bbbb::1 ea-bits-len 16 psid-offset 6 psid-len 8"
+    )
+    print(
+        "map add domain ip4-pfx 20.0.1.0/24 ip6-pfx bbbb:1::/32 ip6-src cccc:bbbb::2 ea-bits-len 8 psid-offset 0 psid-len 0"
+    )
+
 
 #
 # IP4 forwarding
 #
 def ip4():
 
 #
 # IP4 forwarding
 #
 def ip4():
-    ip4_pfx = ipaddress.ip_network('20.0.0.0/16')
+    ip4_pfx = ipaddress.ip_network("20.0.0.0/16")
     for i in range(ip4_pfx.num_addresses):
     for i in range(ip4_pfx.num_addresses):
-        print("ip route add " + str(ip4_pfx[i]) +  "/32 via 172.16.0.2")
+        print("ip route add " + str(ip4_pfx[i]) + "/32 via 172.16.0.2")
 
 
 globals()[args.mapmode]()
 
 
 globals()[args.mapmode]()
-
-
index c85a459..4e8dc24 100644 (file)
@@ -1,35 +1,39 @@
 from trex_stl_lib.api import *
 
 from trex_stl_lib.api import *
 
-class STLS1:
 
 
-    def create_stream (self):
-        base_pkt = Ether()/IP(dst="2.2.0.1")/UDP(dport=12)
+class STLS1:
+    def create_stream(self):
+        base_pkt = Ether() / IP(dst="2.2.0.1") / UDP(dport=12)
 
         pad = Padding()
         if len(base_pkt) < 64:
             pad_len = 64 - len(base_pkt)
 
         pad = Padding()
         if len(base_pkt) < 64:
             pad_len = 64 - len(base_pkt)
-            pad.load = '\x00' * pad_len
+            pad.load = "\x00" * pad_len
 
         vm = STLVM()
 
 
         vm = STLVM()
 
-        vm.tuple_var(name="tuple", ip_min="10.0.0.3", ip_max="10.0.3.234", port_min=1025, port_max=1124, limit_flows = 100000)
+        vm.tuple_var(
+            name="tuple",
+            ip_min="10.0.0.3",
+            ip_max="10.0.3.234",
+            port_min=1025,
+            port_max=1124,
+            limit_flows=100000,
+        )
 
         vm.write(fv_name="tuple.ip", pkt_offset="IP.src")
         vm.fix_chksum()
 
         vm.write(fv_name="tuple.port", pkt_offset="UDP.sport")
 
 
         vm.write(fv_name="tuple.ip", pkt_offset="IP.src")
         vm.fix_chksum()
 
         vm.write(fv_name="tuple.port", pkt_offset="UDP.sport")
 
-        pkt = STLPktBuilder(pkt=base_pkt/pad, vm=vm)
+        pkt = STLPktBuilder(pkt=base_pkt / pad, vm=vm)
 
         return STLStream(packet=pkt, mode=STLTXCont())
 
 
         return STLStream(packet=pkt, mode=STLTXCont())
 
-    def get_streams (self, direction = 0, **kwargs):
+    def get_streams(self, direction=0, **kwargs):
         return [self.create_stream()]
 
 
 # dynamic load - used for trex console or simulator
 def register():
     return STLS1()
         return [self.create_stream()]
 
 
 # dynamic load - used for trex console or simulator
 def register():
     return STLS1()
-
-
-
index 6ce62a0..96a18ec 100644 (file)
@@ -1,35 +1,39 @@
 from trex_stl_lib.api import *
 
 from trex_stl_lib.api import *
 
-class STLS1:
 
 
-    def create_stream (self):
-        base_pkt = Ether()/IP(dst="2.2.0.1")/UDP(dport=12)
+class STLS1:
+    def create_stream(self):
+        base_pkt = Ether() / IP(dst="2.2.0.1") / UDP(dport=12)
 
         pad = Padding()
         if len(base_pkt) < 64:
             pad_len = 64 - len(base_pkt)
 
         pad = Padding()
         if len(base_pkt) < 64:
             pad_len = 64 - len(base_pkt)
-            pad.load = '\x00' * pad_len
+            pad.load = "\x00" * pad_len
 
         vm = STLVM()
 
 
         vm = STLVM()
 
-        vm.tuple_var(name="tuple", ip_min="10.0.0.3", ip_max="10.1.134.162", port_min=1025, port_max=1124, limit_flows=10000000)
+        vm.tuple_var(
+            name="tuple",
+            ip_min="10.0.0.3",
+            ip_max="10.1.134.162",
+            port_min=1025,
+            port_max=1124,
+            limit_flows=10000000,
+        )
 
         vm.write(fv_name="tuple.ip", pkt_offset="IP.src")
         vm.fix_chksum()
 
         vm.write(fv_name="tuple.port", pkt_offset="UDP.sport")
 
 
         vm.write(fv_name="tuple.ip", pkt_offset="IP.src")
         vm.fix_chksum()
 
         vm.write(fv_name="tuple.port", pkt_offset="UDP.sport")
 
-        pkt = STLPktBuilder(pkt=base_pkt/pad, vm=vm)
+        pkt = STLPktBuilder(pkt=base_pkt / pad, vm=vm)
 
         return STLStream(packet=pkt, mode=STLTXCont())
 
 
         return STLStream(packet=pkt, mode=STLTXCont())
 
-    def get_streams (self, direction = 0, **kwargs):
+    def get_streams(self, direction=0, **kwargs):
         return [self.create_stream()]
 
 
 # dynamic load - used for trex console or simulator
 def register():
     return STLS1()
         return [self.create_stream()]
 
 
 # dynamic load - used for trex console or simulator
 def register():
     return STLS1()
-
-
-
index 33c7196..c210d5e 100644 (file)
@@ -1,35 +1,39 @@
 from trex_stl_lib.api import *
 
 from trex_stl_lib.api import *
 
-class STLS1:
 
 
-    def create_stream (self):
-        base_pkt = Ether()/IP(dst="2.2.0.1")/UDP(dport=12)
+class STLS1:
+    def create_stream(self):
+        base_pkt = Ether() / IP(dst="2.2.0.1") / UDP(dport=12)
 
         pad = Padding()
         if len(base_pkt) < 64:
             pad_len = 64 - len(base_pkt)
 
         pad = Padding()
         if len(base_pkt) < 64:
             pad_len = 64 - len(base_pkt)
-            pad.load = '\x00' * pad_len
+            pad.load = "\x00" * pad_len
 
         vm = STLVM()
 
 
         vm = STLVM()
 
-        vm.tuple_var(name="tuple", ip_min="10.0.0.3", ip_max="10.0.0.102", port_min=1025, port_max=1124, limit_flows = 10000)
+        vm.tuple_var(
+            name="tuple",
+            ip_min="10.0.0.3",
+            ip_max="10.0.0.102",
+            port_min=1025,
+            port_max=1124,
+            limit_flows=10000,
+        )
 
         vm.write(fv_name="tuple.ip", pkt_offset="IP.src")
         vm.fix_chksum()
 
         vm.write(fv_name="tuple.port", pkt_offset="UDP.sport")
 
 
         vm.write(fv_name="tuple.ip", pkt_offset="IP.src")
         vm.fix_chksum()
 
         vm.write(fv_name="tuple.port", pkt_offset="UDP.sport")
 
-        pkt = STLPktBuilder(pkt=base_pkt/pad, vm=vm)
+        pkt = STLPktBuilder(pkt=base_pkt / pad, vm=vm)
 
         return STLStream(packet=pkt, mode=STLTXCont())
 
 
         return STLStream(packet=pkt, mode=STLTXCont())
 
-    def get_streams (self, direction = 0, **kwargs):
+    def get_streams(self, direction=0, **kwargs):
         return [self.create_stream()]
 
 
 # dynamic load - used for trex console or simulator
 def register():
     return STLS1()
         return [self.create_stream()]
 
 
 # dynamic load - used for trex console or simulator
 def register():
     return STLS1()
-
-
-
index 73a91a7..7271cf7 100644 (file)
@@ -1,35 +1,39 @@
 from trex_stl_lib.api import *
 
 from trex_stl_lib.api import *
 
-class STLS1:
 
 
-    def create_stream (self):
-        base_pkt = Ether()/IP(dst="2.2.0.1")/UDP(dport=12)
+class STLS1:
+    def create_stream(self):
+        base_pkt = Ether() / IP(dst="2.2.0.1") / UDP(dport=12)
 
         pad = Padding()
         if len(base_pkt) < 64:
             pad_len = 64 - len(base_pkt)
 
         pad = Padding()
         if len(base_pkt) < 64:
             pad_len = 64 - len(base_pkt)
-            pad.load = '\x00' * pad_len
+            pad.load = "\x00" * pad_len
 
         vm = STLVM()
 
 
         vm = STLVM()
 
-        vm.tuple_var(name="tuple", ip_min="10.0.0.3", ip_max="10.0.39.18", port_min=1025, port_max=1124, limit_flows = 1000000)
+        vm.tuple_var(
+            name="tuple",
+            ip_min="10.0.0.3",
+            ip_max="10.0.39.18",
+            port_min=1025,
+            port_max=1124,
+            limit_flows=1000000,
+        )
 
         vm.write(fv_name="tuple.ip", pkt_offset="IP.src")
         vm.fix_chksum()
 
         vm.write(fv_name="tuple.port", pkt_offset="UDP.sport")
 
 
         vm.write(fv_name="tuple.ip", pkt_offset="IP.src")
         vm.fix_chksum()
 
         vm.write(fv_name="tuple.port", pkt_offset="UDP.sport")
 
-        pkt = STLPktBuilder(pkt=base_pkt/pad, vm=vm)
+        pkt = STLPktBuilder(pkt=base_pkt / pad, vm=vm)
 
         return STLStream(packet=pkt, mode=STLTXCont())
 
 
         return STLStream(packet=pkt, mode=STLTXCont())
 
-    def get_streams (self, direction = 0, **kwargs):
+    def get_streams(self, direction=0, **kwargs):
         return [self.create_stream()]
 
 
 # dynamic load - used for trex console or simulator
 def register():
     return STLS1()
         return [self.create_stream()]
 
 
 # dynamic load - used for trex console or simulator
 def register():
     return STLS1()
-
-
-
index 55ab5d4..911f2ce 100644 (file)
@@ -1,35 +1,39 @@
 from trex_stl_lib.api import *
 
 from trex_stl_lib.api import *
 
-class STLS1:
 
 
-    def create_stream (self):
-        base_pkt = Ether()/IP(src="2.2.0.1")/UDP(sport=12)
+class STLS1:
+    def create_stream(self):
+        base_pkt = Ether() / IP(src="2.2.0.1") / UDP(sport=12)
 
         pad = Padding()
         if len(base_pkt) < 64:
             pad_len = 64 - len(base_pkt)
 
         pad = Padding()
         if len(base_pkt) < 64:
             pad_len = 64 - len(base_pkt)
-            pad.load = '\x00' * pad_len
+            pad.load = "\x00" * pad_len
 
         vm = STLVM()
 
 
         vm = STLVM()
 
-        vm.tuple_var(name="tuple", ip_min="173.16.1.3", ip_max="173.16.4.234", port_min=1025, port_max=1124, limit_flows = 100000)
+        vm.tuple_var(
+            name="tuple",
+            ip_min="173.16.1.3",
+            ip_max="173.16.4.234",
+            port_min=1025,
+            port_max=1124,
+            limit_flows=100000,
+        )
 
         vm.write(fv_name="tuple.ip", pkt_offset="IP.dst")
         vm.fix_chksum()
 
         vm.write(fv_name="tuple.port", pkt_offset="UDP.dport")
 
 
         vm.write(fv_name="tuple.ip", pkt_offset="IP.dst")
         vm.fix_chksum()
 
         vm.write(fv_name="tuple.port", pkt_offset="UDP.dport")
 
-        pkt = STLPktBuilder(pkt=base_pkt/pad, vm=vm)
+        pkt = STLPktBuilder(pkt=base_pkt / pad, vm=vm)
 
         return STLStream(packet=pkt, mode=STLTXCont())
 
 
         return STLStream(packet=pkt, mode=STLTXCont())
 
-    def get_streams (self, direction = 0, **kwargs):
+    def get_streams(self, direction=0, **kwargs):
         return [self.create_stream()]
 
 
 # dynamic load - used for trex console or simulator
 def register():
     return STLS1()
         return [self.create_stream()]
 
 
 # dynamic load - used for trex console or simulator
 def register():
     return STLS1()
-
-
-
index 48d3d19..b349364 100644 (file)
@@ -1,35 +1,39 @@
 from trex_stl_lib.api import *
 
 from trex_stl_lib.api import *
 
-class STLS1:
 
 
-    def create_stream (self):
-        base_pkt = Ether()/IP(src="2.2.0.1")/UDP(sport=12)
+class STLS1:
+    def create_stream(self):
+        base_pkt = Ether() / IP(src="2.2.0.1") / UDP(sport=12)
 
         pad = Padding()
         if len(base_pkt) < 64:
             pad_len = 64 - len(base_pkt)
 
         pad = Padding()
         if len(base_pkt) < 64:
             pad_len = 64 - len(base_pkt)
-            pad.load = '\x00' * pad_len
+            pad.load = "\x00" * pad_len
 
         vm = STLVM()
 
 
         vm = STLVM()
 
-        vm.tuple_var(name="tuple", ip_min="173.16.1.3", ip_max="173.17.135.162", port_min=1025, port_max=1124, limit_flows = 10000000)
+        vm.tuple_var(
+            name="tuple",
+            ip_min="173.16.1.3",
+            ip_max="173.17.135.162",
+            port_min=1025,
+            port_max=1124,
+            limit_flows=10000000,
+        )
 
         vm.write(fv_name="tuple.ip", pkt_offset="IP.dst")
         vm.fix_chksum()
 
         vm.write(fv_name="tuple.port", pkt_offset="UDP.dport")
 
 
         vm.write(fv_name="tuple.ip", pkt_offset="IP.dst")
         vm.fix_chksum()
 
         vm.write(fv_name="tuple.port", pkt_offset="UDP.dport")
 
-        pkt = STLPktBuilder(pkt=base_pkt/pad, vm=vm)
+        pkt = STLPktBuilder(pkt=base_pkt / pad, vm=vm)
 
         return STLStream(packet=pkt, mode=STLTXCont())
 
 
         return STLStream(packet=pkt, mode=STLTXCont())
 
-    def get_streams (self, direction = 0, **kwargs):
+    def get_streams(self, direction=0, **kwargs):
         return [self.create_stream()]
 
 
 # dynamic load - used for trex console or simulator
 def register():
     return STLS1()
         return [self.create_stream()]
 
 
 # dynamic load - used for trex console or simulator
 def register():
     return STLS1()
-
-
-
index e961504..abd82ce 100644 (file)
@@ -1,35 +1,39 @@
 from trex_stl_lib.api import *
 
 from trex_stl_lib.api import *
 
-class STLS1:
 
 
-    def create_stream (self):
-        base_pkt = Ether()/IP(src="2.2.0.1")/UDP(sport=12)
+class STLS1:
+    def create_stream(self):
+        base_pkt = Ether() / IP(src="2.2.0.1") / UDP(sport=12)
 
         pad = Padding()
         if len(base_pkt) < 64:
             pad_len = 64 - len(base_pkt)
 
         pad = Padding()
         if len(base_pkt) < 64:
             pad_len = 64 - len(base_pkt)
-            pad.load = '\x00' * pad_len
+            pad.load = "\x00" * pad_len
 
         vm = STLVM()
 
 
         vm = STLVM()
 
-        vm.tuple_var(name="tuple", ip_min="173.16.1.3", ip_max="173.16.1.102", port_min=1025, port_max=1124, limit_flows = 100000)
+        vm.tuple_var(
+            name="tuple",
+            ip_min="173.16.1.3",
+            ip_max="173.16.1.102",
+            port_min=1025,
+            port_max=1124,
+            limit_flows=100000,
+        )
 
         vm.write(fv_name="tuple.ip", pkt_offset="IP.dst")
         vm.fix_chksum()
 
         vm.write(fv_name="tuple.port", pkt_offset="UDP.dport")
 
 
         vm.write(fv_name="tuple.ip", pkt_offset="IP.dst")
         vm.fix_chksum()
 
         vm.write(fv_name="tuple.port", pkt_offset="UDP.dport")
 
-        pkt = STLPktBuilder(pkt=base_pkt/pad, vm=vm)
+        pkt = STLPktBuilder(pkt=base_pkt / pad, vm=vm)
 
         return STLStream(packet=pkt, mode=STLTXCont())
 
 
         return STLStream(packet=pkt, mode=STLTXCont())
 
-    def get_streams (self, direction = 0, **kwargs):
+    def get_streams(self, direction=0, **kwargs):
         return [self.create_stream()]
 
 
 # dynamic load - used for trex console or simulator
 def register():
     return STLS1()
         return [self.create_stream()]
 
 
 # dynamic load - used for trex console or simulator
 def register():
     return STLS1()
-
-
-
index d2cb081..c08ef19 100644 (file)
@@ -1,35 +1,39 @@
 from trex_stl_lib.api import *
 
 from trex_stl_lib.api import *
 
-class STLS1:
 
 
-    def create_stream (self):
-        base_pkt = Ether()/IP(src="2.2.0.1")/UDP(sport=12)
+class STLS1:
+    def create_stream(self):
+        base_pkt = Ether() / IP(src="2.2.0.1") / UDP(sport=12)
 
         pad = Padding()
         if len(base_pkt) < 64:
             pad_len = 64 - len(base_pkt)
 
         pad = Padding()
         if len(base_pkt) < 64:
             pad_len = 64 - len(base_pkt)
-            pad.load = '\x00' * pad_len
+            pad.load = "\x00" * pad_len
 
         vm = STLVM()
 
 
         vm = STLVM()
 
-        vm.tuple_var(name="tuple", ip_min="173.16.1.3", ip_max="173.16.40.18", port_min=1025, port_max=1124, limit_flows = 1000000)
+        vm.tuple_var(
+            name="tuple",
+            ip_min="173.16.1.3",
+            ip_max="173.16.40.18",
+            port_min=1025,
+            port_max=1124,
+            limit_flows=1000000,
+        )
 
         vm.write(fv_name="tuple.ip", pkt_offset="IP.dst")
         vm.fix_chksum()
 
         vm.write(fv_name="tuple.port", pkt_offset="UDP.dport")
 
 
         vm.write(fv_name="tuple.ip", pkt_offset="IP.dst")
         vm.fix_chksum()
 
         vm.write(fv_name="tuple.port", pkt_offset="UDP.dport")
 
-        pkt = STLPktBuilder(pkt=base_pkt/pad, vm=vm)
+        pkt = STLPktBuilder(pkt=base_pkt / pad, vm=vm)
 
         return STLStream(packet=pkt, mode=STLTXCont())
 
 
         return STLStream(packet=pkt, mode=STLTXCont())
 
-    def get_streams (self, direction = 0, **kwargs):
+    def get_streams(self, direction=0, **kwargs):
         return [self.create_stream()]
 
 
 # dynamic load - used for trex console or simulator
 def register():
     return STLS1()
         return [self.create_stream()]
 
 
 # dynamic load - used for trex console or simulator
 def register():
     return STLS1()
-
-
-
index d614d4e..a267a6b 100644 (file)
@@ -1,44 +1,72 @@
 from trex_stl_lib.api import *
 
 from trex_stl_lib.api import *
 
-class STLS1:
 
 
-    def __init__ (self):
-        self.ip_range = {'local': {'start': "10.0.0.3", 'end': "10.1.255.255"},
-                         'external': {'start': "172.16.1.3", 'end': "172.16.1.3"},
-                         'remote': {'start': "2.2.0.1", 'end': "2.2.0.1"}}
-        self.port_range = {'local': {'start': 1025, 'end': 65535},
-                           'remote': {'start': 12, 'end': 12}}
+class STLS1:
+    def __init__(self):
+        self.ip_range = {
+            "local": {"start": "10.0.0.3", "end": "10.1.255.255"},
+            "external": {"start": "172.16.1.3", "end": "172.16.1.3"},
+            "remote": {"start": "2.2.0.1", "end": "2.2.0.1"},
+        }
+        self.port_range = {
+            "local": {"start": 1025, "end": 65535},
+            "remote": {"start": 12, "end": 12},
+        }
 
 
-    def create_stream (self, vm):
-        base_pkt = Ether()/IP()/UDP()
+    def create_stream(self, vm):
+        base_pkt = Ether() / IP() / UDP()
 
         if len(base_pkt) < 64:
             pad_len = 64 - len(base_pkt)
             pad = Padding()
 
         if len(base_pkt) < 64:
             pad_len = 64 - len(base_pkt)
             pad = Padding()
-            pad.load = '\x00' * pad_len
-            base_pkt = base_pkt/pad
-            
+            pad.load = "\x00" * pad_len
+            base_pkt = base_pkt / pad
+
         pkt = STLPktBuilder(pkt=base_pkt, vm=vm)
         return STLStream(packet=pkt, mode=STLTXCont())
 
         pkt = STLPktBuilder(pkt=base_pkt, vm=vm)
         return STLStream(packet=pkt, mode=STLTXCont())
 
-    def get_streams (self, direction = 0, **kwargs):
+    def get_streams(self, direction=0, **kwargs):
         if direction == 0:
         if direction == 0:
-            ip_src = self.ip_range['remote']
-            ip_dst = self.ip_range['external']
-            src_port = self.port_range['remote']
-            dst_port = self.port_range['local']
+            ip_src = self.ip_range["remote"]
+            ip_dst = self.ip_range["external"]
+            src_port = self.port_range["remote"]
+            dst_port = self.port_range["local"]
         else:
         else:
-            ip_src = self.ip_range['local']
-            ip_dst = self.ip_range['remote']
-            src_port = self.port_range['local']
-            dst_port = self.port_range['remote']
+            ip_src = self.ip_range["local"]
+            ip_dst = self.ip_range["remote"]
+            src_port = self.port_range["local"]
+            dst_port = self.port_range["remote"]
 
         vm = STLVM()
 
 
         vm = STLVM()
 
-        vm.var(name="ip_src", min_value=ip_src['start'], max_value=ip_src['end'], size=4, op="random")
-        vm.var(name="ip_dst", min_value=ip_dst['start'], max_value=ip_dst['end'], size=4, op="random")
-        vm.var(name="src_port", min_value=src_port['start'], max_value=src_port['end'], size=2, op="random")
-        vm.var(name="dst_port", min_value=dst_port['start'], max_value=dst_port['end'], size=2, op="random")
+        vm.var(
+            name="ip_src",
+            min_value=ip_src["start"],
+            max_value=ip_src["end"],
+            size=4,
+            op="random",
+        )
+        vm.var(
+            name="ip_dst",
+            min_value=ip_dst["start"],
+            max_value=ip_dst["end"],
+            size=4,
+            op="random",
+        )
+        vm.var(
+            name="src_port",
+            min_value=src_port["start"],
+            max_value=src_port["end"],
+            size=2,
+            op="random",
+        )
+        vm.var(
+            name="dst_port",
+            min_value=dst_port["start"],
+            max_value=dst_port["end"],
+            size=2,
+            op="random",
+        )
 
         vm.write(fv_name="ip_src", pkt_offset="IP.src")
         vm.write(fv_name="ip_dst", pkt_offset="IP.dst")
 
         vm.write(fv_name="ip_src", pkt_offset="IP.src")
         vm.write(fv_name="ip_dst", pkt_offset="IP.dst")
@@ -47,12 +75,9 @@ class STLS1:
 
         vm.fix_chksum()
 
 
         vm.fix_chksum()
 
-        return [ self.create_stream(vm) ]
+        return [self.create_stream(vm)]
 
 
 # dynamic load - used for trex console or simulator
 def register():
     return STLS1()
 
 
 # dynamic load - used for trex console or simulator
 def register():
     return STLS1()
-
-
-
index 9e59bbf..009cf09 100755 (executable)
@@ -2,24 +2,24 @@
 import ipaddress
 import argparse
 
 import ipaddress
 import argparse
 
-parser = argparse.ArgumentParser(description='Generate NAT plugin config.')
-parser.add_argument('static_map_num', metavar='N', type=int, nargs=1,
-                    help='number of static mappings')
+parser = argparse.ArgumentParser(description="Generate NAT plugin config.")
+parser.add_argument(
+    "static_map_num", metavar="N", type=int, nargs=1, help="number of static mappings"
+)
 args = parser.parse_args()
 
 args = parser.parse_args()
 
-file_name = 'nat_static_%s' % (args.static_map_num[0])
-outfile = open(file_name, 'w')
+file_name = "nat_static_%s" % (args.static_map_num[0])
+outfile = open(file_name, "w")
 
 
-outfile.write('set int ip address TenGigabitEthernet4/0/0 172.16.2.1/24\n')
-outfile.write('set int ip address TenGigabitEthernet4/0/1 173.16.1.1/24\n')
-outfile.write('set int state TenGigabitEthernet4/0/0 up\n')
-outfile.write('set int state TenGigabitEthernet4/0/1 up\n')
-outfile.write('ip route add 2.2.0.0/16 via 173.16.1.2 TenGigabitEthernet4/0/1\n')
-outfile.write('ip route add 10.0.0.0/24 via 172.16.2.2 TenGigabitEthernet4/0/0\n')
-outfile.write('set int nat44 in TenGigabitEthernet4/0/0 out TenGigabitEthernet4/0/1\n')
-
-for i in range (0, args.static_map_num[0]):
-    local = str(ipaddress.IPv4Address(u'10.0.0.3') + i)
-    external = str(ipaddress.IPv4Address(u'173.16.1.3') + i)
-    outfile.write('nat44 add static mapping local %s external %s\n' % (local, external))
+outfile.write("set int ip address TenGigabitEthernet4/0/0 172.16.2.1/24\n")
+outfile.write("set int ip address TenGigabitEthernet4/0/1 173.16.1.1/24\n")
+outfile.write("set int state TenGigabitEthernet4/0/0 up\n")
+outfile.write("set int state TenGigabitEthernet4/0/1 up\n")
+outfile.write("ip route add 2.2.0.0/16 via 173.16.1.2 TenGigabitEthernet4/0/1\n")
+outfile.write("ip route add 10.0.0.0/24 via 172.16.2.2 TenGigabitEthernet4/0/0\n")
+outfile.write("set int nat44 in TenGigabitEthernet4/0/0 out TenGigabitEthernet4/0/1\n")
 
 
+for i in range(0, args.static_map_num[0]):
+    local = str(ipaddress.IPv4Address("10.0.0.3") + i)
+    external = str(ipaddress.IPv4Address("173.16.1.3") + i)
+    outfile.write("nat44 add static mapping local %s external %s\n" % (local, external))
index e869d40..fb880fb 100644 (file)
@@ -2,7 +2,6 @@ from trex_stl_lib.api import *
 
 
 class STLS1:
 
 
 class STLS1:
-
     def create_stream(self):
         # base_pkt = Ether()/IP(dst="2.2.0.1")/UDP(dport=12)
 
     def create_stream(self):
         # base_pkt = Ether()/IP(dst="2.2.0.1")/UDP(dport=12)
 
@@ -24,37 +23,46 @@ class STLS1:
 
         # return STLStream(packet=pkt, mode=STLTXCont())
 
 
         # return STLStream(packet=pkt, mode=STLTXCont())
 
-        vm = STLScVmRaw([STLVmTupleGen(ip_min="10.0.0.1", ip_max="10.255.255.254",
-                                       port_min=1025, port_max=65535,
-                                       # name="stuple", limit_flows=10000),
-                                       name="stuple", limit_flows=100),
-                         STLVmTupleGen(ip_min="2.0.0.1", ip_max="2.255.255.254",
-                                       port_min=1025, port_max=65535,
-                                       # name="dtuple", limit_flows=100000000),
-                                       name="dtuple", limit_flows=100),
-
-                         # write ip to packet IP.src
-                         STLVmWrFlowVar(fv_name="stuple.ip",
-                                        pkt_offset="IP.src"),
-                         STLVmWrFlowVar(fv_name="dtuple.ip",
-                                        pkt_offset="IP.dst"),
-                         # fix checksum
-                         STLVmFixIpv4(offset="IP"),
-                         # write udp.port
-                         STLVmWrFlowVar(fv_name="stuple.port",
-                                        pkt_offset="UDP.sport"),
-                         STLVmWrFlowVar(fv_name="dtuple.port",
-                                        pkt_offset="UDP.dport"),
-                         ]
-                        )
-
-        base_pkt = Ether()/IP(src="16.0.0.1", dst="2.0.0.1")/UDP(dport=12, sport=1025)
+        vm = STLScVmRaw(
+            [
+                STLVmTupleGen(
+                    ip_min="10.0.0.1",
+                    ip_max="10.255.255.254",
+                    port_min=1025,
+                    port_max=65535,
+                    # name="stuple", limit_flows=10000),
+                    name="stuple",
+                    limit_flows=100,
+                ),
+                STLVmTupleGen(
+                    ip_min="2.0.0.1",
+                    ip_max="2.255.255.254",
+                    port_min=1025,
+                    port_max=65535,
+                    # name="dtuple", limit_flows=100000000),
+                    name="dtuple",
+                    limit_flows=100,
+                ),
+                # write ip to packet IP.src
+                STLVmWrFlowVar(fv_name="stuple.ip", pkt_offset="IP.src"),
+                STLVmWrFlowVar(fv_name="dtuple.ip", pkt_offset="IP.dst"),
+                # fix checksum
+                STLVmFixIpv4(offset="IP"),
+                # write udp.port
+                STLVmWrFlowVar(fv_name="stuple.port", pkt_offset="UDP.sport"),
+                STLVmWrFlowVar(fv_name="dtuple.port", pkt_offset="UDP.dport"),
+            ]
+        )
+
+        base_pkt = (
+            Ether() / IP(src="16.0.0.1", dst="2.0.0.1") / UDP(dport=12, sport=1025)
+        )
         pad = Padding()
         if len(base_pkt) < 64:
             pad_len = 64 - len(base_pkt)
         pad = Padding()
         if len(base_pkt) < 64:
             pad_len = 64 - len(base_pkt)
-            pad.load = '\x00' * pad_len
+            pad.load = "\x00" * pad_len
 
 
-        pkt = STLPktBuilder(pkt=base_pkt/pad, vm=vm)
+        pkt = STLPktBuilder(pkt=base_pkt / pad, vm=vm)
 
         return STLStream(packet=pkt, mode=STLTXCont())
 
 
         return STLStream(packet=pkt, mode=STLTXCont())
 
index a6351b9..3145a2c 100644 (file)
@@ -2,7 +2,6 @@ from trex_stl_lib.api import *
 
 
 class STLS1:
 
 
 class STLS1:
-
     def create_stream(self):
         # base_pkt = Ether()/IP(dst="2.2.0.1")/UDP(dport=12)
 
     def create_stream(self):
         # base_pkt = Ether()/IP(dst="2.2.0.1")/UDP(dport=12)
 
@@ -24,35 +23,44 @@ class STLS1:
 
         # return STLStream(packet=pkt, mode=STLTXCont())
 
 
         # return STLStream(packet=pkt, mode=STLTXCont())
 
-        vm = STLScVmRaw([STLVmTupleGen(ip_min="10.0.0.1", ip_max="10.255.255.254",
-                                       port_min=1025, port_max=65535,
-                                       name="stuple", limit_flows=10000),
-                         STLVmTupleGen(ip_min="2.0.0.1", ip_max="2.255.255.254",
-                                       port_min=1025, port_max=65535,
-                                       name="dtuple", limit_flows=100000000),
-
-                         # write ip to packet IP.src
-                         STLVmWrFlowVar(fv_name="stuple.ip",
-                                        pkt_offset="IP.src"),
-                         STLVmWrFlowVar(fv_name="dtuple.ip",
-                                        pkt_offset="IP.dst"),
-                         # fix checksum
-                         STLVmFixIpv4(offset="IP"),
-                         # write udp.port
-                         STLVmWrFlowVar(fv_name="stuple.port",
-                                        pkt_offset="UDP.sport"),
-                         STLVmWrFlowVar(fv_name="dtuple.port",
-                                        pkt_offset="UDP.dport"),
-                         ]
-                        )
-
-        base_pkt = Ether()/IP(src="16.0.0.1", dst="2.0.0.1")/UDP(dport=12, sport=1025)
+        vm = STLScVmRaw(
+            [
+                STLVmTupleGen(
+                    ip_min="10.0.0.1",
+                    ip_max="10.255.255.254",
+                    port_min=1025,
+                    port_max=65535,
+                    name="stuple",
+                    limit_flows=10000,
+                ),
+                STLVmTupleGen(
+                    ip_min="2.0.0.1",
+                    ip_max="2.255.255.254",
+                    port_min=1025,
+                    port_max=65535,
+                    name="dtuple",
+                    limit_flows=100000000,
+                ),
+                # write ip to packet IP.src
+                STLVmWrFlowVar(fv_name="stuple.ip", pkt_offset="IP.src"),
+                STLVmWrFlowVar(fv_name="dtuple.ip", pkt_offset="IP.dst"),
+                # fix checksum
+                STLVmFixIpv4(offset="IP"),
+                # write udp.port
+                STLVmWrFlowVar(fv_name="stuple.port", pkt_offset="UDP.sport"),
+                STLVmWrFlowVar(fv_name="dtuple.port", pkt_offset="UDP.dport"),
+            ]
+        )
+
+        base_pkt = (
+            Ether() / IP(src="16.0.0.1", dst="2.0.0.1") / UDP(dport=12, sport=1025)
+        )
         pad = Padding()
         if len(base_pkt) < 64:
             pad_len = 64 - len(base_pkt)
         pad = Padding()
         if len(base_pkt) < 64:
             pad_len = 64 - len(base_pkt)
-            pad.load = '\x00' * pad_len
+            pad.load = "\x00" * pad_len
 
 
-        pkt = STLPktBuilder(pkt=base_pkt/pad, vm=vm)
+        pkt = STLPktBuilder(pkt=base_pkt / pad, vm=vm)
 
         return STLStream(packet=pkt, mode=STLTXCont())
 
 
         return STLStream(packet=pkt, mode=STLTXCont())
 
index 6c76634..0c08e7a 100644 (file)
@@ -2,7 +2,6 @@ from trex_stl_lib.api import *
 
 
 class STLS1:
 
 
 class STLS1:
-
     def create_stream(self, port_id):
         # base_pkt = Ether()/IP(dst="2.2.0.1")/UDP(dport=12)
 
     def create_stream(self, port_id):
         # base_pkt = Ether()/IP(dst="2.2.0.1")/UDP(dport=12)
 
@@ -24,49 +23,61 @@ class STLS1:
 
         # return STLStream(packet=pkt, mode=STLTXCont())
 
 
         # return STLStream(packet=pkt, mode=STLTXCont())
 
-        vm = STLScVmRaw([STLVmTupleGen(ip_min="10.0.0.1", ip_max="10.255.255.254",
-                                       port_min=1025, port_max=65535,
-                                       name="stuple", limit_flows=10000),
-                         STLVmTupleGen(ip_min="2.0.0.1", ip_max="2.255.255.254",
-                                       port_min=1025, port_max=65535,
-                                       name="dtuple", limit_flows=100000000),
-
-                         # write ip to packet IP.src
-                         STLVmWrFlowVar(fv_name="stuple.ip",
-                                        pkt_offset="IP.src"),
-                         STLVmWrFlowVar(fv_name="dtuple.ip",
-                                        pkt_offset="IP.dst"),
-                         # fix checksum
-                         STLVmFixIpv4(offset="IP"),
-                         # write udp.port
-                         STLVmWrFlowVar(fv_name="stuple.port",
-                                        pkt_offset="UDP.sport"),
-                         STLVmWrFlowVar(fv_name="dtuple.port",
-                                        pkt_offset="UDP.dport"),
-                         ]
-                        )
-
-        base_pkt = Ether()/IP(src="16.0.0.1", dst="2.0.0.1")/UDP(dport=12, sport=1025)
+        vm = STLScVmRaw(
+            [
+                STLVmTupleGen(
+                    ip_min="10.0.0.1",
+                    ip_max="10.255.255.254",
+                    port_min=1025,
+                    port_max=65535,
+                    name="stuple",
+                    limit_flows=10000,
+                ),
+                STLVmTupleGen(
+                    ip_min="2.0.0.1",
+                    ip_max="2.255.255.254",
+                    port_min=1025,
+                    port_max=65535,
+                    name="dtuple",
+                    limit_flows=100000000,
+                ),
+                # write ip to packet IP.src
+                STLVmWrFlowVar(fv_name="stuple.ip", pkt_offset="IP.src"),
+                STLVmWrFlowVar(fv_name="dtuple.ip", pkt_offset="IP.dst"),
+                # fix checksum
+                STLVmFixIpv4(offset="IP"),
+                # write udp.port
+                STLVmWrFlowVar(fv_name="stuple.port", pkt_offset="UDP.sport"),
+                STLVmWrFlowVar(fv_name="dtuple.port", pkt_offset="UDP.dport"),
+            ]
+        )
+
+        base_pkt = (
+            Ether() / IP(src="16.0.0.1", dst="2.0.0.1") / UDP(dport=12, sport=1025)
+        )
         pad = Padding()
         if len(base_pkt) < 64:
             pad_len = 64 - len(base_pkt)
         pad = Padding()
         if len(base_pkt) < 64:
             pad_len = 64 - len(base_pkt)
-            pad.load = '\x00' * pad_len
+            pad.load = "\x00" * pad_len
 
 
-        pad = max(0, 64 - len(base_pkt)) * 'x'
-        pad_latency = max(0, (64-4) - len(base_pkt)) * 'x'
+        pad = max(0, 64 - len(base_pkt)) * "x"
+        pad_latency = max(0, (64 - 4) - len(base_pkt)) * "x"
 
 
-        pkt = STLPktBuilder(pkt=base_pkt/pad, vm=vm)
+        pkt = STLPktBuilder(pkt=base_pkt / pad, vm=vm)
 
 
-        return [STLStream(packet=pkt, mode=STLTXCont()),
-                  # latency stream   
-                  STLStream(packet = STLPktBuilder(pkt = base_pkt/pad_latency),
-                            mode = STLTXCont(pps=1000),
-                            flow_stats = STLFlowLatencyStats(pg_id = 12+port_id))
-                  ]
+        return [
+            STLStream(packet=pkt, mode=STLTXCont()),
+            # latency stream
+            STLStream(
+                packet=STLPktBuilder(pkt=base_pkt / pad_latency),
+                mode=STLTXCont(pps=1000),
+                flow_stats=STLFlowLatencyStats(pg_id=12 + port_id),
+            ),
+        ]
 
     def get_streams(self, direction=0, **kwargs):
         # return [self.create_stream()]
 
     def get_streams(self, direction=0, **kwargs):
         # return [self.create_stream()]
-        return self.create_stream(kwargs['port_id'])
+        return self.create_stream(kwargs["port_id"])
 
 
 # dynamic load - used for trex console or simulator
 
 
 # dynamic load - used for trex console or simulator
index 9d32d3e..4086731 100755 (executable)
@@ -6,33 +6,35 @@ from importlib.machinery import SourceFileLoader
 from scapy.all import *
 from scapy.contrib.geneve import GENEVE
 
 from scapy.all import *
 from scapy.contrib.geneve import GENEVE
 
+
 def hexstring(p):
     s = bytes(p.__class__(p))
     return ",".join("0x{:02x}".format(c) for c in s)
 
 def hexstring(p):
     s = bytes(p.__class__(p))
     return ",".join("0x{:02x}".format(c) for c in s)
 
+
 def output_test(filename, tests):
     (name, ext) = os.path.basename(filename).split(".")
 def output_test(filename, tests):
     (name, ext) = os.path.basename(filename).split(".")
-    print('/* DO NOT EDIT: automatically generated by test_genpackets.py */')
-    print('/* clang-format off */')
-    print('test_t tests_{}[] = {{'.format(name))
+    print("/* DO NOT EDIT: automatically generated by test_genpackets.py */")
+    print("/* clang-format off */")
+    print("test_t tests_{}[] = {{".format(name))
 
     for t in tests:
 
     for t in tests:
-        print('  {')
+        print("  {")
         print('    .name = "{}",'.format(t[0]))
         print('    .name = "{}",'.format(t[0]))
-        print('    .nsend = {},'.format(len(t[1])))
-        print('    .send = (char []){{{}}},'.format(hexstring(t[1])))
-        print('    .nexpect = {},'.format(len(t[2])))
-        print('    .expect = (char []){{{}}},'.format(hexstring(t[2])))
-        print('    .expect_next_index = {}'.format(t[3]))
-        print('  },')
-    print('};')
-    print('/* clang-format on */')
+        print("    .nsend = {},".format(len(t[1])))
+        print("    .send = (char []){{{}}},".format(hexstring(t[1])))
+        print("    .nexpect = {},".format(len(t[2])))
+        print("    .expect = (char []){{{}}},".format(hexstring(t[2])))
+        print("    .expect_next_index = {}".format(t[3]))
+        print("  },")
+    print("};")
+    print("/* clang-format on */")
+
 
 # Read tests from file
 for filename in sys.argv[1:]:
     with open(filename) as f:
 
 # Read tests from file
 for filename in sys.argv[1:]:
     with open(filename) as f:
-        content = f.read().replace('\n', '')
+        content = f.read().replace("\n", "")
 
     tests = eval(content)
     output_test(filename, tests)
 
     tests = eval(content)
     output_test(filename, tests)
-
index b18fdc3..eee89d7 100755 (executable)
@@ -1,10 +1,8 @@
 #!/usr/bin/env python3
 
 #!/usr/bin/env python3
 
-from os.path import dirname, realpath, split,\
-    join, isdir, exists
+from os.path import dirname, realpath, split, join, isdir, exists
 from os import remove, system, mkdir
 from os import remove, system, mkdir
-from logging import getLogger, basicConfig,\
-    DEBUG, INFO, ERROR
+from logging import getLogger, basicConfig, DEBUG, INFO, ERROR
 from argparse import ArgumentParser
 from atexit import register
 from shutil import rmtree
 from argparse import ArgumentParser
 from atexit import register
 from shutil import rmtree
@@ -18,10 +16,7 @@ from scapy.contrib.gtp import *
 from scapy.all import *
 
 
 from scapy.all import *
 
 
-verbose_levels = {
-    'error': ERROR,
-    'debug': DEBUG,
-    'info': INFO}
+verbose_levels = {"error": ERROR, "debug": DEBUG, "info": INFO}
 
 
 class ContainerStartupError(Exception):
 
 
 class ContainerStartupError(Exception):
@@ -87,10 +82,8 @@ class Container(object):
             image=image,
             name=name,
             privileged=True,
             image=image,
             name=name,
             privileged=True,
-            volumes={
-                temp: {
-                    'bind': '/mnt',
-                    'mode': 'rw'}})
+            volumes={temp: {"bind": "/mnt", "mode": "rw"}},
+        )
 
         obj = cls.get(client, name)
         if not obj:
 
         obj = cls.get(client, name)
         if not obj:
@@ -119,7 +112,7 @@ class Container(object):
 
     def vppctl_exec(self, cmd):
         ec, resp = self._ref.exec_run(cmd="{} {}".format(self.cmd, cmd))
 
     def vppctl_exec(self, cmd):
         ec, resp = self._ref.exec_run(cmd="{} {}".format(self.cmd, cmd))
-        assert(ec == 0)
+        assert ec == 0
         return resp
 
     def setup_host_interface(self, name, ip):
         return resp
 
     def setup_host_interface(self, name, ip):
@@ -134,8 +127,7 @@ class Container(object):
         self.vppctl_exec("create packet-generator interface pg0")
         self.vppctl_exec("set int mac address pg0 {}".format(local_mac))
         self.vppctl_exec("set int ip addr pg0 {}".format(local_ip))
         self.vppctl_exec("create packet-generator interface pg0")
         self.vppctl_exec("set int mac address pg0 {}".format(local_mac))
         self.vppctl_exec("set int ip addr pg0 {}".format(local_ip))
-        self.vppctl_exec(
-            "set ip neighbor pg0 {} {}".format(remote_ip, remote_mac))
+        self.vppctl_exec("set ip neighbor pg0 {} {}".format(remote_ip, remote_mac))
         self.vppctl_exec("set int state pg0 up")
 
     def pg_create_interface4(self, local_ip, remote_ip, local_mac, remote_mac):
         self.vppctl_exec("set int state pg0 up")
 
     def pg_create_interface4(self, local_ip, remote_ip, local_mac, remote_mac):
@@ -158,24 +150,32 @@ class Container(object):
         self.vppctl_exec("set ip neighbor pg0 {} {}".format(remote_ip, remote_mac))
         self.vppctl_exec("set int state pg0 up")
 
         self.vppctl_exec("set ip neighbor pg0 {} {}".format(remote_ip, remote_mac))
         self.vppctl_exec("set int state pg0 up")
 
-    def pg_create_interface4_name(self, ifname, local_ip, remote_ip, local_mac, remote_mac):
+    def pg_create_interface4_name(
+        self, ifname, local_ip, remote_ip, local_mac, remote_mac
+    ):
         # remote_ip can't have subnet mask
 
         time.sleep(2)
         self.vppctl_exec("create packet-generator interface {}".format(ifname))
         self.vppctl_exec("set int mac address {} {}".format(ifname, local_mac))
         self.vppctl_exec("set int ip addr {} {}".format(ifname, local_ip))
         # remote_ip can't have subnet mask
 
         time.sleep(2)
         self.vppctl_exec("create packet-generator interface {}".format(ifname))
         self.vppctl_exec("set int mac address {} {}".format(ifname, local_mac))
         self.vppctl_exec("set int ip addr {} {}".format(ifname, local_ip))
-        self.vppctl_exec("set ip neighbor {} {} {}".format(ifname, remote_ip, remote_mac))
+        self.vppctl_exec(
+            "set ip neighbor {} {} {}".format(ifname, remote_ip, remote_mac)
+        )
         self.vppctl_exec("set int state {} up".format(ifname))
 
         self.vppctl_exec("set int state {} up".format(ifname))
 
-    def pg_create_interface6_name(self, ifname, local_ip, remote_ip, local_mac, remote_mac):
+    def pg_create_interface6_name(
+        self, ifname, local_ip, remote_ip, local_mac, remote_mac
+    ):
         # remote_ip can't have subnet mask
 
         time.sleep(2)
         self.vppctl_exec("create packet-generator interface {}".format(ifname))
         self.vppctl_exec("set int mac address {} {}".format(ifname, local_mac))
         self.vppctl_exec("set int ip addr {} {}".format(ifname, local_ip))
         # remote_ip can't have subnet mask
 
         time.sleep(2)
         self.vppctl_exec("create packet-generator interface {}".format(ifname))
         self.vppctl_exec("set int mac address {} {}".format(ifname, local_mac))
         self.vppctl_exec("set int ip addr {} {}".format(ifname, local_ip))
-        self.vppctl_exec("set ip neighbor {} {} {}".format(ifname, remote_ip, remote_mac))
+        self.vppctl_exec(
+            "set ip neighbor {} {} {}".format(ifname, remote_ip, remote_mac)
+        )
         self.vppctl_exec("set int state {} up".format(ifname))
 
     def pg_enable(self):
         self.vppctl_exec("set int state {} up".format(ifname))
 
     def pg_enable(self):
@@ -186,55 +186,56 @@ class Container(object):
         wrpcap(self.pg_input_file, stream)
         self.vppctl_exec(
             "packet-generator new name pg-stream "
         wrpcap(self.pg_input_file, stream)
         self.vppctl_exec(
             "packet-generator new name pg-stream "
-            "node ethernet-input pcap {}".format(
-                self.pg_input_file_in))
+            "node ethernet-input pcap {}".format(self.pg_input_file_in)
+        )
 
     def pg_start_capture(self):
         if exists(self.pg_output_file):
             remove(self.pg_output_file)
         self.vppctl_exec(
 
     def pg_start_capture(self):
         if exists(self.pg_output_file):
             remove(self.pg_output_file)
         self.vppctl_exec(
-            "packet-generator capture pg0 pcap {}".format(
-                self.pg_output_file_in))
+            "packet-generator capture pg0 pcap {}".format(self.pg_output_file_in)
+        )
 
     def pg_start_capture_name(self, ifname):
         if exists(self.pg_output_file):
             remove(self.pg_output_file)
         self.vppctl_exec(
 
     def pg_start_capture_name(self, ifname):
         if exists(self.pg_output_file):
             remove(self.pg_output_file)
         self.vppctl_exec(
-            "packet-generator capture {} pcap {}".format(
-                ifname, self.pg_output_file_in))
+            "packet-generator capture {} pcap {}".format(ifname, self.pg_output_file_in)
+        )
 
     def pg_read_packets(self):
         return rdpcap(self.pg_output_file)
 
     def set_ipv6_route(self, out_if_name, next_hop_ip, subnet):
         self.vppctl_exec(
 
     def pg_read_packets(self):
         return rdpcap(self.pg_output_file)
 
     def set_ipv6_route(self, out_if_name, next_hop_ip, subnet):
         self.vppctl_exec(
-            "ip route add {} via host-{} {}".format(
-                subnet, out_if_name, next_hop_ip))
+            "ip route add {} via host-{} {}".format(subnet, out_if_name, next_hop_ip)
+        )
 
     def set_ipv6_route2(self, out_if_name, next_hop_ip, subnet):
         self.vppctl_exec(
 
     def set_ipv6_route2(self, out_if_name, next_hop_ip, subnet):
         self.vppctl_exec(
-            "ip route add {} via {} {}".format(
-                subnet, out_if_name, next_hop_ip))
+            "ip route add {} via {} {}".format(subnet, out_if_name, next_hop_ip)
+        )
 
     def set_ip_pgroute(self, out_if_name, next_hop_ip, subnet):
 
     def set_ip_pgroute(self, out_if_name, next_hop_ip, subnet):
-        self.vppctl_exec("ip route add {} via {} {}".format(
-            subnet, out_if_name, next_hop_ip))
+        self.vppctl_exec(
+            "ip route add {} via {} {}".format(subnet, out_if_name, next_hop_ip)
+        )
 
     def set_ipv6_pgroute(self, out_if_name, next_hop_ip, subnet):
 
     def set_ipv6_pgroute(self, out_if_name, next_hop_ip, subnet):
-        self.vppctl_exec("ip route add {} via {} {}".format(
-            subnet, out_if_name, next_hop_ip))
+        self.vppctl_exec(
+            "ip route add {} via {} {}".format(subnet, out_if_name, next_hop_ip)
+        )
 
     def set_ipv6_default_route(self, out_if_name, next_hop_ip):
         self.vppctl_exec(
 
     def set_ipv6_default_route(self, out_if_name, next_hop_ip):
         self.vppctl_exec(
-            "ip route add ::/0 via host-{} {}".format(
-                out_if_name, next_hop_ip))
+            "ip route add ::/0 via host-{} {}".format(out_if_name, next_hop_ip)
+        )
 
     def enable_trace(self, count):
         self.vppctl_exec("trace add af-packet-input {}".format(count))
 
 
 class Containers(object):
 
     def enable_trace(self, count):
         self.vppctl_exec("trace add af-packet-input {}".format(count))
 
 
 class Containers(object):
-
     def __init__(self, client, image):
         self.client = client
         self.image = image
     def __init__(self, client, image):
         self.client = client
         self.image = image
@@ -247,37 +248,45 @@ class Containers(object):
         register(lambda: remove(path))
 
     def build(self, path, vpp_path):
         register(lambda: remove(path))
 
     def build(self, path, vpp_path):
-        env = Environment(loader=FileSystemLoader(path),
-                          autoescape=True,
-                          trim_blocks=True)
-
-        self.tmp_render(join(vpp_path, "Dockerfile"),
-                        env.get_template("Dockerfile.j2"),
-                        {'vpp_path': vpp_path})
-
-        self.tmp_render(join(vpp_path, "startup.conf"),
-                        env.get_template("startup.conf.j2"),
-                        {'vpp_path': vpp_path})
-
-        ref, _ = self.client.images.build(path=vpp_path,
-                                          tag=self.image, rm=True)
+        env = Environment(
+            loader=FileSystemLoader(path), autoescape=True, trim_blocks=True
+        )
+
+        self.tmp_render(
+            join(vpp_path, "Dockerfile"),
+            env.get_template("Dockerfile.j2"),
+            {"vpp_path": vpp_path},
+        )
+
+        self.tmp_render(
+            join(vpp_path, "startup.conf"),
+            env.get_template("startup.conf.j2"),
+            {"vpp_path": vpp_path},
+        )
+
+        ref, _ = self.client.images.build(path=vpp_path, tag=self.image, rm=True)
         return ref
 
     def release(self, path, vpp_path):
         return ref
 
     def release(self, path, vpp_path):
-        env = Environment(loader=FileSystemLoader(path),
-                          autoescape=True,
-                          trim_blocks=True)
-
-        self.tmp_render(join(vpp_path, "Dockerfile"),
-                        env.get_template("Dockerfile.j2.release"),
-                        {'vpp_path': vpp_path})
-
-        self.tmp_render(join(vpp_path, "startup.conf"),
-                        env.get_template("startup.conf.j2"),
-                        {'vpp_path': vpp_path})
-
-        ref, _ = self.client.images.build(path=vpp_path,
-                                          tag="srv6m-release-image", rm=True)
+        env = Environment(
+            loader=FileSystemLoader(path), autoescape=True, trim_blocks=True
+        )
+
+        self.tmp_render(
+            join(vpp_path, "Dockerfile"),
+            env.get_template("Dockerfile.j2.release"),
+            {"vpp_path": vpp_path},
+        )
+
+        self.tmp_render(
+            join(vpp_path, "startup.conf"),
+            env.get_template("startup.conf.j2"),
+            {"vpp_path": vpp_path},
+        )
+
+        ref, _ = self.client.images.build(
+            path=vpp_path, tag="srv6m-release-image", rm=True
+        )
         return ref
 
     def new(self, name):
         return ref
 
     def new(self, name):
@@ -299,7 +308,6 @@ class Containers(object):
 
 
 class Network(object):
 
 
 class Network(object):
-
     def __init__(self, ref, name):
         self._name = name
         self._ref = ref
     def __init__(self, ref, name):
         self._name = name
         self._ref = ref
@@ -310,8 +318,7 @@ class Network(object):
 
     @classmethod
     def new(cls, client, name):
 
     @classmethod
     def new(cls, client, name):
-        ref = client.networks.create(name, driver="bridge",
-                                     check_duplicate=True)
+        ref = client.networks.create(name, driver="bridge", check_duplicate=True)
         return cls(ref, name)
 
     @classmethod
         return cls(ref, name)
 
     @classmethod
@@ -331,7 +338,6 @@ class Network(object):
 
 
 class Networks(object):
 
 
 class Networks(object):
-
     def __init__(self, client):
         self.client = client
 
     def __init__(self, client):
         self.client = client
 
@@ -352,14 +358,9 @@ class Program(object):
     # for exmaple what the vpp is supposed to be
     # in our topoloty overview
 
     # for exmaple what the vpp is supposed to be
     # in our topoloty overview
 
-    instance_names = ["vpp-1",
-                      "vpp-2",
-                      "vpp-3",
-                      "vpp-4"]
+    instance_names = ["vpp-1", "vpp-2", "vpp-3", "vpp-4"]
 
 
-    network_names = ["net-1",
-                     "net-2",
-                     "net-3"]
+    network_names = ["net-1", "net-2", "net-3"]
 
     def __init__(self, image=None, prefix=None):
         self.path = dirname(realpath(__file__))
 
     def __init__(self, image=None, prefix=None):
         self.path = dirname(realpath(__file__))
@@ -469,15 +470,20 @@ class Program(object):
             local_ip="C::1/120",
             remote_ip="C::2",
             local_mac="aa:bb:cc:dd:ee:01",
             local_ip="C::1/120",
             remote_ip="C::2",
             local_mac="aa:bb:cc:dd:ee:01",
-            remote_mac="aa:bb:cc:dd:ee:02")
+            remote_mac="aa:bb:cc:dd:ee:02",
+        )
         c4.pg_create_interface(
             local_ip="B::1/120",
             remote_ip="B::2",
             local_mac="aa:bb:cc:dd:ee:11",
         c4.pg_create_interface(
             local_ip="B::1/120",
             remote_ip="B::2",
             local_mac="aa:bb:cc:dd:ee:11",
-            remote_mac="aa:bb:cc:dd:ee:22")
+            remote_mac="aa:bb:cc:dd:ee:22",
+        )
 
 
-        p = (Ether(src="aa:bb:cc:dd:ee:02", dst="aa:bb:cc:dd:ee:01") /
-             IPv6(src="C::2", dst="B::2") / ICMPv6EchoRequest())
+        p = (
+            Ether(src="aa:bb:cc:dd:ee:02", dst="aa:bb:cc:dd:ee:01")
+            / IPv6(src="C::2", dst="B::2")
+            / ICMPv6EchoRequest()
+        )
 
         print("Sending packet on {}:".format(c1.name))
         p.show2()
 
         print("Sending packet on {}:".format(c1.name))
         p.show2()
@@ -516,16 +522,17 @@ class Program(object):
             local_ip="C::1/120",
             remote_ip="C::2",
             local_mac="aa:bb:cc:dd:ee:01",
             local_ip="C::1/120",
             remote_ip="C::2",
             local_mac="aa:bb:cc:dd:ee:01",
-            remote_mac="aa:bb:cc:dd:ee:02")
+            remote_mac="aa:bb:cc:dd:ee:02",
+        )
         c4.pg_create_interface(
             local_ip="B::1/120",
             remote_ip="B::2",
             local_mac="aa:bb:cc:dd:ee:11",
         c4.pg_create_interface(
             local_ip="B::1/120",
             remote_ip="B::2",
             local_mac="aa:bb:cc:dd:ee:11",
-            remote_mac="aa:bb:cc:dd:ee:22")
+            remote_mac="aa:bb:cc:dd:ee:22",
+        )
 
         c1.vppctl_exec("set sr encaps source addr D1::")
 
         c1.vppctl_exec("set sr encaps source addr D1::")
-        c1.vppctl_exec(
-            "sr policy add bsid D1::999:1 next D2:: next D3:: next D4::")
+        c1.vppctl_exec("sr policy add bsid D1::999:1 next D2:: next D3:: next D4::")
         c1.vppctl_exec("sr steer l3 B::/120 via bsid D1::999:1")
 
         c2.vppctl_exec("sr localsid address D2:: behavior end")
         c1.vppctl_exec("sr steer l3 B::/120 via bsid D1::999:1")
 
         c2.vppctl_exec("sr localsid address D2:: behavior end")
@@ -539,8 +546,11 @@ class Program(object):
         c3.set_ipv6_route("eth2", "A3::2", "D4::/128")
         c3.set_ipv6_route("eth1", "A2::1", "C::/120")
 
         c3.set_ipv6_route("eth2", "A3::2", "D4::/128")
         c3.set_ipv6_route("eth1", "A2::1", "C::/120")
 
-        p = (Ether(src="aa:bb:cc:dd:ee:02", dst="aa:bb:cc:dd:ee:01") /
-             IPv6(src="C::2", dst="B::2") / ICMPv6EchoRequest())
+        p = (
+            Ether(src="aa:bb:cc:dd:ee:02", dst="aa:bb:cc:dd:ee:01")
+            / IPv6(src="C::2", dst="B::2")
+            / ICMPv6EchoRequest()
+        )
 
         print("Sending packet on {}:".format(c1.name))
         p.show2()
 
         print("Sending packet on {}:".format(c1.name))
         p.show2()
@@ -561,7 +571,7 @@ class Program(object):
         for p in c4.pg_read_packets():
             p.show2()
 
         for p in c4.pg_read_packets():
             p.show2()
 
-    ''' T.Map is obsolete
+    """ T.Map is obsolete
     def test_tmap(self):
         # TESTS:
         # trace add af-packet-input 10
     def test_tmap(self):
         # TESTS:
         # trace add af-packet-input 10
@@ -844,7 +854,7 @@ class Program(object):
         print("Receiving packet on {}:".format(c4.name))
         for p in c4.pg_read_packets():
             p.show2()
         print("Receiving packet on {}:".format(c4.name))
         for p in c4.pg_read_packets():
             p.show2()
-    '''
+    """
 
     def test_gtp4(self):
         # TESTS:
 
     def test_gtp4(self):
         # TESTS:
@@ -863,16 +873,20 @@ class Program(object):
             local_ip="172.16.0.1/30",
             remote_ip="172.16.0.2/30",
             local_mac="aa:bb:cc:dd:ee:01",
             local_ip="172.16.0.1/30",
             remote_ip="172.16.0.2/30",
             local_mac="aa:bb:cc:dd:ee:01",
-            remote_mac="aa:bb:cc:dd:ee:02")
+            remote_mac="aa:bb:cc:dd:ee:02",
+        )
         c4.pg_create_interface4(
             local_ip="1.0.0.2/30",
             remote_ip="1.0.0.1",
             local_mac="aa:bb:cc:dd:ee:11",
         c4.pg_create_interface4(
             local_ip="1.0.0.2/30",
             remote_ip="1.0.0.1",
             local_mac="aa:bb:cc:dd:ee:11",
-            remote_mac="aa:bb:cc:dd:ee:22")
+            remote_mac="aa:bb:cc:dd:ee:22",
+        )
 
         c1.vppctl_exec("set sr encaps source addr A1::1")
         c1.vppctl_exec("sr policy add bsid D4:: next D2:: next D3::")
 
         c1.vppctl_exec("set sr encaps source addr A1::1")
         c1.vppctl_exec("sr policy add bsid D4:: next D2:: next D3::")
-        c1.vppctl_exec("sr policy add bsid D5:: behavior t.m.gtp4.d D4::/32 v6src_prefix C1::/64 nhtype ipv4")
+        c1.vppctl_exec(
+            "sr policy add bsid D5:: behavior t.m.gtp4.d D4::/32 v6src_prefix C1::/64 nhtype ipv4"
+        )
         c1.vppctl_exec("sr steer l3 172.20.0.1/32 via bsid D5::")
 
         c2.vppctl_exec("sr localsid address D2:: behavior end")
         c1.vppctl_exec("sr steer l3 172.20.0.1/32 via bsid D5::")
 
         c2.vppctl_exec("sr localsid address D2:: behavior end")
@@ -880,8 +894,8 @@ class Program(object):
         c3.vppctl_exec("sr localsid address D3:: behavior end")
 
         c4.vppctl_exec(
         c3.vppctl_exec("sr localsid address D3:: behavior end")
 
         c4.vppctl_exec(
-            "sr localsid prefix D4::/32 "
-            "behavior end.m.gtp4.e v4src_position 64")
+            "sr localsid prefix D4::/32 " "behavior end.m.gtp4.e v4src_position 64"
+        )
 
         c2.set_ipv6_route("eth2", "A2::2", "D3::/128")
         c2.set_ipv6_route("eth1", "A1::1", "C::/120")
 
         c2.set_ipv6_route("eth2", "A2::2", "D3::/128")
         c2.set_ipv6_route("eth1", "A1::1", "C::/120")
@@ -889,17 +903,19 @@ class Program(object):
         c3.set_ipv6_route("eth1", "A2::1", "C::/120")
         c4.set_ip_pgroute("pg0", "1.0.0.1", "172.20.0.1/32")
 
         c3.set_ipv6_route("eth1", "A2::1", "C::/120")
         c4.set_ip_pgroute("pg0", "1.0.0.1", "172.20.0.1/32")
 
-        p = (Ether(src="aa:bb:cc:dd:ee:02", dst="aa:bb:cc:dd:ee:01") /
-             IP(src="172.20.0.2", dst="172.20.0.1") /
-             UDP(sport=2152, dport=2152) /
-             GTP_U_Header(gtp_type="g_pdu", teid=200) /
-             IP(src="172.99.0.1", dst="172.99.0.2") /
-             ICMP())
+        p = (
+            Ether(src="aa:bb:cc:dd:ee:02", dst="aa:bb:cc:dd:ee:01")
+            / IP(src="172.20.0.2", dst="172.20.0.1")
+            / UDP(sport=2152, dport=2152)
+            / GTP_U_Header(gtp_type="g_pdu", teid=200)
+            / IP(src="172.99.0.1", dst="172.99.0.2")
+            / ICMP()
+        )
 
         print("Sending packet on {}:".format(c1.name))
         p.show2()
 
 
         print("Sending packet on {}:".format(c1.name))
         p.show2()
 
-        time.sleep(10) 
+        time.sleep(10)
         c1.enable_trace(10)
         c4.enable_trace(10)
 
         c1.enable_trace(10)
         c4.enable_trace(10)
 
@@ -933,16 +949,20 @@ class Program(object):
             local_ip="172.16.0.1/30",
             remote_ip="172.16.0.2/30",
             local_mac="aa:bb:cc:dd:ee:01",
             local_ip="172.16.0.1/30",
             remote_ip="172.16.0.2/30",
             local_mac="aa:bb:cc:dd:ee:01",
-            remote_mac="aa:bb:cc:dd:ee:02")
+            remote_mac="aa:bb:cc:dd:ee:02",
+        )
         c4.pg_create_interface4(
             local_ip="1.0.0.2/30",
             remote_ip="1.0.0.1",
             local_mac="aa:bb:cc:dd:ee:11",
         c4.pg_create_interface4(
             local_ip="1.0.0.2/30",
             remote_ip="1.0.0.1",
             local_mac="aa:bb:cc:dd:ee:11",
-            remote_mac="aa:bb:cc:dd:ee:22")
+            remote_mac="aa:bb:cc:dd:ee:22",
+        )
 
         c1.vppctl_exec("set sr encaps source addr A1::1")
         c1.vppctl_exec("sr policy add bsid D4:: next D2:1111:aaaa:bbbb::")
 
         c1.vppctl_exec("set sr encaps source addr A1::1")
         c1.vppctl_exec("sr policy add bsid D4:: next D2:1111:aaaa:bbbb::")
-        c1.vppctl_exec("sr policy add bsid D5:: behavior t.m.gtp4.d D4::/32 v6src_prefix C1::/64 nhtype ipv4")
+        c1.vppctl_exec(
+            "sr policy add bsid D5:: behavior t.m.gtp4.d D4::/32 v6src_prefix C1::/64 nhtype ipv4"
+        )
         c1.vppctl_exec("sr steer l3 172.20.0.1/32 via bsid D5::")
 
         c2.vppctl_exec("sr localsid prefix D2:1111:aaaa::/48 behavior end usid 16")
         c1.vppctl_exec("sr steer l3 172.20.0.1/32 via bsid D5::")
 
         c2.vppctl_exec("sr localsid prefix D2:1111:aaaa::/48 behavior end usid 16")
@@ -950,8 +970,8 @@ class Program(object):
         c3.vppctl_exec("sr localsid prefix D2:1111:bbbb::/48 behavior end usid 16")
 
         c4.vppctl_exec(
         c3.vppctl_exec("sr localsid prefix D2:1111:bbbb::/48 behavior end usid 16")
 
         c4.vppctl_exec(
-            "sr localsid prefix D4::/32 "
-            "behavior end.m.gtp4.e v4src_position 64")
+            "sr localsid prefix D4::/32 " "behavior end.m.gtp4.e v4src_position 64"
+        )
 
         c2.set_ipv6_route("eth2", "A2::2", "D2:1111:bbbb::/48")
         c2.set_ipv6_route("eth1", "A1::1", "C::/120")
 
         c2.set_ipv6_route("eth2", "A2::2", "D2:1111:bbbb::/48")
         c2.set_ipv6_route("eth1", "A1::1", "C::/120")
@@ -959,17 +979,19 @@ class Program(object):
         c3.set_ipv6_route("eth1", "A2::1", "C::/120")
         c4.set_ip_pgroute("pg0", "1.0.0.1", "172.20.0.1/32")
 
         c3.set_ipv6_route("eth1", "A2::1", "C::/120")
         c4.set_ip_pgroute("pg0", "1.0.0.1", "172.20.0.1/32")
 
-        p = (Ether(src="aa:bb:cc:dd:ee:02", dst="aa:bb:cc:dd:ee:01") /
-             IP(src="172.20.0.2", dst="172.20.0.1") /
-             UDP(sport=2152, dport=2152) /
-             GTP_U_Header(gtp_type="g_pdu", teid=200) /
-             IP(src="172.99.0.1", dst="172.99.0.2") /
-             ICMP())
+        p = (
+            Ether(src="aa:bb:cc:dd:ee:02", dst="aa:bb:cc:dd:ee:01")
+            / IP(src="172.20.0.2", dst="172.20.0.1")
+            / UDP(sport=2152, dport=2152)
+            / GTP_U_Header(gtp_type="g_pdu", teid=200)
+            / IP(src="172.99.0.1", dst="172.99.0.2")
+            / ICMP()
+        )
 
         print("Sending packet on {}:".format(c1.name))
         p.show2()
 
 
         print("Sending packet on {}:".format(c1.name))
         p.show2()
 
-        time.sleep(10) 
+        time.sleep(10)
         c1.enable_trace(10)
         c4.enable_trace(10)
 
         c1.enable_trace(10)
         c4.enable_trace(10)
 
@@ -1003,16 +1025,20 @@ class Program(object):
             local_ip="172.16.0.1/30",
             remote_ip="172.16.0.2/30",
             local_mac="aa:bb:cc:dd:ee:01",
             local_ip="172.16.0.1/30",
             remote_ip="172.16.0.2/30",
             local_mac="aa:bb:cc:dd:ee:01",
-            remote_mac="aa:bb:cc:dd:ee:02")
+            remote_mac="aa:bb:cc:dd:ee:02",
+        )
         c4.pg_create_interface4(
             local_ip="1.0.0.2/30",
             remote_ip="1.0.0.1",
             local_mac="aa:bb:cc:dd:ee:11",
         c4.pg_create_interface4(
             local_ip="1.0.0.2/30",
             remote_ip="1.0.0.1",
             local_mac="aa:bb:cc:dd:ee:11",
-            remote_mac="aa:bb:cc:dd:ee:22")
+            remote_mac="aa:bb:cc:dd:ee:22",
+        )
 
         c1.vppctl_exec("set sr encaps source addr A1::1")
         c1.vppctl_exec("sr policy add bsid D4:: next D2:: next D3::")
 
         c1.vppctl_exec("set sr encaps source addr A1::1")
         c1.vppctl_exec("sr policy add bsid D4:: next D2:: next D3::")
-        c1.vppctl_exec("sr policy add bsid D5:: behavior t.m.gtp4.d D4::/32 v6src_prefix C1::/64 nhtype ipv4")
+        c1.vppctl_exec(
+            "sr policy add bsid D5:: behavior t.m.gtp4.d D4::/32 v6src_prefix C1::/64 nhtype ipv4"
+        )
         c1.vppctl_exec("sr steer l3 172.20.0.1/32 via bsid D5::")
 
         c2.vppctl_exec("sr localsid address D2:: behavior end")
         c1.vppctl_exec("sr steer l3 172.20.0.1/32 via bsid D5::")
 
         c2.vppctl_exec("sr localsid address D2:: behavior end")
@@ -1020,8 +1046,8 @@ class Program(object):
         c3.vppctl_exec("sr localsid address D3:: behavior end")
 
         c4.vppctl_exec(
         c3.vppctl_exec("sr localsid address D3:: behavior end")
 
         c4.vppctl_exec(
-            "sr localsid prefix D4::/32 "
-            "behavior end.m.gtp4.e v4src_position 64")
+            "sr localsid prefix D4::/32 " "behavior end.m.gtp4.e v4src_position 64"
+        )
 
         c2.set_ipv6_route("eth2", "A2::2", "D3::/128")
         c2.set_ipv6_route("eth1", "A1::1", "C::/120")
 
         c2.set_ipv6_route("eth2", "A2::2", "D3::/128")
         c2.set_ipv6_route("eth1", "A1::1", "C::/120")
@@ -1029,13 +1055,15 @@ class Program(object):
         c3.set_ipv6_route("eth1", "A2::1", "C::/120")
         c4.set_ip_pgroute("pg0", "1.0.0.1", "172.20.0.1/32")
 
         c3.set_ipv6_route("eth1", "A2::1", "C::/120")
         c4.set_ip_pgroute("pg0", "1.0.0.1", "172.20.0.1/32")
 
-        p = (Ether(src="aa:bb:cc:dd:ee:02", dst="aa:bb:cc:dd:ee:01") /
-             IP(src="172.20.0.2", dst="172.20.0.1") /
-             UDP(sport=2152, dport=2152) /
-             GTP_U_Header(gtp_type="g_pdu", teid=200) /
-             GTPPDUSessionContainer(type=1, R=1, QFI=3) /
-             IP(src="172.99.0.1", dst="172.99.0.2") /
-             ICMP())
+        p = (
+            Ether(src="aa:bb:cc:dd:ee:02", dst="aa:bb:cc:dd:ee:01")
+            / IP(src="172.20.0.2", dst="172.20.0.1")
+            / UDP(sport=2152, dport=2152)
+            / GTP_U_Header(gtp_type="g_pdu", teid=200)
+            / GTPPDUSessionContainer(type=1, R=1, QFI=3)
+            / IP(src="172.99.0.1", dst="172.99.0.2")
+            / ICMP()
+        )
 
         print("Sending packet on {}:".format(c1.name))
         p.show2()
 
         print("Sending packet on {}:".format(c1.name))
         p.show2()
@@ -1073,16 +1101,20 @@ class Program(object):
             local_ip="172.16.0.1/30",
             remote_ip="172.16.0.2/30",
             local_mac="aa:bb:cc:dd:ee:01",
             local_ip="172.16.0.1/30",
             remote_ip="172.16.0.2/30",
             local_mac="aa:bb:cc:dd:ee:01",
-            remote_mac="aa:bb:cc:dd:ee:02")
+            remote_mac="aa:bb:cc:dd:ee:02",
+        )
         c4.pg_create_interface4(
             local_ip="1.0.0.2/30",
             remote_ip="1.0.0.1",
             local_mac="aa:bb:cc:dd:ee:11",
         c4.pg_create_interface4(
             local_ip="1.0.0.2/30",
             remote_ip="1.0.0.1",
             local_mac="aa:bb:cc:dd:ee:11",
-            remote_mac="aa:bb:cc:dd:ee:22")
+            remote_mac="aa:bb:cc:dd:ee:22",
+        )
 
         c1.vppctl_exec("set sr encaps source addr A1::1")
         c1.vppctl_exec("sr policy add bsid D4:: next D2:: next D3::")
 
         c1.vppctl_exec("set sr encaps source addr A1::1")
         c1.vppctl_exec("sr policy add bsid D4:: next D2:: next D3::")
-        c1.vppctl_exec("sr policy add bsid D5:: behavior t.m.gtp4.d D4::/32 v6src_prefix C1::/64 nhtype ipv4")
+        c1.vppctl_exec(
+            "sr policy add bsid D5:: behavior t.m.gtp4.d D4::/32 v6src_prefix C1::/64 nhtype ipv4"
+        )
         c1.vppctl_exec("sr steer l3 172.20.0.1/32 via bsid D5::")
 
         c2.vppctl_exec("sr localsid address D2:: behavior end")
         c1.vppctl_exec("sr steer l3 172.20.0.1/32 via bsid D5::")
 
         c2.vppctl_exec("sr localsid address D2:: behavior end")
@@ -1090,8 +1122,8 @@ class Program(object):
         c3.vppctl_exec("sr localsid address D3:: behavior end")
 
         c4.vppctl_exec(
         c3.vppctl_exec("sr localsid address D3:: behavior end")
 
         c4.vppctl_exec(
-            "sr localsid prefix D4::/32 "
-            "behavior end.m.gtp4.e v4src_position 64")
+            "sr localsid prefix D4::/32 " "behavior end.m.gtp4.e v4src_position 64"
+        )
 
         c2.set_ipv6_route("eth2", "A2::2", "D3::/128")
         c2.set_ipv6_route("eth1", "A1::1", "C::/120")
 
         c2.set_ipv6_route("eth2", "A2::2", "D3::/128")
         c2.set_ipv6_route("eth1", "A1::1", "C::/120")
@@ -1099,10 +1131,12 @@ class Program(object):
         c3.set_ipv6_route("eth1", "A2::1", "C::/120")
         c4.set_ip_pgroute("pg0", "1.0.0.1", "172.20.0.1/32")
 
         c3.set_ipv6_route("eth1", "A2::1", "C::/120")
         c4.set_ip_pgroute("pg0", "1.0.0.1", "172.20.0.1/32")
 
-        p = (Ether(src="aa:bb:cc:dd:ee:02", dst="aa:bb:cc:dd:ee:01") /
-             IP(src="172.20.0.2", dst="172.20.0.1") /
-             UDP(sport=2152, dport=2152) /
-             GTP_U_Header(gtp_type="echo_request", S=1, teid=200, seq=200))
+        p = (
+            Ether(src="aa:bb:cc:dd:ee:02", dst="aa:bb:cc:dd:ee:01")
+            / IP(src="172.20.0.2", dst="172.20.0.1")
+            / UDP(sport=2152, dport=2152)
+            / GTP_U_Header(gtp_type="echo_request", S=1, teid=200, seq=200)
+        )
 
         print("Sending packet on {}:".format(c1.name))
         p.show2()
 
         print("Sending packet on {}:".format(c1.name))
         p.show2()
@@ -1140,16 +1174,20 @@ class Program(object):
             local_ip="172.16.0.1/30",
             remote_ip="172.16.0.2/30",
             local_mac="aa:bb:cc:dd:ee:01",
             local_ip="172.16.0.1/30",
             remote_ip="172.16.0.2/30",
             local_mac="aa:bb:cc:dd:ee:01",
-            remote_mac="aa:bb:cc:dd:ee:02")
+            remote_mac="aa:bb:cc:dd:ee:02",
+        )
         c4.pg_create_interface4(
             local_ip="1.0.0.2/30",
             remote_ip="1.0.0.1",
             local_mac="aa:bb:cc:dd:ee:11",
         c4.pg_create_interface4(
             local_ip="1.0.0.2/30",
             remote_ip="1.0.0.1",
             local_mac="aa:bb:cc:dd:ee:11",
-            remote_mac="aa:bb:cc:dd:ee:22")
+            remote_mac="aa:bb:cc:dd:ee:22",
+        )
 
         c1.vppctl_exec("set sr encaps source addr A1::1")
         c1.vppctl_exec("sr policy add bsid D4:: next D2:: next D3::")
 
         c1.vppctl_exec("set sr encaps source addr A1::1")
         c1.vppctl_exec("sr policy add bsid D4:: next D2:: next D3::")
-        c1.vppctl_exec("sr policy add bsid D5:: behavior t.m.gtp4.d D4::/32 v6src_prefix C1::/64 nhtype ipv4")
+        c1.vppctl_exec(
+            "sr policy add bsid D5:: behavior t.m.gtp4.d D4::/32 v6src_prefix C1::/64 nhtype ipv4"
+        )
         c1.vppctl_exec("sr steer l3 172.20.0.1/32 via bsid D5::")
 
         c2.vppctl_exec("sr localsid address D2:: behavior end")
         c1.vppctl_exec("sr steer l3 172.20.0.1/32 via bsid D5::")
 
         c2.vppctl_exec("sr localsid address D2:: behavior end")
@@ -1157,8 +1195,8 @@ class Program(object):
         c3.vppctl_exec("sr localsid address D3:: behavior end")
 
         c4.vppctl_exec(
         c3.vppctl_exec("sr localsid address D3:: behavior end")
 
         c4.vppctl_exec(
-            "sr localsid prefix D4::/32 "
-            "behavior end.m.gtp4.e v4src_position 64")
+            "sr localsid prefix D4::/32 " "behavior end.m.gtp4.e v4src_position 64"
+        )
 
         c2.set_ipv6_route("eth2", "A2::2", "D3::/128")
         c2.set_ipv6_route("eth1", "A1::1", "C::/120")
 
         c2.set_ipv6_route("eth2", "A2::2", "D3::/128")
         c2.set_ipv6_route("eth1", "A1::1", "C::/120")
@@ -1166,10 +1204,12 @@ class Program(object):
         c3.set_ipv6_route("eth1", "A2::1", "C::/120")
         c4.set_ip_pgroute("pg0", "1.0.0.1", "172.20.0.1/32")
 
         c3.set_ipv6_route("eth1", "A2::1", "C::/120")
         c4.set_ip_pgroute("pg0", "1.0.0.1", "172.20.0.1/32")
 
-        p = (Ether(src="aa:bb:cc:dd:ee:02", dst="aa:bb:cc:dd:ee:01") /
-             IP(src="172.20.0.2", dst="172.20.0.1") /
-             UDP(sport=2152, dport=2152) /
-             GTP_U_Header(gtp_type="echo_response", S=1, teid=200, seq=200))
+        p = (
+            Ether(src="aa:bb:cc:dd:ee:02", dst="aa:bb:cc:dd:ee:01")
+            / IP(src="172.20.0.2", dst="172.20.0.1")
+            / UDP(sport=2152, dport=2152)
+            / GTP_U_Header(gtp_type="echo_response", S=1, teid=200, seq=200)
+        )
 
         print("Sending packet on {}:".format(c1.name))
         p.show2()
 
         print("Sending packet on {}:".format(c1.name))
         p.show2()
@@ -1207,16 +1247,20 @@ class Program(object):
             local_ip="172.16.0.1/30",
             remote_ip="172.16.0.2/30",
             local_mac="aa:bb:cc:dd:ee:01",
             local_ip="172.16.0.1/30",
             remote_ip="172.16.0.2/30",
             local_mac="aa:bb:cc:dd:ee:01",
-            remote_mac="aa:bb:cc:dd:ee:02")
+            remote_mac="aa:bb:cc:dd:ee:02",
+        )
         c4.pg_create_interface4(
             local_ip="1.0.0.2/30",
             remote_ip="1.0.0.1",
             local_mac="aa:bb:cc:dd:ee:11",
         c4.pg_create_interface4(
             local_ip="1.0.0.2/30",
             remote_ip="1.0.0.1",
             local_mac="aa:bb:cc:dd:ee:11",
-            remote_mac="aa:bb:cc:dd:ee:22")
+            remote_mac="aa:bb:cc:dd:ee:22",
+        )
 
         c1.vppctl_exec("set sr encaps source addr A1::1")
         c1.vppctl_exec("sr policy add bsid D4:: next D2:: next D3::")
 
         c1.vppctl_exec("set sr encaps source addr A1::1")
         c1.vppctl_exec("sr policy add bsid D4:: next D2:: next D3::")
-        c1.vppctl_exec("sr policy add bsid D5:: behavior t.m.gtp4.d D4::/32 v6src_prefix C1::/64 nhtype ipv4")
+        c1.vppctl_exec(
+            "sr policy add bsid D5:: behavior t.m.gtp4.d D4::/32 v6src_prefix C1::/64 nhtype ipv4"
+        )
         c1.vppctl_exec("sr steer l3 172.20.0.1/32 via bsid D5::")
 
         c2.vppctl_exec("sr localsid address D2:: behavior end")
         c1.vppctl_exec("sr steer l3 172.20.0.1/32 via bsid D5::")
 
         c2.vppctl_exec("sr localsid address D2:: behavior end")
@@ -1224,8 +1268,8 @@ class Program(object):
         c3.vppctl_exec("sr localsid address D3:: behavior end")
 
         c4.vppctl_exec(
         c3.vppctl_exec("sr localsid address D3:: behavior end")
 
         c4.vppctl_exec(
-            "sr localsid prefix D4::/32 "
-            "behavior end.m.gtp4.e v4src_position 64")
+            "sr localsid prefix D4::/32 " "behavior end.m.gtp4.e v4src_position 64"
+        )
 
         c2.set_ipv6_route("eth2", "A2::2", "D3::/128")
         c2.set_ipv6_route("eth1", "A1::1", "C::/120")
 
         c2.set_ipv6_route("eth2", "A2::2", "D3::/128")
         c2.set_ipv6_route("eth1", "A1::1", "C::/120")
@@ -1233,12 +1277,15 @@ class Program(object):
         c3.set_ipv6_route("eth1", "A2::1", "C::/120")
         c4.set_ip_pgroute("pg0", "1.0.0.1", "172.20.0.1/32")
 
         c3.set_ipv6_route("eth1", "A2::1", "C::/120")
         c4.set_ip_pgroute("pg0", "1.0.0.1", "172.20.0.1/32")
 
-        p = (Ether(src="aa:bb:cc:dd:ee:02", dst="aa:bb:cc:dd:ee:01") /
-             IP(src="172.20.0.2", dst="172.20.0.1") /
-             UDP(sport=2152, dport=2152) /
-             GTP_U_Header(gtp_type="error_indication", S=1, teid=200, seq=200)/
-             IE_TEIDI(TEIDI=65535)/IE_GSNAddress(address="1.1.1.1")/
-             IE_PrivateExtension(extention_value="z"))
+        p = (
+            Ether(src="aa:bb:cc:dd:ee:02", dst="aa:bb:cc:dd:ee:01")
+            / IP(src="172.20.0.2", dst="172.20.0.1")
+            / UDP(sport=2152, dport=2152)
+            / GTP_U_Header(gtp_type="error_indication", S=1, teid=200, seq=200)
+            / IE_TEIDI(TEIDI=65535)
+            / IE_GSNAddress(address="1.1.1.1")
+            / IE_PrivateExtension(extention_value="z")
+        )
 
         print("Sending packet on {}:".format(c1.name))
         p.show2()
 
         print("Sending packet on {}:".format(c1.name))
         p.show2()
@@ -1276,16 +1323,20 @@ class Program(object):
             local_ip="172.16.0.1/30",
             remote_ip="172.16.0.2/30",
             local_mac="aa:bb:cc:dd:ee:01",
             local_ip="172.16.0.1/30",
             remote_ip="172.16.0.2/30",
             local_mac="aa:bb:cc:dd:ee:01",
-            remote_mac="aa:bb:cc:dd:ee:02")
+            remote_mac="aa:bb:cc:dd:ee:02",
+        )
         c4.pg_create_interface4(
             local_ip="1.0.0.2/30",
             remote_ip="1.0.0.1",
             local_mac="aa:bb:cc:dd:ee:11",
         c4.pg_create_interface4(
             local_ip="1.0.0.2/30",
             remote_ip="1.0.0.1",
             local_mac="aa:bb:cc:dd:ee:11",
-            remote_mac="aa:bb:cc:dd:ee:22")
+            remote_mac="aa:bb:cc:dd:ee:22",
+        )
 
         c1.vppctl_exec("set sr encaps source addr A1::1")
         c1.vppctl_exec("sr policy add bsid D4:: next D2:: next D3::")
 
         c1.vppctl_exec("set sr encaps source addr A1::1")
         c1.vppctl_exec("sr policy add bsid D4:: next D2:: next D3::")
-        c1.vppctl_exec("sr policy add bsid D5:: behavior t.m.gtp4.d D4::/32 v6src_prefix C1::/64")
+        c1.vppctl_exec(
+            "sr policy add bsid D5:: behavior t.m.gtp4.d D4::/32 v6src_prefix C1::/64"
+        )
         c1.vppctl_exec("sr steer l3 172.20.0.1/32 via bsid D5::")
 
         c2.vppctl_exec("sr localsid address D2:: behavior end")
         c1.vppctl_exec("sr steer l3 172.20.0.1/32 via bsid D5::")
 
         c2.vppctl_exec("sr localsid address D2:: behavior end")
@@ -1293,8 +1344,8 @@ class Program(object):
         c3.vppctl_exec("sr localsid address D3:: behavior end")
 
         c4.vppctl_exec(
         c3.vppctl_exec("sr localsid address D3:: behavior end")
 
         c4.vppctl_exec(
-            "sr localsid prefix D4::/32 "
-            "behavior end.m.gtp4.e v4src_position 64")
+            "sr localsid prefix D4::/32 " "behavior end.m.gtp4.e v4src_position 64"
+        )
 
         c2.set_ipv6_route("eth2", "A2::2", "D3::/128")
         c2.set_ipv6_route("eth1", "A1::1", "C::/120")
 
         c2.set_ipv6_route("eth2", "A2::2", "D3::/128")
         c2.set_ipv6_route("eth1", "A1::1", "C::/120")
@@ -1302,12 +1353,14 @@ class Program(object):
         c3.set_ipv6_route("eth1", "A2::1", "C::/120")
         c4.set_ip_pgroute("pg0", "1.0.0.1", "172.20.0.1/32")
 
         c3.set_ipv6_route("eth1", "A2::1", "C::/120")
         c4.set_ip_pgroute("pg0", "1.0.0.1", "172.20.0.1/32")
 
-        p = (Ether(src="aa:bb:cc:dd:ee:02", dst="aa:bb:cc:dd:ee:01") /
-             IP(src="172.20.0.2", dst="172.20.0.1") /
-             UDP(sport=2152, dport=2152) /
-             GTP_U_Header(gtp_type="g_pdu", teid=200) /
-             IPv6(src="2001::1", dst="2002::1") /
-             ICMPv6EchoRequest())
+        p = (
+            Ether(src="aa:bb:cc:dd:ee:02", dst="aa:bb:cc:dd:ee:01")
+            / IP(src="172.20.0.2", dst="172.20.0.1")
+            / UDP(sport=2152, dport=2152)
+            / GTP_U_Header(gtp_type="g_pdu", teid=200)
+            / IPv6(src="2001::1", dst="2002::1")
+            / ICMPv6EchoRequest()
+        )
 
         print("Sending packet on {}:".format(c1.name))
         p.show2()
 
         print("Sending packet on {}:".format(c1.name))
         p.show2()
@@ -1345,16 +1398,20 @@ class Program(object):
             local_ip="172.16.0.1/30",
             remote_ip="172.16.0.2/30",
             local_mac="aa:bb:cc:dd:ee:01",
             local_ip="172.16.0.1/30",
             remote_ip="172.16.0.2/30",
             local_mac="aa:bb:cc:dd:ee:01",
-            remote_mac="aa:bb:cc:dd:ee:02")
+            remote_mac="aa:bb:cc:dd:ee:02",
+        )
         c4.pg_create_interface4(
             local_ip="1.0.0.2/30",
             remote_ip="1.0.0.1",
             local_mac="aa:bb:cc:dd:ee:11",
         c4.pg_create_interface4(
             local_ip="1.0.0.2/30",
             remote_ip="1.0.0.1",
             local_mac="aa:bb:cc:dd:ee:11",
-            remote_mac="aa:bb:cc:dd:ee:22")
+            remote_mac="aa:bb:cc:dd:ee:22",
+        )
 
         c1.vppctl_exec("set sr encaps source addr A1::1")
         c1.vppctl_exec("sr policy add bsid D4:: next D2:: next D3::")
 
         c1.vppctl_exec("set sr encaps source addr A1::1")
         c1.vppctl_exec("sr policy add bsid D4:: next D2:: next D3::")
-        c1.vppctl_exec("sr policy add bsid D5:: behavior t.m.gtp4.d D4::/32 v6src_prefix C1::/64")
+        c1.vppctl_exec(
+            "sr policy add bsid D5:: behavior t.m.gtp4.d D4::/32 v6src_prefix C1::/64"
+        )
         c1.vppctl_exec("sr steer l3 172.20.0.1/32 via bsid D5::")
 
         c2.vppctl_exec("sr localsid address D2:: behavior end")
         c1.vppctl_exec("sr steer l3 172.20.0.1/32 via bsid D5::")
 
         c2.vppctl_exec("sr localsid address D2:: behavior end")
@@ -1362,8 +1419,8 @@ class Program(object):
         c3.vppctl_exec("sr localsid address D3:: behavior end")
 
         c4.vppctl_exec(
         c3.vppctl_exec("sr localsid address D3:: behavior end")
 
         c4.vppctl_exec(
-            "sr localsid prefix D4::/32 "
-            "behavior end.m.gtp4.e v4src_position 64")
+            "sr localsid prefix D4::/32 " "behavior end.m.gtp4.e v4src_position 64"
+        )
 
         c2.set_ipv6_route("eth2", "A2::2", "D3::/128")
         c2.set_ipv6_route("eth1", "A1::1", "C::/120")
 
         c2.set_ipv6_route("eth2", "A2::2", "D3::/128")
         c2.set_ipv6_route("eth1", "A1::1", "C::/120")
@@ -1371,13 +1428,15 @@ class Program(object):
         c3.set_ipv6_route("eth1", "A2::1", "C::/120")
         c4.set_ip_pgroute("pg0", "1.0.0.1", "172.20.0.1/32")
 
         c3.set_ipv6_route("eth1", "A2::1", "C::/120")
         c4.set_ip_pgroute("pg0", "1.0.0.1", "172.20.0.1/32")
 
-        p = (Ether(src="aa:bb:cc:dd:ee:02", dst="aa:bb:cc:dd:ee:01") /
-             IP(src="172.20.0.2", dst="172.20.0.1") /
-             UDP(sport=2152, dport=2152) /
-             GTP_U_Header(gtp_type="g_pdu", teid=200) /
-             GTPPDUSessionContainer(R=1, QFI=3) /
-             IPv6(src="2001::1", dst="2002::1") /
-             ICMPv6EchoRequest())
+        p = (
+            Ether(src="aa:bb:cc:dd:ee:02", dst="aa:bb:cc:dd:ee:01")
+            / IP(src="172.20.0.2", dst="172.20.0.1")
+            / UDP(sport=2152, dport=2152)
+            / GTP_U_Header(gtp_type="g_pdu", teid=200)
+            / GTPPDUSessionContainer(R=1, QFI=3)
+            / IPv6(src="2001::1", dst="2002::1")
+            / ICMPv6EchoRequest()
+        )
 
         print("Sending packet on {}:".format(c1.name))
         p.show2()
 
         print("Sending packet on {}:".format(c1.name))
         p.show2()
@@ -1419,18 +1478,19 @@ class Program(object):
             local_ip="C::1/120",
             remote_ip="C::2",
             local_mac="aa:bb:cc:dd:ee:01",
             local_ip="C::1/120",
             remote_ip="C::2",
             local_mac="aa:bb:cc:dd:ee:01",
-            remote_mac="aa:bb:cc:dd:ee:02")
+            remote_mac="aa:bb:cc:dd:ee:02",
+        )
         c4.pg_create_interface(
             local_ip="B::1/120",
             remote_ip="B::2",
             local_mac="aa:bb:cc:dd:ee:11",
         c4.pg_create_interface(
             local_ip="B::1/120",
             remote_ip="B::2",
             local_mac="aa:bb:cc:dd:ee:11",
-            remote_mac="aa:bb:cc:dd:ee:22")
+            remote_mac="aa:bb:cc:dd:ee:22",
+        )
 
         c1.vppctl_exec("set sr encaps source addr A1::1")
         c1.vppctl_exec("sr policy add bsid D4:: next D2:: next D3::")
 
 
         c1.vppctl_exec("set sr encaps source addr A1::1")
         c1.vppctl_exec("sr policy add bsid D4:: next D2:: next D3::")
 
-        c1.vppctl_exec(
-            "sr localsid prefix D::/64 behavior end.m.gtp6.d.di D4::/64")
+        c1.vppctl_exec("sr localsid prefix D::/64 behavior end.m.gtp6.d.di D4::/64")
 
         c2.vppctl_exec("sr localsid address D2:: behavior end")
 
 
         c2.vppctl_exec("sr localsid address D2:: behavior end")
 
@@ -1447,12 +1507,14 @@ class Program(object):
         print("Waiting...")
         time.sleep(30)
 
         print("Waiting...")
         time.sleep(30)
 
-        p = (Ether(src="aa:bb:cc:dd:ee:02", dst="aa:bb:cc:dd:ee:01") /
-             IPv6(src="C::2", dst="D::2") /
-             UDP(sport=2152, dport=2152) /
-             GTP_U_Header(gtp_type="g_pdu", teid=200) /
-             IP(src="172.99.0.1", dst="172.99.0.2") /
-             ICMP())
+        p = (
+            Ether(src="aa:bb:cc:dd:ee:02", dst="aa:bb:cc:dd:ee:01")
+            / IPv6(src="C::2", dst="D::2")
+            / UDP(sport=2152, dport=2152)
+            / GTP_U_Header(gtp_type="g_pdu", teid=200)
+            / IP(src="172.99.0.1", dst="172.99.0.2")
+            / ICMP()
+        )
 
         print("Sending packet on {}:".format(c1.name))
         p.show2()
 
         print("Sending packet on {}:".format(c1.name))
         p.show2()
@@ -1494,18 +1556,19 @@ class Program(object):
             local_ip="C::1/120",
             remote_ip="C::2",
             local_mac="aa:bb:cc:dd:ee:01",
             local_ip="C::1/120",
             remote_ip="C::2",
             local_mac="aa:bb:cc:dd:ee:01",
-            remote_mac="aa:bb:cc:dd:ee:02")
+            remote_mac="aa:bb:cc:dd:ee:02",
+        )
         c4.pg_create_interface(
             local_ip="B::1/120",
             remote_ip="B::2",
             local_mac="aa:bb:cc:dd:ee:11",
         c4.pg_create_interface(
             local_ip="B::1/120",
             remote_ip="B::2",
             local_mac="aa:bb:cc:dd:ee:11",
-            remote_mac="aa:bb:cc:dd:ee:22")
+            remote_mac="aa:bb:cc:dd:ee:22",
+        )
 
         c1.vppctl_exec("set sr encaps source addr A1::1")
         c1.vppctl_exec("sr policy add bsid D4:: next D2:: next D3::")
 
 
         c1.vppctl_exec("set sr encaps source addr A1::1")
         c1.vppctl_exec("sr policy add bsid D4:: next D2:: next D3::")
 
-        c1.vppctl_exec(
-            "sr localsid prefix D::/64 behavior end.m.gtp6.d.di D4::/64")
+        c1.vppctl_exec("sr localsid prefix D::/64 behavior end.m.gtp6.d.di D4::/64")
 
         c2.vppctl_exec("sr localsid address D2:: behavior end")
 
 
         c2.vppctl_exec("sr localsid address D2:: behavior end")
 
@@ -1522,13 +1585,15 @@ class Program(object):
         print("Waiting...")
         time.sleep(30)
 
         print("Waiting...")
         time.sleep(30)
 
-        p = (Ether(src="aa:bb:cc:dd:ee:02", dst="aa:bb:cc:dd:ee:01") /
-             IPv6(src="C::2", dst="D::2") /
-             UDP(sport=2152, dport=2152) /
-             GTP_U_Header(gtp_type="g_pdu", teid=200) /
-             GTPPDUSessionContainer(type=1, R=1, QFI=3) /
-             IP(src="172.99.0.1", dst="172.99.0.2") /
-             ICMP())
+        p = (
+            Ether(src="aa:bb:cc:dd:ee:02", dst="aa:bb:cc:dd:ee:01")
+            / IPv6(src="C::2", dst="D::2")
+            / UDP(sport=2152, dport=2152)
+            / GTP_U_Header(gtp_type="g_pdu", teid=200)
+            / GTPPDUSessionContainer(type=1, R=1, QFI=3)
+            / IP(src="172.99.0.1", dst="172.99.0.2")
+            / ICMP()
+        )
 
         print("Sending packet on {}:".format(c1.name))
         p.show2()
 
         print("Sending packet on {}:".format(c1.name))
         p.show2()
@@ -1570,18 +1635,19 @@ class Program(object):
             local_ip="C::1/120",
             remote_ip="C::2",
             local_mac="aa:bb:cc:dd:ee:01",
             local_ip="C::1/120",
             remote_ip="C::2",
             local_mac="aa:bb:cc:dd:ee:01",
-            remote_mac="aa:bb:cc:dd:ee:02")
+            remote_mac="aa:bb:cc:dd:ee:02",
+        )
         c4.pg_create_interface(
             local_ip="B::1/120",
             remote_ip="B::2",
             local_mac="aa:bb:cc:dd:ee:11",
         c4.pg_create_interface(
             local_ip="B::1/120",
             remote_ip="B::2",
             local_mac="aa:bb:cc:dd:ee:11",
-            remote_mac="aa:bb:cc:dd:ee:22")
+            remote_mac="aa:bb:cc:dd:ee:22",
+        )
 
         c1.vppctl_exec("set sr encaps source addr A1::1")
         c1.vppctl_exec("sr policy add bsid D4:: next D2:: next D3::")
 
 
         c1.vppctl_exec("set sr encaps source addr A1::1")
         c1.vppctl_exec("sr policy add bsid D4:: next D2:: next D3::")
 
-        c1.vppctl_exec(
-            "sr localsid prefix D::/64 behavior end.m.gtp6.d.di D4::/64")
+        c1.vppctl_exec("sr localsid prefix D::/64 behavior end.m.gtp6.d.di D4::/64")
 
         c2.vppctl_exec("sr localsid address D2:: behavior end")
 
 
         c2.vppctl_exec("sr localsid address D2:: behavior end")
 
@@ -1598,10 +1664,12 @@ class Program(object):
         print("Waiting...")
         time.sleep(30)
 
         print("Waiting...")
         time.sleep(30)
 
-        p = (Ether(src="aa:bb:cc:dd:ee:02", dst="aa:bb:cc:dd:ee:01") /
-             IPv6(src="C::2", dst="D::2") /
-             UDP(sport=2152, dport=2152) /
-             GTP_U_Header(gtp_type="echo_request", S=1, teid=200, seq=300))
+        p = (
+            Ether(src="aa:bb:cc:dd:ee:02", dst="aa:bb:cc:dd:ee:01")
+            / IPv6(src="C::2", dst="D::2")
+            / UDP(sport=2152, dport=2152)
+            / GTP_U_Header(gtp_type="echo_request", S=1, teid=200, seq=300)
+        )
 
         print("Sending packet on {}:".format(c1.name))
         p.show2()
 
         print("Sending packet on {}:".format(c1.name))
         p.show2()
@@ -1643,18 +1711,19 @@ class Program(object):
             local_ip="C::1/120",
             remote_ip="C::2",
             local_mac="aa:bb:cc:dd:ee:01",
             local_ip="C::1/120",
             remote_ip="C::2",
             local_mac="aa:bb:cc:dd:ee:01",
-            remote_mac="aa:bb:cc:dd:ee:02")
+            remote_mac="aa:bb:cc:dd:ee:02",
+        )
         c4.pg_create_interface(
             local_ip="B::1/120",
             remote_ip="B::2",
             local_mac="aa:bb:cc:dd:ee:11",
         c4.pg_create_interface(
             local_ip="B::1/120",
             remote_ip="B::2",
             local_mac="aa:bb:cc:dd:ee:11",
-            remote_mac="aa:bb:cc:dd:ee:22")
+            remote_mac="aa:bb:cc:dd:ee:22",
+        )
 
         c1.vppctl_exec("set sr encaps source addr A1::1")
         c1.vppctl_exec("sr policy add bsid D4:: next D2:: next D3::")
 
 
         c1.vppctl_exec("set sr encaps source addr A1::1")
         c1.vppctl_exec("sr policy add bsid D4:: next D2:: next D3::")
 
-        c1.vppctl_exec(
-            "sr localsid prefix D::/64 behavior end.m.gtp6.d.di D4::/64")
+        c1.vppctl_exec("sr localsid prefix D::/64 behavior end.m.gtp6.d.di D4::/64")
 
         c2.vppctl_exec("sr localsid address D2:: behavior end")
 
 
         c2.vppctl_exec("sr localsid address D2:: behavior end")
 
@@ -1671,10 +1740,12 @@ class Program(object):
         print("Waiting...")
         time.sleep(30)
 
         print("Waiting...")
         time.sleep(30)
 
-        p = (Ether(src="aa:bb:cc:dd:ee:02", dst="aa:bb:cc:dd:ee:01") /
-             IPv6(src="C::2", dst="D::2") /
-             UDP(sport=2152, dport=2152) /
-             GTP_U_Header(gtp_type="echo_response", S=1, teid=200, seq=300))
+        p = (
+            Ether(src="aa:bb:cc:dd:ee:02", dst="aa:bb:cc:dd:ee:01")
+            / IPv6(src="C::2", dst="D::2")
+            / UDP(sport=2152, dport=2152)
+            / GTP_U_Header(gtp_type="echo_response", S=1, teid=200, seq=300)
+        )
 
         print("Sending packet on {}:".format(c1.name))
         p.show2()
 
         print("Sending packet on {}:".format(c1.name))
         p.show2()
@@ -1716,18 +1787,19 @@ class Program(object):
             local_ip="C::1/120",
             remote_ip="C::2",
             local_mac="aa:bb:cc:dd:ee:01",
             local_ip="C::1/120",
             remote_ip="C::2",
             local_mac="aa:bb:cc:dd:ee:01",
-            remote_mac="aa:bb:cc:dd:ee:02")
+            remote_mac="aa:bb:cc:dd:ee:02",
+        )
         c4.pg_create_interface(
             local_ip="B::1/120",
             remote_ip="B::2",
             local_mac="aa:bb:cc:dd:ee:11",
         c4.pg_create_interface(
             local_ip="B::1/120",
             remote_ip="B::2",
             local_mac="aa:bb:cc:dd:ee:11",
-            remote_mac="aa:bb:cc:dd:ee:22")
+            remote_mac="aa:bb:cc:dd:ee:22",
+        )
 
         c1.vppctl_exec("set sr encaps source addr A1::1")
         c1.vppctl_exec("sr policy add bsid D4:: next D2:: next D3::")
 
 
         c1.vppctl_exec("set sr encaps source addr A1::1")
         c1.vppctl_exec("sr policy add bsid D4:: next D2:: next D3::")
 
-        c1.vppctl_exec(
-            "sr localsid prefix D::/64 behavior end.m.gtp6.d.di D4::/64")
+        c1.vppctl_exec("sr localsid prefix D::/64 behavior end.m.gtp6.d.di D4::/64")
 
         c2.vppctl_exec("sr localsid address D2:: behavior end")
 
 
         c2.vppctl_exec("sr localsid address D2:: behavior end")
 
@@ -1744,12 +1816,15 @@ class Program(object):
         print("Waiting...")
         time.sleep(30)
 
         print("Waiting...")
         time.sleep(30)
 
-        p = (Ether(src="aa:bb:cc:dd:ee:02", dst="aa:bb:cc:dd:ee:01") /
-             IPv6(src="C::2", dst="D::2") /
-             UDP(sport=2152, dport=2152) /
-             GTP_U_Header(gtp_type="error_indication", S=1, teid=200, seq=300)/
-             IE_TEIDI(TEIDI=65535)/IE_GSNAddress(address="1.1.1.1")/
-             IE_PrivateExtension(extention_value="z"))
+        p = (
+            Ether(src="aa:bb:cc:dd:ee:02", dst="aa:bb:cc:dd:ee:01")
+            / IPv6(src="C::2", dst="D::2")
+            / UDP(sport=2152, dport=2152)
+            / GTP_U_Header(gtp_type="error_indication", S=1, teid=200, seq=300)
+            / IE_TEIDI(TEIDI=65535)
+            / IE_GSNAddress(address="1.1.1.1")
+            / IE_PrivateExtension(extention_value="z")
+        )
 
         print("Sending packet on {}:".format(c1.name))
         p.show2()
 
         print("Sending packet on {}:".format(c1.name))
         p.show2()
@@ -1791,18 +1866,19 @@ class Program(object):
             local_ip="C::1/120",
             remote_ip="C::2",
             local_mac="aa:bb:cc:dd:ee:01",
             local_ip="C::1/120",
             remote_ip="C::2",
             local_mac="aa:bb:cc:dd:ee:01",
-            remote_mac="aa:bb:cc:dd:ee:02")
+            remote_mac="aa:bb:cc:dd:ee:02",
+        )
         c4.pg_create_interface(
             local_ip="B::1/120",
             remote_ip="B::2",
             local_mac="aa:bb:cc:dd:ee:11",
         c4.pg_create_interface(
             local_ip="B::1/120",
             remote_ip="B::2",
             local_mac="aa:bb:cc:dd:ee:11",
-            remote_mac="aa:bb:cc:dd:ee:22")
+            remote_mac="aa:bb:cc:dd:ee:22",
+        )
 
         c1.vppctl_exec("set sr encaps source addr A1::1")
         c1.vppctl_exec("sr policy add bsid D4:: next D2:: next D3::")
 
 
         c1.vppctl_exec("set sr encaps source addr A1::1")
         c1.vppctl_exec("sr policy add bsid D4:: next D2:: next D3::")
 
-        c1.vppctl_exec(
-            "sr localsid prefix D::/64 behavior end.m.gtp6.d.di D4::/64")
+        c1.vppctl_exec("sr localsid prefix D::/64 behavior end.m.gtp6.d.di D4::/64")
 
         c2.vppctl_exec("sr localsid address D2:: behavior end")
 
 
         c2.vppctl_exec("sr localsid address D2:: behavior end")
 
@@ -1819,12 +1895,14 @@ class Program(object):
         print("Waiting...")
         time.sleep(30)
 
         print("Waiting...")
         time.sleep(30)
 
-        p = (Ether(src="aa:bb:cc:dd:ee:02", dst="aa:bb:cc:dd:ee:01") /
-             IPv6(src="C::2", dst="D::2") /
-             UDP(sport=2152, dport=2152) /
-             GTP_U_Header(gtp_type="g_pdu", teid=200) /
-             IPv6(src="2001::1", dst="2002::1") /
-             ICMPv6EchoRequest())
+        p = (
+            Ether(src="aa:bb:cc:dd:ee:02", dst="aa:bb:cc:dd:ee:01")
+            / IPv6(src="C::2", dst="D::2")
+            / UDP(sport=2152, dport=2152)
+            / GTP_U_Header(gtp_type="g_pdu", teid=200)
+            / IPv6(src="2001::1", dst="2002::1")
+            / ICMPv6EchoRequest()
+        )
 
         print("Sending packet on {}:".format(c1.name))
         p.show2()
 
         print("Sending packet on {}:".format(c1.name))
         p.show2()
@@ -1866,18 +1944,19 @@ class Program(object):
             local_ip="C::1/120",
             remote_ip="C::2",
             local_mac="aa:bb:cc:dd:ee:01",
             local_ip="C::1/120",
             remote_ip="C::2",
             local_mac="aa:bb:cc:dd:ee:01",
-            remote_mac="aa:bb:cc:dd:ee:02")
+            remote_mac="aa:bb:cc:dd:ee:02",
+        )
         c4.pg_create_interface(
             local_ip="B::1/120",
             remote_ip="B::2",
             local_mac="aa:bb:cc:dd:ee:11",
         c4.pg_create_interface(
             local_ip="B::1/120",
             remote_ip="B::2",
             local_mac="aa:bb:cc:dd:ee:11",
-            remote_mac="aa:bb:cc:dd:ee:22")
+            remote_mac="aa:bb:cc:dd:ee:22",
+        )
 
         c1.vppctl_exec("set sr encaps source addr A1::1")
         c1.vppctl_exec("sr policy add bsid D4:: next D2:: next D3::")
 
 
         c1.vppctl_exec("set sr encaps source addr A1::1")
         c1.vppctl_exec("sr policy add bsid D4:: next D2:: next D3::")
 
-        c1.vppctl_exec(
-            "sr localsid prefix D::/64 behavior end.m.gtp6.d.di D4::/64")
+        c1.vppctl_exec("sr localsid prefix D::/64 behavior end.m.gtp6.d.di D4::/64")
 
         c2.vppctl_exec("sr localsid address D2:: behavior end")
 
 
         c2.vppctl_exec("sr localsid address D2:: behavior end")
 
@@ -1894,13 +1973,15 @@ class Program(object):
         print("Waiting...")
         time.sleep(30)
 
         print("Waiting...")
         time.sleep(30)
 
-        p = (Ether(src="aa:bb:cc:dd:ee:02", dst="aa:bb:cc:dd:ee:01") /
-             IPv6(src="C::2", dst="D::2") /
-             UDP(sport=2152, dport=2152) /
-             GTP_U_Header(gtp_type="g_pdu", teid=200) /
-             GTPPDUSessionContainer(R=1, QFI=3) /
-             IPv6(src="2001::1", dst="2002::1") /
-             ICMPv6EchoRequest())
+        p = (
+            Ether(src="aa:bb:cc:dd:ee:02", dst="aa:bb:cc:dd:ee:01")
+            / IPv6(src="C::2", dst="D::2")
+            / UDP(sport=2152, dport=2152)
+            / GTP_U_Header(gtp_type="g_pdu", teid=200)
+            / GTPPDUSessionContainer(R=1, QFI=3)
+            / IPv6(src="2001::1", dst="2002::1")
+            / ICMPv6EchoRequest()
+        )
 
         print("Sending packet on {}:".format(c1.name))
         p.show2()
 
         print("Sending packet on {}:".format(c1.name))
         p.show2()
@@ -1942,18 +2023,19 @@ class Program(object):
             local_ip="C::1/120",
             remote_ip="C::2",
             local_mac="aa:bb:cc:dd:ee:01",
             local_ip="C::1/120",
             remote_ip="C::2",
             local_mac="aa:bb:cc:dd:ee:01",
-            remote_mac="aa:bb:cc:dd:ee:02")
+            remote_mac="aa:bb:cc:dd:ee:02",
+        )
         c4.pg_create_interface4(
             local_ip="1.0.0.2/30",
             remote_ip="1.0.0.1",
             local_mac="aa:bb:cc:dd:ee:11",
         c4.pg_create_interface4(
             local_ip="1.0.0.2/30",
             remote_ip="1.0.0.1",
             local_mac="aa:bb:cc:dd:ee:11",
-            remote_mac="aa:bb:cc:dd:ee:22")
+            remote_mac="aa:bb:cc:dd:ee:22",
+        )
 
         c1.vppctl_exec("set sr encaps source addr A1::1")
         c1.vppctl_exec("sr policy add bsid D4:: next D2:: next D3::")
 
 
         c1.vppctl_exec("set sr encaps source addr A1::1")
         c1.vppctl_exec("sr policy add bsid D4:: next D2:: next D3::")
 
-        c1.vppctl_exec(
-            "sr localsid prefix D::/64 behavior end.m.gtp6.d D4::/64")
+        c1.vppctl_exec("sr localsid prefix D::/64 behavior end.m.gtp6.d D4::/64")
 
         c2.vppctl_exec("sr localsid address D2:: behavior end")
 
 
         c2.vppctl_exec("sr localsid address D2:: behavior end")
 
@@ -1971,12 +2053,14 @@ class Program(object):
         print("Waiting...")
         time.sleep(30)
 
         print("Waiting...")
         time.sleep(30)
 
-        p = (Ether(src="aa:bb:cc:dd:ee:02", dst="aa:bb:cc:dd:ee:01") /
-             IPv6(src="C::2", dst="D::2") /
-             UDP(sport=2152, dport=2152) /
-             GTP_U_Header(gtp_type="g_pdu", teid=200) /
-             IP(src="172.100.0.1", dst="172.200.0.1") /
-             ICMP())
+        p = (
+            Ether(src="aa:bb:cc:dd:ee:02", dst="aa:bb:cc:dd:ee:01")
+            / IPv6(src="C::2", dst="D::2")
+            / UDP(sport=2152, dport=2152)
+            / GTP_U_Header(gtp_type="g_pdu", teid=200)
+            / IP(src="172.100.0.1", dst="172.200.0.1")
+            / ICMP()
+        )
 
         print("Sending packet on {}:".format(c1.name))
         p.show2()
 
         print("Sending packet on {}:".format(c1.name))
         p.show2()
@@ -2018,18 +2102,19 @@ class Program(object):
             local_ip="C::1/120",
             remote_ip="C::2",
             local_mac="aa:bb:cc:dd:ee:01",
             local_ip="C::1/120",
             remote_ip="C::2",
             local_mac="aa:bb:cc:dd:ee:01",
-            remote_mac="aa:bb:cc:dd:ee:02")
+            remote_mac="aa:bb:cc:dd:ee:02",
+        )
         c4.pg_create_interface4(
             local_ip="1.0.0.2/30",
             remote_ip="1.0.0.1",
             local_mac="aa:bb:cc:dd:ee:11",
         c4.pg_create_interface4(
             local_ip="1.0.0.2/30",
             remote_ip="1.0.0.1",
             local_mac="aa:bb:cc:dd:ee:11",
-            remote_mac="aa:bb:cc:dd:ee:22")
+            remote_mac="aa:bb:cc:dd:ee:22",
+        )
 
         c1.vppctl_exec("set sr encaps source addr A1::1")
         c1.vppctl_exec("sr policy add bsid D4:: next D2:: next D3::")
 
 
         c1.vppctl_exec("set sr encaps source addr A1::1")
         c1.vppctl_exec("sr policy add bsid D4:: next D2:: next D3::")
 
-        c1.vppctl_exec(
-            "sr localsid prefix D::/64 behavior end.m.gtp6.d D4::/64")
+        c1.vppctl_exec("sr localsid prefix D::/64 behavior end.m.gtp6.d D4::/64")
 
         c2.vppctl_exec("sr localsid address D2:: behavior end")
 
 
         c2.vppctl_exec("sr localsid address D2:: behavior end")
 
@@ -2047,13 +2132,15 @@ class Program(object):
         print("Waiting...")
         time.sleep(30)
 
         print("Waiting...")
         time.sleep(30)
 
-        p = (Ether(src="aa:bb:cc:dd:ee:02", dst="aa:bb:cc:dd:ee:01") /
-             IPv6(src="C::2", dst="D::2") /
-             UDP(sport=2152, dport=2152) /
-             GTP_U_Header(gtp_type="g_pdu", teid=200) /
-             GTPPDUSessionContainer(R=1, QFI=3) /
-             IP(src="172.100.0.1", dst="172.200.0.1") /
-             ICMP())
+        p = (
+            Ether(src="aa:bb:cc:dd:ee:02", dst="aa:bb:cc:dd:ee:01")
+            / IPv6(src="C::2", dst="D::2")
+            / UDP(sport=2152, dport=2152)
+            / GTP_U_Header(gtp_type="g_pdu", teid=200)
+            / GTPPDUSessionContainer(R=1, QFI=3)
+            / IP(src="172.100.0.1", dst="172.200.0.1")
+            / ICMP()
+        )
 
         print("Sending packet on {}:".format(c1.name))
         p.show2()
 
         print("Sending packet on {}:".format(c1.name))
         p.show2()
@@ -2095,18 +2182,19 @@ class Program(object):
             local_ip="C::1/120",
             remote_ip="C::2",
             local_mac="aa:bb:cc:dd:ee:01",
             local_ip="C::1/120",
             remote_ip="C::2",
             local_mac="aa:bb:cc:dd:ee:01",
-            remote_mac="aa:bb:cc:dd:ee:02")
+            remote_mac="aa:bb:cc:dd:ee:02",
+        )
         c4.pg_create_interface(
             local_ip="B::1/120",
             remote_ip="B::2",
             local_mac="aa:bb:cc:dd:ee:11",
         c4.pg_create_interface(
             local_ip="B::1/120",
             remote_ip="B::2",
             local_mac="aa:bb:cc:dd:ee:11",
-            remote_mac="aa:bb:cc:dd:ee:22")
+            remote_mac="aa:bb:cc:dd:ee:22",
+        )
 
         c1.vppctl_exec("set sr encaps source addr A1::1")
         c1.vppctl_exec("sr policy add bsid D4:: next D2:: next D3::")
 
 
         c1.vppctl_exec("set sr encaps source addr A1::1")
         c1.vppctl_exec("sr policy add bsid D4:: next D2:: next D3::")
 
-        c1.vppctl_exec(
-            "sr localsid prefix D::/64 behavior end.m.gtp6.d D4::/64")
+        c1.vppctl_exec("sr localsid prefix D::/64 behavior end.m.gtp6.d D4::/64")
 
         c2.vppctl_exec("sr localsid address D2:: behavior end")
 
 
         c2.vppctl_exec("sr localsid address D2:: behavior end")
 
@@ -2124,12 +2212,14 @@ class Program(object):
         print("Waiting...")
         time.sleep(30)
 
         print("Waiting...")
         time.sleep(30)
 
-        p = (Ether(src="aa:bb:cc:dd:ee:02", dst="aa:bb:cc:dd:ee:01") /
-             IPv6(src="C::2", dst="D::2") /
-             UDP(sport=2152, dport=2152) /
-             GTP_U_Header(gtp_type="g_pdu", teid=200) /
-             IPv6(src="2001::1", dst="2002::1") /
-             ICMPv6EchoRequest())
+        p = (
+            Ether(src="aa:bb:cc:dd:ee:02", dst="aa:bb:cc:dd:ee:01")
+            / IPv6(src="C::2", dst="D::2")
+            / UDP(sport=2152, dport=2152)
+            / GTP_U_Header(gtp_type="g_pdu", teid=200)
+            / IPv6(src="2001::1", dst="2002::1")
+            / ICMPv6EchoRequest()
+        )
 
         print("Sending packet on {}:".format(c1.name))
         p.show2()
 
         print("Sending packet on {}:".format(c1.name))
         p.show2()
@@ -2171,18 +2261,19 @@ class Program(object):
             local_ip="C::1/120",
             remote_ip="C::2",
             local_mac="aa:bb:cc:dd:ee:01",
             local_ip="C::1/120",
             remote_ip="C::2",
             local_mac="aa:bb:cc:dd:ee:01",
-            remote_mac="aa:bb:cc:dd:ee:02")
+            remote_mac="aa:bb:cc:dd:ee:02",
+        )
         c4.pg_create_interface(
             local_ip="B::1/120",
             remote_ip="B::2",
             local_mac="aa:bb:cc:dd:ee:11",
         c4.pg_create_interface(
             local_ip="B::1/120",
             remote_ip="B::2",
             local_mac="aa:bb:cc:dd:ee:11",
-            remote_mac="aa:bb:cc:dd:ee:22")
+            remote_mac="aa:bb:cc:dd:ee:22",
+        )
 
         c1.vppctl_exec("set sr encaps source addr A1::1")
         c1.vppctl_exec("sr policy add bsid D4:: next D2:: next D3::")
 
 
         c1.vppctl_exec("set sr encaps source addr A1::1")
         c1.vppctl_exec("sr policy add bsid D4:: next D2:: next D3::")
 
-        c1.vppctl_exec(
-            "sr localsid prefix D::/64 behavior end.m.gtp6.d D4::/64")
+        c1.vppctl_exec("sr localsid prefix D::/64 behavior end.m.gtp6.d D4::/64")
 
         c2.vppctl_exec("sr localsid address D2:: behavior end")
 
 
         c2.vppctl_exec("sr localsid address D2:: behavior end")
 
@@ -2200,13 +2291,15 @@ class Program(object):
         print("Waiting...")
         time.sleep(30)
 
         print("Waiting...")
         time.sleep(30)
 
-        p = (Ether(src="aa:bb:cc:dd:ee:02", dst="aa:bb:cc:dd:ee:01") /
-             IPv6(src="C::2", dst="D::2") /
-             UDP(sport=2152, dport=2152) /
-             GTP_U_Header(gtp_type="g_pdu", teid=200) /
-             GTPPDUSessionContainer(R=1, QFI=3) /
-             IPv6(src="2001::1", dst="2002::1") /
-             ICMPv6EchoRequest())
+        p = (
+            Ether(src="aa:bb:cc:dd:ee:02", dst="aa:bb:cc:dd:ee:01")
+            / IPv6(src="C::2", dst="D::2")
+            / UDP(sport=2152, dport=2152)
+            / GTP_U_Header(gtp_type="g_pdu", teid=200)
+            / GTPPDUSessionContainer(R=1, QFI=3)
+            / IPv6(src="2001::1", dst="2002::1")
+            / ICMPv6EchoRequest()
+        )
 
         print("Sending packet on {}:".format(c1.name))
         p.show2()
 
         print("Sending packet on {}:".format(c1.name))
         p.show2()
@@ -2246,19 +2339,22 @@ class Program(object):
             local_ip="C::1/120",
             remote_ip="C::2",
             local_mac="aa:bb:cc:dd:ee:01",
             local_ip="C::1/120",
             remote_ip="C::2",
             local_mac="aa:bb:cc:dd:ee:01",
-            remote_mac="aa:bb:cc:dd:ee:02")
+            remote_mac="aa:bb:cc:dd:ee:02",
+        )
 
         c1.pg_create_interface4_name(
             ifname="pg1",
             local_ip="1.0.0.2/30",
             remote_ip="1.0.0.1",
             local_mac="aa:bb:cc:dd:ee:11",
 
         c1.pg_create_interface4_name(
             ifname="pg1",
             local_ip="1.0.0.2/30",
             remote_ip="1.0.0.1",
             local_mac="aa:bb:cc:dd:ee:11",
-            remote_mac="aa:bb:cc:dd:ee:22")
+            remote_mac="aa:bb:cc:dd:ee:22",
+        )
 
         c1.vppctl_exec("set sr encaps source addr A1::1")
 
         c1.vppctl_exec(
 
         c1.vppctl_exec("set sr encaps source addr A1::1")
 
         c1.vppctl_exec(
-            "sr localsid prefix D::/64 behavior end.m.gtp6.dt46 fib-table 0 local-fib-table 0")
+            "sr localsid prefix D::/64 behavior end.m.gtp6.dt46 fib-table 0 local-fib-table 0"
+        )
 
         c1.vppctl_exec("set ip neighbor pg1 1.0.0.1 aa:bb:cc:dd:ee:22")
         c1.set_ip_pgroute("pg1", "1.0.0.1", "172.200.0.1/32")
 
         c1.vppctl_exec("set ip neighbor pg1 1.0.0.1 aa:bb:cc:dd:ee:22")
         c1.set_ip_pgroute("pg1", "1.0.0.1", "172.200.0.1/32")
@@ -2266,12 +2362,14 @@ class Program(object):
         print("Waiting...")
         time.sleep(30)
 
         print("Waiting...")
         time.sleep(30)
 
-        p = (Ether(src="aa:bb:cc:dd:ee:02", dst="aa:bb:cc:dd:ee:01") /
-             IPv6(src="C::2", dst="D::2") /
-             UDP(sport=2152, dport=2152) /
-             GTP_U_Header(gtp_type="g_pdu", teid=200) /
-             IP(src="172.100.0.1", dst="172.200.0.1") /
-             ICMP())
+        p = (
+            Ether(src="aa:bb:cc:dd:ee:02", dst="aa:bb:cc:dd:ee:01")
+            / IPv6(src="C::2", dst="D::2")
+            / UDP(sport=2152, dport=2152)
+            / GTP_U_Header(gtp_type="g_pdu", teid=200)
+            / IP(src="172.100.0.1", dst="172.200.0.1")
+            / ICMP()
+        )
 
         print("Sending packet on {}:".format(c1.name))
         p.show2()
 
         print("Sending packet on {}:".format(c1.name))
         p.show2()
@@ -2310,14 +2408,16 @@ class Program(object):
             local_ip="172.16.0.1/30",
             remote_ip="172.16.0.2",
             local_mac="aa:bb:cc:dd:ee:01",
             local_ip="172.16.0.1/30",
             remote_ip="172.16.0.2",
             local_mac="aa:bb:cc:dd:ee:01",
-            remote_mac="aa:bb:cc:dd:ee:02")
+            remote_mac="aa:bb:cc:dd:ee:02",
+        )
 
         c1.pg_create_interface4_name(
             ifname="pg1",
             local_ip="1.0.0.2/30",
             remote_ip="1.0.0.1",
             local_mac="aa:bb:cc:dd:ee:11",
 
         c1.pg_create_interface4_name(
             ifname="pg1",
             local_ip="1.0.0.2/30",
             remote_ip="1.0.0.1",
             local_mac="aa:bb:cc:dd:ee:11",
-            remote_mac="aa:bb:cc:dd:ee:22")
+            remote_mac="aa:bb:cc:dd:ee:22",
+        )
 
         c1.vppctl_exec("set sr encaps source addr A1::1")
         c1.vppctl_exec("sr policy add bsid D5:: behavior t.m.gtp4.dt4 fib-table 0")
 
         c1.vppctl_exec("set sr encaps source addr A1::1")
         c1.vppctl_exec("sr policy add bsid D5:: behavior t.m.gtp4.dt4 fib-table 0")
@@ -2329,12 +2429,14 @@ class Program(object):
         print("Waiting...")
         time.sleep(30)
 
         print("Waiting...")
         time.sleep(30)
 
-        p = (Ether(src="aa:bb:cc:dd:ee:02", dst="aa:bb:cc:dd:ee:01") /
-             IP(src="172.20.0.2", dst="172.20.0.1") /
-             UDP(sport=2152, dport=2152) /
-             GTP_U_Header(gtp_type="g_pdu", teid=200) /
-             IP(src="172.100.0.1", dst="172.200.0.1") /
-             ICMP())
+        p = (
+            Ether(src="aa:bb:cc:dd:ee:02", dst="aa:bb:cc:dd:ee:01")
+            / IP(src="172.20.0.2", dst="172.20.0.1")
+            / UDP(sport=2152, dport=2152)
+            / GTP_U_Header(gtp_type="g_pdu", teid=200)
+            / IP(src="172.100.0.1", dst="172.200.0.1")
+            / ICMP()
+        )
 
         print("Sending packet on {}:".format(c1.name))
         p.show2()
 
         print("Sending packet on {}:".format(c1.name))
         p.show2()
@@ -2360,17 +2462,21 @@ class Program(object):
 
         for i, name in enumerate(self.instance_names):
             name = self.get_name(name)
 
         for i, name in enumerate(self.instance_names):
             name = self.get_name(name)
-            print("\t[{}] {} - {}".format(
-                i, name,
-                "running" if self.containers.get(name) else "missing"))
+            print(
+                "\t[{}] {} - {}".format(
+                    i, name, "running" if self.containers.get(name) else "missing"
+                )
+            )
 
         print("Networks:")
 
         for i, name in enumerate(self.network_names):
             name = self.get_name(name)
 
         print("Networks:")
 
         for i, name in enumerate(self.network_names):
             name = self.get_name(name)
-            print("\t[{}] {} - {}".format(
-                i, name,
-                "running" if self.networks.get(name) else "missing"))
+            print(
+                "\t[{}] {} - {}".format(
+                    i, name, "running" if self.networks.get(name) else "missing"
+                )
+            )
 
     def build_image(self):
         print("VPP Path (build): {}".format(self.vpp_path))
 
     def build_image(self):
         print("VPP Path (build): {}".format(self.vpp_path))
@@ -2382,7 +2488,9 @@ class Program(object):
 
         system(
             "docker cp release-build:{}/vpp-package.tgz {}/".format(
 
         system(
             "docker cp release-build:{}/vpp-package.tgz {}/".format(
-                self.vpp_path, self.vpp_path))
+                self.vpp_path, self.vpp_path
+            )
+        )
 
         instance.rem()
 
 
         instance.rem()
 
@@ -2408,39 +2516,30 @@ class Program(object):
 def get_args():
     parser = ArgumentParser()
 
 def get_args():
     parser = ArgumentParser()
 
-    parser.add_argument("--verbose", choices=['error', 'debug', 'info'])
+    parser.add_argument("--verbose", choices=["error", "debug", "info"])
 
 
-    parser.add_argument('--image', choices=['debug', 'release'])
+    parser.add_argument("--image", choices=["debug", "release"])
 
     subparsers = parser.add_subparsers()
 
 
     subparsers = parser.add_subparsers()
 
-    p1 = subparsers.add_parser(
-        "infra", help="Infrastructure related commands.")
+    p1 = subparsers.add_parser("infra", help="Infrastructure related commands.")
 
     p1.add_argument(
 
     p1.add_argument(
-        "op",
-        choices=[
-            'stop',
-            'start',
-            'status',
-            'restart',
-            'build',
-            'release'])
+        "op", choices=["stop", "start", "status", "restart", "build", "release"]
+    )
 
     p1.add_argument("--prefix")
     p1.add_argument("--image")
 
     p2 = subparsers.add_parser("cmd", help="Instance related commands.")
 
 
     p1.add_argument("--prefix")
     p1.add_argument("--image")
 
     p2 = subparsers.add_parser("cmd", help="Instance related commands.")
 
-    p2.add_argument("op", choices=['vppctl', 'bash'])
+    p2.add_argument("op", choices=["vppctl", "bash"])
 
     p2.add_argument(
 
     p2.add_argument(
-        "index",
-        type=int,
-        help="Container instance index. (./runner.py infra status)")
+        "index", type=int, help="Container instance index. (./runner.py infra status)"
+    )
 
 
-    p2.add_argument(
-        "--command", help="Only vppctl supports this optional argument.")
+    p2.add_argument("--command", help="Only vppctl supports this optional argument.")
 
     p3 = subparsers.add_parser("test", help="Test related commands.")
 
 
     p3 = subparsers.add_parser("test", help="Test related commands.")
 
@@ -2473,7 +2572,9 @@ def get_args():
             "gtp6_ipv6",
             "gtp6_ipv6_5g",
             "gtp6_dt",
             "gtp6_ipv6",
             "gtp6_ipv6_5g",
             "gtp6_dt",
-            "gtp4_dt"])
+            "gtp4_dt",
+        ],
+    )
 
     args = parser.parse_args()
     if not hasattr(args, "op") or not args.op:
 
     args = parser.parse_args()
     if not hasattr(args, "op") or not args.op:
@@ -2483,15 +2584,14 @@ def get_args():
     return vars(args)
 
 
     return vars(args)
 
 
-def main(op=None, prefix=None, verbose=None,
-         image=None, index=None, command=None):
+def main(op=None, prefix=None, verbose=None, image=None, index=None, command=None):
 
     if verbose:
         basicConfig(level=verbose_levels[verbose])
 
 
     if verbose:
         basicConfig(level=verbose_levels[verbose])
 
-    if image == 'release':
+    if image == "release":
         image = "srv6m-release-image"
         image = "srv6m-release-image"
-    elif image == 'debug':
+    elif image == "debug":
         image = "srv6m-image"
     else:
         image = "srv6m-image"
         image = "srv6m-image"
     else:
         image = "srv6m-image"
@@ -2501,23 +2601,23 @@ def main(op=None, prefix=None, verbose=None,
     program = Program(image, prefix)
 
     try:
     program = Program(image, prefix)
 
     try:
-        if op == 'build':
+        if op == "build":
             program.build_image()
             program.build_image()
-        elif op == 'release':
+        elif op == "release":
             program.release_image()
             program.release_image()
-        elif op == 'stop':
+        elif op == "stop":
             program.stop_containers()
             program.stop_containers()
-        elif op == 'start':
+        elif op == "start":
             program.start_containers()
             program.start_containers()
-        elif op == 'status':
+        elif op == "status":
             program.status_containers()
             program.status_containers()
-        elif op == 'vppctl':
+        elif op == "vppctl":
             program.vppctl(index, command)
             program.vppctl(index, command)
-        elif op == 'bash':
+        elif op == "bash":
             program.bash(index)
             program.bash(index)
-        elif op == 'ping':
+        elif op == "ping":
             program.test_ping()
             program.test_ping()
-        elif op == 'srv6':
+        elif op == "srv6":
             program.test_srv6()
         # elif op == 'tmap':
         #    program.test_tmap()
             program.test_srv6()
         # elif op == 'tmap':
         #    program.test_tmap()
@@ -2527,47 +2627,47 @@ def main(op=None, prefix=None, verbose=None,
         #    program.test_tmap_ipv6()
         # elif op == 'tmap_ipv6_5g':
         #    program.test_tmap_ipv6_5g()
         #    program.test_tmap_ipv6()
         # elif op == 'tmap_ipv6_5g':
         #    program.test_tmap_ipv6_5g()
-        elif op == 'gtp4':
+        elif op == "gtp4":
             program.test_gtp4()
             program.test_gtp4()
-        elif op == 'gtp4_usid':
+        elif op == "gtp4_usid":
             program.test_gtp4_usid()
             program.test_gtp4_usid()
-        elif op == 'gtp4_5g':
+        elif op == "gtp4_5g":
             program.test_gtp4_5g()
             program.test_gtp4_5g()
-        elif op == 'gtp4_echo':
+        elif op == "gtp4_echo":
             program.test_gtp4_echo()
             program.test_gtp4_echo()
-        elif op == 'gtp4_reply':
+        elif op == "gtp4_reply":
             program.test_gtp4_reply()
             program.test_gtp4_reply()
-        elif op == 'gtp4_error':
+        elif op == "gtp4_error":
             program.test_gtp4_error()
             program.test_gtp4_error()
-        elif op == 'gtp4_ipv6':
+        elif op == "gtp4_ipv6":
             program.test_gtp4_ipv6()
             program.test_gtp4_ipv6()
-        elif op == 'gtp4_ipv6_5g':
+        elif op == "gtp4_ipv6_5g":
             program.test_gtp4_ipv6_5g()
             program.test_gtp4_ipv6_5g()
-        elif op == 'gtp6_drop_in':
+        elif op == "gtp6_drop_in":
             program.test_gtp6_drop_in()
             program.test_gtp6_drop_in()
-        elif op == 'gtp6_drop_in_5g':
+        elif op == "gtp6_drop_in_5g":
             program.test_gtp6_drop_in_5g()
             program.test_gtp6_drop_in_5g()
-        elif op == 'gtp6_drop_in_echo':
+        elif op == "gtp6_drop_in_echo":
             program.test_gtp6_drop_in_echo()
             program.test_gtp6_drop_in_echo()
-        elif op == 'gtp6_drop_in_reply':
+        elif op == "gtp6_drop_in_reply":
             program.test_gtp6_drop_in_reply()
             program.test_gtp6_drop_in_reply()
-        elif op == 'gtp6_drop_in_error':
+        elif op == "gtp6_drop_in_error":
             program.test_gtp6_drop_in_error()
             program.test_gtp6_drop_in_error()
-        elif op == 'gtp6_drop_in_ipv6':
+        elif op == "gtp6_drop_in_ipv6":
             program.test_gtp6_drop_in_ipv6()
             program.test_gtp6_drop_in_ipv6()
-        elif op == 'gtp6_drop_in_ipv6_5g':
+        elif op == "gtp6_drop_in_ipv6_5g":
             program.test_gtp6_drop_in_ipv6_5g()
             program.test_gtp6_drop_in_ipv6_5g()
-        elif op == 'gtp6':
+        elif op == "gtp6":
             program.test_gtp6()
             program.test_gtp6()
-        elif op == 'gtp6_5g':
+        elif op == "gtp6_5g":
             program.test_gtp6_5g()
             program.test_gtp6_5g()
-        elif op == 'gtp6_ipv6':
+        elif op == "gtp6_ipv6":
             program.test_gtp6_ipv6()
             program.test_gtp6_ipv6()
-        elif op == 'gtp6_ipv6_5g':
+        elif op == "gtp6_ipv6_5g":
             program.test_gtp6_ipv6_5g()
             program.test_gtp6_ipv6_5g()
-        elif op == 'gtp6_dt':
+        elif op == "gtp6_dt":
             program.test_gtp6_dt()
             program.test_gtp6_dt()
-        elif op == 'gtp4_dt':
+        elif op == "gtp4_dt":
             program.test_gtp4_dt()
 
     except Exception:
             program.test_gtp4_dt()
 
     except Exception:
index f2b877f..e8ff477 100755 (executable)
@@ -21,25 +21,28 @@ schema = {
         "name": {"type": "string"},
         "description": {"type": "string"},
         "maintainer": {"$ref": "#/definitions/maintainers"},
         "name": {"type": "string"},
         "description": {"type": "string"},
         "maintainer": {"$ref": "#/definitions/maintainers"},
-        "state": {"type": "string",
-                  "enum": ["production", "experimental", "development"]},
+        "state": {
+            "type": "string",
+            "enum": ["production", "experimental", "development"],
+        },
         "features": {"$ref": "#/definitions/features"},
         "missing": {"$ref": "#/definitions/features"},
         "features": {"$ref": "#/definitions/features"},
         "missing": {"$ref": "#/definitions/features"},
-        "properties": {"type": "array",
-                       "items": {"type": "string",
-                                 "enum": ["API", "CLI", "STATS",
-                                          "MULTITHREAD"]},
-                       },
+        "properties": {
+            "type": "array",
+            "items": {"type": "string", "enum": ["API", "CLI", "STATS", "MULTITHREAD"]},
+        },
     },
     "additionalProperties": False,
     "definitions": {
         "maintainers": {
     },
     "additionalProperties": False,
     "definitions": {
         "maintainers": {
-            "anyof": [{
-                "type": "array",
-                "items": {"type": "string"},
-                "minItems": 1,
-            },
-                {"type": "string"}],
+            "anyof": [
+                {
+                    "type": "array",
+                    "items": {"type": "string"},
+                    "minItems": 1,
+                },
+                {"type": "string"},
+            ],
         },
         "featureobject": {
             "type": "object",
         },
         "featureobject": {
             "type": "object",
@@ -49,9 +52,12 @@ schema = {
         },
         "features": {
             "type": "array",
         },
         "features": {
             "type": "array",
-            "items": {"anyOf": [{"$ref": "#/definitions/featureobject"},
-                                {"type": "string"},
-                                ]},
+            "items": {
+                "anyOf": [
+                    {"$ref": "#/definitions/featureobject"},
+                    {"type": "string"},
+                ]
+            },
             "minItems": 1,
         },
     },
             "minItems": 1,
         },
     },
@@ -59,14 +65,15 @@ schema = {
 
 DEFAULT_REPO_LINK = "https://github.com/FDio/vpp/blob/master/"
 
 
 DEFAULT_REPO_LINK = "https://github.com/FDio/vpp/blob/master/"
 
+
 def filelist_from_git_status():
     filelist = []
 def filelist_from_git_status():
     filelist = []
-    git_status = 'git status --porcelain */FEATURE*.yaml'
+    git_status = "git status --porcelain */FEATURE*.yaml"
     rv = run(git_status.split(), stdout=PIPE, stderr=PIPE)
     if rv.returncode != 0:
         sys.exit(rv.returncode)
 
     rv = run(git_status.split(), stdout=PIPE, stderr=PIPE)
     if rv.returncode != 0:
         sys.exit(rv.returncode)
 
-    for l in rv.stdout.decode('ascii').split('\n'):
+    for l in rv.stdout.decode("ascii").split("\n"):
         if len(l):
             filelist.append(l.split()[1])
     return filelist
         if len(l):
             filelist.append(l.split()[1])
     return filelist
@@ -74,24 +81,26 @@ def filelist_from_git_status():
 
 def filelist_from_git_ls():
     filelist = []
 
 def filelist_from_git_ls():
     filelist = []
-    git_ls = 'git ls-files :(top)*/FEATURE*.yaml'
+    git_ls = "git ls-files :(top)*/FEATURE*.yaml"
     rv = run(git_ls.split(), stdout=PIPE, stderr=PIPE)
     if rv.returncode != 0:
         sys.exit(rv.returncode)
 
     rv = run(git_ls.split(), stdout=PIPE, stderr=PIPE)
     if rv.returncode != 0:
         sys.exit(rv.returncode)
 
-    for l in rv.stdout.decode('ascii').split('\n'):
+    for l in rv.stdout.decode("ascii").split("\n"):
         if len(l):
             filelist.append(l)
     return filelist
 
         if len(l):
             filelist.append(l)
     return filelist
 
+
 def version_from_git():
 def version_from_git():
-    git_describe = 'git describe'
+    git_describe = "git describe"
     rv = run(git_describe.split(), stdout=PIPE, stderr=PIPE)
     if rv.returncode != 0:
         sys.exit(rv.returncode)
     rv = run(git_describe.split(), stdout=PIPE, stderr=PIPE)
     if rv.returncode != 0:
         sys.exit(rv.returncode)
-    return rv.stdout.decode('ascii').split('\n')[0]
+    return rv.stdout.decode("ascii").split("\n")[0]
+
 
 
-class MarkDown():
+class MarkDown:
     _dispatch = {}
 
     def __init__(self, stream):
     _dispatch = {}
 
     def __init__(self, stream):
@@ -101,102 +110,115 @@ class MarkDown():
     def print_maintainer(self, o):
         write = self.stream.write
         if type(o) is list:
     def print_maintainer(self, o):
         write = self.stream.write
         if type(o) is list:
-            write('Maintainers: ' +
-                  ', '.join('{m}'.format(m=m) for m in
-                            o) + '  \n')
+            write("Maintainers: " + ", ".join("{m}".format(m=m) for m in o) + "  \n")
         else:
         else:
-            write('Maintainer: {o}  \n'.format(o=o))
+            write("Maintainer: {o}  \n".format(o=o))
 
 
-    _dispatch['maintainer'] = print_maintainer
+    _dispatch["maintainer"] = print_maintainer
 
     def print_features(self, o, indent=0):
         write = self.stream.write
         for f in o:
 
     def print_features(self, o, indent=0):
         write = self.stream.write
         for f in o:
-            indentstr = ' ' * indent
+            indentstr = " " * indent
             if type(f) is dict:
                 for k, v in f.items():
             if type(f) is dict:
                 for k, v in f.items():
-                    write('{indentstr}- {k}\n'.format(indentstr=indentstr, k=k))
+                    write("{indentstr}- {k}\n".format(indentstr=indentstr, k=k))
                     self.print_features(v, indent + 2)
             else:
                     self.print_features(v, indent + 2)
             else:
-                write('{indentstr}- {f}\n'.format(indentstr=indentstr, f=f))
-        write('\n')
-    _dispatch['features'] = print_features
+                write("{indentstr}- {f}\n".format(indentstr=indentstr, f=f))
+        write("\n")
+
+    _dispatch["features"] = print_features
 
     def print_markdown_header(self, o):
         write = self.stream.write
 
     def print_markdown_header(self, o):
         write = self.stream.write
-        write('## {o}\n'.format(o=o))
-    _dispatch['markdown_header'] = print_markdown_header
+        write("## {o}\n".format(o=o))
+
+    _dispatch["markdown_header"] = print_markdown_header
 
     def print_name(self, o):
         write = self.stream.write
 
     def print_name(self, o):
         write = self.stream.write
-        write('### {o}\n'.format(o=o))
+        write("### {o}\n".format(o=o))
         self.toc.append(o)
         self.toc.append(o)
-    _dispatch['name'] = print_name
+
+    _dispatch["name"] = print_name
 
     def print_description(self, o):
         write = self.stream.write
 
     def print_description(self, o):
         write = self.stream.write
-        write('\n{o}\n\n'.format(o=o))
-    _dispatch['description'] = print_description
+        write("\n{o}\n\n".format(o=o))
+
+    _dispatch["description"] = print_description
 
     def print_state(self, o):
         write = self.stream.write
 
     def print_state(self, o):
         write = self.stream.write
-        write('Feature maturity level: {o}  \n'.format(o=o))
-    _dispatch['state'] = print_state
+        write("Feature maturity level: {o}  \n".format(o=o))
+
+    _dispatch["state"] = print_state
 
     def print_properties(self, o):
         write = self.stream.write
 
     def print_properties(self, o):
         write = self.stream.write
-        write('Supports: {s}  \n'.format(s=" ".join(o)))
-    _dispatch['properties'] = print_properties
+        write("Supports: {s}  \n".format(s=" ".join(o)))
+
+    _dispatch["properties"] = print_properties
 
     def print_missing(self, o):
         write = self.stream.write
 
     def print_missing(self, o):
         write = self.stream.write
-        write('\nNot yet implemented:  \n')
+        write("\nNot yet implemented:  \n")
         self.print_features(o)
         self.print_features(o)
-    _dispatch['missing'] = print_missing
+
+    _dispatch["missing"] = print_missing
 
     def print_code(self, o):
         write = self.stream.write
 
     def print_code(self, o):
         write = self.stream.write
-        write('Source Code: [{o}]({o}) \n'.format(o=o))
-    _dispatch['code'] = print_code
+        write("Source Code: [{o}]({o}) \n".format(o=o))
+
+    _dispatch["code"] = print_code
 
     def print(self, t, o):
         write = self.stream.write
         if t in self._dispatch:
 
     def print(self, t, o):
         write = self.stream.write
         if t in self._dispatch:
-            self._dispatch[t](self, o,)
+            self._dispatch[t](
+                self,
+                o,
+            )
         else:
         else:
-            write('NOT IMPLEMENTED: {t}\n')
+            write("NOT IMPLEMENTED: {t}\n")
+
 
 def output_toc(toc, stream):
     write = stream.write
 
 def output_toc(toc, stream):
     write = stream.write
-    write('# VPP Supported Features\n')
+    write("# VPP Supported Features\n")
 
     for t in toc:
 
     for t in toc:
-        ref = t.lower().replace(' ', '-')
-        write('[{t}](#{ref})  \n'.format(t=t, ref=ref))
+        ref = t.lower().replace(" ", "-")
+        write("[{t}](#{ref})  \n".format(t=t, ref=ref))
+
 
 def featuresort(k):
 
 def featuresort(k):
-    return k[1]['name']
+    return k[1]["name"]
+
 
 def featurelistsort(k):
     orderedfields = {
 
 def featurelistsort(k):
     orderedfields = {
-        'name': 0,
-        'maintainer': 1,
-        'description': 2,
-        'features': 3,
-        'state': 4,
-        'properties': 5,
-        'missing': 6,
-        'code': 7,
+        "name": 0,
+        "maintainer": 1,
+        "description": 2,
+        "features": 3,
+        "state": 4,
+        "properties": 5,
+        "missing": 6,
+        "code": 7,
     }
     return orderedfields[k[0]]
 
     }
     return orderedfields[k[0]]
 
+
 def output_markdown(features, fields, notfields, repository_url):
     stream = StringIO()
     m = MarkDown(stream)
 def output_markdown(features, fields, notfields, repository_url):
     stream = StringIO()
     m = MarkDown(stream)
-    m.print('markdown_header', 'Feature Details:')
+    m.print("markdown_header", "Feature Details:")
     for path, featuredef in sorted(features.items(), key=featuresort):
         codeurl = urllib.parse.urljoin(repository_url, os.path.dirname(path))
     for path, featuredef in sorted(features.items(), key=featuresort):
         codeurl = urllib.parse.urljoin(repository_url, os.path.dirname(path))
-        featuredef['code'] = codeurl
+        featuredef["code"] = codeurl
         for k, v in sorted(featuredef.items(), key=featurelistsort):
             if notfields:
                 if k not in notfields:
         for k, v in sorted(featuredef.items(), key=featurelistsort):
             if notfields:
                 if k not in notfields:
@@ -211,24 +233,45 @@ def output_markdown(features, fields, notfields, repository_url):
     output_toc(m.toc, tocstream)
     return tocstream, stream
 
     output_toc(m.toc, tocstream)
     return tocstream, stream
 
+
 def main():
 def main():
-    parser = argparse.ArgumentParser(description='VPP Feature List.')
-    parser.add_argument('--validate', dest='validate', action='store_true',
-                        help='validate the FEATURE.yaml file')
-    parser.add_argument("--repolink", metavar="repolink", default=DEFAULT_REPO_LINK,
-                help="Link to public repository [%s]" %
-                     DEFAULT_REPO_LINK)
-    parser.add_argument('--git-status', dest='git_status', action='store_true',
-                        help='Get filelist from git status')
-    parser.add_argument('--all', dest='all', action='store_true',
-                        help='Validate all files in repository')
-    parser.add_argument('--markdown', dest='markdown', action='store_true',
-                        help='Output feature table in markdown')
-    parser.add_argument('infile', nargs='?', type=argparse.FileType('r'),
-                        default=sys.stdin)
+    parser = argparse.ArgumentParser(description="VPP Feature List.")
+    parser.add_argument(
+        "--validate",
+        dest="validate",
+        action="store_true",
+        help="validate the FEATURE.yaml file",
+    )
+    parser.add_argument(
+        "--repolink",
+        metavar="repolink",
+        default=DEFAULT_REPO_LINK,
+        help="Link to public repository [%s]" % DEFAULT_REPO_LINK,
+    )
+    parser.add_argument(
+        "--git-status",
+        dest="git_status",
+        action="store_true",
+        help="Get filelist from git status",
+    )
+    parser.add_argument(
+        "--all",
+        dest="all",
+        action="store_true",
+        help="Validate all files in repository",
+    )
+    parser.add_argument(
+        "--markdown",
+        dest="markdown",
+        action="store_true",
+        help="Output feature table in markdown",
+    )
+    parser.add_argument(
+        "infile", nargs="?", type=argparse.FileType("r"), default=sys.stdin
+    )
     group = parser.add_mutually_exclusive_group()
     group = parser.add_mutually_exclusive_group()
-    group.add_argument('--include', help='List of fields to include')
-    group.add_argument('--exclude', help='List of fields to exclude')
+    group.add_argument("--include", help="List of fields to include")
+    group.add_argument("--exclude", help="List of fields to exclude")
     args = parser.parse_args()
     features = {}
 
     args = parser.parse_args()
     features = {}
 
@@ -240,11 +283,11 @@ def main():
         filelist = args.infile
 
     if args.include:
         filelist = args.infile
 
     if args.include:
-        fields = args.include.split(',')
+        fields = args.include.split(",")
     else:
         fields = []
     if args.exclude:
     else:
         fields = []
     if args.exclude:
-        notfields = args.exclude.split(',')
+        notfields = args.exclude.split(",")
     else:
         notfields = []
 
     else:
         notfields = []
 
@@ -252,13 +295,15 @@ def main():
         featurefile = featurefile.rstrip()
 
         # Load configuration file
         featurefile = featurefile.rstrip()
 
         # Load configuration file
-        with open(featurefile, encoding='utf-8') as f:
+        with open(featurefile, encoding="utf-8") as f:
             cfg = yaml.load(f, Loader=yaml.SafeLoader)
         try:
             validate(instance=cfg, schema=schema)
         except exceptions.ValidationError:
             cfg = yaml.load(f, Loader=yaml.SafeLoader)
         try:
             validate(instance=cfg, schema=schema)
         except exceptions.ValidationError:
-            print('File does not validate: {featurefile}' \
-                  .format(featurefile=featurefile), file=sys.stderr)
+            print(
+                "File does not validate: {featurefile}".format(featurefile=featurefile),
+                file=sys.stderr,
+            )
             raise
         features[featurefile] = cfg
 
             raise
         features[featurefile] = cfg
 
@@ -270,5 +315,5 @@ def main():
         stream.close()
 
 
         stream.close()
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     main()
     main()
index 20f5bd6..f0296af 100755 (executable)
@@ -6,214 +6,242 @@ import argparse
 import matplotlib.pyplot as plt
 from matplotlib.lines import Line2D
 
 import matplotlib.pyplot as plt
 from matplotlib.lines import Line2D
 
-class Point():
+
+class Point:
     "CC event"
     "CC event"
+
     def __init__(self, x, y):
         self.x = x
         self.y = y
 
     def __init__(self, x, y):
         self.x = x
         self.y = y
 
+
 def listx(points):
 def listx(points):
-  return list(map(lambda pt: pt.x, points))
+    return list(map(lambda pt: pt.x, points))
+
 
 def listy(points):
 
 def listy(points):
-  return list(map(lambda pt: pt.y, points))
+    return list(map(lambda pt: pt.y, points))
+
 
 def plot_data(d):
 
 
 def plot_data(d):
 
-  plt.figure(1)
-
-  cwndx = listx(d["cwnd"])
-  cwndy = listy(d["cwnd"])
-  congx = listx(d["congestion"])
-  congy = listy(d["congestion"])
-  rcvrdx = listx(d["recovered"])
-  rcvrdy = listy(d["recovered"])
-  rxttx = listx(d["rxtTimeout"])
-  rxtty = listy(d["rxtTimeout"])
-
-  # cwnd/ssthresh/cc events
-  plt.subplot(311)
-  plt.title("cwnd/ssthresh")
-  pcwnd = plt.plot(cwndx, cwndy, 'r')
-  psst = plt.plot(cwndx, d["ssthresh"], 'y-')
-  pcong = plt.plot(congx, congy,'yo')
-  precov = plt.plot(rcvrdx, rcvrdy,'co')
-  prxtt = plt.plot(rxttx, rxtty,'mo')
-
-  marker1 = Line2D(range(1), range(1), color="r")
-  marker2 = Line2D(range(1), range(1), color="y")
-  marker3 = Line2D(range(1), range(1), color="w", marker="o", markerfacecolor="y")
-  marker4 = Line2D(range(1), range(1), color="w", marker="o", markerfacecolor="c")
-  marker5 = Line2D(range(1), range(1), color="w", marker="o", markerfacecolor="m")
-  plt.legend((marker1, marker2, marker3, marker4, marker5),
-             ('cwnd', 'ssthresh', 'congestion', 'recovered', 'rxt-timeout'),
-             loc=4)
-  axes = plt.gca()
-  axes.set_ylim([-20e4, max(cwndy) + 20e4])
-
-  # snd variables
-  plt.subplot(312)
-  plt.title("cc variables")
-  plt.plot(cwndx, d["space"], 'g-', markersize=1)
-  plt.plot(cwndx, d["flight"], 'b-', markersize=1)
-  plt.plot(cwndx, d["sacked"], 'm:', markersize=1)
-  plt.plot(cwndx, d["lost"], 'y:', markersize=1)
-  plt.plot(cwndx, d["cc-space"], 'k:', markersize=1)
-  plt.plot(cwndx, cwndy, 'ro', markersize=2)
-
-  plt.plot(congx, congy, 'y^', markersize=10, markerfacecolor="y")
-  plt.plot(rcvrdx, rcvrdy, 'c^', markersize=10, markerfacecolor="c")
-  plt.plot(rxttx, rxtty, 'm^', markersize=10, markerfacecolor="m")
-
-  #plt.plot(cwndx, d["snd_wnd"], 'ko', markersize=1)
-  plt.legend(("snd-space", "flight", "sacked", "lost", "cc-space", "cwnd",
-              "congestion", "recovered", "rxt-timeout"),
-             loc=1)
-
-  # rto/srrt/rttvar
-  plt.subplot(313)
-  plt.title("rtt")
-  plt.plot(cwndx, d["srtt"], 'g-')
-  plt.plot(cwndx, [x/1000 for x in d["mrtt-us"]], 'r-')
-  plt.plot(cwndx, d["rttvar"], 'b-')
-  plt.legend(["srtt", "mrtt-us", "rttvar"])
-  axes = plt.gca()
-  #plt.plot(cwndx, rto, 'r-')
-  #axes.set_ylim([0, int(max(rto[2:len(rto)])) + 50])
-
-  # show
-  plt.show()
-
-def find_pattern(file_path,session_idx):
+    plt.figure(1)
+
+    cwndx = listx(d["cwnd"])
+    cwndy = listy(d["cwnd"])
+    congx = listx(d["congestion"])
+    congy = listy(d["congestion"])
+    rcvrdx = listx(d["recovered"])
+    rcvrdy = listy(d["recovered"])
+    rxttx = listx(d["rxtTimeout"])
+    rxtty = listy(d["rxtTimeout"])
+
+    # cwnd/ssthresh/cc events
+    plt.subplot(311)
+    plt.title("cwnd/ssthresh")
+    pcwnd = plt.plot(cwndx, cwndy, "r")
+    psst = plt.plot(cwndx, d["ssthresh"], "y-")
+    pcong = plt.plot(congx, congy, "yo")
+    precov = plt.plot(rcvrdx, rcvrdy, "co")
+    prxtt = plt.plot(rxttx, rxtty, "mo")
+
+    marker1 = Line2D(range(1), range(1), color="r")
+    marker2 = Line2D(range(1), range(1), color="y")
+    marker3 = Line2D(range(1), range(1), color="w", marker="o", markerfacecolor="y")
+    marker4 = Line2D(range(1), range(1), color="w", marker="o", markerfacecolor="c")
+    marker5 = Line2D(range(1), range(1), color="w", marker="o", markerfacecolor="m")
+    plt.legend(
+        (marker1, marker2, marker3, marker4, marker5),
+        ("cwnd", "ssthresh", "congestion", "recovered", "rxt-timeout"),
+        loc=4,
+    )
+    axes = plt.gca()
+    axes.set_ylim([-20e4, max(cwndy) + 20e4])
+
+    # snd variables
+    plt.subplot(312)
+    plt.title("cc variables")
+    plt.plot(cwndx, d["space"], "g-", markersize=1)
+    plt.plot(cwndx, d["flight"], "b-", markersize=1)
+    plt.plot(cwndx, d["sacked"], "m:", markersize=1)
+    plt.plot(cwndx, d["lost"], "y:", markersize=1)
+    plt.plot(cwndx, d["cc-space"], "k:", markersize=1)
+    plt.plot(cwndx, cwndy, "ro", markersize=2)
+
+    plt.plot(congx, congy, "y^", markersize=10, markerfacecolor="y")
+    plt.plot(rcvrdx, rcvrdy, "c^", markersize=10, markerfacecolor="c")
+    plt.plot(rxttx, rxtty, "m^", markersize=10, markerfacecolor="m")
+
+    # plt.plot(cwndx, d["snd_wnd"], 'ko', markersize=1)
+    plt.legend(
+        (
+            "snd-space",
+            "flight",
+            "sacked",
+            "lost",
+            "cc-space",
+            "cwnd",
+            "congestion",
+            "recovered",
+            "rxt-timeout",
+        ),
+        loc=1,
+    )
+
+    # rto/srrt/rttvar
+    plt.subplot(313)
+    plt.title("rtt")
+    plt.plot(cwndx, d["srtt"], "g-")
+    plt.plot(cwndx, [x / 1000 for x in d["mrtt-us"]], "r-")
+    plt.plot(cwndx, d["rttvar"], "b-")
+    plt.legend(["srtt", "mrtt-us", "rttvar"])
+    axes = plt.gca()
+    # plt.plot(cwndx, rto, 'r-')
+    # axes.set_ylim([0, int(max(rto[2:len(rto)])) + 50])
+
+    # show
+    plt.show()
+
+
+def find_pattern(file_path, session_idx):
     is_active_open = 1
     listener_pattern = "l\[\d\]"
     is_active_open = 1
     listener_pattern = "l\[\d\]"
-    if (is_active_open):
-      initial_pattern = "\[\d\](\.\d+:\d+\->\.\d+:\d+)\s+open:\s"
+    if is_active_open:
+        initial_pattern = "\[\d\](\.\d+:\d+\->\.\d+:\d+)\s+open:\s"
     else:
     else:
-      initial_pattern = "\[\d\](\.\d+:\d+\->\.\d+:\d+)\s"
+        initial_pattern = "\[\d\](\.\d+:\d+\->\.\d+:\d+)\s"
     idx = 0
     idx = 0
-    f = open(file_path, 'r')
+    f = open(file_path, "r")
     for line in f:
     for line in f:
-      # skip listener lines (server)
-      if (re.search(listener_pattern, line) != None):
-        continue
-      match = re.search(initial_pattern, line)
-      if (match == None):
-        continue
-      if (idx < session_idx):
-        idx += 1
-        continue
-      filter_pattern = str(match.group(1)) + "\s+(.+)"
-      print ("pattern is %s" % filter_pattern)
-      f.close()
-      return filter_pattern
-    raise Exception ("Could not find initial pattern")
+        # skip listener lines (server)
+        if re.search(listener_pattern, line) != None:
+            continue
+        match = re.search(initial_pattern, line)
+        if match == None:
+            continue
+        if idx < session_idx:
+            idx += 1
+            continue
+        filter_pattern = str(match.group(1)) + "\s+(.+)"
+        print("pattern is %s" % filter_pattern)
+        f.close()
+        return filter_pattern
+    raise Exception("Could not find initial pattern")
+
 
 def compute_time(min, sec, msec):
 
 def compute_time(min, sec, msec):
-  return int(min)*60 + int(sec) + int(msec)/1000.0
+    return int(min) * 60 + int(sec) + int(msec) / 1000.0
+
 
 def run(file_path, session_idx):
     filter_sessions = 1
     filter_pattern = ""
 
     patterns = {
 
 def run(file_path, session_idx):
     filter_sessions = 1
     filter_pattern = ""
 
     patterns = {
-      "time"      : "^\d+:(\d+):(\d+):(\d+):\d+",
-      "listener"  : "l\[\d\]",
-      "cc"        : "cwnd (\d+) flight (\d+) space (\d+) ssthresh (\d+) snd_wnd (\d+)",
-      "cc-snd"    : "cc_space (\d+) sacked (\d+) lost (\d+)",
-      "rtt"       : "rto (\d+) srtt (\d+) mrtt-us (\d+) rttvar (\d+)",
-      "rxtt"      : "rxt-timeout",
-      "congestion": "congestion",
-      "recovered" : "recovered",
+        "time": "^\d+:(\d+):(\d+):(\d+):\d+",
+        "listener": "l\[\d\]",
+        "cc": "cwnd (\d+) flight (\d+) space (\d+) ssthresh (\d+) snd_wnd (\d+)",
+        "cc-snd": "cc_space (\d+) sacked (\d+) lost (\d+)",
+        "rtt": "rto (\d+) srtt (\d+) mrtt-us (\d+) rttvar (\d+)",
+        "rxtt": "rxt-timeout",
+        "congestion": "congestion",
+        "recovered": "recovered",
     }
     d = {
     }
     d = {
-      "cwnd"        : [],
-      "space"       : [],
-      "flight"      : [],
-      "ssthresh"    : [],
-      "snd_wnd"     : [],
-      "cc-space"    : [],
-      "lost"        : [],
-      "sacked"      : [],
-      "rto"         : [],
-      "srtt"        : [],
-      "mrtt-us"     : [],
-      "rttvar"      : [],
-      "rxtTimeout"  : [],
-      "congestion"  : [],
-      "recovered"   : [],
+        "cwnd": [],
+        "space": [],
+        "flight": [],
+        "ssthresh": [],
+        "snd_wnd": [],
+        "cc-space": [],
+        "lost": [],
+        "sacked": [],
+        "rto": [],
+        "srtt": [],
+        "mrtt-us": [],
+        "rttvar": [],
+        "rxtTimeout": [],
+        "congestion": [],
+        "recovered": [],
     }
 
     }
 
-    if (filter_sessions):
+    if filter_sessions:
         filter_pattern = find_pattern(file_path, session_idx)
         filter_pattern = find_pattern(file_path, session_idx)
-    f = open(file_path, 'r')
+    f = open(file_path, "r")
 
     stats_index = 0
     start_time = 0
 
     for line in f:
         # skip listener lines (server)
 
     stats_index = 0
     start_time = 0
 
     for line in f:
         # skip listener lines (server)
-        if (re.search(patterns["listener"], line) != None):
+        if re.search(patterns["listener"], line) != None:
             continue
         # filter sessions
             continue
         # filter sessions
-        if (filter_sessions):
+        if filter_sessions:
             match = re.search(filter_pattern, line)
             match = re.search(filter_pattern, line)
-            if (match == None):
+            if match == None:
                 continue
 
         original_line = line
         line = match.group(1)
                 continue
 
         original_line = line
         line = match.group(1)
-        match = re.search (patterns["time"], original_line)
-        if (match == None):
-          print "something went wrong! no time!"
-          continue
-        time = compute_time (match.group(1), match.group(2), match.group(3))
-        if (start_time == 0):
-          start_time = time
+        match = re.search(patterns["time"], original_line)
+        if match == None:
+            print("something went wrong! no time!")
+            continue
+        time = compute_time(match.group(1), match.group(2), match.group(3))
+        if start_time == 0:
+            start_time = time
 
         time = time - start_time
         match = re.search(patterns["cc"], line)
 
         time = time - start_time
         match = re.search(patterns["cc"], line)
-        if (match != None):
-          d["cwnd"].append(Point(time, int(match.group(1))))
-          d["flight"].append(int(match.group(2)))
-          d["space"].append(int(match.group(3)))
-          d["ssthresh"].append(int(match.group(4)))
-          d["snd_wnd"].append(int(match.group(5)))
-          stats_index += 1
-          continue
+        if match != None:
+            d["cwnd"].append(Point(time, int(match.group(1))))
+            d["flight"].append(int(match.group(2)))
+            d["space"].append(int(match.group(3)))
+            d["ssthresh"].append(int(match.group(4)))
+            d["snd_wnd"].append(int(match.group(5)))
+            stats_index += 1
+            continue
         match = re.search(patterns["cc-snd"], line)
         match = re.search(patterns["cc-snd"], line)
-        if (match != None):
-          d["cc-space"].append(int(match.group(1)))
-          d["sacked"].append(int(match.group(2)))
-          d["lost"].append(int(match.group(3)))
+        if match != None:
+            d["cc-space"].append(int(match.group(1)))
+            d["sacked"].append(int(match.group(2)))
+            d["lost"].append(int(match.group(3)))
         match = re.search(patterns["rtt"], line)
         match = re.search(patterns["rtt"], line)
-        if (match != None):
-           d["rto"].append(int(match.group(1)))
-           d["srtt"].append(int(match.group(2)))
-           d["mrtt-us"].append(int(match.group(3)))
-           d["rttvar"].append(int(match.group(4)))
-        if (stats_index == 0):
-           continue
+        if match != None:
+            d["rto"].append(int(match.group(1)))
+            d["srtt"].append(int(match.group(2)))
+            d["mrtt-us"].append(int(match.group(3)))
+            d["rttvar"].append(int(match.group(4)))
+        if stats_index == 0:
+            continue
         match = re.search(patterns["rxtt"], line)
         match = re.search(patterns["rxtt"], line)
-        if (match != None):
-          d["rxtTimeout"].append(Point(time, d["cwnd"][stats_index - 1].y + 1e4))
-          continue
+        if match != None:
+            d["rxtTimeout"].append(Point(time, d["cwnd"][stats_index - 1].y + 1e4))
+            continue
         match = re.search(patterns["congestion"], line)
         match = re.search(patterns["congestion"], line)
-        if (match != None):
-          d["congestion"].append(Point(time, d["cwnd"][stats_index - 1].y - 1e4))
-          continue
+        if match != None:
+            d["congestion"].append(Point(time, d["cwnd"][stats_index - 1].y - 1e4))
+            continue
         match = re.search(patterns["recovered"], line)
         match = re.search(patterns["recovered"], line)
-        if (match != None):
-          d["recovered"].append(Point(time, d["cwnd"][stats_index - 1].y))
-          continue
+        if match != None:
+            d["recovered"].append(Point(time, d["cwnd"][stats_index - 1].y))
+            continue
 
     plot_data(d)
 
 
     plot_data(d)
 
+
 if __name__ == "__main__":
     parser = argparse.ArgumentParser(description="Plot tcp cc logs")
 if __name__ == "__main__":
     parser = argparse.ArgumentParser(description="Plot tcp cc logs")
-    parser.add_argument('-f', action='store', dest='file', required=True,
-                        help="elog file in txt format")
-    parser.add_argument('-s', action='store', dest='session_index', default=0,
-                        help="session index for which to plot cc logs" )
+    parser.add_argument(
+        "-f", action="store", dest="file", required=True, help="elog file in txt format"
+    )
+    parser.add_argument(
+        "-s",
+        action="store",
+        dest="session_index",
+        default=0,
+        help="session index for which to plot cc logs",
+    )
     results = parser.parse_args()
     run(results.file, int(results.session_index))
     results = parser.parse_args()
     run(results.file, int(results.session_index))
index d96a378..7fab2d7 100755 (executable)
@@ -5,34 +5,41 @@ import sys
 import time
 import argparse
 
 import time
 import argparse
 
-# action can be reflect or drop 
+# action can be reflect or drop
 action = "drop"
 test = 0
 
 action = "drop"
 test = 0
 
-def test_data (data, n_rcvd):
-    n_read = len (data);
+
+def test_data(data, n_rcvd):
+    n_read = len(data)
     for i in range(n_read):
     for i in range(n_read):
-        expected = (n_rcvd + i) & 0xff
-        byte_got = ord (data[i])
-        if (byte_got != expected):
-            print("Difference at byte {}. Expected {} got {}"
-                  .format(n_rcvd + i, expected, byte_got))
+        expected = (n_rcvd + i) & 0xFF
+        byte_got = ord(data[i])
+        if byte_got != expected:
+            print(
+                "Difference at byte {}. Expected {} got {}".format(
+                    n_rcvd + i, expected, byte_got
+                )
+            )
     return n_read
 
     return n_read
 
-def handle_connection (connection, client_address):
+
+def handle_connection(connection, client_address):
     print("Received connection from {}".format(repr(client_address)))
     n_rcvd = 0
     try:
         while True:
             data = connection.recv(4096)
             if not data:
     print("Received connection from {}".format(repr(client_address)))
     n_rcvd = 0
     try:
         while True:
             data = connection.recv(4096)
             if not data:
-                break;
-            if (test == 1):
-                n_rcvd += test_data (data, n_rcvd)
-            if (action != "drop"):
+                break
+            if test == 1:
+                n_rcvd += test_data(data, n_rcvd)
+            if action != "drop":
                 connection.sendall(data)
     finally:
         connection.close()
                 connection.sendall(data)
     finally:
         connection.close()
+
+
 def run_tcp_server(ip, port):
     print("Starting TCP server {}:{}".format(repr(ip), repr(port)))
     sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
 def run_tcp_server(ip, port):
     print("Starting TCP server {}:{}".format(repr(ip), repr(port)))
     sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
@@ -42,7 +49,9 @@ def run_tcp_server(ip, port):
     sock.listen(1)
     while True:
         connection, client_address = sock.accept()
     sock.listen(1)
     while True:
         connection, client_address = sock.accept()
-        handle_connection (connection, client_address)
+        handle_connection(connection, client_address)
+
+
 def run_udp_server(ip, port):
     print("Starting UDP server {}:{}".format(repr(ip), repr(port)))
     sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
 def run_udp_server(ip, port):
     print("Starting UDP server {}:{}".format(repr(ip), repr(port)))
     sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
@@ -51,22 +60,25 @@ def run_udp_server(ip, port):
     sock.bind(server_address)
     while True:
         data, addr = sock.recvfrom(4096)
     sock.bind(server_address)
     while True:
         data, addr = sock.recvfrom(4096)
-        if (action != "drop"):
-            #snd_sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
-            sock.sendto (data, addr)
+        if action != "drop":
+            # snd_sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
+            sock.sendto(data, addr)
+
 
 def run_server(ip, port, proto):
 
 def run_server(ip, port, proto):
-    if (proto == "tcp"):
+    if proto == "tcp":
         run_tcp_server(ip, port)
         run_tcp_server(ip, port)
-    elif (proto == "udp"):
+    elif proto == "udp":
         run_udp_server(ip, port)
 
         run_udp_server(ip, port)
 
+
 def prepare_data(power):
     buf = []
 def prepare_data(power):
     buf = []
-    for i in range (0, pow(2, power)):
-        buf.append(i & 0xff)
+    for i in range(0, pow(2, power)):
+        buf.append(i & 0xFF)
     return bytearray(buf)
 
     return bytearray(buf)
 
+
 def run_tcp_client(ip, port):
     print("Starting TCP client {}:{}".format(repr(ip), repr(port)))
     sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
 def run_tcp_client(ip, port):
     print("Starting TCP client {}:{}".format(repr(ip), repr(port)))
     sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
@@ -75,28 +87,33 @@ def run_tcp_client(ip, port):
 
     data = prepare_data(16)
     n_rcvd = 0
 
     data = prepare_data(16)
     n_rcvd = 0
-    n_sent = len (data)
+    n_sent = len(data)
     try:
         sock.sendall(data)
 
         timeout = time.time() + 2
         while n_rcvd < n_sent and time.time() < timeout:
             tmp = sock.recv(1500)
     try:
         sock.sendall(data)
 
         timeout = time.time() + 2
         while n_rcvd < n_sent and time.time() < timeout:
             tmp = sock.recv(1500)
-            tmp = bytearray (tmp)
+            tmp = bytearray(tmp)
             n_read = len(tmp)
             for i in range(n_read):
             n_read = len(tmp)
             for i in range(n_read):
-                if (data[n_rcvd + i] != tmp[i]):
-                    print("Difference at byte {}. Sent {} got {}"
-                          .format(n_rcvd + i, data[n_rcvd + i], tmp[i]))
+                if data[n_rcvd + i] != tmp[i]:
+                    print(
+                        "Difference at byte {}. Sent {} got {}".format(
+                            n_rcvd + i, data[n_rcvd + i], tmp[i]
+                        )
+                    )
             n_rcvd += n_read
 
             n_rcvd += n_read
 
-        if (n_rcvd < n_sent or n_rcvd > n_sent):
+        if n_rcvd < n_sent or n_rcvd > n_sent:
             print("Sent {} and got back {}".format(n_sent, n_rcvd))
         else:
             print("Sent {} and got back {}".format(n_sent, n_rcvd))
         else:
-            print("Got back what we've sent!!");
+            print("Got back what we've sent!!")
 
     finally:
         sock.close()
 
     finally:
         sock.close()
+
+
 def run_udp_client(ip, port):
     print("Starting UDP client {}:{}".format(repr(ip), repr(port)))
     n_packets = 100
 def run_udp_client(ip, port):
     print("Starting UDP client {}:{}".format(repr(ip), repr(port)))
     n_packets = 100
@@ -104,38 +121,43 @@ def run_udp_client(ip, port):
     server_address = (ip, int(port))
     data = prepare_data(10)
     try:
     server_address = (ip, int(port))
     data = prepare_data(10)
     try:
-        for i in range (0, n_packets):
+        for i in range(0, n_packets):
             sock.sendto(data, server_address)
     finally:
         sock.close()
             sock.sendto(data, server_address)
     finally:
         sock.close()
+
+
 def run_client(ip, port, proto):
 def run_client(ip, port, proto):
-    if (proto == "tcp"):
+    if proto == "tcp":
         run_tcp_client(ip, port)
         run_tcp_client(ip, port)
-    elif (proto == "udp"):
+    elif proto == "udp":
         run_udp_client(ip, port)
         run_udp_client(ip, port)
+
+
 def run(mode, ip, port, proto):
 def run(mode, ip, port, proto):
-    if (mode == "server"):
-        run_server (ip, port, proto)
-    elif (mode == "client"):
-        run_client (ip, port, proto)
+    if mode == "server":
+        run_server(ip, port, proto)
+    elif mode == "client":
+        run_client(ip, port, proto)
     else:
         raise Exception("Unknown mode. Only client and server supported")
 
     else:
         raise Exception("Unknown mode. Only client and server supported")
 
+
 if __name__ == "__main__":
     parser = argparse.ArgumentParser()
 if __name__ == "__main__":
     parser = argparse.ArgumentParser()
-    parser.add_argument('-m', action='store', dest='mode')
-    parser.add_argument('-i', action='store', dest='ip')
-    parser.add_argument('-p', action='store', dest='port')
-    parser.add_argument('-proto', action='store', dest='proto')
-    parser.add_argument('-a', action='store', dest='action')
-    parser.add_argument('-t', action='store', dest='test')
+    parser.add_argument("-m", action="store", dest="mode")
+    parser.add_argument("-i", action="store", dest="ip")
+    parser.add_argument("-p", action="store", dest="port")
+    parser.add_argument("-proto", action="store", dest="proto")
+    parser.add_argument("-a", action="store", dest="action")
+    parser.add_argument("-t", action="store", dest="test")
     results = parser.parse_args()
     action = results.action
     test = results.test
     run(results.mode, results.ip, results.port, results.proto)
     results = parser.parse_args()
     action = results.action
     test = results.test
     run(results.mode, results.ip, results.port, results.proto)
-    #if (len(sys.argv)) < 4:
+    # if (len(sys.argv)) < 4:
     #    raise Exception("Usage: ./dummy_app <mode> <ip> <port> [<action> <test>]")
     #    raise Exception("Usage: ./dummy_app <mode> <ip> <port> [<action> <test>]")
-    #if (len(sys.argv) == 6):
+    # if (len(sys.argv) == 6):
     #    action = sys.argv[4]
     #    test = int(sys.argv[5])
     #    action = sys.argv[4]
     #    test = int(sys.argv[5])
-    #run (sys.argv[1], sys.argv[2], int(sys.argv[3]))
+    # run (sys.argv[1], sys.argv[2], int(sys.argv[3]))
index 1fb53c7..fa53bc3 100755 (executable)
@@ -17,10 +17,12 @@ import sys
 
 def get_go_version(go_root):
     # Returns version of the installed Go
 
 def get_go_version(go_root):
     # Returns version of the installed Go
-    p = subprocess.Popen(["./go", "version"],
-                         cwd=go_root + "/bin",
-                         stdout=subprocess.PIPE,
-                         universal_newlines=True, )
+    p = subprocess.Popen(
+        ["./go", "version"],
+        cwd=go_root + "/bin",
+        stdout=subprocess.PIPE,
+        universal_newlines=True,
+    )
     output, _ = p.communicate()
     output_fmt = output.replace("go version go", "", 1)
 
     output, _ = p.communicate()
     output_fmt = output.replace("go version go", "", 1)
 
@@ -29,10 +31,12 @@ def get_go_version(go_root):
 
 # Returns version of the installed binary API generator
 def get_binapi_gen_version(go_path):
 
 # Returns version of the installed binary API generator
 def get_binapi_gen_version(go_path):
-    p = subprocess.Popen(["./binapi-generator", "-version"],
-                         cwd=go_path + "/bin",
-                         stdout=subprocess.PIPE,
-                         universal_newlines=True, )
+    p = subprocess.Popen(
+        ["./binapi-generator", "-version"],
+        cwd=go_path + "/bin",
+        stdout=subprocess.PIPE,
+        universal_newlines=True,
+    )
     output, _ = p.communicate()
     output_fmt = output.replace("govpp", "", 1)
 
     output, _ = p.communicate()
     output_fmt = output.replace("govpp", "", 1)
 
@@ -45,11 +49,12 @@ def install_golang(go_root):
     go_bin = go_root + "/bin/go"
 
     if os.path.exists(go_bin) and os.path.isfile(go_bin):
     go_bin = go_root + "/bin/go"
 
     if os.path.exists(go_bin) and os.path.isfile(go_bin):
-        print('Go ' + get_go_version(go_root) + ' is already installed')
+        print("Go " + get_go_version(go_root) + " is already installed")
         return
 
         return
 
-    filename = requests.get(
-        'https://golang.org/VERSION?m=text').text + ".linux-amd64.tar.gz"
+    filename = (
+        requests.get("https://golang.org/VERSION?m=text").text + ".linux-amd64.tar.gz"
+    )
     url = "https://dl.google.com/go/" + filename
 
     print("Go binary not found, installing the latest version...")
     url = "https://dl.google.com/go/" + filename
 
     print("Go binary not found, installing the latest version...")
@@ -61,13 +66,13 @@ def install_golang(go_root):
         print("Aborting...")
         exit(1)
 
         print("Aborting...")
         exit(1)
 
-    go_folders = ['src', 'pkg', 'bin']
+    go_folders = ["src", "pkg", "bin"]
 
     for f in go_folders:
         if not os.path.exists(os.path.join(go_root, f)):
             os.makedirs(os.path.join(go_root, f))
     r = requests.get(url)
 
     for f in go_folders:
         if not os.path.exists(os.path.join(go_root, f)):
             os.makedirs(os.path.join(go_root, f))
     r = requests.get(url)
-    with open("/tmp/" + filename, 'wb') as f:
+    with open("/tmp/" + filename, "wb") as f:
         f.write(r.content)
 
     go_tf = tarfile.open("/tmp/" + filename)
         f.write(r.content)
 
     go_tf = tarfile.open("/tmp/" + filename)
@@ -78,32 +83,30 @@ def install_golang(go_root):
     go_tf.close()
     os.remove("/tmp/" + filename)
 
     go_tf.close()
     os.remove("/tmp/" + filename)
 
-    print('Go ' + get_go_version(go_root) + ' was installed')
+    print("Go " + get_go_version(go_root) + " was installed")
 
 
 # Installs latest binary API generator
 def install_binapi_gen(c, go_root, go_path):
 
 
 # Installs latest binary API generator
 def install_binapi_gen(c, go_root, go_path):
-    os.environ['GO111MODULE'] = "on"
-    if (os.path.exists(go_root + "/bin/go") and
-            os.path.isfile(go_root + "/bin/go")):
-        p = subprocess.Popen(["./go", "get",
-                              "git.fd.io/govpp.git/cmd/binapi-generator@" + c],
-                             cwd=go_root + "/bin",
-                             stdout=subprocess.PIPE,
-                             stderr=subprocess.PIPE,
-                             universal_newlines=True, )
+    os.environ["GO111MODULE"] = "on"
+    if os.path.exists(go_root + "/bin/go") and os.path.isfile(go_root + "/bin/go"):
+        p = subprocess.Popen(
+            ["./go", "get", "git.fd.io/govpp.git/cmd/binapi-generator@" + c],
+            cwd=go_root + "/bin",
+            stdout=subprocess.PIPE,
+            stderr=subprocess.PIPE,
+            universal_newlines=True,
+        )
         _, error = p.communicate()
         if p.returncode != 0:
         _, error = p.communicate()
         if p.returncode != 0:
-            print("binapi generator installation failed: %d %s" %
-                  (p.returncode, error))
+            print("binapi generator installation failed: %d %s" % (p.returncode, error))
             sys.exit(1)
     bg_ver = get_binapi_gen_version(go_path)
             sys.exit(1)
     bg_ver = get_binapi_gen_version(go_path)
-    print('Installed binary API generator ' + bg_ver)
+    print("Installed binary API generator " + bg_ver)
 
 
 # Creates generated bindings using GoVPP binapigen to the target folder
 
 
 # Creates generated bindings using GoVPP binapigen to the target folder
-def generate_api(output_dir, vpp_dir, api_list, import_prefix,
-                 no_source, go_path):
+def generate_api(output_dir, vpp_dir, api_list, import_prefix, no_source, go_path):
     json_dir = vpp_dir + "/build-root/install-vpp-native/vpp/share/vpp/api"
 
     if not os.path.exists(json_dir):
     json_dir = vpp_dir + "/build-root/install-vpp-native/vpp/share/vpp/api"
 
     if not os.path.exists(json_dir):
@@ -115,19 +118,20 @@ def generate_api(output_dir, vpp_dir, api_list, import_prefix,
     if output_dir:
         cmd += ["--output-dir=" + output_dir]
     if len(api_list):
     if output_dir:
         cmd += ["--output-dir=" + output_dir]
     if len(api_list):
-        print("Following API files were requested by 'GO_API_FILES': " +
-              str(api_list))
-        print("Note that dependency requirements may generate "
-              "additional API files")
+        print("Following API files were requested by 'GO_API_FILES': " + str(api_list))
+        print("Note that dependency requirements may generate " "additional API files")
         cmd.append(api_list)
     if import_prefix:
         cmd.append("-import-prefix=" + import_prefix)
     if no_source:
         cmd.append("-no-source-path-info")
         cmd.append(api_list)
     if import_prefix:
         cmd.append("-import-prefix=" + import_prefix)
     if no_source:
         cmd.append("-no-source-path-info")
-    p = subprocess.Popen(cmd, cwd=go_path + "/bin",
-                         stdout=subprocess.PIPE,
-                         stderr=subprocess.PIPE,
-                         universal_newlines=True, )
+    p = subprocess.Popen(
+        cmd,
+        cwd=go_path + "/bin",
+        stdout=subprocess.PIPE,
+        stderr=subprocess.PIPE,
+        universal_newlines=True,
+    )
 
     out = p.communicate()[1]
     if p.returncode != 0:
 
     out = p.communicate()[1]
     if p.returncode != 0:
@@ -150,50 +154,70 @@ def main():
     vpp_dir = root.parent.parent.parent
 
     parser = argparse.ArgumentParser()
     vpp_dir = root.parent.parent.parent
 
     parser = argparse.ArgumentParser()
-    parser.add_argument("-govpp-commit", "--govpp-commit",
-                        help="GoVPP commit or branch "
-                             "(defaults to v0.3.5-45-g671f16c)",
-                        default="671f16c",  # fixed GoVPP version
-                        type=str)
-    parser.add_argument("-output-dir", "--output-dir",
-                        help="output target directory for generated bindings",
-                        type=str,
-                        default=os.path.join(vpp_dir, "vppbinapi"))
-    parser.add_argument("-api-files", "--api-files",
-                        help="api files to generate (without commas)",
-                        nargs="+",
-                        type=str,
-                        default=[])
-    parser.add_argument("-import-prefix", "--import-prefix",
-                        help="prefix imports in the generated go code",
-                        default="",
-                        type=str)
-    parser.add_argument("-no-source-path-info", "--no-source-path-info",
-                        help="disable source path info in generated files",
-                        nargs='?',
-                        const=True,
-                        default=True)
+    parser.add_argument(
+        "-govpp-commit",
+        "--govpp-commit",
+        help="GoVPP commit or branch " "(defaults to v0.3.5-45-g671f16c)",
+        default="671f16c",  # fixed GoVPP version
+        type=str,
+    )
+    parser.add_argument(
+        "-output-dir",
+        "--output-dir",
+        help="output target directory for generated bindings",
+        type=str,
+        default=os.path.join(vpp_dir, "vppbinapi"),
+    )
+    parser.add_argument(
+        "-api-files",
+        "--api-files",
+        help="api files to generate (without commas)",
+        nargs="+",
+        type=str,
+        default=[],
+    )
+    parser.add_argument(
+        "-import-prefix",
+        "--import-prefix",
+        help="prefix imports in the generated go code",
+        default="",
+        type=str,
+    )
+    parser.add_argument(
+        "-no-source-path-info",
+        "--no-source-path-info",
+        help="disable source path info in generated files",
+        nargs="?",
+        const=True,
+        default=True,
+    )
     args = parser.parse_args()
 
     # go specific environment variables
     if "GOROOT" in os.environ:
     args = parser.parse_args()
 
     # go specific environment variables
     if "GOROOT" in os.environ:
-        go_root = os.environ['GOROOT']
+        go_root = os.environ["GOROOT"]
     else:
         go_binary = shutil.which("go")
         if go_binary != "":
             go_binary_dir, _ = os.path.split(go_binary)
             go_root = os.path.join(go_binary_dir, "..")
         else:
     else:
         go_binary = shutil.which("go")
         if go_binary != "":
             go_binary_dir, _ = os.path.split(go_binary)
             go_root = os.path.join(go_binary_dir, "..")
         else:
-            go_root = os.environ['HOME'] + "/.go"
+            go_root = os.environ["HOME"] + "/.go"
     if "GOPATH" in os.environ:
     if "GOPATH" in os.environ:
-        go_path = os.environ['GOPATH']
+        go_path = os.environ["GOPATH"]
     else:
     else:
-        go_path = os.environ['HOME'] + "/go"
+        go_path = os.environ["HOME"] + "/go"
 
     install_golang(go_root)
     install_binapi_gen(args.govpp_commit, go_root, go_path)
 
     install_golang(go_root)
     install_binapi_gen(args.govpp_commit, go_root, go_path)
-    generate_api(args.output_dir, str(vpp_dir), args.api_files,
-                 args.import_prefix, args.no_source_path_info, go_path)
+    generate_api(
+        args.output_dir,
+        str(vpp_dir),
+        args.api_files,
+        args.import_prefix,
+        args.no_source_path_info,
+        go_path,
+    )
 
 
 if __name__ == "__main__":
 
 
 if __name__ == "__main__":
index 288e519..e8041c5 100755 (executable)
 import argparse
 import pathlib
 import subprocess
 import argparse
 import pathlib
 import subprocess
-BASE_DIR = subprocess.check_output('git rev-parse --show-toplevel',
-                                   shell=True).strip().decode()
+
+BASE_DIR = (
+    subprocess.check_output("git rev-parse --show-toplevel", shell=True)
+    .strip()
+    .decode()
+)
 vppapigen_bin = pathlib.Path(
 vppapigen_bin = pathlib.Path(
-    '%s/src/tools/vppapigen/vppapigen.py' % BASE_DIR).as_posix()
+    "%s/src/tools/vppapigen/vppapigen.py" % BASE_DIR
+).as_posix()
 
 src_dir_depth = 3
 output_path = pathlib.Path(
 
 src_dir_depth = 3
 output_path = pathlib.Path(
-    '%s/build-root/install-vpp-native/vpp/share/vpp/api/' % BASE_DIR)
+    "%s/build-root/install-vpp-native/vpp/share/vpp/api/" % BASE_DIR
+)
 output_path_debug = pathlib.Path(
 output_path_debug = pathlib.Path(
-    '%s/build-root/install-vpp_debug-native/vpp/share/vpp/api/' % BASE_DIR)
+    "%s/build-root/install-vpp_debug-native/vpp/share/vpp/api/" % BASE_DIR
+)
 
 output_dir_map = {
 
 output_dir_map = {
-    'plugins': 'plugins',
-    'vlibmemory': 'core',
-    'vnet': 'core',
-    'vlib': 'core',
-    'vpp': 'core',
+    "plugins": "plugins",
+    "vlibmemory": "core",
+    "vnet": "core",
+    "vlib": "core",
+    "vpp": "core",
 }
 
 
 def api_search_globs(src_dir):
     globs = []
     for g in output_dir_map:
 }
 
 
 def api_search_globs(src_dir):
     globs = []
     for g in output_dir_map:
-        globs.extend(list(src_dir.glob('%s/**/*.api' % g)))
+        globs.extend(list(src_dir.glob("%s/**/*.api" % g)))
     return globs
 
 
     return globs
 
 
@@ -51,28 +58,41 @@ def api_files(src_dir):
 def vppapigen(vppapigen_bin, output_path, src_dir, src_file):
     try:
         subprocess.check_output(
 def vppapigen(vppapigen_bin, output_path, src_dir, src_file):
     try:
         subprocess.check_output(
-            [vppapigen_bin, '--includedir', src_dir.as_posix(),
-             '--input', src_file.as_posix(), 'JSON',
-             '--output', '%s/%s/%s.json' % (
-                 output_path,
-                 output_dir_map[src_file.as_posix().split('/')[
-                     src_dir_depth + BASE_DIR.count('/') - 1]],
-                 src_file.name)])
+            [
+                vppapigen_bin,
+                "--includedir",
+                src_dir.as_posix(),
+                "--input",
+                src_file.as_posix(),
+                "JSON",
+                "--output",
+                "%s/%s/%s.json"
+                % (
+                    output_path,
+                    output_dir_map[
+                        src_file.as_posix().split("/")[
+                            src_dir_depth + BASE_DIR.count("/") - 1
+                        ]
+                    ],
+                    src_file.name,
+                ),
+            ]
+        )
     except KeyError:
     except KeyError:
-        print('src_file: %s' % src_file)
+        print("src_file: %s" % src_file)
         raise
 
 
 def main():
         raise
 
 
 def main():
-    cliparser = argparse.ArgumentParser(
-        description='VPP API JSON definition generator')
-    cliparser.add_argument('--srcdir', action='store',
-                           default='%s/src' % BASE_DIR),
-    cliparser.add_argument('--output', action='store',
-                           help='directory to store files'),
-    cliparser.add_argument('--debug-target', action='store_true',
-                           default=False,
-                           help="'True' if -debug target"),
+    cliparser = argparse.ArgumentParser(description="VPP API JSON definition generator")
+    cliparser.add_argument("--srcdir", action="store", default="%s/src" % BASE_DIR),
+    cliparser.add_argument("--output", action="store", help="directory to store files"),
+    cliparser.add_argument(
+        "--debug-target",
+        action="store_true",
+        default=False,
+        help="'True' if -debug target",
+    ),
     args = cliparser.parse_args()
 
     src_dir = pathlib.Path(args.srcdir)
     args = cliparser.parse_args()
 
     src_dir = pathlib.Path(args.srcdir)
@@ -86,13 +106,13 @@ def main():
     for d in output_dir_map.values():
         output_dir.joinpath(d).mkdir(exist_ok=True, parents=True)
 
     for d in output_dir_map.values():
         output_dir.joinpath(d).mkdir(exist_ok=True, parents=True)
 
-    for f in output_dir.glob('**/*.api.json'):
+    for f in output_dir.glob("**/*.api.json"):
         f.unlink()
 
     for f in api_files(src_dir):
         vppapigen(vppapigen_bin, output_dir, src_dir, f)
         f.unlink()
 
     for f in api_files(src_dir):
         vppapigen(vppapigen_bin, output_dir, src_dir, f)
-    print('json files written to: %s/.' % output_dir)
+    print("json files written to: %s/." % output_dir)
 
 
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     main()
     main()
index c454ffc..20f6c6d 100755 (executable)
@@ -1,8 +1,7 @@
 #!/usr/bin/env python3
 
 import unittest
 #!/usr/bin/env python3
 
 import unittest
-from vppapigen import VPPAPI, Option, ParseError, Union, foldup_crcs, \
-    global_types
+from vppapigen import VPPAPI, Option, ParseError, Union, foldup_crcs, global_types
 import vppapigen
 
 
 import vppapigen
 
 
@@ -28,17 +27,17 @@ class TestUnion(unittest.TestCase):
         cls.parser = VPPAPI()
 
     def test_union(self):
         cls.parser = VPPAPI()
 
     def test_union(self):
-        test_string = '''
+        test_string = """
         union foo_union {
         u32 a;
         u8 b;
         };
         union foo_union {
         u32 a;
         u8 b;
         };
-        '''
+        """
         r = self.parser.parse_string(test_string)
         self.assertTrue(isinstance(r[0], Union))
 
     def test_union_vla(self):
         r = self.parser.parse_string(test_string)
         self.assertTrue(isinstance(r[0], Union))
 
     def test_union_vla(self):
-        test_string = '''
+        test_string = """
         union foo_union_vla {
         u32 a;
         u8 b[a];
         union foo_union_vla {
         u32 a;
         u8 b[a];
@@ -46,13 +45,13 @@ class TestUnion(unittest.TestCase):
         autoreply define foo {
         vl_api_foo_union_vla_t v;
         };
         autoreply define foo {
         vl_api_foo_union_vla_t v;
         };
-        '''
+        """
         r = self.parser.parse_string(test_string)
         self.assertTrue(isinstance(r[0], Union))
         self.assertTrue(r[0].vla)
         s = self.parser.process(r)
 
         r = self.parser.parse_string(test_string)
         self.assertTrue(isinstance(r[0], Union))
         self.assertTrue(r[0].vla)
         s = self.parser.process(r)
 
-        test_string2 = '''
+        test_string2 = """
         union foo_union_vla2 {
         u32 a;
         u8 b[a];
         union foo_union_vla2 {
         u32 a;
         u8 b[a];
@@ -61,10 +60,10 @@ class TestUnion(unittest.TestCase):
         autoreply define foo2 {
         vl_api_foo_union_vla2_t v;
         };
         autoreply define foo2 {
         vl_api_foo_union_vla2_t v;
         };
-        '''
+        """
         self.assertRaises(ValueError, self.parser.parse_string, test_string2)
 
         self.assertRaises(ValueError, self.parser.parse_string, test_string2)
 
-        test_string3 = '''
+        test_string3 = """
         union foo_union_vla3 {
         u32 a;
         u8 b[a];
         union foo_union_vla3 {
         u32 a;
         u8 b[a];
@@ -73,7 +72,7 @@ class TestUnion(unittest.TestCase):
         vl_api_foo_union_vla3_t v;
         u32 x;
         };
         vl_api_foo_union_vla3_t v;
         u32 x;
         };
-        '''
+        """
         self.assertRaises(ValueError, self.parser.parse_string, test_string3)
 
 
         self.assertRaises(ValueError, self.parser.parse_string, test_string3)
 
 
@@ -83,10 +82,10 @@ class TestTypedef(unittest.TestCase):
         cls.parser = VPPAPI()
 
     def test_duplicatetype(self):
         cls.parser = VPPAPI()
 
     def test_duplicatetype(self):
-        test_string = '''
+        test_string = """
         typedef foo1 { u8 dummy; };
         typedef foo1 { u8 dummy; };
         typedef foo1 { u8 dummy; };
         typedef foo1 { u8 dummy; };
-        '''
+        """
         self.assertRaises(KeyError, self.parser.parse_string, test_string)
 
 
         self.assertRaises(KeyError, self.parser.parse_string, test_string)
 
 
@@ -96,42 +95,42 @@ class TestDefine(unittest.TestCase):
         cls.parser = VPPAPI()
 
     def test_unknowntype(self):
         cls.parser = VPPAPI()
 
     def test_unknowntype(self):
-        test_string = 'define foo { foobar foo;};'
+        test_string = "define foo { foobar foo;};"
         with self.assertRaises(ParseError) as ctx:
             self.parser.parse_string(test_string)
         with self.assertRaises(ParseError) as ctx:
             self.parser.parse_string(test_string)
-        self.assertIn('Undefined type: foobar', str(ctx.exception))
+        self.assertIn("Undefined type: foobar", str(ctx.exception))
 
 
-        test_string = 'define { u8 foo;};'
+        test_string = "define { u8 foo;};"
         with self.assertRaises(ParseError) as ctx:
             self.parser.parse_string(test_string)
 
     def test_flags(self):
         with self.assertRaises(ParseError) as ctx:
             self.parser.parse_string(test_string)
 
     def test_flags(self):
-        test_string = '''
+        test_string = """
           manual_print dont_trace manual_endian define foo { u8 foo; };
           define foo_reply {u32 context; i32 retval; };
           manual_print dont_trace manual_endian define foo { u8 foo; };
           define foo_reply {u32 context; i32 retval; };
-        '''
+        """
         r = self.parser.parse_string(test_string)
         self.assertIsNotNone(r)
         s = self.parser.process(r)
         self.assertIsNotNone(s)
         r = self.parser.parse_string(test_string)
         self.assertIsNotNone(r)
         s = self.parser.process(r)
         self.assertIsNotNone(s)
-        for d in s['Define']:
-            if d.name == 'foo':
+        for d in s["Define"]:
+            if d.name == "foo":
                 self.assertTrue(d.dont_trace)
                 self.assertTrue(d.manual_endian)
                 self.assertTrue(d.manual_print)
                 self.assertFalse(d.autoreply)
 
                 self.assertTrue(d.dont_trace)
                 self.assertTrue(d.manual_endian)
                 self.assertTrue(d.manual_print)
                 self.assertFalse(d.autoreply)
 
-        test_string = '''
+        test_string = """
           nonexisting_flag define foo { u8 foo; };
           nonexisting_flag define foo { u8 foo; };
-        '''
+        """
         with self.assertRaises(ParseError):
             self.parser.parse_string(test_string)
 
     def test_options(self):
         with self.assertRaises(ParseError):
             self.parser.parse_string(test_string)
 
     def test_options(self):
-        test_string = '''
+        test_string = """
           define foo { option deprecated; u8 foo; };
           define foo_reply {u32 context; i32 retval; };
           define foo { option deprecated; u8 foo; };
           define foo_reply {u32 context; i32 retval; };
-        '''
+        """
         r = self.parser.parse_string(test_string)
         self.assertIsNotNone(r)
         s = self.parser.process(r)
         r = self.parser.parse_string(test_string)
         self.assertIsNotNone(r)
         s = self.parser.process(r)
@@ -144,14 +143,14 @@ class TestService(unittest.TestCase):
         cls.parser = VPPAPI()
 
     def test_service(self):
         cls.parser = VPPAPI()
 
     def test_service(self):
-        test_string = '''
+        test_string = """
          autoreply define show_version { u8 foo;};
          service { rpc show_version returns show_version_reply; };
          autoreply define show_version { u8 foo;};
          service { rpc show_version returns show_version_reply; };
-        '''
+        """
         r = self.parser.parse_string(test_string)
         s = self.parser.process(r)
         r = self.parser.parse_string(test_string)
         s = self.parser.process(r)
-        self.assertEqual(s['Service'][0].caller, 'show_version')
-        self.assertEqual(s['Service'][0].reply, 'show_version_reply')
+        self.assertEqual(s["Service"][0].caller, "show_version")
+        self.assertEqual(s["Service"][0].reply, "show_version_reply")
 
 
 def get_crc(apistring, name):
 
 
 def get_crc(apistring, name):
@@ -159,52 +158,52 @@ def get_crc(apistring, name):
     parser = vppapigen.VPPAPI()
     r = parser.parse_string(apistring)
     s = parser.process(r)
     parser = vppapigen.VPPAPI()
     r = parser.parse_string(apistring)
     s = parser.process(r)
-    foldup_crcs(s['Define'])
-    d = [f for f in s['Define'] if f.name == name]
+    foldup_crcs(s["Define"])
+    d = [f for f in s["Define"] if f.name == name]
     return d[0].crc
 
 
 class TestCRC(unittest.TestCase):
     def test_crc(self):
     return d[0].crc
 
 
 class TestCRC(unittest.TestCase):
     def test_crc(self):
-        test_string = '''
+        test_string = """
          typedef list { u8 foo; };
          autoreply define foo { u8 foo; vl_api_list_t l;};
          typedef list { u8 foo; };
          autoreply define foo { u8 foo; vl_api_list_t l;};
-        '''
-        crc = get_crc(test_string, 'foo')
+        """
+        crc = get_crc(test_string, "foo")
 
         # modify underlying type
 
         # modify underlying type
-        test_string = '''
+        test_string = """
          typedef list { u8 foo2; };
          autoreply define foo { u8 foo;  vl_api_list_t l;};
          typedef list { u8 foo2; };
          autoreply define foo { u8 foo;  vl_api_list_t l;};
-        '''
-        crc2 = get_crc(test_string, 'foo')
+        """
+        crc2 = get_crc(test_string, "foo")
         self.assertNotEqual(crc, crc2)
 
         # two user-defined types
         self.assertNotEqual(crc, crc2)
 
         # two user-defined types
-        test_string = '''
+        test_string = """
          typedef address { u8 foo2; };
          typedef list { u8 foo2; vl_api_address_t add; };
          autoreply define foo { u8 foo;  vl_api_list_t l;};
          typedef address { u8 foo2; };
          typedef list { u8 foo2; vl_api_address_t add; };
          autoreply define foo { u8 foo;  vl_api_list_t l;};
-        '''
-        crc3 = get_crc(test_string, 'foo')
+        """
+        crc3 = get_crc(test_string, "foo")
 
 
-        test_string = '''
+        test_string = """
          typedef address { u8 foo3; };
          typedef list { u8 foo2; vl_api_address_t add; };
          autoreply define foo { u8 foo;  vl_api_list_t l;};
          typedef address { u8 foo3; };
          typedef list { u8 foo2; vl_api_address_t add; };
          autoreply define foo { u8 foo;  vl_api_list_t l;};
-        '''
-        crc4 = get_crc(test_string, 'foo')
+        """
+        crc4 = get_crc(test_string, "foo")
         self.assertNotEqual(crc3, crc4)
 
         self.assertNotEqual(crc3, crc4)
 
-        test_string = '''
+        test_string = """
          typedef address { u8 foo3; };
          typedef list { u8 foo2; vl_api_address_t add; u8 foo3; };
          autoreply define foo { u8 foo;  vl_api_list_t l;};
          typedef address { u8 foo3; };
          typedef list { u8 foo2; vl_api_address_t add; u8 foo3; };
          autoreply define foo { u8 foo;  vl_api_list_t l;};
-        '''
-        crc5 = get_crc(test_string, 'foo')
+        """
+        crc5 = get_crc(test_string, "foo")
         self.assertNotEqual(crc4, crc5)
 
         self.assertNotEqual(crc4, crc5)
 
-        test_string = '''
+        test_string = """
 typedef ip6_address
 {
   u8 foo;
 typedef ip6_address
 {
   u8 foo;
@@ -227,11 +226,11 @@ autoreply define sr_policy_add
   u32 fib_table;
   vl_api_srv6_sid_list_t sids;
 };
   u32 fib_table;
   vl_api_srv6_sid_list_t sids;
 };
-'''
+"""
 
 
-        crc = get_crc(test_string, 'sr_policy_add')
+        crc = get_crc(test_string, "sr_policy_add")
 
 
-        test_string = '''
+        test_string = """
 typedef ip6_address
 {
   u8 foo;
 typedef ip6_address
 {
   u8 foo;
@@ -253,14 +252,13 @@ autoreply define sr_policy_add
   u32 fib_table;
   vl_api_srv6_sid_list_t sids;
 };
   u32 fib_table;
   vl_api_srv6_sid_list_t sids;
 };
-'''
-        crc2 = get_crc(test_string, 'sr_policy_add')
+"""
+        crc2 = get_crc(test_string, "sr_policy_add")
 
         self.assertNotEqual(crc, crc2)
 
 
 class TestEnum(unittest.TestCase):
 
         self.assertNotEqual(crc, crc2)
 
 
 class TestEnum(unittest.TestCase):
-
     @classmethod
     def setUpClass(cls):
         cls.parser = VPPAPI()
     @classmethod
     def setUpClass(cls):
         cls.parser = VPPAPI()
@@ -278,8 +276,8 @@ enum tunnel_mode : u8
         r = self.parser.parse_string(test_string)
         self.assertIsNotNone(r)
         s = self.parser.process(r)
         r = self.parser.parse_string(test_string)
         self.assertIsNotNone(r)
         s = self.parser.process(r)
-        for o in s['types']:
-            if o.type == 'Enum':
+        for o in s["types"]:
+            if o.type == "Enum":
                 self.assertEqual(o.name, "tunnel_mode")
                 break
         else:
                 self.assertEqual(o.name, "tunnel_mode")
                 break
         else:
@@ -298,8 +296,8 @@ enum virtio_flags {
         r = self.parser.parse_string(test_string)
         self.assertIsNotNone(r)
         s = self.parser.process(r)
         r = self.parser.parse_string(test_string)
         self.assertIsNotNone(r)
         s = self.parser.process(r)
-        for o in s['types']:
-            if o.type == 'Enum':
+        for o in s["types"]:
+            if o.type == "Enum":
                 self.assertEqual(o.name, "virtio_flags")
                 break
         else:
                 self.assertEqual(o.name, "virtio_flags")
                 break
         else:
@@ -307,7 +305,6 @@ enum virtio_flags {
 
 
 class TestEnumFlag(unittest.TestCase):
 
 
 class TestEnumFlag(unittest.TestCase):
-
     @classmethod
     def setUpClass(cls):
         cls.parser = VPPAPI()
     @classmethod
     def setUpClass(cls):
         cls.parser = VPPAPI()
@@ -326,8 +323,9 @@ enumflag tunnel_mode_ef : u8
         with self.assertRaises(TypeError) as ctx:
             r = self.parser.parse_string(test_string)
 
         with self.assertRaises(TypeError) as ctx:
             r = self.parser.parse_string(test_string)
 
-        self.assertTrue(str(ctx.exception).startswith(
-            'tunnel_mode_ef is not a flag enum.'))
+        self.assertTrue(
+            str(ctx.exception).startswith("tunnel_mode_ef is not a flag enum.")
+        )
 
     def test_enumflag_as_enumflag(self):
         test_string = """\
 
     def test_enumflag_as_enumflag(self):
         test_string = """\
@@ -342,13 +340,13 @@ enumflag virtio_flags_ef {
         r = self.parser.parse_string(test_string)
         self.assertIsNotNone(r)
         s = self.parser.process(r)
         r = self.parser.parse_string(test_string)
         self.assertIsNotNone(r)
         s = self.parser.process(r)
-        for o in s['types']:
-            if o.type == 'EnumFlag':
+        for o in s["types"]:
+            if o.type == "EnumFlag":
                 self.assertEqual(o.name, "virtio_flags_ef")
                 break
         else:
             self.fail()
 
 
                 self.assertEqual(o.name, "virtio_flags_ef")
                 break
         else:
             self.fail()
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(verbosity=2)
     unittest.main(verbosity=2)
index 8415c28..c7bc681 100755 (executable)
@@ -10,9 +10,10 @@ from subprocess import Popen, PIPE
 import ply.lex as lex
 import ply.yacc as yacc
 
 import ply.lex as lex
 import ply.yacc as yacc
 
-assert sys.version_info >= (3, 5), \
-    "Not supported Python version: {}".format(sys.version)
-log = logging.getLogger('vppapigen')
+assert sys.version_info >= (3, 5), "Not supported Python version: {}".format(
+    sys.version
+)
+log = logging.getLogger("vppapigen")
 
 # Ensure we don't leave temporary files around
 sys.dont_write_bytecode = True
 
 # Ensure we don't leave temporary files around
 sys.dont_write_bytecode = True
@@ -28,11 +29,10 @@ seen_imports = {}
 
 
 def global_type_add(name, obj):
 
 
 def global_type_add(name, obj):
-    '''Add new type to the dictionary of types '''
-    type_name = 'vl_api_' + name + '_t'
+    """Add new type to the dictionary of types"""
+    type_name = "vl_api_" + name + "_t"
     if type_name in global_types:
     if type_name in global_types:
-        raise KeyError("Attempted redefinition of {!r} with {!r}.".format(
-            name, obj))
+        raise KeyError("Attempted redefinition of {!r} with {!r}.".format(name, obj))
     global_types[type_name] = obj
 
 
     global_types[type_name] = obj
 
 
@@ -49,104 +49,104 @@ class VPPAPILexer:
         self.filename = filename
 
     reserved = {
         self.filename = filename
 
     reserved = {
-        'service': 'SERVICE',
-        'rpc': 'RPC',
-        'returns': 'RETURNS',
-        'null': 'NULL',
-        'stream': 'STREAM',
-        'events': 'EVENTS',
-        'define': 'DEFINE',
-        'typedef': 'TYPEDEF',
-        'enum': 'ENUM',
-        'enumflag': 'ENUMFLAG',
-        'typeonly': 'TYPEONLY',
-        'manual_print': 'MANUAL_PRINT',
-        'manual_endian': 'MANUAL_ENDIAN',
-        'dont_trace': 'DONT_TRACE',
-        'autoreply': 'AUTOREPLY',
-        'autoendian': 'AUTOENDIAN',
-        'option': 'OPTION',
-        'u8': 'U8',
-        'u16': 'U16',
-        'u32': 'U32',
-        'u64': 'U64',
-        'i8': 'I8',
-        'i16': 'I16',
-        'i32': 'I32',
-        'i64': 'I64',
-        'f64': 'F64',
-        'bool': 'BOOL',
-        'string': 'STRING',
-        'import': 'IMPORT',
-        'true': 'TRUE',
-        'false': 'FALSE',
-        'union': 'UNION',
-        'counters': 'COUNTERS',
-        'paths': 'PATHS',
-        'units': 'UNITS',
-        'severity': 'SEVERITY',
-        'type': 'TYPE',
-        'description': 'DESCRIPTION',
+        "service": "SERVICE",
+        "rpc": "RPC",
+        "returns": "RETURNS",
+        "null": "NULL",
+        "stream": "STREAM",
+        "events": "EVENTS",
+        "define": "DEFINE",
+        "typedef": "TYPEDEF",
+        "enum": "ENUM",
+        "enumflag": "ENUMFLAG",
+        "typeonly": "TYPEONLY",
+        "manual_print": "MANUAL_PRINT",
+        "manual_endian": "MANUAL_ENDIAN",
+        "dont_trace": "DONT_TRACE",
+        "autoreply": "AUTOREPLY",
+        "autoendian": "AUTOENDIAN",
+        "option": "OPTION",
+        "u8": "U8",
+        "u16": "U16",
+        "u32": "U32",
+        "u64": "U64",
+        "i8": "I8",
+        "i16": "I16",
+        "i32": "I32",
+        "i64": "I64",
+        "f64": "F64",
+        "bool": "BOOL",
+        "string": "STRING",
+        "import": "IMPORT",
+        "true": "TRUE",
+        "false": "FALSE",
+        "union": "UNION",
+        "counters": "COUNTERS",
+        "paths": "PATHS",
+        "units": "UNITS",
+        "severity": "SEVERITY",
+        "type": "TYPE",
+        "description": "DESCRIPTION",
     }
 
     }
 
-    tokens = ['STRING_LITERAL',
-              'ID', 'NUM'] + list(reserved.values())
+    tokens = ["STRING_LITERAL", "ID", "NUM"] + list(reserved.values())
 
 
-    t_ignore_LINE_COMMENT = '//.*'
+    t_ignore_LINE_COMMENT = "//.*"
 
     def t_FALSE(self, t):
 
     def t_FALSE(self, t):
-        r'false'
+        r"false"
         t.value = False
         return t
 
     def t_TRUE(self, t):
         t.value = False
         return t
 
     def t_TRUE(self, t):
-        r'false'
+        r"false"
         t.value = True
         return t
 
     def t_NUM(self, t):
         t.value = True
         return t
 
     def t_NUM(self, t):
-        r'0[xX][0-9a-fA-F]+|-?\d+\.?\d*'
-        base = 16 if t.value.startswith('0x') else 10
-        if '.' in t.value:
+        r"0[xX][0-9a-fA-F]+|-?\d+\.?\d*"
+        base = 16 if t.value.startswith("0x") else 10
+        if "." in t.value:
             t.value = float(t.value)
         else:
             t.value = int(t.value, base)
         return t
 
     def t_ID(self, t):
             t.value = float(t.value)
         else:
             t.value = int(t.value, base)
         return t
 
     def t_ID(self, t):
-        r'[a-zA-Z_][a-zA-Z_0-9]*'
+        r"[a-zA-Z_][a-zA-Z_0-9]*"
         # Check for reserved words
         # Check for reserved words
-        t.type = VPPAPILexer.reserved.get(t.value, 'ID')
+        t.type = VPPAPILexer.reserved.get(t.value, "ID")
         return t
 
     # C string
     def t_STRING_LITERAL(self, t):
         return t
 
     # C string
     def t_STRING_LITERAL(self, t):
-        r'\"([^\\\n]|(\\.))*?\"'
-        t.value = str(t.value).replace("\"", "")
+        r"\"([^\\\n]|(\\.))*?\" "
+        t.value = str(t.value).replace('"', "")
         return t
 
     # C or C++ comment (ignore)
     def t_comment(self, t):
         return t
 
     # C or C++ comment (ignore)
     def t_comment(self, t):
-        r'(/\*(.|\n)*?\*/)|(//.*)'
-        t.lexer.lineno += t.value.count('\n')
+        r"(/\*(.|\n)*?\*/)|(//.*)"
+        t.lexer.lineno += t.value.count("\n")
 
     # Error handling rule
     def t_error(self, t):
 
     # Error handling rule
     def t_error(self, t):
-        raise ParseError("Illegal character '{}' ({})"
-                         "in {}: line {}".format(t.value[0],
-                                                 hex(ord(t.value[0])),
-                                                 self.filename,
-                                                 t.lexer.lineno))
+        raise ParseError(
+            "Illegal character '{}' ({})"
+            "in {}: line {}".format(
+                t.value[0], hex(ord(t.value[0])), self.filename, t.lexer.lineno
+            )
+        )
 
     # Define a rule so we can track line numbers
     def t_newline(self, t):
 
     # Define a rule so we can track line numbers
     def t_newline(self, t):
-        r'\n+'
+        r"\n+"
         t.lexer.lineno += len(t.value)
 
     literals = ":{}[];=.,"
 
     # A string containing ignored characters (spaces and tabs)
         t.lexer.lineno += len(t.value)
 
     literals = ":{}[];=.,"
 
     # A string containing ignored characters (spaces and tabs)
-    t_ignore = ' \t'
+    t_ignore = " \t"
 
 
 def vla_mark_length_field(block):
 
 
 def vla_mark_length_field(block):
@@ -164,23 +164,25 @@ def vla_is_last_check(name, block):
             vla = True
             if i + 1 < len(block):
                 raise ValueError(
             vla = True
             if i + 1 < len(block):
                 raise ValueError(
-                    'VLA field "{}" must be the last field in message "{}"'
-                    .format(b.fieldname, name))
-        elif b.fieldtype.startswith('vl_api_'):
+                    'VLA field "{}" must be the last field in message "{}"'.format(
+                        b.fieldname, name
+                    )
+                )
+        elif b.fieldtype.startswith("vl_api_"):
             if global_types[b.fieldtype].vla:
                 vla = True
                 if i + 1 < len(block):
                     raise ValueError(
                         'VLA field "{}" must be the last '
             if global_types[b.fieldtype].vla:
                 vla = True
                 if i + 1 < len(block):
                     raise ValueError(
                         'VLA field "{}" must be the last '
-                        'field in message "{}"'
-                        .format(b.fieldname, name))
-        elif b.fieldtype == 'string' and b.length == 0:
+                        'field in message "{}"'.format(b.fieldname, name)
+                    )
+        elif b.fieldtype == "string" and b.length == 0:
             vla = True
             if i + 1 < len(block):
                 raise ValueError(
                     'VLA field "{}" must be the last '
             vla = True
             if i + 1 < len(block):
                 raise ValueError(
                     'VLA field "{}" must be the last '
-                    'field in message "{}"'
-                    .format(b.fieldname, name))
+                    'field in message "{}"'.format(b.fieldname, name)
+                )
     return vla
 
 
     return vla
 
 
@@ -192,10 +194,9 @@ class Processable:
 
 
 class Service(Processable):
 
 
 class Service(Processable):
-    type = 'Service'
+    type = "Service"
 
 
-    def __init__(self, caller, reply, events=None, stream_message=None,
-                 stream=False):
+    def __init__(self, caller, reply, events=None, stream_message=None, stream=False):
         self.caller = caller
         self.reply = reply
         self.stream = stream
         self.caller = caller
         self.reply = reply
         self.stream = stream
@@ -204,7 +205,7 @@ class Service(Processable):
 
 
 class Typedef(Processable):
 
 
 class Typedef(Processable):
-    type = 'Typedef'
+    type = "Typedef"
 
     def __init__(self, name, flags, block):
         self.name = name
 
     def __init__(self, name, flags, block):
         self.name = name
@@ -214,9 +215,9 @@ class Typedef(Processable):
         self.manual_print = False
         self.manual_endian = False
         for f in flags:
         self.manual_print = False
         self.manual_endian = False
         for f in flags:
-            if f == 'manual_print':
+            if f == "manual_print":
                 self.manual_print = True
                 self.manual_print = True
-            elif f == 'manual_endian':
+            elif f == "manual_endian":
                 self.manual_endian = True
         global_type_add(name, self)
 
                 self.manual_endian = True
         global_type_add(name, self)
 
@@ -224,14 +225,14 @@ class Typedef(Processable):
         vla_mark_length_field(self.block)
 
     def process(self, result):
         vla_mark_length_field(self.block)
 
     def process(self, result):
-        result['types'].append(self)
+        result["types"].append(self)
 
     def __repr__(self):
         return self.name + str(self.flags) + str(self.block)
 
 
 class Using(Processable):
 
     def __repr__(self):
         return self.name + str(self.flags) + str(self.block)
 
 
 class Using(Processable):
-    type = 'Using'
+    type = "Using"
 
     def __init__(self, name, flags, alias):
         self.name = name
 
     def __init__(self, name, flags, alias):
         self.name = name
@@ -243,16 +244,15 @@ class Using(Processable):
         self.manual_print = False
         self.manual_endian = False
         for f in flags:
         self.manual_print = False
         self.manual_endian = False
         for f in flags:
-            if f == 'manual_print':
+            if f == "manual_print":
                 self.manual_print = True
                 self.manual_print = True
-            elif f == 'manual_endian':
+            elif f == "manual_endian":
                 self.manual_endian = True
 
         if isinstance(alias, Array):
                 self.manual_endian = True
 
         if isinstance(alias, Array):
-            a = {'type': alias.fieldtype,
-                 'length': alias.length}
+            a = {"type": alias.fieldtype, "length": alias.length}
         else:
         else:
-            a = {'type': alias.fieldtype}
+            a = {"type": alias.fieldtype}
         self.alias = a
         self.using = alias
 
         self.alias = a
         self.using = alias
 
@@ -265,14 +265,14 @@ class Using(Processable):
         global_type_add(name, self)
 
     def process(self, result):  # -> Dict
         global_type_add(name, self)
 
     def process(self, result):  # -> Dict
-        result['types'].append(self)
+        result["types"].append(self)
 
     def __repr__(self):
         return self.name + str(self.alias)
 
 
 class Union(Processable):
 
     def __repr__(self):
         return self.name + str(self.alias)
 
 
 class Union(Processable):
-    type = 'Union'
+    type = "Union"
 
     def __init__(self, name, flags, block):
         self.manual_print = False
 
     def __init__(self, name, flags, block):
         self.manual_print = False
@@ -280,9 +280,9 @@ class Union(Processable):
         self.name = name
 
         for f in flags:
         self.name = name
 
         for f in flags:
-            if f == 'manual_print':
+            if f == "manual_print":
                 self.manual_print = True
                 self.manual_print = True
-            elif f == 'manual_endian':
+            elif f == "manual_endian":
                 self.manual_endian = True
 
         self.block = block
                 self.manual_endian = True
 
         self.block = block
@@ -292,14 +292,14 @@ class Union(Processable):
         global_type_add(name, self)
 
     def process(self, result):
         global_type_add(name, self)
 
     def process(self, result):
-        result['types'].append(self)
+        result["types"].append(self)
 
     def __repr__(self):
         return str(self.block)
 
 
 class Define(Processable):
 
     def __repr__(self):
         return str(self.block)
 
 
 class Define(Processable):
-    type = 'Define'
+    type = "Define"
 
     def __init__(self, name, flags, block):
         self.name = name
 
     def __init__(self, name, flags, block):
         self.name = name
@@ -312,15 +312,15 @@ class Define(Processable):
         self.autoendian = 0
         self.options = {}
         for f in flags:
         self.autoendian = 0
         self.options = {}
         for f in flags:
-            if f == 'dont_trace':
+            if f == "dont_trace":
                 self.dont_trace = True
                 self.dont_trace = True
-            elif f == 'manual_print':
+            elif f == "manual_print":
                 self.manual_print = True
                 self.manual_print = True
-            elif f == 'manual_endian':
+            elif f == "manual_endian":
                 self.manual_endian = True
                 self.manual_endian = True
-            elif f == 'autoreply':
+            elif f == "autoreply":
                 self.autoreply = True
                 self.autoreply = True
-            elif f == 'autoendian':
+            elif f == "autoendian":
                 self.autoendian = 1
 
         remove = []
                 self.autoendian = 1
 
         remove = []
@@ -337,12 +337,11 @@ class Define(Processable):
         self.crc = str(block).encode()
 
     def autoreply_block(self, name, parent):
         self.crc = str(block).encode()
 
     def autoreply_block(self, name, parent):
-        block = [Field('u32', 'context'),
-                 Field('i32', 'retval')]
+        block = [Field("u32", "context"), Field("i32", "retval")]
         # inherit the parent's options
         for k, v in parent.options.items():
             block.append(Option(k, v))
         # inherit the parent's options
         for k, v in parent.options.items():
             block.append(Option(k, v))
-        return Define(name + '_reply', [], block)
+        return Define(name + "_reply", [], block)
 
     def process(self, result):  # -> Dict
         tname = self.__class__.__name__
 
     def process(self, result):  # -> Dict
         tname = self.__class__.__name__
@@ -355,9 +354,9 @@ class Define(Processable):
 
 
 class Enum(Processable):
 
 
 class Enum(Processable):
-    type = 'Enum'
+    type = "Enum"
 
 
-    def __init__(self, name, block, enumtype='u32'):
+    def __init__(self, name, block, enumtype="u32"):
         self.name = name
         self.enumtype = enumtype
         self.vla = False
         self.name = name
         self.enumtype = enumtype
         self.vla = False
@@ -369,47 +368,50 @@ class Enum(Processable):
         bc_set = False
 
         for b in block:
         bc_set = False
 
         for b in block:
-            if 'value' in b:
-                count = b['value']
+            if "value" in b:
+                count = b["value"]
             else:
                 count += 1
             else:
                 count += 1
-            block2.append([b['id'], count])
+            block2.append([b["id"], count])
             try:
             try:
-                if b['option']['backwards_compatible']:
+                if b["option"]["backwards_compatible"]:
                     pass
                 bc_set = True
             except KeyError:
                     pass
                 bc_set = True
             except KeyError:
-                block3.append([b['id'], count])
+                block3.append([b["id"], count])
                 if bc_set:
                 if bc_set:
-                    raise ValueError("Backward compatible enum must "
-                                     "be last {!r} {!r}"
-                                     .format(name, b['id']))
+                    raise ValueError(
+                        "Backward compatible enum must "
+                        "be last {!r} {!r}".format(name, b["id"])
+                    )
         self.block = block2
         self.crc = str(block3).encode()
         global_type_add(name, self)
 
     def process(self, result):
         self.block = block2
         self.crc = str(block3).encode()
         global_type_add(name, self)
 
     def process(self, result):
-        result['types'].append(self)
+        result["types"].append(self)
 
     def __repr__(self):
         return self.name + str(self.block)
 
 
 class EnumFlag(Enum):
 
     def __repr__(self):
         return self.name + str(self.block)
 
 
 class EnumFlag(Enum):
-    type = 'EnumFlag'
+    type = "EnumFlag"
 
 
-    def __init__(self, name, block, enumtype='u32'):
+    def __init__(self, name, block, enumtype="u32"):
         super(EnumFlag, self).__init__(name, block, enumtype)
 
         for b in self.block:
             if bin(b[1])[2:].count("1") > 1:
         super(EnumFlag, self).__init__(name, block, enumtype)
 
         for b in self.block:
             if bin(b[1])[2:].count("1") > 1:
-                raise TypeError("%s is not a flag enum.  No element in a "
-                                "flag enum may have more than a "
-                                "single bit set." % self.name)
+                raise TypeError(
+                    "%s is not a flag enum.  No element in a "
+                    "flag enum may have more than a "
+                    "single bit set." % self.name
+                )
 
 
 class Import(Processable):
 
 
 class Import(Processable):
-    type = 'Import'
+    type = "Import"
     _initialized = False
 
     def __new__(cls, *args, **kwargs):
     _initialized = False
 
     def __new__(cls, *args, **kwargs):
@@ -440,7 +442,7 @@ class Import(Processable):
 
 
 class Option(Processable):
 
 
 class Option(Processable):
-    type = 'Option'
+    type = "Option"
 
     def __init__(self, option, value=None):
         self.option = option
 
     def __init__(self, option, value=None):
         self.option = option
@@ -458,7 +460,7 @@ class Option(Processable):
 
 
 class Array(Processable):
 
 
 class Array(Processable):
-    type = 'Array'
+    type = "Array"
 
     def __init__(self, fieldtype, name, length, modern_vla=False):
         self.fieldtype = fieldtype
 
     def __init__(self, fieldtype, name, length, modern_vla=False):
         self.fieldtype = fieldtype
@@ -474,12 +476,11 @@ class Array(Processable):
             self.vla = False
 
     def __repr__(self):
             self.vla = False
 
     def __repr__(self):
-        return str([self.fieldtype, self.fieldname, self.length,
-                    self.lengthfield])
+        return str([self.fieldtype, self.fieldname, self.length, self.lengthfield])
 
 
 class Field(Processable):
 
 
 class Field(Processable):
-    type = 'Field'
+    type = "Field"
 
     def __init__(self, fieldtype, name, limit=None):
         # limit field has been expanded to an options dict.
 
     def __init__(self, fieldtype, name, limit=None):
         # limit field has been expanded to an options dict.
@@ -487,13 +488,14 @@ class Field(Processable):
         self.fieldtype = fieldtype
         self.is_lengthfield = False
 
         self.fieldtype = fieldtype
         self.is_lengthfield = False
 
-        if self.fieldtype == 'string':
-            raise ValueError("The string type {!r} is an "
-                             "array type ".format(name))
+        if self.fieldtype == "string":
+            raise ValueError("The string type {!r} is an " "array type ".format(name))
 
         if name in keyword.kwlist:
 
         if name in keyword.kwlist:
-            raise ValueError("Fieldname {!r} is a python keyword and is not "
-                             "accessible via the python API. ".format(name))
+            raise ValueError(
+                "Fieldname {!r} is a python keyword and is not "
+                "accessible via the python API. ".format(name)
+            )
         self.fieldname = name
         self.limit = limit
 
         self.fieldname = name
         self.limit = limit
 
@@ -502,35 +504,34 @@ class Field(Processable):
 
 
 class Counter(Processable):
 
 
 class Counter(Processable):
-    type = 'Counter'
+    type = "Counter"
 
     def __init__(self, path, counter):
         self.name = path
         self.block = counter
 
     def process(self, result):  # -> Dict
 
     def __init__(self, path, counter):
         self.name = path
         self.block = counter
 
     def process(self, result):  # -> Dict
-        result['Counters'].append(self)
+        result["Counters"].append(self)
 
 
 class Paths(Processable):
 
 
 class Paths(Processable):
-    type = 'Paths'
+    type = "Paths"
 
     def __init__(self, pathset):
         self.paths = pathset
 
     def __repr__(self):
 
     def __init__(self, pathset):
         self.paths = pathset
 
     def __repr__(self):
-        return "%s(paths=%s)" % (
-            self.__class__.__name__, self.paths
-        )
+        return "%s(paths=%s)" % (self.__class__.__name__, self.paths)
 
 
 class Coord:
 
 
 class Coord:
-    """ Coordinates of a syntactic element. Consists of:
-            - File name
-            - Line number
-            - (optional) column number, for the Lexer
+    """Coordinates of a syntactic element. Consists of:
+    - File name
+    - Line number
+    - (optional) column number, for the Lexer
     """
     """
-    __slots__ = ('file', 'line', 'column', '__weakref__')
+
+    __slots__ = ("file", "line", "column", "__weakref__")
 
     def __init__(self, file, line, column=None):
         self.file = file
 
     def __init__(self, file, line, column=None):
         self.file = file
@@ -568,49 +569,47 @@ class VPPAPIParser:
             self.logger.warning("%s: %s" % (coord, msg))
 
     def _coord(self, lineno, column=None):
             self.logger.warning("%s: %s" % (coord, msg))
 
     def _coord(self, lineno, column=None):
-        return Coord(
-            file=self.filename,
-            line=lineno, column=column)
+        return Coord(file=self.filename, line=lineno, column=column)
 
     def _token_coord(self, p, token_idx):
 
     def _token_coord(self, p, token_idx):
-        """ Returns the coordinates for the YaccProduction object 'p' indexed
-            with 'token_idx'. The coordinate includes the 'lineno' and
-            'column'. Both follow the lex semantic, starting from 1.
+        """Returns the coordinates for the YaccProduction object 'p' indexed
+        with 'token_idx'. The coordinate includes the 'lineno' and
+        'column'. Both follow the lex semantic, starting from 1.
         """
         """
-        last_cr = p.lexer.lexdata.rfind('\n', 0, p.lexpos(token_idx))
+        last_cr = p.lexer.lexdata.rfind("\n", 0, p.lexpos(token_idx))
         if last_cr < 0:
             last_cr = -1
         if last_cr < 0:
             last_cr = -1
-        column = (p.lexpos(token_idx) - (last_cr))
+        column = p.lexpos(token_idx) - (last_cr)
         return self._coord(p.lineno(token_idx), column)
 
     def p_slist(self, p):
         return self._coord(p.lineno(token_idx), column)
 
     def p_slist(self, p):
-        '''slist : stmt
-                 | slist stmt'''
+        """slist : stmt
+        | slist stmt"""
         if len(p) == 2:
             p[0] = [p[1]]
         else:
             p[0] = p[1] + [p[2]]
 
     def p_stmt(self, p):
         if len(p) == 2:
             p[0] = [p[1]]
         else:
             p[0] = p[1] + [p[2]]
 
     def p_stmt(self, p):
-        '''stmt : define
-                | typedef
-                | option
-                | import
-                | enum
-                | enumflag
-                | union
-                | service
-                | paths
-                | counters'''
+        """stmt : define
+        | typedef
+        | option
+        | import
+        | enum
+        | enumflag
+        | union
+        | service
+        | paths
+        | counters"""
         p[0] = p[1]
 
     def p_import(self, p):
         p[0] = p[1]
 
     def p_import(self, p):
-        '''import : IMPORT STRING_LITERAL ';' '''
+        """import : IMPORT STRING_LITERAL ';'"""
         p[0] = Import(p[2], revision=self.revision)
 
     def p_path_elements(self, p):
         p[0] = Import(p[2], revision=self.revision)
 
     def p_path_elements(self, p):
-        '''path_elements : path_element
-                            | path_elements path_element'''
+        """path_elements : path_element
+        | path_elements path_element"""
         if len(p) == 2:
             p[0] = p[1]
         else:
         if len(p) == 2:
             p[0] = p[1]
         else:
@@ -620,20 +619,20 @@ class VPPAPIParser:
                 p[0] = p[1] + [p[2]]
 
     def p_path_element(self, p):
                 p[0] = p[1] + [p[2]]
 
     def p_path_element(self, p):
-        '''path_element : STRING_LITERAL STRING_LITERAL ';' '''
-        p[0] = {'path': p[1], 'counter': p[2]}
+        """path_element : STRING_LITERAL STRING_LITERAL ';'"""
+        p[0] = {"path": p[1], "counter": p[2]}
 
     def p_paths(self, p):
 
     def p_paths(self, p):
-        '''paths : PATHS '{' path_elements '}' ';' '''
+        """paths : PATHS '{' path_elements '}' ';'"""
         p[0] = Paths(p[3])
 
     def p_counters(self, p):
         p[0] = Paths(p[3])
 
     def p_counters(self, p):
-        '''counters : COUNTERS ID '{' counter_elements '}' ';' '''
+        """counters : COUNTERS ID '{' counter_elements '}' ';'"""
         p[0] = Counter(p[2], p[4])
 
     def p_counter_elements(self, p):
         p[0] = Counter(p[2], p[4])
 
     def p_counter_elements(self, p):
-        '''counter_elements : counter_element
-                            | counter_elements counter_element'''
+        """counter_elements : counter_element
+        | counter_elements counter_element"""
         if len(p) == 2:
             p[0] = [p[1]]
         else:
         if len(p) == 2:
             p[0] = [p[1]]
         else:
@@ -643,46 +642,47 @@ class VPPAPIParser:
                 p[0] = p[1] + [p[2]]
 
     def p_counter_element(self, p):
                 p[0] = p[1] + [p[2]]
 
     def p_counter_element(self, p):
-        '''counter_element : ID '{' counter_statements '}' ';' '''
-        p[0] = {**{'name': p[1]}, **p[3]}
+        """counter_element : ID '{' counter_statements '}' ';'"""
+        p[0] = {**{"name": p[1]}, **p[3]}
 
     def p_counter_statements(self, p):
 
     def p_counter_statements(self, p):
-        '''counter_statements : counter_statement
-                        | counter_statements counter_statement'''
+        """counter_statements : counter_statement
+        | counter_statements counter_statement"""
         if len(p) == 2:
             p[0] = p[1]
         else:
             p[0] = {**p[1], **p[2]}
 
     def p_counter_statement(self, p):
         if len(p) == 2:
             p[0] = p[1]
         else:
             p[0] = {**p[1], **p[2]}
 
     def p_counter_statement(self, p):
-        '''counter_statement : SEVERITY ID ';'
-                             | UNITS STRING_LITERAL ';'
-                             | DESCRIPTION STRING_LITERAL ';'
-                             | TYPE ID ';' '''
+        """counter_statement : SEVERITY ID ';'
+        | UNITS STRING_LITERAL ';'
+        | DESCRIPTION STRING_LITERAL ';'
+        | TYPE ID ';'"""
         p[0] = {p[1]: p[2]}
 
     def p_service(self, p):
         p[0] = {p[1]: p[2]}
 
     def p_service(self, p):
-        '''service : SERVICE '{' service_statements '}' ';' '''
+        """service : SERVICE '{' service_statements '}' ';'"""
         p[0] = p[3]
 
     def p_service_statements(self, p):
         p[0] = p[3]
 
     def p_service_statements(self, p):
-        '''service_statements : service_statement
-                        | service_statements service_statement'''
+        """service_statements : service_statement
+        | service_statements service_statement"""
         if len(p) == 2:
             p[0] = [p[1]]
         else:
             p[0] = p[1] + [p[2]]
 
     def p_service_statement(self, p):
         if len(p) == 2:
             p[0] = [p[1]]
         else:
             p[0] = p[1] + [p[2]]
 
     def p_service_statement(self, p):
-        '''service_statement : RPC ID RETURNS NULL ';'
-                             | RPC ID RETURNS ID ';'
-                             | RPC ID RETURNS STREAM ID ';'
-                             | RPC ID RETURNS ID EVENTS event_list ';' '''
+        """service_statement : RPC ID RETURNS NULL ';'
+        | RPC ID RETURNS ID ';'
+        | RPC ID RETURNS STREAM ID ';'
+        | RPC ID RETURNS ID EVENTS event_list ';'"""
         if p[2] == p[4]:
             # Verify that caller and reply differ
             self._parse_error(
         if p[2] == p[4]:
             # Verify that caller and reply differ
             self._parse_error(
-                'Reply ID ({}) should not be equal to Caller ID'.format(p[2]),
-                self._token_coord(p, 1))
+                "Reply ID ({}) should not be equal to Caller ID".format(p[2]),
+                self._token_coord(p, 1),
+            )
         if len(p) == 8:
             p[0] = Service(p[2], p[4], p[6])
         elif len(p) == 7:
         if len(p) == 8:
             p[0] = Service(p[2], p[4], p[6])
         elif len(p) == 7:
@@ -691,280 +691,283 @@ class VPPAPIParser:
             p[0] = Service(p[2], p[4])
 
     def p_service_statement2(self, p):
             p[0] = Service(p[2], p[4])
 
     def p_service_statement2(self, p):
-        '''service_statement : RPC ID RETURNS ID STREAM ID ';' '''
+        """service_statement : RPC ID RETURNS ID STREAM ID ';'"""
         p[0] = Service(p[2], p[4], stream_message=p[6], stream=True)
 
     def p_event_list(self, p):
         p[0] = Service(p[2], p[4], stream_message=p[6], stream=True)
 
     def p_event_list(self, p):
-        '''event_list : events
-                      | event_list events '''
+        """event_list : events
+        | event_list events"""
         if len(p) == 2:
             p[0] = [p[1]]
         else:
             p[0] = p[1] + [p[2]]
 
     def p_event(self, p):
         if len(p) == 2:
             p[0] = [p[1]]
         else:
             p[0] = p[1] + [p[2]]
 
     def p_event(self, p):
-        '''events : ID
-                  | ID ',' '''
+        """events : ID
+        | ID ','"""
         p[0] = p[1]
 
     def p_enum(self, p):
         p[0] = p[1]
 
     def p_enum(self, p):
-        '''enum : ENUM ID '{' enum_statements '}' ';' '''
+        """enum : ENUM ID '{' enum_statements '}' ';'"""
         p[0] = Enum(p[2], p[4])
 
     def p_enum_type(self, p):
         p[0] = Enum(p[2], p[4])
 
     def p_enum_type(self, p):
-        ''' enum : ENUM ID ':' enum_size '{' enum_statements '}' ';' '''
+        """enum : ENUM ID ':' enum_size '{' enum_statements '}' ';'"""
         if len(p) == 9:
             p[0] = Enum(p[2], p[6], enumtype=p[4])
         else:
             p[0] = Enum(p[2], p[4])
 
     def p_enumflag(self, p):
         if len(p) == 9:
             p[0] = Enum(p[2], p[6], enumtype=p[4])
         else:
             p[0] = Enum(p[2], p[4])
 
     def p_enumflag(self, p):
-        '''enumflag : ENUMFLAG ID '{' enum_statements '}' ';' '''
+        """enumflag : ENUMFLAG ID '{' enum_statements '}' ';'"""
         p[0] = EnumFlag(p[2], p[4])
 
     def p_enumflag_type(self, p):
         p[0] = EnumFlag(p[2], p[4])
 
     def p_enumflag_type(self, p):
-        ''' enumflag : ENUMFLAG ID ':' enumflag_size '{' enum_statements '}' ';' '''  # noqa : E502
+        """enumflag : ENUMFLAG ID ':' enumflag_size '{' enum_statements '}' ';'"""  # noqa : E502
         if len(p) == 9:
             p[0] = EnumFlag(p[2], p[6], enumtype=p[4])
         else:
             p[0] = EnumFlag(p[2], p[4])
 
     def p_enum_size(self, p):
         if len(p) == 9:
             p[0] = EnumFlag(p[2], p[6], enumtype=p[4])
         else:
             p[0] = EnumFlag(p[2], p[4])
 
     def p_enum_size(self, p):
-        ''' enum_size : U8
-                      | U16
-                      | U32
-                      | I8
-                      | I16
-                      | I32 '''
+        """enum_size : U8
+        | U16
+        | U32
+        | I8
+        | I16
+        | I32"""
         p[0] = p[1]
 
     def p_enumflag_size(self, p):
         p[0] = p[1]
 
     def p_enumflag_size(self, p):
-        ''' enumflag_size : U8
-                          | U16
-                          | U32 '''
+        """enumflag_size : U8
+        | U16
+        | U32"""
         p[0] = p[1]
 
     def p_define(self, p):
         p[0] = p[1]
 
     def p_define(self, p):
-        '''define : DEFINE ID '{' block_statements_opt '}' ';' '''
+        """define : DEFINE ID '{' block_statements_opt '}' ';'"""
         self.fields = []
         p[0] = Define(p[2], [], p[4])
 
     def p_define_flist(self, p):
         self.fields = []
         p[0] = Define(p[2], [], p[4])
 
     def p_define_flist(self, p):
-        '''define : flist DEFINE ID '{' block_statements_opt '}' ';' '''
+        """define : flist DEFINE ID '{' block_statements_opt '}' ';'"""
         # Legacy typedef
         # Legacy typedef
-        if 'typeonly' in p[1]:
-            self._parse_error('legacy typedef. use typedef: {} {}[{}];'
-                              .format(p[1], p[2], p[4]),
-                              self._token_coord(p, 1))
+        if "typeonly" in p[1]:
+            self._parse_error(
+                "legacy typedef. use typedef: {} {}[{}];".format(p[1], p[2], p[4]),
+                self._token_coord(p, 1),
+            )
         else:
             p[0] = Define(p[3], p[1], p[5])
 
     def p_flist(self, p):
         else:
             p[0] = Define(p[3], p[1], p[5])
 
     def p_flist(self, p):
-        '''flist : flag
-                 | flist flag'''
+        """flist : flag
+        | flist flag"""
         if len(p) == 2:
             p[0] = [p[1]]
         else:
             p[0] = p[1] + [p[2]]
 
     def p_flag(self, p):
         if len(p) == 2:
             p[0] = [p[1]]
         else:
             p[0] = p[1] + [p[2]]
 
     def p_flag(self, p):
-        '''flag : MANUAL_PRINT
-                | MANUAL_ENDIAN
-                | DONT_TRACE
-                | TYPEONLY
-                | AUTOENDIAN
-                | AUTOREPLY'''
+        """flag : MANUAL_PRINT
+        | MANUAL_ENDIAN
+        | DONT_TRACE
+        | TYPEONLY
+        | AUTOENDIAN
+        | AUTOREPLY"""
         if len(p) == 1:
             return
         p[0] = p[1]
 
     def p_typedef(self, p):
         if len(p) == 1:
             return
         p[0] = p[1]
 
     def p_typedef(self, p):
-        '''typedef : TYPEDEF ID '{' block_statements_opt '}' ';' '''
+        """typedef : TYPEDEF ID '{' block_statements_opt '}' ';'"""
         p[0] = Typedef(p[2], [], p[4])
 
     def p_typedef_flist(self, p):
         p[0] = Typedef(p[2], [], p[4])
 
     def p_typedef_flist(self, p):
-        '''typedef : flist TYPEDEF ID '{' block_statements_opt '}' ';' '''
+        """typedef : flist TYPEDEF ID '{' block_statements_opt '}' ';'"""
         p[0] = Typedef(p[3], p[1], p[5])
 
     def p_typedef_alias(self, p):
         p[0] = Typedef(p[3], p[1], p[5])
 
     def p_typedef_alias(self, p):
-        '''typedef : TYPEDEF declaration '''
+        """typedef : TYPEDEF declaration"""
         p[0] = Using(p[2].fieldname, [], p[2])
 
     def p_typedef_alias_flist(self, p):
         p[0] = Using(p[2].fieldname, [], p[2])
 
     def p_typedef_alias_flist(self, p):
-        '''typedef : flist TYPEDEF declaration '''
+        """typedef : flist TYPEDEF declaration"""
         p[0] = Using(p[3].fieldname, p[1], p[3])
 
     def p_block_statements_opt(self, p):
         p[0] = Using(p[3].fieldname, p[1], p[3])
 
     def p_block_statements_opt(self, p):
-        '''block_statements_opt : block_statements '''
+        """block_statements_opt : block_statements"""
         p[0] = p[1]
 
     def p_block_statements(self, p):
         p[0] = p[1]
 
     def p_block_statements(self, p):
-        '''block_statements : block_statement
-                            | block_statements block_statement'''
+        """block_statements : block_statement
+        | block_statements block_statement"""
         if len(p) == 2:
             p[0] = [p[1]]
         else:
             p[0] = p[1] + [p[2]]
 
     def p_block_statement(self, p):
         if len(p) == 2:
             p[0] = [p[1]]
         else:
             p[0] = p[1] + [p[2]]
 
     def p_block_statement(self, p):
-        '''block_statement : declaration
-                           | option '''
+        """block_statement : declaration
+        | option"""
         p[0] = p[1]
 
     def p_enum_statements(self, p):
         p[0] = p[1]
 
     def p_enum_statements(self, p):
-        '''enum_statements : enum_statement
-                           | enum_statements enum_statement'''
+        """enum_statements : enum_statement
+        | enum_statements enum_statement"""
         if len(p) == 2:
             p[0] = [p[1]]
         else:
             p[0] = p[1] + [p[2]]
 
     def p_enum_statement(self, p):
         if len(p) == 2:
             p[0] = [p[1]]
         else:
             p[0] = p[1] + [p[2]]
 
     def p_enum_statement(self, p):
-        '''enum_statement : ID '=' NUM ','
-                          | ID ','
-                          | ID '[' field_options ']' ','
-                          | ID '=' NUM '[' field_options ']' ',' '''
+        """enum_statement : ID '=' NUM ','
+        | ID ','
+        | ID '[' field_options ']' ','
+        | ID '=' NUM '[' field_options ']' ','"""
         if len(p) == 3:
         if len(p) == 3:
-            p[0] = {'id': p[1]}
+            p[0] = {"id": p[1]}
         elif len(p) == 5:
         elif len(p) == 5:
-            p[0] = {'id': p[1], 'value': p[3]}
+            p[0] = {"id": p[1], "value": p[3]}
         elif len(p) == 6:
         elif len(p) == 6:
-            p[0] = {'id': p[1], 'option': p[3]}
+            p[0] = {"id": p[1], "option": p[3]}
         elif len(p) == 8:
         elif len(p) == 8:
-            p[0] = {'id': p[1], 'value': p[3], 'option': p[5]}
+            p[0] = {"id": p[1], "value": p[3], "option": p[5]}
         else:
         else:
-            self._parse_error('ERROR', self._token_coord(p, 1))
+            self._parse_error("ERROR", self._token_coord(p, 1))
 
     def p_field_options(self, p):
 
     def p_field_options(self, p):
-        '''field_options : field_option
-                           | field_options field_option'''
+        """field_options : field_option
+        | field_options field_option"""
         if len(p) == 2:
             p[0] = p[1]
         else:
             p[0] = {**p[1], **p[2]}
 
     def p_field_option(self, p):
         if len(p) == 2:
             p[0] = p[1]
         else:
             p[0] = {**p[1], **p[2]}
 
     def p_field_option(self, p):
-        '''field_option : ID
-                        | ID '=' assignee ','
-                        | ID '=' assignee
+        """field_option : ID
+        | ID '=' assignee ','
+        | ID '=' assignee
 
 
-        '''
+        """
         if len(p) == 2:
             p[0] = {p[1]: None}
         else:
             p[0] = {p[1]: p[3]}
 
     def p_variable_name(self, p):
         if len(p) == 2:
             p[0] = {p[1]: None}
         else:
             p[0] = {p[1]: p[3]}
 
     def p_variable_name(self, p):
-        '''variable_name : ID
-                         | TYPE
-                         | SEVERITY
-                         | DESCRIPTION
-                         | COUNTERS
-                         | PATHS
-        '''
+        """variable_name : ID
+        | TYPE
+        | SEVERITY
+        | DESCRIPTION
+        | COUNTERS
+        | PATHS
+        """
         p[0] = p[1]
 
     def p_declaration(self, p):
         p[0] = p[1]
 
     def p_declaration(self, p):
-        '''declaration : type_specifier variable_name ';'
-                       | type_specifier variable_name '[' field_options ']' ';'
-        '''
+        """declaration : type_specifier variable_name ';'
+        | type_specifier variable_name '[' field_options ']' ';'
+        """
         if len(p) == 7:
             p[0] = Field(p[1], p[2], p[4])
         elif len(p) == 4:
             p[0] = Field(p[1], p[2])
         else:
         if len(p) == 7:
             p[0] = Field(p[1], p[2], p[4])
         elif len(p) == 4:
             p[0] = Field(p[1], p[2])
         else:
-            self._parse_error('ERROR', self._token_coord(p, 1))
+            self._parse_error("ERROR", self._token_coord(p, 1))
         self.fields.append(p[2])
 
     def p_declaration_array_vla(self, p):
         self.fields.append(p[2])
 
     def p_declaration_array_vla(self, p):
-        '''declaration : type_specifier variable_name '[' ']' ';' '''
+        """declaration : type_specifier variable_name '[' ']' ';'"""
         p[0] = Array(p[1], p[2], 0, modern_vla=True)
 
     def p_declaration_array(self, p):
         p[0] = Array(p[1], p[2], 0, modern_vla=True)
 
     def p_declaration_array(self, p):
-        '''declaration : type_specifier variable_name '[' NUM ']' ';'
-                       | type_specifier variable_name '[' ID ']' ';' '''
+        """declaration : type_specifier variable_name '[' NUM ']' ';'
+        | type_specifier variable_name '[' ID ']' ';'"""
 
         if len(p) != 7:
             return self._parse_error(
 
         if len(p) != 7:
             return self._parse_error(
-                'array: %s' % p.value,
-                self._coord(lineno=p.lineno))
+                "array: %s" % p.value, self._coord(lineno=p.lineno)
+            )
 
         # Make this error later
         if type(p[4]) is int and p[4] == 0:
             # XXX: Line number is wrong
 
         # Make this error later
         if type(p[4]) is int and p[4] == 0:
             # XXX: Line number is wrong
-            self._parse_warning('Old Style VLA: {} {}[{}];'
-                                .format(p[1], p[2], p[4]),
-                                self._token_coord(p, 1))
+            self._parse_warning(
+                "Old Style VLA: {} {}[{}];".format(p[1], p[2], p[4]),
+                self._token_coord(p, 1),
+            )
 
         if type(p[4]) is str and p[4] not in self.fields:
             # Verify that length field exists
 
         if type(p[4]) is str and p[4] not in self.fields:
             # Verify that length field exists
-            self._parse_error('Missing length field: {} {}[{}];'
-                              .format(p[1], p[2], p[4]),
-                              self._token_coord(p, 1))
+            self._parse_error(
+                "Missing length field: {} {}[{}];".format(p[1], p[2], p[4]),
+                self._token_coord(p, 1),
+            )
         p[0] = Array(p[1], p[2], p[4])
 
     def p_option(self, p):
         p[0] = Array(p[1], p[2], p[4])
 
     def p_option(self, p):
-        '''option : OPTION ID '=' assignee ';'
-                  | OPTION ID ';' '''
+        """option : OPTION ID '=' assignee ';'
+        | OPTION ID ';'"""
         if len(p) == 4:
             p[0] = Option(p[2])
         else:
             p[0] = Option(p[2], p[4])
 
     def p_assignee(self, p):
         if len(p) == 4:
             p[0] = Option(p[2])
         else:
             p[0] = Option(p[2], p[4])
 
     def p_assignee(self, p):
-        '''assignee : NUM
-                    | TRUE
-                    | FALSE
-                    | STRING_LITERAL '''
+        """assignee : NUM
+        | TRUE
+        | FALSE
+        | STRING_LITERAL"""
         p[0] = p[1]
 
     def p_type_specifier(self, p):
         p[0] = p[1]
 
     def p_type_specifier(self, p):
-        '''type_specifier : U8
-                          | U16
-                          | U32
-                          | U64
-                          | I8
-                          | I16
-                          | I32
-                          | I64
-                          | F64
-                          | BOOL
-                          | STRING'''
+        """type_specifier : U8
+        | U16
+        | U32
+        | U64
+        | I8
+        | I16
+        | I32
+        | I64
+        | F64
+        | BOOL
+        | STRING"""
         p[0] = p[1]
 
     # Do a second pass later to verify that user defined types are defined
     def p_typedef_specifier(self, p):
         p[0] = p[1]
 
     # Do a second pass later to verify that user defined types are defined
     def p_typedef_specifier(self, p):
-        '''type_specifier : ID '''
+        """type_specifier : ID"""
         if p[1] not in global_types:
         if p[1] not in global_types:
-            self._parse_error('Undefined type: {}'.format(p[1]),
-                              self._token_coord(p, 1))
+            self._parse_error(
+                "Undefined type: {}".format(p[1]), self._token_coord(p, 1)
+            )
         p[0] = p[1]
 
     def p_union(self, p):
         p[0] = p[1]
 
     def p_union(self, p):
-        '''union : UNION ID '{' block_statements_opt '}' ';' '''
+        """union : UNION ID '{' block_statements_opt '}' ';'"""
         p[0] = Union(p[2], [], p[4])
 
     def p_union_flist(self, p):
         p[0] = Union(p[2], [], p[4])
 
     def p_union_flist(self, p):
-        '''union : flist UNION ID '{' block_statements_opt '}' ';' '''
+        """union : flist UNION ID '{' block_statements_opt '}' ';'"""
         p[0] = Union(p[3], p[1], p[5])
 
     # Error rule for syntax errors
     def p_error(self, p):
         if p:
         p[0] = Union(p[3], p[1], p[5])
 
     # Error rule for syntax errors
     def p_error(self, p):
         if p:
-            self._parse_error(
-                'before: %s' % p.value,
-                self._coord(lineno=p.lineno))
+            self._parse_error("before: %s" % p.value, self._coord(lineno=p.lineno))
         else:
         else:
-            self._parse_error('At end of input', self.filename)
-
+            self._parse_error("At end of input", self.filename)
 
 
-class VPPAPI():
 
 
-    def __init__(self, debug=False, filename='', logger=None, revision=None):
+class VPPAPI:
+    def __init__(self, debug=False, filename="", logger=None, revision=None):
         self.lexer = lex.lex(module=VPPAPILexer(filename), debug=debug)
         self.lexer = lex.lex(module=VPPAPILexer(filename), debug=debug)
-        self.parser = yacc.yacc(module=VPPAPIParser(filename, logger,
-                                                    revision=revision),
-                                write_tables=False, debug=debug)
+        self.parser = yacc.yacc(
+            module=VPPAPIParser(filename, logger, revision=revision),
+            write_tables=False,
+            debug=debug,
+        )
         self.logger = logger
         self.revision = revision
         self.filename = filename
         self.logger = logger
         self.revision = revision
         self.filename = filename
@@ -979,38 +982,40 @@ class VPPAPI():
 
     def parse_filename(self, filename, debug=0):
         if self.revision:
 
     def parse_filename(self, filename, debug=0):
         if self.revision:
-            git_show = 'git show {}:{}'.format(self.revision, filename)
-            proc = Popen(git_show.split(), stdout=PIPE, encoding='utf-8')
+            git_show = "git show {}:{}".format(self.revision, filename)
+            proc = Popen(git_show.split(), stdout=PIPE, encoding="utf-8")
             try:
                 data, errs = proc.communicate()
                 if proc.returncode != 0:
             try:
                 data, errs = proc.communicate()
                 if proc.returncode != 0:
-                    print('File not found: {}:{}'
-                          .format(self.revision, filename), file=sys.stderr)
+                    print(
+                        "File not found: {}:{}".format(self.revision, filename),
+                        file=sys.stderr,
+                    )
                     sys.exit(2)
                 return self.parse_string(data, debug=debug)
             except Exception:
                 sys.exit(3)
         else:
             try:
                     sys.exit(2)
                 return self.parse_string(data, debug=debug)
             except Exception:
                 sys.exit(3)
         else:
             try:
-                with open(filename, encoding='utf-8') as fd:
+                with open(filename, encoding="utf-8") as fd:
                     return self.parse_fd(fd, None)
             except FileNotFoundError:
                     return self.parse_fd(fd, None)
             except FileNotFoundError:
-                print('File not found: {}'.format(filename), file=sys.stderr)
+                print("File not found: {}".format(filename), file=sys.stderr)
                 sys.exit(2)
 
     def process(self, objs):
         s = {}
                 sys.exit(2)
 
     def process(self, objs):
         s = {}
-        s['Option'] = {}
-        s['Define'] = []
-        s['Service'] = []
-        s['types'] = []
-        s['Import'] = []
-        s['Counters'] = []
-        s['Paths'] = []
+        s["Option"] = {}
+        s["Define"] = []
+        s["Service"] = []
+        s["types"] = []
+        s["Import"] = []
+        s["Counters"] = []
+        s["Paths"] = []
         crc = 0
         for o in objs:
             try:
         crc = 0
         for o in objs:
             try:
-                crc = binascii.crc32(o.crc, crc) & 0xffffffff
+                crc = binascii.crc32(o.crc, crc) & 0xFFFFFFFF
             except AttributeError:
                 pass
 
             except AttributeError:
                 pass
 
@@ -1021,82 +1026,84 @@ class VPPAPI():
             else:
                 o.process(s)
 
             else:
                 o.process(s)
 
-        msgs = {d.name: d for d in s['Define']}
-        svcs = {s.caller: s for s in s['Service']}
-        replies = {s.reply: s for s in s['Service']}
+        msgs = {d.name: d for d in s["Define"]}
+        svcs = {s.caller: s for s in s["Service"]}
+        replies = {s.reply: s for s in s["Service"]}
         seen_services = {}
 
         seen_services = {}
 
-        s['file_crc'] = crc
+        s["file_crc"] = crc
 
         for service in svcs:
             if service not in msgs:
                 raise ValueError(
 
         for service in svcs:
             if service not in msgs:
                 raise ValueError(
-                    'Service definition refers to unknown message'
-                    ' definition: {}'.format(service))
-            if svcs[service].reply != 'null' and \
-               svcs[service].reply not in msgs:
-                raise ValueError('Service definition refers to unknown message'
-                                 ' definition in reply: {}'
-                                 .format(svcs[service].reply))
+                    "Service definition refers to unknown message"
+                    " definition: {}".format(service)
+                )
+            if svcs[service].reply != "null" and svcs[service].reply not in msgs:
+                raise ValueError(
+                    "Service definition refers to unknown message"
+                    " definition in reply: {}".format(svcs[service].reply)
+                )
             if service in replies:
             if service in replies:
-                raise ValueError('Service definition refers to message'
-                                 ' marked as reply: {}'.format(service))
+                raise ValueError(
+                    "Service definition refers to message"
+                    " marked as reply: {}".format(service)
+                )
             for event in svcs[service].events:
                 if event not in msgs:
             for event in svcs[service].events:
                 if event not in msgs:
-                    raise ValueError('Service definition refers to unknown '
-                                     'event: {} in message: {}'
-                                     .format(event, service))
+                    raise ValueError(
+                        "Service definition refers to unknown "
+                        "event: {} in message: {}".format(event, service)
+                    )
                 seen_services[event] = True
 
         # Create services implicitly
         for d in msgs:
             if d in seen_services:
                 continue
                 seen_services[event] = True
 
         # Create services implicitly
         for d in msgs:
             if d in seen_services:
                 continue
-            if d.endswith('_reply'):
+            if d.endswith("_reply"):
                 if d[:-6] in svcs:
                     continue
                 if d[:-6] not in msgs:
                 if d[:-6] in svcs:
                     continue
                 if d[:-6] not in msgs:
-                    raise ValueError('{} missing calling message'
-                                     .format(d))
+                    raise ValueError("{} missing calling message".format(d))
                 continue
                 continue
-            if d.endswith('_dump'):
+            if d.endswith("_dump"):
                 if d in svcs:
                     continue
                 if d in svcs:
                     continue
-                if d[:-5]+'_details' in msgs:
-                    s['Service'].append(Service(d, d[:-5]+'_details',
-                                                stream=True))
+                if d[:-5] + "_details" in msgs:
+                    s["Service"].append(Service(d, d[:-5] + "_details", stream=True))
                 else:
                 else:
-                    raise ValueError('{} missing details message'
-                                     .format(d))
+                    raise ValueError("{} missing details message".format(d))
                 continue
 
                 continue
 
-            if d.endswith('_details'):
-                if d[:-8]+'_get' in msgs:
-                    if d[:-8]+'_get' in svcs:
+            if d.endswith("_details"):
+                if d[:-8] + "_get" in msgs:
+                    if d[:-8] + "_get" in svcs:
                         continue
                         continue
-                    raise ValueError('{} should be in a stream service'
-                                     .format(d[:-8]+'_get'))
-                if d[:-8]+'_dump' in msgs:
+                    raise ValueError(
+                        "{} should be in a stream service".format(d[:-8] + "_get")
+                    )
+                if d[:-8] + "_dump" in msgs:
                     continue
                     continue
-                raise ValueError('{} missing dump or get message'
-                                 .format(d))
+                raise ValueError("{} missing dump or get message".format(d))
 
             if d in svcs:
                 continue
 
             if d in svcs:
                 continue
-            if d+'_reply' in msgs:
-                s['Service'].append(Service(d, d+'_reply'))
+            if d + "_reply" in msgs:
+                s["Service"].append(Service(d, d + "_reply"))
             else:
                 raise ValueError(
             else:
                 raise ValueError(
-                    '{} missing reply message ({}) or service definition'
-                    .format(d, d+'_reply'))
+                    "{} missing reply message ({}) or service definition".format(
+                        d, d + "_reply"
+                    )
+                )
 
         return s
 
     def process_imports(self, objs, in_import, result):  # -> List
         for o in objs:
             # Only allow the following object types from imported file
 
         return s
 
     def process_imports(self, objs, in_import, result):  # -> List
         for o in objs:
             # Only allow the following object types from imported file
-            if in_import and not isinstance(o, (Enum, Import, Typedef,
-                                                Union, Using)):
+            if in_import and not isinstance(o, (Enum, Import, Typedef, Union, Using)):
                 continue
             if isinstance(o, Import):
                 result.append(o)
                 continue
             if isinstance(o, Import):
                 result.append(o)
@@ -1109,7 +1116,7 @@ class VPPAPI():
 # Add message ids to each message.
 def add_msg_id(s):
     for o in s:
 # Add message ids to each message.
 def add_msg_id(s):
     for o in s:
-        o.block.insert(0, Field('u16', '_vl_msg_id'))
+        o.block.insert(0, Field("u16", "_vl_msg_id"))
     return s
 
 
     return s
 
 
@@ -1129,11 +1136,11 @@ def dirlist_get():
 def foldup_blocks(block, crc):
     for b in block:
         # Look up CRC in user defined types
 def foldup_blocks(block, crc):
     for b in block:
         # Look up CRC in user defined types
-        if b.fieldtype.startswith('vl_api_'):
+        if b.fieldtype.startswith("vl_api_"):
             # Recursively
             t = global_types[b.fieldtype]
             try:
             # Recursively
             t = global_types[b.fieldtype]
             try:
-                crc = binascii.crc32(t.crc, crc) & 0xffffffff
+                crc = binascii.crc32(t.crc, crc) & 0xFFFFFFFF
                 crc = foldup_blocks(t.block, crc)
             except AttributeError:
                 pass
                 crc = foldup_blocks(t.block, crc)
             except AttributeError:
                 pass
@@ -1142,34 +1149,43 @@ def foldup_blocks(block, crc):
 
 def foldup_crcs(s):
     for f in s:
 
 def foldup_crcs(s):
     for f in s:
-        f.crc = foldup_blocks(f.block,
-                              binascii.crc32(f.crc) & 0xffffffff)
+        f.crc = foldup_blocks(f.block, binascii.crc32(f.crc) & 0xFFFFFFFF)
 
 
 #
 # Main
 #
 def main():
 
 
 #
 # Main
 #
 def main():
-    if sys.version_info < (3, 5,):
-        log.exception('vppapigen requires a supported version of python. '
-                      'Please use version 3.5 or greater. '
-                      'Using %s', sys.version)
+    if sys.version_info < (
+        3,
+        5,
+    ):
+        log.exception(
+            "vppapigen requires a supported version of python. "
+            "Please use version 3.5 or greater. "
+            "Using %s",
+            sys.version,
+        )
         return 1
 
         return 1
 
-    cliparser = argparse.ArgumentParser(description='VPP API generator')
-    cliparser.add_argument('--pluginpath', default="")
-    cliparser.add_argument('--includedir', action='append')
-    cliparser.add_argument('--outputdir', action='store')
-    cliparser.add_argument('--input')
-    cliparser.add_argument('--output', nargs='?',
-                           type=argparse.FileType('w', encoding='UTF-8'),
-                           default=sys.stdout)
-
-    cliparser.add_argument('output_module', nargs='?', default='C')
-    cliparser.add_argument('--debug', action='store_true')
-    cliparser.add_argument('--show-name', nargs=1)
-    cliparser.add_argument('--git-revision',
-                           help="Git revision to use for opening files")
+    cliparser = argparse.ArgumentParser(description="VPP API generator")
+    cliparser.add_argument("--pluginpath", default="")
+    cliparser.add_argument("--includedir", action="append")
+    cliparser.add_argument("--outputdir", action="store")
+    cliparser.add_argument("--input")
+    cliparser.add_argument(
+        "--output",
+        nargs="?",
+        type=argparse.FileType("w", encoding="UTF-8"),
+        default=sys.stdout,
+    )
+
+    cliparser.add_argument("output_module", nargs="?", default="C")
+    cliparser.add_argument("--debug", action="store_true")
+    cliparser.add_argument("--show-name", nargs=1)
+    cliparser.add_argument(
+        "--git-revision", help="Git revision to use for opening files"
+    )
     args = cliparser.parse_args()
 
     dirlist_add(args.includedir)
     args = cliparser.parse_args()
 
     dirlist_add(args.includedir)
@@ -1182,7 +1198,7 @@ def main():
     elif args.input:
         filename = args.input
     else:
     elif args.input:
         filename = args.input
     else:
-        filename = ''
+        filename = ""
 
     if args.debug:
         logging.basicConfig(stream=sys.stdout, level=logging.WARNING)
 
     if args.debug:
         logging.basicConfig(stream=sys.stdout, level=logging.WARNING)
@@ -1195,36 +1211,34 @@ def main():
     from importlib.machinery import SourceFileLoader
 
     # Default path
     from importlib.machinery import SourceFileLoader
 
     # Default path
-    pluginpath = ''
+    pluginpath = ""
     if not args.pluginpath:
         cand = []
         cand.append(os.path.dirname(os.path.realpath(__file__)))
     if not args.pluginpath:
         cand = []
         cand.append(os.path.dirname(os.path.realpath(__file__)))
-        cand.append(os.path.dirname(os.path.realpath(__file__)) +
-                    '/../share/vpp/')
+        cand.append(os.path.dirname(os.path.realpath(__file__)) + "/../share/vpp/")
         for c in cand:
         for c in cand:
-            c += '/'
-            if os.path.isfile('{}vppapigen_{}.py'
-                              .format(c, args.output_module.lower())):
+            c += "/"
+            if os.path.isfile(
+                "{}vppapigen_{}.py".format(c, args.output_module.lower())
+            ):
                 pluginpath = c
                 break
     else:
                 pluginpath = c
                 break
     else:
-        pluginpath = args.pluginpath + '/'
-    if pluginpath == '':
-        log.exception('Output plugin not found')
+        pluginpath = args.pluginpath + "/"
+    if pluginpath == "":
+        log.exception("Output plugin not found")
         return 1
         return 1
-    module_path = '{}vppapigen_{}.py'.format(pluginpath,
-                                             args.output_module.lower())
+    module_path = "{}vppapigen_{}.py".format(pluginpath, args.output_module.lower())
 
     try:
 
     try:
-        plugin = SourceFileLoader(args.output_module,
-                                  module_path).load_module()
+        plugin = SourceFileLoader(args.output_module, module_path).load_module()
     except Exception as err:
     except Exception as err:
-        log.exception('Error importing output plugin: %s, %s',
-                      module_path, err)
+        log.exception("Error importing output plugin: %s, %s", module_path, err)
         return 1
 
         return 1
 
-    parser = VPPAPI(debug=args.debug, filename=filename, logger=log,
-                    revision=args.git_revision)
+    parser = VPPAPI(
+        debug=args.debug, filename=filename, logger=log, revision=args.git_revision
+    )
 
     try:
         if not args.input:
 
     try:
         if not args.input:
@@ -1232,7 +1246,7 @@ def main():
         else:
             parsed_objects = parser.parse_filename(args.input, log)
     except ParseError as e:
         else:
             parsed_objects = parser.parse_filename(args.input, log)
     except ParseError as e:
-        print('Parse error: ', e, file=sys.stderr)
+        print("Parse error: ", e, file=sys.stderr)
         sys.exit(1)
 
     # Build a list of objects. Hash of lists.
         sys.exit(1)
 
     # Build a list of objects. Hash of lists.
@@ -1250,32 +1264,33 @@ def main():
     else:
         s = parser.process(parsed_objects)
         imports = parser.process_imports(parsed_objects, False, result)
     else:
         s = parser.process(parsed_objects)
         imports = parser.process_imports(parsed_objects, False, result)
-        s['imported'] = parser.process(imports)
+        s["imported"] = parser.process(imports)
 
     # Add msg_id field
 
     # Add msg_id field
-    s['Define'] = add_msg_id(s['Define'])
+    s["Define"] = add_msg_id(s["Define"])
 
     # Fold up CRCs
 
     # Fold up CRCs
-    foldup_crcs(s['Define'])
+    foldup_crcs(s["Define"])
 
     #
     # Debug
     if args.debug:
         import pprint
 
     #
     # Debug
     if args.debug:
         import pprint
+
         pp = pprint.PrettyPrinter(indent=4, stream=sys.stderr)
         pp = pprint.PrettyPrinter(indent=4, stream=sys.stderr)
-        for t in s['Define']:
+        for t in s["Define"]:
             pp.pprint([t.name, t.flags, t.block])
             pp.pprint([t.name, t.flags, t.block])
-        for t in s['types']:
+        for t in s["types"]:
             pp.pprint([t.name, t.block])
 
     result = plugin.run(args, filename, s)
     if result:
         print(result, file=args.output)
     else:
             pp.pprint([t.name, t.block])
 
     result = plugin.run(args, filename, s)
     if result:
         print(result, file=args.output)
     else:
-        log.exception('Running plugin failed: %s %s', filename, result)
+        log.exception("Running plugin failed: %s %s", filename, result)
         return 1
     return 0
 
 
         return 1
     return 0
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     sys.exit(main())
     sys.exit(main())
index f93e898..fdbb727 100644 (file)
 # binary API format
 #
 
 # binary API format
 #
 
-'''
+"""
 This module creates C code for core VPP, VPP plugins and client side VAT and
 VAT2 tests.
 This module creates C code for core VPP, VPP plugins and client side VAT and
 VAT2 tests.
-'''
+"""
 
 import datetime
 import itertools
 
 import datetime
 import itertools
@@ -35,98 +35,103 @@ process_imports = False
 
 
 ###############################################################################
 
 
 ###############################################################################
-class ToJSON():
-    '''Class to generate functions converting from VPP binary API to JSON.'''
+class ToJSON:
+    """Class to generate functions converting from VPP binary API to JSON."""
+
     _dispatch = {}
     _dispatch = {}
-    noprint_fields = {'_vl_msg_id': None,
-                      'client_index': None,
-                      'context': None}
-    is_number = {'u8': None,
-                 'i8': None,
-                 'u16': None,
-                 'i16': None,
-                 'u32': None,
-                 'i32': None,
-                 'u64': None,
-                 'i64': None,
-                 'f64': None,
-                 }
+    noprint_fields = {"_vl_msg_id": None, "client_index": None, "context": None}
+    is_number = {
+        "u8": None,
+        "i8": None,
+        "u16": None,
+        "i16": None,
+        "u32": None,
+        "i32": None,
+        "u64": None,
+        "i64": None,
+        "f64": None,
+    }
 
     def __init__(self, module, types, defines, imported_types, stream):
         self.stream = stream
         self.module = module
         self.defines = defines
         self.types = types
 
     def __init__(self, module, types, defines, imported_types, stream):
         self.stream = stream
         self.module = module
         self.defines = defines
         self.types = types
-        self.types_hash = {'vl_api_'+d.name+'_t':
-                           d for d in types + imported_types}
+        self.types_hash = {"vl_api_" + d.name + "_t": d for d in types + imported_types}
         self.defines_hash = {d.name: d for d in defines}
 
     def header(self):
         self.defines_hash = {d.name: d for d in defines}
 
     def header(self):
-        '''Output the top boilerplate.'''
+        """Output the top boilerplate."""
         write = self.stream.write
         write = self.stream.write
-        write('#ifndef included_{}_api_tojson_h\n'.format(self.module))
-        write('#define included_{}_api_tojson_h\n'.format(self.module))
-        write('#include <vppinfra/cJSON.h>\n\n')
-        write('#include <vppinfra/jsonformat.h>\n\n')
-        if self.module == 'interface_types':
-            write('#define vl_printfun\n')
-            write('#include <vnet/interface_types.api.h>\n\n')
+        write("#ifndef included_{}_api_tojson_h\n".format(self.module))
+        write("#define included_{}_api_tojson_h\n".format(self.module))
+        write("#include <vppinfra/cJSON.h>\n\n")
+        write("#include <vppinfra/jsonformat.h>\n\n")
+        if self.module == "interface_types":
+            write("#define vl_printfun\n")
+            write("#include <vnet/interface_types.api.h>\n\n")
 
     def footer(self):
 
     def footer(self):
-        '''Output the bottom boilerplate.'''
+        """Output the bottom boilerplate."""
         write = self.stream.write
         write = self.stream.write
-        write('#endif\n')
+        write("#endif\n")
 
     def get_base_type(self, t):
         vt_type = None
         try:
             vt = self.types_hash[t]
 
     def get_base_type(self, t):
         vt_type = None
         try:
             vt = self.types_hash[t]
-            if vt.type == 'Using' and 'length' not in vt.alias:
-                vt_type = vt.alias['type']
+            if vt.type == "Using" and "length" not in vt.alias:
+                vt_type = vt.alias["type"]
         except KeyError:
             vt = t
         return vt, vt_type
 
     def get_json_func(self, t):
         except KeyError:
             vt = t
         return vt, vt_type
 
     def get_json_func(self, t):
-        '''Given the type, returns the function to use to create a
-        cJSON object'''
+        """Given the type, returns the function to use to create a
+        cJSON object"""
         vt, vt_type = self.get_base_type(t)
 
         if t in self.is_number or vt_type in self.is_number:
         vt, vt_type = self.get_base_type(t)
 
         if t in self.is_number or vt_type in self.is_number:
-            return 'cJSON_AddNumberToObject', '', False
-        if t == 'bool':
-            return 'cJSON_AddBoolToObject', '', False
+            return "cJSON_AddNumberToObject", "", False
+        if t == "bool":
+            return "cJSON_AddBoolToObject", "", False
 
         # Lookup type name check if it's enum
 
         # Lookup type name check if it's enum
-        if vt.type == 'Enum' or vt.type == 'EnumFlag':
-            return '{t}_tojson'.format(t=t), '', True
-        return '{t}_tojson'.format(t=t), '&', True
+        if vt.type == "Enum" or vt.type == "EnumFlag":
+            return "{t}_tojson".format(t=t), "", True
+        return "{t}_tojson".format(t=t), "&", True
 
     def get_json_array_func(self, t):
 
     def get_json_array_func(self, t):
-        '''Given a type returns the function to create a cJSON object
-        for arrays.'''
+        """Given a type returns the function to create a cJSON object
+        for arrays."""
         if t in self.is_number:
         if t in self.is_number:
-            return 'cJSON_CreateNumber', ''
-        if t == 'bool':
-            return 'cJSON_CreateBool', ''
+            return "cJSON_CreateNumber", ""
+        if t == "bool":
+            return "cJSON_CreateBool", ""
         vt, vt_type = self.get_base_type(t)
         vt, vt_type = self.get_base_type(t)
-        if vt.type == 'Enum' or vt.type == 'EnumFlag':
-            return '{t}_tojson'.format(t=t), ''
-        return '{t}_tojson'.format(t=t), '&'
+        if vt.type == "Enum" or vt.type == "EnumFlag":
+            return "{t}_tojson".format(t=t), ""
+        return "{t}_tojson".format(t=t), "&"
 
     def print_string(self, o):
 
     def print_string(self, o):
-        '''Create cJSON object from vl_api_string_t'''
+        """Create cJSON object from vl_api_string_t"""
         write = self.stream.write
         if o.modern_vla:
         write = self.stream.write
         if o.modern_vla:
-            write('    vl_api_string_cJSON_AddToObject(o, "{n}", &a->{n});\n'
-                  .format(n=o.fieldname))
+            write(
+                '    vl_api_string_cJSON_AddToObject(o, "{n}", &a->{n});\n'.format(
+                    n=o.fieldname
+                )
+            )
         else:
 
         else:
 
-            write('    cJSON_AddStringToObject(o, "{n}", (char *)a->{n});\n'
-                  .format(n=o.fieldname))
+            write(
+                '    cJSON_AddStringToObject(o, "{n}", (char *)a->{n});\n'.format(
+                    n=o.fieldname
+                )
+            )
 
     def print_field(self, o):
 
     def print_field(self, o):
-        '''Called for every field in a typedef or define.'''
+        """Called for every field in a typedef or define."""
         write = self.stream.write
         if o.fieldname in self.noprint_fields:
             return
         write = self.stream.write
         if o.fieldname in self.noprint_fields:
             return
@@ -134,19 +139,21 @@ class ToJSON():
         f, p, newobj = self.get_json_func(o.fieldtype)
 
         if newobj:
         f, p, newobj = self.get_json_func(o.fieldtype)
 
         if newobj:
-            write('    cJSON_AddItemToObject(o, "{n}", {f}({p}a->{n}));\n'
-                  .format(f=f, p=p, n=o.fieldname))
+            write(
+                '    cJSON_AddItemToObject(o, "{n}", {f}({p}a->{n}));\n'.format(
+                    f=f, p=p, n=o.fieldname
+                )
+            )
         else:
         else:
-            write('    {f}(o, "{n}", {p}a->{n});\n'
-                  .format(f=f, p=p, n=o.fieldname))
+            write('    {f}(o, "{n}", {p}a->{n});\n'.format(f=f, p=p, n=o.fieldname))
 
 
-    _dispatch['Field'] = print_field
+    _dispatch["Field"] = print_field
 
     def print_array(self, o):
 
     def print_array(self, o):
-        '''Converts a VPP API array to cJSON array.'''
+        """Converts a VPP API array to cJSON array."""
         write = self.stream.write
 
         write = self.stream.write
 
-        forloop = '''\
+        forloop = """\
     {{
         int i;
         cJSON *array = cJSON_AddArrayToObject(o, "{n}");
     {{
         int i;
         cJSON *array = cJSON_AddArrayToObject(o, "{n}");
@@ -154,237 +161,263 @@ class ToJSON():
             cJSON_AddItemToArray(array, {f}({p}a->{n}[i]));
         }}
     }}
             cJSON_AddItemToArray(array, {f}({p}a->{n}[i]));
         }}
     }}
-'''
+"""
 
 
-        if o.fieldtype == 'string':
+        if o.fieldtype == "string":
             self.print_string(o)
             return
 
             self.print_string(o)
             return
 
-        lfield = 'a->' + o.lengthfield if o.lengthfield else o.length
-        if o.fieldtype == 'u8':
-            write('    {\n')
+        lfield = "a->" + o.lengthfield if o.lengthfield else o.length
+        if o.fieldtype == "u8":
+            write("    {\n")
             # What is length field doing here?
             # What is length field doing here?
-            write('    u8 *s = format(0, "0x%U", format_hex_bytes, '
-                  '&a->{n}, {lfield});\n'
-                  .format(n=o.fieldname, lfield=lfield))
-            write('    cJSON_AddStringToObject(o, "{n}", (char *)s);\n'
-                  .format(n=o.fieldname))
-            write('    vec_free(s);\n')
-            write('    }\n')
+            write(
+                '    u8 *s = format(0, "0x%U", format_hex_bytes, '
+                "&a->{n}, {lfield});\n".format(n=o.fieldname, lfield=lfield)
+            )
+            write(
+                '    cJSON_AddStringToObject(o, "{n}", (char *)s);\n'.format(
+                    n=o.fieldname
+                )
+            )
+            write("    vec_free(s);\n")
+            write("    }\n")
             return
 
         f, p = self.get_json_array_func(o.fieldtype)
             return
 
         f, p = self.get_json_array_func(o.fieldtype)
-        write(forloop.format(lfield=lfield,
-                             t=o.fieldtype,
-                             n=o.fieldname,
-                             f=f,
-                             p=p))
+        write(forloop.format(lfield=lfield, t=o.fieldtype, n=o.fieldname, f=f, p=p))
 
 
-    _dispatch['Array'] = print_array
+    _dispatch["Array"] = print_array
 
     def print_enum(self, o):
 
     def print_enum(self, o):
-        '''Create cJSON object (string) for VPP API enum'''
+        """Create cJSON object (string) for VPP API enum"""
         write = self.stream.write
         write = self.stream.write
-        write('static inline cJSON *vl_api_{name}_t_tojson '
-              '(vl_api_{name}_t a) {{\n'.format(name=o.name))
+        write(
+            "static inline cJSON *vl_api_{name}_t_tojson "
+            "(vl_api_{name}_t a) {{\n".format(name=o.name)
+        )
 
         write("    switch(a) {\n")
         for b in o.block:
             write("    case %s:\n" % b[1])
             write('        return cJSON_CreateString("{}");\n'.format(b[0]))
         write('    default: return cJSON_CreateString("Invalid ENUM");\n')
 
         write("    switch(a) {\n")
         for b in o.block:
             write("    case %s:\n" % b[1])
             write('        return cJSON_CreateString("{}");\n'.format(b[0]))
         write('    default: return cJSON_CreateString("Invalid ENUM");\n')
-        write('    }\n')
-        write('    return 0;\n')
-        write('}\n')
+        write("    }\n")
+        write("    return 0;\n")
+        write("}\n")
 
 
-    _dispatch['Enum'] = print_enum
+    _dispatch["Enum"] = print_enum
 
     def print_enum_flag(self, o):
 
     def print_enum_flag(self, o):
-        '''Create cJSON object (string) for VPP API enum'''
+        """Create cJSON object (string) for VPP API enum"""
         write = self.stream.write
         write = self.stream.write
-        write('static inline cJSON *vl_api_{name}_t_tojson '
-              '(vl_api_{name}_t a) {{\n'.format(name=o.name))
-        write('    cJSON *array = cJSON_CreateArray();\n')
+        write(
+            "static inline cJSON *vl_api_{name}_t_tojson "
+            "(vl_api_{name}_t a) {{\n".format(name=o.name)
+        )
+        write("    cJSON *array = cJSON_CreateArray();\n")
 
         for b in o.block:
             if b[1] == 0:
 
         for b in o.block:
             if b[1] == 0:
-                    continue
-            write('    if (a & {})\n'.format(b[0]))
+                continue
+            write("    if (a & {})\n".format(b[0]))
             write(
             write(
-                '       cJSON_AddItemToArray(array, cJSON_CreateString("{}"));\n'.format(b[0]))
-        write('    return array;\n')
-        write('}\n')
+                '       cJSON_AddItemToArray(array, cJSON_CreateString("{}"));\n'.format(
+                    b[0]
+                )
+            )
+        write("    return array;\n")
+        write("}\n")
 
 
-    _dispatch['EnumFlag'] = print_enum_flag
+    _dispatch["EnumFlag"] = print_enum_flag
 
     def print_typedef(self, o):
 
     def print_typedef(self, o):
-        '''Create cJSON (dictionary) object from VPP API typedef'''
+        """Create cJSON (dictionary) object from VPP API typedef"""
         write = self.stream.write
         write = self.stream.write
-        write('static inline cJSON *vl_api_{name}_t_tojson '
-              '(vl_api_{name}_t *a) {{\n'.format(name=o.name))
-        write('    cJSON *o = cJSON_CreateObject();\n')
+        write(
+            "static inline cJSON *vl_api_{name}_t_tojson "
+            "(vl_api_{name}_t *a) {{\n".format(name=o.name)
+        )
+        write("    cJSON *o = cJSON_CreateObject();\n")
 
         for t in o.block:
             self._dispatch[t.type](self, t)
 
 
         for t in o.block:
             self._dispatch[t.type](self, t)
 
-        write('    return o;\n')
-        write('}\n')
+        write("    return o;\n")
+        write("}\n")
 
     def print_define(self, o):
 
     def print_define(self, o):
-        '''Create cJSON (dictionary) object from VPP API define'''
+        """Create cJSON (dictionary) object from VPP API define"""
         write = self.stream.write
         write = self.stream.write
-        write('static inline cJSON *vl_api_{name}_t_tojson '
-              '(vl_api_{name}_t *a) {{\n'.format(name=o.name))
-        write('    cJSON *o = cJSON_CreateObject();\n')
-        write('    cJSON_AddStringToObject(o, "_msgname", "{}");\n'
-              .format(o.name))
-        write('    cJSON_AddStringToObject(o, "_crc", "{crc:08x}");\n'
-              .format(crc=o.crc))
+        write(
+            "static inline cJSON *vl_api_{name}_t_tojson "
+            "(vl_api_{name}_t *a) {{\n".format(name=o.name)
+        )
+        write("    cJSON *o = cJSON_CreateObject();\n")
+        write('    cJSON_AddStringToObject(o, "_msgname", "{}");\n'.format(o.name))
+        write(
+            '    cJSON_AddStringToObject(o, "_crc", "{crc:08x}");\n'.format(crc=o.crc)
+        )
 
         for t in o.block:
             self._dispatch[t.type](self, t)
 
 
         for t in o.block:
             self._dispatch[t.type](self, t)
 
-        write('    return o;\n')
-        write('}\n')
+        write("    return o;\n")
+        write("}\n")
 
     def print_using(self, o):
 
     def print_using(self, o):
-        '''Create cJSON (dictionary) object from VPP API aliased type'''
+        """Create cJSON (dictionary) object from VPP API aliased type"""
         if o.manual_print:
             return
 
         write = self.stream.write
         if o.manual_print:
             return
 
         write = self.stream.write
-        write('static inline cJSON *vl_api_{name}_t_tojson '
-              '(vl_api_{name}_t *a) {{\n'.format(name=o.name))
-
-        write('    u8 *s = format(0, "%U", format_vl_api_{}_t, a);\n'
-              .format(o.name))
-        write('    cJSON *o = cJSON_CreateString((char *)s);\n')
-        write('    vec_free(s);\n')
-        write('    return o;\n')
-        write('}\n')
-
-    _dispatch['Typedef'] = print_typedef
-    _dispatch['Define'] = print_define
-    _dispatch['Using'] = print_using
-    _dispatch['Union'] = print_typedef
+        write(
+            "static inline cJSON *vl_api_{name}_t_tojson "
+            "(vl_api_{name}_t *a) {{\n".format(name=o.name)
+        )
+
+        write('    u8 *s = format(0, "%U", format_vl_api_{}_t, a);\n'.format(o.name))
+        write("    cJSON *o = cJSON_CreateString((char *)s);\n")
+        write("    vec_free(s);\n")
+        write("    return o;\n")
+        write("}\n")
+
+    _dispatch["Typedef"] = print_typedef
+    _dispatch["Define"] = print_define
+    _dispatch["Using"] = print_using
+    _dispatch["Union"] = print_typedef
 
     def generate_function(self, t):
 
     def generate_function(self, t):
-        '''Main entry point'''
+        """Main entry point"""
         write = self.stream.write
         if t.manual_print:
         write = self.stream.write
         if t.manual_print:
-            write('/* Manual print {} */\n'.format(t.name))
+            write("/* Manual print {} */\n".format(t.name))
             return
         self._dispatch[t.type](self, t)
 
     def generate_types(self):
             return
         self._dispatch[t.type](self, t)
 
     def generate_types(self):
-        '''Main entry point'''
+        """Main entry point"""
         for t in self.types:
             self.generate_function(t)
 
     def generate_defines(self):
         for t in self.types:
             self.generate_function(t)
 
     def generate_defines(self):
-        '''Main entry point'''
+        """Main entry point"""
         for t in self.defines:
             self.generate_function(t)
 
 
         for t in self.defines:
             self.generate_function(t)
 
 
-class FromJSON():
-    '''
+class FromJSON:
+    """
     Parse JSON objects into VPP API binary message structures.
     Parse JSON objects into VPP API binary message structures.
-    '''
+    """
+
     _dispatch = {}
     _dispatch = {}
-    noprint_fields = {'_vl_msg_id': None,
-                      'client_index': None,
-                      'context': None}
-    is_number = {'u8': None,
-                 'i8': None,
-                 'u16': None,
-                 'i16': None,
-                 'u32': None,
-                 'i32': None,
-                 'u64': None,
-                 'i64': None,
-                 'f64': None,
-                 }
+    noprint_fields = {"_vl_msg_id": None, "client_index": None, "context": None}
+    is_number = {
+        "u8": None,
+        "i8": None,
+        "u16": None,
+        "i16": None,
+        "u32": None,
+        "i32": None,
+        "u64": None,
+        "i64": None,
+        "f64": None,
+    }
 
     def __init__(self, module, types, defines, imported_types, stream):
         self.stream = stream
         self.module = module
         self.defines = defines
         self.types = types
 
     def __init__(self, module, types, defines, imported_types, stream):
         self.stream = stream
         self.module = module
         self.defines = defines
         self.types = types
-        self.types_hash = {'vl_api_'+d.name+'_t':
-                           d for d in types + imported_types}
+        self.types_hash = {"vl_api_" + d.name + "_t": d for d in types + imported_types}
         self.defines_hash = {d.name: d for d in defines}
 
     def header(self):
         self.defines_hash = {d.name: d for d in defines}
 
     def header(self):
-        '''Output the top boilerplate.'''
+        """Output the top boilerplate."""
         write = self.stream.write
         write = self.stream.write
-        write('#ifndef included_{}_api_fromjson_h\n'.format(self.module))
-        write('#define included_{}_api_fromjson_h\n'.format(self.module))
-        write('#include <vppinfra/cJSON.h>\n\n')
-        write('#include <vppinfra/jsonformat.h>\n\n')
+        write("#ifndef included_{}_api_fromjson_h\n".format(self.module))
+        write("#define included_{}_api_fromjson_h\n".format(self.module))
+        write("#include <vppinfra/cJSON.h>\n\n")
+        write("#include <vppinfra/jsonformat.h>\n\n")
         write('#pragma GCC diagnostic ignored "-Wunused-label"\n')
 
     def is_base_type(self, t):
         write('#pragma GCC diagnostic ignored "-Wunused-label"\n')
 
     def is_base_type(self, t):
-        '''Check if a type is one of the VPP API base types'''
+        """Check if a type is one of the VPP API base types"""
         if t in self.is_number:
             return True
         if t in self.is_number:
             return True
-        if t == 'bool':
+        if t == "bool":
             return True
         return False
 
     def footer(self):
             return True
         return False
 
     def footer(self):
-        '''Output the bottom boilerplate.'''
+        """Output the bottom boilerplate."""
         write = self.stream.write
         write = self.stream.write
-        write('#endif\n')
+        write("#endif\n")
 
     def print_string(self, o, toplevel=False):
 
     def print_string(self, o, toplevel=False):
-        '''Convert JSON string to vl_api_string_t'''
+        """Convert JSON string to vl_api_string_t"""
         write = self.stream.write
 
         msgvar = "a" if toplevel else "*mp"
         msgsize = "l" if toplevel else "*len"
 
         if o.modern_vla:
         write = self.stream.write
 
         msgvar = "a" if toplevel else "*mp"
         msgsize = "l" if toplevel else "*len"
 
         if o.modern_vla:
-            write('    char *p = cJSON_GetStringValue(item);\n')
-            write('    size_t plen = strlen(p);\n')
-            write('    {msgvar} = cJSON_realloc({msgvar}, {msgsize} + plen, {msgsize});\n'
-                  .format(msgvar=msgvar, msgsize=msgsize))
-            write('    if ({msgvar} == 0) goto error;\n'.format(msgvar=msgvar))
-            write('    vl_api_c_string_to_api_string(p, (void *){msgvar} + '
-                  '{msgsize} - sizeof(vl_api_string_t));\n'
-                  .format(msgvar=msgvar, msgsize=msgsize))
-            write('    {msgsize} += plen;\n'.format(msgsize=msgsize))
+            write("    char *p = cJSON_GetStringValue(item);\n")
+            write("    size_t plen = strlen(p);\n")
+            write(
+                "    {msgvar} = cJSON_realloc({msgvar}, {msgsize} + plen, {msgsize});\n".format(
+                    msgvar=msgvar, msgsize=msgsize
+                )
+            )
+            write("    if ({msgvar} == 0) goto error;\n".format(msgvar=msgvar))
+            write(
+                "    vl_api_c_string_to_api_string(p, (void *){msgvar} + "
+                "{msgsize} - sizeof(vl_api_string_t));\n".format(
+                    msgvar=msgvar, msgsize=msgsize
+                )
+            )
+            write("    {msgsize} += plen;\n".format(msgsize=msgsize))
         else:
         else:
-            write('    strncpy_s((char *)a->{n}, sizeof(a->{n}), '
-                  'cJSON_GetStringValue(item), sizeof(a->{n}) - 1);\n'
-                  .format(n=o.fieldname))
+            write(
+                "    strncpy_s((char *)a->{n}, sizeof(a->{n}), "
+                "cJSON_GetStringValue(item), sizeof(a->{n}) - 1);\n".format(
+                    n=o.fieldname
+                )
+            )
 
     def print_field(self, o, toplevel=False):
 
     def print_field(self, o, toplevel=False):
-        '''Called for every field in a typedef or define.'''
+        """Called for every field in a typedef or define."""
         write = self.stream.write
         if o.fieldname in self.noprint_fields:
             return
         is_bt = self.is_base_type(o.fieldtype)
         write = self.stream.write
         if o.fieldname in self.noprint_fields:
             return
         is_bt = self.is_base_type(o.fieldtype)
-        t = 'vl_api_{}'.format(o.fieldtype) if is_bt else o.fieldtype
+        t = "vl_api_{}".format(o.fieldtype) if is_bt else o.fieldtype
 
         msgvar = "(void **)&a" if toplevel else "mp"
         msgsize = "&l" if toplevel else "len"
 
         if is_bt:
 
         msgvar = "(void **)&a" if toplevel else "mp"
         msgsize = "&l" if toplevel else "len"
 
         if is_bt:
-            write('    vl_api_{t}_fromjson(item, &a->{n});\n'
-                  .format(t=o.fieldtype, n=o.fieldname))
+            write(
+                "    vl_api_{t}_fromjson(item, &a->{n});\n".format(
+                    t=o.fieldtype, n=o.fieldname
+                )
+            )
         else:
         else:
-            write('    if ({t}_fromjson({msgvar}, '
-                  '{msgsize}, item, &a->{n}) < 0) goto error;\n'
-                  .format(t=t, n=o.fieldname, msgvar=msgvar, msgsize=msgsize))
+            write(
+                "    if ({t}_fromjson({msgvar}, "
+                "{msgsize}, item, &a->{n}) < 0) goto error;\n".format(
+                    t=t, n=o.fieldname, msgvar=msgvar, msgsize=msgsize
+                )
+            )
 
 
-    _dispatch['Field'] = print_field
+    _dispatch["Field"] = print_field
 
     def print_array(self, o, toplevel=False):
 
     def print_array(self, o, toplevel=False):
-        '''Convert JSON array to VPP API array'''
+        """Convert JSON array to VPP API array"""
         write = self.stream.write
 
         write = self.stream.write
 
-        forloop = '''\
+        forloop = """\
     {{
         int i;
         cJSON *array = cJSON_GetObjectItem(o, "{n}");
     {{
         int i;
         cJSON *array = cJSON_GetObjectItem(o, "{n}");
@@ -395,8 +428,8 @@ class FromJSON():
             {call}
         }}
     }}
             {call}
         }}
     }}
-'''
-        forloop_vla = '''\
+"""
+        forloop_vla = """\
     {{
         int i;
         cJSON *array = cJSON_GetObjectItem(o, "{n}");
     {{
         int i;
         cJSON *array = cJSON_GetObjectItem(o, "{n}");
@@ -410,271 +443,296 @@ class FromJSON():
             {call}
         }}
     }}
             {call}
         }}
     }}
-'''
+"""
         t = o.fieldtype
         t = o.fieldtype
-        if o.fieldtype == 'string':
+        if o.fieldtype == "string":
             self.print_string(o, toplevel)
             return
 
             self.print_string(o, toplevel)
             return
 
-        lfield = 'a->' + o.lengthfield if o.lengthfield else o.length
+        lfield = "a->" + o.lengthfield if o.lengthfield else o.length
         msgvar = "(void **)&a" if toplevel else "mp"
         realloc = "a" if toplevel else "*mp"
         msgsize = "l" if toplevel else "*len"
 
         msgvar = "(void **)&a" if toplevel else "mp"
         realloc = "a" if toplevel else "*mp"
         msgsize = "l" if toplevel else "*len"
 
-        if o.fieldtype == 'u8':
+        if o.fieldtype == "u8":
             if o.lengthfield:
             if o.lengthfield:
-                write('    s = u8string_fromjson(o, "{}");\n'
-                      .format(o.fieldname))
-                write('    if (!s) goto error;\n')
-                write('    {} = vec_len(s);\n'.format(lfield))
-
-                write('    {realloc} = cJSON_realloc({realloc}, {msgsize} + '
-                      'vec_len(s), {msgsize});\n'.format(msgvar=msgvar, msgsize=msgsize, realloc=realloc))
-                write('    memcpy((void *){realloc} + {msgsize}, s, '
-                      'vec_len(s));\n'.format(realloc=realloc, msgsize=msgsize))
-                write('    {msgsize} += vec_len(s);\n'.format(msgsize=msgsize))
-
-                write('    vec_free(s);\n')
+                write('    s = u8string_fromjson(o, "{}");\n'.format(o.fieldname))
+                write("    if (!s) goto error;\n")
+                write("    {} = vec_len(s);\n".format(lfield))
+
+                write(
+                    "    {realloc} = cJSON_realloc({realloc}, {msgsize} + "
+                    "vec_len(s), {msgsize});\n".format(
+                        msgvar=msgvar, msgsize=msgsize, realloc=realloc
+                    )
+                )
+                write(
+                    "    memcpy((void *){realloc} + {msgsize}, s, "
+                    "vec_len(s));\n".format(realloc=realloc, msgsize=msgsize)
+                )
+                write("    {msgsize} += vec_len(s);\n".format(msgsize=msgsize))
+
+                write("    vec_free(s);\n")
             else:
             else:
-                write('    if (u8string_fromjson2(o, "{n}", a->{n}) < 0) goto error;\n'
-                      .format(n=o.fieldname))
+                write(
+                    '    if (u8string_fromjson2(o, "{n}", a->{n}) < 0) goto error;\n'.format(
+                        n=o.fieldname
+                    )
+                )
             return
 
         is_bt = self.is_base_type(o.fieldtype)
 
         if o.lengthfield:
             if is_bt:
             return
 
         is_bt = self.is_base_type(o.fieldtype)
 
         if o.lengthfield:
             if is_bt:
-                call = ('vl_api_{t}_fromjson(e, &d[i]);'
-                        .format(t=o.fieldtype))
+                call = "vl_api_{t}_fromjson(e, &d[i]);".format(t=o.fieldtype)
             else:
             else:
-                call = ('if ({t}_fromjson({msgvar}, len, e, &d[i]) < 0) goto error; '
-                        .format(t=o.fieldtype, msgvar=msgvar))
-            write(forloop_vla.format(lfield=lfield,
-                                     t=o.fieldtype,
-                                     n=o.fieldname,
-                                     call=call,
-                                     realloc=realloc,
-                                     msgsize=msgsize))
+                call = "if ({t}_fromjson({msgvar}, len, e, &d[i]) < 0) goto error; ".format(
+                    t=o.fieldtype, msgvar=msgvar
+                )
+            write(
+                forloop_vla.format(
+                    lfield=lfield,
+                    t=o.fieldtype,
+                    n=o.fieldname,
+                    call=call,
+                    realloc=realloc,
+                    msgsize=msgsize,
+                )
+            )
         else:
             if is_bt:
         else:
             if is_bt:
-                call = ('vl_api_{t}_fromjson(e, &a->{n}[i]);'
-                        .format(t=t, n=o.fieldname))
+                call = "vl_api_{t}_fromjson(e, &a->{n}[i]);".format(t=t, n=o.fieldname)
             else:
             else:
-                call = ('if ({}_fromjson({}, len, e, &a->{}[i]) < 0) goto error;'
-                        .format(t, msgvar, o.fieldname))
-            write(forloop.format(lfield=lfield,
-                                 t=t,
-                                 n=o.fieldname,
-                                 call=call,
-                                 msgvar=msgvar,
-                                 realloc=realloc,
-                                 msgsize=msgsize))
-
-    _dispatch['Array'] = print_array
+                call = "if ({}_fromjson({}, len, e, &a->{}[i]) < 0) goto error;".format(
+                    t, msgvar, o.fieldname
+                )
+            write(
+                forloop.format(
+                    lfield=lfield,
+                    t=t,
+                    n=o.fieldname,
+                    call=call,
+                    msgvar=msgvar,
+                    realloc=realloc,
+                    msgsize=msgsize,
+                )
+            )
+
+    _dispatch["Array"] = print_array
 
     def print_enum(self, o):
 
     def print_enum(self, o):
-        '''Convert to JSON enum(string) to VPP API enum (int)'''
+        """Convert to JSON enum(string) to VPP API enum (int)"""
         write = self.stream.write
         write = self.stream.write
-        write('static inline int vl_api_{n}_t_fromjson'
-              '(void **mp, int *len, cJSON *o, vl_api_{n}_t *a) {{\n'
-              .format(n=o.name))
-        write('    char *p = cJSON_GetStringValue(o);\n')
+        write(
+            "static inline int vl_api_{n}_t_fromjson"
+            "(void **mp, int *len, cJSON *o, vl_api_{n}_t *a) {{\n".format(n=o.name)
+        )
+        write("    char *p = cJSON_GetStringValue(o);\n")
         for b in o.block:
         for b in o.block:
-            write('    if (strcmp(p, "{}") == 0) {{*a = {}; return 0;}}\n'
-                  .format(b[0], b[1]))
-        write('    *a = 0;\n')
-        write('    return -1;\n')
-        write('}\n')
+            write(
+                '    if (strcmp(p, "{}") == 0) {{*a = {}; return 0;}}\n'.format(
+                    b[0], b[1]
+                )
+            )
+        write("    *a = 0;\n")
+        write("    return -1;\n")
+        write("}\n")
 
 
-    _dispatch['Enum'] = print_enum
+    _dispatch["Enum"] = print_enum
 
     def print_enum_flag(self, o):
 
     def print_enum_flag(self, o):
-        '''Convert to JSON enum(string) to VPP API enum (int)'''
+        """Convert to JSON enum(string) to VPP API enum (int)"""
         write = self.stream.write
         write = self.stream.write
-        write('static inline int vl_api_{n}_t_fromjson '
-              '(void **mp, int *len, cJSON *o, vl_api_{n}_t *a) {{\n'
-              .format(n=o.name))
-        write('   int i;\n')
-        write('   *a = 0;\n')
-        write('   for (i = 0; i < cJSON_GetArraySize(o); i++) {\n')
-        write('       cJSON *e = cJSON_GetArrayItem(o, i);\n')
-        write('       char *p = cJSON_GetStringValue(e);\n')
-        write('       if (!p) return -1;\n')
+        write(
+            "static inline int vl_api_{n}_t_fromjson "
+            "(void **mp, int *len, cJSON *o, vl_api_{n}_t *a) {{\n".format(n=o.name)
+        )
+        write("   int i;\n")
+        write("   *a = 0;\n")
+        write("   for (i = 0; i < cJSON_GetArraySize(o); i++) {\n")
+        write("       cJSON *e = cJSON_GetArrayItem(o, i);\n")
+        write("       char *p = cJSON_GetStringValue(e);\n")
+        write("       if (!p) return -1;\n")
         for b in o.block:
         for b in o.block:
-            write('       if (strcmp(p, "{}") == 0) *a |= {};\n'
-                  .format(b[0], b[1]))
-        write('    }\n')
-        write('   return 0;\n')
-        write('}\n')
+            write('       if (strcmp(p, "{}") == 0) *a |= {};\n'.format(b[0], b[1]))
+        write("    }\n")
+        write("   return 0;\n")
+        write("}\n")
 
 
-    _dispatch['EnumFlag'] = print_enum_flag
+    _dispatch["EnumFlag"] = print_enum_flag
 
     def print_typedef(self, o):
 
     def print_typedef(self, o):
-        '''Convert from JSON object to VPP API binary representation'''
+        """Convert from JSON object to VPP API binary representation"""
         write = self.stream.write
 
         write = self.stream.write
 
-        write('static inline int vl_api_{name}_t_fromjson (void **mp, '
-              'int *len, cJSON *o, vl_api_{name}_t *a) {{\n'
-              .format(name=o.name))
-        write('    cJSON *item __attribute__ ((unused));\n')
-        write('    u8 *s __attribute__ ((unused));\n')
+        write(
+            "static inline int vl_api_{name}_t_fromjson (void **mp, "
+            "int *len, cJSON *o, vl_api_{name}_t *a) {{\n".format(name=o.name)
+        )
+        write("    cJSON *item __attribute__ ((unused));\n")
+        write("    u8 *s __attribute__ ((unused));\n")
         for t in o.block:
         for t in o.block:
-            if t.type == 'Field' and t.is_lengthfield:
+            if t.type == "Field" and t.is_lengthfield:
                 continue
                 continue
-            write('\n    item = cJSON_GetObjectItem(o, "{}");\n'
-                  .format(t.fieldname))
-            write('    if (!item) goto error;\n')
+            write('\n    item = cJSON_GetObjectItem(o, "{}");\n'.format(t.fieldname))
+            write("    if (!item) goto error;\n")
             self._dispatch[t.type](self, t)
 
             self._dispatch[t.type](self, t)
 
-        write('\n    return 0;\n')
-        write('\n  error:\n')
-        write('    return -1;\n')
-        write('}\n')
+        write("\n    return 0;\n")
+        write("\n  error:\n")
+        write("    return -1;\n")
+        write("}\n")
 
     def print_union(self, o):
 
     def print_union(self, o):
-        '''Convert JSON object to VPP API binary union'''
+        """Convert JSON object to VPP API binary union"""
         write = self.stream.write
 
         write = self.stream.write
 
-        write('static inline int vl_api_{name}_t_fromjson (void **mp, '
-              'int *len, cJSON *o, vl_api_{name}_t *a) {{\n'
-              .format(name=o.name))
-        write('    cJSON *item __attribute__ ((unused));\n')
-        write('    u8 *s __attribute__ ((unused));\n')
+        write(
+            "static inline int vl_api_{name}_t_fromjson (void **mp, "
+            "int *len, cJSON *o, vl_api_{name}_t *a) {{\n".format(name=o.name)
+        )
+        write("    cJSON *item __attribute__ ((unused));\n")
+        write("    u8 *s __attribute__ ((unused));\n")
         for t in o.block:
         for t in o.block:
-            if t.type == 'Field' and t.is_lengthfield:
+            if t.type == "Field" and t.is_lengthfield:
                 continue
                 continue
-            write('    item = cJSON_GetObjectItem(o, "{}");\n'
-                  .format(t.fieldname))
-            write('    if (item) {\n')
+            write('    item = cJSON_GetObjectItem(o, "{}");\n'.format(t.fieldname))
+            write("    if (item) {\n")
             self._dispatch[t.type](self, t)
             self._dispatch[t.type](self, t)
-            write('    };\n')
-        write('\n    return 0;\n')
-        write('\n  error:\n')
-        write('    return -1;\n')
-        write('}\n')
+            write("    };\n")
+        write("\n    return 0;\n")
+        write("\n  error:\n")
+        write("    return -1;\n")
+        write("}\n")
 
     def print_define(self, o):
 
     def print_define(self, o):
-        '''Convert JSON object to VPP API message'''
+        """Convert JSON object to VPP API message"""
         write = self.stream.write
         error = 0
         write = self.stream.write
         error = 0
-        write('static inline vl_api_{name}_t *vl_api_{name}_t_fromjson '
-              '(cJSON *o, int *len) {{\n'.format(name=o.name))
-        write('    cJSON *item __attribute__ ((unused));\n')
-        write('    u8 *s __attribute__ ((unused));\n')
-        write('    int l = sizeof(vl_api_{}_t);\n'.format(o.name))
-        write('    vl_api_{}_t *a = cJSON_malloc(l);\n'.format(o.name))
-        write('\n')
+        write(
+            "static inline vl_api_{name}_t *vl_api_{name}_t_fromjson "
+            "(cJSON *o, int *len) {{\n".format(name=o.name)
+        )
+        write("    cJSON *item __attribute__ ((unused));\n")
+        write("    u8 *s __attribute__ ((unused));\n")
+        write("    int l = sizeof(vl_api_{}_t);\n".format(o.name))
+        write("    vl_api_{}_t *a = cJSON_malloc(l);\n".format(o.name))
+        write("\n")
 
         for t in o.block:
             if t.fieldname in self.noprint_fields:
                 continue
 
         for t in o.block:
             if t.fieldname in self.noprint_fields:
                 continue
-            if t.type == 'Field' and t.is_lengthfield:
+            if t.type == "Field" and t.is_lengthfield:
                 continue
                 continue
-            write('    item = cJSON_GetObjectItem(o, "{}");\n'
-                  .format(t.fieldname))
-            write('    if (!item) goto error;\n')
+            write('    item = cJSON_GetObjectItem(o, "{}");\n'.format(t.fieldname))
+            write("    if (!item) goto error;\n")
             error += 1
             self._dispatch[t.type](self, t, toplevel=True)
             error += 1
             self._dispatch[t.type](self, t, toplevel=True)
-            write('\n')
+            write("\n")
 
 
-        write('    *len = l;\n')
-        write('    return a;\n')
+        write("    *len = l;\n")
+        write("    return a;\n")
 
         if error:
 
         if error:
-            write('\n  error:\n')
-            write('    cJSON_free(a);\n')
-            write('    return 0;\n')
-        write('}\n')
+            write("\n  error:\n")
+            write("    cJSON_free(a);\n")
+            write("    return 0;\n")
+        write("}\n")
 
     def print_using(self, o):
 
     def print_using(self, o):
-        '''Convert JSON field to VPP type alias'''
+        """Convert JSON field to VPP type alias"""
         write = self.stream.write
 
         if o.manual_print:
             return
 
         t = o.using
         write = self.stream.write
 
         if o.manual_print:
             return
 
         t = o.using
-        write('static inline int vl_api_{name}_t_fromjson (void **mp, '
-              'int *len, cJSON *o, vl_api_{name}_t *a) {{\n'
-              .format(name=o.name))
-        if 'length' in o.alias:
-            if t.fieldtype != 'u8':
-                raise ValueError("Error in processing type {} for {}"
-                                 .format(t.fieldtype, o.name))
-            write('    vl_api_u8_string_fromjson(o, (u8 *)a, {});\n'
-                  .format(o.alias['length']))
+        write(
+            "static inline int vl_api_{name}_t_fromjson (void **mp, "
+            "int *len, cJSON *o, vl_api_{name}_t *a) {{\n".format(name=o.name)
+        )
+        if "length" in o.alias:
+            if t.fieldtype != "u8":
+                raise ValueError(
+                    "Error in processing type {} for {}".format(t.fieldtype, o.name)
+                )
+            write(
+                "    vl_api_u8_string_fromjson(o, (u8 *)a, {});\n".format(
+                    o.alias["length"]
+                )
+            )
         else:
         else:
-            write('    vl_api_{t}_fromjson(o, ({t} *)a);\n'
-                  .format(t=t.fieldtype))
+            write("    vl_api_{t}_fromjson(o, ({t} *)a);\n".format(t=t.fieldtype))
 
 
-        write('    return 0;\n')
-        write('}\n')
+        write("    return 0;\n")
+        write("}\n")
 
 
-    _dispatch['Typedef'] = print_typedef
-    _dispatch['Define'] = print_define
-    _dispatch['Using'] = print_using
-    _dispatch['Union'] = print_union
+    _dispatch["Typedef"] = print_typedef
+    _dispatch["Define"] = print_define
+    _dispatch["Using"] = print_using
+    _dispatch["Union"] = print_union
 
     def generate_function(self, t):
 
     def generate_function(self, t):
-        '''Main entry point'''
+        """Main entry point"""
         write = self.stream.write
         if t.manual_print:
         write = self.stream.write
         if t.manual_print:
-            write('/* Manual print {} */\n'.format(t.name))
+            write("/* Manual print {} */\n".format(t.name))
             return
         self._dispatch[t.type](self, t)
 
     def generate_types(self):
             return
         self._dispatch[t.type](self, t)
 
     def generate_types(self):
-        '''Main entry point'''
+        """Main entry point"""
         for t in self.types:
             self.generate_function(t)
 
     def generate_defines(self):
         for t in self.types:
             self.generate_function(t)
 
     def generate_defines(self):
-        '''Main entry point'''
+        """Main entry point"""
         for t in self.defines:
             self.generate_function(t)
 
 
 def generate_tojson(s, modulename, stream):
         for t in self.defines:
             self.generate_function(t)
 
 
 def generate_tojson(s, modulename, stream):
-    '''Generate all functions to convert from API to JSON'''
+    """Generate all functions to convert from API to JSON"""
     write = stream.write
 
     write = stream.write
 
-    write('/* Imported API files */\n')
-    for i in s['Import']:
-        f = i.filename.replace('plugins/', '')
-        write('#include <{}_tojson.h>\n'.format(f))
+    write("/* Imported API files */\n")
+    for i in s["Import"]:
+        f = i.filename.replace("plugins/", "")
+        write("#include <{}_tojson.h>\n".format(f))
 
 
-    pp = ToJSON(modulename, s['types'], s['Define'], s['imported']['types'],
-                stream)
+    pp = ToJSON(modulename, s["types"], s["Define"], s["imported"]["types"], stream)
     pp.header()
     pp.generate_types()
     pp.generate_defines()
     pp.footer()
     pp.header()
     pp.generate_types()
     pp.generate_defines()
     pp.footer()
-    return ''
+    return ""
 
 
 def generate_fromjson(s, modulename, stream):
 
 
 def generate_fromjson(s, modulename, stream):
-    '''Generate all functions to convert from JSON to API'''
+    """Generate all functions to convert from JSON to API"""
     write = stream.write
     write = stream.write
-    write('/* Imported API files */\n')
-    for i in s['Import']:
-        f = i.filename.replace('plugins/', '')
-        write('#include <{}_fromjson.h>\n'.format(f))
+    write("/* Imported API files */\n")
+    for i in s["Import"]:
+        f = i.filename.replace("plugins/", "")
+        write("#include <{}_fromjson.h>\n".format(f))
 
 
-    pp = FromJSON(modulename, s['types'], s['Define'], s['imported']['types'],
-                  stream)
+    pp = FromJSON(modulename, s["types"], s["Define"], s["imported"]["types"], stream)
     pp.header()
     pp.generate_types()
     pp.generate_defines()
     pp.footer()
 
     pp.header()
     pp.generate_types()
     pp.generate_defines()
     pp.footer()
 
-    return ''
+    return ""
+
 
 ###############################################################################
 
 
 DATESTRING = datetime.datetime.utcfromtimestamp(
 
 ###############################################################################
 
 
 DATESTRING = datetime.datetime.utcfromtimestamp(
-    int(os.environ.get('SOURCE_DATE_EPOCH', time.time())))
-TOP_BOILERPLATE = '''\
+    int(os.environ.get("SOURCE_DATE_EPOCH", time.time()))
+)
+TOP_BOILERPLATE = """\
 /*
  * VLIB API definitions {datestring}
  * Input file: {input_filename}
 /*
  * VLIB API definitions {datestring}
  * Input file: {input_filename}
@@ -693,45 +751,47 @@ TOP_BOILERPLATE = '''\
 #endif
 
 #define VL_API_PACKED(x) x __attribute__ ((packed))
 #endif
 
 #define VL_API_PACKED(x) x __attribute__ ((packed))
-'''
+"""
 
 
-BOTTOM_BOILERPLATE = '''\
+BOTTOM_BOILERPLATE = """\
 /****** API CRC (whole file) *****/
 
 #ifdef vl_api_version
 vl_api_version({input_filename}, {file_crc:#08x})
 
 #endif
 /****** API CRC (whole file) *****/
 
 #ifdef vl_api_version
 vl_api_version({input_filename}, {file_crc:#08x})
 
 #endif
-'''
+"""
 
 
 def msg_ids(s):
 
 
 def msg_ids(s):
-    '''Generate macro to map API message id to handler'''
-    output = '''\
+    """Generate macro to map API message id to handler"""
+    output = """\
 
 /****** Message ID / handler enum ******/
 
 #ifdef vl_msg_id
 
 /****** Message ID / handler enum ******/
 
 #ifdef vl_msg_id
-'''
+"""
 
 
-    for t in s['Define']:
-        output += "vl_msg_id(VL_API_%s, vl_api_%s_t_handler)\n" % \
-                  (t.name.upper(), t.name)
+    for t in s["Define"]:
+        output += "vl_msg_id(VL_API_%s, vl_api_%s_t_handler)\n" % (
+            t.name.upper(),
+            t.name,
+        )
     output += "#endif"
 
     return output
 
 
 def msg_names(s):
     output += "#endif"
 
     return output
 
 
 def msg_names(s):
-    '''Generate calls to name mapping macro'''
-    output = '''\
+    """Generate calls to name mapping macro"""
+    output = """\
 
 /****** Message names ******/
 
 #ifdef vl_msg_name
 
 /****** Message names ******/
 
 #ifdef vl_msg_name
-'''
+"""
 
 
-    for t in s['Define']:
+    for t in s["Define"]:
         dont_trace = 0 if t.dont_trace else 1
         output += "vl_msg_name(vl_api_%s_t, %d)\n" % (t.name, dont_trace)
     output += "#endif"
         dont_trace = 0 if t.dont_trace else 1
         output += "vl_msg_name(vl_api_%s_t, %d)\n" % (t.name, dont_trace)
     output += "#endif"
@@ -740,190 +800,215 @@ def msg_names(s):
 
 
 def msg_name_crc_list(s, suffix):
 
 
 def msg_name_crc_list(s, suffix):
-    '''Generate list of names to CRC mappings'''
-    output = '''\
+    """Generate list of names to CRC mappings"""
+    output = """\
 
 /****** Message name, crc list ******/
 
 #ifdef vl_msg_name_crc_list
 
 /****** Message name, crc list ******/
 
 #ifdef vl_msg_name_crc_list
-'''
+"""
     output += "#define foreach_vl_msg_name_crc_%s " % suffix
 
     output += "#define foreach_vl_msg_name_crc_%s " % suffix
 
-    for t in s['Define']:
-        output += "\\\n_(VL_API_%s, %s, %08x) " % \
-            (t.name.upper(), t.name, t.crc)
+    for t in s["Define"]:
+        output += "\\\n_(VL_API_%s, %s, %08x) " % (t.name.upper(), t.name, t.crc)
     output += "\n#endif"
 
     return output
 
 
 def api2c(fieldtype):
     output += "\n#endif"
 
     return output
 
 
 def api2c(fieldtype):
-    '''Map between API type names and internal VPP type names'''
-    mappingtable = {'string': 'vl_api_string_t', }
+    """Map between API type names and internal VPP type names"""
+    mappingtable = {
+        "string": "vl_api_string_t",
+    }
     if fieldtype in mappingtable:
         return mappingtable[fieldtype]
     return fieldtype
 
 
 def typedefs(filename):
     if fieldtype in mappingtable:
         return mappingtable[fieldtype]
     return fieldtype
 
 
 def typedefs(filename):
-    '''Include in the main files to the types file'''
-    output = '''\
+    """Include in the main files to the types file"""
+    output = """\
 
 /****** Typedefs ******/
 
 #ifdef vl_typedefs
 #include "{include}.api_types.h"
 #endif
 
 /****** Typedefs ******/
 
 #ifdef vl_typedefs
 #include "{include}.api_types.h"
 #endif
-'''.format(include=filename)
+""".format(
+        include=filename
+    )
     return output
 
 
     return output
 
 
-FORMAT_STRINGS = {'u8': '%u',
-                  'bool': '%u',
-                  'i8': '%d',
-                  'u16': '%u',
-                  'i16': '%d',
-                  'u32': '%u',
-                  'i32': '%ld',
-                  'u64': '%llu',
-                  'i64': '%lld',
-                  'f64': '%.2f'}
+FORMAT_STRINGS = {
+    "u8": "%u",
+    "bool": "%u",
+    "i8": "%d",
+    "u16": "%u",
+    "i16": "%d",
+    "u32": "%u",
+    "i32": "%ld",
+    "u64": "%llu",
+    "i64": "%lld",
+    "f64": "%.2f",
+}
+
 
 
+class Printfun:
+    """Functions for pretty printing VPP API messages"""
 
 
-class Printfun():
-    '''Functions for pretty printing VPP API messages'''
     _dispatch = {}
     _dispatch = {}
-    noprint_fields = {'_vl_msg_id': None,
-                      'client_index': None,
-                      'context': None}
+    noprint_fields = {"_vl_msg_id": None, "client_index": None, "context": None}
 
     def __init__(self, stream):
         self.stream = stream
 
     @staticmethod
     def print_string(o, stream):
 
     def __init__(self, stream):
         self.stream = stream
 
     @staticmethod
     def print_string(o, stream):
-        '''Pretty print a vl_api_string_t'''
+        """Pretty print a vl_api_string_t"""
         write = stream.write
         if o.modern_vla:
         write = stream.write
         if o.modern_vla:
-            write('    if (vl_api_string_len(&a->{f}) > 0) {{\n'
-                  .format(f=o.fieldname))
-            write('        s = format(s, "\\n%U{f}: %U", '
-                  'format_white_space, indent, '
-                  'vl_api_format_string, (&a->{f}));\n'.format(f=o.fieldname))
-            write('    } else {\n')
-            write('        s = format(s, "\\n%U{f}:", '
-                  'format_white_space, indent);\n'.format(f=o.fieldname))
-            write('    }\n')
+            write("    if (vl_api_string_len(&a->{f}) > 0) {{\n".format(f=o.fieldname))
+            write(
+                '        s = format(s, "\\n%U{f}: %U", '
+                "format_white_space, indent, "
+                "vl_api_format_string, (&a->{f}));\n".format(f=o.fieldname)
+            )
+            write("    } else {\n")
+            write(
+                '        s = format(s, "\\n%U{f}:", '
+                "format_white_space, indent);\n".format(f=o.fieldname)
+            )
+            write("    }\n")
         else:
         else:
-            write('    s = format(s, "\\n%U{f}: %s", '
-                  'format_white_space, indent, a->{f});\n'
-                  .format(f=o.fieldname))
+            write(
+                '    s = format(s, "\\n%U{f}: %s", '
+                "format_white_space, indent, a->{f});\n".format(f=o.fieldname)
+            )
 
     def print_field(self, o, stream):
 
     def print_field(self, o, stream):
-        '''Pretty print API field'''
+        """Pretty print API field"""
         write = stream.write
         if o.fieldname in self.noprint_fields:
             return
         if o.fieldtype in FORMAT_STRINGS:
             f = FORMAT_STRINGS[o.fieldtype]
         write = stream.write
         if o.fieldname in self.noprint_fields:
             return
         if o.fieldtype in FORMAT_STRINGS:
             f = FORMAT_STRINGS[o.fieldtype]
-            write('    s = format(s, "\\n%U{n}: {f}", '
-                  'format_white_space, indent, a->{n});\n'
-                  .format(n=o.fieldname, f=f))
+            write(
+                '    s = format(s, "\\n%U{n}: {f}", '
+                "format_white_space, indent, a->{n});\n".format(n=o.fieldname, f=f)
+            )
         else:
         else:
-            write('    s = format(s, "\\n%U{n}: %U", '
-                  'format_white_space, indent, '
-                  'format_{t}, &a->{n}, indent);\n'
-                  .format(n=o.fieldname, t=o.fieldtype))
+            write(
+                '    s = format(s, "\\n%U{n}: %U", '
+                "format_white_space, indent, "
+                "format_{t}, &a->{n}, indent);\n".format(n=o.fieldname, t=o.fieldtype)
+            )
 
 
-    _dispatch['Field'] = print_field
+    _dispatch["Field"] = print_field
 
     def print_array(self, o, stream):
 
     def print_array(self, o, stream):
-        '''Pretty print API array'''
+        """Pretty print API array"""
         write = stream.write
 
         write = stream.write
 
-        forloop = '''\
+        forloop = """\
     for (i = 0; i < {lfield}; i++) {{
         s = format(s, "\\n%U{n}: %U",
                    format_white_space, indent, format_{t}, &a->{n}[i], indent);
     }}
     for (i = 0; i < {lfield}; i++) {{
         s = format(s, "\\n%U{n}: %U",
                    format_white_space, indent, format_{t}, &a->{n}[i], indent);
     }}
-'''
+"""
 
 
-        forloop_format = '''\
+        forloop_format = """\
     for (i = 0; i < {lfield}; i++) {{
         s = format(s, "\\n%U{n}: {t}",
                    format_white_space, indent, a->{n}[i]);
     }}
     for (i = 0; i < {lfield}; i++) {{
         s = format(s, "\\n%U{n}: {t}",
                    format_white_space, indent, a->{n}[i]);
     }}
-'''
+"""
 
 
-        if o.fieldtype == 'string':
+        if o.fieldtype == "string":
             self.print_string(o, stream)
             return
 
             self.print_string(o, stream)
             return
 
-        if o.fieldtype == 'u8':
+        if o.fieldtype == "u8":
             if o.lengthfield:
             if o.lengthfield:
-                write('    s = format(s, "\\n%U{n}: %U", format_white_space, '
-                      'indent, format_hex_bytes, a->{n}, a->{lfield});\n'
-                      .format(n=o.fieldname, lfield=o.lengthfield))
+                write(
+                    '    s = format(s, "\\n%U{n}: %U", format_white_space, '
+                    "indent, format_hex_bytes, a->{n}, a->{lfield});\n".format(
+                        n=o.fieldname, lfield=o.lengthfield
+                    )
+                )
             else:
             else:
-                write('    s = format(s, "\\n%U{n}: %U", format_white_space, '
-                      'indent, format_hex_bytes, a, {lfield});\n'
-                      .format(n=o.fieldname, lfield=o.length))
+                write(
+                    '    s = format(s, "\\n%U{n}: %U", format_white_space, '
+                    "indent, format_hex_bytes, a, {lfield});\n".format(
+                        n=o.fieldname, lfield=o.length
+                    )
+                )
             return
 
             return
 
-        lfield = 'a->' + o.lengthfield if o.lengthfield else o.length
+        lfield = "a->" + o.lengthfield if o.lengthfield else o.length
         if o.fieldtype in FORMAT_STRINGS:
         if o.fieldtype in FORMAT_STRINGS:
-            write(forloop_format.format(lfield=lfield,
-                                        t=FORMAT_STRINGS[o.fieldtype],
-                                        n=o.fieldname))
+            write(
+                forloop_format.format(
+                    lfield=lfield, t=FORMAT_STRINGS[o.fieldtype], n=o.fieldname
+                )
+            )
         else:
             write(forloop.format(lfield=lfield, t=o.fieldtype, n=o.fieldname))
 
         else:
             write(forloop.format(lfield=lfield, t=o.fieldtype, n=o.fieldname))
 
-    _dispatch['Array'] = print_array
+    _dispatch["Array"] = print_array
 
     @staticmethod
     def print_alias(k, v, stream):
 
     @staticmethod
     def print_alias(k, v, stream):
-        '''Pretty print type alias'''
+        """Pretty print type alias"""
         write = stream.write
         write = stream.write
-        if ('length' in v.alias and v.alias['length'] and
-                v.alias['type'] == 'u8'):
-            write('    return format(s, "%U", format_hex_bytes, a, {});\n'
-                  .format(v.alias['length']))
-        elif v.alias['type'] in FORMAT_STRINGS:
-            write('    return format(s, "{}", *a);\n'
-                  .format(FORMAT_STRINGS[v.alias['type']]))
+        if "length" in v.alias and v.alias["length"] and v.alias["type"] == "u8":
+            write(
+                '    return format(s, "%U", format_hex_bytes, a, {});\n'.format(
+                    v.alias["length"]
+                )
+            )
+        elif v.alias["type"] in FORMAT_STRINGS:
+            write(
+                '    return format(s, "{}", *a);\n'.format(
+                    FORMAT_STRINGS[v.alias["type"]]
+                )
+            )
         else:
         else:
-            write('    return format(s, "{} (print not implemented)");\n'
-                  .format(k))
+            write('    return format(s, "{} (print not implemented)");\n'.format(k))
 
     @staticmethod
     def print_enum(o, stream):
 
     @staticmethod
     def print_enum(o, stream):
-        '''Pretty print API enum'''
+        """Pretty print API enum"""
         write = stream.write
         write("    switch(*a) {\n")
         for b in o:
             write("    case %s:\n" % b[1])
             write('        return format(s, "{}");\n'.format(b[0]))
         write = stream.write
         write("    switch(*a) {\n")
         for b in o:
             write("    case %s:\n" % b[1])
             write('        return format(s, "{}");\n'.format(b[0]))
-        write('    }\n')
+        write("    }\n")
 
 
-    _dispatch['Enum'] = print_enum
-    _dispatch['EnumFlag'] = print_enum
+    _dispatch["Enum"] = print_enum
+    _dispatch["EnumFlag"] = print_enum
 
     def print_obj(self, o, stream):
 
     def print_obj(self, o, stream):
-        '''Entry point'''
+        """Entry point"""
         write = stream.write
 
         if o.type in self._dispatch:
             self._dispatch[o.type](self, o, stream)
         else:
         write = stream.write
 
         if o.type in self._dispatch:
             self._dispatch[o.type](self, o, stream)
         else:
-            write('    s = format(s, "\\n{} {} {} (print not implemented");\n'
-                  .format(o.type, o.fieldtype, o.fieldname))
+            write(
+                '    s = format(s, "\\n{} {} {} (print not implemented");\n'.format(
+                    o.type, o.fieldtype, o.fieldname
+                )
+            )
 
 
 def printfun(objs, stream, modulename):
 
 
 def printfun(objs, stream, modulename):
-    '''Main entry point for pretty print function generation'''
+    """Main entry point for pretty print function generation"""
     write = stream.write
 
     write = stream.write
 
-    h = '''\
+    h = """\
 /****** Print functions *****/
 #ifdef vl_printfun
 #ifndef included_{module}_printfun
 /****** Print functions *****/
 #ifdef vl_printfun
 #ifndef included_{module}_printfun
@@ -940,15 +1025,15 @@ def printfun(objs, stream, modulename):
 #include "{module}.api_tojson.h"
 #include "{module}.api_fromjson.h"
 
 #include "{module}.api_tojson.h"
 #include "{module}.api_fromjson.h"
 
-'''
+"""
 
 
-    signature = '''\
+    signature = """\
 static inline void *vl_api_{name}_t_print{suffix} (vl_api_{name}_t *a, void *handle)
 {{
     u8 *s = 0;
     u32 indent __attribute__((unused)) = 2;
     int i __attribute__((unused));
 static inline void *vl_api_{name}_t_print{suffix} (vl_api_{name}_t *a, void *handle)
 {{
     u8 *s = 0;
     u32 indent __attribute__((unused)) = 2;
     int i __attribute__((unused));
-'''
+"""
 
     h = h.format(module=modulename)
     write(h)
 
     h = h.format(module=modulename)
     write(h)
@@ -958,171 +1043,172 @@ static inline void *vl_api_{name}_t_print{suffix} (vl_api_{name}_t *a, void *han
         if t.manual_print:
             write("/***** manual: vl_api_%s_t_print  *****/\n\n" % t.name)
             continue
         if t.manual_print:
             write("/***** manual: vl_api_%s_t_print  *****/\n\n" % t.name)
             continue
-        write(signature.format(name=t.name, suffix=''))
-        write('    /* Message definition: vl_api_{}_t: */\n'.format(t.name))
-        write("    s = format(s, \"vl_api_%s_t:\");\n" % t.name)
+        write(signature.format(name=t.name, suffix=""))
+        write("    /* Message definition: vl_api_{}_t: */\n".format(t.name))
+        write('    s = format(s, "vl_api_%s_t:");\n' % t.name)
         for o in t.block:
             pp.print_obj(o, stream)
         for o in t.block:
             pp.print_obj(o, stream)
-        write('    vec_add1(s, 0);\n')
-        write('    vl_print (handle, (char *)s);\n')
-        write('    vec_free (s);\n')
-        write('    return handle;\n')
-        write('}\n\n')
-
-        write(signature.format(name=t.name, suffix='_json'))
-        write('    cJSON * o = vl_api_{}_t_tojson(a);\n'.format(t.name))
-        write('    (void)s;\n')
-        write('    char *out = cJSON_Print(o);\n')
-        write('    vl_print(handle, out);\n')
-        write('    cJSON_Delete(o);\n')
-        write('    cJSON_free(out);\n')
-        write('    return handle;\n')
-        write('}\n\n')
+        write("    vec_add1(s, 0);\n")
+        write("    vl_print (handle, (char *)s);\n")
+        write("    vec_free (s);\n")
+        write("    return handle;\n")
+        write("}\n\n")
+
+        write(signature.format(name=t.name, suffix="_json"))
+        write("    cJSON * o = vl_api_{}_t_tojson(a);\n".format(t.name))
+        write("    (void)s;\n")
+        write("    char *out = cJSON_Print(o);\n")
+        write("    vl_print(handle, out);\n")
+        write("    cJSON_Delete(o);\n")
+        write("    cJSON_free(out);\n")
+        write("    return handle;\n")
+        write("}\n\n")
 
     write("\n#endif")
     write("\n#endif /* vl_printfun */\n")
 
 
     write("\n#endif")
     write("\n#endif /* vl_printfun */\n")
 
-    return ''
+    return ""
 
 
 def printfun_types(objs, stream, modulename):
 
 
 def printfun_types(objs, stream, modulename):
-    '''Pretty print API types'''
+    """Pretty print API types"""
     write = stream.write
     pp = Printfun(stream)
 
     write = stream.write
     pp = Printfun(stream)
 
-    h = '''\
+    h = """\
 /****** Print functions *****/
 #ifdef vl_printfun
 #ifndef included_{module}_printfun_types
 #define included_{module}_printfun_types
 
 /****** Print functions *****/
 #ifdef vl_printfun
 #ifndef included_{module}_printfun_types
 #define included_{module}_printfun_types
 
-'''
+"""
     h = h.format(module=modulename)
     write(h)
 
     h = h.format(module=modulename)
     write(h)
 
-    signature = '''\
+    signature = """\
 static inline u8 *format_vl_api_{name}_t (u8 *s, va_list * args)
 {{
     vl_api_{name}_t *a = va_arg (*args, vl_api_{name}_t *);
     u32 indent __attribute__((unused)) = va_arg (*args, u32);
     int i __attribute__((unused));
     indent += 2;
 static inline u8 *format_vl_api_{name}_t (u8 *s, va_list * args)
 {{
     vl_api_{name}_t *a = va_arg (*args, vl_api_{name}_t *);
     u32 indent __attribute__((unused)) = va_arg (*args, u32);
     int i __attribute__((unused));
     indent += 2;
-'''
+"""
 
     for t in objs:
 
     for t in objs:
-        if t.__class__.__name__ == 'Enum' or t.__class__.__name__ == 'EnumFlag':
+        if t.__class__.__name__ == "Enum" or t.__class__.__name__ == "EnumFlag":
             write(signature.format(name=t.name))
             pp.print_enum(t.block, stream)
             write(signature.format(name=t.name))
             pp.print_enum(t.block, stream)
-            write('    return s;\n')
-            write('}\n\n')
+            write("    return s;\n")
+            write("}\n\n")
             continue
 
         if t.manual_print:
             write("/***** manual: vl_api_%s_t_print  *****/\n\n" % t.name)
             continue
 
             continue
 
         if t.manual_print:
             write("/***** manual: vl_api_%s_t_print  *****/\n\n" % t.name)
             continue
 
-        if t.__class__.__name__ == 'Using':
+        if t.__class__.__name__ == "Using":
             write(signature.format(name=t.name))
             pp.print_alias(t.name, t, stream)
             write(signature.format(name=t.name))
             pp.print_alias(t.name, t, stream)
-            write('}\n\n')
+            write("}\n\n")
             continue
 
         write(signature.format(name=t.name))
         for o in t.block:
             pp.print_obj(o, stream)
 
             continue
 
         write(signature.format(name=t.name))
         for o in t.block:
             pp.print_obj(o, stream)
 
-        write('    return s;\n')
-        write('}\n\n')
+        write("    return s;\n")
+        write("}\n\n")
 
     write("\n#endif")
     write("\n#endif /* vl_printfun_types */\n")
 
 
 def generate_imports(imports):
 
     write("\n#endif")
     write("\n#endif /* vl_printfun_types */\n")
 
 
 def generate_imports(imports):
-    '''Add #include matching the API import statements'''
-    output = '/* Imported API files */\n'
-    output += '#ifndef vl_api_version\n'
+    """Add #include matching the API import statements"""
+    output = "/* Imported API files */\n"
+    output += "#ifndef vl_api_version\n"
 
     for i in imports:
 
     for i in imports:
-        s = i.filename.replace('plugins/', '')
-        output += '#include <{}.h>\n'.format(s)
-    output += '#endif\n'
+        s = i.filename.replace("plugins/", "")
+        output += "#include <{}.h>\n".format(s)
+    output += "#endif\n"
     return output
 
 
 ENDIAN_STRINGS = {
     return output
 
 
 ENDIAN_STRINGS = {
-    'u16': 'clib_net_to_host_u16',
-    'u32': 'clib_net_to_host_u32',
-    'u64': 'clib_net_to_host_u64',
-    'i16': 'clib_net_to_host_i16',
-    'i32': 'clib_net_to_host_i32',
-    'i64': 'clib_net_to_host_i64',
-    'f64': 'clib_net_to_host_f64',
+    "u16": "clib_net_to_host_u16",
+    "u32": "clib_net_to_host_u32",
+    "u64": "clib_net_to_host_u64",
+    "i16": "clib_net_to_host_i16",
+    "i32": "clib_net_to_host_i32",
+    "i64": "clib_net_to_host_i64",
+    "f64": "clib_net_to_host_f64",
 }
 
 
 def endianfun_array(o):
 }
 
 
 def endianfun_array(o):
-    '''Generate endian functions for arrays'''
-    forloop = '''\
+    """Generate endian functions for arrays"""
+    forloop = """\
     for (i = 0; i < {length}; i++) {{
         a->{name}[i] = {format}(a->{name}[i]);
     }}
     for (i = 0; i < {length}; i++) {{
         a->{name}[i] = {format}(a->{name}[i]);
     }}
-'''
+"""
 
 
-    forloop_format = '''\
+    forloop_format = """\
     for (i = 0; i < {length}; i++) {{
         {type}_endian(&a->{name}[i]);
     }}
     for (i = 0; i < {length}; i++) {{
         {type}_endian(&a->{name}[i]);
     }}
-'''
+"""
 
 
-    output = ''
-    if o.fieldtype == 'u8' or o.fieldtype == 'string' or o.fieldtype == 'bool':
-        output += '    /* a->{n} = a->{n} (no-op) */\n'.format(n=o.fieldname)
+    output = ""
+    if o.fieldtype == "u8" or o.fieldtype == "string" or o.fieldtype == "bool":
+        output += "    /* a->{n} = a->{n} (no-op) */\n".format(n=o.fieldname)
     else:
     else:
-        lfield = 'a->' + o.lengthfield if o.lengthfield else o.length
+        lfield = "a->" + o.lengthfield if o.lengthfield else o.length
         if o.fieldtype in ENDIAN_STRINGS:
         if o.fieldtype in ENDIAN_STRINGS:
-            output += (forloop
-                       .format(length=lfield,
-                               format=ENDIAN_STRINGS[o.fieldtype],
-                               name=o.fieldname))
+            output += forloop.format(
+                length=lfield, format=ENDIAN_STRINGS[o.fieldtype], name=o.fieldname
+            )
         else:
         else:
-            output += (forloop_format
-                       .format(length=lfield, type=o.fieldtype,
-                               name=o.fieldname))
+            output += forloop_format.format(
+                length=lfield, type=o.fieldtype, name=o.fieldname
+            )
     return output
 
 
     return output
 
 
-NO_ENDIAN_CONVERSION = {'client_index': None}
+NO_ENDIAN_CONVERSION = {"client_index": None}
 
 
 def endianfun_obj(o):
 
 
 def endianfun_obj(o):
-    '''Generate endian conversion function for type'''
-    output = ''
-    if o.type == 'Array':
+    """Generate endian conversion function for type"""
+    output = ""
+    if o.type == "Array":
         return endianfun_array(o)
         return endianfun_array(o)
-    if o.type != 'Field':
-        output += ('    s = format(s, "\\n{} {} {} (print not implemented");\n'
-                   .format(o.type, o.fieldtype, o.fieldname))
+    if o.type != "Field":
+        output += '    s = format(s, "\\n{} {} {} (print not implemented");\n'.format(
+            o.type, o.fieldtype, o.fieldname
+        )
         return output
     if o.fieldname in NO_ENDIAN_CONVERSION:
         return output
     if o.fieldname in NO_ENDIAN_CONVERSION:
-        output += '    /* a->{n} = a->{n} (no-op) */\n'.format(n=o.fieldname)
+        output += "    /* a->{n} = a->{n} (no-op) */\n".format(n=o.fieldname)
         return output
     if o.fieldtype in ENDIAN_STRINGS:
         return output
     if o.fieldtype in ENDIAN_STRINGS:
-        output += ('    a->{name} = {format}(a->{name});\n'
-                   .format(name=o.fieldname,
-                           format=ENDIAN_STRINGS[o.fieldtype]))
-    elif o.fieldtype.startswith('vl_api_'):
-        output += ('    {type}_endian(&a->{name});\n'
-                   .format(type=o.fieldtype, name=o.fieldname))
+        output += "    a->{name} = {format}(a->{name});\n".format(
+            name=o.fieldname, format=ENDIAN_STRINGS[o.fieldtype]
+        )
+    elif o.fieldtype.startswith("vl_api_"):
+        output += "    {type}_endian(&a->{name});\n".format(
+            type=o.fieldtype, name=o.fieldname
+        )
     else:
     else:
-        output += '    /* a->{n} = a->{n} (no-op) */\n'.format(n=o.fieldname)
+        output += "    /* a->{n} = a->{n} (no-op) */\n".format(n=o.fieldname)
 
     return output
 
 
 def endianfun(objs, modulename):
 
     return output
 
 
 def endianfun(objs, modulename):
-    '''Main entry point for endian function generation'''
-    output = '''\
+    """Main entry point for endian function generation"""
+    output = """\
 
 /****** Endian swap functions *****/\n\
 #ifdef vl_endianfun
 
 /****** Endian swap functions *****/\n\
 #ifdef vl_endianfun
@@ -1136,51 +1222,50 @@ def endianfun(objs, modulename):
 #define clib_net_to_host_uword clib_net_to_host_u32
 #endif
 
 #define clib_net_to_host_uword clib_net_to_host_u32
 #endif
 
-'''
+"""
     output = output.format(module=modulename)
 
     output = output.format(module=modulename)
 
-    signature = '''\
+    signature = """\
 static inline void vl_api_{name}_t_endian (vl_api_{name}_t *a)
 {{
     int i __attribute__((unused));
 static inline void vl_api_{name}_t_endian (vl_api_{name}_t *a)
 {{
     int i __attribute__((unused));
-'''
+"""
 
     for t in objs:
 
     for t in objs:
-        if t.__class__.__name__ == 'Enum' or t.__class__.__name__ == 'EnumFlag':
+        if t.__class__.__name__ == "Enum" or t.__class__.__name__ == "EnumFlag":
             output += signature.format(name=t.name)
             if t.enumtype in ENDIAN_STRINGS:
             output += signature.format(name=t.name)
             if t.enumtype in ENDIAN_STRINGS:
-                output += ('    *a = {}(*a);\n'
-                           .format(ENDIAN_STRINGS[t.enumtype]))
+                output += "    *a = {}(*a);\n".format(ENDIAN_STRINGS[t.enumtype])
             else:
             else:
-                output += ('    /* a->{name} = a->{name} (no-op) */\n'
-                           .format(name=t.name))
+                output += "    /* a->{name} = a->{name} (no-op) */\n".format(
+                    name=t.name
+                )
 
 
-            output += '}\n\n'
+            output += "}\n\n"
             continue
 
         if t.manual_endian:
             output += "/***** manual: vl_api_%s_t_endian  *****/\n\n" % t.name
             continue
 
             continue
 
         if t.manual_endian:
             output += "/***** manual: vl_api_%s_t_endian  *****/\n\n" % t.name
             continue
 
-        if t.__class__.__name__ == 'Using':
+        if t.__class__.__name__ == "Using":
             output += signature.format(name=t.name)
             output += signature.format(name=t.name)
-            if ('length' in t.alias and t.alias['length'] and
-                    t.alias['type'] == 'u8'):
-                output += ('    /* a->{name} = a->{name} (no-op) */\n'
-                           .format(name=t.name))
-            elif t.alias['type'] in FORMAT_STRINGS:
-                output += ('    *a = {}(*a);\n'
-                           .format(ENDIAN_STRINGS[t.alias['type']]))
+            if "length" in t.alias and t.alias["length"] and t.alias["type"] == "u8":
+                output += "    /* a->{name} = a->{name} (no-op) */\n".format(
+                    name=t.name
+                )
+            elif t.alias["type"] in FORMAT_STRINGS:
+                output += "    *a = {}(*a);\n".format(ENDIAN_STRINGS[t.alias["type"]])
             else:
             else:
-                output += '    /* Not Implemented yet {} */'.format(t.name)
-            output += '}\n\n'
+                output += "    /* Not Implemented yet {} */".format(t.name)
+            output += "}\n\n"
             continue
 
         output += signature.format(name=t.name)
 
         for o in t.block:
             output += endianfun_obj(o)
             continue
 
         output += signature.format(name=t.name)
 
         for o in t.block:
             output += endianfun_obj(o)
-        output += '}\n\n'
+        output += "}\n\n"
 
     output += "\n#endif"
     output += "\n#endif /* vl_endianfun */\n\n"
 
     output += "\n#endif"
     output += "\n#endif /* vl_endianfun */\n\n"
@@ -1189,32 +1274,32 @@ static inline void vl_api_{name}_t_endian (vl_api_{name}_t *a)
 
 
 def calc_size_fun(objs, modulename):
 
 
 def calc_size_fun(objs, modulename):
-    '''Main entry point for calculate size function generation'''
-    output = '''\
+    """Main entry point for calculate size function generation"""
+    output = """\
 
 /****** Calculate size functions *****/\n\
 #ifdef vl_calcsizefun
 #ifndef included_{module}_calcsizefun
 #define included_{module}_calcsizefun
 
 
 /****** Calculate size functions *****/\n\
 #ifdef vl_calcsizefun
 #ifndef included_{module}_calcsizefun
 #define included_{module}_calcsizefun
 
-'''
+"""
     output = output.format(module=modulename)
 
     output = output.format(module=modulename)
 
-    signature = '''\
+    signature = """\
 /* calculate message size of message in network byte order */
 static inline uword vl_api_{name}_t_calc_size (vl_api_{name}_t *a)
 {{
 /* calculate message size of message in network byte order */
 static inline uword vl_api_{name}_t_calc_size (vl_api_{name}_t *a)
 {{
-'''
+"""
 
     for o in objs:
         tname = o.__class__.__name__
 
         output += signature.format(name=o.name)
         output += f"      return sizeof(*a)"
 
     for o in objs:
         tname = o.__class__.__name__
 
         output += signature.format(name=o.name)
         output += f"      return sizeof(*a)"
-        if tname == 'Using':
-            if 'length' in o.alias:
+        if tname == "Using":
+            if "length" in o.alias:
                 try:
                 try:
-                    tmp = int(o.alias['length'])
+                    tmp = int(o.alias["length"])
                     if tmp == 0:
                         raise (f"Unexpected length '0' for alias {o}")
                 except:
                     if tmp == 0:
                         raise (f"Unexpected length '0' for alias {o}")
                 except:
@@ -1224,36 +1309,44 @@ static inline uword vl_api_{name}_t_calc_size (vl_api_{name}_t *a)
                     print(dir(o.alias))
                     print(o.alias)
                     raise
                     print(dir(o.alias))
                     print(o.alias)
                     raise
-        elif tname == 'Enum' or tname == 'EnumFlag':
+        elif tname == "Enum" or tname == "EnumFlag":
             pass
         else:
             for b in o.block:
             pass
         else:
             for b in o.block:
-                if b.type == 'Option':
+                if b.type == "Option":
                     continue
                     continue
-                elif b.type == 'Field':
-                    if b.fieldtype.startswith('vl_api_'):
+                elif b.type == "Field":
+                    if b.fieldtype.startswith("vl_api_"):
                         output += f" - sizeof(a->{b.fieldname})"
                         output += f" + {b.fieldtype}_calc_size(&a->{b.fieldname})"
                         output += f" - sizeof(a->{b.fieldname})"
                         output += f" + {b.fieldtype}_calc_size(&a->{b.fieldname})"
-                elif b.type == 'Array':
+                elif b.type == "Array":
                     if b.lengthfield:
                     if b.lengthfield:
-                        m = list(filter(lambda x: x.fieldname == b.lengthfield, o.block))
+                        m = list(
+                            filter(lambda x: x.fieldname == b.lengthfield, o.block)
+                        )
                         if len(m) != 1:
                         if len(m) != 1:
-                            raise Exception(f"Expected 1 match for field '{b.lengthfield}', got '{m}'")
+                            raise Exception(
+                                f"Expected 1 match for field '{b.lengthfield}', got '{m}'"
+                            )
                         lf = m[0]
                         if lf.fieldtype in ENDIAN_STRINGS:
                             output += f" + {ENDIAN_STRINGS[lf.fieldtype]}(a->{b.lengthfield}) * sizeof(a->{b.fieldname}[0])"
                         elif lf.fieldtype == "u8":
                         lf = m[0]
                         if lf.fieldtype in ENDIAN_STRINGS:
                             output += f" + {ENDIAN_STRINGS[lf.fieldtype]}(a->{b.lengthfield}) * sizeof(a->{b.fieldname}[0])"
                         elif lf.fieldtype == "u8":
-                            output += f" + a->{b.lengthfield} * sizeof(a->{b.fieldname}[0])"
+                            output += (
+                                f" + a->{b.lengthfield} * sizeof(a->{b.fieldname}[0])"
+                            )
                         else:
                         else:
-                            raise Exception(f"Don't know how to endian swap {lf.fieldtype}")
+                            raise Exception(
+                                f"Don't know how to endian swap {lf.fieldtype}"
+                            )
                     else:
                         # Fixed length strings decay to nul terminated u8
                     else:
                         # Fixed length strings decay to nul terminated u8
-                        if b.fieldtype == 'string':
+                        if b.fieldtype == "string":
                             if b.modern_vla:
                                 output += f" + vl_api_string_len(&a->{b.fieldname})"
 
         output += ";\n"
                             if b.modern_vla:
                                 output += f" + vl_api_string_len(&a->{b.fieldname})"
 
         output += ";\n"
-        output += '}\n\n'
+        output += "}\n\n"
     output += "\n#endif"
     output += "\n#endif /* vl_calcsizefun */\n\n"
 
     output += "\n#endif"
     output += "\n#endif /* vl_calcsizefun */\n\n"
 
@@ -1261,18 +1354,22 @@ static inline uword vl_api_{name}_t_calc_size (vl_api_{name}_t *a)
 
 
 def version_tuple(s, module):
 
 
 def version_tuple(s, module):
-    '''Generate semantic version string'''
-    output = '''\
+    """Generate semantic version string"""
+    output = """\
 /****** Version tuple *****/
 
 #ifdef vl_api_version_tuple
 
 /****** Version tuple *****/
 
 #ifdef vl_api_version_tuple
 
-'''
-    if 'version' in s['Option']:
-        v = s['Option']['version']
-        (major, minor, patch) = v.split('.')
-        output += "vl_api_version_tuple(%s, %s, %s, %s)\n" % \
-                  (module, major, minor, patch)
+"""
+    if "version" in s["Option"]:
+        v = s["Option"]["version"]
+        (major, minor, patch) = v.split(".")
+        output += "vl_api_version_tuple(%s, %s, %s, %s)\n" % (
+            module,
+            major,
+            minor,
+            patch,
+        )
 
     output += "\n#endif /* vl_api_version_tuple */\n\n"
 
 
     output += "\n#endif /* vl_api_version_tuple */\n\n"
 
@@ -1280,131 +1377,145 @@ def version_tuple(s, module):
 
 
 def generate_include_enum(s, module, stream):
 
 
 def generate_include_enum(s, module, stream):
-    '''Generate <name>.api_enum.h'''
+    """Generate <name>.api_enum.h"""
     write = stream.write
 
     write = stream.write
 
-    if 'Define' in s:
-        write('typedef enum {\n')
-        for t in s['Define']:
-            write('   VL_API_{},\n'.format(t.name.upper()))
-        write('   VL_MSG_{}_LAST\n'.format(module.upper()))
-        write('}} vl_api_{}_enum_t;\n'.format(module))
+    if "Define" in s:
+        write("typedef enum {\n")
+        for t in s["Define"]:
+            write("   VL_API_{},\n".format(t.name.upper()))
+        write("   VL_MSG_{}_LAST\n".format(module.upper()))
+        write("}} vl_api_{}_enum_t;\n".format(module))
 
 
 def generate_include_counters(s, stream):
 
 
 def generate_include_counters(s, stream):
-    '''Include file for the counter data model types.'''
+    """Include file for the counter data model types."""
     write = stream.write
 
     for counters in s:
         csetname = counters.name
     write = stream.write
 
     for counters in s:
         csetname = counters.name
-        write('typedef enum {\n')
+        write("typedef enum {\n")
         for c in counters.block:
         for c in counters.block:
-            write('   {}_ERROR_{},\n'
-                  .format(csetname.upper(), c['name'].upper()))
-        write('   {}_N_ERROR\n'.format(csetname.upper()))
-        write('}} vl_counter_{}_enum_t;\n'.format(csetname))
+            write("   {}_ERROR_{},\n".format(csetname.upper(), c["name"].upper()))
+        write("   {}_N_ERROR\n".format(csetname.upper()))
+        write("}} vl_counter_{}_enum_t;\n".format(csetname))
 
 
-        write('extern vlib_error_desc_t {}_error_counters[];\n'.format(csetname))
+        write("extern vlib_error_desc_t {}_error_counters[];\n".format(csetname))
 
 
 def generate_include_types(s, module, stream):
 
 
 def generate_include_types(s, module, stream):
-    '''Generate separate API _types file.'''
+    """Generate separate API _types file."""
     write = stream.write
 
     write = stream.write
 
-    write('#ifndef included_{module}_api_types_h\n'.format(module=module))
-    write('#define included_{module}_api_types_h\n'.format(module=module))
-
-    if 'version' in s['Option']:
-        v = s['Option']['version']
-        (major, minor, patch) = v.split('.')
-        write('#define VL_API_{m}_API_VERSION_MAJOR {v}\n'
-              .format(m=module.upper(), v=major))
-        write('#define VL_API_{m}_API_VERSION_MINOR {v}\n'
-              .format(m=module.upper(), v=minor))
-        write('#define VL_API_{m}_API_VERSION_PATCH {v}\n'
-              .format(m=module.upper(), v=patch))
-
-    if 'Import' in s:
-        write('/* Imported API files */\n')
-        for i in s['Import']:
-            filename = i.filename.replace('plugins/', '')
-            write('#include <{}_types.h>\n'.format(filename))
-
-    for o in itertools.chain(s['types'], s['Define']):
+    write("#ifndef included_{module}_api_types_h\n".format(module=module))
+    write("#define included_{module}_api_types_h\n".format(module=module))
+
+    if "version" in s["Option"]:
+        v = s["Option"]["version"]
+        (major, minor, patch) = v.split(".")
+        write(
+            "#define VL_API_{m}_API_VERSION_MAJOR {v}\n".format(
+                m=module.upper(), v=major
+            )
+        )
+        write(
+            "#define VL_API_{m}_API_VERSION_MINOR {v}\n".format(
+                m=module.upper(), v=minor
+            )
+        )
+        write(
+            "#define VL_API_{m}_API_VERSION_PATCH {v}\n".format(
+                m=module.upper(), v=patch
+            )
+        )
+
+    if "Import" in s:
+        write("/* Imported API files */\n")
+        for i in s["Import"]:
+            filename = i.filename.replace("plugins/", "")
+            write("#include <{}_types.h>\n".format(filename))
+
+    for o in itertools.chain(s["types"], s["Define"]):
         tname = o.__class__.__name__
         tname = o.__class__.__name__
-        if tname == 'Using':
-            if 'length' in o.alias:
-                write('typedef %s vl_api_%s_t[%s];\n' %
-                      (o.alias['type'], o.name, o.alias['length']))
+        if tname == "Using":
+            if "length" in o.alias:
+                write(
+                    "typedef %s vl_api_%s_t[%s];\n"
+                    % (o.alias["type"], o.name, o.alias["length"])
+                )
             else:
             else:
-                write('typedef %s vl_api_%s_t;\n' % (o.alias['type'], o.name))
-        elif tname == 'Enum' or tname == 'EnumFlag':
-            if o.enumtype == 'u32':
+                write("typedef %s vl_api_%s_t;\n" % (o.alias["type"], o.name))
+        elif tname == "Enum" or tname == "EnumFlag":
+            if o.enumtype == "u32":
                 write("typedef enum {\n")
             else:
                 write("typedef enum __attribute__((packed)) {\n")
 
             for b in o.block:
                 write("    %s = %s,\n" % (b[0], b[1]))
                 write("typedef enum {\n")
             else:
                 write("typedef enum __attribute__((packed)) {\n")
 
             for b in o.block:
                 write("    %s = %s,\n" % (b[0], b[1]))
-            write('} vl_api_%s_t;\n' % o.name)
-            if o.enumtype != 'u32':
-                size1 = 'sizeof(vl_api_%s_t)' % o.name
-                size2 = 'sizeof(%s)' % o.enumtype
-                err_str = 'size of API enum %s is wrong' % o.name
-                write('STATIC_ASSERT(%s == %s, "%s");\n'
-                      % (size1, size2, err_str))
+            write("} vl_api_%s_t;\n" % o.name)
+            if o.enumtype != "u32":
+                size1 = "sizeof(vl_api_%s_t)" % o.name
+                size2 = "sizeof(%s)" % o.enumtype
+                err_str = "size of API enum %s is wrong" % o.name
+                write('STATIC_ASSERT(%s == %s, "%s");\n' % (size1, size2, err_str))
         else:
         else:
-            if tname == 'Union':
-                write("typedef union __attribute__ ((packed)) _vl_api_%s {\n"
-                      % o.name)
+            if tname == "Union":
+                write("typedef union __attribute__ ((packed)) _vl_api_%s {\n" % o.name)
             else:
             else:
-                write(("typedef struct __attribute__ ((packed)) _vl_api_%s {\n")
-                      % o.name)
+                write(
+                    ("typedef struct __attribute__ ((packed)) _vl_api_%s {\n") % o.name
+                )
             for b in o.block:
             for b in o.block:
-                if b.type == 'Option':
+                if b.type == "Option":
                     continue
                     continue
-                if b.type == 'Field':
-                    write("    %s %s;\n" % (api2c(b.fieldtype),
-                                            b.fieldname))
-                elif b.type == 'Array':
+                if b.type == "Field":
+                    write("    %s %s;\n" % (api2c(b.fieldtype), b.fieldname))
+                elif b.type == "Array":
                     if b.lengthfield:
                     if b.lengthfield:
-                        write("    %s %s[0];\n" % (api2c(b.fieldtype),
-                                                   b.fieldname))
+                        write("    %s %s[0];\n" % (api2c(b.fieldtype), b.fieldname))
                     else:
                         # Fixed length strings decay to nul terminated u8
                     else:
                         # Fixed length strings decay to nul terminated u8
-                        if b.fieldtype == 'string':
+                        if b.fieldtype == "string":
                             if b.modern_vla:
                             if b.modern_vla:
-                                write('    {} {};\n'
-                                      .format(api2c(b.fieldtype),
-                                              b.fieldname))
+                                write(
+                                    "    {} {};\n".format(
+                                        api2c(b.fieldtype), b.fieldname
+                                    )
+                                )
                             else:
                             else:
-                                write('    u8 {}[{}];\n'
-                                      .format(b.fieldname, b.length))
+                                write("    u8 {}[{}];\n".format(b.fieldname, b.length))
                         else:
                         else:
-                            write("    %s %s[%s];\n" %
-                                  (api2c(b.fieldtype), b.fieldname,
-                                   b.length))
+                            write(
+                                "    %s %s[%s];\n"
+                                % (api2c(b.fieldtype), b.fieldname, b.length)
+                            )
                 else:
                 else:
-                    raise ValueError("Error in processing type {} for {}"
-                                     .format(b, o.name))
+                    raise ValueError(
+                        "Error in processing type {} for {}".format(b, o.name)
+                    )
 
 
-            write('} vl_api_%s_t;\n' % o.name)
-            write(f'#define VL_API_{o.name.upper()}_IS_CONSTANT_SIZE ({0 if o.vla else 1})\n\n')
+            write("} vl_api_%s_t;\n" % o.name)
+            write(
+                f"#define VL_API_{o.name.upper()}_IS_CONSTANT_SIZE ({0 if o.vla else 1})\n\n"
+            )
 
 
-    for t in s['Define']:
-        write('#define VL_API_{ID}_CRC "{n}_{crc:08x}"\n'
-              .format(n=t.name, ID=t.name.upper(), crc=t.crc))
+    for t in s["Define"]:
+        write(
+            '#define VL_API_{ID}_CRC "{n}_{crc:08x}"\n'.format(
+                n=t.name, ID=t.name.upper(), crc=t.crc
+            )
+        )
 
     write("\n#endif\n")
 
 
 
     write("\n#endif\n")
 
 
-def generate_c_boilerplate(services, defines, counters, file_crc,
-                           module, stream):
-    '''VPP side plugin.'''
+def generate_c_boilerplate(services, defines, counters, file_crc, module, stream):
+    """VPP side plugin."""
     write = stream.write
     define_hash = {d.name: d for d in defines}
 
     write = stream.write
     define_hash = {d.name: d for d in defines}
 
-    hdr = '''\
+    hdr = """\
 #define vl_endianfun           /* define message structures */
 #include "{module}.api.h"
 #undef vl_endianfun
 #define vl_endianfun           /* define message structures */
 #include "{module}.api.h"
 #undef vl_endianfun
@@ -1419,89 +1530,98 @@ def generate_c_boilerplate(services, defines, counters, file_crc,
 #include "{module}.api.h"
 #undef vl_printfun
 
 #include "{module}.api.h"
 #undef vl_printfun
 
-'''
+"""
 
     write(hdr.format(module=module))
 
     write(hdr.format(module=module))
-    write('static u16\n')
-    write('setup_message_id_table (void) {\n')
-    write('   api_main_t *am = my_api_main;\n')
-    write('   vl_msg_api_msg_config_t c;\n')
-    write('   u16 msg_id_base = vl_msg_api_get_msg_ids ("{}_{crc:08x}", '
-          'VL_MSG_{m}_LAST);\n'
-          .format(module, crc=file_crc, m=module.upper()))
+    write("static u16\n")
+    write("setup_message_id_table (void) {\n")
+    write("   api_main_t *am = my_api_main;\n")
+    write("   vl_msg_api_msg_config_t c;\n")
+    write(
+        '   u16 msg_id_base = vl_msg_api_get_msg_ids ("{}_{crc:08x}", '
+        "VL_MSG_{m}_LAST);\n".format(module, crc=file_crc, m=module.upper())
+    )
 
     for d in defines:
 
     for d in defines:
-        write('   vl_msg_api_add_msg_name_crc (am, "{n}_{crc:08x}",\n'
-              '                                VL_API_{ID} + msg_id_base);\n'
-              .format(n=d.name, ID=d.name.upper(), crc=d.crc))
+        write(
+            '   vl_msg_api_add_msg_name_crc (am, "{n}_{crc:08x}",\n'
+            "                                VL_API_{ID} + msg_id_base);\n".format(
+                n=d.name, ID=d.name.upper(), crc=d.crc
+            )
+        )
     for s in services:
         d = define_hash[s.caller]
     for s in services:
         d = define_hash[s.caller]
-        write('   c = (vl_msg_api_msg_config_t) '
-              ' {{.id = VL_API_{ID} + msg_id_base,\n'
-              '   .name = "{n}",\n'
-              '   .handler = vl_api_{n}_t_handler,\n'
-              '   .cleanup = vl_noop_handler,\n'
-              '   .endian = vl_api_{n}_t_endian,\n'
-              '   .print = vl_api_{n}_t_print,\n'
-              '   .traced = 1,\n'
-              '   .replay = 1,\n'
-              '   .print_json = vl_api_{n}_t_print_json,\n'
-              '   .tojson = vl_api_{n}_t_tojson,\n'
-              '   .fromjson = vl_api_{n}_t_fromjson,\n'
-              '   .calc_size = vl_api_{n}_t_calc_size,\n'
-              '   .is_autoendian = {auto}}};\n'
-              .format(n=s.caller, ID=s.caller.upper(),
-                      auto=d.autoendian))
-        write('   vl_msg_api_config (&c);\n')
+        write(
+            "   c = (vl_msg_api_msg_config_t) "
+            " {{.id = VL_API_{ID} + msg_id_base,\n"
+            '   .name = "{n}",\n'
+            "   .handler = vl_api_{n}_t_handler,\n"
+            "   .cleanup = vl_noop_handler,\n"
+            "   .endian = vl_api_{n}_t_endian,\n"
+            "   .print = vl_api_{n}_t_print,\n"
+            "   .traced = 1,\n"
+            "   .replay = 1,\n"
+            "   .print_json = vl_api_{n}_t_print_json,\n"
+            "   .tojson = vl_api_{n}_t_tojson,\n"
+            "   .fromjson = vl_api_{n}_t_fromjson,\n"
+            "   .calc_size = vl_api_{n}_t_calc_size,\n"
+            "   .is_autoendian = {auto}}};\n".format(
+                n=s.caller, ID=s.caller.upper(), auto=d.autoendian
+            )
+        )
+        write("   vl_msg_api_config (&c);\n")
         try:
             d = define_hash[s.reply]
         try:
             d = define_hash[s.reply]
-            write('   c = (vl_msg_api_msg_config_t) '
-                  '{{.id = VL_API_{ID} + msg_id_base,\n'
-                  '  .name = "{n}",\n'
-                  '  .handler = 0,\n'
-                  '  .cleanup = vl_noop_handler,\n'
-                  '  .endian = vl_api_{n}_t_endian,\n'
-                  '  .print = vl_api_{n}_t_print,\n'
-                  '  .traced = 1,\n'
-                  '  .replay = 1,\n'
-                  '  .print_json = vl_api_{n}_t_print_json,\n'
-                  '  .tojson = vl_api_{n}_t_tojson,\n'
-                  '  .fromjson = vl_api_{n}_t_fromjson,\n'
-                  '  .calc_size = vl_api_{n}_t_calc_size,\n'
-                  '  .is_autoendian = {auto}}};\n'
-                  .format(n=s.reply, ID=s.reply.upper(),
-                          auto=d.autoendian))
-            write('   vl_msg_api_config (&c);\n')
+            write(
+                "   c = (vl_msg_api_msg_config_t) "
+                "{{.id = VL_API_{ID} + msg_id_base,\n"
+                '  .name = "{n}",\n'
+                "  .handler = 0,\n"
+                "  .cleanup = vl_noop_handler,\n"
+                "  .endian = vl_api_{n}_t_endian,\n"
+                "  .print = vl_api_{n}_t_print,\n"
+                "  .traced = 1,\n"
+                "  .replay = 1,\n"
+                "  .print_json = vl_api_{n}_t_print_json,\n"
+                "  .tojson = vl_api_{n}_t_tojson,\n"
+                "  .fromjson = vl_api_{n}_t_fromjson,\n"
+                "  .calc_size = vl_api_{n}_t_calc_size,\n"
+                "  .is_autoendian = {auto}}};\n".format(
+                    n=s.reply, ID=s.reply.upper(), auto=d.autoendian
+                )
+            )
+            write("   vl_msg_api_config (&c);\n")
         except KeyError:
             pass
 
         except KeyError:
             pass
 
-    write('   return msg_id_base;\n')
-    write('}\n')
+    write("   return msg_id_base;\n")
+    write("}\n")
 
 
-    severity = {'error': 'VL_COUNTER_SEVERITY_ERROR',
-                'info': 'VL_COUNTER_SEVERITY_INFO',
-                'warn': 'VL_COUNTER_SEVERITY_WARN'}
+    severity = {
+        "error": "VL_COUNTER_SEVERITY_ERROR",
+        "info": "VL_COUNTER_SEVERITY_INFO",
+        "warn": "VL_COUNTER_SEVERITY_WARN",
+    }
 
     for cnt in counters:
         csetname = cnt.name
 
     for cnt in counters:
         csetname = cnt.name
-        write('vlib_error_desc_t {}_error_counters[] = {{\n'.format(csetname))
+        write("vlib_error_desc_t {}_error_counters[] = {{\n".format(csetname))
         for c in cnt.block:
         for c in cnt.block:
-            write('  {\n')
-            write('   .name = "{}",\n'.format(c['name']))
-            write('   .desc = "{}",\n'.format(c['description']))
-            write('   .severity = {},\n'.format(severity[c['severity']]))
-            write('  },\n')
-        write('};\n')
+            write("  {\n")
+            write('   .name = "{}",\n'.format(c["name"]))
+            write('   .desc = "{}",\n'.format(c["description"]))
+            write("   .severity = {},\n".format(severity[c["severity"]]))
+            write("  },\n")
+        write("};\n")
 
 
 
 
-def generate_c_test_boilerplate(services, defines, file_crc, module, plugin,
-                                stream):
-    '''Generate code for legacy style VAT. To be deleted.'''
+def generate_c_test_boilerplate(services, defines, file_crc, module, plugin, stream):
+    """Generate code for legacy style VAT. To be deleted."""
     write = stream.write
 
     define_hash = {d.name: d for d in defines}
 
     write = stream.write
 
     define_hash = {d.name: d for d in defines}
 
-    hdr = '''\
+    hdr = """\
 #define vl_endianfun            /* define message structures */
 #include "{module}.api.h"
 #undef vl_endianfun
 #define vl_endianfun            /* define message structures */
 #include "{module}.api.h"
 #undef vl_endianfun
@@ -1516,7 +1636,7 @@ def generate_c_test_boilerplate(services, defines, file_crc, module, plugin,
 #include "{module}.api.h"
 #undef vl_printfun
 
 #include "{module}.api.h"
 #undef vl_printfun
 
-'''
+"""
 
     write(hdr.format(module=module))
     for s in services:
 
     write(hdr.format(module=module))
     for s in services:
@@ -1525,113 +1645,133 @@ def generate_c_test_boilerplate(services, defines, file_crc, module, plugin,
         except KeyError:
             continue
         if d.manual_print:
         except KeyError:
             continue
         if d.manual_print:
-            write('/*\n'
-                  ' * Manual definition requested for: \n'
-                  ' * vl_api_{n}_t_handler()\n'
-                  ' */\n'
-                  .format(n=s.reply))
+            write(
+                "/*\n"
+                " * Manual definition requested for: \n"
+                " * vl_api_{n}_t_handler()\n"
+                " */\n".format(n=s.reply)
+            )
             continue
         if not define_hash[s.caller].autoreply:
             continue
         if not define_hash[s.caller].autoreply:
-            write('/* Generation not supported (vl_api_{n}_t_handler()) */\n'
-                  .format(n=s.reply))
+            write(
+                "/* Generation not supported (vl_api_{n}_t_handler()) */\n".format(
+                    n=s.reply
+                )
+            )
             continue
             continue
-        write('#ifndef VL_API_{n}_T_HANDLER\n'.format(n=s.reply.upper()))
-        write('static void\n')
-        write('vl_api_{n}_t_handler (vl_api_{n}_t * mp) {{\n'
-              .format(n=s.reply))
-        write('   vat_main_t * vam = {}_test_main.vat_main;\n'.format(module))
-        write('   i32 retval = ntohl(mp->retval);\n')
-        write('   if (vam->async_mode) {\n')
-        write('      vam->async_errors += (retval < 0);\n')
-        write('   } else {\n')
-        write('      vam->retval = retval;\n')
-        write('      vam->result_ready = 1;\n')
-        write('   }\n')
-        write('}\n')
-        write('#endif\n')
+        write("#ifndef VL_API_{n}_T_HANDLER\n".format(n=s.reply.upper()))
+        write("static void\n")
+        write("vl_api_{n}_t_handler (vl_api_{n}_t * mp) {{\n".format(n=s.reply))
+        write("   vat_main_t * vam = {}_test_main.vat_main;\n".format(module))
+        write("   i32 retval = ntohl(mp->retval);\n")
+        write("   if (vam->async_mode) {\n")
+        write("      vam->async_errors += (retval < 0);\n")
+        write("   } else {\n")
+        write("      vam->retval = retval;\n")
+        write("      vam->result_ready = 1;\n")
+        write("   }\n")
+        write("}\n")
+        write("#endif\n")
 
         for e in s.events:
             if define_hash[e].manual_print:
                 continue
 
         for e in s.events:
             if define_hash[e].manual_print:
                 continue
-            write('static void\n')
-            write('vl_api_{n}_t_handler (vl_api_{n}_t * mp) {{\n'.format(n=e))
+            write("static void\n")
+            write("vl_api_{n}_t_handler (vl_api_{n}_t * mp) {{\n".format(n=e))
             write('    vl_print(0, "{n} event called:");\n'.format(n=e))
             write('    vl_print(0, "{n} event called:");\n'.format(n=e))
-            write('    vl_api_{n}_t_print(mp, 0);\n'.format(n=e))
-            write('}\n')
+            write("    vl_api_{n}_t_print(mp, 0);\n".format(n=e))
+            write("}\n")
 
 
-    write('static void\n')
-    write('setup_message_id_table (vat_main_t * vam, u16 msg_id_base) {\n')
+    write("static void\n")
+    write("setup_message_id_table (vat_main_t * vam, u16 msg_id_base) {\n")
     for s in services:
     for s in services:
-        write('   vl_msg_api_set_handlers(VL_API_{ID} + msg_id_base, '
-              '                           "{n}",\n'
-              '                           vl_api_{n}_t_handler, '
-              '                           vl_noop_handler,\n'
-              '                           vl_api_{n}_t_endian, '
-              '                           vl_api_{n}_t_print,\n'
-              '                           sizeof(vl_api_{n}_t), 1,\n'
-              '                           vl_api_{n}_t_print_json,\n'
-              '                           vl_api_{n}_t_tojson,\n'
-              '                           vl_api_{n}_t_fromjson,\n'
-              '                           vl_api_{n}_t_calc_size);\n'
-              .format(n=s.reply, ID=s.reply.upper()))
-        write('   hash_set_mem (vam->function_by_name, "{n}", api_{n});\n'
-              .format(n=s.caller))
+        write(
+            "   vl_msg_api_set_handlers(VL_API_{ID} + msg_id_base, "
+            '                           "{n}",\n'
+            "                           vl_api_{n}_t_handler, "
+            "                           vl_noop_handler,\n"
+            "                           vl_api_{n}_t_endian, "
+            "                           vl_api_{n}_t_print,\n"
+            "                           sizeof(vl_api_{n}_t), 1,\n"
+            "                           vl_api_{n}_t_print_json,\n"
+            "                           vl_api_{n}_t_tojson,\n"
+            "                           vl_api_{n}_t_fromjson,\n"
+            "                           vl_api_{n}_t_calc_size);\n".format(
+                n=s.reply, ID=s.reply.upper()
+            )
+        )
+        write(
+            '   hash_set_mem (vam->function_by_name, "{n}", api_{n});\n'.format(
+                n=s.caller
+            )
+        )
         try:
         try:
-            write('   hash_set_mem (vam->help_by_name, "{n}", "{help}");\n'
-                  .format(n=s.caller,
-                          help=define_hash[s.caller].options['vat_help']))
+            write(
+                '   hash_set_mem (vam->help_by_name, "{n}", "{help}");\n'.format(
+                    n=s.caller, help=define_hash[s.caller].options["vat_help"]
+                )
+            )
         except KeyError:
             pass
 
         # Events
         for e in s.events:
         except KeyError:
             pass
 
         # Events
         for e in s.events:
-            write('   vl_msg_api_set_handlers(VL_API_{ID} + msg_id_base, '
-                  '                          "{n}",\n'
-                  '                           vl_api_{n}_t_handler, '
-                  '                           vl_noop_handler,\n'
-                  '                           vl_api_{n}_t_endian, '
-                  '                           vl_api_{n}_t_print,\n'
-                  '                           sizeof(vl_api_{n}_t), 1,\n'
-                  '                           vl_api_{n}_t_print_json,\n'
-                  '                           vl_api_{n}_t_tojson,\n'
-                  '                           vl_api_{n}_t_fromjson,\n'
-                  '                           vl_api_{n}_t_calc_size);\n'
-                  .format(n=e, ID=e.upper()))
-
-    write('}\n')
-    write('clib_error_t * vat_plugin_register (vat_main_t *vam)\n')
-    write('{\n')
-    write('   {n}_test_main_t * mainp = &{n}_test_main;\n'.format(n=module))
-    write('   mainp->vat_main = vam;\n')
-    write('   mainp->msg_id_base = vl_client_get_first_plugin_msg_id '
-          '                       ("{n}_{crc:08x}");\n'
-          .format(n=module, crc=file_crc))
-    write('   if (mainp->msg_id_base == (u16) ~0)\n')
-    write('      return clib_error_return (0, "{} plugin not loaded...");\n'
-          .format(module))
-    write('   setup_message_id_table (vam, mainp->msg_id_base);\n')
-    write('#ifdef VL_API_LOCAL_SETUP_MESSAGE_ID_TABLE\n')
-    write('    VL_API_LOCAL_SETUP_MESSAGE_ID_TABLE(vam);\n')
-    write('#endif\n')
-    write('   return 0;\n')
-    write('}\n')
+            write(
+                "   vl_msg_api_set_handlers(VL_API_{ID} + msg_id_base, "
+                '                          "{n}",\n'
+                "                           vl_api_{n}_t_handler, "
+                "                           vl_noop_handler,\n"
+                "                           vl_api_{n}_t_endian, "
+                "                           vl_api_{n}_t_print,\n"
+                "                           sizeof(vl_api_{n}_t), 1,\n"
+                "                           vl_api_{n}_t_print_json,\n"
+                "                           vl_api_{n}_t_tojson,\n"
+                "                           vl_api_{n}_t_fromjson,\n"
+                "                           vl_api_{n}_t_calc_size);\n".format(
+                    n=e, ID=e.upper()
+                )
+            )
+
+    write("}\n")
+    write("clib_error_t * vat_plugin_register (vat_main_t *vam)\n")
+    write("{\n")
+    write("   {n}_test_main_t * mainp = &{n}_test_main;\n".format(n=module))
+    write("   mainp->vat_main = vam;\n")
+    write(
+        "   mainp->msg_id_base = vl_client_get_first_plugin_msg_id "
+        '                       ("{n}_{crc:08x}");\n'.format(n=module, crc=file_crc)
+    )
+    write("   if (mainp->msg_id_base == (u16) ~0)\n")
+    write(
+        '      return clib_error_return (0, "{} plugin not loaded...");\n'.format(
+            module
+        )
+    )
+    write("   setup_message_id_table (vam, mainp->msg_id_base);\n")
+    write("#ifdef VL_API_LOCAL_SETUP_MESSAGE_ID_TABLE\n")
+    write("    VL_API_LOCAL_SETUP_MESSAGE_ID_TABLE(vam);\n")
+    write("#endif\n")
+    write("   return 0;\n")
+    write("}\n")
 
 
 def apifunc(func):
 
 
 def apifunc(func):
-    '''Check if a method is generated already.'''
+    """Check if a method is generated already."""
+
     def _f(module, d, processed, *args):
         if d.name in processed:
             return None
         processed[d.name] = True
         return func(module, d, *args)
     def _f(module, d, processed, *args):
         if d.name in processed:
             return None
         processed[d.name] = True
         return func(module, d, *args)
+
     return _f
 
 
 def c_test_api_service(s, dump, stream):
     return _f
 
 
 def c_test_api_service(s, dump, stream):
-    '''Generate JSON code for a service.'''
+    """Generate JSON code for a service."""
     write = stream.write
 
     write = stream.write
 
-    req_reply_template = '''\
+    req_reply_template = """\
 static cJSON *
 api_{n} (cJSON *o)
 {{
 static cJSON *
 api_{n} (cJSON *o)
 {{
@@ -1664,8 +1804,8 @@ api_{n} (cJSON *o)
   return vl_api_{r}_t_tojson(rmp);
 }}
 
   return vl_api_{r}_t_tojson(rmp);
 }}
 
-'''
-    dump_details_template = '''\
+"""
+    dump_details_template = """\
 static cJSON *
 api_{n} (cJSON *o)
 {{
 static cJSON *
 api_{n} (cJSON *o)
 {{
@@ -1719,8 +1859,8 @@ api_{n} (cJSON *o)
   return reply;
 }}
 
   return reply;
 }}
 
-'''
-    gets_details_reply_template = '''\
+"""
+    gets_details_reply_template = """\
 static cJSON *
 api_{n} (cJSON *o)
 {{
 static cJSON *
 api_{n} (cJSON *o)
 {{
@@ -1769,32 +1909,42 @@ api_{n} (cJSON *o)
   return reply;
 }}
 
   return reply;
 }}
 
-'''
+"""
 
     if dump:
         if s.stream_message:
 
     if dump:
         if s.stream_message:
-            write(gets_details_reply_template
-                  .format(n=s.caller, r=s.reply, N=s.caller.upper(),
-                          R=s.reply.upper(), d=s.stream_message,
-                          D=s.stream_message.upper()))
+            write(
+                gets_details_reply_template.format(
+                    n=s.caller,
+                    r=s.reply,
+                    N=s.caller.upper(),
+                    R=s.reply.upper(),
+                    d=s.stream_message,
+                    D=s.stream_message.upper(),
+                )
+            )
         else:
         else:
-            write(dump_details_template.format(n=s.caller, r=s.reply,
-                                               N=s.caller.upper(),
-                                               R=s.reply.upper()))
+            write(
+                dump_details_template.format(
+                    n=s.caller, r=s.reply, N=s.caller.upper(), R=s.reply.upper()
+                )
+            )
     else:
     else:
-        write(req_reply_template.format(n=s.caller, r=s.reply,
-                                        N=s.caller.upper(),
-                                        R=s.reply.upper()))
+        write(
+            req_reply_template.format(
+                n=s.caller, r=s.reply, N=s.caller.upper(), R=s.reply.upper()
+            )
+        )
 
 
 def generate_c_test2_boilerplate(services, defines, module, stream):
 
 
 def generate_c_test2_boilerplate(services, defines, module, stream):
-    '''Generate code for VAT2 plugin.'''
+    """Generate code for VAT2 plugin."""
     write = stream.write
 
     define_hash = {d.name: d for d in defines}
     # replies = {}
 
     write = stream.write
 
     define_hash = {d.name: d for d in defines}
     # replies = {}
 
-    hdr = '''\
+    hdr = """\
 #include <vlibapi/api.h>
 #include <vlibmemory/api.h>
 #include <vppinfra/error.h>
 #include <vlibapi/api.h>
 #include <vlibmemory/api.h>
 #include <vppinfra/error.h>
@@ -1829,7 +1979,7 @@ def generate_c_test2_boilerplate(services, defines, module, stream):
 
 #include <vat2/vat2_helpers.h>
 
 
 #include <vat2/vat2_helpers.h>
 
-'''
+"""
 
     write(hdr.format(module=module))
 
 
     write(hdr.format(module=module))
 
@@ -1838,123 +1988,123 @@ def generate_c_test2_boilerplate(services, defines, module, stream):
             continue
         c_test_api_service(s, s.stream, stream)
 
             continue
         c_test_api_service(s, s.stream, stream)
 
-    write('void vat2_register_function(char *, cJSON * (*)(cJSON *), cJSON * (*)(void *), u32);\n')
+    write(
+        "void vat2_register_function(char *, cJSON * (*)(cJSON *), cJSON * (*)(void *), u32);\n"
+    )
     # write('__attribute__((constructor))')
     # write('__attribute__((constructor))')
-    write('clib_error_t *\n')
-    write('vat2_register_plugin (void) {\n')
+    write("clib_error_t *\n")
+    write("vat2_register_plugin (void) {\n")
     for s in services:
         if s.reply not in define_hash:
             continue
         crc = define_hash[s.caller].crc
     for s in services:
         if s.reply not in define_hash:
             continue
         crc = define_hash[s.caller].crc
-        write('   vat2_register_function("{n}", api_{n}, (cJSON * (*)(void *))vl_api_{n}_t_tojson, 0x{crc:08x});\n'
-              .format(n=s.caller, crc=crc))
-    write('   return 0;\n')
-    write('}\n')
+        write(
+            '   vat2_register_function("{n}", api_{n}, (cJSON * (*)(void *))vl_api_{n}_t_tojson, 0x{crc:08x});\n'.format(
+                n=s.caller, crc=crc
+            )
+        )
+    write("   return 0;\n")
+    write("}\n")
 
 
 #
 # Plugin entry point
 #
 def run(args, apifilename, s):
 
 
 #
 # Plugin entry point
 #
 def run(args, apifilename, s):
-    '''Main plugin entry point.'''
+    """Main plugin entry point."""
     stream = StringIO()
 
     if not args.outputdir:
     stream = StringIO()
 
     if not args.outputdir:
-        sys.stderr.write('Missing --outputdir argument')
+        sys.stderr.write("Missing --outputdir argument")
         return None
 
     basename = os.path.basename(apifilename)
     filename, _ = os.path.splitext(basename)
         return None
 
     basename = os.path.basename(apifilename)
     filename, _ = os.path.splitext(basename)
-    modulename = filename.replace('.', '_')
-    filename_enum = os.path.join(args.outputdir + '/' + basename + '_enum.h')
-    filename_types = os.path.join(args.outputdir + '/' + basename + '_types.h')
-    filename_c = os.path.join(args.outputdir + '/' + basename + '.c')
-    filename_c_test = os.path.join(args.outputdir + '/' + basename + '_test.c')
-    filename_c_test2 = (os.path.join(args.outputdir + '/' + basename +
-                                     '_test2.c'))
-    filename_c_tojson = (os.path.join(args.outputdir +
-                                      '/' + basename + '_tojson.h'))
-    filename_c_fromjson = (os.path.join(args.outputdir + '/' +
-                                        basename + '_fromjson.h'))
+    modulename = filename.replace(".", "_")
+    filename_enum = os.path.join(args.outputdir + "/" + basename + "_enum.h")
+    filename_types = os.path.join(args.outputdir + "/" + basename + "_types.h")
+    filename_c = os.path.join(args.outputdir + "/" + basename + ".c")
+    filename_c_test = os.path.join(args.outputdir + "/" + basename + "_test.c")
+    filename_c_test2 = os.path.join(args.outputdir + "/" + basename + "_test2.c")
+    filename_c_tojson = os.path.join(args.outputdir + "/" + basename + "_tojson.h")
+    filename_c_fromjson = os.path.join(args.outputdir + "/" + basename + "_fromjson.h")
 
     # Generate separate types file
     st = StringIO()
     generate_include_types(s, modulename, st)
 
     # Generate separate types file
     st = StringIO()
     generate_include_types(s, modulename, st)
-    with open(filename_types, 'w') as fd:
+    with open(filename_types, "w") as fd:
         st.seek(0)
         shutil.copyfileobj(st, fd)
     st.close()
 
     # Generate separate enum file
     st = StringIO()
         st.seek(0)
         shutil.copyfileobj(st, fd)
     st.close()
 
     # Generate separate enum file
     st = StringIO()
-    st.write('#ifndef included_{}_api_enum_h\n'.format(modulename))
-    st.write('#define included_{}_api_enum_h\n'.format(modulename))
+    st.write("#ifndef included_{}_api_enum_h\n".format(modulename))
+    st.write("#define included_{}_api_enum_h\n".format(modulename))
     generate_include_enum(s, modulename, st)
     generate_include_enum(s, modulename, st)
-    generate_include_counters(s['Counters'], st)
-    st.write('#endif\n')
-    with open(filename_enum, 'w') as fd:
+    generate_include_counters(s["Counters"], st)
+    st.write("#endif\n")
+    with open(filename_enum, "w") as fd:
         st.seek(0)
         shutil.copyfileobj(st, fd)
     st.close()
 
     # Generate separate C file
     st = StringIO()
         st.seek(0)
         shutil.copyfileobj(st, fd)
     st.close()
 
     # Generate separate C file
     st = StringIO()
-    generate_c_boilerplate(s['Service'], s['Define'], s['Counters'],
-                           s['file_crc'], modulename, st)
-    with open(filename_c, 'w') as fd:
+    generate_c_boilerplate(
+        s["Service"], s["Define"], s["Counters"], s["file_crc"], modulename, st
+    )
+    with open(filename_c, "w") as fd:
         st.seek(0)
         shutil.copyfileobj(st, fd)
     st.close()
 
     # Generate separate C test file
     st = StringIO()
         st.seek(0)
         shutil.copyfileobj(st, fd)
     st.close()
 
     # Generate separate C test file
     st = StringIO()
-    plugin = bool('plugin' in apifilename)
-    generate_c_test_boilerplate(s['Service'], s['Define'],
-                                s['file_crc'],
-                                modulename, plugin, st)
-    with open(filename_c_test, 'w') as fd:
+    plugin = bool("plugin" in apifilename)
+    generate_c_test_boilerplate(
+        s["Service"], s["Define"], s["file_crc"], modulename, plugin, st
+    )
+    with open(filename_c_test, "w") as fd:
         st.seek(0)
         shutil.copyfileobj(st, fd)
     st.close()
 
     # Fully autogenerated VATv2 C test file
     st = StringIO()
         st.seek(0)
         shutil.copyfileobj(st, fd)
     st.close()
 
     # Fully autogenerated VATv2 C test file
     st = StringIO()
-    generate_c_test2_boilerplate(s['Service'], s['Define'],
-                                 modulename, st)
-    with open(filename_c_test2, 'w') as fd:
+    generate_c_test2_boilerplate(s["Service"], s["Define"], modulename, st)
+    with open(filename_c_test2, "w") as fd:
         st.seek(0)
         shutil.copyfileobj(st, fd)
         st.seek(0)
         shutil.copyfileobj(st, fd)
-    st.close()                  #
+    st.close()  #
 
     # Generate separate JSON file
     st = StringIO()
     generate_tojson(s, modulename, st)
 
     # Generate separate JSON file
     st = StringIO()
     generate_tojson(s, modulename, st)
-    with open(filename_c_tojson, 'w') as fd:
+    with open(filename_c_tojson, "w") as fd:
         st.seek(0)
         shutil.copyfileobj(st, fd)
     st.close()
     st = StringIO()
     generate_fromjson(s, modulename, st)
         st.seek(0)
         shutil.copyfileobj(st, fd)
     st.close()
     st = StringIO()
     generate_fromjson(s, modulename, st)
-    with open(filename_c_fromjson, 'w') as fd:
+    with open(filename_c_fromjson, "w") as fd:
         st.seek(0)
         shutil.copyfileobj(st, fd)
     st.close()
 
         st.seek(0)
         shutil.copyfileobj(st, fd)
     st.close()
 
-    output = TOP_BOILERPLATE.format(datestring=DATESTRING,
-                                    input_filename=basename)
-    output += generate_imports(s['Import'])
+    output = TOP_BOILERPLATE.format(datestring=DATESTRING, input_filename=basename)
+    output += generate_imports(s["Import"])
     output += msg_ids(s)
     output += msg_names(s)
     output += msg_name_crc_list(s, filename)
     output += typedefs(modulename)
     output += msg_ids(s)
     output += msg_names(s)
     output += msg_name_crc_list(s, filename)
     output += typedefs(modulename)
-    printfun_types(s['types'], stream, modulename)
-    printfun(s['Define'], stream, modulename)
+    printfun_types(s["types"], stream, modulename)
+    printfun(s["Define"], stream, modulename)
     output += stream.getvalue()
     stream.close()
     output += stream.getvalue()
     stream.close()
-    output += endianfun(s['types'] + s['Define'], modulename)
-    output += calc_size_fun(s['types'] + s['Define'], modulename)
+    output += endianfun(s["types"] + s["Define"], modulename)
+    output += calc_size_fun(s["types"] + s["Define"], modulename)
     output += version_tuple(s, basename)
     output += version_tuple(s, basename)
-    output += BOTTOM_BOILERPLATE.format(input_filename=basename,
-                                        file_crc=s['file_crc'])
+    output += BOTTOM_BOILERPLATE.format(input_filename=basename, file_crc=s["file_crc"])
 
     return output
 
     return output
index 791e347..525f6c0 100644 (file)
@@ -12,11 +12,10 @@ def run(args, input_filename, s):
     major = 0
     minor = 0
     patch = 0
     major = 0
     minor = 0
     patch = 0
-    if 'version' in s['Option']:
-        v = s['Option']['version']
-        (major, minor, patch) = v.split('.')
-    j['_version'] = {'major': major, 'minor': minor, 'patch': patch}
-    for t in s['Define']:
-        j[t.name] = {'crc': f'{t.crc:#08x}', 'version': major,
-                     'options': t.options}
-    return json.dumps(j, indent=4, separators=(',', ': '))
+    if "version" in s["Option"]:
+        v = s["Option"]["version"]
+        (major, minor, patch) = v.split(".")
+    j["_version"] = {"major": major, "minor": minor, "patch": patch}
+    for t in s["Define"]:
+        j[t.name] = {"crc": f"{t.crc:#08x}", "version": major, "options": t.options}
+    return json.dumps(j, indent=4, separators=(",", ": "))
index 5fa839f..695b8cc 100644 (file)
@@ -14,7 +14,7 @@ def walk_imports(s):
 def walk_counters(s, pathset):
     r = []
     for e in s:
 def walk_counters(s, pathset):
     r = []
     for e in s:
-        r2 = {'name': e.name, 'elements': e.block}
+        r2 = {"name": e.name, "elements": e.block}
         r.append(r2)
 
     r3 = []
         r.append(r2)
 
     r3 = []
@@ -31,7 +31,7 @@ def walk_enums(s):
         d.append(e.name)
         for b in e.block:
             d.append(b)
         d.append(e.name)
         for b in e.block:
             d.append(b)
-        d.append({'enumtype': e.enumtype})
+        d.append({"enumtype": e.enumtype})
         r.append(d)
     return r
 
         r.append(d)
     return r
 
@@ -39,13 +39,13 @@ def walk_enums(s):
 def walk_services(s):
     r = {}
     for e in s:
 def walk_services(s):
     r = {}
     for e in s:
-        d = {'reply': e.reply}
+        d = {"reply": e.reply}
         if e.stream:
         if e.stream:
-            d['stream'] = True
+            d["stream"] = True
         if e.stream_message:
         if e.stream_message:
-            d['stream_msg'] = e.stream_message
+            d["stream_msg"] = e.stream_message
         if e.events:
         if e.events:
-            d['events'] = e.events
+            d["events"] = e.events
         r[e.caller] = d
     return r
 
         r[e.caller] = d
     return r
 
@@ -56,28 +56,27 @@ def walk_defs(s, is_message=False):
         d = []
         d.append(t.name)
         for b in t.block:
         d = []
         d.append(t.name)
         for b in t.block:
-            if b.type == 'Option':
+            if b.type == "Option":
                 continue
                 continue
-            if b.type == 'Field':
+            if b.type == "Field":
                 if b.limit:
                     d.append([b.fieldtype, b.fieldname, b.limit])
                 else:
                     d.append([b.fieldtype, b.fieldname])
                 if b.limit:
                     d.append([b.fieldtype, b.fieldname, b.limit])
                 else:
                     d.append([b.fieldtype, b.fieldname])
-            elif b.type == 'Array':
+            elif b.type == "Array":
                 if b.lengthfield:
                 if b.lengthfield:
-                    d.append([b.fieldtype, b.fieldname,
-                              b.length, b.lengthfield])
+                    d.append([b.fieldtype, b.fieldname, b.length, b.lengthfield])
                 else:
                     d.append([b.fieldtype, b.fieldname, b.length])
                 else:
                     d.append([b.fieldtype, b.fieldname, b.length])
-            elif b.type == 'Union':
+            elif b.type == "Union":
                 pass
             else:
                 raise ValueError("Error in processing array type %s" % b)
 
         if is_message and t.crc:
             c = {}
                 pass
             else:
                 raise ValueError("Error in processing array type %s" % b)
 
         if is_message and t.crc:
             c = {}
-            c['crc'] = "{0:#0{1}x}".format(t.crc, 10)
-            c['options'] = t.options
+            c["crc"] = "{0:#0{1}x}".format(t.crc, 10)
+            c["options"] = t.options
             d.append(c)
 
         r.append(d)
             d.append(c)
 
         r.append(d)
@@ -90,19 +89,19 @@ def walk_defs(s, is_message=False):
 def run(args, filename, s):
     j = {}
 
 def run(args, filename, s):
     j = {}
 
-    j['types'] = (walk_defs([o for o in s['types']
-                             if o.__class__.__name__ == 'Typedef']))
-    j['messages'] = walk_defs(s['Define'], True)
-    j['unions'] = (walk_defs([o for o in s['types']
-                              if o.__class__.__name__ == 'Union']))
-    j['enums'] = (walk_enums([o for o in s['types']
-                              if o.__class__.__name__ == 'Enum']))
-    j['enumflags'] = (walk_enums([o for o in s['types']
-                                  if o.__class__.__name__ == 'EnumFlag']))
-    j['services'] = walk_services(s['Service'])
-    j['options'] = s['Option']
-    j['aliases'] = {o.name:o.alias for o in s['types'] if o.__class__.__name__ == 'Using'}
-    j['vl_api_version'] = hex(s['file_crc'])
-    j['imports'] = walk_imports(i for i in s['Import'])
-    j['counters'], j['paths'] = walk_counters(s['Counters'], s['Paths'])
-    return json.dumps(j, indent=4, separators=(',', ': '))
+    j["types"] = walk_defs([o for o in s["types"] if o.__class__.__name__ == "Typedef"])
+    j["messages"] = walk_defs(s["Define"], True)
+    j["unions"] = walk_defs([o for o in s["types"] if o.__class__.__name__ == "Union"])
+    j["enums"] = walk_enums([o for o in s["types"] if o.__class__.__name__ == "Enum"])
+    j["enumflags"] = walk_enums(
+        [o for o in s["types"] if o.__class__.__name__ == "EnumFlag"]
+    )
+    j["services"] = walk_services(s["Service"])
+    j["options"] = s["Option"]
+    j["aliases"] = {
+        o.name: o.alias for o in s["types"] if o.__class__.__name__ == "Using"
+    }
+    j["vl_api_version"] = hex(s["file_crc"])
+    j["imports"] = walk_imports(i for i in s["Import"])
+    j["counters"], j["paths"] = walk_counters(s["Counters"], s["Paths"])
+    return json.dumps(j, indent=4, separators=(",", ": "))
index 8bf6def..18637ba 100644 (file)
@@ -21,15 +21,16 @@ except ImportError:
 requirements = []
 
 setup(
 requirements = []
 
 setup(
-    name='vpp_papi',
-    version='2.0.0',
-    description='VPP Python binding',
-    author='Ole Troan',
-    author_email='ot@cisco.com',
-    url='https://wiki.fd.io/view/VPP/Python_API',
-    license='Apache-2.0',
-    test_suite='vpp_papi.tests',
+    name="vpp_papi",
+    version="2.0.0",
+    description="VPP Python binding",
+    author="Ole Troan",
+    author_email="ot@cisco.com",
+    url="https://wiki.fd.io/view/VPP/Python_API",
+    license="Apache-2.0",
+    test_suite="vpp_papi.tests",
     install_requires=requirements,
     packages=find_packages(),
     install_requires=requirements,
     packages=find_packages(),
-    long_description='''VPP Python language binding.''',
-    zip_safe=True)
+    long_description="""VPP Python language binding.""",
+    zip_safe=True,
+)
index b2b4fc7..f87b648 100644 (file)
@@ -3,7 +3,7 @@ from .vpp_papi import VppEnum, VppEnumType, VppEnumFlag  # noqa: F401
 from .vpp_papi import VPPIOError, VPPRuntimeError, VPPValueError  # noqa: F401
 from .vpp_papi import VPPApiClient  # noqa: F401
 from .vpp_papi import VPPApiJSONFiles  # noqa: F401
 from .vpp_papi import VPPIOError, VPPRuntimeError, VPPValueError  # noqa: F401
 from .vpp_papi import VPPApiClient  # noqa: F401
 from .vpp_papi import VPPApiJSONFiles  # noqa: F401
-from . macaddress import MACAddress, mac_pton, mac_ntop  # noqa: F401
+from .macaddress import MACAddress, mac_pton, mac_ntop  # noqa: F401
 
 # sorted lexicographically
 from .vpp_serializer import BaseTypes  # noqa: F401
 
 # sorted lexicographically
 from .vpp_serializer import BaseTypes  # noqa: F401
@@ -11,6 +11,7 @@ from .vpp_serializer import VPPEnumType, VPPType, VPPTypeAlias  # noqa: F401
 from .vpp_serializer import VPPMessage, VPPUnionType  # noqa: F401
 
 import pkg_resources  # part of setuptools
 from .vpp_serializer import VPPMessage, VPPUnionType  # noqa: F401
 
 import pkg_resources  # part of setuptools
+
 try:
     __version__ = pkg_resources.get_distribution("vpp_papi").version
 except (pkg_resources.DistributionNotFound):
 try:
     __version__ = pkg_resources.get_distribution("vpp_papi").version
 except (pkg_resources.DistributionNotFound):
index c3b10a3..8799bd7 100644 (file)
@@ -18,20 +18,19 @@ import binascii
 
 
 def mac_pton(s):
 
 
 def mac_pton(s):
-    '''Convert MAC address as text to binary'''
-    return binascii.unhexlify(s.replace(':', ''))
+    """Convert MAC address as text to binary"""
+    return binascii.unhexlify(s.replace(":", ""))
 
 
 def mac_ntop(binary):
 
 
 def mac_ntop(binary):
-    '''Convert MAC address as binary to text'''
-    x = b':'.join(binascii.hexlify(binary)[i:i + 2]
-                  for i in range(0, 12, 2))
-    return str(x.decode('ascii'))
+    """Convert MAC address as binary to text"""
+    x = b":".join(binascii.hexlify(binary)[i : i + 2] for i in range(0, 12, 2))
+    return str(x.decode("ascii"))
 
 
 
 
-class MACAddress():
+class MACAddress:
     def __init__(self, mac):
     def __init__(self, mac):
-        '''MAC Address as a text-string (aa:bb:cc:dd:ee:ff) or 6 bytes'''
+        """MAC Address as a text-string (aa:bb:cc:dd:ee:ff) or 6 bytes"""
         # Of course Python 2 doesn't distinguish str from bytes
         if type(mac) is bytes and len(mac) == 6:
             self.mac_binary = mac
         # Of course Python 2 doesn't distinguish str from bytes
         if type(mac) is bytes and len(mac) == 6:
             self.mac_binary = mac
@@ -51,7 +50,7 @@ class MACAddress():
         return self.mac_string
 
     def __repr__(self):
         return self.mac_string
 
     def __repr__(self):
-        return '%s(%s)' % (self.__class__.__name__, self.mac_string)
+        return "%s(%s)" % (self.__class__.__name__, self.mac_string)
 
     def __eq__(self, other):
 
 
     def __eq__(self, other):
 
index 08e365a..e86ec75 100644 (file)
@@ -3,8 +3,6 @@ from vpp_papi import MACAddress
 
 
 class TestMacAddress(unittest.TestCase):
 
 
 class TestMacAddress(unittest.TestCase):
-
     def test_eq(self):
     def test_eq(self):
-        mac = '11:22:33:44:55:66'
-        self.assertEqual(MACAddress(mac),
-                         MACAddress(mac))
+        mac = "11:22:33:44:55:66"
+        self.assertEqual(MACAddress(mac), MACAddress(mac))
index 5c179c0..ae4d2c5 100644 (file)
@@ -25,57 +25,64 @@ from vpp_papi import vpp_format
 
 from parameterized import parameterized
 
 
 from parameterized import parameterized
 
-ip4_addr = '1.2.3.4'
-ip4_addrn = b'\x01\x02\x03\x04'
+ip4_addr = "1.2.3.4"
+ip4_addrn = b"\x01\x02\x03\x04"
 ip4_prefix_len = 32
 ip4_prefix_len = 32
-ip4_prefix = '%s/%s' % (ip4_addr, ip4_prefix_len)
+ip4_prefix = "%s/%s" % (ip4_addr, ip4_prefix_len)
 ipv4_network = ipaddress.IPv4Network(text_type(ip4_prefix))
 ipv4_network = ipaddress.IPv4Network(text_type(ip4_prefix))
-ip4_addr_format_vl_api_address_t = {'un': {'ip4': b'\x01\x02\x03\x04'},
-                                    'af': 0}
-ip4_addr_format_vl_api_prefix_t = {'address':                                # noqa: E127,E501
-                                       {'un': {'ip4': b'\x01\x02\x03\x04'},
-                                        'af': 0},
-                                   'len': ip4_prefix_len}
-ip4_addr_format_vl_api_prefix_packed_t = {'address': b'\x01\x02\x03\x04',
-                                          'len': ip4_prefix_len}
-
-ip6_addr = 'dead::'
-ip6_addrn = b'\xde\xad\x00\x00\x00\x00\x00\x00' \
-            b'\x00\x00\x00\x00\x00\x00\x00\x00'
+ip4_addr_format_vl_api_address_t = {"un": {"ip4": b"\x01\x02\x03\x04"}, "af": 0}
+ip4_addr_format_vl_api_prefix_t = {
+    "address": {"un": {"ip4": b"\x01\x02\x03\x04"}, "af": 0},  # noqa: E127,E501
+    "len": ip4_prefix_len,
+}
+ip4_addr_format_vl_api_prefix_packed_t = {
+    "address": b"\x01\x02\x03\x04",
+    "len": ip4_prefix_len,
+}
+
+ip6_addr = "dead::"
+ip6_addrn = b"\xde\xad\x00\x00\x00\x00\x00\x00" b"\x00\x00\x00\x00\x00\x00\x00\x00"
 ip6_prefix_len = 127
 ip6_prefix_len = 127
-ip6_prefix = '%s/%s' % (ip6_addr, ip6_prefix_len)
+ip6_prefix = "%s/%s" % (ip6_addr, ip6_prefix_len)
 ipv6_network = ipaddress.IPv6Network(text_type(ip6_prefix))
 ipv6_network = ipaddress.IPv6Network(text_type(ip6_prefix))
-ip6_addr_format_vl_api_address_t = {'un': {'ip6': b'\xde\xad\x00\x00'
-                                                  b'\x00\x00\x00\x00'
-                                                  b'\x00\x00\x00\x00'
-                                                  b'\x00\x00\x00\x00'},
-                                    'af': 1}
-ip6_addr_format_vl_api_prefix_t = {'address':       # noqa: E127
-                                       {'af': 1,
-                                        'un': {
-                                            'ip6': b'\xde\xad\x00\x00'
-                                                   b'\x00\x00\x00\x00'
-                                                   b'\x00\x00\x00\x00'
-                                                   b'\x00\x00\x00\x00'}},
-                                   'len': ip6_prefix_len}
-ip6_addr_format_vl_api_prefix_packed_t = {'address': b'\xde\xad\x00\x00'   # noqa: E127,E501
-                                                     b'\x00\x00\x00\x00'
-                                                     b'\x00\x00\x00\x00'
-                                                     b'\x00\x00\x00\x00',
-                                          'len': ip6_prefix_len}
+ip6_addr_format_vl_api_address_t = {
+    "un": {
+        "ip6": b"\xde\xad\x00\x00"
+        b"\x00\x00\x00\x00"
+        b"\x00\x00\x00\x00"
+        b"\x00\x00\x00\x00"
+    },
+    "af": 1,
+}
+ip6_addr_format_vl_api_prefix_t = {
+    "address": {  # noqa: E127
+        "af": 1,
+        "un": {
+            "ip6": b"\xde\xad\x00\x00"
+            b"\x00\x00\x00\x00"
+            b"\x00\x00\x00\x00"
+            b"\x00\x00\x00\x00"
+        },
+    },
+    "len": ip6_prefix_len,
+}
+ip6_addr_format_vl_api_prefix_packed_t = {
+    "address": b"\xde\xad\x00\x00"  # noqa: E127,E501
+    b"\x00\x00\x00\x00"
+    b"\x00\x00\x00\x00"
+    b"\x00\x00\x00\x00",
+    "len": ip6_prefix_len,
+}
 
 
 class TestVppFormat(unittest.TestCase):
 
 
 class TestVppFormat(unittest.TestCase):
-
     def test_format_vl_api_address_t(self):
         res = vpp_format.format_vl_api_address_t(ip4_addr)
         self.assertEqual(res, ip4_addr_format_vl_api_address_t)
 
         # PY2: raises socket.error
         # PY3: raises OSError
     def test_format_vl_api_address_t(self):
         res = vpp_format.format_vl_api_address_t(ip4_addr)
         self.assertEqual(res, ip4_addr_format_vl_api_address_t)
 
         # PY2: raises socket.error
         # PY3: raises OSError
-        with self.assertRaises((TypeError,
-                                socket.error,
-                                OSError)):
+        with self.assertRaises((TypeError, socket.error, OSError)):
             res = vpp_format.format_vl_api_address_t(ip4_addrn)
 
         res = vpp_format.format_vl_api_address_t(ip6_addr)
             res = vpp_format.format_vl_api_address_t(ip4_addrn)
 
         res = vpp_format.format_vl_api_address_t(ip6_addr)
@@ -84,19 +91,14 @@ class TestVppFormat(unittest.TestCase):
         with self.assertRaises(TypeError):
             es = vpp_format.format_vl_api_address_t(ip6_addrn)
 
         with self.assertRaises(TypeError):
             es = vpp_format.format_vl_api_address_t(ip6_addrn)
 
-    @parameterized.expand([('ip4 prefix',
-                            ip4_prefix,
-                            ip4_addr_format_vl_api_prefix_t),
-                           ('ip6 prefix',
-                            ip6_prefix,
-                            ip6_addr_format_vl_api_prefix_t),
-                           ('IPv4Network',
-                            ipv4_network,
-                            ip4_addr_format_vl_api_prefix_t),
-                           ('IPv6Network',
-                            ipv6_network,
-                            ip6_addr_format_vl_api_prefix_t),
-                           ])
+    @parameterized.expand(
+        [
+            ("ip4 prefix", ip4_prefix, ip4_addr_format_vl_api_prefix_t),
+            ("ip6 prefix", ip6_prefix, ip6_addr_format_vl_api_prefix_t),
+            ("IPv4Network", ipv4_network, ip4_addr_format_vl_api_prefix_t),
+            ("IPv6Network", ipv6_network, ip6_addr_format_vl_api_prefix_t),
+        ]
+    )
     def test_format_vl_api_prefix_t(self, _, arg, expected):
         res = vpp_format.format_vl_api_prefix_t(arg)
         self.assertEqual(res, expected)
     def test_format_vl_api_prefix_t(self, _, arg, expected):
         res = vpp_format.format_vl_api_prefix_t(arg)
         self.assertEqual(res, expected)
index 99acb7c..2b21c83 100644 (file)
@@ -24,7 +24,7 @@ from vpp_papi import vpp_transport_shmem
 
 class TestVppPapiVPPApiClient(unittest.TestCase):
     def test_getcontext(self):
 
 class TestVppPapiVPPApiClient(unittest.TestCase):
     def test_getcontext(self):
-        vpp_papi.VPPApiClient.apidir = '.'
+        vpp_papi.VPPApiClient.apidir = "."
         c = vpp_papi.VPPApiClient(testmode=True, use_socket=True)
 
         # reset initialization at module load time.
         c = vpp_papi.VPPApiClient(testmode=True, use_socket=True)
 
         # reset initialization at module load time.
@@ -39,7 +39,7 @@ class TestVppPapiVPPApiClientMp(unittest.TestCase):
     # run_tests.py (eg. make test TEST_JOBS=10)
 
     def test_get_context_mp(self):
     # run_tests.py (eg. make test TEST_JOBS=10)
 
     def test_get_context_mp(self):
-        vpp_papi.VPPApiClient.apidir = '.'
+        vpp_papi.VPPApiClient.apidir = "."
         c = vpp_papi.VPPApiClient(testmode=True, use_socket=True)
 
         # reset initialization at module load time.
         c = vpp_papi.VPPApiClient(testmode=True, use_socket=True)
 
         # reset initialization at module load time.
@@ -243,11 +243,11 @@ class TestVppPapiLogging(unittest.TestCase):
                 pass
 
         client = Vpp
                 pass
 
         client = Vpp
-        with self.assertLogs('vpp_papi', level='DEBUG') as cm:
+        with self.assertLogs("vpp_papi", level="DEBUG") as cm:
             vpp_papi.vpp_atexit(client)
             vpp_papi.vpp_atexit(client)
-        self.assertEqual(cm.output, ['DEBUG:vpp_papi:Cleaning up VPP on exit'])
+        self.assertEqual(cm.output, ["DEBUG:vpp_papi:Cleaning up VPP on exit"])
 
         with self.assertRaises(AssertionError):
 
         with self.assertRaises(AssertionError):
-            with self.assertLogs('vpp_papi.serializer', level='DEBUG') as cm:
+            with self.assertLogs("vpp_papi.serializer", level="DEBUG") as cm:
                 vpp_papi.vpp_atexit(client)
         self.assertEqual(cm.output, [])
                 vpp_papi.vpp_atexit(client)
         self.assertEqual(cm.output, [])
index c9b3d67..eee38f0 100755 (executable)
@@ -13,61 +13,57 @@ from ipaddress import *
 
 class TestLimits(unittest.TestCase):
     def test_string(self):
 
 class TestLimits(unittest.TestCase):
     def test_string(self):
-        fixed_string = VPPType('fixed_string',
-                               [['string', 'name', 16]])
+        fixed_string = VPPType("fixed_string", [["string", "name", 16]])
 
 
-        b = fixed_string.pack({'name': 'foobar'})
+        b = fixed_string.pack({"name": "foobar"})
         self.assertEqual(len(b), 16)
 
         # Ensure string is nul terminated
         self.assertEqual(len(b), 16)
 
         # Ensure string is nul terminated
-        self.assertEqual(b.decode('ascii')[6], '\x00')
+        self.assertEqual(b.decode("ascii")[6], "\x00")
 
         nt, size = fixed_string.unpack(b)
         self.assertEqual(size, 16)
 
         nt, size = fixed_string.unpack(b)
         self.assertEqual(size, 16)
-        self.assertEqual(nt.name, 'foobar')
+        self.assertEqual(nt.name, "foobar")
 
         # Empty string
 
         # Empty string
-        b = fixed_string.pack({'name': ''})
+        b = fixed_string.pack({"name": ""})
         self.assertEqual(len(b), 16)
         nt, size = fixed_string.unpack(b)
         self.assertEqual(size, 16)
         self.assertEqual(len(b), 16)
         nt, size = fixed_string.unpack(b)
         self.assertEqual(size, 16)
-        self.assertEqual(nt.name, '')
+        self.assertEqual(nt.name, "")
 
         # String too long
         with self.assertRaises(VPPSerializerValueError):
 
         # String too long
         with self.assertRaises(VPPSerializerValueError):
-            b = fixed_string.pack({'name': 'foobarfoobar1234'})
+            b = fixed_string.pack({"name": "foobarfoobar1234"})
 
 
-        variable_string = VPPType('variable_string',
-                                  [['string', 'name', 0]])
-        b = variable_string.pack({'name': 'foobar'})
-        self.assertEqual(len(b), 4 + len('foobar'))
+        variable_string = VPPType("variable_string", [["string", "name", 0]])
+        b = variable_string.pack({"name": "foobar"})
+        self.assertEqual(len(b), 4 + len("foobar"))
 
         nt, size = variable_string.unpack(b)
 
         nt, size = variable_string.unpack(b)
-        self.assertEqual(size, 4 + len('foobar'))
-        self.assertEqual(nt.name, 'foobar')
-        self.assertEqual(len(nt.name), len('foobar'))
+        self.assertEqual(size, 4 + len("foobar"))
+        self.assertEqual(nt.name, "foobar")
+        self.assertEqual(len(nt.name), len("foobar"))
 
     def test_limit(self):
 
     def test_limit(self):
-        limited_type = VPPType('limited_type_t',
-                               [['string', 'name', 0, {'limit': 16}]])
-        unlimited_type = VPPType('limited_type_t',
-                                 [['string', 'name', 0]])
+        limited_type = VPPType("limited_type_t", [["string", "name", 0, {"limit": 16}]])
+        unlimited_type = VPPType("limited_type_t", [["string", "name", 0]])
 
 
-        b = limited_type.pack({'name': 'foobar'})
+        b = limited_type.pack({"name": "foobar"})
         self.assertEqual(len(b), 10)
         self.assertEqual(len(b), 10)
-        b = unlimited_type.pack({'name': 'foobar'})
+        b = unlimited_type.pack({"name": "foobar"})
         self.assertEqual(len(b), 10)
 
         with self.assertRaises(VPPSerializerValueError):
         self.assertEqual(len(b), 10)
 
         with self.assertRaises(VPPSerializerValueError):
-            b = limited_type.pack({'name': 'foobar'*3})
+            b = limited_type.pack({"name": "foobar" * 3})
 
 
 class TestDefaults(unittest.TestCase):
     def test_defaults(self):
 
 
 class TestDefaults(unittest.TestCase):
     def test_defaults(self):
-        default_type = VPPType('default_type_t',
-                               [['u16', 'mtu', {'default': 1500, 'limit': 0}]])
-        without_default_type = VPPType('without_default_type_t',
-                                       [['u16', 'mtu']])
+        default_type = VPPType(
+            "default_type_t", [["u16", "mtu", {"default": 1500, "limit": 0}]]
+        )
+        without_default_type = VPPType("without_default_type_t", [["u16", "mtu"]])
 
         b = default_type.pack({})
         self.assertEqual(len(b), 2)
 
         b = default_type.pack({})
         self.assertEqual(len(b), 2)
@@ -76,7 +72,7 @@ class TestDefaults(unittest.TestCase):
         self.assertEqual(nt.mtu, 1500)
 
         # distinguish between parameter 0 and parameter not passed
         self.assertEqual(nt.mtu, 1500)
 
         # distinguish between parameter 0 and parameter not passed
-        b = default_type.pack({'mtu': 0})
+        b = default_type.pack({"mtu": 0})
         self.assertEqual(len(b), 2)
         nt, size = default_type.unpack(b)
         self.assertEqual(len(b), size)
         self.assertEqual(len(b), 2)
         nt, size = default_type.unpack(b)
         self.assertEqual(len(b), size)
@@ -90,13 +86,15 @@ class TestDefaults(unittest.TestCase):
         self.assertEqual(nt.mtu, 0)
 
         # default enum type
         self.assertEqual(nt.mtu, 0)
 
         # default enum type
-        VPPEnumType('vl_api_enum_t', [["ADDRESS_IP4", 0],
-                                      ["ADDRESS_IP6", 1],
-                                      {"enumtype": "u32"}])
+        VPPEnumType(
+            "vl_api_enum_t",
+            [["ADDRESS_IP4", 0], ["ADDRESS_IP6", 1], {"enumtype": "u32"}],
+        )
 
 
-        default_with_enum = VPPType('default_enum_type_t',
-                                    [['u16', 'mtu'], ['vl_api_enum_t',
-                                                      'e', {'default': 1}]])
+        default_with_enum = VPPType(
+            "default_enum_type_t",
+            [["u16", "mtu"], ["vl_api_enum_t", "e", {"default": 1}]],
+        )
 
         b = default_with_enum.pack({})
         self.assertEqual(len(b), 6)
 
         b = default_with_enum.pack({})
         self.assertEqual(len(b), 6)
@@ -106,275 +104,275 @@ class TestDefaults(unittest.TestCase):
 
 
 class TestAddType(unittest.TestCase):
 
 
 class TestAddType(unittest.TestCase):
-
     def test_union(self):
     def test_union(self):
-        un = VPPUnionType('test_union',
-                          [['u8', 'is_bool'],
-                           ['u32', 'is_int']])
+        un = VPPUnionType("test_union", [["u8", "is_bool"], ["u32", "is_int"]])
 
 
-        b = un.pack({'is_int': 0x12345678})
+        b = un.pack({"is_int": 0x12345678})
         nt, size = un.unpack(b)
         self.assertEqual(len(b), size)
         self.assertEqual(nt.is_bool, 0x12)
         self.assertEqual(nt.is_int, 0x12345678)
 
     def test_address(self):
         nt, size = un.unpack(b)
         self.assertEqual(len(b), size)
         self.assertEqual(nt.is_bool, 0x12)
         self.assertEqual(nt.is_int, 0x12345678)
 
     def test_address(self):
-        af = VPPEnumType('vl_api_address_family_t', [["ADDRESS_IP4", 0],
-                                                     ["ADDRESS_IP6", 1],
-                                                     {"enumtype": "u32"}])
-        aff = VPPEnumFlagType('vl_api_address_family_flag_t', [["ADDRESS_IP4", 0],
-                                                               ["ADDRESS_IP6", 1],
-                                                               {"enumtype": "u32"}])
-        ip4 = VPPTypeAlias('vl_api_ip4_address_t', {'type': 'u8',
-                                                    'length': 4})
-        ip6 = VPPTypeAlias('vl_api_ip6_address_t', {'type': 'u8',
-                                                    'length': 16})
-        VPPUnionType('vl_api_address_union_t',
-                     [["vl_api_ip4_address_t", "ip4"],
-                      ["vl_api_ip6_address_t", "ip6"]])
-
-        address = VPPType('vl_api_address_t',
-                          [['vl_api_address_family_t', 'af'],
-                           ['vl_api_address_union_t', 'un']])
-
-        prefix = VPPType('vl_api_prefix_t',
-                         [['vl_api_address_t', 'address'],
-                          ['u8', 'len']])
-
-        va_address_list = VPPType('list_addresses',
-                                  [['u8', 'count'],
-                                   ['vl_api_address_t', 'addresses',
-                                    0, 'count']])
-
-        message_with_va_address_list = VPPType('msg_with_vla',
-                                               [['list_addresses',
-                                                 'vla_address'],
-                                                ['u8', 'is_cool']])
-
-        b = ip4.pack(inet_pton(AF_INET, '1.1.1.1'))
+        af = VPPEnumType(
+            "vl_api_address_family_t",
+            [["ADDRESS_IP4", 0], ["ADDRESS_IP6", 1], {"enumtype": "u32"}],
+        )
+        aff = VPPEnumFlagType(
+            "vl_api_address_family_flag_t",
+            [["ADDRESS_IP4", 0], ["ADDRESS_IP6", 1], {"enumtype": "u32"}],
+        )
+        ip4 = VPPTypeAlias("vl_api_ip4_address_t", {"type": "u8", "length": 4})
+        ip6 = VPPTypeAlias("vl_api_ip6_address_t", {"type": "u8", "length": 16})
+        VPPUnionType(
+            "vl_api_address_union_t",
+            [["vl_api_ip4_address_t", "ip4"], ["vl_api_ip6_address_t", "ip6"]],
+        )
+
+        address = VPPType(
+            "vl_api_address_t",
+            [["vl_api_address_family_t", "af"], ["vl_api_address_union_t", "un"]],
+        )
+
+        prefix = VPPType(
+            "vl_api_prefix_t", [["vl_api_address_t", "address"], ["u8", "len"]]
+        )
+
+        va_address_list = VPPType(
+            "list_addresses",
+            [["u8", "count"], ["vl_api_address_t", "addresses", 0, "count"]],
+        )
+
+        message_with_va_address_list = VPPType(
+            "msg_with_vla", [["list_addresses", "vla_address"], ["u8", "is_cool"]]
+        )
+
+        b = ip4.pack(inet_pton(AF_INET, "1.1.1.1"))
         self.assertEqual(len(b), 4)
         nt, size = ip4.unpack(b)
         self.assertEqual(len(b), 4)
         nt, size = ip4.unpack(b)
-        self.assertEqual(str(nt), '1.1.1.1')
+        self.assertEqual(str(nt), "1.1.1.1")
 
 
-        b = ip6.pack(inet_pton(AF_INET6, '1::1'))
+        b = ip6.pack(inet_pton(AF_INET6, "1::1"))
         self.assertEqual(len(b), 16)
 
         self.assertEqual(len(b), 16)
 
-        b = address.pack({'af': af.ADDRESS_IP4,
-                          'un':
-                          {'ip4': inet_pton(AF_INET, '2.2.2.2')}})
+        b = address.pack(
+            {"af": af.ADDRESS_IP4, "un": {"ip4": inet_pton(AF_INET, "2.2.2.2")}}
+        )
         self.assertEqual(len(b), 20)
 
         nt, size = address.unpack(b)
         self.assertEqual(len(b), 20)
 
         nt, size = address.unpack(b)
-        self.assertEqual(str(nt), '2.2.2.2')
+        self.assertEqual(str(nt), "2.2.2.2")
 
         # List of addresses
         address_list = []
         for i in range(4):
 
         # List of addresses
         address_list = []
         for i in range(4):
-            address_list.append({'af': af.ADDRESS_IP4,
-                                 'un':
-                                 {'ip4': inet_pton(AF_INET, '2.2.2.2')}})
-        b = va_address_list.pack({'count': len(address_list),
-                                  'addresses': address_list})
+            address_list.append(
+                {"af": af.ADDRESS_IP4, "un": {"ip4": inet_pton(AF_INET, "2.2.2.2")}}
+            )
+        b = va_address_list.pack(
+            {"count": len(address_list), "addresses": address_list}
+        )
         self.assertEqual(len(b), 81)
 
         nt, size = va_address_list.unpack(b)
         self.assertEqual(len(b), 81)
 
         nt, size = va_address_list.unpack(b)
-        self.assertEqual(str(nt.addresses[0]), '2.2.2.2')
-
-        b = message_with_va_address_list.pack({'vla_address':
-                                               {'count': len(address_list),
-                                                'addresses': address_list},
-                                               'is_cool': 100})
+        self.assertEqual(str(nt.addresses[0]), "2.2.2.2")
+
+        b = message_with_va_address_list.pack(
+            {
+                "vla_address": {"count": len(address_list), "addresses": address_list},
+                "is_cool": 100,
+            }
+        )
         self.assertEqual(len(b), 82)
         nt, size = message_with_va_address_list.unpack(b)
         self.assertEqual(nt.is_cool, 100)
 
     def test_address_with_prefix(self):
         self.assertEqual(len(b), 82)
         nt, size = message_with_va_address_list.unpack(b)
         self.assertEqual(nt.is_cool, 100)
 
     def test_address_with_prefix(self):
-        af = VPPEnumType('vl_api_address_family_t', [["ADDRESS_IP4", 0],
-                                                     ["ADDRESS_IP6", 1],
-                                                     {"enumtype": "u32"}])
-        ip4 = VPPTypeAlias('vl_api_ip4_address_t', {'type': 'u8',
-                                                    'length': 4})
-        ip6 = VPPTypeAlias('vl_api_ip6_address_t', {'type': 'u8',
-                                                    'length': 16})
-        VPPUnionType('vl_api_address_union_t',
-                     [["vl_api_ip4_address_t", "ip4"],
-                      ["vl_api_ip6_address_t", "ip6"]])
-
-        address = VPPType('vl_api_address_t',
-                          [['vl_api_address_family_t', 'af'],
-                           ['vl_api_address_union_t', 'un']])
-
-        prefix = VPPType('vl_api_prefix_t',
-                         [['vl_api_address_t', 'address'],
-                          ['u8', 'len']])
-        prefix4 = VPPType('vl_api_ip4_prefix_t',
-                          [['vl_api_ip4_address_t', 'address'],
-                          ['u8', 'len']])
-        prefix6 = VPPType('vl_api_ip6_prefix_t',
-                          [['vl_api_ip6_address_t', 'address'],
-                          ['u8', 'len']])
-
-        address_with_prefix = VPPTypeAlias('vl_api_address_with_prefix_t', {'type': 'vl_api_prefix_t' })
-        address4_with_prefix = VPPTypeAlias('vl_api_ip4_address_with_prefix_t',
-                                            {'type': 'vl_api_ip4_prefix_t' })
-        address6_with_prefix = VPPTypeAlias('vl_api_ip6_address_with_prefix_t',
-                                            {'type': 'vl_api_ip6_prefix_t' })
-
-        awp_type = VPPType('foobar_t',
-                           [['vl_api_address_with_prefix_t', 'address']])
+        af = VPPEnumType(
+            "vl_api_address_family_t",
+            [["ADDRESS_IP4", 0], ["ADDRESS_IP6", 1], {"enumtype": "u32"}],
+        )
+        ip4 = VPPTypeAlias("vl_api_ip4_address_t", {"type": "u8", "length": 4})
+        ip6 = VPPTypeAlias("vl_api_ip6_address_t", {"type": "u8", "length": 16})
+        VPPUnionType(
+            "vl_api_address_union_t",
+            [["vl_api_ip4_address_t", "ip4"], ["vl_api_ip6_address_t", "ip6"]],
+        )
+
+        address = VPPType(
+            "vl_api_address_t",
+            [["vl_api_address_family_t", "af"], ["vl_api_address_union_t", "un"]],
+        )
+
+        prefix = VPPType(
+            "vl_api_prefix_t", [["vl_api_address_t", "address"], ["u8", "len"]]
+        )
+        prefix4 = VPPType(
+            "vl_api_ip4_prefix_t", [["vl_api_ip4_address_t", "address"], ["u8", "len"]]
+        )
+        prefix6 = VPPType(
+            "vl_api_ip6_prefix_t", [["vl_api_ip6_address_t", "address"], ["u8", "len"]]
+        )
+
+        address_with_prefix = VPPTypeAlias(
+            "vl_api_address_with_prefix_t", {"type": "vl_api_prefix_t"}
+        )
+        address4_with_prefix = VPPTypeAlias(
+            "vl_api_ip4_address_with_prefix_t", {"type": "vl_api_ip4_prefix_t"}
+        )
+        address6_with_prefix = VPPTypeAlias(
+            "vl_api_ip6_address_with_prefix_t", {"type": "vl_api_ip6_prefix_t"}
+        )
+
+        awp_type = VPPType("foobar_t", [["vl_api_address_with_prefix_t", "address"]])
 
         # address with prefix
 
         # address with prefix
-        b = address_with_prefix.pack(IPv4Interface('2.2.2.2/24'))
+        b = address_with_prefix.pack(IPv4Interface("2.2.2.2/24"))
         self.assertEqual(len(b), 21)
         nt, size = address_with_prefix.unpack(b)
         self.assertTrue(isinstance(nt, IPv4Interface))
         self.assertEqual(len(b), 21)
         nt, size = address_with_prefix.unpack(b)
         self.assertTrue(isinstance(nt, IPv4Interface))
-        self.assertEqual(str(nt), '2.2.2.2/24')
+        self.assertEqual(str(nt), "2.2.2.2/24")
 
 
-        b = address_with_prefix.pack(IPv6Interface('2::2/64'))
+        b = address_with_prefix.pack(IPv6Interface("2::2/64"))
         self.assertEqual(len(b), 21)
         nt, size = address_with_prefix.unpack(b)
         self.assertTrue(isinstance(nt, IPv6Interface))
         self.assertEqual(len(b), 21)
         nt, size = address_with_prefix.unpack(b)
         self.assertTrue(isinstance(nt, IPv6Interface))
-        self.assertEqual(str(nt), '2::2/64')
+        self.assertEqual(str(nt), "2::2/64")
 
 
-        b = address_with_prefix.pack(IPv4Network('2.2.2.2/24', strict=False))
+        b = address_with_prefix.pack(IPv4Network("2.2.2.2/24", strict=False))
         self.assertEqual(len(b), 21)
         nt, size = address_with_prefix.unpack(b)
         self.assertTrue(isinstance(nt, IPv4Interface))
         self.assertEqual(len(b), 21)
         nt, size = address_with_prefix.unpack(b)
         self.assertTrue(isinstance(nt, IPv4Interface))
-        self.assertEqual(str(nt), '2.2.2.0/24')
+        self.assertEqual(str(nt), "2.2.2.0/24")
 
 
-        b = address4_with_prefix.pack('2.2.2.2/24')
+        b = address4_with_prefix.pack("2.2.2.2/24")
         self.assertEqual(len(b), 5)
         nt, size = address4_with_prefix.unpack(b)
         self.assertTrue(isinstance(nt, IPv4Interface))
         self.assertEqual(len(b), 5)
         nt, size = address4_with_prefix.unpack(b)
         self.assertTrue(isinstance(nt, IPv4Interface))
-        self.assertEqual(str(nt), '2.2.2.2/24')
-        b = address4_with_prefix.pack(IPv4Interface('2.2.2.2/24'))
+        self.assertEqual(str(nt), "2.2.2.2/24")
+        b = address4_with_prefix.pack(IPv4Interface("2.2.2.2/24"))
         self.assertEqual(len(b), 5)
 
         self.assertEqual(len(b), 5)
 
-        b = address6_with_prefix.pack('2::2/64')
+        b = address6_with_prefix.pack("2::2/64")
         self.assertEqual(len(b), 17)
         nt, size = address6_with_prefix.unpack(b)
         self.assertTrue(isinstance(nt, IPv6Interface))
         self.assertEqual(len(b), 17)
         nt, size = address6_with_prefix.unpack(b)
         self.assertTrue(isinstance(nt, IPv6Interface))
-        self.assertEqual(str(nt), '2::2/64')
-        b = address6_with_prefix.pack(IPv6Interface('2::2/64'))
+        self.assertEqual(str(nt), "2::2/64")
+        b = address6_with_prefix.pack(IPv6Interface("2::2/64"))
         self.assertEqual(len(b), 17)
 
         self.assertEqual(len(b), 17)
 
-        b = prefix.pack('192.168.10.0/24')
+        b = prefix.pack("192.168.10.0/24")
         self.assertEqual(len(b), 21)
         nt, size = prefix.unpack(b)
         self.assertTrue(isinstance(nt, IPv4Network))
         self.assertEqual(len(b), 21)
         nt, size = prefix.unpack(b)
         self.assertTrue(isinstance(nt, IPv4Network))
-        self.assertEqual(str(nt), '192.168.10.0/24')
+        self.assertEqual(str(nt), "192.168.10.0/24")
 
 
-        b = awp_type.pack({'address': '1.2.3.4/24'})
+        b = awp_type.pack({"address": "1.2.3.4/24"})
         self.assertEqual(len(b), 21)
         nt, size = awp_type.unpack(b)
         self.assertTrue(isinstance(nt.address, IPv4Interface))
         self.assertEqual(len(b), 21)
         nt, size = awp_type.unpack(b)
         self.assertTrue(isinstance(nt.address, IPv4Interface))
-        self.assertEqual(str(nt.address), '1.2.3.4/24')
+        self.assertEqual(str(nt.address), "1.2.3.4/24")
 
 
-        b = awp_type.pack({'address': IPv4Interface('1.2.3.4/24')})
+        b = awp_type.pack({"address": IPv4Interface("1.2.3.4/24")})
         self.assertEqual(len(b), 21)
         nt, size = awp_type.unpack(b)
         self.assertTrue(isinstance(nt.address, IPv4Interface))
         self.assertEqual(len(b), 21)
         nt, size = awp_type.unpack(b)
         self.assertTrue(isinstance(nt.address, IPv4Interface))
-        self.assertEqual(str(nt.address), '1.2.3.4/24')
+        self.assertEqual(str(nt.address), "1.2.3.4/24")
 
     def test_recursive_address(self):
 
     def test_recursive_address(self):
-        af = VPPEnumType('vl_api_address_family_t', [["ADDRESS_IP4", 0],
-                                                     ["ADDRESS_IP6", 1],
-                                                     {"enumtype": "u32"}])
-        ip4 = VPPTypeAlias('vl_api_ip4_address_t', {'type': 'u8',
-                                                    'length': 4})
-        b = ip4.pack('1.1.1.1')
+        af = VPPEnumType(
+            "vl_api_address_family_t",
+            [["ADDRESS_IP4", 0], ["ADDRESS_IP6", 1], {"enumtype": "u32"}],
+        )
+        ip4 = VPPTypeAlias("vl_api_ip4_address_t", {"type": "u8", "length": 4})
+        b = ip4.pack("1.1.1.1")
         self.assertEqual(len(b), 4)
         nt, size = ip4.unpack(b)
 
         self.assertEqual(len(b), 4)
         nt, size = ip4.unpack(b)
 
-        self.assertEqual(str(nt), '1.1.1.1')
+        self.assertEqual(str(nt), "1.1.1.1")
 
 
-        ip6 = VPPTypeAlias('vl_api_ip6_address_t', {'type': 'u8',
-                                                    'length': 16})
-        VPPUnionType('vl_api_address_union_t',
-                     [["vl_api_ip4_address_t", "ip4"],
-                      ["vl_api_ip6_address_t", "ip6"]])
+        ip6 = VPPTypeAlias("vl_api_ip6_address_t", {"type": "u8", "length": 16})
+        VPPUnionType(
+            "vl_api_address_union_t",
+            [["vl_api_ip4_address_t", "ip4"], ["vl_api_ip6_address_t", "ip6"]],
+        )
 
 
-        address = VPPType('vl_api_address_t',
-                          [['vl_api_address_family_t', 'af'],
-                           ['vl_api_address_union_t', 'un']])
+        address = VPPType(
+            "vl_api_address_t",
+            [["vl_api_address_family_t", "af"], ["vl_api_address_union_t", "un"]],
+        )
 
 
-        prefix = VPPType('vl_api_prefix_t',
-                         [['vl_api_address_t', 'address'],
-                          ['u8', 'len']])
-        message = VPPMessage('svs',
-                             [['vl_api_prefix_t', 'prefix']])
-        message_addr = VPPMessage('svs_address',
-                                  [['vl_api_address_t', 'address']])
+        prefix = VPPType(
+            "vl_api_prefix_t", [["vl_api_address_t", "address"], ["u8", "len"]]
+        )
+        message = VPPMessage("svs", [["vl_api_prefix_t", "prefix"]])
+        message_addr = VPPMessage("svs_address", [["vl_api_address_t", "address"]])
 
 
-        b = message_addr.pack({'address': "1::1"})
+        b = message_addr.pack({"address": "1::1"})
         self.assertEqual(len(b), 20)
         nt, size = message_addr.unpack(b)
         self.assertEqual("1::1", str(nt.address))
         self.assertEqual(len(b), 20)
         nt, size = message_addr.unpack(b)
         self.assertEqual("1::1", str(nt.address))
-        b = message_addr.pack({'address': "1.1.1.1"})
+        b = message_addr.pack({"address": "1.1.1.1"})
         self.assertEqual(len(b), 20)
         nt, size = message_addr.unpack(b)
         self.assertEqual("1.1.1.1", str(nt.address))
 
         self.assertEqual(len(b), 20)
         nt, size = message_addr.unpack(b)
         self.assertEqual("1.1.1.1", str(nt.address))
 
-        b = message.pack({'prefix': "1.1.1.0/24"})
+        b = message.pack({"prefix": "1.1.1.0/24"})
         self.assertEqual(len(b), 21)
         nt, size = message.unpack(b)
         self.assertEqual("1.1.1.0/24", str(nt.prefix))
 
         self.assertEqual(len(b), 21)
         nt, size = message.unpack(b)
         self.assertEqual("1.1.1.0/24", str(nt.prefix))
 
-        message_array = VPPMessage('address_array',
-                                   [['vl_api_ip6_address_t',
-                                     'addresses', 2]])
-        b = message_array.pack({'addresses': [IPv6Address(u"1::1"), "2::2"]})
+        message_array = VPPMessage(
+            "address_array", [["vl_api_ip6_address_t", "addresses", 2]]
+        )
+        b = message_array.pack({"addresses": [IPv6Address("1::1"), "2::2"]})
         self.assertEqual(len(b), 32)
         self.assertEqual(len(b), 32)
-        message_array_vla = VPPMessage('address_array_vla',
-                                       [['u32', 'num'],
-                                        ['vl_api_ip6_address_t',
-                                         'addresses', 0, 'num']])
-        b = message_array_vla.pack({'addresses': ["1::1", "2::2"], 'num': 2})
+        message_array_vla = VPPMessage(
+            "address_array_vla",
+            [["u32", "num"], ["vl_api_ip6_address_t", "addresses", 0, "num"]],
+        )
+        b = message_array_vla.pack({"addresses": ["1::1", "2::2"], "num": 2})
         self.assertEqual(len(b), 36)
 
         self.assertEqual(len(b), 36)
 
-        message_array4 = VPPMessage('address_array4',
-                                    [['vl_api_ip4_address_t',
-                                      'addresses', 2]])
-        b = message_array4.pack({'addresses': ["1.1.1.1", "2.2.2.2"]})
+        message_array4 = VPPMessage(
+            "address_array4", [["vl_api_ip4_address_t", "addresses", 2]]
+        )
+        b = message_array4.pack({"addresses": ["1.1.1.1", "2.2.2.2"]})
         self.assertEqual(len(b), 8)
         self.assertEqual(len(b), 8)
-        b = message_array4.pack({'addresses': [IPv4Address(u"1.1.1.1"),
-                                               "2.2.2.2"]})
+        b = message_array4.pack({"addresses": [IPv4Address("1.1.1.1"), "2.2.2.2"]})
         self.assertEqual(len(b), 8)
 
         self.assertEqual(len(b), 8)
 
-        message = VPPMessage('address', [['vl_api_address_t', 'address']])
-        b = message.pack({'address': '1::1'})
+        message = VPPMessage("address", [["vl_api_address_t", "address"]])
+        b = message.pack({"address": "1::1"})
         self.assertEqual(len(b), 20)
         self.assertEqual(len(b), 20)
-        b = message.pack({'address': '1.1.1.1'})
+        b = message.pack({"address": "1.1.1.1"})
         self.assertEqual(len(b), 20)
         self.assertEqual(len(b), 20)
-        message = VPPMessage('prefix', [['vl_api_prefix_t', 'prefix']])
-        b = message.pack({'prefix': '1::1/130'})
+        message = VPPMessage("prefix", [["vl_api_prefix_t", "prefix"]])
+        b = message.pack({"prefix": "1::1/130"})
         self.assertEqual(len(b), 21)
         self.assertEqual(len(b), 21)
-        b = message.pack({'prefix': IPv6Network(u'1::/119')})
+        b = message.pack({"prefix": IPv6Network("1::/119")})
         self.assertEqual(len(b), 21)
         self.assertEqual(len(b), 21)
-        b = message.pack({'prefix': IPv4Network(u'1.1.0.0/16')})
+        b = message.pack({"prefix": IPv4Network("1.1.0.0/16")})
         self.assertEqual(len(b), 21)
 
     def test_zero_vla(self):
         self.assertEqual(len(b), 21)
 
     def test_zero_vla(self):
-        '''Default zero'ed out for VLAs'''
-        list = VPPType('vl_api_list_t',
-                       [['u8', 'count', 10]])
+        """Default zero'ed out for VLAs"""
+        list = VPPType("vl_api_list_t", [["u8", "count", 10]])
 
         # Define an embedded VLA type
 
         # Define an embedded VLA type
-        valist = VPPType('vl_api_valist_t',
-                         [['u8', 'count'],
-                          ['u8', 'string', 0, 'count']])
+        valist = VPPType(
+            "vl_api_valist_t", [["u8", "count"], ["u8", "string", 0, "count"]]
+        )
         # Define a message
         # Define a message
-        vamessage = VPPMessage('vamsg',
-                               [['vl_api_valist_t', 'valist'],
-                                ['u8', 'is_something']])
+        vamessage = VPPMessage(
+            "vamsg", [["vl_api_valist_t", "valist"], ["u8", "is_something"]]
+        )
 
 
-        message = VPPMessage('msg',
-                             [['vl_api_list_t', 'list'],
-                              ['u8', 'is_something']])
+        message = VPPMessage("msg", [["vl_api_list_t", "list"], ["u8", "is_something"]])
 
         # Pack message without VLA specified
 
         # Pack message without VLA specified
-        b = message.pack({'is_something': 1})
-        b = vamessage.pack({'is_something': 1})
+        b = message.pack({"is_something": 1})
+        b = vamessage.pack({"is_something": 1})
 
     def test_arrays(self):
         # Test cases
 
     def test_arrays(self):
         # Test cases
@@ -382,254 +380,275 @@ class TestAddType(unittest.TestCase):
         # 2. Fixed list of variable length sub type
         # 3. Variable length type
         #
         # 2. Fixed list of variable length sub type
         # 3. Variable length type
         #
-        s = VPPType('str', [['u32', 'length'],
-                            ['u8', 'string', 0, 'length']])
+        s = VPPType("str", [["u32", "length"], ["u8", "string", 0, "length"]])
 
 
-        ip4 = VPPType('ip4_address', [['u8', 'address', 4]])
-        listip4 = VPPType('list_ip4_t', [['ip4_address', 'addresses', 4]])
-        valistip4 = VPPType('list_ip4_t',
-                            [['u8', 'count'],
-                             ['ip4_address', 'addresses', 0, 'count']])
+        ip4 = VPPType("ip4_address", [["u8", "address", 4]])
+        listip4 = VPPType("list_ip4_t", [["ip4_address", "addresses", 4]])
+        valistip4 = VPPType(
+            "list_ip4_t", [["u8", "count"], ["ip4_address", "addresses", 0, "count"]]
+        )
 
 
-        valistip4_legacy = VPPType('list_ip4_t',
-                                   [['u8', 'foo'],
-                                    ['ip4_address', 'addresses', 0]])
+        valistip4_legacy = VPPType(
+            "list_ip4_t", [["u8", "foo"], ["ip4_address", "addresses", 0]]
+        )
 
         addresses = []
         for i in range(4):
 
         addresses = []
         for i in range(4):
-            addresses.append({'address': inet_pton(AF_INET, '2.2.2.2')})
-        b = listip4.pack({'addresses': addresses})
+            addresses.append({"address": inet_pton(AF_INET, "2.2.2.2")})
+        b = listip4.pack({"addresses": addresses})
         self.assertEqual(len(b), 16)
         nt, size = listip4.unpack(b)
         self.assertEqual(len(b), 16)
         nt, size = listip4.unpack(b)
-        self.assertEqual(nt.addresses[0].address,
-                         inet_pton(AF_INET, '2.2.2.2'))
+        self.assertEqual(nt.addresses[0].address, inet_pton(AF_INET, "2.2.2.2"))
 
 
-        b = valistip4.pack({'count': len(addresses), 'addresses': addresses})
+        b = valistip4.pack({"count": len(addresses), "addresses": addresses})
         self.assertEqual(len(b), 17)
 
         nt, size = valistip4.unpack(b)
         self.assertEqual(nt.count, 4)
         self.assertEqual(len(b), 17)
 
         nt, size = valistip4.unpack(b)
         self.assertEqual(nt.count, 4)
-        self.assertEqual(nt.addresses[0].address,
-                         inet_pton(AF_INET, '2.2.2.2'))
+        self.assertEqual(nt.addresses[0].address, inet_pton(AF_INET, "2.2.2.2"))
 
 
-        b = valistip4_legacy.pack({'foo': 1, 'addresses': addresses})
+        b = valistip4_legacy.pack({"foo": 1, "addresses": addresses})
         self.assertEqual(len(b), 17)
         nt, size = valistip4_legacy.unpack(b)
         self.assertEqual(len(nt.addresses), 4)
         self.assertEqual(len(b), 17)
         nt, size = valistip4_legacy.unpack(b)
         self.assertEqual(len(nt.addresses), 4)
-        self.assertEqual(nt.addresses[0].address,
-                         inet_pton(AF_INET, '2.2.2.2'))
+        self.assertEqual(nt.addresses[0].address, inet_pton(AF_INET, "2.2.2.2"))
 
 
-        string = 'foobar foobar'
-        b = s.pack({'length': len(string), 'string': string.encode('utf-8')})
+        string = "foobar foobar"
+        b = s.pack({"length": len(string), "string": string.encode("utf-8")})
         nt, size = s.unpack(b)
         self.assertEqual(len(b), size)
 
     def test_string(self):
         nt, size = s.unpack(b)
         self.assertEqual(len(b), size)
 
     def test_string(self):
-        s = VPPType('str', [['u32', 'length'],
-                            ['u8', 'string', 0, 'length']])
+        s = VPPType("str", [["u32", "length"], ["u8", "string", 0, "length"]])
 
 
-        string = ''
-        b = s.pack({'length': len(string), 'string': string.encode('utf-8')})
+        string = ""
+        b = s.pack({"length": len(string), "string": string.encode("utf-8")})
         nt, size = s.unpack(b)
         self.assertEqual(len(b), size)
 
     def test_message(self):
         nt, size = s.unpack(b)
         self.assertEqual(len(b), size)
 
     def test_message(self):
-        foo = VPPMessage('foo', [['u16', '_vl_msg_id'],
-                                 ['u8', 'client_index'],
-                                 ['u8', 'something'],
-                                 {"crc": "0x559b9f3c"}])
-        b = foo.pack({'_vl_msg_id': 1, 'client_index': 5,
-                      'something': 200})
+        foo = VPPMessage(
+            "foo",
+            [
+                ["u16", "_vl_msg_id"],
+                ["u8", "client_index"],
+                ["u8", "something"],
+                {"crc": "0x559b9f3c"},
+            ],
+        )
+        b = foo.pack({"_vl_msg_id": 1, "client_index": 5, "something": 200})
         nt, size = foo.unpack(b)
         self.assertEqual(len(b), size)
         self.assertEqual(nt.something, 200)
 
     def test_abf(self):
 
         nt, size = foo.unpack(b)
         self.assertEqual(len(b), size)
         self.assertEqual(nt.something, 200)
 
     def test_abf(self):
 
-        fib_mpls_label = VPPType('vl_api_fib_mpls_label_t',
-                                 [['u8', 'is_uniform'],
-                                  ['u32', 'label'],
-                                  ['u8', 'ttl'],
-                                  ['u8', 'exp']])
+        fib_mpls_label = VPPType(
+            "vl_api_fib_mpls_label_t",
+            [["u8", "is_uniform"], ["u32", "label"], ["u8", "ttl"], ["u8", "exp"]],
+        )
 
 
-        label_stack = {'is_uniform': 0,
-                       'label': 0,
-                       'ttl': 0,
-                       'exp': 0}
+        label_stack = {"is_uniform": 0, "label": 0, "ttl": 0, "exp": 0}
 
         b = fib_mpls_label.pack(label_stack)
         self.assertEqual(len(b), 7)
 
 
         b = fib_mpls_label.pack(label_stack)
         self.assertEqual(len(b), 7)
 
-        fib_path = VPPType('vl_api_fib_path_t',
-                           [['u32', 'sw_if_index'],
-                            ['u32', 'table_id'],
-                            ['u8', 'weight'],
-                            ['u8', 'preference'],
-                            ['u8', 'is_local'],
-                            ['u8', 'is_drop'],
-                            ['u8', 'is_udp_encap'],
-                            ['u8', 'is_unreach'],
-                            ['u8', 'is_prohibit'],
-                            ['u8', 'is_resolve_host'],
-                            ['u8', 'is_resolve_attached'],
-                            ['u8', 'is_dvr'],
-                            ['u8', 'is_source_lookup'],
-                            ['u8', 'afi'],
-                            ['u8', 'next_hop', 16],
-                            ['u32', 'next_hop_id'],
-                            ['u32', 'rpf_id'],
-                            ['u32', 'via_label'],
-                            ['u8', 'n_labels'],
-                            ['vl_api_fib_mpls_label_t', 'label_stack', 16]])
+        fib_path = VPPType(
+            "vl_api_fib_path_t",
+            [
+                ["u32", "sw_if_index"],
+                ["u32", "table_id"],
+                ["u8", "weight"],
+                ["u8", "preference"],
+                ["u8", "is_local"],
+                ["u8", "is_drop"],
+                ["u8", "is_udp_encap"],
+                ["u8", "is_unreach"],
+                ["u8", "is_prohibit"],
+                ["u8", "is_resolve_host"],
+                ["u8", "is_resolve_attached"],
+                ["u8", "is_dvr"],
+                ["u8", "is_source_lookup"],
+                ["u8", "afi"],
+                ["u8", "next_hop", 16],
+                ["u32", "next_hop_id"],
+                ["u32", "rpf_id"],
+                ["u32", "via_label"],
+                ["u8", "n_labels"],
+                ["vl_api_fib_mpls_label_t", "label_stack", 16],
+            ],
+        )
         label_stack_list = []
         for i in range(16):
             label_stack_list.append(label_stack)
 
         label_stack_list = []
         for i in range(16):
             label_stack_list.append(label_stack)
 
-        paths = {'is_udp_encap': 0,
-                 'next_hop': b'\x10\x02\x02\xac',
-                 'table_id': 0,
-                 'afi': 0,
-                 'weight': 1,
-                 'next_hop_id': 4294967295,
-                 'label_stack': label_stack_list,
-                 'n_labels': 0,
-                 'sw_if_index': 4294967295,
-                 'preference': 0}
+        paths = {
+            "is_udp_encap": 0,
+            "next_hop": b"\x10\x02\x02\xac",
+            "table_id": 0,
+            "afi": 0,
+            "weight": 1,
+            "next_hop_id": 4294967295,
+            "label_stack": label_stack_list,
+            "n_labels": 0,
+            "sw_if_index": 4294967295,
+            "preference": 0,
+        }
 
         b = fib_path.pack(paths)
 
         b = fib_path.pack(paths)
-        self.assertEqual(len(b), (7*16) + 49)
+        self.assertEqual(len(b), (7 * 16) + 49)
 
 
-        abf_policy = VPPType('vl_api_abf_policy_t',
-                             [['u32', 'policy_id'],
-                              ['u32', 'acl_index'],
-                              ['u8', 'n_paths'],
-                              ['vl_api_fib_path_t', 'paths', 0, 'n_paths']])
+        abf_policy = VPPType(
+            "vl_api_abf_policy_t",
+            [
+                ["u32", "policy_id"],
+                ["u32", "acl_index"],
+                ["u8", "n_paths"],
+                ["vl_api_fib_path_t", "paths", 0, "n_paths"],
+            ],
+        )
 
 
-        policy = {
-            'n_paths': 1,
-            'paths': [paths],
-            'acl_index': 0,
-            'policy_id': 10}
+        policy = {"n_paths": 1, "paths": [paths], "acl_index": 0, "policy_id": 10}
 
         b = abf_policy.pack(policy)
 
         b = abf_policy.pack(policy)
-        self.assertEqual(len(b), (7*16) + 49 + 9)
-
-        abf_policy_add_del = VPPMessage('abf_policy_add_del',
-                                        [['u16', '_vl_msg_id'],
-                                         ['u32', 'client_index'],
-                                         ['u32', 'context'],
-                                         ['u8', 'is_add'],
-                                         ['vl_api_abf_policy_t', 'policy']])
-
-        b = abf_policy_add_del.pack({'is_add': 1,
-                                     'context': 66,
-                                     '_vl_msg_id': 1066,
-                                     'policy': policy})
+        self.assertEqual(len(b), (7 * 16) + 49 + 9)
+
+        abf_policy_add_del = VPPMessage(
+            "abf_policy_add_del",
+            [
+                ["u16", "_vl_msg_id"],
+                ["u32", "client_index"],
+                ["u32", "context"],
+                ["u8", "is_add"],
+                ["vl_api_abf_policy_t", "policy"],
+            ],
+        )
+
+        b = abf_policy_add_del.pack(
+            {"is_add": 1, "context": 66, "_vl_msg_id": 1066, "policy": policy}
+        )
 
         nt, size = abf_policy_add_del.unpack(b)
 
         nt, size = abf_policy_add_del.unpack(b)
-        self.assertEqual(nt.policy.paths[0].next_hop,
-                         b'\x10\x02\x02\xac\x00\x00\x00\x00'
-                         b'\x00\x00\x00\x00\x00\x00\x00\x00')
+        self.assertEqual(
+            nt.policy.paths[0].next_hop,
+            b"\x10\x02\x02\xac\x00\x00\x00\x00" b"\x00\x00\x00\x00\x00\x00\x00\x00",
+        )
 
     def test_bier(self):
 
 
     def test_bier(self):
 
-        bier_table_id = VPPType('vl_api_bier_table_id_t',
-                                [['u8', 'bt_set'],
-                                 ['u8', 'bt_sub_domain'],
-                                 ['u8', 'bt_hdr_len_id']])
+        bier_table_id = VPPType(
+            "vl_api_bier_table_id_t",
+            [["u8", "bt_set"], ["u8", "bt_sub_domain"], ["u8", "bt_hdr_len_id"]],
+        )
 
 
-        bier_imp_add = VPPMessage('bier_imp_add',
-                                  [['u32', 'client_index'],
-                                   ['u32', 'context'],
-                                   ['vl_api_bier_table_id_t', 'bi_tbl_id'],
-                                   ['u16', 'bi_src'],
-                                   ['u8', 'bi_n_bytes'],
-                                   ['u8', 'bi_bytes', 0, 'bi_n_bytes']])
+        bier_imp_add = VPPMessage(
+            "bier_imp_add",
+            [
+                ["u32", "client_index"],
+                ["u32", "context"],
+                ["vl_api_bier_table_id_t", "bi_tbl_id"],
+                ["u16", "bi_src"],
+                ["u8", "bi_n_bytes"],
+                ["u8", "bi_bytes", 0, "bi_n_bytes"],
+            ],
+        )
 
 
-        table_id = {'bt_set': 0,
-                    'bt_sub_domain': 0,
-                    'bt_hdr_len_id': 0}
+        table_id = {"bt_set": 0, "bt_sub_domain": 0, "bt_hdr_len_id": 0}
 
 
-        bibytes = b'foobar'
+        bibytes = b"foobar"
 
 
-        b = bier_imp_add.pack({'bi_tbl_id': table_id,
-                               'bi_n_bytes': len(bibytes),
-                               'bi_bytes': bibytes})
+        b = bier_imp_add.pack(
+            {"bi_tbl_id": table_id, "bi_n_bytes": len(bibytes), "bi_bytes": bibytes}
+        )
 
         self.assertEqual(len(b), 20)
 
     def test_lisp(self):
 
         self.assertEqual(len(b), 20)
 
     def test_lisp(self):
-        VPPEnumType('vl_api_eid_type_t',
-                    [["EID_TYPE_API_PREFIX", 0],
-                     ["EID_TYPE_API_MAC", 1],
-                     ["EID_TYPE_API_NSH", 2],
-                     {"enumtype": "u32"}])
-
-        VPPTypeAlias('vl_api_mac_address_t', {'type': 'u8',
-                                              'length': 6})
-
-        VPPType('vl_api_nsh_t',
-                [["u32", "spi"],
-                 ["u8", "si"]])
-
-        VPPEnumType('vl_api_address_family_t', [["ADDRESS_IP4", 0],
-                                                ["ADDRESS_IP6", 1],
-                                                {"enumtype": "u32"}])
-        VPPTypeAlias('vl_api_ip4_address_t', {'type': 'u8',
-                                              'length': 4})
-        VPPTypeAlias('vl_api_ip6_address_t', {'type': 'u8',
-                                              'length': 16})
-        VPPUnionType('vl_api_address_union_t',
-                     [["vl_api_ip4_address_t", "ip4"],
-                      ["vl_api_ip6_address_t", "ip6"]])
-
-        VPPType('vl_api_address_t',
-                [['vl_api_address_family_t', 'af'],
-                 ['vl_api_address_union_t', 'un']])
-
-        VPPType('vl_api_prefix_t',
-                [['vl_api_address_t', 'address'],
-                 ['u8', 'len']])
-
-        VPPUnionType('vl_api_eid_address_t',
-                     [["vl_api_prefix_t", "prefix"],
-                      ["vl_api_mac_address_t", "mac"],
-                      ["vl_api_nsh_t", "nsh"]])
-
-        eid = VPPType('vl_api_eid_t',
-                      [["vl_api_eid_type_t", "type"],
-                       ["vl_api_eid_address_t", "address"]])
-
-        b = eid.pack({'type':1,
-                      'address': {
-                          'mac': MACAddress('aa:bb:cc:dd:ee:ff')}})
+        VPPEnumType(
+            "vl_api_eid_type_t",
+            [
+                ["EID_TYPE_API_PREFIX", 0],
+                ["EID_TYPE_API_MAC", 1],
+                ["EID_TYPE_API_NSH", 2],
+                {"enumtype": "u32"},
+            ],
+        )
+
+        VPPTypeAlias("vl_api_mac_address_t", {"type": "u8", "length": 6})
+
+        VPPType("vl_api_nsh_t", [["u32", "spi"], ["u8", "si"]])
+
+        VPPEnumType(
+            "vl_api_address_family_t",
+            [["ADDRESS_IP4", 0], ["ADDRESS_IP6", 1], {"enumtype": "u32"}],
+        )
+        VPPTypeAlias("vl_api_ip4_address_t", {"type": "u8", "length": 4})
+        VPPTypeAlias("vl_api_ip6_address_t", {"type": "u8", "length": 16})
+        VPPUnionType(
+            "vl_api_address_union_t",
+            [["vl_api_ip4_address_t", "ip4"], ["vl_api_ip6_address_t", "ip6"]],
+        )
+
+        VPPType(
+            "vl_api_address_t",
+            [["vl_api_address_family_t", "af"], ["vl_api_address_union_t", "un"]],
+        )
+
+        VPPType("vl_api_prefix_t", [["vl_api_address_t", "address"], ["u8", "len"]])
+
+        VPPUnionType(
+            "vl_api_eid_address_t",
+            [
+                ["vl_api_prefix_t", "prefix"],
+                ["vl_api_mac_address_t", "mac"],
+                ["vl_api_nsh_t", "nsh"],
+            ],
+        )
+
+        eid = VPPType(
+            "vl_api_eid_t",
+            [["vl_api_eid_type_t", "type"], ["vl_api_eid_address_t", "address"]],
+        )
+
+        b = eid.pack({"type": 1, "address": {"mac": MACAddress("aa:bb:cc:dd:ee:ff")}})
         self.assertEqual(len(b), 25)
         nt, size = eid.unpack(b)
         self.assertEqual(len(b), 25)
         nt, size = eid.unpack(b)
-        self.assertEqual(str(nt.address.mac), 'aa:bb:cc:dd:ee:ff')
+        self.assertEqual(str(nt.address.mac), "aa:bb:cc:dd:ee:ff")
         self.assertIsNone(nt.address.prefix)
 
 
 class TestVppSerializerLogging(unittest.TestCase):
         self.assertIsNone(nt.address.prefix)
 
 
 class TestVppSerializerLogging(unittest.TestCase):
-
     def test_logger(self):
         # test logger name 'vpp_papi.serializer'
         with self.assertRaises(VPPSerializerValueError) as ctx:
     def test_logger(self):
         # test logger name 'vpp_papi.serializer'
         with self.assertRaises(VPPSerializerValueError) as ctx:
-            with self.assertLogs('vpp_papi.serializer', level='DEBUG') as cm:
-                u = VPPUnionType('vl_api_eid_address_t',
-                                 [["vl_api_prefix_t", "prefix"],
-                                  ["vl_api_mac_address_t", "mac"],
-                                  ["vl_api_nsh_t", "nsh"]])
-        self.assertEqual(cm.output, ["DEBUG:vpp_papi.serializer:Unknown union type vl_api_prefix_t"])
+            with self.assertLogs("vpp_papi.serializer", level="DEBUG") as cm:
+                u = VPPUnionType(
+                    "vl_api_eid_address_t",
+                    [
+                        ["vl_api_prefix_t", "prefix"],
+                        ["vl_api_mac_address_t", "mac"],
+                        ["vl_api_nsh_t", "nsh"],
+                    ],
+                )
+        self.assertEqual(
+            cm.output, ["DEBUG:vpp_papi.serializer:Unknown union type vl_api_prefix_t"]
+        )
 
         # test parent logger name 'vpp_papi'
         with self.assertRaises(VPPSerializerValueError) as ctx:
 
         # test parent logger name 'vpp_papi'
         with self.assertRaises(VPPSerializerValueError) as ctx:
-            with self.assertLogs('vpp_papi', level='DEBUG') as cm:
-                u = VPPUnionType('vl_api_eid_address_t',
-                                 [["vl_api_prefix_t", "prefix"],
-                                  ["vl_api_mac_address_t", "mac"],
-                                  ["vl_api_nsh_t", "nsh"]])
-        self.assertEqual(cm.output, ["DEBUG:vpp_papi.serializer:Unknown union type vl_api_prefix_t"])
-
-
-if __name__ == '__main__':
+            with self.assertLogs("vpp_papi", level="DEBUG") as cm:
+                u = VPPUnionType(
+                    "vl_api_eid_address_t",
+                    [
+                        ["vl_api_prefix_t", "prefix"],
+                        ["vl_api_mac_address_t", "mac"],
+                        ["vl_api_nsh_t", "nsh"],
+                    ],
+                )
+        self.assertEqual(
+            cm.output, ["DEBUG:vpp_papi.serializer:Unknown union type vl_api_prefix_t"]
+        )
+
+
+if __name__ == "__main__":
     unittest.main()
     unittest.main()
index 0b85eb4..f80a781 100644 (file)
@@ -25,8 +25,8 @@ ADDRESS_IP6 = 1
 
 
 def verify_enum_hint(e):
 
 
 def verify_enum_hint(e):
-    return (e.ADDRESS_IP4.value == ADDRESS_IP4) and\
-           (e.ADDRESS_IP6.value == ADDRESS_IP6)
+    return (e.ADDRESS_IP4.value == ADDRESS_IP4) and (e.ADDRESS_IP6.value == ADDRESS_IP6)
+
 
 #
 # Type conversion for input arguments and return values
 
 #
 # Type conversion for input arguments and return values
@@ -35,146 +35,128 @@ def verify_enum_hint(e):
 
 def format_vl_api_address_t(args):
     try:
 
 def format_vl_api_address_t(args):
     try:
-        return {'un': {'ip6': inet_pton(AF_INET6, args)},
-                'af': ADDRESS_IP6}
+        return {"un": {"ip6": inet_pton(AF_INET6, args)}, "af": ADDRESS_IP6}
     # PY2: raises socket.error
     # PY3: raises OSError
     except (socket.error, OSError):
     # PY2: raises socket.error
     # PY3: raises OSError
     except (socket.error, OSError):
-        return {'un': {'ip4': inet_pton(AF_INET, args)},
-                'af': ADDRESS_IP4}
+        return {"un": {"ip4": inet_pton(AF_INET, args)}, "af": ADDRESS_IP4}
 
 
 def format_vl_api_prefix_t(args):
     if isinstance(args, (ipaddress.IPv4Network, ipaddress.IPv6Network)):
 
 
 def format_vl_api_prefix_t(args):
     if isinstance(args, (ipaddress.IPv4Network, ipaddress.IPv6Network)):
-        return {'address': format_vl_api_address_t(
-            str(args.network_address)),
-                'len': int(args.prefixlen)}
-    p, length = args.split('/')
-    return {'address': format_vl_api_address_t(p),
-            'len': int(length)}
+        return {
+            "address": format_vl_api_address_t(str(args.network_address)),
+            "len": int(args.prefixlen),
+        }
+    p, length = args.split("/")
+    return {"address": format_vl_api_address_t(p), "len": int(length)}
 
 
 def format_vl_api_address_with_prefix_t(args):
     if isinstance(args, (ipaddress.IPv4Interface, ipaddress.IPv6Interface)):
 
 
 def format_vl_api_address_with_prefix_t(args):
     if isinstance(args, (ipaddress.IPv4Interface, ipaddress.IPv6Interface)):
-        return {'address': format_vl_api_address_t(
-            str(args.network_address)),
-                'len': int(args.prefixlen)}
-    p, length = args.split('/')
-    return {'address': format_vl_api_address_t(p),
-            'len': int(length)}
+        return {
+            "address": format_vl_api_address_t(str(args.network_address)),
+            "len": int(args.prefixlen),
+        }
+    p, length = args.split("/")
+    return {"address": format_vl_api_address_t(p), "len": int(length)}
 
 
 def format_vl_api_ip6_prefix_t(args):
     if isinstance(args, ipaddress.IPv6Network):
 
 
 def format_vl_api_ip6_prefix_t(args):
     if isinstance(args, ipaddress.IPv6Network):
-        return {'address': args.network_address.packed,
-                'len': int(args.prefixlen)}
-    p, length = args.split('/')
-    return {'address': inet_pton(AF_INET6, p),
-            'len': int(length)}
+        return {"address": args.network_address.packed, "len": int(args.prefixlen)}
+    p, length = args.split("/")
+    return {"address": inet_pton(AF_INET6, p), "len": int(length)}
 
 
 def format_vl_api_ip6_address_with_prefix_t(args):
     if isinstance(args, ipaddress.IPv6Interface):
 
 
 def format_vl_api_ip6_address_with_prefix_t(args):
     if isinstance(args, ipaddress.IPv6Interface):
-        return {'address': args.network_address.packed,
-                'len': int(args.prefixlen)}
-    p, length = args.split('/')
-    return {'address': inet_pton(AF_INET6, p),
-            'len': int(length)}
+        return {"address": args.network_address.packed, "len": int(args.prefixlen)}
+    p, length = args.split("/")
+    return {"address": inet_pton(AF_INET6, p), "len": int(length)}
 
 
 def format_vl_api_ip4_prefix_t(args):
     if isinstance(args, ipaddress.IPv4Network):
 
 
 def format_vl_api_ip4_prefix_t(args):
     if isinstance(args, ipaddress.IPv4Network):
-        return {'address': args.network_address.packed,
-                'len': int(args.prefixlen)}
-    p, length = args.split('/')
-    return {'address': inet_pton(AF_INET, p),
-            'len': int(length)}
+        return {"address": args.network_address.packed, "len": int(args.prefixlen)}
+    p, length = args.split("/")
+    return {"address": inet_pton(AF_INET, p), "len": int(length)}
 
 
 def format_vl_api_ip4_address_with_prefix_t(args):
     if isinstance(args, ipaddress.IPv4Interface):
 
 
 def format_vl_api_ip4_address_with_prefix_t(args):
     if isinstance(args, ipaddress.IPv4Interface):
-        return {'address': args.network_address.packed,
-                'len': int(args.prefixlen)}
-    p, length = args.split('/')
-    return {'address': inet_pton(AF_INET, p),
-            'len': int(length)}
+        return {"address": args.network_address.packed, "len": int(args.prefixlen)}
+    p, length = args.split("/")
+    return {"address": inet_pton(AF_INET, p), "len": int(length)}
 
 
 conversion_table = {
 
 
 conversion_table = {
-    'vl_api_ip6_address_t':
-    {
-        'IPv6Address': lambda o: o.packed,
-        'str': lambda s: inet_pton(AF_INET6, s)
+    "vl_api_ip6_address_t": {
+        "IPv6Address": lambda o: o.packed,
+        "str": lambda s: inet_pton(AF_INET6, s),
+    },
+    "vl_api_ip4_address_t": {
+        "IPv4Address": lambda o: o.packed,
+        "str": lambda s: inet_pton(AF_INET, s),
     },
     },
-    'vl_api_ip4_address_t':
-    {
-        'IPv4Address': lambda o: o.packed,
-        'str': lambda s: inet_pton(AF_INET, s)
+    "vl_api_ip6_prefix_t": {
+        "IPv6Network": lambda o: {
+            "address": o.network_address.packed,
+            "len": o.prefixlen,
+        },
+        "str": lambda s: format_vl_api_ip6_prefix_t(s),
     },
     },
-    'vl_api_ip6_prefix_t':
-    {
-        'IPv6Network': lambda o: {'address': o.network_address.packed,
-                                  'len': o.prefixlen},
-        'str': lambda s: format_vl_api_ip6_prefix_t(s)
+    "vl_api_ip4_prefix_t": {
+        "IPv4Network": lambda o: {
+            "address": o.network_address.packed,
+            "len": o.prefixlen,
+        },
+        "str": lambda s: format_vl_api_ip4_prefix_t(s),
     },
     },
-    'vl_api_ip4_prefix_t':
-    {
-        'IPv4Network': lambda o: {'address': o.network_address.packed,
-                                  'len': o.prefixlen},
-        'str': lambda s: format_vl_api_ip4_prefix_t(s)
+    "vl_api_address_t": {
+        "IPv4Address": lambda o: {"af": ADDRESS_IP4, "un": {"ip4": o.packed}},
+        "IPv6Address": lambda o: {"af": ADDRESS_IP6, "un": {"ip6": o.packed}},
+        "str": lambda s: format_vl_api_address_t(s),
     },
     },
-    'vl_api_address_t':
-    {
-        'IPv4Address': lambda o: {'af': ADDRESS_IP4, 'un': {'ip4': o.packed}},
-        'IPv6Address': lambda o: {'af': ADDRESS_IP6, 'un': {'ip6': o.packed}},
-        'str': lambda s: format_vl_api_address_t(s)
+    "vl_api_prefix_t": {
+        "IPv4Network": lambda o: {
+            "address": {"af": ADDRESS_IP4, "un": {"ip4": o.network_address.packed}},
+            "len": o.prefixlen,
+        },
+        "IPv6Network": lambda o: {
+            "address": {"af": ADDRESS_IP6, "un": {"ip6": o.network_address.packed}},
+            "len": o.prefixlen,
+        },
+        "str": lambda s: format_vl_api_prefix_t(s),
     },
     },
-    'vl_api_prefix_t':
-    {
-        'IPv4Network': lambda o: {'address':
-                                  {'af': ADDRESS_IP4, 'un':
-                                   {'ip4': o.network_address.packed}},
-                                  'len': o.prefixlen},
-        'IPv6Network': lambda o: {'address':
-                                  {'af': ADDRESS_IP6, 'un':
-                                   {'ip6': o.network_address.packed}},
-                                  'len': o.prefixlen},
-        'str': lambda s: format_vl_api_prefix_t(s)
+    "vl_api_address_with_prefix_t": {
+        "IPv4Interface": lambda o: {
+            "address": {"af": ADDRESS_IP4, "un": {"ip4": o.packed}},
+            "len": o.network.prefixlen,
+        },
+        "IPv6Interface": lambda o: {
+            "address": {"af": ADDRESS_IP6, "un": {"ip6": o.packed}},
+            "len": o.network.prefixlen,
+        },
+        "str": lambda s: format_vl_api_address_with_prefix_t(s),
     },
     },
-    'vl_api_address_with_prefix_t':
-    {
-        'IPv4Interface': lambda o: {'address':
-                                    {'af': ADDRESS_IP4, 'un':
-                                     {'ip4': o.packed}},
-                                    'len': o.network.prefixlen},
-        'IPv6Interface': lambda o: {'address':
-                                    {'af': ADDRESS_IP6, 'un':
-                                     {'ip6': o.packed}},
-                                    'len': o.network.prefixlen},
-        'str': lambda s: format_vl_api_address_with_prefix_t(s)
+    "vl_api_ip4_address_with_prefix_t": {
+        "IPv4Interface": lambda o: {"address": o.packed, "len": o.network.prefixlen},
+        "str": lambda s: format_vl_api_ip4_address_with_prefix_t(s),
     },
     },
-    'vl_api_ip4_address_with_prefix_t':
-    {
-        'IPv4Interface': lambda o: {'address': o.packed,
-                                    'len': o.network.prefixlen},
-        'str': lambda s: format_vl_api_ip4_address_with_prefix_t(s)
+    "vl_api_ip6_address_with_prefix_t": {
+        "IPv6Interface": lambda o: {"address": o.packed, "len": o.network.prefixlen},
+        "str": lambda s: format_vl_api_ip6_address_with_prefix_t(s),
     },
     },
-    'vl_api_ip6_address_with_prefix_t':
-    {
-        'IPv6Interface': lambda o: {'address': o.packed,
-                                    'len': o.network.prefixlen},
-        'str': lambda s: format_vl_api_ip6_address_with_prefix_t(s)
+    "vl_api_mac_address_t": {
+        "MACAddress": lambda o: o.packed,
+        "str": lambda s: macaddress.mac_pton(s),
     },
     },
-    'vl_api_mac_address_t':
-    {
-        'MACAddress': lambda o: o.packed,
-        'str': lambda s: macaddress.mac_pton(s)
+    "vl_api_timestamp_t": {
+        "datetime.datetime": lambda o: (
+            o - datetime.datetime(1970, 1, 1)
+        ).total_seconds()
     },
     },
-    'vl_api_timestamp_t':
-    {
-        'datetime.datetime': lambda o:
-        (o - datetime.datetime(1970, 1, 1)).total_seconds()
-    }
 }
 
 
 }
 
 
@@ -197,7 +179,7 @@ def unformat_api_prefix_t(o):
         return ipaddress.IPv4Network((o.address, o.len), False)
     if isinstance(o.address, ipaddress.IPv6Address):
         return ipaddress.IPv6Network((o.address, o.len), False)
         return ipaddress.IPv4Network((o.address, o.len), False)
     if isinstance(o.address, ipaddress.IPv6Address):
         return ipaddress.IPv6Network((o.address, o.len), False)
-    raise ValueError('Unknown instance {}', format(o))
+    raise ValueError("Unknown instance {}", format(o))
 
 
 def unformat_api_address_with_prefix_t(o):
 
 
 def unformat_api_address_with_prefix_t(o):
@@ -217,16 +199,20 @@ def unformat_api_ip6_address_with_prefix_t(o):
 
 
 conversion_unpacker_table = {
 
 
 conversion_unpacker_table = {
-    'vl_api_ip6_address_t': lambda o: ipaddress.IPv6Address(o),
-    'vl_api_ip6_prefix_t': lambda o: ipaddress.IPv6Network((o.address, o.len)),
-    'vl_api_ip4_address_t': lambda o: ipaddress.IPv4Address(o),
-    'vl_api_ip4_prefix_t': lambda o: ipaddress.IPv4Network((o.address, o.len)),
-    'vl_api_address_t': lambda o: unformat_api_address_t(o),
-    'vl_api_prefix_t': lambda o: unformat_api_prefix_t(o),
-    'vl_api_address_with_prefix_t': lambda o: unformat_api_address_with_prefix_t(o),
-    'vl_api_ip4_address_with_prefix_t': lambda o: unformat_api_ip4_address_with_prefix_t(o),
-    'vl_api_ip6_address_with_prefix_t': lambda o: unformat_api_ip6_address_with_prefix_t(o),
-    'vl_api_mac_address_t': lambda o: macaddress.MACAddress(o),
-    'vl_api_timestamp_t': lambda o: datetime.datetime.fromtimestamp(o),
-    'vl_api_timedelta_t': lambda o: datetime.timedelta(seconds=o),
+    "vl_api_ip6_address_t": lambda o: ipaddress.IPv6Address(o),
+    "vl_api_ip6_prefix_t": lambda o: ipaddress.IPv6Network((o.address, o.len)),
+    "vl_api_ip4_address_t": lambda o: ipaddress.IPv4Address(o),
+    "vl_api_ip4_prefix_t": lambda o: ipaddress.IPv4Network((o.address, o.len)),
+    "vl_api_address_t": lambda o: unformat_api_address_t(o),
+    "vl_api_prefix_t": lambda o: unformat_api_prefix_t(o),
+    "vl_api_address_with_prefix_t": lambda o: unformat_api_address_with_prefix_t(o),
+    "vl_api_ip4_address_with_prefix_t": lambda o: unformat_api_ip4_address_with_prefix_t(
+        o
+    ),
+    "vl_api_ip6_address_with_prefix_t": lambda o: unformat_api_ip6_address_with_prefix_t(
+        o
+    ),
+    "vl_api_mac_address_t": lambda o: macaddress.MACAddress(o),
+    "vl_api_timestamp_t": lambda o: datetime.datetime.fromtimestamp(o),
+    "vl_api_timedelta_t": lambda o: datetime.timedelta(seconds=o),
 }
 }
index 3465f50..1e5d23e 100644 (file)
@@ -30,13 +30,14 @@ import fnmatch
 import weakref
 import atexit
 import time
 import weakref
 import atexit
 import time
-from . vpp_format import verify_enum_hint
-from . vpp_serializer import VPPType, VPPEnumType, VPPEnumFlagType, VPPUnionType
-from . vpp_serializer import VPPMessage, vpp_get_type, VPPTypeAlias
+from .vpp_format import verify_enum_hint
+from .vpp_serializer import VPPType, VPPEnumType, VPPEnumFlagType, VPPUnionType
+from .vpp_serializer import VPPMessage, vpp_get_type, VPPTypeAlias
 
 try:
     import VppTransport
 except ModuleNotFoundError:
 
 try:
     import VppTransport
 except ModuleNotFoundError:
+
     class V:
         """placeholder for VppTransport as the implementation is dependent on
         VPPAPIClient's initialization values
     class V:
         """placeholder for VppTransport as the implementation is dependent on
         VPPAPIClient's initialization values
@@ -44,15 +45,22 @@ except ModuleNotFoundError:
 
     VppTransport = V
 
 
     VppTransport = V
 
-from . vpp_transport_socket import VppTransport
+from .vpp_transport_socket import VppTransport
 
 
-logger = logging.getLogger('vpp_papi')
+logger = logging.getLogger("vpp_papi")
 logger.addHandler(logging.NullHandler())
 
 logger.addHandler(logging.NullHandler())
 
-__all__ = ('FuncWrapper', 'VppApiDynamicMethodHolder',
-           'VppEnum', 'VppEnumType', 'VppEnumFlag',
-           'VPPIOError', 'VPPRuntimeError', 'VPPValueError',
-           'VPPApiClient', )
+__all__ = (
+    "FuncWrapper",
+    "VppApiDynamicMethodHolder",
+    "VppEnum",
+    "VppEnumType",
+    "VppEnumFlag",
+    "VPPIOError",
+    "VPPRuntimeError",
+    "VPPValueError",
+    "VPPApiClient",
+)
 
 
 def metaclass(metaclass):
 
 
 def metaclass(metaclass):
@@ -83,7 +91,7 @@ def vpp_atexit(vpp_weakref):
     """Clean up VPP connection on shutdown."""
     vpp_instance = vpp_weakref()
     if vpp_instance and vpp_instance.transport.connected:
     """Clean up VPP connection on shutdown."""
     vpp_instance = vpp_weakref()
     if vpp_instance and vpp_instance.transport.connected:
-        logger.debug('Cleaning up VPP on exit')
+        logger.debug("Cleaning up VPP on exit")
         vpp_instance.disconnect()
 
 
         vpp_instance.disconnect()
 
 
@@ -98,9 +106,9 @@ def add_convenience_methods():
 
     def _vapi_af_name(self):
         if 6 == self._version:
 
     def _vapi_af_name(self):
         if 6 == self._version:
-            return 'ip6'
+            return "ip6"
         if 4 == self._version:
         if 4 == self._version:
-            return 'ip4'
+            return "ip4"
         raise ValueError("Invalid _version.")
 
     ipaddress._IPAddressBase.vapi_af = property(_vapi_af)
         raise ValueError("Invalid _version.")
 
     ipaddress._IPAddressBase.vapi_af = property(_vapi_af)
@@ -121,7 +129,7 @@ class FuncWrapper:
         return self._func(**kwargs)
 
     def __repr__(self):
         return self._func(**kwargs)
 
     def __repr__(self):
-        return '<FuncWrapper(func=<%s(%s)>)>' % (self.__name__, self.__doc__)
+        return "<FuncWrapper(func=<%s(%s)>)>" % (self.__name__, self.__doc__)
 
 
 class VPPApiError(Exception):
 
 
 class VPPApiError(Exception):
@@ -161,7 +169,8 @@ class VPPApiJSONFiles:
         # perhaps we're in the 'src/scripts' or 'src/vpp-api/python' dir;
         # in which case, plot a course to likely places in the src tree
         import __main__ as main
         # perhaps we're in the 'src/scripts' or 'src/vpp-api/python' dir;
         # in which case, plot a course to likely places in the src tree
         import __main__ as main
-        if hasattr(main, '__file__'):
+
+        if hasattr(main, "__file__"):
             # get the path of the calling script
             localdir = os.path.dirname(os.path.realpath(main.__file__))
         else:
             # get the path of the calling script
             localdir = os.path.dirname(os.path.realpath(main.__file__))
         else:
@@ -171,7 +180,7 @@ class VPPApiJSONFiles:
 
         def dmatch(dir):
             """Match dir against right-hand components of the script dir"""
 
         def dmatch(dir):
             """Match dir against right-hand components of the script dir"""
-            d = dir.split('/')  # param 'dir' assumes a / separator
+            d = dir.split("/")  # param 'dir' assumes a / separator
             length = len(d)
             return len(localdir_s) > length and localdir_s[-length:] == d
 
             length = len(d)
             return len(localdir_s) > length and localdir_s[-length:] == d
 
@@ -180,43 +189,45 @@ class VPPApiJSONFiles:
             'variant'  (typically '' or '_debug')"""
             # Since 'core' and 'plugin' files are staged
             # in separate directories, we target the parent dir.
             'variant'  (typically '' or '_debug')"""
             # Since 'core' and 'plugin' files are staged
             # in separate directories, we target the parent dir.
-            return os.path.sep.join((
-                srcdir,
-                'build-root',
-                'install-vpp%s-native' % variant,
-                'vpp',
-                'share',
-                'vpp',
-                'api',
-            ))
+            return os.path.sep.join(
+                (
+                    srcdir,
+                    "build-root",
+                    "install-vpp%s-native" % variant,
+                    "vpp",
+                    "share",
+                    "vpp",
+                    "api",
+                )
+            )
 
         srcdir = None
 
         srcdir = None
-        if dmatch('src/scripts'):
+        if dmatch("src/scripts"):
             srcdir = os.path.sep.join(localdir_s[:-2])
             srcdir = os.path.sep.join(localdir_s[:-2])
-        elif dmatch('src/vpp-api/python'):
+        elif dmatch("src/vpp-api/python"):
             srcdir = os.path.sep.join(localdir_s[:-3])
             srcdir = os.path.sep.join(localdir_s[:-3])
-        elif dmatch('test'):
+        elif dmatch("test"):
             # we're apparently running tests
             srcdir = os.path.sep.join(localdir_s[:-1])
 
         if srcdir:
             # we're in the source tree, try both the debug and release
             # variants.
             # we're apparently running tests
             srcdir = os.path.sep.join(localdir_s[:-1])
 
         if srcdir:
             # we're in the source tree, try both the debug and release
             # variants.
-            dirs.append(sdir(srcdir, '_debug'))
-            dirs.append(sdir(srcdir, ''))
+            dirs.append(sdir(srcdir, "_debug"))
+            dirs.append(sdir(srcdir, ""))
 
         # Test for staged copies of the scripts
         # For these, since we explicitly know if we're running a debug versus
         # release variant, target only the relevant directory
 
         # Test for staged copies of the scripts
         # For these, since we explicitly know if we're running a debug versus
         # release variant, target only the relevant directory
-        if dmatch('build-root/install-vpp_debug-native/vpp/bin'):
+        if dmatch("build-root/install-vpp_debug-native/vpp/bin"):
             srcdir = os.path.sep.join(localdir_s[:-4])
             srcdir = os.path.sep.join(localdir_s[:-4])
-            dirs.append(sdir(srcdir, '_debug'))
-        if dmatch('build-root/install-vpp-native/vpp/bin'):
+            dirs.append(sdir(srcdir, "_debug"))
+        if dmatch("build-root/install-vpp-native/vpp/bin"):
             srcdir = os.path.sep.join(localdir_s[:-4])
             srcdir = os.path.sep.join(localdir_s[:-4])
-            dirs.append(sdir(srcdir, ''))
+            dirs.append(sdir(srcdir, ""))
 
         # finally, try the location system packages typically install into
 
         # finally, try the location system packages typically install into
-        dirs.append(os.path.sep.join(('', 'usr', 'share', 'vpp', 'api')))
+        dirs.append(os.path.sep.join(("", "usr", "share", "vpp", "api")))
 
         # check the directories for existence; first one wins
         for dir in dirs:
 
         # check the directories for existence; first one wins
         for dir in dirs:
@@ -226,7 +237,7 @@ class VPPApiJSONFiles:
         return None
 
     @classmethod
         return None
 
     @classmethod
-    def find_api_files(cls, api_dir=None, patterns='*'):  # -> list
+    def find_api_files(cls, api_dir=None, patterns="*"):  # -> list
         """Find API definition files from the given directory tree with the
         given pattern. If no directory is given then find_api_dir() is used
         to locate one. If no pattern is given then all definition files found
         """Find API definition files from the given directory tree with the
         given pattern. If no directory is given then find_api_dir() is used
         to locate one. If no pattern is given then all definition files found
@@ -252,9 +263,9 @@ class VPPApiJSONFiles:
                 raise VPPApiError("api_dir cannot be located")
 
         if isinstance(patterns, list) or isinstance(patterns, tuple):
                 raise VPPApiError("api_dir cannot be located")
 
         if isinstance(patterns, list) or isinstance(patterns, tuple):
-            patterns = [p.strip() + '.api.json' for p in patterns]
+            patterns = [p.strip() + ".api.json" for p in patterns]
         else:
         else:
-            patterns = [p.strip() + '.api.json' for p in patterns.split(",")]
+            patterns = [p.strip() + ".api.json" for p in patterns.split(",")]
 
         api_files = []
         for root, dirnames, files in os.walk(api_dir):
 
         api_files = []
         for root, dirnames, files in os.walk(api_dir):
@@ -281,39 +292,39 @@ class VPPApiJSONFiles:
         services = {}
         messages = {}
         try:
         services = {}
         messages = {}
         try:
-            for t in api['enums']:
-                t[0] = 'vl_api_' + t[0] + '_t'
-                types[t[0]] = {'type': 'enum', 'data': t}
+            for t in api["enums"]:
+                t[0] = "vl_api_" + t[0] + "_t"
+                types[t[0]] = {"type": "enum", "data": t}
         except KeyError:
             pass
         try:
         except KeyError:
             pass
         try:
-            for t in api['enumflags']:
-                t[0] = 'vl_api_' + t[0] + '_t'
-                types[t[0]] = {'type': 'enum', 'data': t}
+            for t in api["enumflags"]:
+                t[0] = "vl_api_" + t[0] + "_t"
+                types[t[0]] = {"type": "enum", "data": t}
         except KeyError:
             pass
         try:
         except KeyError:
             pass
         try:
-            for t in api['unions']:
-                t[0] = 'vl_api_' + t[0] + '_t'
-                types[t[0]] = {'type': 'union', 'data': t}
+            for t in api["unions"]:
+                t[0] = "vl_api_" + t[0] + "_t"
+                types[t[0]] = {"type": "union", "data": t}
         except KeyError:
             pass
 
         try:
         except KeyError:
             pass
 
         try:
-            for t in api['types']:
-                t[0] = 'vl_api_' + t[0] + '_t'
-                types[t[0]] = {'type': 'type', 'data': t}
+            for t in api["types"]:
+                t[0] = "vl_api_" + t[0] + "_t"
+                types[t[0]] = {"type": "type", "data": t}
         except KeyError:
             pass
 
         try:
         except KeyError:
             pass
 
         try:
-            for t, v in api['aliases'].items():
-                types['vl_api_' + t + '_t'] = {'type': 'alias', 'data': v}
+            for t, v in api["aliases"].items():
+                types["vl_api_" + t + "_t"] = {"type": "alias", "data": v}
         except KeyError:
             pass
 
         try:
         except KeyError:
             pass
 
         try:
-            services.update(api['services'])
+            services.update(api["services"])
         except KeyError:
             pass
 
         except KeyError:
             pass
 
@@ -321,30 +332,30 @@ class VPPApiJSONFiles:
         while True:
             unresolved = {}
             for k, v in types.items():
         while True:
             unresolved = {}
             for k, v in types.items():
-                t = v['data']
+                t = v["data"]
                 if not vpp_get_type(k):
                 if not vpp_get_type(k):
-                    if v['type'] == 'enum':
+                    if v["type"] == "enum":
                         try:
                             VPPEnumType(t[0], t[1:])
                         except ValueError:
                             unresolved[k] = v
                 if not vpp_get_type(k):
                         try:
                             VPPEnumType(t[0], t[1:])
                         except ValueError:
                             unresolved[k] = v
                 if not vpp_get_type(k):
-                    if v['type'] == 'enumflag':
+                    if v["type"] == "enumflag":
                         try:
                             VPPEnumFlagType(t[0], t[1:])
                         except ValueError:
                             unresolved[k] = v
                         try:
                             VPPEnumFlagType(t[0], t[1:])
                         except ValueError:
                             unresolved[k] = v
-                    elif v['type'] == 'union':
+                    elif v["type"] == "union":
                         try:
                             VPPUnionType(t[0], t[1:])
                         except ValueError:
                             unresolved[k] = v
                         try:
                             VPPUnionType(t[0], t[1:])
                         except ValueError:
                             unresolved[k] = v
-                    elif v['type'] == 'type':
+                    elif v["type"] == "type":
                         try:
                             VPPType(t[0], t[1:])
                         except ValueError:
                             unresolved[k] = v
                         try:
                             VPPType(t[0], t[1:])
                         except ValueError:
                             unresolved[k] = v
-                    elif v['type'] == 'alias':
+                    elif v["type"] == "alias":
                         try:
                             VPPTypeAlias(k, t)
                         except ValueError:
                         try:
                             VPPTypeAlias(k, t)
                         except ValueError:
@@ -352,17 +363,16 @@ class VPPApiJSONFiles:
             if len(unresolved) == 0:
                 break
             if i > 3:
             if len(unresolved) == 0:
                 break
             if i > 3:
-                raise VPPValueError('Unresolved type definitions {}'
-                                    .format(unresolved))
+                raise VPPValueError("Unresolved type definitions {}".format(unresolved))
             types = unresolved
             i += 1
         try:
             types = unresolved
             i += 1
         try:
-            for m in api['messages']:
+            for m in api["messages"]:
                 try:
                     messages[m[0]] = VPPMessage(m[0], m[1:])
                 except VPPNotImplementedError:
                     ### OLE FIXME
                 try:
                     messages[m[0]] = VPPMessage(m[0], m[1:])
                 except VPPNotImplementedError:
                     ### OLE FIXME
-                    logger.error('Not implemented error for {}'.format(m[0]))
+                    logger.error("Not implemented error for {}".format(m[0]))
         except KeyError:
             pass
         return messages, services
         except KeyError:
             pass
         return messages, services
@@ -380,6 +390,7 @@ class VPPApiClient:
     provides a means to register a callback function to receive
     these messages in a background thread.
     """
     provides a means to register a callback function to receive
     these messages in a background thread.
     """
+
     apidir = None
     VPPApiError = VPPApiError
     VPPRuntimeError = VPPRuntimeError
     apidir = None
     VPPApiError = VPPApiError
     VPPRuntimeError = VPPRuntimeError
@@ -387,11 +398,18 @@ class VPPApiClient:
     VPPNotImplementedError = VPPNotImplementedError
     VPPIOError = VPPIOError
 
     VPPNotImplementedError = VPPNotImplementedError
     VPPIOError = VPPIOError
 
-
-    def __init__(self, *, apifiles=None, testmode=False, async_thread=True,
-                 logger=None, loglevel=None,
-                 read_timeout=5, use_socket=True,
-                 server_address='/run/vpp/api.sock'):
+    def __init__(
+        self,
+        *,
+        apifiles=None,
+        testmode=False,
+        async_thread=True,
+        logger=None,
+        loglevel=None,
+        read_timeout=5,
+        use_socket=True,
+        server_address="/run/vpp/api.sock",
+    ):
         """Create a VPP API object.
 
         apifiles is a list of files containing API
         """Create a VPP API object.
 
         apifiles is a list of files containing API
@@ -406,7 +424,8 @@ class VPPApiClient:
         """
         if logger is None:
             logger = logging.getLogger(
         """
         if logger is None:
             logger = logging.getLogger(
-                "{}.{}".format(__name__, self.__class__.__name__))
+                "{}.{}".format(__name__, self.__class__.__name__)
+            )
             if loglevel is not None:
                 logger.setLevel(loglevel)
         self.logger = logger
             if loglevel is not None:
                 logger.setLevel(loglevel)
         self.logger = logger
@@ -415,8 +434,7 @@ class VPPApiClient:
         self.services = {}
         self.id_names = []
         self.id_msgdef = []
         self.services = {}
         self.id_names = []
         self.id_msgdef = []
-        self.header = VPPType('header', [['u16', 'msgid'],
-                                         ['u32', 'client_index']])
+        self.header = VPPType("header", [["u16", "msgid"], ["u32", "client_index"]])
         self.apifiles = []
         self.event_callback = None
         self.message_queue = queue.Queue()
         self.apifiles = []
         self.event_callback = None
         self.message_queue = queue.Queue()
@@ -449,13 +467,13 @@ class VPPApiClient:
 
         # Basic sanity check
         if len(self.messages) == 0 and not testmode:
 
         # Basic sanity check
         if len(self.messages) == 0 and not testmode:
-            raise VPPValueError(1, 'Missing JSON message definitions')
-        if not(verify_enum_hint(VppEnum.vl_api_address_family_t)):
-            raise VPPRuntimeError("Invalid address family hints. "
-                                  "Cannot continue.")
+            raise VPPValueError(1, "Missing JSON message definitions")
+        if not (verify_enum_hint(VppEnum.vl_api_address_family_t)):
+            raise VPPRuntimeError("Invalid address family hints. " "Cannot continue.")
 
 
-        self.transport = VppTransport(self, read_timeout=read_timeout,
-                                      server_address=server_address)
+        self.transport = VppTransport(
+            self, read_timeout=read_timeout, server_address=server_address
+        )
         # Make sure we allow VPP to clean up the message rings.
         atexit.register(vpp_atexit, weakref.ref(self))
 
         # Make sure we allow VPP to clean up the message rings.
         atexit.register(vpp_atexit, weakref.ref(self))
 
@@ -466,6 +484,7 @@ class VPPApiClient:
 
     class ContextId:
         """Multiprocessing-safe provider of unique context IDs."""
 
     class ContextId:
         """Multiprocessing-safe provider of unique context IDs."""
+
         def __init__(self):
             self.context = mp.Value(ctypes.c_uint, 0)
             self.lock = mp.Lock()
         def __init__(self):
             self.context = mp.Value(ctypes.c_uint, 0)
             self.lock = mp.Lock()
@@ -475,6 +494,7 @@ class VPPApiClient:
             with self.lock:
                 self.context.value += 1
                 return self.context.value
             with self.lock:
                 self.context.value += 1
                 return self.context.value
+
     get_context = ContextId()
 
     def get_type(self, name):
     get_context = ContextId()
 
     def get_type(self, name):
@@ -487,17 +507,20 @@ class VPPApiClient:
         return self._api
 
     def make_function(self, msg, i, multipart, do_async):
         return self._api
 
     def make_function(self, msg, i, multipart, do_async):
-        if (do_async):
+        if do_async:
+
             def f(**kwargs):
                 return self._call_vpp_async(i, msg, **kwargs)
             def f(**kwargs):
                 return self._call_vpp_async(i, msg, **kwargs)
+
         else:
         else:
+
             def f(**kwargs):
                 return self._call_vpp(i, msg, multipart, **kwargs)
 
         f.__name__ = str(msg.name)
             def f(**kwargs):
                 return self._call_vpp(i, msg, multipart, **kwargs)
 
         f.__name__ = str(msg.name)
-        f.__doc__ = ", ".join(["%s %s" %
-                               (msg.fieldtypes[j], k)
-                               for j, k in enumerate(msg.fields)])
+        f.__doc__ = ", ".join(
+            ["%s %s" % (msg.fieldtypes[j], k) for j, k in enumerate(msg.fields)]
+        )
         f.msg = msg
 
         return f
         f.msg = msg
 
         return f
@@ -507,7 +530,7 @@ class VPPApiClient:
         self.id_msgdef = [None] * (self.vpp_dictionary_maxid + 1)
         self._api = VppApiDynamicMethodHolder()
         for name, msg in self.messages.items():
         self.id_msgdef = [None] * (self.vpp_dictionary_maxid + 1)
         self._api = VppApiDynamicMethodHolder()
         for name, msg in self.messages.items():
-            n = name + '_' + msg.crc[2:]
+            n = name + "_" + msg.crc[2:]
             i = self.transport.get_msg_index(n)
             if i > 0:
                 self.id_msgdef[i] = msg
             i = self.transport.get_msg_index(n)
             if i > 0:
                 self.id_msgdef[i] = msg
@@ -518,28 +541,25 @@ class VPPApiClient:
                     f = self.make_function(msg, i, self.services[name], do_async)
                     setattr(self._api, name, FuncWrapper(f))
             else:
                     f = self.make_function(msg, i, self.services[name], do_async)
                     setattr(self._api, name, FuncWrapper(f))
             else:
-                self.logger.debug(
-                    'No such message type or failed CRC checksum: %s', n)
+                self.logger.debug("No such message type or failed CRC checksum: %s", n)
 
 
-    def connect_internal(self, name, msg_handler, chroot_prefix, rx_qlen,
-                         do_async):
-        pfx = chroot_prefix.encode('utf-8') if chroot_prefix else None
+    def connect_internal(self, name, msg_handler, chroot_prefix, rx_qlen, do_async):
+        pfx = chroot_prefix.encode("utf-8") if chroot_prefix else None
 
 
-        rv = self.transport.connect(name, pfx,
-                                    msg_handler, rx_qlen)
+        rv = self.transport.connect(name, pfx, msg_handler, rx_qlen)
         if rv != 0:
         if rv != 0:
-            raise VPPIOError(2, 'Connect failed')
+            raise VPPIOError(2, "Connect failed")
         self.vpp_dictionary_maxid = self.transport.msg_table_max_index()
         self._register_functions(do_async=do_async)
 
         # Initialise control ping
         self.vpp_dictionary_maxid = self.transport.msg_table_max_index()
         self._register_functions(do_async=do_async)
 
         # Initialise control ping
-        crc = self.messages['control_ping'].crc
+        crc = self.messages["control_ping"].crc
         self.control_ping_index = self.transport.get_msg_index(
         self.control_ping_index = self.transport.get_msg_index(
-            ('control_ping' + '_' + crc[2:]))
-        self.control_ping_msgdef = self.messages['control_ping']
+            ("control_ping" + "_" + crc[2:])
+        )
+        self.control_ping_msgdef = self.messages["control_ping"]
         if self.async_thread:
         if self.async_thread:
-            self.event_thread = threading.Thread(
-                target=self.thread_msg_handler)
+            self.event_thread = threading.Thread(target=self.thread_msg_handler)
             self.event_thread.daemon = True
             self.event_thread.start()
         else:
             self.event_thread.daemon = True
             self.event_thread.start()
         else:
@@ -556,8 +576,9 @@ class VPPApiClient:
         client and server.
         """
         msg_handler = self.transport.get_callback(do_async)
         client and server.
         """
         msg_handler = self.transport.get_callback(do_async)
-        return self.connect_internal(name, msg_handler, chroot_prefix, rx_qlen,
-                                     do_async)
+        return self.connect_internal(
+            name, msg_handler, chroot_prefix, rx_qlen, do_async
+        )
 
     def connect_sync(self, name, chroot_prefix=None, rx_qlen=32):
         """Attach to VPP in synchronous mode. Application must poll for events.
 
     def connect_sync(self, name, chroot_prefix=None, rx_qlen=32):
         """Attach to VPP in synchronous mode. Application must poll for events.
@@ -568,8 +589,7 @@ class VPPApiClient:
         client and server.
         """
 
         client and server.
         """
 
-        return self.connect_internal(name, None, chroot_prefix, rx_qlen,
-                                     do_async=False)
+        return self.connect_internal(name, None, chroot_prefix, rx_qlen, do_async=False)
 
     def disconnect(self):
         """Detach from VPP."""
 
     def disconnect(self):
         """Detach from VPP."""
@@ -590,42 +610,43 @@ class VPPApiClient:
         # If we have a context, then use the context to find any
         # request waiting for a reply
         context = 0
         # If we have a context, then use the context to find any
         # request waiting for a reply
         context = 0
-        if hasattr(r, 'context') and r.context > 0:
+        if hasattr(r, "context") and r.context > 0:
             context = r.context
 
         if context == 0:
             # No context -> async notification that we feed to the callback
             self.message_queue.put_nowait(r)
         else:
             context = r.context
 
         if context == 0:
             # No context -> async notification that we feed to the callback
             self.message_queue.put_nowait(r)
         else:
-            raise VPPIOError(2, 'RPC reply message received in event handler')
+            raise VPPIOError(2, "RPC reply message received in event handler")
 
     def has_context(self, msg):
         if len(msg) < 10:
             return False
 
 
     def has_context(self, msg):
         if len(msg) < 10:
             return False
 
-        header = VPPType('header_with_context', [['u16', 'msgid'],
-                                                 ['u32', 'client_index'],
-                                                 ['u32', 'context']])
+        header = VPPType(
+            "header_with_context",
+            [["u16", "msgid"], ["u32", "client_index"], ["u32", "context"]],
+        )
 
         (i, ci, context), size = header.unpack(msg, 0)
 
         (i, ci, context), size = header.unpack(msg, 0)
-        if self.id_names[i] == 'rx_thread_exit':
+        if self.id_names[i] == "rx_thread_exit":
             return
 
         #
         # Decode message and returns a tuple.
         #
         msgobj = self.id_msgdef[i]
             return
 
         #
         # Decode message and returns a tuple.
         #
         msgobj = self.id_msgdef[i]
-        if 'context' in msgobj.field_by_name and context >= 0:
+        if "context" in msgobj.field_by_name and context >= 0:
             return True
         return False
 
     def decode_incoming_msg(self, msg, no_type_conversion=False):
         if not msg:
             return True
         return False
 
     def decode_incoming_msg(self, msg, no_type_conversion=False):
         if not msg:
-            logger.warning('vpp_api.read failed')
+            logger.warning("vpp_api.read failed")
             return
 
         (i, ci), size = self.header.unpack(msg, 0)
             return
 
         (i, ci), size = self.header.unpack(msg, 0)
-        if self.id_names[i] == 'rx_thread_exit':
+        if self.id_names[i] == "rx_thread_exit":
             return
 
         #
             return
 
         #
@@ -633,7 +654,7 @@ class VPPApiClient:
         #
         msgobj = self.id_msgdef[i]
         if not msgobj:
         #
         msgobj = self.id_msgdef[i]
         if not msgobj:
-            raise VPPIOError(2, 'Reply message undefined')
+            raise VPPIOError(2, "Reply message undefined")
 
         r, size = msgobj.unpack(msg, ntc=no_type_conversion)
         return r
 
         r, size = msgobj.unpack(msg, ntc=no_type_conversion)
         return r
@@ -654,41 +675,39 @@ class VPPApiClient:
 
     def _control_ping(self, context):
         """Send a ping command."""
 
     def _control_ping(self, context):
         """Send a ping command."""
-        self._call_vpp_async(self.control_ping_index,
-                             self.control_ping_msgdef,
-                             context=context)
+        self._call_vpp_async(
+            self.control_ping_index, self.control_ping_msgdef, context=context
+        )
 
     def validate_args(self, msg, kwargs):
         d = set(kwargs.keys()) - set(msg.field_by_name.keys())
         if d:
 
     def validate_args(self, msg, kwargs):
         d = set(kwargs.keys()) - set(msg.field_by_name.keys())
         if d:
-            raise VPPValueError('Invalid argument {} to {}'
-                                .format(list(d), msg.name))
+            raise VPPValueError("Invalid argument {} to {}".format(list(d), msg.name))
 
     def _add_stat(self, name, ms):
         if not name in self.stats:
 
     def _add_stat(self, name, ms):
         if not name in self.stats:
-            self.stats[name] = {'max': ms, 'count': 1, 'avg': ms}
+            self.stats[name] = {"max": ms, "count": 1, "avg": ms}
         else:
         else:
-            if ms > self.stats[name]['max']:
-                self.stats[name]['max'] = ms
-            self.stats[name]['count'] += 1
-            n = self.stats[name]['count']
-            self.stats[name]['avg'] = self.stats[name]['avg'] * (n - 1) / n + ms / n
+            if ms > self.stats[name]["max"]:
+                self.stats[name]["max"] = ms
+            self.stats[name]["count"] += 1
+            n = self.stats[name]["count"]
+            self.stats[name]["avg"] = self.stats[name]["avg"] * (n - 1) / n + ms / n
 
     def get_stats(self):
 
     def get_stats(self):
-        s = '\n=== API PAPI STATISTICS ===\n'
-        s += '{:<30} {:>4} {:>6} {:>6}\n'.format('message', 'cnt', 'avg', 'max')
-        for n in sorted(self.stats.items(), key=lambda v: v[1]['avg'], reverse=True):
-            s += '{:<30} {:>4} {:>6.2f} {:>6.2f}\n'.format(n[0], n[1]['count'],
-                                                           n[1]['avg'], n[1]['max'])
+        s = "\n=== API PAPI STATISTICS ===\n"
+        s += "{:<30} {:>4} {:>6} {:>6}\n".format("message", "cnt", "avg", "max")
+        for n in sorted(self.stats.items(), key=lambda v: v[1]["avg"], reverse=True):
+            s += "{:<30} {:>4} {:>6.2f} {:>6.2f}\n".format(
+                n[0], n[1]["count"], n[1]["avg"], n[1]["max"]
+            )
         return s
 
     def get_field_options(self, msg, fld_name):
         # when there is an option, the msgdef has 3 elements.
         # ['u32', 'ring_size', {'default': 1024}]
         for _def in self.messages[msg].msgdef:
         return s
 
     def get_field_options(self, msg, fld_name):
         # when there is an option, the msgdef has 3 elements.
         # ['u32', 'ring_size', {'default': 1024}]
         for _def in self.messages[msg].msgdef:
-            if isinstance(_def, list) and \
-                    len(_def) == 3 and \
-                    _def[1] == fld_name:
+            if isinstance(_def, list) and len(_def) == 3 and _def[1] == fld_name:
                 return _def[2]
 
     def _call_vpp(self, i, msgdef, service, **kwargs):
                 return _def[2]
 
     def _call_vpp(self, i, msgdef, service, **kwargs):
@@ -707,25 +726,26 @@ class VPPApiClient:
         no response within the timeout window.
         """
         ts = time.time()
         no response within the timeout window.
         """
         ts = time.time()
-        if 'context' not in kwargs:
+        if "context" not in kwargs:
             context = self.get_context()
             context = self.get_context()
-            kwargs['context'] = context
+            kwargs["context"] = context
         else:
         else:
-            context = kwargs['context']
-        kwargs['_vl_msg_id'] = i
+            context = kwargs["context"]
+        kwargs["_vl_msg_id"] = i
 
 
-        no_type_conversion = kwargs.pop('_no_type_conversion', False)
-        timeout = kwargs.pop('_timeout', None)
+        no_type_conversion = kwargs.pop("_no_type_conversion", False)
+        timeout = kwargs.pop("_timeout", None)
 
         try:
             if self.transport.socket_index:
 
         try:
             if self.transport.socket_index:
-                kwargs['client_index'] = self.transport.socket_index
+                kwargs["client_index"] = self.transport.socket_index
         except AttributeError:
             pass
         self.validate_args(msgdef, kwargs)
 
         except AttributeError:
             pass
         self.validate_args(msgdef, kwargs)
 
-        s = 'Calling {}({})'.format(msgdef.name,
-            ','.join(['{!r}:{!r}'.format(k, v) for k, v in kwargs.items()]))
+        s = "Calling {}({})".format(
+            msgdef.name, ",".join(["{!r}:{!r}".format(k, v) for k, v in kwargs.items()])
+        )
         self.logger.debug(s)
 
         b = msgdef.pack(kwargs)
         self.logger.debug(s)
 
         b = msgdef.pack(kwargs)
@@ -733,17 +753,17 @@ class VPPApiClient:
 
         self.transport.write(b)
 
 
         self.transport.write(b)
 
-        msgreply = service['reply']
-        stream = True if 'stream' in service else False
+        msgreply = service["reply"]
+        stream = True if "stream" in service else False
         if stream:
         if stream:
-            if 'stream_msg' in service:
+            if "stream_msg" in service:
                 # New service['reply'] = _reply and service['stream_message'] = _details
                 # New service['reply'] = _reply and service['stream_message'] = _details
-                stream_message = service['stream_msg']
-                modern =True
+                stream_message = service["stream_msg"]
+                modern = True
             else:
                 # Old  service['reply'] = _details
                 stream_message = msgreply
             else:
                 # Old  service['reply'] = _details
                 stream_message = msgreply
-                msgreply = 'control_ping_reply'
+                msgreply = "control_ping_reply"
                 modern = False
                 # Send a ping after the request - we use its response
                 # to detect that we have seen all results.
                 modern = False
                 # Send a ping after the request - we use its response
                 # to detect that we have seen all results.
@@ -751,22 +771,22 @@ class VPPApiClient:
 
         # Block until we get a reply.
         rl = []
 
         # Block until we get a reply.
         rl = []
-        while (True):
+        while True:
             r = self.read_blocking(no_type_conversion, timeout)
             if r is None:
             r = self.read_blocking(no_type_conversion, timeout)
             if r is None:
-                raise VPPIOError(2, 'VPP API client: read failed')
+                raise VPPIOError(2, "VPP API client: read failed")
             msgname = type(r).__name__
             if context not in r or r.context == 0 or context != r.context:
                 # Message being queued
                 self.message_queue.put_nowait(r)
                 continue
             if msgname != msgreply and (stream and (msgname != stream_message)):
             msgname = type(r).__name__
             if context not in r or r.context == 0 or context != r.context:
                 # Message being queued
                 self.message_queue.put_nowait(r)
                 continue
             if msgname != msgreply and (stream and (msgname != stream_message)):
-                print('REPLY MISMATCH', msgreply, msgname, stream_message, stream)
+                print("REPLY MISMATCH", msgreply, msgname, stream_message, stream)
             if not stream:
                 rl = r
                 break
             if msgname == msgreply:
             if not stream:
                 rl = r
                 break
             if msgname == msgreply:
-                if modern: # Return both reply and list
+                if modern:  # Return both reply and list
                     rl = r, rl
                 break
 
                     rl = r, rl
                 break
 
@@ -774,7 +794,7 @@ class VPPApiClient:
 
         self.transport.resume()
 
 
         self.transport.resume()
 
-        s = 'Return value: {!r}'.format(r)
+        s = "Return value: {!r}".format(r)
         if len(s) > 80:
             s = s[:80] + "..."
         self.logger.debug(s)
         if len(s) > 80:
             s = s[:80] + "..."
         self.logger.debug(s)
@@ -795,17 +815,17 @@ class VPPApiClient:
         The returned context will help with assigning which call
         the reply belongs to.
         """
         The returned context will help with assigning which call
         the reply belongs to.
         """
-        if 'context' not in kwargs:
+        if "context" not in kwargs:
             context = self.get_context()
             context = self.get_context()
-            kwargs['context'] = context
+            kwargs["context"] = context
         else:
         else:
-            context = kwargs['context']
+            context = kwargs["context"]
         try:
             if self.transport.socket_index:
         try:
             if self.transport.socket_index:
-                kwargs['client_index'] = self.transport.socket_index
+                kwargs["client_index"] = self.transport.socket_index
         except AttributeError:
         except AttributeError:
-            kwargs['client_index'] = 0
-        kwargs['_vl_msg_id'] = i
+            kwargs["client_index"] = 0
+        kwargs["_vl_msg_id"] = i
         b = msg.pack(kwargs)
 
         self.transport.write(b)
         b = msg.pack(kwargs)
 
         self.transport.write(b)
@@ -891,26 +911,34 @@ class VPPApiClient:
         """Return VPPs API message table as name_crc dictionary,
         filtered by message name list."""
 
         """Return VPPs API message table as name_crc dictionary,
         filtered by message name list."""
 
-        replies = [self.services[n]['reply'] for n in msglist]
+        replies = [self.services[n]["reply"] for n in msglist]
         message_table_filtered = {}
         for name in msglist + replies:
         message_table_filtered = {}
         for name in msglist + replies:
-            for k,v in self.transport.message_table.items():
+            for k, v in self.transport.message_table.items():
                 if k.startswith(name):
                     message_table_filtered[k] = v
                     break
         return message_table_filtered
 
     def __repr__(self):
                 if k.startswith(name):
                     message_table_filtered[k] = v
                     break
         return message_table_filtered
 
     def __repr__(self):
-        return "<VPPApiClient apifiles=%s, testmode=%s, async_thread=%s, " \
-               "logger=%s, read_timeout=%s, " \
-               "server_address='%s'>" % (
-                   self._apifiles, self.testmode, self.async_thread,
-                   self.logger, self.read_timeout, self.server_address)
+        return (
+            "<VPPApiClient apifiles=%s, testmode=%s, async_thread=%s, "
+            "logger=%s, read_timeout=%s, "
+            "server_address='%s'>"
+            % (
+                self._apifiles,
+                self.testmode,
+                self.async_thread,
+                self.logger,
+                self.read_timeout,
+                self.server_address,
+            )
+        )
 
     def details_iter(self, f, **kwargs):
         cursor = 0
         while True:
 
     def details_iter(self, f, **kwargs):
         cursor = 0
         while True:
-            kwargs['cursor'] = cursor
+            kwargs["cursor"] = cursor
             rv, details = f(**kwargs)
             for d in details:
                 yield d
             rv, details = f(**kwargs)
             for d in details:
                 yield d
index 644aeac..a99e16a 100644 (file)
@@ -27,7 +27,7 @@ from . import vpp_format
 # logger = logging.getLogger('vpp_serializer')
 # logger.setLevel(logging.DEBUG)
 #
 # logger = logging.getLogger('vpp_serializer')
 # logger.setLevel(logging.DEBUG)
 #
-logger = logging.getLogger('vpp_papi.serializer')
+logger = logging.getLogger("vpp_papi.serializer")
 
 
 def check(d):
 
 
 def check(d):
@@ -46,8 +46,7 @@ def conversion_required(data, field_type):
 
 def conversion_packer(data, field_type):
     t = type(data).__name__
 
 def conversion_packer(data, field_type):
     t = type(data).__name__
-    return types[field_type].pack(vpp_format.
-                                  conversion_table[field_type][t](data))
+    return types[field_type].pack(vpp_format.conversion_table[field_type][t](data))
 
 
 def conversion_unpacker(data, field_type):
 
 
 def conversion_unpacker(data, field_type):
@@ -77,30 +76,33 @@ class Packer:
                 return c._get_packer_with_options(f_type, options)
             except IndexError:
                 raise VPPSerializerValueError(
                 return c._get_packer_with_options(f_type, options)
             except IndexError:
                 raise VPPSerializerValueError(
-                    "Options not supported for {}{} ({})".
-                    format(f_type, types[f_type].__class__,
-                           options))
+                    "Options not supported for {}{} ({})".format(
+                        f_type, types[f_type].__class__, options
+                    )
+                )
 
 
 class BaseTypes(Packer):
     def __init__(self, type, elements=0, options=None):
         self._type = type
         self._elements = elements
 
 
 class BaseTypes(Packer):
     def __init__(self, type, elements=0, options=None):
         self._type = type
         self._elements = elements
-        base_types = {'u8': '>B',
-                      'i8': '>b',
-                      'string': '>s',
-                      'u16': '>H',
-                      'i16': '>h',
-                      'u32': '>I',
-                      'i32': '>i',
-                      'u64': '>Q',
-                      'i64': '>q',
-                      'f64': '=d',
-                      'bool': '>?',
-                      'header': '>HI'}
-
-        if elements > 0 and (type == 'u8' or type == 'string'):
-            self.packer = struct.Struct('>%ss' % elements)
+        base_types = {
+            "u8": ">B",
+            "i8": ">b",
+            "string": ">s",
+            "u16": ">H",
+            "i16": ">h",
+            "u32": ">I",
+            "i32": ">i",
+            "u64": ">Q",
+            "i64": ">q",
+            "f64": "=d",
+            "bool": ">?",
+            "header": ">HI",
+        }
+
+        if elements > 0 and (type == "u8" or type == "string"):
+            self.packer = struct.Struct(">%ss" % elements)
         else:
             self.packer = struct.Struct(base_types[type])
         self.size = self.packer.size
         else:
             self.packer = struct.Struct(base_types[type])
         self.size = self.packer.size
@@ -108,8 +110,8 @@ class BaseTypes(Packer):
 
     def pack(self, data, kwargs=None):
         if data is None:  # Default to zero if not specified
 
     def pack(self, data, kwargs=None):
         if data is None:  # Default to zero if not specified
-            if self.options and 'default' in self.options:
-                data = self.options['default']
+            if self.options and "default" in self.options:
+                data = self.options["default"]
             else:
                 data = 0
         return self.packer.pack(data)
             else:
                 data = 0
         return self.packer.pack(data)
@@ -122,9 +124,11 @@ class BaseTypes(Packer):
         return BaseTypes(f_type, options=options)
 
     def __repr__(self):
         return BaseTypes(f_type, options=options)
 
     def __repr__(self):
-        return "BaseTypes(type=%s, elements=%s, options=%s)" % (self._type,
-                                                                self._elements,
-                                                                self.options)
+        return "BaseTypes(type=%s, elements=%s, options=%s)" % (
+            self._type,
+            self._elements,
+            self.options,
+        )
 
 
 class String(Packer):
 
 
 class String(Packer):
@@ -132,13 +136,15 @@ class String(Packer):
         self.name = name
         self.num = num
         self.size = 1
         self.name = name
         self.num = num
         self.size = 1
-        self.length_field_packer = BaseTypes('u32')
-        self.limit = options['limit'] if 'limit' in options else num
+        self.length_field_packer = BaseTypes("u32")
+        self.limit = options["limit"] if "limit" in options else num
         self.fixed = True if num else False
         if self.fixed and not self.limit:
             raise VPPSerializerValueError(
         self.fixed = True if num else False
         if self.fixed and not self.limit:
             raise VPPSerializerValueError(
-                "Invalid combination for: {}, {} fixed:{} limit:{}".
-                format(name, options, self.fixed, self.limit))
+                "Invalid combination for: {}, {} fixed:{} limit:{}".format(
+                    name, options, self.fixed, self.limit
+                )
+            )
 
     def pack(self, list, kwargs=None):
         if not list:
 
     def pack(self, list, kwargs=None):
         if not list:
@@ -147,34 +153,42 @@ class String(Packer):
             return self.length_field_packer.pack(0) + b""
         if self.limit and len(list) > self.limit - 1:
             raise VPPSerializerValueError(
             return self.length_field_packer.pack(0) + b""
         if self.limit and len(list) > self.limit - 1:
             raise VPPSerializerValueError(
-                "Invalid argument length for: {}, {} maximum {}".
-                format(list, len(list), self.limit - 1))
+                "Invalid argument length for: {}, {} maximum {}".format(
+                    list, len(list), self.limit - 1
+                )
+            )
         if self.fixed:
         if self.fixed:
-            return list.encode('ascii').ljust(self.limit, b'\x00')
-        return self.length_field_packer.pack(len(list)) + list.encode('ascii')
+            return list.encode("ascii").ljust(self.limit, b"\x00")
+        return self.length_field_packer.pack(len(list)) + list.encode("ascii")
 
     def unpack(self, data, offset=0, result=None, ntc=False):
         if self.fixed:
 
     def unpack(self, data, offset=0, result=None, ntc=False):
         if self.fixed:
-            p = BaseTypes('u8', self.num)
+            p = BaseTypes("u8", self.num)
             s = p.unpack(data, offset)
             s = p.unpack(data, offset)
-            s2 = s[0].split(b'\0', 1)[0]
-            return (s2.decode('ascii'), self.num)
+            s2 = s[0].split(b"\0", 1)[0]
+            return (s2.decode("ascii"), self.num)
 
 
-        length, length_field_size = self.length_field_packer.unpack(data,
-                                                                    offset)
+        length, length_field_size = self.length_field_packer.unpack(data, offset)
         if length == 0:
         if length == 0:
-            return '', 0
-        p = BaseTypes('u8', length)
+            return "", 0
+        p = BaseTypes("u8", length)
         x, size = p.unpack(data, offset + length_field_size)
         x, size = p.unpack(data, offset + length_field_size)
-        return (x.decode('ascii', errors='replace'), size + length_field_size)
-
-
-types = {'u8': BaseTypes('u8'), 'i8': BaseTypes('i8'),
-         'u16': BaseTypes('u16'), 'i16': BaseTypes('i16'),
-         'u32': BaseTypes('u32'), 'i32': BaseTypes('i32'),
-         'u64': BaseTypes('u64'), 'i64': BaseTypes('i64'),
-         'f64': BaseTypes('f64'),
-         'bool': BaseTypes('bool'), 'string': String}
+        return (x.decode("ascii", errors="replace"), size + length_field_size)
+
+
+types = {
+    "u8": BaseTypes("u8"),
+    "i8": BaseTypes("i8"),
+    "u16": BaseTypes("u16"),
+    "i16": BaseTypes("i16"),
+    "u32": BaseTypes("u32"),
+    "i32": BaseTypes("i32"),
+    "u64": BaseTypes("u64"),
+    "i64": BaseTypes("i64"),
+    "f64": BaseTypes("f64"),
+    "bool": BaseTypes("bool"),
+    "string": String,
+}
 
 class_types = {}
 
 
 class_types = {}
 
@@ -202,32 +216,34 @@ class FixedList_u8(Packer):
         """Packs a fixed length bytestring. Left-pads with zeros
         if input data is too short."""
         if not data:
         """Packs a fixed length bytestring. Left-pads with zeros
         if input data is too short."""
         if not data:
-            return b'\x00' * self.size
+            return b"\x00" * self.size
 
         if len(data) > self.num:
             raise VPPSerializerValueError(
                 'Fixed list length error for "{}", got: {}'
 
         if len(data) > self.num:
             raise VPPSerializerValueError(
                 'Fixed list length error for "{}", got: {}'
-                ' expected: {}'
-                .format(self.name, len(data), self.num))
+                " expected: {}".format(self.name, len(data), self.num)
+            )
 
         try:
             return self.packer.pack(data)
         except struct.error:
             raise VPPSerializerValueError(
 
         try:
             return self.packer.pack(data)
         except struct.error:
             raise VPPSerializerValueError(
-                'Packing failed for "{}" {}'
-                .format(self.name, kwargs))
+                'Packing failed for "{}" {}'.format(self.name, kwargs)
+            )
 
     def unpack(self, data, offset=0, result=None, ntc=False):
         if len(data[offset:]) < self.num:
             raise VPPSerializerValueError(
                 'Invalid array length for "{}" got {}'
 
     def unpack(self, data, offset=0, result=None, ntc=False):
         if len(data[offset:]) < self.num:
             raise VPPSerializerValueError(
                 'Invalid array length for "{}" got {}'
-                ' expected {}'
-                .format(self.name, len(data[offset:]), self.num))
+                " expected {}".format(self.name, len(data[offset:]), self.num)
+            )
         return self.packer.unpack(data, offset)
 
     def __repr__(self):
         return "FixedList_u8(name=%s, field_type=%s, num=%s)" % (
         return self.packer.unpack(data, offset)
 
     def __repr__(self):
         return "FixedList_u8(name=%s, field_type=%s, num=%s)" % (
-            self.name, self.field_type, self.num
+            self.name,
+            self.field_type,
+            self.num,
         )
 
 
         )
 
 
@@ -242,8 +258,10 @@ class FixedList(Packer):
     def pack(self, list, kwargs):
         if len(list) != self.num:
             raise VPPSerializerValueError(
     def pack(self, list, kwargs):
         if len(list) != self.num:
             raise VPPSerializerValueError(
-                'Fixed list length error, got: {} expected: {}'
-                .format(len(list), self.num))
+                "Fixed list length error, got: {} expected: {}".format(
+                    len(list), self.num
+                )
+            )
         b = bytes()
         for e in list:
             b += self.packer.pack(e)
         b = bytes()
         for e in list:
             b += self.packer.pack(e)
@@ -262,7 +280,10 @@ class FixedList(Packer):
 
     def __repr__(self):
         return "FixedList(name=%s, field_type=%s, num=%s)" % (
 
     def __repr__(self):
         return "FixedList(name=%s, field_type=%s, num=%s)" % (
-            self.name, self.field_type, self.num)
+            self.name,
+            self.field_type,
+            self.num,
+        )
 
 
 class VLAList(Packer):
 
 
 class VLAList(Packer):
@@ -279,13 +300,15 @@ class VLAList(Packer):
             return b""
         if len(lst) != kwargs[self.length_field]:
             raise VPPSerializerValueError(
             return b""
         if len(lst) != kwargs[self.length_field]:
             raise VPPSerializerValueError(
-                'Variable length error, got: {} expected: {}'
-                .format(len(lst), kwargs[self.length_field]))
+                "Variable length error, got: {} expected: {}".format(
+                    len(lst), kwargs[self.length_field]
+                )
+            )
 
         # u8 array
         if self.packer.size == 1:
             if isinstance(lst, list):
 
         # u8 array
         if self.packer.size == 1:
             if isinstance(lst, list):
-                return b''.join(lst)
+                return b"".join(lst)
             return bytes(lst)
 
         b = bytes()
             return bytes(lst)
 
         b = bytes()
@@ -300,8 +323,8 @@ class VLAList(Packer):
         # u8 array
         if self.packer.size == 1:
             if result[self.index] == 0:
         # u8 array
         if self.packer.size == 1:
             if result[self.index] == 0:
-                return b'', 0
-            p = BaseTypes('u8', result[self.index])
+                return b"", 0
+            p = BaseTypes("u8", result[self.index])
             return p.unpack(data, offset, ntc=ntc)
 
         r = []
             return p.unpack(data, offset, ntc=ntc)
 
         r = []
@@ -313,10 +336,12 @@ class VLAList(Packer):
         return r, total
 
     def __repr__(self):
         return r, total
 
     def __repr__(self):
-        return "VLAList(name=%s, field_type=%s, " \
-               "len_field_name=%s, index=%s)" % (
-                   self.name, self.field_type, self.length_field, self.index
-               )
+        return "VLAList(name=%s, field_type=%s, " "len_field_name=%s, index=%s)" % (
+            self.name,
+            self.field_type,
+            self.length_field,
+            self.index,
+        )
 
 
 class VLAList_legacy(Packer):
 
 
 class VLAList_legacy(Packer):
@@ -340,7 +365,8 @@ class VLAList_legacy(Packer):
         # Return a list of arguments
         if (len(data) - offset) % self.packer.size:
             raise VPPSerializerValueError(
         # Return a list of arguments
         if (len(data) - offset) % self.packer.size:
             raise VPPSerializerValueError(
-                'Legacy Variable Length Array length mismatch.')
+                "Legacy Variable Length Array length mismatch."
+            )
         elements = int((len(data) - offset) / self.packer.size)
         r = []
         for e in range(elements):
         elements = int((len(data) - offset) / self.packer.size)
         r = []
         for e in range(elements):
@@ -351,9 +377,7 @@ class VLAList_legacy(Packer):
         return r, total
 
     def __repr__(self):
         return r, total
 
     def __repr__(self):
-        return "VLAList_legacy(name=%s, field_type=%s)" % (
-            self.name, self.field_type
-        )
+        return "VLAList_legacy(name=%s, field_type=%s)" % (self.name, self.field_type)
 
 
 # Will change to IntEnum after 21.04 release
 
 
 # Will change to IntEnum after 21.04 release
@@ -361,16 +385,16 @@ class VPPEnumType(Packer):
     output_class = IntFlag
 
     def __init__(self, name, msgdef, options=None):
     output_class = IntFlag
 
     def __init__(self, name, msgdef, options=None):
-        self.size = types['u32'].size
+        self.size = types["u32"].size
         self.name = name
         self.name = name
-        self.enumtype = 'u32'
+        self.enumtype = "u32"
         self.msgdef = msgdef
         e_hash = {}
         for f in msgdef:
         self.msgdef = msgdef
         e_hash = {}
         for f in msgdef:
-            if type(f) is dict and 'enumtype' in f:
-                if f['enumtype'] != 'u32':
-                    self.size = types[f['enumtype']].size
-                    self.enumtype = f['enumtype']
+            if type(f) is dict and "enumtype" in f:
+                if f["enumtype"] != "u32":
+                    self.size = types[f["enumtype"]].size
+                    self.enumtype = f["enumtype"]
                 continue
             ename, evalue = f
             e_hash[ename] = evalue
                 continue
             ename, evalue = f
             e_hash[ename] = evalue
@@ -387,8 +411,8 @@ class VPPEnumType(Packer):
 
     def pack(self, data, kwargs=None):
         if data is None:  # Default to zero if not specified
 
     def pack(self, data, kwargs=None):
         if data is None:  # Default to zero if not specified
-            if self.options and 'default' in self.options:
-                data = self.options['default']
+            if self.options and "default" in self.options:
+                data = self.options["default"]
             else:
                 data = 0
 
             else:
                 data = 0
 
@@ -404,7 +428,10 @@ class VPPEnumType(Packer):
 
     def __repr__(self):
         return "%s(name=%s, msgdef=%s, options=%s)" % (
 
     def __repr__(self):
         return "%s(name=%s, msgdef=%s, options=%s)" % (
-            self.__class__.__name__, self.name, self.msgdef, self.options
+            self.__class__.__name__,
+            self.name,
+            self.msgdef,
+            self.options,
         )
 
 
         )
 
 
@@ -424,14 +451,13 @@ class VPPUnionType(Packer):
         fields = []
         self.packers = collections.OrderedDict()
         for i, f in enumerate(msgdef):
         fields = []
         self.packers = collections.OrderedDict()
         for i, f in enumerate(msgdef):
-            if type(f) is dict and 'crc' in f:
-                self.crc = f['crc']
+            if type(f) is dict and "crc" in f:
+                self.crc = f["crc"]
                 continue
             f_type, f_name = f
             if f_type not in types:
                 continue
             f_type, f_name = f
             if f_type not in types:
-                logger.debug('Unknown union type {}'.format(f_type))
-                raise VPPSerializerValueError(
-                    'Unknown message type {}'.format(f_type))
+                logger.debug("Unknown union type {}".format(f_type))
+                raise VPPSerializerValueError("Unknown message type {}".format(f_type))
             fields.append(f_name)
             size = types[f_type].size
             self.packers[f_name] = types[f_type]
             fields.append(f_name)
             size = types[f_type].size
             self.packers[f_name] = types[f_type]
@@ -445,14 +471,14 @@ class VPPUnionType(Packer):
     # Union of variable length?
     def pack(self, data, kwargs=None):
         if not data:
     # Union of variable length?
     def pack(self, data, kwargs=None):
         if not data:
-            return b'\x00' * self.size
+            return b"\x00" * self.size
 
         for k, v in data.items():
             logger.debug("Key: {} Value: {}".format(k, v))
             b = self.packers[k].pack(v, kwargs)
             break
         r = bytearray(self.size)
 
         for k, v in data.items():
             logger.debug("Key: {} Value: {}".format(k, v))
             b = self.packers[k].pack(v, kwargs)
             break
         r = bytearray(self.size)
-        r[:len(b)] = b
+        r[: len(b)] = b
         return r
 
     def unpack(self, data, offset=0, result=None, ntc=False):
         return r
 
     def unpack(self, data, offset=0, result=None, ntc=False):
@@ -466,25 +492,24 @@ class VPPUnionType(Packer):
         return self.tuple._make(r), maxsize
 
     def __repr__(self):
         return self.tuple._make(r), maxsize
 
     def __repr__(self):
-        return"VPPUnionType(name=%s, msgdef=%r)" % (self.name, self.msgdef)
+        return "VPPUnionType(name=%s, msgdef=%r)" % (self.name, self.msgdef)
 
 
 class VPPTypeAlias(Packer):
     def __init__(self, name, msgdef, options=None):
         self.name = name
         self.msgdef = msgdef
 
 
 class VPPTypeAlias(Packer):
     def __init__(self, name, msgdef, options=None):
         self.name = name
         self.msgdef = msgdef
-        t = vpp_get_type(msgdef['type'])
+        t = vpp_get_type(msgdef["type"])
         if not t:
         if not t:
-            raise ValueError('No such type: {}'.format(msgdef['type']))
-        if 'length' in msgdef:
-            if msgdef['length'] == 0:
+            raise ValueError("No such type: {}".format(msgdef["type"]))
+        if "length" in msgdef:
+            if msgdef["length"] == 0:
                 raise ValueError()
                 raise ValueError()
-            if msgdef['type'] == 'u8':
-                self.packer = FixedList_u8(name, msgdef['type'],
-                                           msgdef['length'])
+            if msgdef["type"] == "u8":
+                self.packer = FixedList_u8(name, msgdef["type"], msgdef["length"])
                 self.size = self.packer.size
             else:
                 self.size = self.packer.size
             else:
-                self.packer = FixedList(name, msgdef['type'], msgdef['length'])
+                self.packer = FixedList(name, msgdef["type"], msgdef["length"])
         else:
             self.packer = t
             self.size = t.size
         else:
             self.packer = t
             self.size = t.size
@@ -498,11 +523,11 @@ class VPPTypeAlias(Packer):
             try:
                 return conversion_packer(data, self.name)
             # Python 2 and 3 raises different exceptions from inet_pton
             try:
                 return conversion_packer(data, self.name)
             # Python 2 and 3 raises different exceptions from inet_pton
-            except(OSError, socket.error, TypeError):
+            except (OSError, socket.error, TypeError):
                 pass
         if data is None:  # Default to zero if not specified
                 pass
         if data is None:  # Default to zero if not specified
-            if self.options and 'default' in self.options:
-                data = self.options['default']
+            if self.options and "default" in self.options:
+                data = self.options["default"]
             else:
                 data = 0
 
             else:
                 data = 0
 
@@ -525,7 +550,10 @@ class VPPTypeAlias(Packer):
 
     def __repr__(self):
         return "VPPTypeAlias(name=%s, msgdef=%s, options=%s)" % (
 
     def __repr__(self):
         return "VPPTypeAlias(name=%s, msgdef=%s, options=%s)" % (
-            self.name, self.msgdef, self.options)
+            self.name,
+            self.msgdef,
+            self.options,
+        )
 
 
 class VPPType(Packer):
 
 
 class VPPType(Packer):
@@ -539,17 +567,16 @@ class VPPType(Packer):
         self.field_by_name = {}
         size = 0
         for i, f in enumerate(msgdef):
         self.field_by_name = {}
         size = 0
         for i, f in enumerate(msgdef):
-            if type(f) is dict and 'crc' in f:
-                self.crc = f['crc']
+            if type(f) is dict and "crc" in f:
+                self.crc = f["crc"]
                 continue
             f_type, f_name = f[:2]
             self.fields.append(f_name)
             self.field_by_name[f_name] = None
             self.fieldtypes.append(f_type)
             if f_type not in types:
                 continue
             f_type, f_name = f[:2]
             self.fields.append(f_name)
             self.field_by_name[f_name] = None
             self.fieldtypes.append(f_type)
             if f_type not in types:
-                logger.debug('Unknown type {}'.format(f_type))
-                raise VPPSerializerValueError(
-                    'Unknown message type {}'.format(f_type))
+                logger.debug("Unknown type {}".format(f_type))
+                raise VPPSerializerValueError("Unknown message type {}".format(f_type))
 
             fieldlen = len(f)
             options = [x for x in f if type(x) is dict]
 
             fieldlen = len(f)
             options = [x for x in f if type(x) is dict]
@@ -561,16 +588,16 @@ class VPPType(Packer):
             if fieldlen == 3:  # list
                 list_elements = f[2]
                 if list_elements == 0:
             if fieldlen == 3:  # list
                 list_elements = f[2]
                 if list_elements == 0:
-                    if f_type == 'string':
+                    if f_type == "string":
                         p = String(f_name, 0, self.options)
                     else:
                         p = VLAList_legacy(f_name, f_type)
                     self.packers.append(p)
                         p = String(f_name, 0, self.options)
                     else:
                         p = VLAList_legacy(f_name, f_type)
                     self.packers.append(p)
-                elif f_type == 'u8':
+                elif f_type == "u8":
                     p = FixedList_u8(f_name, f_type, list_elements)
                     self.packers.append(p)
                     size += p.size
                     p = FixedList_u8(f_name, f_type, list_elements)
                     self.packers.append(p)
                     size += p.size
-                elif f_type == 'string':
+                elif f_type == "string":
                     p = String(f_name, list_elements, self.options)
                     self.packers.append(p)
                     size += p.size
                     p = String(f_name, list_elements, self.options)
                     self.packers.append(p)
                     size += p.size
@@ -584,7 +611,7 @@ class VPPType(Packer):
                 self.packers.append(p)
             else:
                 # default support for types that decay to basetype
                 self.packers.append(p)
             else:
                 # default support for types that decay to basetype
-                if 'default' in self.options:
+                if "default" in self.options:
                     p = self.get_packer_with_options(f_type, self.options)
                 else:
                     p = types[f_type]
                     p = self.get_packer_with_options(f_type, self.options)
                 else:
                     p = types[f_type]
@@ -609,8 +636,8 @@ class VPPType(Packer):
         for i, a in enumerate(self.fields):
             if data and type(data) is not dict and a not in data:
                 raise VPPSerializerValueError(
         for i, a in enumerate(self.fields):
             if data and type(data) is not dict and a not in data:
                 raise VPPSerializerValueError(
-                    "Invalid argument: {} expected {}.{}".
-                    format(data, self.name, a))
+                    "Invalid argument: {} expected {}.{}".format(data, self.name, a)
+                )
 
             # Defaulting to zero.
             if not data or a not in data:  # Default to 0
 
             # Defaulting to zero.
             if not data or a not in data:  # Default to 0
@@ -651,7 +678,9 @@ class VPPType(Packer):
 
     def __repr__(self):
         return "%s(name=%s, msgdef=%s)" % (
 
     def __repr__(self):
         return "%s(name=%s, msgdef=%s)" % (
-            self.__class__.__name__, self.name, self.msgdef
+            self.__class__.__name__,
+            self.name,
+            self.msgdef,
         )
 
 
         )
 
 
index 0b1c701..4a342b6 100755 (executable)
@@ -14,7 +14,7 @@
 # limitations under the License.
 #
 
 # limitations under the License.
 #
 
-'''
+"""
 This module implement Python access to the VPP statistics segment. It
 accesses the data structures directly in shared memory.
 VPP uses optimistic locking, so data structures may change underneath
 This module implement Python access to the VPP statistics segment. It
 accesses the data structures directly in shared memory.
 VPP uses optimistic locking, so data structures may change underneath
@@ -39,7 +39,7 @@ stat['/if/rx'][:, 1].sum_packets() - returns the sum of packet counters for
                                      interface 1 on all threads
 stat['/if/rx-miss'][:, 1].sum() - returns the sum of packet counters for
                                   interface 1 on all threads for simple counters
                                      interface 1 on all threads
 stat['/if/rx-miss'][:, 1].sum() - returns the sum of packet counters for
                                   interface 1 on all threads for simple counters
-'''
+"""
 
 import os
 import socket
 
 import os
 import socket
@@ -50,31 +50,36 @@ import time
 import unittest
 import re
 
 import unittest
 import re
 
+
 def recv_fd(sock):
 def recv_fd(sock):
-    '''Get file descriptor for memory map'''
-    fds = array.array("i")   # Array of ints
+    """Get file descriptor for memory map"""
+    fds = array.array("i")  # Array of ints
     _, ancdata, _, _ = sock.recvmsg(0, socket.CMSG_LEN(4))
     for cmsg_level, cmsg_type, cmsg_data in ancdata:
         if cmsg_level == socket.SOL_SOCKET and cmsg_type == socket.SCM_RIGHTS:
     _, ancdata, _, _ = sock.recvmsg(0, socket.CMSG_LEN(4))
     for cmsg_level, cmsg_type, cmsg_data in ancdata:
         if cmsg_level == socket.SOL_SOCKET and cmsg_type == socket.SCM_RIGHTS:
-            fds.frombytes(cmsg_data[:len(cmsg_data) - (len(cmsg_data) % fds.itemsize)])
+            fds.frombytes(cmsg_data[: len(cmsg_data) - (len(cmsg_data) % fds.itemsize)])
     return list(fds)[0]
 
     return list(fds)[0]
 
-VEC_LEN_FMT = Struct('I')
+
+VEC_LEN_FMT = Struct("I")
+
+
 def get_vec_len(stats, vector_offset):
 def get_vec_len(stats, vector_offset):
-    '''Equivalent to VPP vec_len()'''
+    """Equivalent to VPP vec_len()"""
     return VEC_LEN_FMT.unpack_from(stats.statseg, vector_offset - 8)[0]
 
     return VEC_LEN_FMT.unpack_from(stats.statseg, vector_offset - 8)[0]
 
+
 def get_string(stats, ptr):
 def get_string(stats, ptr):
-    '''Get a string from a VPP vector'''
+    """Get a string from a VPP vector"""
     namevector = ptr - stats.base
     namevectorlen = get_vec_len(stats, namevector)
     if namevector + namevectorlen >= stats.size:
     namevector = ptr - stats.base
     namevectorlen = get_vec_len(stats, namevector)
     if namevector + namevectorlen >= stats.size:
-        raise IOError('String overruns stats segment')
-    return stats.statseg[namevector:namevector+namevectorlen-1].decode('ascii')
+        raise IOError("String overruns stats segment")
+    return stats.statseg[namevector : namevector + namevectorlen - 1].decode("ascii")
 
 
 class StatsVector:
 
 
 class StatsVector:
-    '''A class representing a VPP vector'''
+    """A class representing a VPP vector"""
 
     def __init__(self, stats, ptr, fmt):
         self.vec_start = ptr - stats.base
 
     def __init__(self, stats, ptr, fmt):
         self.vec_start = ptr - stats.base
@@ -86,28 +91,35 @@ class StatsVector:
         self.stats = stats
 
         if self.vec_start + self.vec_len * self.elementsize >= stats.size:
         self.stats = stats
 
         if self.vec_start + self.vec_len * self.elementsize >= stats.size:
-            raise IOError('Vector overruns stats segment')
+            raise IOError("Vector overruns stats segment")
 
     def __iter__(self):
         with self.stats.lock:
 
     def __iter__(self):
         with self.stats.lock:
-            return self.struct.iter_unpack(self.statseg[self.vec_start:self.vec_start +
-                                                        self.elementsize*self.vec_len])
+            return self.struct.iter_unpack(
+                self.statseg[
+                    self.vec_start : self.vec_start + self.elementsize * self.vec_len
+                ]
+            )
 
     def __getitem__(self, index):
         if index > self.vec_len:
 
     def __getitem__(self, index):
         if index > self.vec_len:
-            raise IOError('Index beyond end of vector')
+            raise IOError("Index beyond end of vector")
         with self.stats.lock:
             if self.fmtlen == 1:
         with self.stats.lock:
             if self.fmtlen == 1:
-                return self.struct.unpack_from(self.statseg, self.vec_start +
-                                               (index * self.elementsize))[0]
-            return self.struct.unpack_from(self.statseg, self.vec_start +
-                                           (index * self.elementsize))
+                return self.struct.unpack_from(
+                    self.statseg, self.vec_start + (index * self.elementsize)
+                )[0]
+            return self.struct.unpack_from(
+                self.statseg, self.vec_start + (index * self.elementsize)
+            )
+
+
+class VPPStats:
+    """Main class implementing Python access to the VPP statistics segment"""
 
 
-class VPPStats():
-    '''Main class implementing Python access to the VPP statistics segment'''
     # pylint: disable=too-many-instance-attributes
     # pylint: disable=too-many-instance-attributes
-    shared_headerfmt = Struct('QPQQPP')
-    default_socketname = '/run/vpp/stats.sock'
+    shared_headerfmt = Struct("QPQQPP")
+    default_socketname = "/run/vpp/stats.sock"
 
     def __init__(self, socketname=default_socketname, timeout=10):
         self.socketname = socketname
 
     def __init__(self, socketname=default_socketname, timeout=10):
         self.socketname = socketname
@@ -120,7 +132,7 @@ class VPPStats():
         self.statseg = 0
 
     def connect(self):
         self.statseg = 0
 
     def connect(self):
-        '''Connect to stats segment'''
+        """Connect to stats segment"""
         if self.connected:
             return
         sock = socket.socket(socket.AF_UNIX, socket.SOCK_SEQPACKET)
         if self.connected:
             return
         sock = socket.socket(socket.AF_UNIX, socket.SOCK_SEQPACKET)
@@ -130,61 +142,64 @@ class VPPStats():
         sock.close()
 
         stat_result = os.fstat(mfd)
         sock.close()
 
         stat_result = os.fstat(mfd)
-        self.statseg = mmap.mmap(mfd, stat_result.st_size, mmap.PROT_READ, mmap.MAP_SHARED)
+        self.statseg = mmap.mmap(
+            mfd, stat_result.st_size, mmap.PROT_READ, mmap.MAP_SHARED
+        )
         os.close(mfd)
 
         self.size = stat_result.st_size
         if self.version != 2:
         os.close(mfd)
 
         self.size = stat_result.st_size
         if self.version != 2:
-            raise Exception('Incompatbile stat segment version {}'
-                            .format(self.version))
+            raise Exception("Incompatbile stat segment version {}".format(self.version))
 
         self.refresh()
         self.connected = True
 
     def disconnect(self):
 
         self.refresh()
         self.connected = True
 
     def disconnect(self):
-        '''Disconnect from stats segment'''
+        """Disconnect from stats segment"""
         if self.connected:
             self.statseg.close()
             self.connected = False
 
     @property
     def version(self):
         if self.connected:
             self.statseg.close()
             self.connected = False
 
     @property
     def version(self):
-        '''Get version of stats segment'''
+        """Get version of stats segment"""
         return self.shared_headerfmt.unpack_from(self.statseg)[0]
 
     @property
     def base(self):
         return self.shared_headerfmt.unpack_from(self.statseg)[0]
 
     @property
     def base(self):
-        '''Get base pointer of stats segment'''
+        """Get base pointer of stats segment"""
         return self.shared_headerfmt.unpack_from(self.statseg)[1]
 
     @property
     def epoch(self):
         return self.shared_headerfmt.unpack_from(self.statseg)[1]
 
     @property
     def epoch(self):
-        '''Get current epoch value from stats segment'''
+        """Get current epoch value from stats segment"""
         return self.shared_headerfmt.unpack_from(self.statseg)[2]
 
     @property
     def in_progress(self):
         return self.shared_headerfmt.unpack_from(self.statseg)[2]
 
     @property
     def in_progress(self):
-        '''Get value of in_progress from stats segment'''
+        """Get value of in_progress from stats segment"""
         return self.shared_headerfmt.unpack_from(self.statseg)[3]
 
     @property
     def directory_vector(self):
         return self.shared_headerfmt.unpack_from(self.statseg)[3]
 
     @property
     def directory_vector(self):
-        '''Get pointer of directory vector'''
+        """Get pointer of directory vector"""
         return self.shared_headerfmt.unpack_from(self.statseg)[4]
 
         return self.shared_headerfmt.unpack_from(self.statseg)[4]
 
-    elementfmt = 'IQ128s'
+    elementfmt = "IQ128s"
 
     def refresh(self, blocking=True):
 
     def refresh(self, blocking=True):
-        '''Refresh directory vector cache (epoch changed)'''
+        """Refresh directory vector cache (epoch changed)"""
         directory = {}
         directory_by_idx = {}
         while True:
             try:
                 with self.lock:
                     self.last_epoch = self.epoch
         directory = {}
         directory_by_idx = {}
         while True:
             try:
                 with self.lock:
                     self.last_epoch = self.epoch
-                    for i, direntry in enumerate(StatsVector(self, self.directory_vector, self.elementfmt)):
-                        path_raw = direntry[2].find(b'\x00')
-                        path = direntry[2][:path_raw].decode('ascii')
+                    for i, direntry in enumerate(
+                        StatsVector(self, self.directory_vector, self.elementfmt)
+                    ):
+                        path_raw = direntry[2].find(b"\x00")
+                        path = direntry[2][:path_raw].decode("ascii")
                         directory[path] = StatsEntry(direntry[0], direntry[1])
                         directory_by_idx[i] = path
                     self.directory = directory
                         directory[path] = StatsEntry(direntry[0], direntry[1])
                         directory_by_idx[i] = path
                     self.directory = directory
@@ -210,14 +225,12 @@ class VPPStats():
     def __iter__(self):
         return iter(self.directory.items())
 
     def __iter__(self):
         return iter(self.directory.items())
 
-
     def set_errors(self, blocking=True):
     def set_errors(self, blocking=True):
-        '''Return dictionary of error counters > 0'''
+        """Return dictionary of error counters > 0"""
         if not self.connected:
             self.connect()
 
         if not self.connected:
             self.connect()
 
-        errors = {k: v for k, v in self.directory.items()
-                  if k.startswith("/err/")}
+        errors = {k: v for k, v in self.directory.items() if k.startswith("/err/")}
         result = {}
         for k in errors:
             try:
         result = {}
         for k in errors:
             try:
@@ -229,23 +242,23 @@ class VPPStats():
         return result
 
     def set_errors_str(self, blocking=True):
         return result
 
     def set_errors_str(self, blocking=True):
-        '''Return all errors counters > 0 pretty printed'''
-        error_string = ['ERRORS:']
+        """Return all errors counters > 0 pretty printed"""
+        error_string = ["ERRORS:"]
         error_counters = self.set_errors(blocking)
         for k in sorted(error_counters):
         error_counters = self.set_errors(blocking)
         for k in sorted(error_counters):
-            error_string.append('{:<60}{:>10}'.format(k, error_counters[k]))
-        return '%s\n' % '\n'.join(error_string)
+            error_string.append("{:<60}{:>10}".format(k, error_counters[k]))
+        return "%s\n" % "\n".join(error_string)
 
     def get_counter(self, name, blocking=True):
 
     def get_counter(self, name, blocking=True):
-        '''Alternative call to __getitem__'''
+        """Alternative call to __getitem__"""
         return self.__getitem__(name, blocking)
 
     def get_err_counter(self, name, blocking=True):
         return self.__getitem__(name, blocking)
 
     def get_err_counter(self, name, blocking=True):
-        '''Alternative call to __getitem__'''
+        """Alternative call to __getitem__"""
         return self.__getitem__(name, blocking).sum()
 
     def ls(self, patterns):
         return self.__getitem__(name, blocking).sum()
 
     def ls(self, patterns):
-        '''Returns list of counters matching pattern'''
+        """Returns list of counters matching pattern"""
         # pylint: disable=invalid-name
         if not self.connected:
             self.connect()
         # pylint: disable=invalid-name
         if not self.connected:
             self.connect()
@@ -255,20 +268,24 @@ class VPPStats():
         if self.last_epoch != self.epoch:
             self.refresh()
 
         if self.last_epoch != self.epoch:
             self.refresh()
 
-        return [k for k, v in self.directory.items()
-                if any(re.match(pattern, k) for pattern in regex)]
+        return [
+            k
+            for k, v in self.directory.items()
+            if any(re.match(pattern, k) for pattern in regex)
+        ]
 
     def dump(self, counters, blocking=True):
 
     def dump(self, counters, blocking=True):
-        '''Given a list of counters return a dictionary of results'''
+        """Given a list of counters return a dictionary of results"""
         if not self.connected:
             self.connect()
         result = {}
         for cnt in counters:
         if not self.connected:
             self.connect()
         result = {}
         for cnt in counters:
-            result[cnt] = self.__getitem__(cnt,blocking)
+            result[cnt] = self.__getitem__(cnt, blocking)
         return result
 
         return result
 
-class StatsLock():
-    '''Stat segment optimistic locking'''
+
+class StatsLock:
+    """Stat segment optimistic locking"""
 
     def __init__(self, stats):
         self.stats = stats
 
     def __init__(self, stats):
         self.stats = stats
@@ -283,7 +300,7 @@ class StatsLock():
         self.release()
 
     def acquire(self, blocking=True, timeout=-1):
         self.release()
 
     def acquire(self, blocking=True, timeout=-1):
-        '''Acquire the lock. Await in progress to go false. Record epoch.'''
+        """Acquire the lock. Await in progress to go false. Record epoch."""
         self.epoch = self.stats.epoch
         if timeout > 0:
             start = time.monotonic()
         self.epoch = self.stats.epoch
         if timeout > 0:
             start = time.monotonic()
@@ -296,46 +313,49 @@ class StatsLock():
         return True
 
     def release(self):
         return True
 
     def release(self):
-        '''Check if data read while locked is valid'''
+        """Check if data read while locked is valid"""
         if self.stats.in_progress or self.stats.epoch != self.epoch:
         if self.stats.in_progress or self.stats.epoch != self.epoch:
-            raise IOError('Optimistic lock failed, retry')
+            raise IOError("Optimistic lock failed, retry")
 
     def locked(self):
 
     def locked(self):
-        '''Not used'''
+        """Not used"""
 
 
 class StatsCombinedList(list):
 
 
 class StatsCombinedList(list):
-    '''Column slicing for Combined counters list'''
+    """Column slicing for Combined counters list"""
 
     def __getitem__(self, item):
 
     def __getitem__(self, item):
-        '''Supports partial numpy style 2d support. Slice by column [:,1]'''
+        """Supports partial numpy style 2d support. Slice by column [:,1]"""
         if isinstance(item, int):
             return list.__getitem__(self, item)
         return CombinedList([row[item[1]] for row in self])
 
         if isinstance(item, int):
             return list.__getitem__(self, item)
         return CombinedList([row[item[1]] for row in self])
 
+
 class CombinedList(list):
 class CombinedList(list):
-    '''Combined Counters 2-dimensional by thread by index of packets/octets'''
+    """Combined Counters 2-dimensional by thread by index of packets/octets"""
 
     def packets(self):
 
     def packets(self):
-        '''Return column (2nd dimension). Packets for all threads'''
+        """Return column (2nd dimension). Packets for all threads"""
         return [pair[0] for pair in self]
 
     def octets(self):
         return [pair[0] for pair in self]
 
     def octets(self):
-        '''Return column (2nd dimension). Octets for all threads'''
+        """Return column (2nd dimension). Octets for all threads"""
         return [pair[1] for pair in self]
 
     def sum_packets(self):
         return [pair[1] for pair in self]
 
     def sum_packets(self):
-        '''Return column (2nd dimension). Sum of all packets for all threads'''
+        """Return column (2nd dimension). Sum of all packets for all threads"""
         return sum(self.packets())
 
     def sum_octets(self):
         return sum(self.packets())
 
     def sum_octets(self):
-        '''Return column (2nd dimension). Sum of all octets for all threads'''
+        """Return column (2nd dimension). Sum of all octets for all threads"""
         return sum(self.octets())
 
         return sum(self.octets())
 
+
 class StatsTuple(tuple):
 class StatsTuple(tuple):
-    '''A Combined vector tuple (packets, octets)'''
+    """A Combined vector tuple (packets, octets)"""
+
     def __init__(self, data):
     def __init__(self, data):
-        self.dictionary = {'packets': data[0], 'bytes': data[1]}
+        self.dictionary = {"packets": data[0], "bytes": data[1]}
         super().__init__()
 
     def __repr__(self):
         super().__init__()
 
     def __repr__(self):
@@ -344,28 +364,32 @@ class StatsTuple(tuple):
     def __getitem__(self, item):
         if isinstance(item, int):
             return tuple.__getitem__(self, item)
     def __getitem__(self, item):
         if isinstance(item, int):
             return tuple.__getitem__(self, item)
-        if item == 'packets':
+        if item == "packets":
             return tuple.__getitem__(self, 0)
         return tuple.__getitem__(self, 1)
 
             return tuple.__getitem__(self, 0)
         return tuple.__getitem__(self, 1)
 
+
 class StatsSimpleList(list):
 class StatsSimpleList(list):
-    '''Simple Counters 2-dimensional by thread by index of packets'''
+    """Simple Counters 2-dimensional by thread by index of packets"""
 
     def __getitem__(self, item):
 
     def __getitem__(self, item):
-        '''Supports partial numpy style 2d support. Slice by column [:,1]'''
+        """Supports partial numpy style 2d support. Slice by column [:,1]"""
         if isinstance(item, int):
             return list.__getitem__(self, item)
         return SimpleList([row[item[1]] for row in self])
 
         if isinstance(item, int):
             return list.__getitem__(self, item)
         return SimpleList([row[item[1]] for row in self])
 
+
 class SimpleList(list):
 class SimpleList(list):
-    '''Simple counter'''
+    """Simple counter"""
 
     def sum(self):
 
     def sum(self):
-        '''Sum the vector'''
+        """Sum the vector"""
         return sum(self)
 
         return sum(self)
 
-class StatsEntry():
-    '''An individual stats entry'''
+
+class StatsEntry:
+    """An individual stats entry"""
+
     # pylint: disable=unused-argument,no-self-use
 
     def __init__(self, stattype, statvalue):
     # pylint: disable=unused-argument,no-self-use
 
     def __init__(self, stattype, statvalue):
@@ -386,115 +410,128 @@ class StatsEntry():
             self.function = self.illegal
 
     def illegal(self, stats):
             self.function = self.illegal
 
     def illegal(self, stats):
-        '''Invalid or unknown counter type'''
+        """Invalid or unknown counter type"""
         return None
 
     def scalar(self, stats):
         return None
 
     def scalar(self, stats):
-        '''Scalar counter'''
+        """Scalar counter"""
         return self.value
 
     def simple(self, stats):
         return self.value
 
     def simple(self, stats):
-        '''Simple counter'''
+        """Simple counter"""
         counter = StatsSimpleList()
         counter = StatsSimpleList()
-        for threads in StatsVector(stats, self.value, 'P'):
-            clist = [v[0] for v in StatsVector(stats, threads[0], 'Q')]
+        for threads in StatsVector(stats, self.value, "P"):
+            clist = [v[0] for v in StatsVector(stats, threads[0], "Q")]
             counter.append(clist)
         return counter
 
     def combined(self, stats):
             counter.append(clist)
         return counter
 
     def combined(self, stats):
-        '''Combined counter'''
+        """Combined counter"""
         counter = StatsCombinedList()
         counter = StatsCombinedList()
-        for threads in StatsVector(stats, self.value, 'P'):
-            clist = [StatsTuple(cnt) for cnt in StatsVector(stats, threads[0], 'QQ')]
+        for threads in StatsVector(stats, self.value, "P"):
+            clist = [StatsTuple(cnt) for cnt in StatsVector(stats, threads[0], "QQ")]
             counter.append(clist)
         return counter
 
     def name(self, stats):
             counter.append(clist)
         return counter
 
     def name(self, stats):
-        '''Name counter'''
+        """Name counter"""
         counter = []
         counter = []
-        for name in StatsVector(stats, self.value, 'P'):
+        for name in StatsVector(stats, self.value, "P"):
             if name[0]:
                 counter.append(get_string(stats, name[0]))
         return counter
 
             if name[0]:
                 counter.append(get_string(stats, name[0]))
         return counter
 
-    SYMLINK_FMT1 = Struct('II')
-    SYMLINK_FMT2 = Struct('Q')
+    SYMLINK_FMT1 = Struct("II")
+    SYMLINK_FMT2 = Struct("Q")
+
     def symlink(self, stats):
     def symlink(self, stats):
-        '''Symlink counter'''
+        """Symlink counter"""
         b = self.SYMLINK_FMT2.pack(self.value)
         index1, index2 = self.SYMLINK_FMT1.unpack(b)
         name = stats.directory_by_idx[index1]
         b = self.SYMLINK_FMT2.pack(self.value)
         index1, index2 = self.SYMLINK_FMT1.unpack(b)
         name = stats.directory_by_idx[index1]
-        return stats[name][:,index2]
+        return stats[name][:, index2]
 
     def get_counter(self, stats):
 
     def get_counter(self, stats):
-        '''Return a list of counters'''
+        """Return a list of counters"""
         if stats:
             return self.function(stats)
 
         if stats:
             return self.function(stats)
 
+
 class TestStats(unittest.TestCase):
 class TestStats(unittest.TestCase):
-    '''Basic statseg tests'''
+    """Basic statseg tests"""
 
     def setUp(self):
 
     def setUp(self):
-        '''Connect to statseg'''
+        """Connect to statseg"""
         self.stat = VPPStats()
         self.stat.connect()
         self.profile = cProfile.Profile()
         self.profile.enable()
 
     def tearDown(self):
         self.stat = VPPStats()
         self.stat.connect()
         self.profile = cProfile.Profile()
         self.profile.enable()
 
     def tearDown(self):
-        '''Disconnect from statseg'''
+        """Disconnect from statseg"""
         self.stat.disconnect()
         profile = Stats(self.profile)
         profile.strip_dirs()
         self.stat.disconnect()
         profile = Stats(self.profile)
         profile.strip_dirs()
-        profile.sort_stats('cumtime')
+        profile.sort_stats("cumtime")
         profile.print_stats()
         print("\n--->>>")
 
     def test_counters(self):
         profile.print_stats()
         print("\n--->>>")
 
     def test_counters(self):
-        '''Test access to statseg'''
-
-        print('/err/abf-input-ip4/missed', self.stat['/err/abf-input-ip4/missed'])
-        print('/sys/heartbeat', self.stat['/sys/heartbeat'])
-        print('/if/names', self.stat['/if/names'])
-        print('/if/rx-miss', self.stat['/if/rx-miss'])
-        print('/if/rx-miss', self.stat['/if/rx-miss'][1])
-        print('/nat44-ed/out2in/slowpath/drops', self.stat['/nat44-ed/out2in/slowpath/drops'])
+        """Test access to statseg"""
+
+        print("/err/abf-input-ip4/missed", self.stat["/err/abf-input-ip4/missed"])
+        print("/sys/heartbeat", self.stat["/sys/heartbeat"])
+        print("/if/names", self.stat["/if/names"])
+        print("/if/rx-miss", self.stat["/if/rx-miss"])
+        print("/if/rx-miss", self.stat["/if/rx-miss"][1])
+        print(
+            "/nat44-ed/out2in/slowpath/drops",
+            self.stat["/nat44-ed/out2in/slowpath/drops"],
+        )
         with self.assertRaises(KeyError):
         with self.assertRaises(KeyError):
-            print('NO SUCH COUNTER', self.stat['foobar'])
-        print('/if/rx', self.stat.get_counter('/if/rx'))
-        print('/err/ethernet-input/no_error',
-              self.stat.get_counter('/err/ethernet-input/no_error'))
+            print("NO SUCH COUNTER", self.stat["foobar"])
+        print("/if/rx", self.stat.get_counter("/if/rx"))
+        print(
+            "/err/ethernet-input/no_error",
+            self.stat.get_counter("/err/ethernet-input/no_error"),
+        )
 
     def test_column(self):
 
     def test_column(self):
-        '''Test column slicing'''
-
-        print('/if/rx-miss', self.stat['/if/rx-miss'])
-        print('/if/rx', self.stat['/if/rx'])  # All interfaces for thread #1
-        print('/if/rx thread #1', self.stat['/if/rx'][0])  # All interfaces for thread #1
-        print('/if/rx thread #1, interface #1',
-              self.stat['/if/rx'][0][1])  # All interfaces for thread #1
-        print('/if/rx if_index #1', self.stat['/if/rx'][:, 1])
-        print('/if/rx if_index #1 packets', self.stat['/if/rx'][:, 1].packets())
-        print('/if/rx if_index #1 packets', self.stat['/if/rx'][:, 1].sum_packets())
-        print('/if/rx if_index #1 packets', self.stat['/if/rx'][:, 1].octets())
-        print('/if/rx-miss', self.stat['/if/rx-miss'])
-        print('/if/rx-miss if_index #1 packets', self.stat['/if/rx-miss'][:, 1].sum())
-        print('/if/rx if_index #1 packets', self.stat['/if/rx'][0][1]['packets'])
+        """Test column slicing"""
+
+        print("/if/rx-miss", self.stat["/if/rx-miss"])
+        print("/if/rx", self.stat["/if/rx"])  # All interfaces for thread #1
+        print(
+            "/if/rx thread #1", self.stat["/if/rx"][0]
+        )  # All interfaces for thread #1
+        print(
+            "/if/rx thread #1, interface #1", self.stat["/if/rx"][0][1]
+        )  # All interfaces for thread #1
+        print("/if/rx if_index #1", self.stat["/if/rx"][:, 1])
+        print("/if/rx if_index #1 packets", self.stat["/if/rx"][:, 1].packets())
+        print("/if/rx if_index #1 packets", self.stat["/if/rx"][:, 1].sum_packets())
+        print("/if/rx if_index #1 packets", self.stat["/if/rx"][:, 1].octets())
+        print("/if/rx-miss", self.stat["/if/rx-miss"])
+        print("/if/rx-miss if_index #1 packets", self.stat["/if/rx-miss"][:, 1].sum())
+        print("/if/rx if_index #1 packets", self.stat["/if/rx"][0][1]["packets"])
 
     def test_nat44(self):
 
     def test_nat44(self):
-        '''Test the nat counters'''
+        """Test the nat counters"""
 
 
-        print('/nat44-ei/ha/del-event-recv', self.stat['/nat44-ei/ha/del-event-recv'])
-        print('/err/nat44-ei-ha/pkts-processed', self.stat['/err/nat44-ei-ha/pkts-processed'].sum())
+        print("/nat44-ei/ha/del-event-recv", self.stat["/nat44-ei/ha/del-event-recv"])
+        print(
+            "/err/nat44-ei-ha/pkts-processed",
+            self.stat["/err/nat44-ei-ha/pkts-processed"].sum(),
+        )
 
     def test_legacy(self):
 
     def test_legacy(self):
-        '''Legacy interface'''
+        """Legacy interface"""
         directory = self.stat.ls(["^/if", "/err/ip4-input", "/sys/node/ip4-input"])
         data = self.stat.dump(directory)
         print(data)
         directory = self.stat.ls(["^/if", "/err/ip4-input", "/sys/node/ip4-input"])
         data = self.stat.dump(directory)
         print(data)
-        print('Looking up sys node')
+        print("Looking up sys node")
         directory = self.stat.ls(["^/sys/node"])
         directory = self.stat.ls(["^/sys/node"])
-        print('Dumping sys node')
+        print("Dumping sys node")
         data = self.stat.dump(directory)
         print(data)
         directory = self.stat.ls(["^/foobar"])
         data = self.stat.dump(directory)
         print(data)
         directory = self.stat.ls(["^/foobar"])
@@ -502,18 +539,19 @@ class TestStats(unittest.TestCase):
         print(data)
 
     def test_sys_nodes(self):
         print(data)
 
     def test_sys_nodes(self):
-        '''Test /sys/nodes'''
-        counters = self.stat.ls('^/sys/node')
-        print('COUNTERS:', counters)
-        print('/sys/node', self.stat.dump(counters))
-        print('/net/route/to', self.stat['/net/route/to'])
+        """Test /sys/nodes"""
+        counters = self.stat.ls("^/sys/node")
+        print("COUNTERS:", counters)
+        print("/sys/node", self.stat.dump(counters))
+        print("/net/route/to", self.stat["/net/route/to"])
 
     def test_symlink(self):
 
     def test_symlink(self):
-        '''Symbolic links'''
-        print('/interface/local0/rx', self.stat['/interfaces/local0/rx'])
-        print('/sys/nodes/unix-epoll-input', self.stat['/nodes/unix-epoll-input/calls'])
+        """Symbolic links"""
+        print("/interface/local0/rx", self.stat["/interfaces/local0/rx"])
+        print("/sys/nodes/unix-epoll-input", self.stat["/nodes/unix-epoll-input/calls"])
+
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     import cProfile
     from pstats import Stats
 
     import cProfile
     from pstats import Stats
 
index c82b8c3..3a8c332 100644 (file)
@@ -9,7 +9,7 @@ import multiprocessing
 import queue
 import logging
 
 import queue
 import logging
 
-logger = logging.getLogger('vpp_papi.transport')
+logger = logging.getLogger("vpp_papi.transport")
 logger.addHandler(logging.NullHandler())
 
 
 logger.addHandler(logging.NullHandler())
 
 
@@ -26,7 +26,7 @@ class VppTransport:
         self.read_timeout = read_timeout if read_timeout > 0 else None
         self.parent = parent
         self.server_address = server_address
         self.read_timeout = read_timeout if read_timeout > 0 else None
         self.parent = parent
         self.server_address = server_address
-        self.header = struct.Struct('>QII')
+        self.header = struct.Struct(">QII")
         self.message_table = {}
         # These queues can be accessed async.
         # They are always up, but replaced on connect.
         self.message_table = {}
         # These queues can be accessed async.
         # They are always up, but replaced on connect.
@@ -41,11 +41,10 @@ class VppTransport:
     def msg_thread_func(self):
         while True:
             try:
     def msg_thread_func(self):
         while True:
             try:
-                rlist, _, _ = select.select([self.socket,
-                                             self.sque._reader], [], [])
+                rlist, _, _ = select.select([self.socket, self.sque._reader], [], [])
             except socket.error:
                 # Terminate thread
             except socket.error:
                 # Terminate thread
-                logging.error('select failed')
+                logging.error("select failed")
                 self.q.put(None)
                 return
 
                 self.q.put(None)
                 return
 
@@ -71,8 +70,7 @@ class VppTransport:
                     else:
                         self.parent.msg_handler_async(msg)
                 else:
                     else:
                         self.parent.msg_handler_async(msg)
                 else:
-                    raise VppTransportSocketIOError(
-                        2, 'Unknown response from select')
+                    raise VppTransportSocketIOError(2, "Unknown response from select")
 
     def connect(self, name, pfx, msg_handler, rx_qlen):
         # TODO: Reorder the actions and add "roll-backs",
 
     def connect(self, name, pfx, msg_handler, rx_qlen):
         # TODO: Reorder the actions and add "roll-backs",
@@ -80,7 +78,8 @@ class VppTransport:
 
         if self.message_thread is not None:
             raise VppTransportSocketIOError(
 
         if self.message_thread is not None:
             raise VppTransportSocketIOError(
-                1, "PAPI socket transport connect: Need to disconnect first.")
+                1, "PAPI socket transport connect: Need to disconnect first."
+            )
 
         # Create a UDS socket
         self.socket = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
 
         # Create a UDS socket
         self.socket = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
@@ -107,19 +106,17 @@ class VppTransport:
         self.message_thread = threading.Thread(target=self.msg_thread_func)
 
         # Initialise sockclnt_create
         self.message_thread = threading.Thread(target=self.msg_thread_func)
 
         # Initialise sockclnt_create
-        sockclnt_create = self.parent.messages['sockclnt_create']
-        sockclnt_create_reply = self.parent.messages['sockclnt_create_reply']
+        sockclnt_create = self.parent.messages["sockclnt_create"]
+        sockclnt_create_reply = self.parent.messages["sockclnt_create_reply"]
 
 
-        args = {'_vl_msg_id': 15,
-                'name': name,
-                'context': 124}
+        args = {"_vl_msg_id": 15, "name": name, "context": 124}
         b = sockclnt_create.pack(args)
         self.write(b)
         msg = self._read()
         hdr, length = self.parent.header.unpack(msg, 0)
         if hdr.msgid != 16:
             # TODO: Add first numeric argument.
         b = sockclnt_create.pack(args)
         self.write(b)
         msg = self._read()
         hdr, length = self.parent.header.unpack(msg, 0)
         if hdr.msgid != 16:
             # TODO: Add first numeric argument.
-            raise VppTransportSocketIOError('Invalid reply message')
+            raise VppTransportSocketIOError("Invalid reply message")
 
         r, length = sockclnt_create_reply.unpack(msg)
         self.socket_index = r.index
 
         r, length = sockclnt_create_reply.unpack(msg)
         self.socket_index = r.index
@@ -184,7 +181,7 @@ class VppTransport:
     def write(self, buf):
         """Send a binary-packed message to VPP."""
         if not self.connected:
     def write(self, buf):
         """Send a binary-packed message to VPP."""
         if not self.connected:
-            raise VppTransportSocketIOError(1, 'Not connected')
+            raise VppTransportSocketIOError(1, "Not connected")
 
         # Send header
         header = self.header.pack(0, len(buf), 0)
 
         # Send header
         header = self.header.pack(0, len(buf), 0)
@@ -192,8 +189,7 @@ class VppTransport:
             self.socket.sendall(header)
             self.socket.sendall(buf)
         except socket.error as err:
             self.socket.sendall(header)
             self.socket.sendall(buf)
         except socket.error as err:
-            raise VppTransportSocketIOError(1, 'Sendall error: {err!r}'.format(
-                err=err))
+            raise VppTransportSocketIOError(1, "Sendall error: {err!r}".format(err=err))
 
     def _read_fixed(self, size):
         """Repeat receive until fixed size is read. Return empty on error."""
 
     def _read_fixed(self, size):
         """Repeat receive until fixed size is read. Return empty on error."""
@@ -223,11 +219,11 @@ class VppTransport:
         msg = self._read_fixed(hdrlen)
         if hdrlen == len(msg):
             return msg
         msg = self._read_fixed(hdrlen)
         if hdrlen == len(msg):
             return msg
-        raise VppTransportSocketIOError(1, 'Unknown socket read error')
+        raise VppTransportSocketIOError(1, "Unknown socket read error")
 
     def read(self, timeout=None):
         if not self.connected:
 
     def read(self, timeout=None):
         if not self.connected:
-            raise VppTransportSocketIOError(1, 'Not connected')
+            raise VppTransportSocketIOError(1, "Not connected")
         if timeout is None:
             timeout = self.read_timeout
         try:
         if timeout is None:
             timeout = self.read_timeout
         try:
index debd734..2978ebd 100755 (executable)
@@ -5,8 +5,17 @@ import inspect
 import os
 import sys
 import logging
 import os
 import sys
 import logging
-from vapi_json_parser import Field, Struct, Enum, Union, Message, JsonParser,\
-    SimpleType, StructType, Alias
+from vapi_json_parser import (
+    Field,
+    Struct,
+    Enum,
+    Union,
+    Message,
+    JsonParser,
+    SimpleType,
+    StructType,
+    Alias,
+)
 
 
 class CField(Field):
 
 
 class CField(Field):
@@ -14,54 +23,63 @@ class CField(Field):
         return "vapi_type_%s" % self.name
 
     def get_c_def(self):
         return "vapi_type_%s" % self.name
 
     def get_c_def(self):
-        if self.type.get_c_name() == 'vl_api_string_t':
+        if self.type.get_c_name() == "vl_api_string_t":
             if self.len:
                 return "u8 %s[%d];" % (self.name, self.len)
             else:
                 return "vl_api_string_t %s;" % (self.name)
         else:
             if self.len is not None and type(self.len) != dict:
             if self.len:
                 return "u8 %s[%d];" % (self.name, self.len)
             else:
                 return "vl_api_string_t %s;" % (self.name)
         else:
             if self.len is not None and type(self.len) != dict:
-                return "%s %s[%d];" % (self.type.get_c_name(), self.name,
-                                       self.len)
+                return "%s %s[%d];" % (self.type.get_c_name(), self.name, self.len)
             else:
                 return "%s %s;" % (self.type.get_c_name(), self.name)
 
     def get_swap_to_be_code(self, struct, var):
         if self.len is not None and type(self.len) != dict:
             if self.len > 0:
             else:
                 return "%s %s;" % (self.type.get_c_name(), self.name)
 
     def get_swap_to_be_code(self, struct, var):
         if self.len is not None and type(self.len) != dict:
             if self.len > 0:
-                return "do { unsigned i; for (i = 0; i < %d; ++i) { %s } }"\
-                    " while(0);" % (
-                        self.len,
-                        self.type.get_swap_to_be_code(struct, "%s[i]" % var))
+                return (
+                    "do { unsigned i; for (i = 0; i < %d; ++i) { %s } }"
+                    " while(0);"
+                    % (self.len, self.type.get_swap_to_be_code(struct, "%s[i]" % var))
+                )
             else:
                 if self.nelem_field.needs_byte_swap():
                     nelem_field = "%s(%s%s)" % (
                         self.nelem_field.type.get_swap_to_host_func_name(),
             else:
                 if self.nelem_field.needs_byte_swap():
                     nelem_field = "%s(%s%s)" % (
                         self.nelem_field.type.get_swap_to_host_func_name(),
-                        struct, self.nelem_field.name)
+                        struct,
+                        self.nelem_field.name,
+                    )
                 else:
                     nelem_field = "%s%s" % (struct, self.nelem_field.name)
                 return (
                     "do { unsigned i; for (i = 0; i < %s; ++i) { %s } }"
                 else:
                     nelem_field = "%s%s" % (struct, self.nelem_field.name)
                 return (
                     "do { unsigned i; for (i = 0; i < %s; ++i) { %s } }"
-                    " while(0);" %
-                    (nelem_field, self.type.get_swap_to_be_code(
-                        struct, "%s[i]" % var)))
+                    " while(0);"
+                    % (
+                        nelem_field,
+                        self.type.get_swap_to_be_code(struct, "%s[i]" % var),
+                    )
+                )
         return self.type.get_swap_to_be_code(struct, "%s" % var)
 
     def get_swap_to_host_code(self, struct, var):
         if self.len is not None and type(self.len) != dict:
             if self.len > 0:
         return self.type.get_swap_to_be_code(struct, "%s" % var)
 
     def get_swap_to_host_code(self, struct, var):
         if self.len is not None and type(self.len) != dict:
             if self.len > 0:
-                return "do { unsigned i; for (i = 0; i < %d; ++i) { %s } }"\
-                    " while(0);" % (
-                        self.len,
-                        self.type.get_swap_to_host_code(struct, "%s[i]" % var))
+                return (
+                    "do { unsigned i; for (i = 0; i < %d; ++i) { %s } }"
+                    " while(0);"
+                    % (self.len, self.type.get_swap_to_host_code(struct, "%s[i]" % var))
+                )
             else:
                 # nelem_field already swapped to host here...
                 return (
                     "do { unsigned i; for (i = 0; i < %s%s; ++i) { %s } }"
             else:
                 # nelem_field already swapped to host here...
                 return (
                     "do { unsigned i; for (i = 0; i < %s%s; ++i) { %s } }"
-                    " while(0);" %
-                    (struct, self.nelem_field.name,
-                     self.type.get_swap_to_host_code(
-                         struct, "%s[i]" % var)))
+                    " while(0);"
+                    % (
+                        struct,
+                        self.nelem_field.name,
+                        self.type.get_swap_to_host_code(struct, "%s[i]" % var),
+                    )
+                )
         return self.type.get_swap_to_host_code(struct, "%s" % var)
 
     def needs_byte_swap(self):
         return self.type.get_swap_to_host_code(struct, "%s" % var)
 
     def needs_byte_swap(self):
@@ -82,10 +100,14 @@ class CField(Field):
 
     def get_vla_calc_size_code(self, prefix, path):
         if self.is_vla():
 
     def get_vla_calc_size_code(self, prefix, path):
         if self.is_vla():
-            result = ["sizeof(%s.%s[0]) * %s" % (
-                ".".join([prefix] + path),
-                self.name,
-                self.get_vla_field_length_name(path))]
+            result = [
+                "sizeof(%s.%s[0]) * %s"
+                % (
+                    ".".join([prefix] + path),
+                    self.name,
+                    self.get_vla_field_length_name(path),
+                )
+            ]
         else:
             result = []
         if self.type.has_vla():
         else:
             result = []
         if self.type.has_vla():
@@ -96,10 +118,14 @@ class CField(Field):
     def get_vla_assign_code(self, prefix, path):
         result = []
         if self.is_vla():
     def get_vla_assign_code(self, prefix, path):
         result = []
         if self.is_vla():
-            result.append("%s.%s = %s" % (
-                ".".join([prefix] + path),
-                self.nelem_field.name,
-                self.get_vla_field_length_name(path)))
+            result.append(
+                "%s.%s = %s"
+                % (
+                    ".".join([prefix] + path),
+                    self.nelem_field.name,
+                    self.get_vla_field_length_name(path),
+                )
+            )
         if self.type.has_vla():
             t = self.type.get_vla_assign_code(prefix, path + [self.name])
             result.extend(t)
         if self.type.has_vla():
             t = self.type.get_vla_assign_code(prefix, path + [self.name])
             result.extend(t)
@@ -113,52 +139,75 @@ class CAlias(CField):
     def get_c_def(self):
         if self.len is not None:
             return "typedef %s vapi_type_%s[%d];" % (
     def get_c_def(self):
         if self.len is not None:
             return "typedef %s vapi_type_%s[%d];" % (
-                self.type.get_c_name(), self.name, self.len)
+                self.type.get_c_name(),
+                self.name,
+                self.len,
+            )
         else:
         else:
-            return "typedef %s vapi_type_%s;" % (
-                self.type.get_c_name(), self.name)
+            return "typedef %s vapi_type_%s;" % (self.type.get_c_name(), self.name)
 
 
 class CStruct(Struct):
     def get_c_def(self):
 
 
 class CStruct(Struct):
     def get_c_def(self):
-        return "\n".join([
-            "typedef struct __attribute__((__packed__)) {\n%s" % (
-                "\n".join(["  %s" % x.get_c_def()
-                           for x in self.fields])),
-            "} %s;" % self.get_c_name()])
+        return "\n".join(
+            [
+                "typedef struct __attribute__((__packed__)) {\n%s"
+                % ("\n".join(["  %s" % x.get_c_def() for x in self.fields])),
+                "} %s;" % self.get_c_name(),
+            ]
+        )
 
     def get_vla_assign_code(self, prefix, path):
 
     def get_vla_assign_code(self, prefix, path):
-        return [x for f in self.fields if f.has_vla()
-                for x in f.get_vla_assign_code(prefix, path)]
+        return [
+            x
+            for f in self.fields
+            if f.has_vla()
+            for x in f.get_vla_assign_code(prefix, path)
+        ]
 
     def get_alloc_vla_param_names(self, path):
 
     def get_alloc_vla_param_names(self, path):
-        return [x for f in self.fields
-                if f.has_vla()
-                for x in f.get_alloc_vla_param_names(path)]
+        return [
+            x
+            for f in self.fields
+            if f.has_vla()
+            for x in f.get_alloc_vla_param_names(path)
+        ]
 
     def get_vla_calc_size_code(self, prefix, path):
 
     def get_vla_calc_size_code(self, prefix, path):
-        return [x for f in self.fields if f.has_vla()
-                for x in f.get_vla_calc_size_code(prefix, path)]
+        return [
+            x
+            for f in self.fields
+            if f.has_vla()
+            for x in f.get_vla_calc_size_code(prefix, path)
+        ]
 
 
 
 
-class CSimpleType (SimpleType):
+class CSimpleType(SimpleType):
 
     swap_to_be_dict = {
 
     swap_to_be_dict = {
-        'i16': 'htobe16', 'u16': 'htobe16',
-        'i32': 'htobe32', 'u32': 'htobe32',
-        'i64': 'htobe64', 'u64': 'htobe64',
+        "i16": "htobe16",
+        "u16": "htobe16",
+        "i32": "htobe32",
+        "u32": "htobe32",
+        "i64": "htobe64",
+        "u64": "htobe64",
     }
 
     swap_to_host_dict = {
     }
 
     swap_to_host_dict = {
-        'i16': 'be16toh', 'u16': 'be16toh',
-        'i32': 'be32toh', 'u32': 'be32toh',
-        'i64': 'be64toh', 'u64': 'be64toh',
+        "i16": "be16toh",
+        "u16": "be16toh",
+        "i32": "be32toh",
+        "u32": "be32toh",
+        "i64": "be64toh",
+        "u64": "be64toh",
     }
 
     __packed = "__attribute__((packed))"
     pack_dict = {
     }
 
     __packed = "__attribute__((packed))"
     pack_dict = {
-        'i8':  __packed, 'u8':  __packed,
-        'i16': __packed, 'u16': __packed,
+        "i8": __packed,
+        "u8": __packed,
+        "i16": __packed,
+        "u16": __packed,
     }
 
     def get_c_name(self):
     }
 
     def get_c_name(self):
@@ -175,15 +224,21 @@ class CSimpleType (SimpleType):
 
     def get_swap_to_be_code(self, struct, var, cast=None):
         x = "%s%s" % (struct, var)
 
     def get_swap_to_be_code(self, struct, var, cast=None):
         x = "%s%s" % (struct, var)
-        return "%s = %s%s(%s);" % (x,
-                                   "(%s)" % cast if cast else "",
-                                   self.get_swap_to_be_func_name(), x)
+        return "%s = %s%s(%s);" % (
+            x,
+            "(%s)" % cast if cast else "",
+            self.get_swap_to_be_func_name(),
+            x,
+        )
 
     def get_swap_to_host_code(self, struct, var, cast=None):
         x = "%s%s" % (struct, var)
 
     def get_swap_to_host_code(self, struct, var, cast=None):
         x = "%s%s" % (struct, var)
-        return "%s = %s%s(%s);" % (x,
-                                   "(%s)" % cast if cast else "",
-                                   self.get_swap_to_host_func_name(), x)
+        return "%s = %s%s(%s);" % (
+            x,
+            "(%s)" % cast if cast else "",
+            self.get_swap_to_host_func_name(),
+            x,
+        )
 
     def needs_byte_swap(self):
         try:
 
     def needs_byte_swap(self):
         try:
@@ -205,7 +260,7 @@ class CEnum(Enum):
         return "typedef enum {\n%s\n} %s %s;" % (
             "\n".join(["  %s = %s," % (i, j) for i, j in self.value_pairs]),
             self.type.get_packed(),
         return "typedef enum {\n%s\n} %s %s;" % (
             "\n".join(["  %s = %s," % (i, j) for i, j in self.value_pairs]),
             self.type.get_packed(),
-            self.get_c_name()
+            self.get_c_name(),
         )
 
     def needs_byte_swap(self):
         )
 
     def needs_byte_swap(self):
@@ -224,16 +279,15 @@ class CUnion(Union):
 
     def get_c_def(self):
         return "typedef union {\n%s\n} %s;" % (
 
     def get_c_def(self):
         return "typedef union {\n%s\n} %s;" % (
-            "\n".join(["  %s %s;" % (i.get_c_name(), j)
-                       for i, j in self.type_pairs]),
-            self.get_c_name()
+            "\n".join(["  %s %s;" % (i.get_c_name(), j) for i, j in self.type_pairs]),
+            self.get_c_name(),
         )
 
     def needs_byte_swap(self):
         return False
 
 
         )
 
     def needs_byte_swap(self):
         return False
 
 
-class CStructType (StructType, CStruct):
+class CStructType(StructType, CStruct):
     def get_c_name(self):
         return "vapi_type_%s" % self.name
 
     def get_c_name(self):
         return "vapi_type_%s" % self.name
 
@@ -244,27 +298,36 @@ class CStructType (StructType, CStruct):
         return "%s_ntoh" % self.get_c_name()
 
     def get_swap_to_be_func_decl(self):
         return "%s_ntoh" % self.get_c_name()
 
     def get_swap_to_be_func_decl(self):
-        return "void %s(%s *msg)" % (
-            self.get_swap_to_be_func_name(), self.get_c_name())
+        return "void %s(%s *msg)" % (self.get_swap_to_be_func_name(), self.get_c_name())
 
     def get_swap_to_be_func_def(self):
         return "%s\n{\n%s\n}" % (
             self.get_swap_to_be_func_decl(),
 
     def get_swap_to_be_func_def(self):
         return "%s\n{\n%s\n}" % (
             self.get_swap_to_be_func_decl(),
-            "\n".join([
-                "  %s" % p.get_swap_to_be_code("msg->", "%s" % p.name)
-                for p in self.fields if p.needs_byte_swap()]),
+            "\n".join(
+                [
+                    "  %s" % p.get_swap_to_be_code("msg->", "%s" % p.name)
+                    for p in self.fields
+                    if p.needs_byte_swap()
+                ]
+            ),
         )
 
     def get_swap_to_host_func_decl(self):
         return "void %s(%s *msg)" % (
         )
 
     def get_swap_to_host_func_decl(self):
         return "void %s(%s *msg)" % (
-            self.get_swap_to_host_func_name(), self.get_c_name())
+            self.get_swap_to_host_func_name(),
+            self.get_c_name(),
+        )
 
     def get_swap_to_host_func_def(self):
         return "%s\n{\n%s\n}" % (
             self.get_swap_to_host_func_decl(),
 
     def get_swap_to_host_func_def(self):
         return "%s\n{\n%s\n}" % (
             self.get_swap_to_host_func_decl(),
-            "\n".join([
-                "  %s" % p.get_swap_to_host_code("msg->", "%s" % p.name)
-                for p in self.fields if p.needs_byte_swap()]),
+            "\n".join(
+                [
+                    "  %s" % p.get_swap_to_host_code("msg->", "%s" % p.name)
+                    for p in self.fields
+                    if p.needs_byte_swap()
+                ]
+            ),
         )
 
     def get_swap_to_be_code(self, struct, var):
         )
 
     def get_swap_to_be_code(self, struct, var):
@@ -280,13 +343,11 @@ class CStructType (StructType, CStruct):
         return False
 
 
         return False
 
 
-class CMessage (Message):
+class CMessage(Message):
     def __init__(self, logger, definition, json_parser):
         super(CMessage, self).__init__(logger, definition, json_parser)
         self.payload_members = [
     def __init__(self, logger, definition, json_parser):
         super(CMessage, self).__init__(logger, definition, json_parser)
         self.payload_members = [
-            "  %s" % p.get_c_def()
-            for p in self.fields
-            if p.type != self.header
+            "  %s" % p.get_c_def() for p in self.fields if p.type != self.header
         ]
 
     def has_payload(self):
         ]
 
     def has_payload(self):
@@ -305,46 +366,65 @@ class CMessage (Message):
         return "vapi_alloc_%s" % self.name
 
     def get_alloc_vla_param_names(self):
         return "vapi_alloc_%s" % self.name
 
     def get_alloc_vla_param_names(self):
-        return [x for f in self.fields
-                if f.has_vla()
-                for x in f.get_alloc_vla_param_names([])]
+        return [
+            x
+            for f in self.fields
+            if f.has_vla()
+            for x in f.get_alloc_vla_param_names([])
+        ]
 
     def get_alloc_func_decl(self):
         return "%s* %s(struct vapi_ctx_s *ctx%s)" % (
             self.get_c_name(),
             self.get_alloc_func_name(),
 
     def get_alloc_func_decl(self):
         return "%s* %s(struct vapi_ctx_s *ctx%s)" % (
             self.get_c_name(),
             self.get_alloc_func_name(),
-            "".join([", size_t %s" % n for n in
-                     self.get_alloc_vla_param_names()]))
+            "".join([", size_t %s" % n for n in self.get_alloc_vla_param_names()]),
+        )
 
     def get_alloc_func_def(self):
         extra = []
 
     def get_alloc_func_def(self):
         extra = []
-        if self.header.has_field('client_index'):
-            extra.append(
-                "  msg->header.client_index = vapi_get_client_index(ctx);")
-        if self.header.has_field('context'):
+        if self.header.has_field("client_index"):
+            extra.append("  msg->header.client_index = vapi_get_client_index(ctx);")
+        if self.header.has_field("context"):
             extra.append("  msg->header.context = 0;")
             extra.append("  msg->header.context = 0;")
-        return "\n".join([
-            "%s" % self.get_alloc_func_decl(),
-            "{",
-            "  %s *msg = NULL;" % self.get_c_name(),
-            "  const size_t size = sizeof(%s)%s;" % (
-                self.get_c_name(),
-                "".join([" + %s" % x for f in self.fields if f.has_vla()
-                         for x in f.get_vla_calc_size_code("msg->payload",
-                                                           [])])),
-            "  /* cast here required to play nicely with C++ world ... */",
-            "  msg = (%s*)vapi_msg_alloc(ctx, size);" % self.get_c_name(),
-            "  if (!msg) {",
-            "    return NULL;",
-            "  }",
-        ] + extra + [
-            "  msg->header._vl_msg_id = vapi_lookup_vl_msg_id(ctx, %s);" %
-            self.get_msg_id_name(),
-            "".join(["  %s;\n" % line
-                     for f in self.fields if f.has_vla()
-                     for line in f.get_vla_assign_code("msg->payload", [])]),
-            "  return msg;",
-            "}"])
+        return "\n".join(
+            [
+                "%s" % self.get_alloc_func_decl(),
+                "{",
+                "  %s *msg = NULL;" % self.get_c_name(),
+                "  const size_t size = sizeof(%s)%s;"
+                % (
+                    self.get_c_name(),
+                    "".join(
+                        [
+                            " + %s" % x
+                            for f in self.fields
+                            if f.has_vla()
+                            for x in f.get_vla_calc_size_code("msg->payload", [])
+                        ]
+                    ),
+                ),
+                "  /* cast here required to play nicely with C++ world ... */",
+                "  msg = (%s*)vapi_msg_alloc(ctx, size);" % self.get_c_name(),
+                "  if (!msg) {",
+                "    return NULL;",
+                "  }",
+            ]
+            + extra
+            + [
+                "  msg->header._vl_msg_id = vapi_lookup_vl_msg_id(ctx, %s);"
+                % self.get_msg_id_name(),
+                "".join(
+                    [
+                        "  %s;\n" % line
+                        for f in self.fields
+                        if f.has_vla()
+                        for line in f.get_vla_assign_code("msg->payload", [])
+                    ]
+                ),
+                "  return msg;",
+                "}",
+            ]
+        )
 
     def get_calc_msg_size_func_name(self):
         return "vapi_calc_%s_msg_size" % self.name
 
     def get_calc_msg_size_func_name(self):
         return "vapi_calc_%s_msg_size" % self.name
@@ -352,21 +432,26 @@ class CMessage (Message):
     def get_calc_msg_size_func_decl(self):
         return "uword %s(%s *msg)" % (
             self.get_calc_msg_size_func_name(),
     def get_calc_msg_size_func_decl(self):
         return "uword %s(%s *msg)" % (
             self.get_calc_msg_size_func_name(),
-            self.get_c_name())
+            self.get_c_name(),
+        )
 
     def get_calc_msg_size_func_def(self):
 
     def get_calc_msg_size_func_def(self):
-        return "\n".join([
-            "%s" % self.get_calc_msg_size_func_decl(),
-            "{",
-            "  return sizeof(*msg)%s;" %
-            "".join(["+ msg->payload.%s * sizeof(msg->payload.%s[0])" % (
-                    f.nelem_field.name,
-                    f.name)
-                for f in self.fields
-                if f.nelem_field is not None
-            ]),
-            "}",
-        ])
+        return "\n".join(
+            [
+                "%s" % self.get_calc_msg_size_func_decl(),
+                "{",
+                "  return sizeof(*msg)%s;"
+                % "".join(
+                    [
+                        "+ msg->payload.%s * sizeof(msg->payload.%s[0])"
+                        % (f.nelem_field.name, f.name)
+                        for f in self.fields
+                        if f.nelem_field is not None
+                    ]
+                ),
+                "}",
+            ]
+        )
 
     def get_verify_msg_size_func_name(self):
         return f"vapi_verify_{self.name}_msg_size"
 
     def get_verify_msg_size_func_name(self):
         return f"vapi_verify_{self.name}_msg_size"
@@ -374,7 +459,8 @@ class CMessage (Message):
     def get_verify_msg_size_func_decl(self):
         return "int %s(%s *msg, uword buf_size)" % (
             self.get_verify_msg_size_func_name(),
     def get_verify_msg_size_func_decl(self):
         return "int %s(%s *msg, uword buf_size)" % (
             self.get_verify_msg_size_func_name(),
-            self.get_c_name())
+            self.get_c_name(),
+        )
 
     def get_verify_msg_size_func_def(self):
         return inspect.cleandoc(
 
     def get_verify_msg_size_func_def(self):
         return inspect.cleandoc(
@@ -397,29 +483,39 @@ class CMessage (Message):
                 }}
               return 0;
             }}
                 }}
               return 0;
             }}
-        """)
+        """
+        )
 
     def get_c_def(self):
         if self.has_payload():
 
     def get_c_def(self):
         if self.has_payload():
-            return "\n".join([
-                "typedef struct __attribute__ ((__packed__)) {",
-                "%s " %
-                "\n".join(self.payload_members),
-                "} %s;" % self.get_payload_struct_name(),
-                "",
-                "typedef struct __attribute__ ((__packed__)) {",
-                ("  %s %s;" % (self.header.get_c_name(),
-                               self.fields[0].name)
-                    if self.header is not None else ""),
-                "  %s payload;" % self.get_payload_struct_name(),
-                "} %s;" % self.get_c_name(), ])
+            return "\n".join(
+                [
+                    "typedef struct __attribute__ ((__packed__)) {",
+                    "%s " % "\n".join(self.payload_members),
+                    "} %s;" % self.get_payload_struct_name(),
+                    "",
+                    "typedef struct __attribute__ ((__packed__)) {",
+                    (
+                        "  %s %s;" % (self.header.get_c_name(), self.fields[0].name)
+                        if self.header is not None
+                        else ""
+                    ),
+                    "  %s payload;" % self.get_payload_struct_name(),
+                    "} %s;" % self.get_c_name(),
+                ]
+            )
         else:
         else:
-            return "\n".join([
-                "typedef struct __attribute__ ((__packed__)) {",
-                ("  %s %s;" % (self.header.get_c_name(),
-                               self.fields[0].name)
-                    if self.header is not None else ""),
-                "} %s;" % self.get_c_name(), ])
+            return "\n".join(
+                [
+                    "typedef struct __attribute__ ((__packed__)) {",
+                    (
+                        "  %s %s;" % (self.header.get_c_name(), self.fields[0].name)
+                        if self.header is not None
+                        else ""
+                    ),
+                    "} %s;" % self.get_c_name(),
+                ]
+            )
 
     def get_swap_payload_to_host_func_name(self):
         return "%s_payload_ntoh" % self.get_c_name()
 
     def get_swap_payload_to_host_func_name(self):
         return "%s_payload_ntoh" % self.get_c_name()
@@ -430,29 +526,37 @@ class CMessage (Message):
     def get_swap_payload_to_host_func_decl(self):
         return "void %s(%s *payload)" % (
             self.get_swap_payload_to_host_func_name(),
     def get_swap_payload_to_host_func_decl(self):
         return "void %s(%s *payload)" % (
             self.get_swap_payload_to_host_func_name(),
-            self.get_payload_struct_name())
+            self.get_payload_struct_name(),
+        )
 
     def get_swap_payload_to_be_func_decl(self):
         return "void %s(%s *payload)" % (
             self.get_swap_payload_to_be_func_name(),
 
     def get_swap_payload_to_be_func_decl(self):
         return "void %s(%s *payload)" % (
             self.get_swap_payload_to_be_func_name(),
-            self.get_payload_struct_name())
+            self.get_payload_struct_name(),
+        )
 
     def get_swap_payload_to_be_func_def(self):
         return "%s\n{\n%s\n}" % (
             self.get_swap_payload_to_be_func_decl(),
 
     def get_swap_payload_to_be_func_def(self):
         return "%s\n{\n%s\n}" % (
             self.get_swap_payload_to_be_func_decl(),
-            "\n".join([
-                "  %s" % p.get_swap_to_be_code("payload->", "%s" % p.name)
-                for p in self.fields
-                if p.needs_byte_swap() and p.type != self.header]),
+            "\n".join(
+                [
+                    "  %s" % p.get_swap_to_be_code("payload->", "%s" % p.name)
+                    for p in self.fields
+                    if p.needs_byte_swap() and p.type != self.header
+                ]
+            ),
         )
 
     def get_swap_payload_to_host_func_def(self):
         return "%s\n{\n%s\n}" % (
             self.get_swap_payload_to_host_func_decl(),
         )
 
     def get_swap_payload_to_host_func_def(self):
         return "%s\n{\n%s\n}" % (
             self.get_swap_payload_to_host_func_decl(),
-            "\n".join([
-                "  %s" % p.get_swap_to_host_code("payload->", "%s" % p.name)
-                for p in self.fields
-                if p.needs_byte_swap() and p.type != self.header]),
+            "\n".join(
+                [
+                    "  %s" % p.get_swap_to_host_code("payload->", "%s" % p.name)
+                    for p in self.fields
+                    if p.needs_byte_swap() and p.type != self.header
+                ]
+            ),
         )
 
     def get_swap_to_host_func_name(self):
         )
 
     def get_swap_to_host_func_name(self):
@@ -463,37 +567,50 @@ class CMessage (Message):
 
     def get_swap_to_host_func_decl(self):
         return "void %s(%s *msg)" % (
 
     def get_swap_to_host_func_decl(self):
         return "void %s(%s *msg)" % (
-            self.get_swap_to_host_func_name(), self.get_c_name())
+            self.get_swap_to_host_func_name(),
+            self.get_c_name(),
+        )
 
     def get_swap_to_be_func_decl(self):
 
     def get_swap_to_be_func_decl(self):
-        return "void %s(%s *msg)" % (
-            self.get_swap_to_be_func_name(), self.get_c_name())
+        return "void %s(%s *msg)" % (self.get_swap_to_be_func_name(), self.get_c_name())
 
     def get_swap_to_be_func_def(self):
 
     def get_swap_to_be_func_def(self):
-        return "\n".join([
-            "%s" % self.get_swap_to_be_func_decl(),
-            "{",
-            ("  VAPI_DBG(\"Swapping `%s'@%%p to big endian\", msg);" %
-                self.get_c_name()),
-            "  %s(&msg->header);" % self.header.get_swap_to_be_func_name()
-            if self.header is not None else "",
-            "  %s(&msg->payload);" % self.get_swap_payload_to_be_func_name()
-            if self.has_payload() else "",
-            "}",
-        ])
+        return "\n".join(
+            [
+                "%s" % self.get_swap_to_be_func_decl(),
+                "{",
+                (
+                    '  VAPI_DBG("Swapping `%s\'@%%p to big endian", msg);'
+                    % self.get_c_name()
+                ),
+                "  %s(&msg->header);" % self.header.get_swap_to_be_func_name()
+                if self.header is not None
+                else "",
+                "  %s(&msg->payload);" % self.get_swap_payload_to_be_func_name()
+                if self.has_payload()
+                else "",
+                "}",
+            ]
+        )
 
     def get_swap_to_host_func_def(self):
 
     def get_swap_to_host_func_def(self):
-        return "\n".join([
-            "%s" % self.get_swap_to_host_func_decl(),
-            "{",
-            ("  VAPI_DBG(\"Swapping `%s'@%%p to host byte order\", msg);" %
-                self.get_c_name()),
-            "  %s(&msg->header);" % self.header.get_swap_to_host_func_name()
-            if self.header is not None else "",
-            "  %s(&msg->payload);" % self.get_swap_payload_to_host_func_name()
-            if self.has_payload() else "",
-            "}",
-        ])
+        return "\n".join(
+            [
+                "%s" % self.get_swap_to_host_func_decl(),
+                "{",
+                (
+                    '  VAPI_DBG("Swapping `%s\'@%%p to host byte order", msg);'
+                    % self.get_c_name()
+                ),
+                "  %s(&msg->header);" % self.header.get_swap_to_host_func_name()
+                if self.header is not None
+                else "",
+                "  %s(&msg->payload);" % self.get_swap_payload_to_host_func_name()
+                if self.has_payload()
+                else "",
+                "}",
+            ]
+        )
 
     def get_op_func_name(self):
         return "vapi_%s" % self.name
 
     def get_op_func_name(self):
         return "vapi_%s" % self.name
@@ -502,111 +619,126 @@ class CMessage (Message):
         if self.reply.has_payload():
             return "vapi_error_e %s(%s)" % (
                 self.get_op_func_name(),
         if self.reply.has_payload():
             return "vapi_error_e %s(%s)" % (
                 self.get_op_func_name(),
-                ",\n  ".join([
-                    'struct vapi_ctx_s *ctx',
-                    '%s *msg' % self.get_c_name(),
-                    'vapi_error_e (*callback)(struct vapi_ctx_s *ctx',
-                    '                         void *callback_ctx',
-                    '                         vapi_error_e rv',
-                    '                         bool is_last',
-                    '                         %s *reply)' %
-                    self.reply.get_payload_struct_name(),
-                    'void *callback_ctx',
-                ])
+                ",\n  ".join(
+                    [
+                        "struct vapi_ctx_s *ctx",
+                        "%s *msg" % self.get_c_name(),
+                        "vapi_error_e (*callback)(struct vapi_ctx_s *ctx",
+                        "                         void *callback_ctx",
+                        "                         vapi_error_e rv",
+                        "                         bool is_last",
+                        "                         %s *reply)"
+                        % self.reply.get_payload_struct_name(),
+                        "void *callback_ctx",
+                    ]
+                ),
             )
         else:
             return "vapi_error_e %s(%s)" % (
                 self.get_op_func_name(),
             )
         else:
             return "vapi_error_e %s(%s)" % (
                 self.get_op_func_name(),
-                ",\n  ".join([
-                    'struct vapi_ctx_s *ctx',
-                    '%s *msg' % self.get_c_name(),
-                    'vapi_error_e (*callback)(struct vapi_ctx_s *ctx',
-                    '                         void *callback_ctx',
-                    '                         vapi_error_e rv',
-                    '                         bool is_last)',
-                    'void *callback_ctx',
-                ])
+                ",\n  ".join(
+                    [
+                        "struct vapi_ctx_s *ctx",
+                        "%s *msg" % self.get_c_name(),
+                        "vapi_error_e (*callback)(struct vapi_ctx_s *ctx",
+                        "                         void *callback_ctx",
+                        "                         vapi_error_e rv",
+                        "                         bool is_last)",
+                        "void *callback_ctx",
+                    ]
+                ),
             )
 
     def get_op_func_def(self):
             )
 
     def get_op_func_def(self):
-        return "\n".join([
-            "%s" % self.get_op_func_decl(),
-            "{",
-            "  if (!msg || !callback) {",
-            "    return VAPI_EINVAL;",
-            "  }",
-            "  if (vapi_is_nonblocking(ctx) && vapi_requests_full(ctx)) {",
-            "    return VAPI_EAGAIN;",
-            "  }",
-            "  vapi_error_e rv;",
-            "  if (VAPI_OK != (rv = vapi_producer_lock (ctx))) {",
-            "    return rv;",
-            "  }",
-            "  u32 req_context = vapi_gen_req_context(ctx);",
-            "  msg->header.context = req_context;",
-            "  %s(msg);" % self.get_swap_to_be_func_name(),
-            ("  if (VAPI_OK == (rv = vapi_send_with_control_ping "
-                "(ctx, msg, req_context))) {"
-                if self.reply_is_stream else
-                "  if (VAPI_OK == (rv = vapi_send (ctx, msg))) {"
-             ),
-            ("    vapi_store_request(ctx, req_context, %s, "
-             "(vapi_cb_t)callback, callback_ctx);" %
-             ("true" if self.reply_is_stream else "false")),
-            "    if (VAPI_OK != vapi_producer_unlock (ctx)) {",
-            "      abort (); /* this really shouldn't happen */",
-            "    }",
-            "    if (vapi_is_nonblocking(ctx)) {",
-            "      rv = VAPI_OK;",
-            "    } else {",
-            "      rv = vapi_dispatch(ctx);",
-            "    }",
-            "  } else {",
-            "    %s(msg);" % self.get_swap_to_host_func_name(),
-            "    if (VAPI_OK != vapi_producer_unlock (ctx)) {",
-            "      abort (); /* this really shouldn't happen */",
-            "    }",
-            "  }",
-            "  return rv;",
-            "}",
-            "",
-        ])
+        return "\n".join(
+            [
+                "%s" % self.get_op_func_decl(),
+                "{",
+                "  if (!msg || !callback) {",
+                "    return VAPI_EINVAL;",
+                "  }",
+                "  if (vapi_is_nonblocking(ctx) && vapi_requests_full(ctx)) {",
+                "    return VAPI_EAGAIN;",
+                "  }",
+                "  vapi_error_e rv;",
+                "  if (VAPI_OK != (rv = vapi_producer_lock (ctx))) {",
+                "    return rv;",
+                "  }",
+                "  u32 req_context = vapi_gen_req_context(ctx);",
+                "  msg->header.context = req_context;",
+                "  %s(msg);" % self.get_swap_to_be_func_name(),
+                (
+                    "  if (VAPI_OK == (rv = vapi_send_with_control_ping "
+                    "(ctx, msg, req_context))) {"
+                    if self.reply_is_stream
+                    else "  if (VAPI_OK == (rv = vapi_send (ctx, msg))) {"
+                ),
+                (
+                    "    vapi_store_request(ctx, req_context, %s, "
+                    "(vapi_cb_t)callback, callback_ctx);"
+                    % ("true" if self.reply_is_stream else "false")
+                ),
+                "    if (VAPI_OK != vapi_producer_unlock (ctx)) {",
+                "      abort (); /* this really shouldn't happen */",
+                "    }",
+                "    if (vapi_is_nonblocking(ctx)) {",
+                "      rv = VAPI_OK;",
+                "    } else {",
+                "      rv = vapi_dispatch(ctx);",
+                "    }",
+                "  } else {",
+                "    %s(msg);" % self.get_swap_to_host_func_name(),
+                "    if (VAPI_OK != vapi_producer_unlock (ctx)) {",
+                "      abort (); /* this really shouldn't happen */",
+                "    }",
+                "  }",
+                "  return rv;",
+                "}",
+                "",
+            ]
+        )
 
     def get_event_cb_func_decl(self):
         if not self.is_reply and not self.is_event:
 
     def get_event_cb_func_decl(self):
         if not self.is_reply and not self.is_event:
-            raise Exception(
-                "Cannot register event callback for non-reply message")
+            raise Exception("Cannot register event callback for non-reply message")
         if self.has_payload():
         if self.has_payload():
-            return "\n".join([
-                "void vapi_set_%s_event_cb (" %
-                self.get_c_name(),
-                "  struct vapi_ctx_s *ctx, ",
-                ("  vapi_error_e (*callback)(struct vapi_ctx_s *ctx, "
-                 "void *callback_ctx, %s *payload)," %
-                 self.get_payload_struct_name()),
-                "  void *callback_ctx)",
-            ])
+            return "\n".join(
+                [
+                    "void vapi_set_%s_event_cb (" % self.get_c_name(),
+                    "  struct vapi_ctx_s *ctx, ",
+                    (
+                        "  vapi_error_e (*callback)(struct vapi_ctx_s *ctx, "
+                        "void *callback_ctx, %s *payload),"
+                        % self.get_payload_struct_name()
+                    ),
+                    "  void *callback_ctx)",
+                ]
+            )
         else:
         else:
-            return "\n".join([
-                "void vapi_set_%s_event_cb (" %
-                self.get_c_name(),
-                "  struct vapi_ctx_s *ctx, ",
-                "  vapi_error_e (*callback)(struct vapi_ctx_s *ctx, "
-                "void *callback_ctx),",
-                "  void *callback_ctx)",
-            ])
+            return "\n".join(
+                [
+                    "void vapi_set_%s_event_cb (" % self.get_c_name(),
+                    "  struct vapi_ctx_s *ctx, ",
+                    "  vapi_error_e (*callback)(struct vapi_ctx_s *ctx, "
+                    "void *callback_ctx),",
+                    "  void *callback_ctx)",
+                ]
+            )
 
     def get_event_cb_func_def(self):
         if not self.is_reply and not self.is_event:
 
     def get_event_cb_func_def(self):
         if not self.is_reply and not self.is_event:
-            raise Exception(
-                "Cannot register event callback for non-reply function")
-        return "\n".join([
-            "%s" % self.get_event_cb_func_decl(),
-            "{",
-            ("  vapi_set_event_cb(ctx, %s, (vapi_event_cb)callback, "
-             "callback_ctx);" %
-             self.get_msg_id_name()),
-            "}"])
+            raise Exception("Cannot register event callback for non-reply function")
+        return "\n".join(
+            [
+                "%s" % self.get_event_cb_func_decl(),
+                "{",
+                (
+                    "  vapi_set_event_cb(ctx, %s, (vapi_event_cb)callback, "
+                    "callback_ctx);" % self.get_msg_id_name()
+                ),
+                "}",
+            ]
+        )
 
     def get_c_metadata_struct_name(self):
         return "__vapi_metadata_%s" % self.name
 
     def get_c_metadata_struct_name(self):
         return "__vapi_metadata_%s" % self.name
@@ -614,38 +746,41 @@ class CMessage (Message):
     def get_c_constructor(self):
         has_context = False
         if self.header is not None:
     def get_c_constructor(self):
         has_context = False
         if self.header is not None:
-            has_context = self.header.has_field('context')
-        return '\n'.join([
-            'static void __attribute__((constructor)) __vapi_constructor_%s()'
-            % self.name,
-            '{',
-            '  static const char name[] = "%s";' % self.name,
-            '  static const char name_with_crc[] = "%s_%s";'
-            % (self.name, self.crc[2:]),
-            '  static vapi_message_desc_t %s = {' %
-            self.get_c_metadata_struct_name(),
-            '    name,',
-            '    sizeof(name) - 1,',
-            '    name_with_crc,',
-            '    sizeof(name_with_crc) - 1,',
-            '    true,' if has_context else '    false,',
-            '    offsetof(%s, context),' % self.header.get_c_name()
-            if has_context else '    0,',
-            ('    offsetof(%s, payload),' % self.get_c_name())
-            if self.has_payload() else '    VAPI_INVALID_MSG_ID,',
-            '    (verify_msg_size_fn_t)%s,' %
-            self.get_verify_msg_size_func_name(),
-            '    (generic_swap_fn_t)%s,' % self.get_swap_to_be_func_name(),
-            '    (generic_swap_fn_t)%s,' % self.get_swap_to_host_func_name(),
-            '    VAPI_INVALID_MSG_ID,',
-            '  };',
-            '',
-            '  %s = vapi_register_msg(&%s);' %
-            (self.get_msg_id_name(), self.get_c_metadata_struct_name()),
-            '  VAPI_DBG("Assigned msg id %%d to %s", %s);' %
-            (self.name, self.get_msg_id_name()),
-            '}',
-        ])
+            has_context = self.header.has_field("context")
+        return "\n".join(
+            [
+                "static void __attribute__((constructor)) __vapi_constructor_%s()"
+                % self.name,
+                "{",
+                '  static const char name[] = "%s";' % self.name,
+                '  static const char name_with_crc[] = "%s_%s";'
+                % (self.name, self.crc[2:]),
+                "  static vapi_message_desc_t %s = {"
+                % self.get_c_metadata_struct_name(),
+                "    name,",
+                "    sizeof(name) - 1,",
+                "    name_with_crc,",
+                "    sizeof(name_with_crc) - 1,",
+                "    true," if has_context else "    false,",
+                "    offsetof(%s, context)," % self.header.get_c_name()
+                if has_context
+                else "    0,",
+                ("    offsetof(%s, payload)," % self.get_c_name())
+                if self.has_payload()
+                else "    VAPI_INVALID_MSG_ID,",
+                "    (verify_msg_size_fn_t)%s," % self.get_verify_msg_size_func_name(),
+                "    (generic_swap_fn_t)%s," % self.get_swap_to_be_func_name(),
+                "    (generic_swap_fn_t)%s," % self.get_swap_to_host_func_name(),
+                "    VAPI_INVALID_MSG_ID,",
+                "  };",
+                "",
+                "  %s = vapi_register_msg(&%s);"
+                % (self.get_msg_id_name(), self.get_c_metadata_struct_name()),
+                '  VAPI_DBG("Assigned msg id %%d to %s", %s);'
+                % (self.name, self.get_msg_id_name()),
+                "}",
+            ]
+        )
 
 
 def emit_definition(parser, json_file, emitted, o):
 
 
 def emit_definition(parser, json_file, emitted, o):
@@ -659,11 +794,13 @@ def emit_definition(parser, json_file, emitted, o):
     if hasattr(o, "reply"):
         emit_definition(parser, json_file, emitted, o.reply)
     if hasattr(o, "get_c_def"):
     if hasattr(o, "reply"):
         emit_definition(parser, json_file, emitted, o.reply)
     if hasattr(o, "get_c_def"):
-        if (o not in parser.enums_by_json[json_file] and
-                o not in parser.types_by_json[json_file] and
-                o not in parser.unions_by_json[json_file] and
-                o.name not in parser.messages_by_json[json_file] and
-                o not in parser.aliases_by_json[json_file]):
+        if (
+            o not in parser.enums_by_json[json_file]
+            and o not in parser.types_by_json[json_file]
+            and o not in parser.unions_by_json[json_file]
+            and o.name not in parser.messages_by_json[json_file]
+            and o not in parser.aliases_by_json[json_file]
+        ):
             return
         guard = "defined_%s" % o.get_c_name()
         print("#ifndef %s" % guard)
             return
         guard = "defined_%s" % o.get_c_name()
         print("#ifndef %s" % guard)
@@ -673,11 +810,9 @@ def emit_definition(parser, json_file, emitted, o):
         function_attrs = "static inline "
         if o.name in parser.messages_by_json[json_file]:
             if o.has_payload():
         function_attrs = "static inline "
         if o.name in parser.messages_by_json[json_file]:
             if o.has_payload():
-                print("%s%s" % (function_attrs,
-                                o.get_swap_payload_to_be_func_def()))
+                print("%s%s" % (function_attrs, o.get_swap_payload_to_be_func_def()))
                 print("")
                 print("")
-                print("%s%s" % (function_attrs,
-                                o.get_swap_payload_to_host_func_def()))
+                print("%s%s" % (function_attrs, o.get_swap_payload_to_host_func_def()))
                 print("")
             print("%s%s" % (function_attrs, o.get_swap_to_be_func_def()))
             print("")
                 print("")
             print("%s%s" % (function_attrs, o.get_swap_to_be_func_def()))
             print("")
@@ -711,8 +846,12 @@ def gen_json_unified_header(parser, logger, j, io, name):
     orig_stdout = sys.stdout
     sys.stdout = io
     include_guard = "__included_%s" % (
     orig_stdout = sys.stdout
     sys.stdout = io
     include_guard = "__included_%s" % (
-        j.replace(".", "_").replace("/", "_").replace("-", "_").replace(
-            "+", "_").replace("@", "_"))
+        j.replace(".", "_")
+        .replace("/", "_")
+        .replace("-", "_")
+        .replace("+", "_")
+        .replace("@", "_")
+    )
     print("#ifndef %s" % include_guard)
     print("#define %s" % include_guard)
     print("")
     print("#ifndef %s" % include_guard)
     print("#define %s" % include_guard)
     print("")
@@ -724,12 +863,14 @@ def gen_json_unified_header(parser, logger, j, io, name):
     print("#include <vapi/vapi_dbg.h>")
     print("")
     print("#ifdef __cplusplus")
     print("#include <vapi/vapi_dbg.h>")
     print("")
     print("#ifdef __cplusplus")
-    print("extern \"C\" {")
+    print('extern "C" {')
     print("#endif")
     if name == "memclnt.api.vapi.h":
         print("")
     print("#endif")
     if name == "memclnt.api.vapi.h":
         print("")
-        print("static inline vapi_error_e vapi_send_with_control_ping "
-              "(vapi_ctx_t ctx, void * msg, u32 context);")
+        print(
+            "static inline vapi_error_e vapi_send_with_control_ping "
+            "(vapi_ctx_t ctx, void * msg, u32 context);"
+        )
     elif name == "vlib.api.vapi.h":
         print("#include <vapi/memclnt.api.vapi.h>")
     else:
     elif name == "vlib.api.vapi.h":
         print("#include <vapi/memclnt.api.vapi.h>")
     else:
@@ -738,12 +879,18 @@ def gen_json_unified_header(parser, logger, j, io, name):
     for m in parser.messages_by_json[j].values():
         print("extern vapi_msg_id_t %s;" % m.get_msg_id_name())
     print("")
     for m in parser.messages_by_json[j].values():
         print("extern vapi_msg_id_t %s;" % m.get_msg_id_name())
     print("")
-    print("#define DEFINE_VAPI_MSG_IDS_%s\\" %
-          f.replace(".", "_").replace("/", "_").replace("-", "_").upper())
-    print("\\\n".join([
-        "  vapi_msg_id_t %s;" % m.get_msg_id_name()
-        for m in parser.messages_by_json[j].values()
-    ]))
+    print(
+        "#define DEFINE_VAPI_MSG_IDS_%s\\"
+        % f.replace(".", "_").replace("/", "_").replace("-", "_").upper()
+    )
+    print(
+        "\\\n".join(
+            [
+                "  vapi_msg_id_t %s;" % m.get_msg_id_name()
+                for m in parser.messages_by_json[j].values()
+            ]
+        )
+    )
     print("")
     print("")
     emitted = []
     print("")
     print("")
     emitted = []
@@ -802,12 +949,11 @@ def gen_c_unified_headers(parser, logger, prefix, remove_path):
             d, f = os.path.split(j)
         else:
             f = j
             d, f = os.path.split(j)
         else:
             f = j
-        with open('%s%s' % (prefix, json_to_c_header_name(f)), "w") as io:
-            gen_json_unified_header(
-                parser, logger, j, io, json_to_c_header_name(f))
+        with open("%s%s" % (prefix, json_to_c_header_name(f)), "w") as io:
+            gen_json_unified_header(parser, logger, j, io, json_to_c_header_name(f))
 
 
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     try:
         verbose = int(os.getenv("V", 0))
     except:
     try:
         verbose = int(os.getenv("V", 0))
     except:
@@ -825,23 +971,30 @@ if __name__ == '__main__':
     logger.setLevel(log_level)
 
     argparser = argparse.ArgumentParser(description="VPP C API generator")
     logger.setLevel(log_level)
 
     argparser = argparse.ArgumentParser(description="VPP C API generator")
-    argparser.add_argument('files', metavar='api-file', action='append',
-                           type=str, help='json api file'
-                           '(may be specified multiple times)')
-    argparser.add_argument('--prefix', action='store', default=None,
-                           help='path prefix')
-    argparser.add_argument('--remove-path', action='store_true',
-                           help='remove path from filename')
+    argparser.add_argument(
+        "files",
+        metavar="api-file",
+        action="append",
+        type=str,
+        help="json api file" "(may be specified multiple times)",
+    )
+    argparser.add_argument("--prefix", action="store", default=None, help="path prefix")
+    argparser.add_argument(
+        "--remove-path", action="store_true", help="remove path from filename"
+    )
     args = argparser.parse_args()
 
     args = argparser.parse_args()
 
-    jsonparser = JsonParser(logger, args.files,
-                            simple_type_class=CSimpleType,
-                            enum_class=CEnum,
-                            union_class=CUnion,
-                            struct_type_class=CStructType,
-                            field_class=CField,
-                            message_class=CMessage,
-                            alias_class=CAlias)
+    jsonparser = JsonParser(
+        logger,
+        args.files,
+        simple_type_class=CSimpleType,
+        enum_class=CEnum,
+        union_class=CUnion,
+        struct_type_class=CStructType,
+        field_class=CField,
+        message_class=CMessage,
+        alias_class=CAlias,
+    )
 
     # not using the model of having separate generated header and code files
     # with generated symbols present in shared library (per discussion with
 
     # not using the model of having separate generated header and code files
     # with generated symbols present in shared library (per discussion with
index 7bc2e7f..33744a3 100755 (executable)
@@ -4,8 +4,16 @@ import argparse
 import os
 import sys
 import logging
 import os
 import sys
 import logging
-from vapi_c_gen import CField, CEnum, CStruct, CSimpleType, CStructType,\
-    CMessage, json_to_c_header_name, CAlias
+from vapi_c_gen import (
+    CField,
+    CEnum,
+    CStruct,
+    CSimpleType,
+    CStructType,
+    CMessage,
+    json_to_c_header_name,
+    CAlias,
+)
 from vapi_json_parser import JsonParser
 
 
 from vapi_json_parser import JsonParser
 
 
@@ -25,53 +33,64 @@ class CppAlias(CAlias):
     pass
 
 
     pass
 
 
-class CppSimpleType (CSimpleType):
+class CppSimpleType(CSimpleType):
     pass
 
 
     pass
 
 
-class CppStructType (CStructType, CppStruct):
+class CppStructType(CStructType, CppStruct):
     pass
 
 
     pass
 
 
-class CppMessage (CMessage):
+class CppMessage(CMessage):
     def get_swap_to_be_template_instantiation(self):
     def get_swap_to_be_template_instantiation(self):
-        return "\n".join([
-            "template <> inline void vapi_swap_to_be<%s>(%s *msg)" %
-            (self.get_c_name(), self.get_c_name()),
-            "{",
-            "  %s(msg);" % self.get_swap_to_be_func_name(),
-            "}",
-        ])
+        return "\n".join(
+            [
+                "template <> inline void vapi_swap_to_be<%s>(%s *msg)"
+                % (self.get_c_name(), self.get_c_name()),
+                "{",
+                "  %s(msg);" % self.get_swap_to_be_func_name(),
+                "}",
+            ]
+        )
 
     def get_swap_to_host_template_instantiation(self):
 
     def get_swap_to_host_template_instantiation(self):
-        return "\n".join([
-            "template <> inline void vapi_swap_to_host<%s>(%s *msg)" %
-            (self.get_c_name(), self.get_c_name()),
-            "{",
-            "  %s(msg);" % self.get_swap_to_host_func_name(),
-            "}",
-        ])
+        return "\n".join(
+            [
+                "template <> inline void vapi_swap_to_host<%s>(%s *msg)"
+                % (self.get_c_name(), self.get_c_name()),
+                "{",
+                "  %s(msg);" % self.get_swap_to_host_func_name(),
+                "}",
+            ]
+        )
 
     def get_alloc_template_instantiation(self):
 
     def get_alloc_template_instantiation(self):
-        return "\n".join([
-            "template <> inline %s* vapi_alloc<%s%s>"
-            "(Connection &con%s)" %
-            (self.get_c_name(), self.get_c_name(),
-                ", size_t" * len(self.get_alloc_vla_param_names()),
-                "".join([", size_t %s" % n for n in
-                         self.get_alloc_vla_param_names()])
-             ),
-            "{",
-            "  %s* result = %s(con.vapi_ctx%s);" %
-            (self.get_c_name(), self.get_alloc_func_name(),
-                "".join([", %s" % n
-                         for n in self.get_alloc_vla_param_names()])),
-            "#if VAPI_CPP_DEBUG_LEAKS",
-            "  con.on_shm_data_alloc(result);",
-            "#endif",
-            "  return result;",
-            "}",
-        ])
+        return "\n".join(
+            [
+                "template <> inline %s* vapi_alloc<%s%s>"
+                "(Connection &con%s)"
+                % (
+                    self.get_c_name(),
+                    self.get_c_name(),
+                    ", size_t" * len(self.get_alloc_vla_param_names()),
+                    "".join(
+                        [", size_t %s" % n for n in self.get_alloc_vla_param_names()]
+                    ),
+                ),
+                "{",
+                "  %s* result = %s(con.vapi_ctx%s);"
+                % (
+                    self.get_c_name(),
+                    self.get_alloc_func_name(),
+                    "".join([", %s" % n for n in self.get_alloc_vla_param_names()]),
+                ),
+                "#if VAPI_CPP_DEBUG_LEAKS",
+                "  con.on_shm_data_alloc(result);",
+                "#endif",
+                "  return result;",
+                "}",
+            ]
+        )
 
     def get_cpp_name(self):
         return "%s%s" % (self.name[0].upper(), self.name[1:])
 
     def get_cpp_name(self):
         return "%s%s" % (self.name[0].upper(), self.name[1:])
@@ -86,51 +105,60 @@ class CppMessage (CMessage):
             template,
             self.get_c_name(),
             self.reply.get_c_name(),
             template,
             self.get_c_name(),
             self.reply.get_c_name(),
-            "".join([", size_t"] * len(self.get_alloc_vla_param_names()))
+            "".join([", size_t"] * len(self.get_alloc_vla_param_names())),
         )
 
     def get_req_template_instantiation(self):
         return "template class %s;" % self.get_req_template_name()
 
     def get_type_alias(self):
         )
 
     def get_req_template_instantiation(self):
         return "template class %s;" % self.get_req_template_name()
 
     def get_type_alias(self):
-        return "using %s = %s;" % (
-            self.get_cpp_name(), self.get_req_template_name())
+        return "using %s = %s;" % (self.get_cpp_name(), self.get_req_template_name())
 
     def get_reply_template_name(self):
         return "Msg<%s>" % (self.get_c_name())
 
     def get_reply_type_alias(self):
 
     def get_reply_template_name(self):
         return "Msg<%s>" % (self.get_c_name())
 
     def get_reply_type_alias(self):
-        return "using %s = %s;" % (
-            self.get_cpp_name(), self.get_reply_template_name())
+        return "using %s = %s;" % (self.get_cpp_name(), self.get_reply_template_name())
 
     def get_msg_class_instantiation(self):
         return "template class Msg<%s>;" % self.get_c_name()
 
     def get_get_msg_id_t_instantiation(self):
 
     def get_msg_class_instantiation(self):
         return "template class Msg<%s>;" % self.get_c_name()
 
     def get_get_msg_id_t_instantiation(self):
-        return "\n".join([
-            ("template <> inline vapi_msg_id_t vapi_get_msg_id_t<%s>()"
-                % self.get_c_name()),
-            "{",
-            "  return ::%s; " % self.get_msg_id_name(),
-            "}",
-            "",
-            ("template <> inline vapi_msg_id_t "
-             "vapi_get_msg_id_t<Msg<%s>>()" % self.get_c_name()),
-            "{",
-            "  return ::%s; " % self.get_msg_id_name(),
-            "}",
-        ])
+        return "\n".join(
+            [
+                (
+                    "template <> inline vapi_msg_id_t vapi_get_msg_id_t<%s>()"
+                    % self.get_c_name()
+                ),
+                "{",
+                "  return ::%s; " % self.get_msg_id_name(),
+                "}",
+                "",
+                (
+                    "template <> inline vapi_msg_id_t "
+                    "vapi_get_msg_id_t<Msg<%s>>()" % self.get_c_name()
+                ),
+                "{",
+                "  return ::%s; " % self.get_msg_id_name(),
+                "}",
+            ]
+        )
 
     def get_cpp_constructor(self):
 
     def get_cpp_constructor(self):
-        return '\n'.join([
-            ('static void __attribute__((constructor)) '
-             '__vapi_cpp_constructor_%s()'
-             % self.name),
-            '{',
-            ('  vapi::vapi_msg_set_msg_id<%s>(%s);' % (
-                self.get_c_name(), self.get_msg_id_name())),
-            '}',
-        ])
+        return "\n".join(
+            [
+                (
+                    "static void __attribute__((constructor)) "
+                    "__vapi_cpp_constructor_%s()" % self.name
+                ),
+                "{",
+                (
+                    "  vapi::vapi_msg_set_msg_id<%s>(%s);"
+                    % (self.get_c_name(), self.get_msg_id_name())
+                ),
+                "}",
+            ]
+        )
 
 
 def gen_json_header(parser, logger, j, io, gen_h_prefix, add_debug_comments):
 
 
 def gen_json_header(parser, logger, j, io, gen_h_prefix, add_debug_comments):
@@ -139,8 +167,8 @@ def gen_json_header(parser, logger, j, io, gen_h_prefix, add_debug_comments):
     sys.stdout = io
     d, f = os.path.split(j)
     include_guard = "__included_hpp_%s" % (
     sys.stdout = io
     d, f = os.path.split(j)
     include_guard = "__included_hpp_%s" % (
-        f.replace(".", "_").replace("/", "_").replace("-", "_").replace(
-            "@", "_"))
+        f.replace(".", "_").replace("/", "_").replace("-", "_").replace("@", "_")
+    )
     print("#ifndef %s" % include_guard)
     print("#define %s" % include_guard)
     print("")
     print("#ifndef %s" % include_guard)
     print("#define %s" % include_guard)
     print("")
@@ -202,8 +230,9 @@ def json_to_cpp_header_name(json_name):
     raise Exception("Unexpected json name `%s'!" % json_name)
 
 
     raise Exception("Unexpected json name `%s'!" % json_name)
 
 
-def gen_cpp_headers(parser, logger, prefix, gen_h_prefix, remove_path,
-                    add_debug_comments=False):
+def gen_cpp_headers(
+    parser, logger, prefix, gen_h_prefix, remove_path, add_debug_comments=False
+):
     if prefix == "" or prefix is None:
         prefix = ""
     else:
     if prefix == "" or prefix is None:
         prefix = ""
     else:
@@ -217,12 +246,11 @@ def gen_cpp_headers(parser, logger, prefix, gen_h_prefix, remove_path,
             d, f = os.path.split(j)
         else:
             f = j
             d, f = os.path.split(j)
         else:
             f = j
-        with open('%s%s' % (prefix, json_to_cpp_header_name(f)), "w") as io:
-            gen_json_header(parser, logger, j, io,
-                            gen_h_prefix, add_debug_comments)
+        with open("%s%s" % (prefix, json_to_cpp_header_name(f)), "w") as io:
+            gen_json_header(parser, logger, j, io, gen_h_prefix, add_debug_comments)
 
 
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     try:
         verbose = int(os.getenv("V", 0))
     except:
     try:
         verbose = int(os.getenv("V", 0))
     except:
@@ -240,27 +268,36 @@ if __name__ == '__main__':
     logger.setLevel(log_level)
 
     argparser = argparse.ArgumentParser(description="VPP C++ API generator")
     logger.setLevel(log_level)
 
     argparser = argparse.ArgumentParser(description="VPP C++ API generator")
-    argparser.add_argument('files', metavar='api-file', action='append',
-                           type=str, help='json api file'
-                           '(may be specified multiple times)')
-    argparser.add_argument('--prefix', action='store', default=None,
-                           help='path prefix')
-    argparser.add_argument('--gen-h-prefix', action='store', default=None,
-                           help='generated C header prefix')
-    argparser.add_argument('--remove-path', action='store_true',
-                           help='remove path from filename')
+    argparser.add_argument(
+        "files",
+        metavar="api-file",
+        action="append",
+        type=str,
+        help="json api file" "(may be specified multiple times)",
+    )
+    argparser.add_argument("--prefix", action="store", default=None, help="path prefix")
+    argparser.add_argument(
+        "--gen-h-prefix", action="store", default=None, help="generated C header prefix"
+    )
+    argparser.add_argument(
+        "--remove-path", action="store_true", help="remove path from filename"
+    )
     args = argparser.parse_args()
 
     args = argparser.parse_args()
 
-    jsonparser = JsonParser(logger, args.files,
-                            simple_type_class=CppSimpleType,
-                            struct_type_class=CppStructType,
-                            field_class=CppField,
-                            enum_class=CppEnum,
-                            message_class=CppMessage,
-                            alias_class=CppAlias)
-
-    gen_cpp_headers(jsonparser, logger, args.prefix, args.gen_h_prefix,
-                    args.remove_path)
+    jsonparser = JsonParser(
+        logger,
+        args.files,
+        simple_type_class=CppSimpleType,
+        struct_type_class=CppStructType,
+        field_class=CppField,
+        enum_class=CppEnum,
+        message_class=CppMessage,
+        alias_class=CppAlias,
+    )
+
+    gen_cpp_headers(
+        jsonparser, logger, args.prefix, args.gen_h_prefix, args.remove_path
+    )
 
     for e in jsonparser.exceptions:
         logger.warning(e)
 
     for e in jsonparser.exceptions:
         logger.warning(e)
index 1383d45..a323f15 100644 (file)
@@ -3,7 +3,7 @@
 import json
 
 
 import json
 
 
-class ParseError (Exception):
+class ParseError(Exception):
     pass
 
 
     pass
 
 
@@ -13,14 +13,12 @@ magic_suffix = "_t"
 
 def remove_magic(what):
     if what.startswith(magic_prefix) and what.endswith(magic_suffix):
 
 def remove_magic(what):
     if what.startswith(magic_prefix) and what.endswith(magic_suffix):
-        return what[len(magic_prefix): - len(magic_suffix)]
+        return what[len(magic_prefix) : -len(magic_suffix)]
     return what
 
 
 class Field(object):
     return what
 
 
 class Field(object):
-
-    def __init__(self, field_name, field_type, array_len=None,
-                 nelem_field=None):
+    def __init__(self, field_name, field_type, array_len=None, nelem_field=None):
         self.name = field_name
         self.type = field_type
         self.len = array_len
         self.name = field_name
         self.type = field_type
         self.len = array_len
@@ -30,17 +28,23 @@ class Field(object):
         if self.len is None:
             return "Field(name: %s, type: %s)" % (self.name, self.type)
         elif type(self.len) == dict:
         if self.len is None:
             return "Field(name: %s, type: %s)" % (self.name, self.type)
         elif type(self.len) == dict:
-            return "Field(name: %s, type: %s, length: %s)" % (self.name,
-                                                              self.type,
-                                                              self.len)
+            return "Field(name: %s, type: %s, length: %s)" % (
+                self.name,
+                self.type,
+                self.len,
+            )
         elif self.len > 0:
         elif self.len > 0:
-            return "Field(name: %s, type: %s, length: %s)" % (self.name,
-                                                              self.type,
-                                                              self.len)
+            return "Field(name: %s, type: %s, length: %s)" % (
+                self.name,
+                self.type,
+                self.len,
+            )
         else:
         else:
-            return (
-                "Field(name: %s, type: %s, variable length stored in: %s)" %
-                (self.name, self.type, self.nelem_field))
+            return "Field(name: %s, type: %s, variable length stored in: %s)" % (
+                self.name,
+                self.type,
+                self.nelem_field,
+            )
 
     def is_vla(self):
         return self.nelem_field is not None
 
     def is_vla(self):
         return self.nelem_field is not None
@@ -61,32 +65,38 @@ class Type(object):
         return self.name
 
 
         return self.name
 
 
-class SimpleType (Type):
-
+class SimpleType(Type):
     def has_vla(self):
         return False
 
 
 def get_msg_header_defs(struct_type_class, field_class, json_parser, logger):
     return [
     def has_vla(self):
         return False
 
 
 def get_msg_header_defs(struct_type_class, field_class, json_parser, logger):
     return [
-        struct_type_class(['msg_header1_t',
-                           ['u16', '_vl_msg_id'],
-                           ['u32', 'context'],
-                           ],
-                          json_parser, field_class, logger
-                          ),
-        struct_type_class(['msg_header2_t',
-                           ['u16', '_vl_msg_id'],
-                           ['u32', 'client_index'],
-                           ['u32', 'context'],
-                           ],
-                          json_parser, field_class, logger
-                          ),
+        struct_type_class(
+            [
+                "msg_header1_t",
+                ["u16", "_vl_msg_id"],
+                ["u32", "context"],
+            ],
+            json_parser,
+            field_class,
+            logger,
+        ),
+        struct_type_class(
+            [
+                "msg_header2_t",
+                ["u16", "_vl_msg_id"],
+                ["u32", "client_index"],
+                ["u32", "context"],
+            ],
+            json_parser,
+            field_class,
+            logger,
+        ),
     ]
 
 
 class Struct(object):
     ]
 
 
 class Struct(object):
-
     def __init__(self, name, fields):
         self.name = name
         self.fields = fields
     def __init__(self, name, fields):
         self.name = name
         self.fields = fields
@@ -112,7 +122,7 @@ class Enum(SimpleType):
     def __str__(self):
         return "Enum(%s, [%s])" % (
             self.name,
     def __str__(self):
         return "Enum(%s, [%s])" % (
             self.name,
-            "], [" .join(["%s => %s" % (i, j) for i, j in self.value_pairs])
+            "], [".join(["%s => %s" % (i, j) for i, j in self.value_pairs]),
         )
 
 
         )
 
 
@@ -126,7 +136,7 @@ class Union(Type):
     def __str__(self):
         return "Union(%s, [%s])" % (
             self.name,
     def __str__(self):
         return "Union(%s, [%s])" % (
             self.name,
-            "], [" .join(["%s %s" % (i, j) for i, j in self.type_pairs])
+            "], [".join(["%s %s" % (i, j) for i, j in self.type_pairs]),
         )
 
     def has_vla(self):
         )
 
     def has_vla(self):
@@ -134,7 +144,6 @@ class Union(Type):
 
 
 class Message(object):
 
 
 class Message(object):
-
     def __init__(self, logger, definition, json_parser):
         struct_type_class = json_parser.struct_type_class
         field_class = json_parser.field_class
     def __init__(self, logger, definition, json_parser):
         struct_type_class = json_parser.struct_type_class
         field_class = json_parser.field_class
@@ -150,22 +159,24 @@ class Message(object):
         self.is_reply = json_parser.is_reply(self.name)
         self.is_event = json_parser.is_event(self.name)
         fields = []
         self.is_reply = json_parser.is_reply(self.name)
         self.is_event = json_parser.is_event(self.name)
         fields = []
-        for header in get_msg_header_defs(struct_type_class, field_class,
-                                          json_parser, logger):
+        for header in get_msg_header_defs(
+            struct_type_class, field_class, json_parser, logger
+        ):
             logger.debug("Probing header `%s'" % header.name)
             if header.is_part_of_def(m[1:]):
                 self.header = header
                 logger.debug("Found header `%s'" % header.name)
             logger.debug("Probing header `%s'" % header.name)
             if header.is_part_of_def(m[1:]):
                 self.header = header
                 logger.debug("Found header `%s'" % header.name)
-                fields.append(field_class(field_name='header',
-                                          field_type=self.header))
+                fields.append(field_class(field_name="header", field_type=self.header))
                 ignore = False
                 break
         if ignore and not self.is_event and not self.is_reply:
                 ignore = False
                 break
         if ignore and not self.is_event and not self.is_reply:
-            raise ParseError("While parsing message `%s': could not find all "
-                             "common header fields" % name)
+            raise ParseError(
+                "While parsing message `%s': could not find all "
+                "common header fields" % name
+            )
         for field in m[1:]:
         for field in m[1:]:
-            if isinstance(field, dict) and 'crc' in field:
-                self.crc = field['crc']
+            if isinstance(field, dict) and "crc" in field:
+                self.crc = field["crc"]
                 logger.debug("Found CRC `%s'" % self.crc)
                 continue
             else:
                 logger.debug("Found CRC `%s'" % self.crc)
                 continue
             else:
@@ -175,25 +186,22 @@ class Message(object):
                 if any(type(n) is dict for n in field):
                     l -= 1
                 if l == 2:
                 if any(type(n) is dict for n in field):
                     l -= 1
                 if l == 2:
-                    if self.header is not None and\
-                            self.header.has_field(field[1]):
+                    if self.header is not None and self.header.has_field(field[1]):
                         continue
                         continue
-                    p = field_class(field_name=field[1],
-                                    field_type=field_type)
+                    p = field_class(field_name=field[1], field_type=field_type)
                 elif l == 3:
                 elif l == 3:
-                    if field[2] == 0 and field[0] != 'string':
+                    if field[2] == 0 and field[0] != "string":
                         raise ParseError(
                             "While parsing message `%s': variable length "
                             "array `%s' doesn't have reference to member "
                         raise ParseError(
                             "While parsing message `%s': variable length "
                             "array `%s' doesn't have reference to member "
-                            "containing the actual length" % (
-                                name, field[1]))
-                    if field[0] == 'string' and field[2] > 0:
-                        field_type = json_parser.lookup_type_like_id('u8')
+                            "containing the actual length" % (name, field[1])
+                        )
+                    if field[0] == "string" and field[2] > 0:
+                        field_type = json_parser.lookup_type_like_id("u8")
 
                     p = field_class(
 
                     p = field_class(
-                        field_name=field[1],
-                        field_type=field_type,
-                        array_len=field[2])
+                        field_name=field[1], field_type=field_type, array_len=field[2]
+                    )
                 elif l == 4:
                     nelem_field = None
                     for f in fields:
                 elif l == 4:
                     nelem_field = None
                     for f in fields:
@@ -203,17 +211,19 @@ class Message(object):
                         raise ParseError(
                             "While parsing message `%s': couldn't find "
                             "variable length array `%s' member containing "
                         raise ParseError(
                             "While parsing message `%s': couldn't find "
                             "variable length array `%s' member containing "
-                            "the actual length `%s'" % (
-                                name, field[1], field[3]))
+                            "the actual length `%s'" % (name, field[1], field[3])
+                        )
                     p = field_class(
                         field_name=field[1],
                         field_type=field_type,
                         array_len=field[2],
                     p = field_class(
                         field_name=field[1],
                         field_type=field_type,
                         array_len=field[2],
-                        nelem_field=nelem_field)
+                        nelem_field=nelem_field,
+                    )
                 else:
                 else:
-                    raise Exception("Don't know how to parse message "
-                                    "definition for message `%s': `%s'" %
-                                    (m, m[1:]))
+                    raise Exception(
+                        "Don't know how to parse message "
+                        "definition for message `%s': `%s'" % (m, m[1:])
+                    )
                 logger.debug("Parsed field `%s'" % p)
                 fields.append(p)
         self.fields = fields
                 logger.debug("Parsed field `%s'" % p)
                 fields.append(p)
         self.fields = fields
@@ -221,35 +231,36 @@ class Message(object):
         logger.debug("Parsed message: %s" % self)
 
     def __str__(self):
         logger.debug("Parsed message: %s" % self)
 
     def __str__(self):
-        return "Message(%s, [%s], {crc: %s}" % \
-            (self.name,
-             "], [".join([str(f) for f in self.fields]),
-             self.crc)
-
+        return "Message(%s, [%s], {crc: %s}" % (
+            self.name,
+            "], [".join([str(f) for f in self.fields]),
+            self.crc,
+        )
 
 
-class StructType (Type, Struct):
 
 
+class StructType(Type, Struct):
     def __init__(self, definition, json_parser, field_class, logger):
         t = definition
         logger.debug("Parsing struct definition `%s'" % t)
         name = t[0]
         fields = []
         for field in t[1:]:
     def __init__(self, definition, json_parser, field_class, logger):
         t = definition
         logger.debug("Parsing struct definition `%s'" % t)
         name = t[0]
         fields = []
         for field in t[1:]:
-            if len(field) == 1 and 'crc' in field:
-                self.crc = field['crc']
+            if len(field) == 1 and "crc" in field:
+                self.crc = field["crc"]
                 continue
             field_type = json_parser.lookup_type_like_id(field[0])
             logger.debug("Parsing type field `%s'" % field)
             if len(field) == 2:
                 continue
             field_type = json_parser.lookup_type_like_id(field[0])
             logger.debug("Parsing type field `%s'" % field)
             if len(field) == 2:
-                p = field_class(field_name=field[1],
-                                field_type=field_type)
+                p = field_class(field_name=field[1], field_type=field_type)
             elif len(field) == 3:
                 if field[2] == 0:
             elif len(field) == 3:
                 if field[2] == 0:
-                    raise ParseError("While parsing type `%s': array `%s' has "
-                                     "variable length" % (name, field[1]))
-                p = field_class(field_name=field[1],
-                                field_type=field_type,
-                                array_len=field[2])
+                    raise ParseError(
+                        "While parsing type `%s': array `%s' has "
+                        "variable length" % (name, field[1])
+                    )
+                p = field_class(
+                    field_name=field[1], field_type=field_type, array_len=field[2]
+                )
             elif len(field) == 4:
                 nelem_field = None
                 for f in fields:
             elif len(field) == 4:
                 nelem_field = None
                 for f in fields:
@@ -259,23 +270,25 @@ class StructType (Type, Struct):
                     raise ParseError(
                         "While parsing message `%s': couldn't find "
                         "variable length array `%s' member containing "
                     raise ParseError(
                         "While parsing message `%s': couldn't find "
                         "variable length array `%s' member containing "
-                        "the actual length `%s'" % (
-                            name, field[1], field[3]))
-                p = field_class(field_name=field[1],
-                                field_type=field_type,
-                                array_len=field[2],
-                                nelem_field=nelem_field)
+                        "the actual length `%s'" % (name, field[1], field[3])
+                    )
+                p = field_class(
+                    field_name=field[1],
+                    field_type=field_type,
+                    array_len=field[2],
+                    nelem_field=nelem_field,
+                )
             else:
                 raise ParseError(
                     "Don't know how to parse field `%s' of type definition "
             else:
                 raise ParseError(
                     "Don't know how to parse field `%s' of type definition "
-                    "for type `%s'" % (field, t))
+                    "for type `%s'" % (field, t)
+                )
             fields.append(p)
         Type.__init__(self, name)
         Struct.__init__(self, name, fields)
 
     def __str__(self):
             fields.append(p)
         Type.__init__(self, name)
         Struct.__init__(self, name, fields)
 
     def __str__(self):
-        return "StructType(%s, %s)" % (Type.__str__(self),
-                                       Struct.__str__(self))
+        return "StructType(%s, %s)" % (Type.__str__(self), Struct.__str__(self))
 
     def has_field(self, name):
         return name in self.field_names
 
     def has_field(self, name):
         return name in self.field_names
@@ -289,30 +302,47 @@ class StructType (Type, Struct):
             if field[0] != p.type.name:
                 raise ParseError(
                     "Unexpected field type `%s' (should be `%s'), "
             if field[0] != p.type.name:
                 raise ParseError(
                     "Unexpected field type `%s' (should be `%s'), "
-                    "while parsing msg/def/field `%s/%s/%s'" %
-                    (field[0], p.type, p.name, definition, field))
+                    "while parsing msg/def/field `%s/%s/%s'"
+                    % (field[0], p.type, p.name, definition, field)
+                )
         return True
 
 
 class JsonParser(object):
         return True
 
 
 class JsonParser(object):
-    def __init__(self, logger, files, simple_type_class=SimpleType,
-                 enum_class=Enum, union_class=Union,
-                 struct_type_class=StructType, field_class=Field,
-                 message_class=Message, alias_class=Alias):
+    def __init__(
+        self,
+        logger,
+        files,
+        simple_type_class=SimpleType,
+        enum_class=Enum,
+        union_class=Union,
+        struct_type_class=StructType,
+        field_class=Field,
+        message_class=Message,
+        alias_class=Alias,
+    ):
         self.services = {}
         self.messages = {}
         self.enums = {}
         self.unions = {}
         self.aliases = {}
         self.types = {
         self.services = {}
         self.messages = {}
         self.enums = {}
         self.unions = {}
         self.aliases = {}
         self.types = {
-            x: simple_type_class(x) for x in [
-                'i8', 'i16', 'i32', 'i64',
-                'u8', 'u16', 'u32', 'u64',
-                'f64', 'bool'
+            x: simple_type_class(x)
+            for x in [
+                "i8",
+                "i16",
+                "i32",
+                "i64",
+                "u8",
+                "u16",
+                "u32",
+                "u64",
+                "f64",
+                "bool",
             ]
         }
 
             ]
         }
 
-        self.types['string'] = simple_type_class('vl_api_string_t')
+        self.types["string"] = simple_type_class("vl_api_string_t")
         self.replies = set()
         self.events = set()
         self.simple_type_class = simple_type_class
         self.replies = set()
         self.events = set()
         self.simple_type_class = simple_type_class
@@ -345,15 +375,15 @@ class JsonParser(object):
         self.messages_by_json[path] = {}
         with open(path) as f:
             j = json.load(f)
         self.messages_by_json[path] = {}
         with open(path) as f:
             j = json.load(f)
-            for k in j['services']:
+            for k in j["services"]:
                 if k in self.services:
                     raise ParseError("Duplicate service `%s'" % k)
                 if k in self.services:
                     raise ParseError("Duplicate service `%s'" % k)
-                self.services[k] = j['services'][k]
+                self.services[k] = j["services"][k]
                 self.replies.add(self.services[k]["reply"])
                 if "events" in self.services[k]:
                     for x in self.services[k]["events"]:
                         self.events.add(x)
                 self.replies.add(self.services[k]["reply"])
                 if "events" in self.services[k]:
                     for x in self.services[k]["events"]:
                         self.events.add(x)
-            for e in j['enums']:
+            for e in j["enums"]:
                 name = e[0]
                 value_pairs = e[1:-1]
                 enumtype = self.types[e[-1]["enumtype"]]
                 name = e[0]
                 value_pairs = e[1:-1]
                 enumtype = self.types[e[-1]["enumtype"]]
@@ -365,14 +395,15 @@ class JsonParser(object):
             progress = 0
             last_progress = 0
             while True:
             progress = 0
             last_progress = 0
             while True:
-                for u in j['unions']:
+                for u in j["unions"]:
                     name = u[0]
                     if name in self.unions:
                         progress = progress + 1
                         continue
                     try:
                     name = u[0]
                     if name in self.unions:
                         progress = progress + 1
                         continue
                     try:
-                        type_pairs = [[self.lookup_type_like_id(t), n]
-                                      for t, n in u[1:]]
+                        type_pairs = [
+                            [self.lookup_type_like_id(t), n] for t, n in u[1:]
+                        ]
                         union = self.union_class(name, type_pairs, 0)
                         progress = progress + 1
                     except ParseError as e:
                         union = self.union_class(name, type_pairs, 0)
                         progress = progress + 1
                     except ParseError as e:
@@ -381,17 +412,16 @@ class JsonParser(object):
                     self.unions[union.name] = union
                     self.logger.debug("Parsed union: %s" % union)
                     self.unions_by_json[path].append(union)
                     self.unions[union.name] = union
                     self.logger.debug("Parsed union: %s" % union)
                     self.unions_by_json[path].append(union)
-                for t in j['types']:
+                for t in j["types"]:
                     if t[0] in self.types:
                         progress = progress + 1
                         continue
                     try:
                     if t[0] in self.types:
                         progress = progress + 1
                         continue
                     try:
-                        type_ = self.struct_type_class(t, self,
-                                                       self.field_class,
-                                                       self.logger)
+                        type_ = self.struct_type_class(
+                            t, self, self.field_class, self.logger
+                        )
                         if type_.name in self.types:
                         if type_.name in self.types:
-                            raise ParseError(
-                                "Duplicate type `%s'" % type_.name)
+                            raise ParseError("Duplicate type `%s'" % type_.name)
                         progress = progress + 1
                     except ParseError as e:
                         exceptions.append(e)
                         progress = progress + 1
                     except ParseError as e:
                         exceptions.append(e)
@@ -399,16 +429,16 @@ class JsonParser(object):
                     self.types[type_.name] = type_
                     self.types_by_json[path].append(type_)
                     self.logger.debug("Parsed type: %s" % type_)
                     self.types[type_.name] = type_
                     self.types_by_json[path].append(type_)
                     self.logger.debug("Parsed type: %s" % type_)
-                for name, body in j['aliases'].items():
+                for name, body in j["aliases"].items():
                     if name in self.aliases:
                         progress = progress + 1
                         continue
                     if name in self.aliases:
                         progress = progress + 1
                         continue
-                    if 'length' in body:
-                        array_len = body['length']
+                    if "length" in body:
+                        array_len = body["length"]
                     else:
                         array_len = None
                     try:
                     else:
                         array_len = None
                     try:
-                        t = self.lookup_type_like_id(body['type'])
+                        t = self.lookup_type_like_id(body["type"])
                     except ParseError as e:
                         exceptions.append(e)
                         continue
                     except ParseError as e:
                         exceptions.append(e)
                         continue
@@ -430,14 +460,13 @@ class JsonParser(object):
             processed = []
             while True:
                 exceptions = []
             processed = []
             while True:
                 exceptions = []
-                for m in j['messages']:
+                for m in j["messages"]:
                     if m in processed:
                         continue
                     try:
                         msg = self.message_class(self.logger, m, self)
                         if msg.name in self.messages:
                     if m in processed:
                         continue
                     try:
                         msg = self.message_class(self.logger, m, self)
                         if msg.name in self.messages:
-                            raise ParseError(
-                                "Duplicate message `%s'" % msg.name)
+                            raise ParseError("Duplicate message `%s'" % msg.name)
                     except ParseError as e:
                         exceptions.append(e)
                         continue
                     except ParseError as e:
                         exceptions.append(e)
                         continue
@@ -470,7 +499,8 @@ class JsonParser(object):
             return self.aliases[mundane_name]
         raise ParseError(
             "Could not find type, enum or union by magic name `%s' nor by "
             return self.aliases[mundane_name]
         raise ParseError(
             "Could not find type, enum or union by magic name `%s' nor by "
-            "mundane name `%s'" % (name, mundane_name))
+            "mundane name `%s'" % (name, mundane_name)
+        )
 
     def is_reply(self, message):
         return message in self.replies
 
     def is_reply(self, message):
         return message in self.replies
@@ -479,7 +509,7 @@ class JsonParser(object):
         return message in self.events
 
     def get_reply(self, message):
         return message in self.events
 
     def get_reply(self, message):
-        return self.messages[self.services[message]['reply']]
+        return self.messages[self.services[message]["reply"]]
 
     def finalize_parsing(self):
         if len(self.messages) == 0:
 
     def finalize_parsing(self):
         if len(self.messages) == 0:
@@ -493,17 +523,14 @@ class JsonParser(object):
                         try:
                             m.reply = self.get_reply(n)
                             if "stream" in self.services[m.name]:
                         try:
                             m.reply = self.get_reply(n)
                             if "stream" in self.services[m.name]:
-                                m.reply_is_stream = \
-                                    self.services[m.name]["stream"]
+                                m.reply_is_stream = self.services[m.name]["stream"]
                             else:
                                 m.reply_is_stream = False
                             m.reply.request = m
                         except:
                             else:
                                 m.reply_is_stream = False
                             m.reply.request = m
                         except:
-                            raise ParseError(
-                                "Cannot find reply to message `%s'" % n)
+                            raise ParseError("Cannot find reply to message `%s'" % n)
                 except ParseError as e:
                     self.exceptions.append(e)
                     remove.append(n)
 
                 except ParseError as e:
                     self.exceptions.append(e)
                     remove.append(n)
 
-            self.messages_by_json[jn] = {
-                k: v for k, v in j.items() if k not in remove}
+            self.messages_by_json[jn] = {k: v for k, v in j.items() if k not in remove}
index 82cef83..b416bc3 100644 (file)
@@ -73,10 +73,10 @@ V=0
 endif
 
 PYTHON_VERSION=$(shell $(PYTHON_INTERP) -c 'import sys; print(sys.version_info.major)')
 endif
 
 PYTHON_VERSION=$(shell $(PYTHON_INTERP) -c 'import sys; print(sys.version_info.major)')
-PIP_VERSION=22.0.3
+PIP_VERSION=22.0.4
 # Keep in sync with requirements.txt
 # Keep in sync with requirements.txt
-PIP_TOOLS_VERSION=6.5.0
-PIP_SETUPTOOLS_VERSION=60.7.1
+PIP_TOOLS_VERSION=6.6.0
+PIP_SETUPTOOLS_VERSION=62.1.0
 PYTHON_DEPENDS=requirements-$(PYTHON_VERSION).txt
 SCAPY_SOURCE=$(shell find $(VENV_PATH)/lib/python* -name site-packages)
 BUILD_COV_DIR=$(TEST_BR)/coverage
 PYTHON_DEPENDS=requirements-$(PYTHON_VERSION).txt
 SCAPY_SOURCE=$(shell find $(VENV_PATH)/lib/python* -name site-packages)
 BUILD_COV_DIR=$(TEST_BR)/coverage
@@ -344,37 +344,35 @@ wipe-papi:
 wipe-all: wipe wipe-papi wipe-cov
        @rm -rf $(TEST_BR)
 
 wipe-all: wipe wipe-papi wipe-cov
        @rm -rf $(TEST_BR)
 
-.PHONY: checkstyle-diff
-checkstyle-diff: $(PIP_INSTALL_DONE)
-       @bash -c "source $(VENV_PATH)/bin/activate &&\
-                 python3 -m pip install pycodestyle"
-       @bash -c "source $(VENV_PATH)/bin/activate &&\
-               cd $(WS_ROOT) && git diff --name-only --no-color --relative HEAD~1 ':!*.patch' | grep '.py$$' | xargs -I XXX \
-               pycodestyle --show-source --ignore=W504,E126,E241,E226,E305,E704,E741,E722 -v XXX ||\
-               (echo \"*********************************************************************\" &&\
-                echo \"* Test framework PEP8 compliance check FAILED (checked changed files)\" &&\
-                echo \"*********************************************************************\" &&\
-                false)"
-       @echo "*********************************************************************"
-       @echo "* Test framework PEP8 compliance check passed (checked changed files)"
-       @echo "*********************************************************************"
-
 .PHONY: start-gdb
 start-gdb: sanity
        @bash -c "source $(VENV_PATH)/bin/activate && python3 -c 'from debug import start_vpp_in_gdb; start_vpp_in_gdb()' $(RUN_TESTS_ARGS)"
 
 .PHONY: start-gdb
 start-gdb: sanity
        @bash -c "source $(VENV_PATH)/bin/activate && python3 -c 'from debug import start_vpp_in_gdb; start_vpp_in_gdb()' $(RUN_TESTS_ARGS)"
 
-.PHONY: checkstyle
-checkstyle: $(PIP_INSTALL_DONE)
+.PHONY: checkstyle-python-all
+checkstyle-python-all: $(PIP_INSTALL_DONE)
        @bash -c "source $(VENV_PATH)/bin/activate &&\
        @bash -c "source $(VENV_PATH)/bin/activate &&\
-                 python3 -m pip install pycodestyle"
+               black -t py39 --diff $(WS_ROOT) ||\
+               (echo \"*************************************************************************\" &&\
+               echo \"* Test framework PEP8 compliance check FAILED (maybe: make fixstyle-python)\" &&\
+               echo \"*************************************************************************\" &&\
+               false)"
+       @echo "*******************************************************************"
+       @echo "* Test framework PEP8 compliance check passed"
+       @echo "*******************************************************************"
+
+.PHONY: checkstyle
+checkstyle: checkstyle-python-all
+
+.PHONY: fixstyle-python-all
+fixstyle-python-all: $(PIP_INSTALL_DONE)
        @bash -c "source $(VENV_PATH)/bin/activate &&\
        @bash -c "source $(VENV_PATH)/bin/activate &&\
-               pycodestyle --show-source --ignore=W504,E126,E241,E226,E305,E704,E741,E722 -v *.py ||\
-               (echo \"*******************************************************************\" &&\
-                echo \"* Test framework PEP8 compliance check FAILED (checked all files)\" &&\
-                echo \"*******************************************************************\" &&\
-                false)"
+               black -t py39 $(WS_ROOT) ||\
+               (echo \"*************************************************************************\" &&\
+               echo \"* Test framework PEP8 compliance check FAILED (maybe: make fixstyle-python)\" &&\
+               echo \"*************************************************************************\" &&\
+               false)"
        @echo "*******************************************************************"
        @echo "*******************************************************************"
-       @echo "* Test framework PEP8 compliance check passed (checked all files)"
+       @echo "* Test framework PEP8 compliance check passed"
        @echo "*******************************************************************"
 
 .PHONY: help
        @echo "*******************************************************************"
 
 .PHONY: help
@@ -397,7 +395,6 @@ help:
        @echo " test-wipe-all          - wipe (temporary) files generated by unit tests, and coverage"
        @echo " test-shell             - enter shell with test environment"
        @echo " test-shell-debug       - enter shell with test environment (debug build)"
        @echo " test-wipe-all          - wipe (temporary) files generated by unit tests, and coverage"
        @echo " test-shell             - enter shell with test environment"
        @echo " test-shell-debug       - enter shell with test environment (debug build)"
-       @echo " test-checkstyle        - check PEP8 compliance for test framework"
        @echo " test-refresh-deps      - refresh the Python dependencies for the tests"
        @echo ""
        @echo "Arguments controlling test runs:"
        @echo " test-refresh-deps      - refresh the Python dependencies for the tests"
        @echo ""
        @echo "Arguments controlling test runs:"
@@ -456,8 +453,3 @@ help:
        @echo ""
        @echo " test-cov               - generate code coverage report for test framework"
        @echo " test-wipe-cov          - wipe code coverage report for test framework"
        @echo ""
        @echo " test-cov               - generate code coverage report for test framework"
        @echo " test-wipe-cov          - wipe code coverage report for test framework"
-       @echo ""
-       @echo "Verifying code-style:"
-       @echo ""
-       @echo " test-checkstyle        - check PEP8 compliance"
-       @echo ""
index bbfa594..4189983 100644 (file)
@@ -5,15 +5,22 @@ from socket import AF_INET, AF_INET6, inet_pton
 from scapy.all import bind_layers
 from scapy.layers.inet import UDP
 from scapy.packet import Packet
 from scapy.all import bind_layers
 from scapy.layers.inet import UDP
 from scapy.packet import Packet
-from scapy.fields import BitField, BitEnumField, XByteField, FlagsField,\
-    ConditionalField, StrField
+from scapy.fields import (
+    BitField,
+    BitEnumField,
+    XByteField,
+    FlagsField,
+    ConditionalField,
+    StrField,
+)
 from vpp_object import VppObject
 from util import NumericConstant
 from vpp_papi import VppEnum
 
 
 class BFDDiagCode(NumericConstant):
 from vpp_object import VppObject
 from util import NumericConstant
 from vpp_papi import VppEnum
 
 
 class BFDDiagCode(NumericConstant):
-    """ BFD Diagnostic Code """
+    """BFD Diagnostic Code"""
+
     no_diagnostic = 0
     control_detection_time_expired = 1
     echo_function_failed = 2
     no_diagnostic = 0
     control_detection_time_expired = 1
     echo_function_failed = 2
@@ -38,7 +45,8 @@ class BFDDiagCode(NumericConstant):
 
 
 class BFDState(NumericConstant):
 
 
 class BFDState(NumericConstant):
-    """ BFD State """
+    """BFD State"""
+
     admin_down = 0
     down = 1
     init = 2
     admin_down = 0
     down = 1
     init = 2
@@ -53,7 +61,8 @@ class BFDState(NumericConstant):
 
 
 class BFDAuthType(NumericConstant):
 
 
 class BFDAuthType(NumericConstant):
-    """ BFD Authentication Type """
+    """BFD Authentication Type"""
+
     no_auth = 0
     simple_pwd = 1
     keyed_md5 = 2
     no_auth = 0
     simple_pwd = 1
     keyed_md5 = 2
@@ -72,34 +81,38 @@ class BFDAuthType(NumericConstant):
 
 
 def bfd_is_auth_used(pkt):
 
 
 def bfd_is_auth_used(pkt):
-    """ is packet authenticated? """
+    """is packet authenticated?"""
     return "A" in pkt.sprintf("%BFD.flags%")
 
 
 def bfd_is_simple_pwd_used(pkt):
     return "A" in pkt.sprintf("%BFD.flags%")
 
 
 def bfd_is_simple_pwd_used(pkt):
-    """ is simple password authentication used? """
+    """is simple password authentication used?"""
     return bfd_is_auth_used(pkt) and pkt.auth_type == BFDAuthType.simple_pwd
 
 
 def bfd_is_sha1_used(pkt):
     return bfd_is_auth_used(pkt) and pkt.auth_type == BFDAuthType.simple_pwd
 
 
 def bfd_is_sha1_used(pkt):
-    """ is sha1 authentication used? """
-    return bfd_is_auth_used(pkt) and pkt.auth_type in \
-        (BFDAuthType.keyed_sha1, BFDAuthType.meticulous_keyed_sha1)
+    """is sha1 authentication used?"""
+    return bfd_is_auth_used(pkt) and pkt.auth_type in (
+        BFDAuthType.keyed_sha1,
+        BFDAuthType.meticulous_keyed_sha1,
+    )
 
 
 def bfd_is_md5_used(pkt):
 
 
 def bfd_is_md5_used(pkt):
-    """ is md5 authentication used? """
-    return bfd_is_auth_used(pkt) and pkt.auth_type in \
-        (BFDAuthType.keyed_md5, BFDAuthType.meticulous_keyed_md5)
+    """is md5 authentication used?"""
+    return bfd_is_auth_used(pkt) and pkt.auth_type in (
+        BFDAuthType.keyed_md5,
+        BFDAuthType.meticulous_keyed_md5,
+    )
 
 
 def bfd_is_md5_or_sha1_used(pkt):
 
 
 def bfd_is_md5_or_sha1_used(pkt):
-    """ is md5 or sha1 used? """
+    """is md5 or sha1 used?"""
     return bfd_is_md5_used(pkt) or bfd_is_sha1_used(pkt)
 
 
 class BFD(Packet):
     return bfd_is_md5_used(pkt) or bfd_is_sha1_used(pkt)
 
 
 class BFD(Packet):
-    """ BFD protocol layer for scapy """
+    """BFD protocol layer for scapy"""
 
     udp_dport = 3784  #: BFD destination port per RFC 5881
     udp_dport_echo = 3785  # : BFD destination port for ECHO per RFC 5881
 
     udp_dport = 3784  #: BFD destination port per RFC 5881
     udp_dport_echo = 3785  # : BFD destination port for ECHO per RFC 5881
@@ -114,7 +127,7 @@ class BFD(Packet):
         BitField("version", 1, 3),
         BitEnumField("diag", 0, 5, BFDDiagCode.desc_dict),
         BitEnumField("state", 0, 2, BFDState.desc_dict),
         BitField("version", 1, 3),
         BitEnumField("diag", 0, 5, BFDDiagCode.desc_dict),
         BitEnumField("state", 0, 2, BFDState.desc_dict),
-        FlagsField("flags", 0, 6, ['M', 'D', 'A', 'C', 'F', 'P']),
+        FlagsField("flags", 0, 6, ["M", "D", "A", "C", "F", "P"]),
         XByteField("detect_mult", 0),
         BitField("length", bfd_pkt_len, 8),
         BitField("my_discriminator", 0, 32),
         XByteField("detect_mult", 0),
         BitField("length", bfd_pkt_len, 8),
         BitField("my_discriminator", 0, 32),
@@ -123,22 +136,20 @@ class BFD(Packet):
         BitField("required_min_rx_interval", 0, 32),
         BitField("required_min_echo_rx_interval", 0, 32),
         ConditionalField(
         BitField("required_min_rx_interval", 0, 32),
         BitField("required_min_echo_rx_interval", 0, 32),
         ConditionalField(
-            BitEnumField("auth_type", 0, 8, BFDAuthType.desc_dict),
-            bfd_is_auth_used),
+            BitEnumField("auth_type", 0, 8, BFDAuthType.desc_dict), bfd_is_auth_used
+        ),
         ConditionalField(BitField("auth_len", 0, 8), bfd_is_auth_used),
         ConditionalField(BitField("auth_key_id", 0, 8), bfd_is_auth_used),
         ConditionalField(BitField("auth_len", 0, 8), bfd_is_auth_used),
         ConditionalField(BitField("auth_key_id", 0, 8), bfd_is_auth_used),
-        ConditionalField(BitField("auth_reserved", 0, 8),
-                         bfd_is_md5_or_sha1_used),
-        ConditionalField(
-            BitField("auth_seq_num", 0, 32), bfd_is_md5_or_sha1_used),
+        ConditionalField(BitField("auth_reserved", 0, 8), bfd_is_md5_or_sha1_used),
+        ConditionalField(BitField("auth_seq_num", 0, 32), bfd_is_md5_or_sha1_used),
         ConditionalField(StrField("auth_key_hash", "0" * 16), bfd_is_md5_used),
         ConditionalField(StrField("auth_key_hash", "0" * 16), bfd_is_md5_used),
-        ConditionalField(
-            StrField("auth_key_hash", "0" * 20), bfd_is_sha1_used),
+        ConditionalField(StrField("auth_key_hash", "0" * 20), bfd_is_sha1_used),
     ]
 
     def mysummary(self):
     ]
 
     def mysummary(self):
-        return self.sprintf("BFD(my_disc=%BFD.my_discriminator%,"
-                            "your_disc=%BFD.your_discriminator%)")
+        return self.sprintf(
+            "BFD(my_disc=%BFD.my_discriminator%, your_disc=%BFD.your_discriminator%)"
+        )
 
 
 # glue the BFD packet class to scapy parser
 
 
 # glue the BFD packet class to scapy parser
@@ -146,7 +157,7 @@ bind_layers(UDP, BFD, dport=BFD.udp_dport)
 
 
 class BFD_vpp_echo(Packet):
 
 
 class BFD_vpp_echo(Packet):
-    """ BFD echo packet as used by VPP (non-rfc, as rfc doesn't define one) """
+    """BFD echo packet as used by VPP (non-rfc, as rfc doesn't define one)"""
 
     udp_dport = 3785  #: BFD echo destination port per RFC 5881
     name = "BFD_VPP_ECHO"
 
     udp_dport = 3785  #: BFD echo destination port per RFC 5881
     name = "BFD_VPP_ECHO"
@@ -154,13 +165,14 @@ class BFD_vpp_echo(Packet):
     fields_desc = [
         BitField("discriminator", 0, 32),
         BitField("expire_time_clocks", 0, 64),
     fields_desc = [
         BitField("discriminator", 0, 32),
         BitField("expire_time_clocks", 0, 64),
-        BitField("checksum", 0, 64)
+        BitField("checksum", 0, 64),
     ]
 
     def mysummary(self):
         return self.sprintf(
             "BFD_VPP_ECHO(disc=%BFD_VPP_ECHO.discriminator%,"
     ]
 
     def mysummary(self):
         return self.sprintf(
             "BFD_VPP_ECHO(disc=%BFD_VPP_ECHO.discriminator%,"
-            "expire_time_clocks=%BFD_VPP_ECHO.expire_time_clocks%)")
+            "expire_time_clocks=%BFD_VPP_ECHO.expire_time_clocks%)"
+        )
 
 
 # glue the BFD echo packet class to scapy parser
 
 
 # glue the BFD echo packet class to scapy parser
@@ -168,7 +180,7 @@ bind_layers(UDP, BFD_vpp_echo, dport=BFD_vpp_echo.udp_dport)
 
 
 class VppBFDAuthKey(VppObject):
 
 
 class VppBFDAuthKey(VppObject):
-    """ Represents BFD authentication key in VPP """
+    """Represents BFD authentication key in VPP"""
 
     def __init__(self, test, conf_key_id, auth_type, key):
         self._test = test
 
     def __init__(self, test, conf_key_id, auth_type, key):
         self._test = test
@@ -179,17 +191,17 @@ class VppBFDAuthKey(VppObject):
 
     @property
     def test(self):
 
     @property
     def test(self):
-        """ Test which created this key """
+        """Test which created this key"""
         return self._test
 
     @property
     def auth_type(self):
         return self._test
 
     @property
     def auth_type(self):
-        """ Authentication type for this key """
+        """Authentication type for this key"""
         return self._auth_type
 
     @property
     def key(self):
         return self._auth_type
 
     @property
     def key(self):
-        """ key data """
+        """key data"""
         return self._key
 
     @key.setter
         return self._key
 
     @key.setter
@@ -198,17 +210,20 @@ class VppBFDAuthKey(VppObject):
 
     @property
     def conf_key_id(self):
 
     @property
     def conf_key_id(self):
-        """ configuration key ID """
+        """configuration key ID"""
         return self._conf_key_id
 
     def add_vpp_config(self):
         self.test.vapi.bfd_auth_set_key(
         return self._conf_key_id
 
     def add_vpp_config(self):
         self.test.vapi.bfd_auth_set_key(
-            conf_key_id=self._conf_key_id, auth_type=self._auth_type,
-            key=self._key, key_len=len(self._key))
+            conf_key_id=self._conf_key_id,
+            auth_type=self._auth_type,
+            key=self._key,
+            key_len=len(self._key),
+        )
         self._test.registry.register(self, self.test.logger)
 
     def get_bfd_auth_keys_dump_entry(self):
         self._test.registry.register(self, self.test.logger)
 
     def get_bfd_auth_keys_dump_entry(self):
-        """ get the entry in the auth keys dump corresponding to this key """
+        """get the entry in the auth keys dump corresponding to this key"""
         result = self.test.vapi.bfd_auth_keys_dump()
         for k in result:
             if k.conf_key_id == self._conf_key_id:
         result = self.test.vapi.bfd_auth_keys_dump()
         for k in result:
             if k.conf_key_id == self._conf_key_id:
@@ -226,11 +241,22 @@ class VppBFDAuthKey(VppObject):
 
 
 class VppBFDUDPSession(VppObject):
 
 
 class VppBFDUDPSession(VppObject):
-    """ Represents BFD UDP session in VPP """
-
-    def __init__(self, test, interface, peer_addr, local_addr=None, af=AF_INET,
-                 desired_min_tx=300000, required_min_rx=300000, detect_mult=3,
-                 sha1_key=None, bfd_key_id=None, is_tunnel=False):
+    """Represents BFD UDP session in VPP"""
+
+    def __init__(
+        self,
+        test,
+        interface,
+        peer_addr,
+        local_addr=None,
+        af=AF_INET,
+        desired_min_tx=300000,
+        required_min_rx=300000,
+        detect_mult=3,
+        sha1_key=None,
+        bfd_key_id=None,
+        is_tunnel=False,
+    ):
         self._test = test
         self._interface = interface
         self._af = af
         self._test = test
         self._interface = interface
         self._af = af
@@ -251,22 +277,22 @@ class VppBFDUDPSession(VppObject):
 
     @property
     def test(self):
 
     @property
     def test(self):
-        """ Test which created this session """
+        """Test which created this session"""
         return self._test
 
     @property
     def interface(self):
         return self._test
 
     @property
     def interface(self):
-        """ Interface on which this session lives """
+        """Interface on which this session lives"""
         return self._interface
 
     @property
     def af(self):
         return self._interface
 
     @property
     def af(self):
-        """ Address family - AF_INET or AF_INET6 """
+        """Address family - AF_INET or AF_INET6"""
         return self._af
 
     @property
     def local_addr(self):
         return self._af
 
     @property
     def local_addr(self):
-        """ BFD session local address (VPP address) """
+        """BFD session local address (VPP address)"""
         if self._local_addr is None:
             if self.af == AF_INET:
                 return self._interface.local_ip4
         if self._local_addr is None:
             if self.af == AF_INET:
                 return self._interface.local_ip4
@@ -278,28 +304,32 @@ class VppBFDUDPSession(VppObject):
 
     @property
     def peer_addr(self):
 
     @property
     def peer_addr(self):
-        """ BFD session peer address """
+        """BFD session peer address"""
         return self._peer_addr
 
     def get_bfd_udp_session_dump_entry(self):
         return self._peer_addr
 
     def get_bfd_udp_session_dump_entry(self):
-        """ get the namedtuple entry from bfd udp session dump """
+        """get the namedtuple entry from bfd udp session dump"""
         result = self.test.vapi.bfd_udp_session_dump()
         for s in result:
             self.test.logger.debug("session entry: %s" % str(s))
             if s.sw_if_index == self.interface.sw_if_index:
         result = self.test.vapi.bfd_udp_session_dump()
         for s in result:
             self.test.logger.debug("session entry: %s" % str(s))
             if s.sw_if_index == self.interface.sw_if_index:
-                if self.af == AF_INET \
-                        and self.interface.local_ip4 == str(s.local_addr) \
-                        and self.interface.remote_ip4 == str(s.peer_addr):
+                if (
+                    self.af == AF_INET
+                    and self.interface.local_ip4 == str(s.local_addr)
+                    and self.interface.remote_ip4 == str(s.peer_addr)
+                ):
                     return s
                     return s
-                if self.af == AF_INET6 \
-                        and self.interface.local_ip6 == str(s.local_addr) \
-                        and self.interface.remote_ip6 == str(s.peer_addr):
+                if (
+                    self.af == AF_INET6
+                    and self.interface.local_ip6 == str(s.local_addr)
+                    and self.interface.remote_ip6 == str(s.peer_addr)
+                ):
                     return s
         return None
 
     @property
     def state(self):
                     return s
         return None
 
     @property
     def state(self):
-        """ BFD session state """
+        """BFD session state"""
         session = self.get_bfd_udp_session_dump_entry()
         if session is None:
             raise Exception("Could not find BFD session in VPP response")
         session = self.get_bfd_udp_session_dump_entry()
         if session is None:
             raise Exception("Could not find BFD session in VPP response")
@@ -307,27 +337,27 @@ class VppBFDUDPSession(VppObject):
 
     @property
     def desired_min_tx(self):
 
     @property
     def desired_min_tx(self):
-        """ desired minimum tx interval """
+        """desired minimum tx interval"""
         return self._desired_min_tx
 
     @property
     def required_min_rx(self):
         return self._desired_min_tx
 
     @property
     def required_min_rx(self):
-        """ required minimum rx interval """
+        """required minimum rx interval"""
         return self._required_min_rx
 
     @property
     def detect_mult(self):
         return self._required_min_rx
 
     @property
     def detect_mult(self):
-        """ detect multiplier """
+        """detect multiplier"""
         return self._detect_mult
 
     @property
     def sha1_key(self):
         return self._detect_mult
 
     @property
     def sha1_key(self):
-        """ sha1 key """
+        """sha1 key"""
         return self._sha1_key
 
     @property
     def bfd_key_id(self):
         return self._sha1_key
 
     @property
     def bfd_key_id(self):
-        """ bfd key id in use """
+        """bfd key id in use"""
         return self._bfd_key_id
 
     @property
         return self._bfd_key_id
 
     @property
@@ -335,7 +365,7 @@ class VppBFDUDPSession(VppObject):
         return self._is_tunnel
 
     def activate_auth(self, key, bfd_key_id=None, delayed=False):
         return self._is_tunnel
 
     def activate_auth(self, key, bfd_key_id=None, delayed=False):
-        """ activate authentication for this session """
+        """activate authentication for this session"""
         self._bfd_key_id = bfd_key_id if bfd_key_id else randint(0, 255)
         self._sha1_key = key
         conf_key_id = self._sha1_key.conf_key_id
         self._bfd_key_id = bfd_key_id if bfd_key_id else randint(0, 255)
         self._sha1_key = key
         conf_key_id = self._sha1_key.conf_key_id
@@ -346,10 +376,11 @@ class VppBFDUDPSession(VppObject):
             peer_addr=self.peer_addr,
             bfd_key_id=self._bfd_key_id,
             conf_key_id=conf_key_id,
             peer_addr=self.peer_addr,
             bfd_key_id=self._bfd_key_id,
             conf_key_id=conf_key_id,
-            is_delayed=is_delayed)
+            is_delayed=is_delayed,
+        )
 
     def deactivate_auth(self, delayed=False):
 
     def deactivate_auth(self, delayed=False):
-        """ deactivate authentication """
+        """deactivate authentication"""
         self._bfd_key_id = None
         self._sha1_key = None
         is_delayed = 1 if delayed else 0
         self._bfd_key_id = None
         self._sha1_key = None
         is_delayed = 1 if delayed else 0
@@ -357,45 +388,48 @@ class VppBFDUDPSession(VppObject):
             sw_if_index=self._interface.sw_if_index,
             local_addr=self.local_addr,
             peer_addr=self.peer_addr,
             sw_if_index=self._interface.sw_if_index,
             local_addr=self.local_addr,
             peer_addr=self.peer_addr,
-            is_delayed=is_delayed)
+            is_delayed=is_delayed,
+        )
 
 
-    def modify_parameters(self,
-                          detect_mult=None,
-                          desired_min_tx=None,
-                          required_min_rx=None):
-        """ modify session parameters """
+    def modify_parameters(
+        self, detect_mult=None, desired_min_tx=None, required_min_rx=None
+    ):
+        """modify session parameters"""
         if detect_mult:
             self._detect_mult = detect_mult
         if desired_min_tx:
             self._desired_min_tx = desired_min_tx
         if required_min_rx:
             self._required_min_rx = required_min_rx
         if detect_mult:
             self._detect_mult = detect_mult
         if desired_min_tx:
             self._desired_min_tx = desired_min_tx
         if required_min_rx:
             self._required_min_rx = required_min_rx
-        self.test.vapi.bfd_udp_mod(sw_if_index=self._interface.sw_if_index,
-                                   desired_min_tx=self.desired_min_tx,
-                                   required_min_rx=self.required_min_rx,
-                                   detect_mult=self.detect_mult,
-                                   local_addr=self.local_addr,
-                                   peer_addr=self.peer_addr)
+        self.test.vapi.bfd_udp_mod(
+            sw_if_index=self._interface.sw_if_index,
+            desired_min_tx=self.desired_min_tx,
+            required_min_rx=self.required_min_rx,
+            detect_mult=self.detect_mult,
+            local_addr=self.local_addr,
+            peer_addr=self.peer_addr,
+        )
 
     def add_vpp_config(self):
         bfd_key_id = self._bfd_key_id if self._sha1_key else None
         conf_key_id = self._sha1_key.conf_key_id if self._sha1_key else None
         is_authenticated = True if self._sha1_key else False
 
     def add_vpp_config(self):
         bfd_key_id = self._bfd_key_id if self._sha1_key else None
         conf_key_id = self._sha1_key.conf_key_id if self._sha1_key else None
         is_authenticated = True if self._sha1_key else False
-        self.test.vapi.bfd_udp_add(sw_if_index=self._interface.sw_if_index,
-                                   desired_min_tx=self.desired_min_tx,
-                                   required_min_rx=self.required_min_rx,
-                                   detect_mult=self.detect_mult,
-                                   local_addr=self.local_addr,
-                                   peer_addr=self.peer_addr,
-                                   bfd_key_id=bfd_key_id,
-                                   conf_key_id=conf_key_id,
-                                   is_authenticated=is_authenticated)
+        self.test.vapi.bfd_udp_add(
+            sw_if_index=self._interface.sw_if_index,
+            desired_min_tx=self.desired_min_tx,
+            required_min_rx=self.required_min_rx,
+            detect_mult=self.detect_mult,
+            local_addr=self.local_addr,
+            peer_addr=self.peer_addr,
+            bfd_key_id=bfd_key_id,
+            conf_key_id=conf_key_id,
+            is_authenticated=is_authenticated,
+        )
         self._test.registry.register(self, self.test.logger)
 
         self._test.registry.register(self, self.test.logger)
 
-    def upd_vpp_config(self,
-                       detect_mult=None,
-                       desired_min_tx=None,
-                       required_min_rx=None):
+    def upd_vpp_config(
+        self, detect_mult=None, desired_min_tx=None, required_min_rx=None
+    ):
         if desired_min_tx:
             self._desired_min_tx = desired_min_tx
         if required_min_rx:
         if desired_min_tx:
             self._desired_min_tx = desired_min_tx
         if required_min_rx:
@@ -405,15 +439,17 @@ class VppBFDUDPSession(VppObject):
         bfd_key_id = self._bfd_key_id if self._sha1_key else None
         conf_key_id = self._sha1_key.conf_key_id if self._sha1_key else None
         is_authenticated = True if self._sha1_key else False
         bfd_key_id = self._bfd_key_id if self._sha1_key else None
         conf_key_id = self._sha1_key.conf_key_id if self._sha1_key else None
         is_authenticated = True if self._sha1_key else False
-        self.test.vapi.bfd_udp_upd(sw_if_index=self._interface.sw_if_index,
-                                   desired_min_tx=self.desired_min_tx,
-                                   required_min_rx=self.required_min_rx,
-                                   detect_mult=self.detect_mult,
-                                   local_addr=self.local_addr,
-                                   peer_addr=self.peer_addr,
-                                   bfd_key_id=bfd_key_id,
-                                   conf_key_id=conf_key_id,
-                                   is_authenticated=is_authenticated)
+        self.test.vapi.bfd_udp_upd(
+            sw_if_index=self._interface.sw_if_index,
+            desired_min_tx=self.desired_min_tx,
+            required_min_rx=self.required_min_rx,
+            detect_mult=self.detect_mult,
+            local_addr=self.local_addr,
+            peer_addr=self.peer_addr,
+            bfd_key_id=bfd_key_id,
+            conf_key_id=conf_key_id,
+            is_authenticated=is_authenticated,
+        )
         self._test.registry.register(self, self.test.logger)
 
     def query_vpp_config(self):
         self._test.registry.register(self, self.test.logger)
 
     def query_vpp_config(self):
@@ -421,27 +457,34 @@ class VppBFDUDPSession(VppObject):
         return session is not None
 
     def remove_vpp_config(self):
         return session is not None
 
     def remove_vpp_config(self):
-        self.test.vapi.bfd_udp_del(self._interface.sw_if_index,
-                                   local_addr=self.local_addr,
-                                   peer_addr=self.peer_addr)
+        self.test.vapi.bfd_udp_del(
+            self._interface.sw_if_index,
+            local_addr=self.local_addr,
+            peer_addr=self.peer_addr,
+        )
 
     def object_id(self):
 
     def object_id(self):
-        return "bfd-udp-%s-%s-%s-%s" % (self._interface.sw_if_index,
-                                        self.local_addr,
-                                        self.peer_addr,
-                                        self.af)
+        return "bfd-udp-%s-%s-%s-%s" % (
+            self._interface.sw_if_index,
+            self.local_addr,
+            self.peer_addr,
+            self.af,
+        )
 
     def admin_up(self):
 
     def admin_up(self):
-        """ set bfd session admin-up """
+        """set bfd session admin-up"""
         self.test.vapi.bfd_udp_session_set_flags(
             flags=VppEnum.vl_api_if_status_flags_t.IF_STATUS_API_FLAG_ADMIN_UP,
             sw_if_index=self._interface.sw_if_index,
             local_addr=self.local_addr,
         self.test.vapi.bfd_udp_session_set_flags(
             flags=VppEnum.vl_api_if_status_flags_t.IF_STATUS_API_FLAG_ADMIN_UP,
             sw_if_index=self._interface.sw_if_index,
             local_addr=self.local_addr,
-            peer_addr=self.peer_addr)
+            peer_addr=self.peer_addr,
+        )
 
     def admin_down(self):
 
     def admin_down(self):
-        """ set bfd session admin-down """
+        """set bfd session admin-down"""
         self.test.vapi.bfd_udp_session_set_flags(
         self.test.vapi.bfd_udp_session_set_flags(
-            flags=0, sw_if_index=self._interface.sw_if_index,
+            flags=0,
+            sw_if_index=self._interface.sw_if_index,
             local_addr=self.local_addr,
             local_addr=self.local_addr,
-            peer_addr=self.peer_addr)
+            peer_addr=self.peer_addr,
+        )
index dd3b9c1..c99d1ca 100644 (file)
@@ -12,6 +12,7 @@ def positive_int_or_default(default):
         if int(v) <= 0:
             raise ValueError("value must be positive")
         return int(v)
         if int(v) <= 0:
             raise ValueError("value must be positive")
         return int(v)
+
     return positive_integer
 
 
     return positive_integer
 
 
@@ -22,6 +23,7 @@ def positive_float_or_default(default):
         if float(v) <= 0:
             raise ValueError("value must be positive")
         return float(v)
         if float(v) <= 0:
             raise ValueError("value must be positive")
         return float(v)
+
     return positive_float
 
 
     return positive_float
 
 
@@ -50,6 +52,7 @@ def int_choice_or_default(options, default):
         if int(v) in options:
             return int(v)
         raise ValueError("invalid choice")
         if int(v) in options:
             return int(v)
         raise ValueError("invalid choice")
+
     return choice
 
 
     return choice
 
 
@@ -57,14 +60,13 @@ def worker_config(v):
     if v is None or v == "":
         return 0
     if v.startswith("workers "):
     if v is None or v == "":
         return 0
     if v.startswith("workers "):
-        return(int(v.split(" ")[1]))
+        return int(v.split(" ")[1])
     return int(v)
 
 
 def directory(v):
     if not os.path.isdir(v):
     return int(v)
 
 
 def directory(v):
     if not os.path.isdir(v):
-        raise ValueError(f"provided path '{v}' doesn't exist "
-                         "or is not a directory")
+        raise ValueError(f"provided path '{v}' doesn't exist or is not a directory")
     return v
 
 
     return v
 
 
@@ -74,35 +76,51 @@ def directory_verify_or_create(v):
     return v
 
 
     return v
 
 
-parser = argparse.ArgumentParser(description="VPP unit tests",
-                                 formatter_class=argparse.RawTextHelpFormatter)
+parser = argparse.ArgumentParser(
+    description="VPP unit tests", formatter_class=argparse.RawTextHelpFormatter
+)
 
 
-parser.add_argument("--failfast", action="store_true",
-                    help="stop running tests on first failure")
+parser.add_argument(
+    "--failfast", action="store_true", help="stop running tests on first failure"
+)
 
 
-parser.add_argument("--test-src-dir", action="append", type=directory,
-                    help="directory containing test files "
-                    "(may be specified multiple times) "
-                    "(VPP_WS_DIR/test is added automatically to the set)")
+parser.add_argument(
+    "--test-src-dir",
+    action="append",
+    type=directory,
+    help="directory containing test files "
+    "(may be specified multiple times) "
+    "(VPP_WS_DIR/test is added automatically to the set)",
+)
 
 default_verbose = 0
 
 
 default_verbose = 0
 
-parser.add_argument("--verbose", action="store", default=default_verbose,
-                    type=int_choice_or_default((0, 1, 2), default_verbose),
-                    help="verbosity setting - 0 - least verbose, "
-                    "2 - most verbose (default: 0)")
+parser.add_argument(
+    "--verbose",
+    action="store",
+    default=default_verbose,
+    type=int_choice_or_default((0, 1, 2), default_verbose),
+    help="verbosity setting - 0 - least verbose, 2 - most verbose (default: 0)",
+)
 
 default_test_run_timeout = 600
 
 
 default_test_run_timeout = 600
 
-parser.add_argument("--timeout", action="store",
-                    type=positive_int_or_default(default_test_run_timeout),
-                    default=default_test_run_timeout,
-                    metavar="TEST_RUN_TIMEOUT",
-                    help="test run timeout in seconds - per test "
-                    f"(default: {default_test_run_timeout})")
-
-parser.add_argument("--failed-dir", action="store", type=directory,
-                    help="directory containing failed tests")
+parser.add_argument(
+    "--timeout",
+    action="store",
+    type=positive_int_or_default(default_test_run_timeout),
+    default=default_test_run_timeout,
+    metavar="TEST_RUN_TIMEOUT",
+    help="test run timeout in seconds - per test "
+    f"(default: {default_test_run_timeout})",
+)
+
+parser.add_argument(
+    "--failed-dir",
+    action="store",
+    type=directory,
+    help="directory containing failed tests",
+)
 
 filter_help_string = """\
 expression consists of 3 string selectors separated by '.' separators:
 
 filter_help_string = """\
 expression consists of 3 string selectors separated by '.' separators:
@@ -126,17 +144,23 @@ examples:
 4. '.*.test_add_bfd' selects all test functions named test_add_bfd
    from all files/classes
 """
 4. '.*.test_add_bfd' selects all test functions named test_add_bfd
    from all files/classes
 """
-parser.add_argument("--filter", action="store",
-                    metavar="FILTER_EXPRESSION", help=filter_help_string)
+parser.add_argument(
+    "--filter", action="store", metavar="FILTER_EXPRESSION", help=filter_help_string
+)
 
 default_retries = 0
 
 
 default_retries = 0
 
-parser.add_argument("--retries", action="store", default=default_retries,
-                    type=positive_int_or_default(default_retries),
-                    help="retry failed tests RETRIES times")
+parser.add_argument(
+    "--retries",
+    action="store",
+    default=default_retries,
+    type=positive_int_or_default(default_retries),
+    help="retry failed tests RETRIES times",
+)
 
 
-parser.add_argument("--step", action="store_true", default=False,
-                    help="enable stepping through tests")
+parser.add_argument(
+    "--step", action="store_true", default=False, help="enable stepping through tests"
+)
 
 debug_help_string = """\
 attach     - attach to already running vpp
 
 debug_help_string = """\
 attach     - attach to already running vpp
@@ -145,80 +169,153 @@ gdb        - print VPP PID and pause allowing attaching gdb
 gdbserver  - same as above, but run gdb in gdbserver
 """
 
 gdbserver  - same as above, but run gdb in gdbserver
 """
 
-parser.add_argument("--debug", action="store",
-                    choices=["attach", "core", "gdb", "gdbserver"],
-                    help=debug_help_string)
-
-parser.add_argument("--debug-framework", action="store_true",
-                    help="enable internal test framework debugging")
-
-parser.add_argument("--compress-core", action="store_true",
-                    help="compress core files if not debugging them")
-
-parser.add_argument("--extended", action="store_true",
-                    help="run extended tests")
-
-parser.add_argument("--sanity", action="store_true",
-                    help="perform sanity vpp run before running tests")
-
-parser.add_argument("--force-foreground", action="store_true",
-                    help="force running in foreground - don't fork")
-
-parser.add_argument("--jobs", action="store", type=positive_int_or_auto,
-                    default="auto", help="maximum concurrent test jobs")
-
-parser.add_argument("--venv-dir", action="store",
-                    type=directory, help="path to virtual environment")
+parser.add_argument(
+    "--debug",
+    action="store",
+    choices=["attach", "core", "gdb", "gdbserver"],
+    help=debug_help_string,
+)
+
+parser.add_argument(
+    "--debug-framework",
+    action="store_true",
+    help="enable internal test framework debugging",
+)
+
+parser.add_argument(
+    "--compress-core",
+    action="store_true",
+    help="compress core files if not debugging them",
+)
+
+parser.add_argument("--extended", action="store_true", help="run extended tests")
+
+parser.add_argument(
+    "--sanity", action="store_true", help="perform sanity vpp run before running tests"
+)
+
+parser.add_argument(
+    "--force-foreground",
+    action="store_true",
+    help="force running in foreground - don't fork",
+)
+
+parser.add_argument(
+    "--jobs",
+    action="store",
+    type=positive_int_or_auto,
+    default="auto",
+    help="maximum concurrent test jobs",
+)
+
+parser.add_argument(
+    "--venv-dir", action="store", type=directory, help="path to virtual environment"
+)
 
 default_rnd_seed = time.time()
 
 default_rnd_seed = time.time()
-parser.add_argument("--rnd-seed", action="store", default=default_rnd_seed,
-                    type=positive_float_or_default(default_rnd_seed),
-                    help="random generator seed (default: current time)")
-
-parser.add_argument("--vpp-worker-count", action="store", type=worker_config,
-                    default=0, help="number of vpp workers")
-
-parser.add_argument("--gcov", action="store_true",
-                    default=False, help="running gcov tests")
-
-parser.add_argument("--cache-vpp-output", action="store_true", default=False,
-                    help="cache VPP stdout/stderr and log as one block "
-                    "after test finishes")
-
-parser.add_argument("--vpp-ws-dir", action="store", required=True,
-                    type=directory, help="vpp workspace directory")
-
-parser.add_argument("--vpp-tag", action="store", default="vpp_debug",
-                    metavar="VPP_TAG", required=True,
-                    help="vpp tag (e.g. vpp, vpp_debug, vpp_gcov)")
-
-parser.add_argument("--vpp", action="store", help="path to vpp binary "
-                    "(default: derive from VPP_WS_DIR and VPP_TAG)")
-
-parser.add_argument("--vpp-install-dir", type=directory,
-                    action="store", help="path to vpp install directory"
-                    "(default: derive from VPP_WS_DIR and VPP_TAG)")
-
-parser.add_argument("--vpp-build-dir", action="store", type=directory,
-                    help="vpp build directory"
-                    "(default: derive from VPP_WS_DIR and VPP_TAG)")
-
-parser.add_argument("--vpp-plugin-dir", action="append", type=directory,
-                    help="directory containing vpp plugins"
-                    "(default: derive from VPP_WS_DIR and VPP_TAG)")
-
-parser.add_argument("--vpp-test-plugin-dir", action="append", type=directory,
-                    help="directory containing vpp api test plugins"
-                    "(default: derive from VPP_WS_DIR and VPP_TAG)")
-
-parser.add_argument("--extern-plugin-dir", action="append", type=directory,
-                    default=[], help="directory containing external plugins")
-
-parser.add_argument("--coredump-size", action="store", default="unlimited",
-                    help="specify vpp coredump size")
-
-parser.add_argument("--max-vpp-cpus", action="store", type=int_or_auto,
-                    default=0, help="max cpus used by vpp")
+parser.add_argument(
+    "--rnd-seed",
+    action="store",
+    default=default_rnd_seed,
+    type=positive_float_or_default(default_rnd_seed),
+    help="random generator seed (default: current time)",
+)
+
+parser.add_argument(
+    "--vpp-worker-count",
+    action="store",
+    type=worker_config,
+    default=0,
+    help="number of vpp workers",
+)
+
+parser.add_argument(
+    "--gcov", action="store_true", default=False, help="running gcov tests"
+)
+
+parser.add_argument(
+    "--cache-vpp-output",
+    action="store_true",
+    default=False,
+    help="cache VPP stdout/stderr and log as one block after test finishes",
+)
+
+parser.add_argument(
+    "--vpp-ws-dir",
+    action="store",
+    required=True,
+    type=directory,
+    help="vpp workspace directory",
+)
+
+parser.add_argument(
+    "--vpp-tag",
+    action="store",
+    default="vpp_debug",
+    metavar="VPP_TAG",
+    required=True,
+    help="vpp tag (e.g. vpp, vpp_debug, vpp_gcov)",
+)
+
+parser.add_argument(
+    "--vpp",
+    action="store",
+    help="path to vpp binary (default: derive from VPP_WS_DIR and VPP_TAG)",
+)
+
+parser.add_argument(
+    "--vpp-install-dir",
+    type=directory,
+    action="store",
+    help="path to vpp install directory"
+    "(default: derive from VPP_WS_DIR and VPP_TAG)",
+)
+
+parser.add_argument(
+    "--vpp-build-dir",
+    action="store",
+    type=directory,
+    help="vpp build directory (default: derive from VPP_WS_DIR and VPP_TAG)",
+)
+
+parser.add_argument(
+    "--vpp-plugin-dir",
+    action="append",
+    type=directory,
+    help="directory containing vpp plugins"
+    "(default: derive from VPP_WS_DIR and VPP_TAG)",
+)
+
+parser.add_argument(
+    "--vpp-test-plugin-dir",
+    action="append",
+    type=directory,
+    help="directory containing vpp api test plugins"
+    "(default: derive from VPP_WS_DIR and VPP_TAG)",
+)
+
+parser.add_argument(
+    "--extern-plugin-dir",
+    action="append",
+    type=directory,
+    default=[],
+    help="directory containing external plugins",
+)
+
+parser.add_argument(
+    "--coredump-size",
+    action="store",
+    default="unlimited",
+    help="specify vpp coredump size",
+)
+
+parser.add_argument(
+    "--max-vpp-cpus",
+    action="store",
+    type=int_or_auto,
+    default=0,
+    help="max cpus used by vpp",
+)
 
 variant_help_string = """\
 specify which march node variant to unit test
 
 variant_help_string = """\
 specify which march node variant to unit test
@@ -228,26 +325,41 @@ specify which march node variant to unit test
 
 parser.add_argument("--variant", action="store", help=variant_help_string)
 
 
 parser.add_argument("--variant", action="store", help=variant_help_string)
 
-parser.add_argument("--api-fuzz", action="store", default=None,
-                    help="specify api fuzzing parameters")
-
-parser.add_argument("--wipe-tmp-dir", action="store_true", default=True,
-                    help="remove test tmp directory before running test")
-
-parser.add_argument("--tmp-dir", action="store", default="/tmp",
-                    type=directory_verify_or_create,
-                    help="directory where to store test temporary directories")
-
-parser.add_argument("--log-dir", action="store",
-                    type=directory_verify_or_create,
-                    help="directory where to store directories "
-                    "containing log files (default: --tmp-dir)")
+parser.add_argument(
+    "--api-fuzz", action="store", default=None, help="specify api fuzzing parameters"
+)
+
+parser.add_argument(
+    "--wipe-tmp-dir",
+    action="store_true",
+    default=True,
+    help="remove test tmp directory before running test",
+)
+
+parser.add_argument(
+    "--tmp-dir",
+    action="store",
+    default="/tmp",
+    type=directory_verify_or_create,
+    help="directory where to store test temporary directories",
+)
+
+parser.add_argument(
+    "--log-dir",
+    action="store",
+    type=directory_verify_or_create,
+    help="directory where to store directories "
+    "containing log files (default: --tmp-dir)",
+)
 
 default_keep_pcaps = False
 
 default_keep_pcaps = False
-parser.add_argument("--keep-pcaps", action="store_true",
-                    default=default_keep_pcaps,
-                    help="if set, keep all pcap files from a test run"
-                    f" (default: {default_keep_pcaps})")
+parser.add_argument(
+    "--keep-pcaps",
+    action="store_true",
+    default=default_keep_pcaps,
+    help="if set, keep all pcap files from a test run"
+    f" (default: {default_keep_pcaps})",
+)
 
 config = parser.parse_args()
 
 
 config = parser.parse_args()
 
@@ -268,12 +380,13 @@ libs = ["lib", "lib64"]
 
 if config.vpp_plugin_dir is None:
     config.vpp_plugin_dir = [
 
 if config.vpp_plugin_dir is None:
     config.vpp_plugin_dir = [
-        f"{config.vpp_install_dir}/vpp/{lib}/vpp_plugins" for lib in libs]
+        f"{config.vpp_install_dir}/vpp/{lib}/vpp_plugins" for lib in libs
+    ]
 
 if config.vpp_test_plugin_dir is None:
     config.vpp_test_plugin_dir = [
 
 if config.vpp_test_plugin_dir is None:
     config.vpp_test_plugin_dir = [
-        f"{config.vpp_install_dir}/vpp/{lib}/vpp_api_test_plugins"
-        for lib in libs]
+        f"{config.vpp_install_dir}/vpp/{lib}/vpp_api_test_plugins" for lib in libs
+    ]
 
 test_dirs = [f"{ws}/test"]
 
 
 test_dirs = [f"{ws}/test"]
 
@@ -289,7 +402,7 @@ if config.venv_dir is None:
 available_cpus = psutil.Process().cpu_affinity()
 num_cpus = len(available_cpus)
 
 available_cpus = psutil.Process().cpu_affinity()
 num_cpus = len(available_cpus)
 
-if config.max_vpp_cpus == 'auto':
+if config.max_vpp_cpus == "auto":
     max_vpp_cpus = num_cpus
 elif config.max_vpp_cpus > 0:
     max_vpp_cpus = min(config.max_vpp_cpus, num_cpus)
     max_vpp_cpus = num_cpus
 elif config.max_vpp_cpus > 0:
     max_vpp_cpus = min(config.max_vpp_cpus, num_cpus)
index 0ab1432..d77fd87 100644 (file)
@@ -8,7 +8,7 @@ from sanity_run_vpp import SanityTestCase
 from shutil import rmtree
 from config import available_cpus
 
 from shutil import rmtree
 from config import available_cpus
 
-gdb_path = '/usr/bin/gdb'
+gdb_path = "/usr/bin/gdb"
 
 
 def spawn_gdb(binary_path, core_path):
 
 
 def spawn_gdb(binary_path, core_path):
@@ -24,8 +24,9 @@ def spawn_gdb(binary_path, core_path):
         if gdb.isalive():
             raise Exception("GDB refused to die...")
     else:
         if gdb.isalive():
             raise Exception("GDB refused to die...")
     else:
-        sys.stderr.write("Debugger '%s' does not exist or is not "
-                         "an executable..\n" % gdb_path)
+        sys.stderr.write(
+            "Debugger '%s' does not exist or is not an executable..\n" % gdb_path
+        )
 
 
 def start_vpp_in_gdb():
 
 
 def start_vpp_in_gdb():
@@ -33,8 +34,7 @@ def start_vpp_in_gdb():
     # but any test case class could be used ...
     SanityTestCase.set_debug_flags("attach")
     SanityTestCase.tempdir = SanityTestCase.get_tempdir()
     # but any test case class could be used ...
     SanityTestCase.set_debug_flags("attach")
     SanityTestCase.tempdir = SanityTestCase.get_tempdir()
-    SanityTestCase.assign_cpus(
-        available_cpus[:SanityTestCase.get_cpus_required()])
+    SanityTestCase.assign_cpus(available_cpus[: SanityTestCase.get_cpus_required()])
     SanityTestCase.setUpConstants()
     vpp_cmdline = SanityTestCase.vpp_cmdline
     print("Hacking cmdline to make VPP interactive.")
     SanityTestCase.setUpConstants()
     vpp_cmdline = SanityTestCase.vpp_cmdline
     print("Hacking cmdline to make VPP interactive.")
@@ -54,5 +54,6 @@ def start_vpp_in_gdb():
         if gdb.isalive():
             raise Exception("GDB refused to die...")
     else:
         if gdb.isalive():
             raise Exception("GDB refused to die...")
     else:
-        sys.stderr.write("Debugger '%s' does not exist or is not "
-                         "an executable..\n" % gdb_path)
+        sys.stderr.write(
+            "Debugger '%s' does not exist or is not an executable..\n" % gdb_path
+        )
index 2cbee27..fe10db7 100644 (file)
@@ -4,6 +4,7 @@ import vpp_papi
 from vpp_papi_provider import VppPapiProvider
 import objgraph
 from pympler import tracker
 from vpp_papi_provider import VppPapiProvider
 import objgraph
 from pympler import tracker
+
 tr = tracker.SummaryTracker()
 
 """
 tr = tracker.SummaryTracker()
 
 """
@@ -18,16 +19,16 @@ def on_tear_down_class(cls):
     tr.print_diff()
     objects = gc.get_objects()
     counter = 0
     tr.print_diff()
     objects = gc.get_objects()
     counter = 0
-    with open(cls.tempdir + '/python_objects.txt', 'w') as f:
+    with open(cls.tempdir + "/python_objects.txt", "w") as f:
         interesting = [
         interesting = [
-            o for o in objects
-            if isinstance(o, (VppPapiProvider, vpp_papi.VPP))]
+            o for o in objects if isinstance(o, (VppPapiProvider, vpp_papi.VPP))
+        ]
         del objects
         gc.collect()
         for o in interesting:
         del objects
         gc.collect()
         for o in interesting:
-            objgraph.show_backrefs([o], max_depth=5,
-                                   filename="%s/%s.png" %
-                                   (cls.tempdir, counter))
+            objgraph.show_backrefs(
+                [o], max_depth=5, filename="%s/%s.png" % (cls.tempdir, counter)
+            )
             counter += 1
             refs = gc.get_referrers(o)
             pp = pprint.PrettyPrinter(indent=2)
             counter += 1
             refs = gc.get_referrers(o)
             pp = pprint.PrettyPrinter(indent=2)
index 8065518..05e59b5 100644 (file)
@@ -37,8 +37,15 @@ from vpp_papi import VppEnum
 import vpp_papi
 from vpp_papi.vpp_stats import VPPStats
 from vpp_papi.vpp_transport_socket import VppTransportSocketIOError
 import vpp_papi
 from vpp_papi.vpp_stats import VPPStats
 from vpp_papi.vpp_transport_socket import VppTransportSocketIOError
-from log import RED, GREEN, YELLOW, double_line_delim, single_line_delim, \
-    get_logger, colorize
+from log import (
+    RED,
+    GREEN,
+    YELLOW,
+    double_line_delim,
+    single_line_delim,
+    get_logger,
+    colorize,
+)
 from vpp_object import VppObjectRegistry
 from util import ppp, is_core_present
 from scapy.layers.inet import IPerror, TCPerror, UDPerror, ICMPerror
 from vpp_object import VppObjectRegistry
 from util import ppp, is_core_present
 from scapy.layers.inet import IPerror, TCPerror, UDPerror, ICMPerror
@@ -49,7 +56,7 @@ from scapy.layers.inet6 import ICMPv6EchoReply
 logger = logging.getLogger(__name__)
 
 # Set up an empty logger for the testcase that can be overridden as necessary
 logger = logging.getLogger(__name__)
 
 # Set up an empty logger for the testcase that can be overridden as necessary
-null_logger = logging.getLogger('VppTestCase')
+null_logger = logging.getLogger("VppTestCase")
 null_logger.addHandler(logging.NullHandler())
 
 PASS = 0
 null_logger.addHandler(logging.NullHandler())
 
 PASS = 0
@@ -72,10 +79,13 @@ if config.debug_framework:
 
 
 class VppDiedError(Exception):
 
 
 class VppDiedError(Exception):
-    """ exception for reporting that the subprocess has died."""
+    """exception for reporting that the subprocess has died."""
 
 
-    signals_by_value = {v: k for k, v in signal.__dict__.items() if
-                        k.startswith('SIG') and not k.startswith('SIG_')}
+    signals_by_value = {
+        v: k
+        for k, v in signal.__dict__.items()
+        if k.startswith("SIG") and not k.startswith("SIG_")
+    }
 
     def __init__(self, rv=None, testcase=None, method_name=None):
         self.rv = rv
 
     def __init__(self, rv=None, testcase=None, method_name=None):
         self.rv = rv
@@ -89,15 +99,16 @@ class VppDiedError(Exception):
             pass
 
         if testcase is None and method_name is None:
             pass
 
         if testcase is None and method_name is None:
-            in_msg = ''
+            in_msg = ""
         else:
         else:
-            in_msg = ' while running %s.%s' % (testcase, method_name)
+            in_msg = " while running %s.%s" % (testcase, method_name)
 
         if self.rv:
 
         if self.rv:
-            msg = "VPP subprocess died unexpectedly%s with return code: %d%s."\
-                % (in_msg, self.rv, ' [%s]' %
-                   (self.signal_name if
-                    self.signal_name is not None else ''))
+            msg = "VPP subprocess died unexpectedly%s with return code: %d%s." % (
+                in_msg,
+                self.rv,
+                " [%s]" % (self.signal_name if self.signal_name is not None else ""),
+            )
         else:
             msg = "VPP subprocess died unexpectedly%s." % in_msg
 
         else:
             msg = "VPP subprocess died unexpectedly%s." % in_msg
 
@@ -110,6 +121,7 @@ class _PacketInfo(object):
     Help process information about the next packet.
     Set variables to default values.
     """
     Help process information about the next packet.
     Set variables to default values.
     """
+
     #: Store the index of the packet.
     index = -1
     #: Store the index of the source packet generator interface of the packet.
     #: Store the index of the packet.
     index = -1
     #: Store the index of the source packet generator interface of the packet.
@@ -133,19 +145,23 @@ class _PacketInfo(object):
 
 
 def pump_output(testclass):
 
 
 def pump_output(testclass):
-    """ pump output from vpp stdout/stderr to proper queues """
+    """pump output from vpp stdout/stderr to proper queues"""
     stdout_fragment = ""
     stderr_fragment = ""
     while not testclass.pump_thread_stop_flag.is_set():
     stdout_fragment = ""
     stderr_fragment = ""
     while not testclass.pump_thread_stop_flag.is_set():
-        readable = select.select([testclass.vpp.stdout.fileno(),
-                                  testclass.vpp.stderr.fileno(),
-                                  testclass.pump_thread_wakeup_pipe[0]],
-                                 [], [])[0]
+        readable = select.select(
+            [
+                testclass.vpp.stdout.fileno(),
+                testclass.vpp.stderr.fileno(),
+                testclass.pump_thread_wakeup_pipe[0],
+            ],
+            [],
+            [],
+        )[0]
         if testclass.vpp.stdout.fileno() in readable:
             read = os.read(testclass.vpp.stdout.fileno(), 102400)
             if len(read) > 0:
         if testclass.vpp.stdout.fileno() in readable:
             read = os.read(testclass.vpp.stdout.fileno(), 102400)
             if len(read) > 0:
-                split = read.decode('ascii',
-                                    errors='backslashreplace').splitlines(True)
+                split = read.decode("ascii", errors="backslashreplace").splitlines(True)
                 if len(stdout_fragment) > 0:
                     split[0] = "%s%s" % (stdout_fragment, split[0])
                 if len(split) > 0 and split[-1].endswith("\n"):
                 if len(stdout_fragment) > 0:
                     split[0] = "%s%s" % (stdout_fragment, split[0])
                 if len(split) > 0 and split[-1].endswith("\n"):
@@ -156,13 +172,11 @@ def pump_output(testclass):
                 testclass.vpp_stdout_deque.extend(split[:limit])
                 if not config.cache_vpp_output:
                     for line in split[:limit]:
                 testclass.vpp_stdout_deque.extend(split[:limit])
                 if not config.cache_vpp_output:
                     for line in split[:limit]:
-                        testclass.logger.info(
-                            "VPP STDOUT: %s" % line.rstrip("\n"))
+                        testclass.logger.info("VPP STDOUT: %s" % line.rstrip("\n"))
         if testclass.vpp.stderr.fileno() in readable:
             read = os.read(testclass.vpp.stderr.fileno(), 102400)
             if len(read) > 0:
         if testclass.vpp.stderr.fileno() in readable:
             read = os.read(testclass.vpp.stderr.fileno(), 102400)
             if len(read) > 0:
-                split = read.decode('ascii',
-                                    errors='backslashreplace').splitlines(True)
+                split = read.decode("ascii", errors="backslashreplace").splitlines(True)
                 if len(stderr_fragment) > 0:
                     split[0] = "%s%s" % (stderr_fragment, split[0])
                 if len(split) > 0 and split[-1].endswith("\n"):
                 if len(stderr_fragment) > 0:
                     split[0] = "%s%s" % (stderr_fragment, split[0])
                 if len(split) > 0 and split[-1].endswith("\n"):
@@ -174,14 +188,13 @@ def pump_output(testclass):
                 testclass.vpp_stderr_deque.extend(split[:limit])
                 if not config.cache_vpp_output:
                     for line in split[:limit]:
                 testclass.vpp_stderr_deque.extend(split[:limit])
                 if not config.cache_vpp_output:
                     for line in split[:limit]:
-                        testclass.logger.error(
-                            "VPP STDERR: %s" % line.rstrip("\n"))
+                        testclass.logger.error("VPP STDERR: %s" % line.rstrip("\n"))
                         # ignoring the dummy pipe here intentionally - the
                         # flag will take care of properly terminating the loop
 
 
 def _is_platform_aarch64():
                         # ignoring the dummy pipe here intentionally - the
                         # flag will take care of properly terminating the loop
 
 
 def _is_platform_aarch64():
-    return platform.machine() == 'aarch64'
+    return platform.machine() == "aarch64"
 
 
 is_platform_aarch64 = _is_platform_aarch64()
 
 
 is_platform_aarch64 = _is_platform_aarch64()
@@ -191,6 +204,7 @@ class KeepAliveReporter(object):
     """
     Singleton object which reports test start to parent process
     """
     """
     Singleton object which reports test start to parent process
     """
+
     _shared_state = {}
 
     def __init__(self):
     _shared_state = {}
 
     def __init__(self):
@@ -216,7 +230,7 @@ class KeepAliveReporter(object):
             return
 
         if isclass(test):
             return
 
         if isclass(test):
-            desc = '%s (%s)' % (desc, unittest.util.strclass(test))
+            desc = "%s (%s)" % (desc, unittest.util.strclass(test))
         else:
             desc = test.id()
 
         else:
             desc = test.id()
 
@@ -240,6 +254,7 @@ def create_tag_decorator(e):
         except AttributeError:
             cls.test_tags = [e]
         return cls
         except AttributeError:
             cls.test_tags = [e]
         return cls
+
     return decorator
 
 
     return decorator
 
 
@@ -250,7 +265,7 @@ tag_fixme_asan = create_tag_decorator(TestCaseTag.FIXME_ASAN)
 
 class DummyVpp:
     returncode = None
 
 class DummyVpp:
     returncode = None
-    pid = 0xcafebafe
+    pid = 0xCAFEBAFE
 
     def poll(self):
         pass
 
     def poll(self):
         pass
@@ -300,7 +315,7 @@ class VppTestCase(CPUInterface, unittest.TestCase):
 
     @classmethod
     def has_tag(cls, tag):
 
     @classmethod
     def has_tag(cls, tag):
-        """ if the test case has a given tag - return true """
+        """if the test case has a given tag - return true"""
         try:
             return tag in cls.test_tags
         except AttributeError:
         try:
             return tag in cls.test_tags
         except AttributeError:
@@ -309,15 +324,15 @@ class VppTestCase(CPUInterface, unittest.TestCase):
 
     @classmethod
     def is_tagged_run_solo(cls):
 
     @classmethod
     def is_tagged_run_solo(cls):
-        """ if the test case class is timing-sensitive - return true """
+        """if the test case class is timing-sensitive - return true"""
         return cls.has_tag(TestCaseTag.RUN_SOLO)
 
     @classmethod
     def skip_fixme_asan(cls):
         return cls.has_tag(TestCaseTag.RUN_SOLO)
 
     @classmethod
     def skip_fixme_asan(cls):
-        """ if @tag_fixme_asan & ASan is enabled - mark for skip """
+        """if @tag_fixme_asan & ASan is enabled - mark for skip"""
         if cls.has_tag(TestCaseTag.FIXME_ASAN):
         if cls.has_tag(TestCaseTag.FIXME_ASAN):
-            vpp_extra_cmake_args = os.environ.get('VPP_EXTRA_CMAKE_ARGS', '')
-            if 'DVPP_ENABLE_SANITIZE_ADDR=ON' in vpp_extra_cmake_args:
+            vpp_extra_cmake_args = os.environ.get("VPP_EXTRA_CMAKE_ARGS", "")
+            if "DVPP_ENABLE_SANITIZE_ADDR=ON" in vpp_extra_cmake_args:
                 cls = unittest.skip("Skipping @tag_fixme_asan tests")(cls)
 
     @classmethod
                 cls = unittest.skip("Skipping @tag_fixme_asan tests")(cls)
 
     @classmethod
@@ -364,7 +379,7 @@ class VppTestCase(CPUInterface, unittest.TestCase):
 
     @classmethod
     def setUpConstants(cls):
 
     @classmethod
     def setUpConstants(cls):
-        """ Set-up the test case class based on environment variables """
+        """Set-up the test case class based on environment variables"""
         cls.step = config.step
         cls.plugin_path = ":".join(config.vpp_plugin_dir)
         cls.test_plugin_path = ":".join(config.vpp_test_plugin_dir)
         cls.step = config.step
         cls.plugin_path = ":".join(config.vpp_plugin_dir)
         cls.test_plugin_path = ":".join(config.vpp_test_plugin_dir)
@@ -385,34 +400,92 @@ class VppTestCase(CPUInterface, unittest.TestCase):
 
         api_fuzzing = config.api_fuzz
         if api_fuzzing is None:
 
         api_fuzzing = config.api_fuzz
         if api_fuzzing is None:
-            api_fuzzing = 'off'
+            api_fuzzing = "off"
 
         cls.vpp_cmdline = [
             config.vpp,
 
         cls.vpp_cmdline = [
             config.vpp,
-            "unix", "{", "nodaemon", debug_cli, "full-coredump",
-            coredump_size, "runtime-dir", cls.tempdir, "}",
-            "api-trace", "{", "on", "}",
-            "api-segment", "{", "prefix", cls.get_api_segment_prefix(), "}",
-            "cpu", "{", "main-core", str(cls.cpus[0]), ]
+            "unix",
+            "{",
+            "nodaemon",
+            debug_cli,
+            "full-coredump",
+            coredump_size,
+            "runtime-dir",
+            cls.tempdir,
+            "}",
+            "api-trace",
+            "{",
+            "on",
+            "}",
+            "api-segment",
+            "{",
+            "prefix",
+            cls.get_api_segment_prefix(),
+            "}",
+            "cpu",
+            "{",
+            "main-core",
+            str(cls.cpus[0]),
+        ]
         if cls.extern_plugin_path not in (None, ""):
         if cls.extern_plugin_path not in (None, ""):
-            cls.extra_vpp_plugin_config.append(
-                "add-path %s" % cls.extern_plugin_path)
+            cls.extra_vpp_plugin_config.append("add-path %s" % cls.extern_plugin_path)
         if cls.get_vpp_worker_count():
         if cls.get_vpp_worker_count():
-            cls.vpp_cmdline.extend([
-                "corelist-workers", ",".join([str(x) for x in cls.cpus[1:]])])
-        cls.vpp_cmdline.extend([
-            "}",
-            "physmem", "{", "max-size", "32m", "}",
-            "statseg", "{", "socket-name", cls.get_stats_sock_path(),
-            cls.extra_vpp_statseg_config, "}",
-            "socksvr", "{", "socket-name", cls.get_api_sock_path(), "}",
-            "node { ", default_variant, "}",
-            "api-fuzz {", api_fuzzing, "}",
-            "plugins", "{", "plugin", "dpdk_plugin.so", "{", "disable", "}",
-            "plugin", "rdma_plugin.so", "{", "disable", "}",
-            "plugin", "lisp_unittest_plugin.so", "{", "enable", "}",
-            "plugin", "unittest_plugin.so", "{", "enable", "}"
-        ] + cls.extra_vpp_plugin_config + ["}", ])
+            cls.vpp_cmdline.extend(
+                ["corelist-workers", ",".join([str(x) for x in cls.cpus[1:]])]
+            )
+        cls.vpp_cmdline.extend(
+            [
+                "}",
+                "physmem",
+                "{",
+                "max-size",
+                "32m",
+                "}",
+                "statseg",
+                "{",
+                "socket-name",
+                cls.get_stats_sock_path(),
+                cls.extra_vpp_statseg_config,
+                "}",
+                "socksvr",
+                "{",
+                "socket-name",
+                cls.get_api_sock_path(),
+                "}",
+                "node { ",
+                default_variant,
+                "}",
+                "api-fuzz {",
+                api_fuzzing,
+                "}",
+                "plugins",
+                "{",
+                "plugin",
+                "dpdk_plugin.so",
+                "{",
+                "disable",
+                "}",
+                "plugin",
+                "rdma_plugin.so",
+                "{",
+                "disable",
+                "}",
+                "plugin",
+                "lisp_unittest_plugin.so",
+                "{",
+                "enable",
+                "}",
+                "plugin",
+                "unittest_plugin.so",
+                "{",
+                "enable",
+                "}",
+            ]
+            + cls.extra_vpp_plugin_config
+            + [
+                "}",
+            ]
+        )
 
         if cls.extra_vpp_punt_config is not None:
             cls.vpp_cmdline.extend(cls.extra_vpp_punt_config)
 
         if cls.extra_vpp_punt_config is not None:
             cls.vpp_cmdline.extend(cls.extra_vpp_punt_config)
@@ -435,17 +508,23 @@ class VppTestCase(CPUInterface, unittest.TestCase):
         print(single_line_delim)
         print("You can debug VPP using:")
         if cls.debug_gdbserver:
         print(single_line_delim)
         print("You can debug VPP using:")
         if cls.debug_gdbserver:
-            print(f"sudo gdb {config.vpp} "
-                  f"-ex 'target remote localhost:{cls.gdbserver_port}'")
-            print("Now is the time to attach gdb by running the above "
-                  "command, set up breakpoints etc., then resume VPP from "
-                  "within gdb by issuing the 'continue' command")
+            print(
+                f"sudo gdb {config.vpp} "
+                f"-ex 'target remote localhost:{cls.gdbserver_port}'"
+            )
+            print(
+                "Now is the time to attach gdb by running the above "
+                "command, set up breakpoints etc., then resume VPP from "
+                "within gdb by issuing the 'continue' command"
+            )
             cls.gdbserver_port += 1
         elif cls.debug_gdb:
             print(f"sudo gdb {config.vpp} -ex 'attach {cls.vpp.pid}'")
             cls.gdbserver_port += 1
         elif cls.debug_gdb:
             print(f"sudo gdb {config.vpp} -ex 'attach {cls.vpp.pid}'")
-            print("Now is the time to attach gdb by running the above "
-                  "command and set up breakpoints etc., then resume VPP from"
-                  " within gdb by issuing the 'continue' command")
+            print(
+                "Now is the time to attach gdb by running the above "
+                "command and set up breakpoints etc., then resume VPP from"
+                " within gdb by issuing the 'continue' command"
+            )
         print(single_line_delim)
         input("Press ENTER to continue running the testcase...")
 
         print(single_line_delim)
         input("Press ENTER to continue running the testcase...")
 
@@ -459,31 +538,35 @@ class VppTestCase(CPUInterface, unittest.TestCase):
         cmdline = cls.vpp_cmdline
 
         if cls.debug_gdbserver:
         cmdline = cls.vpp_cmdline
 
         if cls.debug_gdbserver:
-            gdbserver = '/usr/bin/gdbserver'
-            if not os.path.isfile(gdbserver) or\
-                    not os.access(gdbserver, os.X_OK):
-                raise Exception("gdbserver binary '%s' does not exist or is "
-                                "not executable" % gdbserver)
-
-            cmdline = [gdbserver, 'localhost:{port}'
-                       .format(port=cls.gdbserver_port)] + cls.vpp_cmdline
+            gdbserver = "/usr/bin/gdbserver"
+            if not os.path.isfile(gdbserver) or not os.access(gdbserver, os.X_OK):
+                raise Exception(
+                    "gdbserver binary '%s' does not exist or is "
+                    "not executable" % gdbserver
+                )
+
+            cmdline = [
+                gdbserver,
+                "localhost:{port}".format(port=cls.gdbserver_port),
+            ] + cls.vpp_cmdline
             cls.logger.info("Gdbserver cmdline is %s", " ".join(cmdline))
 
         try:
             cls.logger.info("Gdbserver cmdline is %s", " ".join(cmdline))
 
         try:
-            cls.vpp = subprocess.Popen(cmdline,
-                                       stdout=subprocess.PIPE,
-                                       stderr=subprocess.PIPE)
+            cls.vpp = subprocess.Popen(
+                cmdline, stdout=subprocess.PIPE, stderr=subprocess.PIPE
+            )
         except subprocess.CalledProcessError as e:
         except subprocess.CalledProcessError as e:
-            cls.logger.critical("Subprocess returned with non-0 return code: ("
-                                "%s)", e.returncode)
+            cls.logger.critical(
+                "Subprocess returned with non-0 return code: (%s)", e.returncode
+            )
             raise
         except OSError as e:
             raise
         except OSError as e:
-            cls.logger.critical("Subprocess returned with OS error: "
-                                "(%s) %s", e.errno, e.strerror)
+            cls.logger.critical(
+                "Subprocess returned with OS error: (%s) %s", e.errno, e.strerror
+            )
             raise
         except Exception as e:
             raise
         except Exception as e:
-            cls.logger.exception("Subprocess returned unexpected from "
-                                 "%s:", cmdline)
+            cls.logger.exception("Subprocess returned unexpected from %s:", cmdline)
             raise
 
         cls.wait_for_enter()
             raise
 
         cls.wait_for_enter()
@@ -504,11 +587,11 @@ class VppTestCase(CPUInterface, unittest.TestCase):
                     ok = True
                     break
             if not ok:
                     ok = True
                     break
             if not ok:
-                cls.logger.error("Timed out waiting for coredump to complete:"
-                                 " %s", corefile)
+                cls.logger.error(
+                    "Timed out waiting for coredump to complete: %s", corefile
+                )
             else:
             else:
-                cls.logger.error("Coredump complete: %s, size %d",
-                                 corefile, curr_size)
+                cls.logger.error("Coredump complete: %s, size %d", corefile, curr_size)
 
     @classmethod
     def get_stats_sock_path(cls):
 
     @classmethod
     def get_stats_sock_path(cls):
@@ -554,21 +637,24 @@ class VppTestCase(CPUInterface, unittest.TestCase):
         super(VppTestCase, cls).setUpClass()
         cls.logger = get_logger(cls.__name__)
         random.seed(config.rnd_seed)
         super(VppTestCase, cls).setUpClass()
         cls.logger = get_logger(cls.__name__)
         random.seed(config.rnd_seed)
-        if hasattr(cls, 'parallel_handler'):
+        if hasattr(cls, "parallel_handler"):
             cls.logger.addHandler(cls.parallel_handler)
             cls.logger.propagate = False
         cls.set_debug_flags(config.debug)
         cls.tempdir = cls.get_tempdir()
         cls.create_file_handler()
         cls.file_handler.setFormatter(
             cls.logger.addHandler(cls.parallel_handler)
             cls.logger.propagate = False
         cls.set_debug_flags(config.debug)
         cls.tempdir = cls.get_tempdir()
         cls.create_file_handler()
         cls.file_handler.setFormatter(
-            Formatter(fmt='%(asctime)s,%(msecs)03d %(message)s',
-                      datefmt="%H:%M:%S"))
+            Formatter(fmt="%(asctime)s,%(msecs)03d %(message)s", datefmt="%H:%M:%S")
+        )
         cls.file_handler.setLevel(DEBUG)
         cls.logger.addHandler(cls.file_handler)
         cls.logger.debug("--- setUpClass() for %s called ---" % cls.__name__)
         os.chdir(cls.tempdir)
         cls.file_handler.setLevel(DEBUG)
         cls.logger.addHandler(cls.file_handler)
         cls.logger.debug("--- setUpClass() for %s called ---" % cls.__name__)
         os.chdir(cls.tempdir)
-        cls.logger.info("Temporary dir is %s, api socket is %s",
-                        cls.tempdir, cls.get_api_sock_path())
+        cls.logger.info(
+            "Temporary dir is %s, api socket is %s",
+            cls.tempdir,
+            cls.get_api_sock_path(),
+        )
         cls.logger.debug("Random seed is %s", config.rnd_seed)
         cls.setUpConstants()
         cls.reset_packet_infos()
         cls.logger.debug("Random seed is %s", config.rnd_seed)
         cls.setUpConstants()
         cls.reset_packet_infos()
@@ -586,9 +672,10 @@ class VppTestCase(CPUInterface, unittest.TestCase):
                 cls.attach_vpp()
             else:
                 cls.run_vpp()
                 cls.attach_vpp()
             else:
                 cls.run_vpp()
-            cls.reporter.send_keep_alive(cls, 'setUpClass')
+            cls.reporter.send_keep_alive(cls, "setUpClass")
             VppTestResult.current_test_case_info = TestCaseInfo(
             VppTestResult.current_test_case_info = TestCaseInfo(
-                cls.logger, cls.tempdir, cls.vpp.pid, config.vpp)
+                cls.logger, cls.tempdir, cls.vpp.pid, config.vpp
+            )
             cls.vpp_stdout_deque = deque()
             cls.vpp_stderr_deque = deque()
             if not cls.debug_attach:
             cls.vpp_stdout_deque = deque()
             cls.vpp_stderr_deque = deque()
             if not cls.debug_attach:
@@ -599,8 +686,7 @@ class VppTestCase(CPUInterface, unittest.TestCase):
                 cls.pump_thread.start()
             if cls.debug_gdb or cls.debug_gdbserver or cls.debug_attach:
                 cls.vapi_response_timeout = 0
                 cls.pump_thread.start()
             if cls.debug_gdb or cls.debug_gdbserver or cls.debug_attach:
                 cls.vapi_response_timeout = 0
-            cls.vapi = VppPapiProvider(cls.__name__, cls,
-                                       cls.vapi_response_timeout)
+            cls.vapi = VppPapiProvider(cls.__name__, cls, cls.vapi_response_timeout)
             if cls.step:
                 hook = hookmodule.StepHook(cls)
             else:
             if cls.step:
                 hook = hookmodule.StepHook(cls)
             else:
@@ -613,7 +699,8 @@ class VppTestCase(CPUInterface, unittest.TestCase):
                 cls.vpp_startup_failed = True
                 cls.logger.critical(
                     "VPP died shortly after startup, check the"
                 cls.vpp_startup_failed = True
                 cls.logger.critical(
                     "VPP died shortly after startup, check the"
-                    " output to standard error for possible cause")
+                    " output to standard error for possible cause"
+                )
                 raise
             try:
                 cls.vapi.connect()
                 raise
             try:
                 cls.vapi.connect()
@@ -622,9 +709,14 @@ class VppTestCase(CPUInterface, unittest.TestCase):
                 cls.vapi.disconnect()
 
                 if cls.debug_gdbserver:
                 cls.vapi.disconnect()
 
                 if cls.debug_gdbserver:
-                    print(colorize("You're running VPP inside gdbserver but "
-                                   "VPP-API connection failed, did you forget "
-                                   "to 'continue' VPP from within gdb?", RED))
+                    print(
+                        colorize(
+                            "You're running VPP inside gdbserver but "
+                            "VPP-API connection failed, did you forget "
+                            "to 'continue' VPP from within gdb?",
+                            RED,
+                        )
+                    )
                 raise e
             if cls.debug_attach:
                 last_line = cls.vapi.cli("show thread").split("\n")[-2]
                 raise e
             if cls.debug_attach:
                 last_line = cls.vapi.cli("show thread").split("\n")[-2]
@@ -641,7 +733,7 @@ class VppTestCase(CPUInterface, unittest.TestCase):
 
     @classmethod
     def _debug_quit(cls):
 
     @classmethod
     def _debug_quit(cls):
-        if (cls.debug_gdbserver or cls.debug_gdb):
+        if cls.debug_gdbserver or cls.debug_gdb:
             try:
                 cls.vpp.poll()
 
             try:
                 cls.vpp.poll()
 
@@ -650,8 +742,10 @@ class VppTestCase(CPUInterface, unittest.TestCase):
                     print(double_line_delim)
                     print("VPP or GDB server is still running")
                     print(single_line_delim)
                     print(double_line_delim)
                     print("VPP or GDB server is still running")
                     print(single_line_delim)
-                    input("When done debugging, press ENTER to kill the "
-                          "process and finish running the testcase...")
+                    input(
+                        "When done debugging, press ENTER to kill the "
+                        "process and finish running the testcase..."
+                    )
             except AttributeError:
                 pass
 
             except AttributeError:
                 pass
 
@@ -663,25 +757,23 @@ class VppTestCase(CPUInterface, unittest.TestCase):
         cls._debug_quit()
 
         # first signal that we want to stop the pump thread, then wake it up
         cls._debug_quit()
 
         # first signal that we want to stop the pump thread, then wake it up
-        if hasattr(cls, 'pump_thread_stop_flag'):
+        if hasattr(cls, "pump_thread_stop_flag"):
             cls.pump_thread_stop_flag.set()
             cls.pump_thread_stop_flag.set()
-        if hasattr(cls, 'pump_thread_wakeup_pipe'):
-            os.write(cls.pump_thread_wakeup_pipe[1], b'ding dong wake up')
-        if hasattr(cls, 'pump_thread'):
+        if hasattr(cls, "pump_thread_wakeup_pipe"):
+            os.write(cls.pump_thread_wakeup_pipe[1], b"ding dong wake up")
+        if hasattr(cls, "pump_thread"):
             cls.logger.debug("Waiting for pump thread to stop")
             cls.pump_thread.join()
             cls.logger.debug("Waiting for pump thread to stop")
             cls.pump_thread.join()
-        if hasattr(cls, 'vpp_stderr_reader_thread'):
+        if hasattr(cls, "vpp_stderr_reader_thread"):
             cls.logger.debug("Waiting for stderr pump to stop")
             cls.vpp_stderr_reader_thread.join()
 
             cls.logger.debug("Waiting for stderr pump to stop")
             cls.vpp_stderr_reader_thread.join()
 
-        if hasattr(cls, 'vpp'):
-            if hasattr(cls, 'vapi'):
+        if hasattr(cls, "vpp"):
+            if hasattr(cls, "vapi"):
                 cls.logger.debug(cls.vapi.vpp.get_stats())
                 cls.logger.debug(cls.vapi.vpp.get_stats())
-                cls.logger.debug("Disconnecting class vapi client on %s",
-                                 cls.__name__)
+                cls.logger.debug("Disconnecting class vapi client on %s", cls.__name__)
                 cls.vapi.disconnect()
                 cls.vapi.disconnect()
-                cls.logger.debug("Deleting class vapi attribute on %s",
-                                 cls.__name__)
+                cls.logger.debug("Deleting class vapi attribute on %s", cls.__name__)
                 del cls.vapi
             cls.vpp.poll()
             if not cls.debug_attach and cls.vpp.returncode is None:
                 del cls.vapi
             cls.vpp.poll()
             if not cls.debug_attach and cls.vpp.returncode is None:
@@ -694,8 +786,7 @@ class VppTestCase(CPUInterface, unittest.TestCase):
                 except subprocess.TimeoutExpired:
                     cls.vpp.kill()
                     outs, errs = cls.vpp.communicate()
                 except subprocess.TimeoutExpired:
                     cls.vpp.kill()
                     outs, errs = cls.vpp.communicate()
-            cls.logger.debug("Deleting class vpp attribute on %s",
-                             cls.__name__)
+            cls.logger.debug("Deleting class vpp attribute on %s", cls.__name__)
             if not cls.debug_attach:
                 cls.vpp.stdout.close()
                 cls.vpp.stderr.close()
             if not cls.debug_attach:
                 cls.vpp.stdout.close()
                 cls.vpp.stderr.close()
@@ -708,32 +799,31 @@ class VppTestCase(CPUInterface, unittest.TestCase):
             stdout_log = cls.logger.info
             stderr_log = cls.logger.info
 
             stdout_log = cls.logger.info
             stderr_log = cls.logger.info
 
-        if hasattr(cls, 'vpp_stdout_deque'):
+        if hasattr(cls, "vpp_stdout_deque"):
             stdout_log(single_line_delim)
             stdout_log(single_line_delim)
-            stdout_log('VPP output to stdout while running %s:', cls.__name__)
+            stdout_log("VPP output to stdout while running %s:", cls.__name__)
             stdout_log(single_line_delim)
             vpp_output = "".join(cls.vpp_stdout_deque)
             stdout_log(single_line_delim)
             vpp_output = "".join(cls.vpp_stdout_deque)
-            with open(cls.tempdir + '/vpp_stdout.txt', 'w') as f:
+            with open(cls.tempdir + "/vpp_stdout.txt", "w") as f:
                 f.write(vpp_output)
                 f.write(vpp_output)
-            stdout_log('\n%s', vpp_output)
+            stdout_log("\n%s", vpp_output)
             stdout_log(single_line_delim)
 
             stdout_log(single_line_delim)
 
-        if hasattr(cls, 'vpp_stderr_deque'):
+        if hasattr(cls, "vpp_stderr_deque"):
             stderr_log(single_line_delim)
             stderr_log(single_line_delim)
-            stderr_log('VPP output to stderr while running %s:', cls.__name__)
+            stderr_log("VPP output to stderr while running %s:", cls.__name__)
             stderr_log(single_line_delim)
             vpp_output = "".join(cls.vpp_stderr_deque)
             stderr_log(single_line_delim)
             vpp_output = "".join(cls.vpp_stderr_deque)
-            with open(cls.tempdir + '/vpp_stderr.txt', 'w') as f:
+            with open(cls.tempdir + "/vpp_stderr.txt", "w") as f:
                 f.write(vpp_output)
                 f.write(vpp_output)
-            stderr_log('\n%s', vpp_output)
+            stderr_log("\n%s", vpp_output)
             stderr_log(single_line_delim)
 
     @classmethod
     def tearDownClass(cls):
             stderr_log(single_line_delim)
 
     @classmethod
     def tearDownClass(cls):
-        """ Perform final cleanup after running all tests in this test-case """
-        cls.logger.debug("--- tearDownClass() for %s called ---" %
-                         cls.__name__)
-        cls.reporter.send_keep_alive(cls, 'tearDownClass')
+        """Perform final cleanup after running all tests in this test-case"""
+        cls.logger.debug("--- tearDownClass() for %s called ---" % cls.__name__)
+        cls.reporter.send_keep_alive(cls, "tearDownClass")
         cls.quit()
         cls.file_handler.close()
         cls.reset_packet_infos()
         cls.quit()
         cls.file_handler.close()
         cls.reset_packet_infos()
@@ -741,14 +831,15 @@ class VppTestCase(CPUInterface, unittest.TestCase):
             debug_internal.on_tear_down_class(cls)
 
     def show_commands_at_teardown(self):
             debug_internal.on_tear_down_class(cls)
 
     def show_commands_at_teardown(self):
-        """ Allow subclass specific teardown logging additions."""
+        """Allow subclass specific teardown logging additions."""
         self.logger.info("--- No test specific show commands provided. ---")
 
     def tearDown(self):
         self.logger.info("--- No test specific show commands provided. ---")
 
     def tearDown(self):
-        """ Show various debug prints after each test """
-        self.logger.debug("--- tearDown() for %s.%s(%s) called ---" %
-                          (self.__class__.__name__, self._testMethodName,
-                           self._testMethodDoc))
+        """Show various debug prints after each test"""
+        self.logger.debug(
+            "--- tearDown() for %s.%s(%s) called ---"
+            % (self.__class__.__name__, self._testMethodName, self._testMethodDoc)
+        )
 
         try:
             if not self.vpp_dead:
 
         try:
             if not self.vpp_dead:
@@ -769,32 +860,35 @@ class VppTestCase(CPUInterface, unittest.TestCase):
             tmp_api_trace = "/tmp/%s" % api_trace
             vpp_api_trace_log = "%s/%s" % (self.tempdir, api_trace)
             self.logger.info(self.vapi.ppcli("api trace save %s" % api_trace))
             tmp_api_trace = "/tmp/%s" % api_trace
             vpp_api_trace_log = "%s/%s" % (self.tempdir, api_trace)
             self.logger.info(self.vapi.ppcli("api trace save %s" % api_trace))
-            self.logger.info("Moving %s to %s\n" % (tmp_api_trace,
-                                                    vpp_api_trace_log))
+            self.logger.info("Moving %s to %s\n" % (tmp_api_trace, vpp_api_trace_log))
             os.rename(tmp_api_trace, vpp_api_trace_log)
         except VppTransportSocketIOError:
             os.rename(tmp_api_trace, vpp_api_trace_log)
         except VppTransportSocketIOError:
-            self.logger.debug("VppTransportSocketIOError: Vpp dead. "
-                              "Cannot log show commands.")
+            self.logger.debug(
+                "VppTransportSocketIOError: Vpp dead. Cannot log show commands."
+            )
             self.vpp_dead = True
         else:
             self.registry.unregister_all(self.logger)
 
     def setUp(self):
             self.vpp_dead = True
         else:
             self.registry.unregister_all(self.logger)
 
     def setUp(self):
-        """ Clear trace before running each test"""
+        """Clear trace before running each test"""
         super(VppTestCase, self).setUp()
         self.reporter.send_keep_alive(self)
         if self.vpp_dead:
         super(VppTestCase, self).setUp()
         self.reporter.send_keep_alive(self)
         if self.vpp_dead:
-            raise VppDiedError(rv=None, testcase=self.__class__.__name__,
-                               method_name=self._testMethodName)
-        self.sleep(.1, "during setUp")
+            raise VppDiedError(
+                rv=None,
+                testcase=self.__class__.__name__,
+                method_name=self._testMethodName,
+            )
+        self.sleep(0.1, "during setUp")
         self.vpp_stdout_deque.append(
         self.vpp_stdout_deque.append(
-            "--- test setUp() for %s.%s(%s) starts here ---\n" %
-            (self.__class__.__name__, self._testMethodName,
-             self._testMethodDoc))
+            "--- test setUp() for %s.%s(%s) starts here ---\n"
+            % (self.__class__.__name__, self._testMethodName, self._testMethodDoc)
+        )
         self.vpp_stderr_deque.append(
         self.vpp_stderr_deque.append(
-            "--- test setUp() for %s.%s(%s) starts here ---\n" %
-            (self.__class__.__name__, self._testMethodName,
-             self._testMethodDoc))
+            "--- test setUp() for %s.%s(%s) starts here ---\n"
+            % (self.__class__.__name__, self._testMethodName, self._testMethodDoc)
+        )
         self.vapi.cli("clear trace")
         # store the test instance inside the test class - so that objects
         # holding the class can access instance methods (like assertEqual)
         self.vapi.cli("clear trace")
         # store the test instance inside the test class - so that objects
         # holding the class can access instance methods (like assertEqual)
@@ -816,7 +910,7 @@ class VppTestCase(CPUInterface, unittest.TestCase):
 
     @classmethod
     def register_pcap(cls, intf, worker):
 
     @classmethod
     def register_pcap(cls, intf, worker):
-        """ Register a pcap in the testclass """
+        """Register a pcap in the testclass"""
         # add to the list of captures with current timestamp
         cls._pcaps.append((intf, worker))
 
         # add to the list of captures with current timestamp
         cls._pcaps.append((intf, worker))
 
@@ -824,14 +918,14 @@ class VppTestCase(CPUInterface, unittest.TestCase):
     def get_vpp_time(cls):
         # processes e.g. "Time now 2.190522, Wed, 11 Mar 2020 17:29:54 GMT"
         # returns float("2.190522")
     def get_vpp_time(cls):
         # processes e.g. "Time now 2.190522, Wed, 11 Mar 2020 17:29:54 GMT"
         # returns float("2.190522")
-        timestr = cls.vapi.cli('show clock')
-        head, sep, tail = timestr.partition(',')
-        head, sep, tail = head.partition('Time now')
+        timestr = cls.vapi.cli("show clock")
+        head, sep, tail = timestr.partition(",")
+        head, sep, tail = head.partition("Time now")
         return float(tail)
 
     @classmethod
     def sleep_on_vpp_time(cls, sec):
         return float(tail)
 
     @classmethod
     def sleep_on_vpp_time(cls, sec):
-        """ Sleep according to time in VPP world """
+        """Sleep according to time in VPP world"""
         # On a busy system with many processes
         # we might end up with VPP time being slower than real world
         # So take that into account when waiting for VPP to do something
         # On a busy system with many processes
         # we might end up with VPP time being slower than real world
         # So take that into account when waiting for VPP to do something
@@ -841,34 +935,31 @@ class VppTestCase(CPUInterface, unittest.TestCase):
 
     @classmethod
     def pg_start(cls, trace=True):
 
     @classmethod
     def pg_start(cls, trace=True):
-        """ Enable the PG, wait till it is done, then clean up """
+        """Enable the PG, wait till it is done, then clean up"""
         for (intf, worker) in cls._old_pcaps:
         for (intf, worker) in cls._old_pcaps:
-            intf.handle_old_pcap_file(intf.get_in_path(worker),
-                                      intf.in_history_counter)
+            intf.handle_old_pcap_file(intf.get_in_path(worker), intf.in_history_counter)
         cls._old_pcaps = []
         if trace:
             cls.vapi.cli("clear trace")
             cls.vapi.cli("trace add pg-input 1000")
         cls._old_pcaps = []
         if trace:
             cls.vapi.cli("clear trace")
             cls.vapi.cli("trace add pg-input 1000")
-        cls.vapi.cli('packet-generator enable')
+        cls.vapi.cli("packet-generator enable")
         # PG, when starts, runs to completion -
         # so let's avoid a race condition,
         # and wait a little till it's done.
         # Then clean it up  - and then be gone.
         deadline = time.time() + 300
         # PG, when starts, runs to completion -
         # so let's avoid a race condition,
         # and wait a little till it's done.
         # Then clean it up  - and then be gone.
         deadline = time.time() + 300
-        while cls.vapi.cli('show packet-generator').find("Yes") != -1:
+        while cls.vapi.cli("show packet-generator").find("Yes") != -1:
             cls.sleep(0.01)  # yield
             if time.time() > deadline:
                 cls.logger.error("Timeout waiting for pg to stop")
                 break
         for intf, worker in cls._pcaps:
             cls.sleep(0.01)  # yield
             if time.time() > deadline:
                 cls.logger.error("Timeout waiting for pg to stop")
                 break
         for intf, worker in cls._pcaps:
-            cls.vapi.cli('packet-generator delete %s' %
-                         intf.get_cap_name(worker))
+            cls.vapi.cli("packet-generator delete %s" % intf.get_cap_name(worker))
         cls._old_pcaps = cls._pcaps
         cls._pcaps = []
 
     @classmethod
         cls._old_pcaps = cls._pcaps
         cls._pcaps = []
 
     @classmethod
-    def create_pg_interfaces_internal(cls, interfaces, gso=0, gso_size=0,
-                                      mode=None):
+    def create_pg_interfaces_internal(cls, interfaces, gso=0, gso_size=0, mode=None):
         """
         Create packet-generator interfaces.
 
         """
         Create packet-generator interfaces.
 
@@ -887,26 +978,30 @@ class VppTestCase(CPUInterface, unittest.TestCase):
     @classmethod
     def create_pg_ip4_interfaces(cls, interfaces, gso=0, gso_size=0):
         pgmode = VppEnum.vl_api_pg_interface_mode_t
     @classmethod
     def create_pg_ip4_interfaces(cls, interfaces, gso=0, gso_size=0):
         pgmode = VppEnum.vl_api_pg_interface_mode_t
-        return cls.create_pg_interfaces_internal(interfaces, gso, gso_size,
-                                                 pgmode.PG_API_MODE_IP4)
+        return cls.create_pg_interfaces_internal(
+            interfaces, gso, gso_size, pgmode.PG_API_MODE_IP4
+        )
 
     @classmethod
     def create_pg_ip6_interfaces(cls, interfaces, gso=0, gso_size=0):
         pgmode = VppEnum.vl_api_pg_interface_mode_t
 
     @classmethod
     def create_pg_ip6_interfaces(cls, interfaces, gso=0, gso_size=0):
         pgmode = VppEnum.vl_api_pg_interface_mode_t
-        return cls.create_pg_interfaces_internal(interfaces, gso, gso_size,
-                                                 pgmode.PG_API_MODE_IP6)
+        return cls.create_pg_interfaces_internal(
+            interfaces, gso, gso_size, pgmode.PG_API_MODE_IP6
+        )
 
     @classmethod
     def create_pg_interfaces(cls, interfaces, gso=0, gso_size=0):
         pgmode = VppEnum.vl_api_pg_interface_mode_t
 
     @classmethod
     def create_pg_interfaces(cls, interfaces, gso=0, gso_size=0):
         pgmode = VppEnum.vl_api_pg_interface_mode_t
-        return cls.create_pg_interfaces_internal(interfaces, gso, gso_size,
-                                                 pgmode.PG_API_MODE_ETHERNET)
+        return cls.create_pg_interfaces_internal(
+            interfaces, gso, gso_size, pgmode.PG_API_MODE_ETHERNET
+        )
 
     @classmethod
     def create_pg_ethernet_interfaces(cls, interfaces, gso=0, gso_size=0):
         pgmode = VppEnum.vl_api_pg_interface_mode_t
 
     @classmethod
     def create_pg_ethernet_interfaces(cls, interfaces, gso=0, gso_size=0):
         pgmode = VppEnum.vl_api_pg_interface_mode_t
-        return cls.create_pg_interfaces_internal(interfaces, gso, gso_size,
-                                                 pgmode.PG_API_MODE_ETHERNET)
+        return cls.create_pg_interfaces_internal(
+            interfaces, gso, gso_size, pgmode.PG_API_MODE_ETHERNET
+        )
 
     @classmethod
     def create_loopback_interfaces(cls, count):
 
     @classmethod
     def create_loopback_interfaces(cls, count):
@@ -937,7 +1032,7 @@ class VppTestCase(CPUInterface, unittest.TestCase):
         return result
 
     @staticmethod
         return result
 
     @staticmethod
-    def extend_packet(packet, size, padding=' '):
+    def extend_packet(packet, size, padding=" "):
         """
         Extend packet to given size by padding with spaces or custom padding
         NOTE: Currently works only when Raw layer is present.
         """
         Extend packet to given size by padding with spaces or custom padding
         NOTE: Currently works only when Raw layer is present.
@@ -955,7 +1050,7 @@ class VppTestCase(CPUInterface, unittest.TestCase):
 
     @classmethod
     def reset_packet_infos(cls):
 
     @classmethod
     def reset_packet_infos(cls):
-        """ Reset the list of packet info objects and packet counts to zero """
+        """Reset the list of packet info objects and packet counts to zero"""
         cls._packet_infos = {}
         cls._packet_count_for_dst_if_idx = {}
 
         cls._packet_infos = {}
         cls._packet_count_for_dst_if_idx = {}
 
@@ -997,11 +1092,10 @@ class VppTestCase(CPUInterface, unittest.TestCase):
         """
 
         # retrieve payload, currently 18 bytes (4 x ints + 1 short)
         """
 
         # retrieve payload, currently 18 bytes (4 x ints + 1 short)
-        return pack('iiiih', info.index, info.src,
-                    info.dst, info.ip, info.proto)
+        return pack("iiiih", info.index, info.src, info.dst, info.ip, info.proto)
 
     @staticmethod
 
     @staticmethod
-    def payload_to_info(payload, payload_field='load'):
+    def payload_to_info(payload, payload_field="load"):
         """
         Convert packet payload to _PacketInfo object
 
         """
         Convert packet payload to _PacketInfo object
 
@@ -1018,12 +1112,11 @@ class VppTestCase(CPUInterface, unittest.TestCase):
         payload_b = getattr(payload, payload_field)[:18]
 
         info = _PacketInfo()
         payload_b = getattr(payload, payload_field)[:18]
 
         info = _PacketInfo()
-        info.index, info.src, info.dst, info.ip, info.proto \
-            = unpack('iiiih', payload_b)
+        info.index, info.src, info.dst, info.ip, info.proto = unpack("iiiih", payload_b)
 
         # some SRv6 TCs depend on get an exception if bad values are detected
         if info.index > 0x4000:
 
         # some SRv6 TCs depend on get an exception if bad values are detected
         if info.index > 0x4000:
-            raise ValueError('Index value is invalid')
+            raise ValueError("Index value is invalid")
 
         return info
 
 
         return info
 
@@ -1086,32 +1179,38 @@ class VppTestCase(CPUInterface, unittest.TestCase):
             return
         try:
             msg = "Invalid %s: %d('%s') does not match expected value %d('%s')"
             return
         try:
             msg = "Invalid %s: %d('%s') does not match expected value %d('%s')"
-            msg = msg % (getdoc(name_or_class).strip(),
-                         real_value, str(name_or_class(real_value)),
-                         expected_value, str(name_or_class(expected_value)))
+            msg = msg % (
+                getdoc(name_or_class).strip(),
+                real_value,
+                str(name_or_class(real_value)),
+                expected_value,
+                str(name_or_class(expected_value)),
+            )
         except Exception:
             msg = "Invalid %s: %s does not match expected value %s" % (
         except Exception:
             msg = "Invalid %s: %s does not match expected value %s" % (
-                name_or_class, real_value, expected_value)
+                name_or_class,
+                real_value,
+                expected_value,
+            )
 
         self.assertEqual(real_value, expected_value, msg)
 
 
         self.assertEqual(real_value, expected_value, msg)
 
-    def assert_in_range(self,
-                        real_value,
-                        expected_min,
-                        expected_max,
-                        name=None):
+    def assert_in_range(self, real_value, expected_min, expected_max, name=None):
         if name is None:
             msg = None
         else:
             msg = "Invalid %s: %s out of range <%s,%s>" % (
         if name is None:
             msg = None
         else:
             msg = "Invalid %s: %s out of range <%s,%s>" % (
-                name, real_value, expected_min, expected_max)
+                name,
+                real_value,
+                expected_min,
+                expected_max,
+            )
         self.assertTrue(expected_min <= real_value <= expected_max, msg)
 
         self.assertTrue(expected_min <= real_value <= expected_max, msg)
 
-    def assert_packet_checksums_valid(self, packet,
-                                      ignore_zero_udp_checksums=True):
+    def assert_packet_checksums_valid(self, packet, ignore_zero_udp_checksums=True):
         received = packet.__class__(scapy.compat.raw(packet))
         received = packet.__class__(scapy.compat.raw(packet))
-        udp_layers = ['UDP', 'UDPerror']
-        checksum_fields = ['cksum', 'chksum']
+        udp_layers = ["UDP", "UDPerror"]
+        checksum_fields = ["cksum", "chksum"]
         checksums = []
         counter = 0
         temp = received.__class__(scapy.compat.raw(received))
         checksums = []
         counter = 0
         temp = received.__class__(scapy.compat.raw(received))
@@ -1122,9 +1221,11 @@ class VppTestCase(CPUInterface, unittest.TestCase):
                 layer.remove_payload()
                 for cf in checksum_fields:
                     if hasattr(layer, cf):
                 layer.remove_payload()
                 for cf in checksum_fields:
                     if hasattr(layer, cf):
-                        if ignore_zero_udp_checksums and \
-                                0 == getattr(layer, cf) and \
-                                layer.name in udp_layers:
+                        if (
+                            ignore_zero_udp_checksums
+                            and 0 == getattr(layer, cf)
+                            and layer.name in udp_layers
+                        ):
                             continue
                         delattr(temp.getlayer(counter), cf)
                         checksums.append((counter, cf))
                             continue
                         delattr(temp.getlayer(counter), cf)
                         checksums.append((counter, cf))
@@ -1137,71 +1238,76 @@ class VppTestCase(CPUInterface, unittest.TestCase):
         for layer, cf in checksums:
             calc_sum = getattr(temp[layer], cf)
             self.assert_equal(
         for layer, cf in checksums:
             calc_sum = getattr(temp[layer], cf)
             self.assert_equal(
-                getattr(received[layer], cf), calc_sum,
-                "packet checksum on layer #%d: %s" % (layer, temp[layer].name))
+                getattr(received[layer], cf),
+                calc_sum,
+                "packet checksum on layer #%d: %s" % (layer, temp[layer].name),
+            )
             self.logger.debug(
             self.logger.debug(
-                "Checksum field `%s` on `%s` layer has correct value `%s`" %
-                (cf, temp[layer].name, calc_sum))
-
-    def assert_checksum_valid(self, received_packet, layer,
-                              field_name='chksum',
-                              ignore_zero_checksum=False):
-        """ Check checksum of received packet on given layer """
+                "Checksum field `%s` on `%s` layer has correct value `%s`"
+                % (cf, temp[layer].name, calc_sum)
+            )
+
+    def assert_checksum_valid(
+        self, received_packet, layer, field_name="chksum", ignore_zero_checksum=False
+    ):
+        """Check checksum of received packet on given layer"""
         received_packet_checksum = getattr(received_packet[layer], field_name)
         if ignore_zero_checksum and 0 == received_packet_checksum:
             return
         received_packet_checksum = getattr(received_packet[layer], field_name)
         if ignore_zero_checksum and 0 == received_packet_checksum:
             return
-        recalculated = received_packet.__class__(
-            scapy.compat.raw(received_packet))
+        recalculated = received_packet.__class__(scapy.compat.raw(received_packet))
         delattr(recalculated[layer], field_name)
         recalculated = recalculated.__class__(scapy.compat.raw(recalculated))
         delattr(recalculated[layer], field_name)
         recalculated = recalculated.__class__(scapy.compat.raw(recalculated))
-        self.assert_equal(received_packet_checksum,
-                          getattr(recalculated[layer], field_name),
-                          "packet checksum on layer: %s" % layer)
-
-    def assert_ip_checksum_valid(self, received_packet,
-                                 ignore_zero_checksum=False):
-        self.assert_checksum_valid(received_packet, 'IP',
-                                   ignore_zero_checksum=ignore_zero_checksum)
-
-    def assert_tcp_checksum_valid(self, received_packet,
-                                  ignore_zero_checksum=False):
-        self.assert_checksum_valid(received_packet, 'TCP',
-                                   ignore_zero_checksum=ignore_zero_checksum)
-
-    def assert_udp_checksum_valid(self, received_packet,
-                                  ignore_zero_checksum=True):
-        self.assert_checksum_valid(received_packet, 'UDP',
-                                   ignore_zero_checksum=ignore_zero_checksum)
+        self.assert_equal(
+            received_packet_checksum,
+            getattr(recalculated[layer], field_name),
+            "packet checksum on layer: %s" % layer,
+        )
+
+    def assert_ip_checksum_valid(self, received_packet, ignore_zero_checksum=False):
+        self.assert_checksum_valid(
+            received_packet, "IP", ignore_zero_checksum=ignore_zero_checksum
+        )
+
+    def assert_tcp_checksum_valid(self, received_packet, ignore_zero_checksum=False):
+        self.assert_checksum_valid(
+            received_packet, "TCP", ignore_zero_checksum=ignore_zero_checksum
+        )
+
+    def assert_udp_checksum_valid(self, received_packet, ignore_zero_checksum=True):
+        self.assert_checksum_valid(
+            received_packet, "UDP", ignore_zero_checksum=ignore_zero_checksum
+        )
 
     def assert_embedded_icmp_checksum_valid(self, received_packet):
         if received_packet.haslayer(IPerror):
 
     def assert_embedded_icmp_checksum_valid(self, received_packet):
         if received_packet.haslayer(IPerror):
-            self.assert_checksum_valid(received_packet, 'IPerror')
+            self.assert_checksum_valid(received_packet, "IPerror")
         if received_packet.haslayer(TCPerror):
         if received_packet.haslayer(TCPerror):
-            self.assert_checksum_valid(received_packet, 'TCPerror')
+            self.assert_checksum_valid(received_packet, "TCPerror")
         if received_packet.haslayer(UDPerror):
         if received_packet.haslayer(UDPerror):
-            self.assert_checksum_valid(received_packet, 'UDPerror',
-                                       ignore_zero_checksum=True)
+            self.assert_checksum_valid(
+                received_packet, "UDPerror", ignore_zero_checksum=True
+            )
         if received_packet.haslayer(ICMPerror):
         if received_packet.haslayer(ICMPerror):
-            self.assert_checksum_valid(received_packet, 'ICMPerror')
+            self.assert_checksum_valid(received_packet, "ICMPerror")
 
     def assert_icmp_checksum_valid(self, received_packet):
 
     def assert_icmp_checksum_valid(self, received_packet):
-        self.assert_checksum_valid(received_packet, 'ICMP')
+        self.assert_checksum_valid(received_packet, "ICMP")
         self.assert_embedded_icmp_checksum_valid(received_packet)
 
     def assert_icmpv6_checksum_valid(self, pkt):
         if pkt.haslayer(ICMPv6DestUnreach):
         self.assert_embedded_icmp_checksum_valid(received_packet)
 
     def assert_icmpv6_checksum_valid(self, pkt):
         if pkt.haslayer(ICMPv6DestUnreach):
-            self.assert_checksum_valid(pkt, 'ICMPv6DestUnreach', 'cksum')
+            self.assert_checksum_valid(pkt, "ICMPv6DestUnreach", "cksum")
             self.assert_embedded_icmp_checksum_valid(pkt)
         if pkt.haslayer(ICMPv6EchoRequest):
             self.assert_embedded_icmp_checksum_valid(pkt)
         if pkt.haslayer(ICMPv6EchoRequest):
-            self.assert_checksum_valid(pkt, 'ICMPv6EchoRequest', 'cksum')
+            self.assert_checksum_valid(pkt, "ICMPv6EchoRequest", "cksum")
         if pkt.haslayer(ICMPv6EchoReply):
         if pkt.haslayer(ICMPv6EchoReply):
-            self.assert_checksum_valid(pkt, 'ICMPv6EchoReply', 'cksum')
+            self.assert_checksum_valid(pkt, "ICMPv6EchoReply", "cksum")
 
     def get_counter(self, counter):
         if counter.startswith("/"):
             counter_value = self.statistics.get_counter(counter)
         else:
 
     def get_counter(self, counter):
         if counter.startswith("/"):
             counter_value = self.statistics.get_counter(counter)
         else:
-            counters = self.vapi.cli("sh errors").split('\n')
+            counters = self.vapi.cli("sh errors").split("\n")
             counter_value = 0
             for i in range(1, len(counters) - 1):
                 results = counters[i].split()
             counter_value = 0
             for i in range(1, len(counters) - 1):
                 results = counters[i].split()
@@ -1210,8 +1316,7 @@ class VppTestCase(CPUInterface, unittest.TestCase):
                     break
         return counter_value
 
                     break
         return counter_value
 
-    def assert_counter_equal(self, counter, expected_value,
-                             thread=None, index=0):
+    def assert_counter_equal(self, counter, expected_value, thread=None, index=0):
         c = self.get_counter(counter)
         if thread is not None:
             c = c[thread][index]
         c = self.get_counter(counter)
         if thread is not None:
             c = c[thread][index]
@@ -1221,13 +1326,13 @@ class VppTestCase(CPUInterface, unittest.TestCase):
 
     def assert_packet_counter_equal(self, counter, expected_value):
         counter_value = self.get_counter(counter)
 
     def assert_packet_counter_equal(self, counter, expected_value):
         counter_value = self.get_counter(counter)
-        self.assert_equal(counter_value, expected_value,
-                          "packet counter `%s'" % counter)
+        self.assert_equal(
+            counter_value, expected_value, "packet counter `%s'" % counter
+        )
 
     def assert_error_counter_equal(self, counter, expected_value):
         counter_value = self.statistics[counter].sum()
 
     def assert_error_counter_equal(self, counter, expected_value):
         counter_value = self.statistics[counter].sum()
-        self.assert_equal(counter_value, expected_value,
-                          "error counter `%s'" % counter)
+        self.assert_equal(counter_value, expected_value, "error counter `%s'" % counter)
 
     @classmethod
     def sleep(cls, timeout, remark=None):
 
     @classmethod
     def sleep(cls, timeout, remark=None):
@@ -1238,7 +1343,7 @@ class VppTestCase(CPUInterface, unittest.TestCase):
         # https://github.com/python/cpython/blob/6673decfa0fb078f60587f5cb5e98460eea137c2/Modules/timemodule.c#L1892  # noqa
         if timeout == 0:
             # yield quantum
         # https://github.com/python/cpython/blob/6673decfa0fb078f60587f5cb5e98460eea137c2/Modules/timemodule.c#L1892  # noqa
         if timeout == 0:
             # yield quantum
-            if hasattr(os, 'sched_yield'):
+            if hasattr(os, "sched_yield"):
                 os.sched_yield()
             else:
                 time.sleep(0)
                 os.sched_yield()
             else:
                 time.sleep(0)
@@ -1249,13 +1354,18 @@ class VppTestCase(CPUInterface, unittest.TestCase):
         time.sleep(timeout)
         after = time.time()
         if after - before > 2 * timeout:
         time.sleep(timeout)
         after = time.time()
         if after - before > 2 * timeout:
-            cls.logger.error("unexpected self.sleep() result - "
-                             "slept for %es instead of ~%es!",
-                             after - before, timeout)
+            cls.logger.error(
+                "unexpected self.sleep() result - slept for %es instead of ~%es!",
+                after - before,
+                timeout,
+            )
 
         cls.logger.debug(
             "Finished sleep (%s) - slept %es (wanted %es)",
 
         cls.logger.debug(
             "Finished sleep (%s) - slept %es (wanted %es)",
-            remark, after - before, timeout)
+            remark,
+            after - before,
+            timeout,
+        )
 
     def virtual_sleep(self, timeout, remark=None):
         self.logger.debug("Moving VPP time by %s (%s)", timeout, remark)
 
     def virtual_sleep(self, timeout, remark=None):
         self.logger.debug("Moving VPP time by %s (%s)", timeout, remark)
@@ -1285,7 +1395,8 @@ class VppTestCase(CPUInterface, unittest.TestCase):
                         stats_snapshot[cntr].sum() + diff,
                         f"'{cntr}' counter value (previous value: "
                         f"{stats_snapshot[cntr].sum()}, "
                         stats_snapshot[cntr].sum() + diff,
                         f"'{cntr}' counter value (previous value: "
                         f"{stats_snapshot[cntr].sum()}, "
-                        f"expected diff: {diff})")
+                        f"expected diff: {diff})",
+                    )
                 else:
                     try:
                         self.assert_equal(
                 else:
                     try:
                         self.assert_equal(
@@ -1293,7 +1404,8 @@ class VppTestCase(CPUInterface, unittest.TestCase):
                             stats_snapshot[cntr][:, sw_if_index].sum() + diff,
                             f"'{cntr}' counter value (previous value: "
                             f"{stats_snapshot[cntr][:, sw_if_index].sum()}, "
                             stats_snapshot[cntr][:, sw_if_index].sum() + diff,
                             f"'{cntr}' counter value (previous value: "
                             f"{stats_snapshot[cntr][:, sw_if_index].sum()}, "
-                            f"expected diff: {diff})")
+                            f"expected diff: {diff})",
+                        )
                     except IndexError:
                         # if diff is 0, then this most probably a case where
                         # test declares multiple interfaces but traffic hasn't
                     except IndexError:
                         # if diff is 0, then this most probably a case where
                         # test declares multiple interfaces but traffic hasn't
@@ -1302,8 +1414,9 @@ class VppTestCase(CPUInterface, unittest.TestCase):
                         if 0 != diff:
                             raise
 
                         if 0 != diff:
                             raise
 
-    def send_and_assert_no_replies(self, intf, pkts, remark="", timeout=None,
-                                   stats_diff=None, trace=True, msg=None):
+    def send_and_assert_no_replies(
+        self, intf, pkts, remark="", timeout=None, stats_diff=None, trace=True, msg=None
+    ):
         if stats_diff:
             stats_snapshot = self.snapshot_stats(stats_diff)
 
         if stats_diff:
             stats_snapshot = self.snapshot_stats(stats_diff)
 
@@ -1324,8 +1437,17 @@ class VppTestCase(CPUInterface, unittest.TestCase):
         if stats_diff:
             self.compare_stats_with_snapshot(stats_diff, stats_snapshot)
 
         if stats_diff:
             self.compare_stats_with_snapshot(stats_diff, stats_snapshot)
 
-    def send_and_expect(self, intf, pkts, output, n_rx=None, worker=None,
-                        trace=True, msg=None, stats_diff=None):
+    def send_and_expect(
+        self,
+        intf,
+        pkts,
+        output,
+        n_rx=None,
+        worker=None,
+        trace=True,
+        msg=None,
+        stats_diff=None,
+    ):
         if stats_diff:
             stats_snapshot = self.snapshot_stats(stats_diff)
 
         if stats_diff:
             stats_snapshot = self.snapshot_stats(stats_diff)
 
@@ -1343,8 +1465,9 @@ class VppTestCase(CPUInterface, unittest.TestCase):
 
         return rx
 
 
         return rx
 
-    def send_and_expect_load_balancing(self, input, pkts, outputs,
-                                       worker=None, trace=True):
+    def send_and_expect_load_balancing(
+        self, input, pkts, outputs, worker=None, trace=True
+    ):
         self.pg_send(input, pkts, worker=worker, trace=trace)
         rxs = []
         for oo in outputs:
         self.pg_send(input, pkts, worker=worker, trace=trace)
         rxs = []
         for oo in outputs:
@@ -1355,9 +1478,7 @@ class VppTestCase(CPUInterface, unittest.TestCase):
             self.logger.debug(self.vapi.cli("show trace"))
         return rxs
 
             self.logger.debug(self.vapi.cli("show trace"))
         return rxs
 
-    def send_and_expect_some(self, intf, pkts, output,
-                             worker=None,
-                             trace=True):
+    def send_and_expect_some(self, intf, pkts, output, worker=None, trace=True):
         self.pg_send(intf, pkts, worker=worker, trace=trace)
         rx = output._get_capture(1)
         if trace:
         self.pg_send(intf, pkts, worker=worker, trace=trace)
         rx = output._get_capture(1)
         if trace:
@@ -1366,8 +1487,7 @@ class VppTestCase(CPUInterface, unittest.TestCase):
         self.assertTrue(len(rx) < len(pkts))
         return rx
 
         self.assertTrue(len(rx) < len(pkts))
         return rx
 
-    def send_and_expect_only(self, intf, pkts, output, timeout=None,
-                             stats_diff=None):
+    def send_and_expect_only(self, intf, pkts, output, timeout=None, stats_diff=None):
         if stats_diff:
             stats_snapshot = self.snapshot_stats(stats_diff)
 
         if stats_diff:
             stats_snapshot = self.snapshot_stats(stats_diff)
 
@@ -1427,8 +1547,7 @@ class VppTestResult(unittest.TestResult):
     core_crash_test_cases_info = set()
     current_test_case_info = None
 
     core_crash_test_cases_info = set()
     current_test_case_info = None
 
-    def __init__(self, stream=None, descriptions=None, verbosity=None,
-                 runner=None):
+    def __init__(self, stream=None, descriptions=None, verbosity=None, runner=None):
         """
         :param stream File descriptor to store where to report test results.
             Set to the standard error stream by default.
         """
         :param stream File descriptor to store where to report test results.
             Set to the standard error stream by default.
@@ -1453,9 +1572,9 @@ class VppTestResult(unittest.TestResult):
         """
         if self.current_test_case_info:
             self.current_test_case_info.logger.debug(
         """
         if self.current_test_case_info:
             self.current_test_case_info.logger.debug(
-                "--- addSuccess() %s.%s(%s) called" % (test.__class__.__name__,
-                                                       test._testMethodName,
-                                                       test._testMethodDoc))
+                "--- addSuccess() %s.%s(%s) called"
+                % (test.__class__.__name__, test._testMethodName, test._testMethodDoc)
+            )
         unittest.TestResult.addSuccess(self, test)
         self.result_string = colorize("OK", GREEN)
 
         unittest.TestResult.addSuccess(self, test)
         self.result_string = colorize("OK", GREEN)
 
@@ -1471,9 +1590,14 @@ class VppTestResult(unittest.TestResult):
         """
         if self.current_test_case_info:
             self.current_test_case_info.logger.debug(
         """
         if self.current_test_case_info:
             self.current_test_case_info.logger.debug(
-                "--- addSkip() %s.%s(%s) called, reason is %s" %
-                (test.__class__.__name__, test._testMethodName,
-                 test._testMethodDoc, reason))
+                "--- addSkip() %s.%s(%s) called, reason is %s"
+                % (
+                    test.__class__.__name__,
+                    test._testMethodName,
+                    test._testMethodDoc,
+                    reason,
+                )
+            )
         unittest.TestResult.addSkip(self, test, reason)
         self.result_string = colorize("SKIP", YELLOW)
 
         unittest.TestResult.addSkip(self, test, reason)
         self.result_string = colorize("SKIP", YELLOW)
 
@@ -1488,17 +1612,18 @@ class VppTestResult(unittest.TestResult):
                 failed_dir = config.failed_dir
                 link_path = os.path.join(
                     failed_dir,
                 failed_dir = config.failed_dir
                 link_path = os.path.join(
                     failed_dir,
-                    '%s-FAILED' %
-                    os.path.basename(self.current_test_case_info.tempdir))
+                    "%s-FAILED" % os.path.basename(self.current_test_case_info.tempdir),
+                )
 
                 self.current_test_case_info.logger.debug(
 
                 self.current_test_case_info.logger.debug(
-                    "creating a link to the failed test")
+                    "creating a link to the failed test"
+                )
                 self.current_test_case_info.logger.debug(
                 self.current_test_case_info.logger.debug(
-                    "os.symlink(%s, %s)" %
-                    (self.current_test_case_info.tempdir, link_path))
+                    "os.symlink(%s, %s)"
+                    % (self.current_test_case_info.tempdir, link_path)
+                )
                 if os.path.exists(link_path):
                 if os.path.exists(link_path):
-                    self.current_test_case_info.logger.debug(
-                        'symlink already exists')
+                    self.current_test_case_info.logger.debug("symlink already exists")
                 else:
                     os.symlink(self.current_test_case_info.tempdir, link_path)
 
                 else:
                     os.symlink(self.current_test_case_info.tempdir, link_path)
 
@@ -1506,7 +1631,7 @@ class VppTestResult(unittest.TestResult):
                 self.current_test_case_info.logger.error(e)
 
     def send_result_through_pipe(self, test, result):
                 self.current_test_case_info.logger.error(e)
 
     def send_result_through_pipe(self, test, result):
-        if hasattr(self, 'test_framework_result_pipe'):
+        if hasattr(self, "test_framework_result_pipe"):
             pipe = self.test_framework_result_pipe
             if pipe:
                 pipe.send((test.id(), result))
             pipe = self.test_framework_result_pipe
             if pipe:
                 pipe.send((test.id(), result))
@@ -1516,32 +1641,37 @@ class VppTestResult(unittest.TestResult):
             if isinstance(test, unittest.suite._ErrorHolder):
                 test_name = test.description
             else:
             if isinstance(test, unittest.suite._ErrorHolder):
                 test_name = test.description
             else:
-                test_name = '%s.%s(%s)' % (test.__class__.__name__,
-                                           test._testMethodName,
-                                           test._testMethodDoc)
+                test_name = "%s.%s(%s)" % (
+                    test.__class__.__name__,
+                    test._testMethodName,
+                    test._testMethodDoc,
+                )
             self.current_test_case_info.logger.debug(
             self.current_test_case_info.logger.debug(
-                "--- %s() %s called, err is %s" %
-                (fn_name, test_name, err))
+                "--- %s() %s called, err is %s" % (fn_name, test_name, err)
+            )
             self.current_test_case_info.logger.debug(
             self.current_test_case_info.logger.debug(
-                "formatted exception is:\n%s" %
-                "".join(format_exception(*err)))
+                "formatted exception is:\n%s" % "".join(format_exception(*err))
+            )
 
     def add_error(self, test, err, unittest_fn, error_type):
         if error_type == FAIL:
 
     def add_error(self, test, err, unittest_fn, error_type):
         if error_type == FAIL:
-            self.log_error(test, err, 'addFailure')
+            self.log_error(test, err, "addFailure")
             error_type_str = colorize("FAIL", RED)
         elif error_type == ERROR:
             error_type_str = colorize("FAIL", RED)
         elif error_type == ERROR:
-            self.log_error(test, err, 'addError')
+            self.log_error(test, err, "addError")
             error_type_str = colorize("ERROR", RED)
         else:
             error_type_str = colorize("ERROR", RED)
         else:
-            raise Exception('Error type %s cannot be used to record an '
-                            'error or a failure' % error_type)
+            raise Exception(
+                "Error type %s cannot be used to record an "
+                "error or a failure" % error_type
+            )
 
         unittest_fn(self, test, err)
         if self.current_test_case_info:
 
         unittest_fn(self, test, err)
         if self.current_test_case_info:
-            self.result_string = "%s [ temp dir used by test case: %s ]" % \
-                                 (error_type_str,
-                                  self.current_test_case_info.tempdir)
+            self.result_string = "%s [ temp dir used by test case: %s ]" % (
+                error_type_str,
+                self.current_test_case_info.tempdir,
+            )
             self.symlink_failed()
             self.failed_test_cases_info.add(self.current_test_case_info)
             if is_core_present(self.current_test_case_info.tempdir):
             self.symlink_failed()
             self.failed_test_cases_info.add(self.current_test_case_info)
             if is_core_present(self.current_test_case_info.tempdir):
@@ -1550,12 +1680,12 @@ class VppTestResult(unittest.TestResult):
                         test_name = str(test)
                     else:
                         test_name = "'{!s}' ({!s})".format(
                         test_name = str(test)
                     else:
                         test_name = "'{!s}' ({!s})".format(
-                            get_testcase_doc_name(test), test.id())
+                            get_testcase_doc_name(test), test.id()
+                        )
                     self.current_test_case_info.core_crash_test = test_name
                     self.current_test_case_info.core_crash_test = test_name
-                self.core_crash_test_cases_info.add(
-                    self.current_test_case_info)
+                self.core_crash_test_cases_info.add(self.current_test_case_info)
         else:
         else:
-            self.result_string = '%s [no temp dir]' % error_type_str
+            self.result_string = "%s [no temp dir]" % error_type_str
 
         self.send_result_through_pipe(test, error_type)
 
 
         self.send_result_through_pipe(test, error_type)
 
@@ -1613,15 +1743,13 @@ class VppTestResult(unittest.TestResult):
             # This block may overwrite the colorized title above,
             # but we want this to stand out and be fixed
             if test.has_tag(TestCaseTag.FIXME_VPP_WORKERS):
             # This block may overwrite the colorized title above,
             # but we want this to stand out and be fixed
             if test.has_tag(TestCaseTag.FIXME_VPP_WORKERS):
-                test_title = colorize(
-                    f"FIXME with VPP workers: {test_title}", RED)
+                test_title = colorize(f"FIXME with VPP workers: {test_title}", RED)
 
             if test.has_tag(TestCaseTag.FIXME_ASAN):
 
             if test.has_tag(TestCaseTag.FIXME_ASAN):
-                test_title = colorize(
-                    f"FIXME with ASAN: {test_title}", RED)
+                test_title = colorize(f"FIXME with ASAN: {test_title}", RED)
                 test.skip_fixme_asan()
 
                 test.skip_fixme_asan()
 
-            if hasattr(test, 'vpp_worker_count'):
+            if hasattr(test, "vpp_worker_count"):
                 if test.vpp_worker_count == 0:
                     test_title += " [main thread only]"
                 elif test.vpp_worker_count == 1:
                 if test.vpp_worker_count == 0:
                     test_title += " [main thread only]"
                 elif test.vpp_worker_count == 1:
@@ -1633,7 +1761,9 @@ class VppTestResult(unittest.TestResult):
                 test_title = colorize(
                     f"{test_title} [skipped - not enough cpus, "
                     f"required={test.__class__.get_cpus_required()}, "
                 test_title = colorize(
                     f"{test_title} [skipped - not enough cpus, "
                     f"required={test.__class__.get_cpus_required()}, "
-                    f"available={max_vpp_cpus}]", YELLOW)
+                    f"available={max_vpp_cpus}]",
+                    YELLOW,
+                )
 
             print(double_line_delim)
             print(test_title)
 
             print(double_line_delim)
             print(test_title)
@@ -1644,8 +1774,7 @@ class VppTestResult(unittest.TestResult):
         self.start_test = time.time()
         unittest.TestResult.startTest(self, test)
         if self.verbosity > 0:
         self.start_test = time.time()
         unittest.TestResult.startTest(self, test)
         if self.verbosity > 0:
-            self.stream.writeln(
-                "Starting " + self.getDescription(test) + " ...")
+            self.stream.writeln("Starting " + self.getDescription(test) + " ...")
             self.stream.writeln(single_line_delim)
 
     def stopTest(self, test):
             self.stream.writeln(single_line_delim)
 
     def stopTest(self, test):
@@ -1659,14 +1788,19 @@ class VppTestResult(unittest.TestResult):
 
         if self.verbosity > 0:
             self.stream.writeln(single_line_delim)
 
         if self.verbosity > 0:
             self.stream.writeln(single_line_delim)
-            self.stream.writeln("%-73s%s" % (self.getDescription(test),
-                                             self.result_string))
+            self.stream.writeln(
+                "%-73s%s" % (self.getDescription(test), self.result_string)
+            )
             self.stream.writeln(single_line_delim)
         else:
             self.stream.writeln(single_line_delim)
         else:
-            self.stream.writeln("%-68s %4.2f %s" %
-                                (self.getDescription(test),
-                                 time.time() - self.start_test,
-                                 self.result_string))
+            self.stream.writeln(
+                "%-68s %4.2f %s"
+                % (
+                    self.getDescription(test),
+                    time.time() - self.start_test,
+                    self.result_string,
+                )
+            )
 
         self.send_result_through_pipe(test, TEST_RUN)
 
 
         self.send_result_through_pipe(test, TEST_RUN)
 
@@ -1676,12 +1810,12 @@ class VppTestResult(unittest.TestResult):
         """
         if len(self.errors) > 0 or len(self.failures) > 0:
             self.stream.writeln()
         """
         if len(self.errors) > 0 or len(self.failures) > 0:
             self.stream.writeln()
-            self.printErrorList('ERROR', self.errors)
-            self.printErrorList('FAIL', self.failures)
+            self.printErrorList("ERROR", self.errors)
+            self.printErrorList("FAIL", self.failures)
 
         # ^^ that is the last output from unittest before summary
         if not self.runner.print_summary:
 
         # ^^ that is the last output from unittest before summary
         if not self.runner.print_summary:
-            devnull = unittest.runner._WritelnDecorator(open(os.devnull, 'w'))
+            devnull = unittest.runner._WritelnDecorator(open(os.devnull, "w"))
             self.stream = devnull
             self.runner.stream = devnull
 
             self.stream = devnull
             self.runner.stream = devnull
 
@@ -1696,8 +1830,7 @@ class VppTestResult(unittest.TestResult):
         """
         for test, err in errors:
             self.stream.writeln(double_line_delim)
         """
         for test, err in errors:
             self.stream.writeln(double_line_delim)
-            self.stream.writeln("%s: %s" %
-                                (flavour, self.getDescription(test)))
+            self.stream.writeln("%s: %s" % (flavour, self.getDescription(test)))
             self.stream.writeln(single_line_delim)
             self.stream.writeln("%s" % err)
 
             self.stream.writeln(single_line_delim)
             self.stream.writeln("%s" % err)
 
@@ -1712,14 +1845,23 @@ class VppTestRunner(unittest.TextTestRunner):
         """Class maintaining the results of the tests"""
         return VppTestResult
 
         """Class maintaining the results of the tests"""
         return VppTestResult
 
-    def __init__(self, keep_alive_pipe=None, descriptions=True, verbosity=1,
-                 result_pipe=None, failfast=False, buffer=False,
-                 resultclass=None, print_summary=True, **kwargs):
+    def __init__(
+        self,
+        keep_alive_pipe=None,
+        descriptions=True,
+        verbosity=1,
+        result_pipe=None,
+        failfast=False,
+        buffer=False,
+        resultclass=None,
+        print_summary=True,
+        **kwargs,
+    ):
         # ignore stream setting here, use hard-coded stdout to be in sync
         # with prints from VppTestCase methods ...
         # ignore stream setting here, use hard-coded stdout to be in sync
         # with prints from VppTestCase methods ...
-        super(VppTestRunner, self).__init__(sys.stdout, descriptions,
-                                            verbosity, failfast, buffer,
-                                            resultclass, **kwargs)
+        super(VppTestRunner, self).__init__(
+            sys.stdout, descriptions, verbosity, failfast, buffer, resultclass, **kwargs
+        )
         KeepAliveReporter.pipe = keep_alive_pipe
 
         self.orig_stream = self.stream
         KeepAliveReporter.pipe = keep_alive_pipe
 
         self.orig_stream = self.stream
@@ -1728,10 +1870,7 @@ class VppTestRunner(unittest.TextTestRunner):
         self.print_summary = print_summary
 
     def _makeResult(self):
         self.print_summary = print_summary
 
     def _makeResult(self):
-        return self.resultclass(self.stream,
-                                self.descriptions,
-                                self.verbosity,
-                                self)
+        return self.resultclass(self.stream, self.descriptions, self.verbosity, self)
 
     def run(self, test):
         """
 
     def run(self, test):
         """
@@ -1754,91 +1893,120 @@ class Worker(Thread):
         super(Worker, self).__init__(*args, **kwargs)
         self.logger = logger
         self.args = executable_args
         super(Worker, self).__init__(*args, **kwargs)
         self.logger = logger
         self.args = executable_args
-        if hasattr(self, 'testcase') and self.testcase.debug_all:
+        if hasattr(self, "testcase") and self.testcase.debug_all:
             if self.testcase.debug_gdbserver:
             if self.testcase.debug_gdbserver:
-                self.args = ['/usr/bin/gdbserver', 'localhost:{port}'
-                             .format(port=self.testcase.gdbserver_port)] + args
-            elif self.testcase.debug_gdb and hasattr(self, 'wait_for_gdb'):
+                self.args = [
+                    "/usr/bin/gdbserver",
+                    "localhost:{port}".format(port=self.testcase.gdbserver_port),
+                ] + args
+            elif self.testcase.debug_gdb and hasattr(self, "wait_for_gdb"):
                 self.args.append(self.wait_for_gdb)
         self.app_bin = executable_args[0]
         self.app_name = os.path.basename(self.app_bin)
                 self.args.append(self.wait_for_gdb)
         self.app_bin = executable_args[0]
         self.app_name = os.path.basename(self.app_bin)
-        if hasattr(self, 'role'):
-            self.app_name += ' {role}'.format(role=self.role)
+        if hasattr(self, "role"):
+            self.app_name += " {role}".format(role=self.role)
         self.process = None
         self.result = None
         env = {} if env is None else env
         self.env = copy.deepcopy(env)
 
     def wait_for_enter(self):
         self.process = None
         self.result = None
         env = {} if env is None else env
         self.env = copy.deepcopy(env)
 
     def wait_for_enter(self):
-        if not hasattr(self, 'testcase'):
+        if not hasattr(self, "testcase"):
             return
         if self.testcase.debug_all and self.testcase.debug_gdbserver:
             print()
             print(double_line_delim)
             return
         if self.testcase.debug_all and self.testcase.debug_gdbserver:
             print()
             print(double_line_delim)
-            print("Spawned GDB Server for '{app}' with PID: {pid}"
-                  .format(app=self.app_name, pid=self.process.pid))
+            print(
+                "Spawned GDB Server for '{app}' with PID: {pid}".format(
+                    app=self.app_name, pid=self.process.pid
+                )
+            )
         elif self.testcase.debug_all and self.testcase.debug_gdb:
             print()
             print(double_line_delim)
         elif self.testcase.debug_all and self.testcase.debug_gdb:
             print()
             print(double_line_delim)
-            print("Spawned '{app}' with PID: {pid}"
-                  .format(app=self.app_name, pid=self.process.pid))
+            print(
+                "Spawned '{app}' with PID: {pid}".format(
+                    app=self.app_name, pid=self.process.pid
+                )
+            )
         else:
             return
         print(single_line_delim)
         print("You can debug '{app}' using:".format(app=self.app_name))
         if self.testcase.debug_gdbserver:
         else:
             return
         print(single_line_delim)
         print("You can debug '{app}' using:".format(app=self.app_name))
         if self.testcase.debug_gdbserver:
-            print("sudo gdb " + self.app_bin +
-                  " -ex 'target remote localhost:{port}'"
-                  .format(port=self.testcase.gdbserver_port))
-            print("Now is the time to attach gdb by running the above "
-                  "command, set up breakpoints etc., then resume from "
-                  "within gdb by issuing the 'continue' command")
+            print(
+                "sudo gdb "
+                + self.app_bin
+                + " -ex 'target remote localhost:{port}'".format(
+                    port=self.testcase.gdbserver_port
+                )
+            )
+            print(
+                "Now is the time to attach gdb by running the above "
+                "command, set up breakpoints etc., then resume from "
+                "within gdb by issuing the 'continue' command"
+            )
             self.testcase.gdbserver_port += 1
         elif self.testcase.debug_gdb:
             self.testcase.gdbserver_port += 1
         elif self.testcase.debug_gdb:
-            print("sudo gdb " + self.app_bin +
-                  " -ex 'attach {pid}'".format(pid=self.process.pid))
-            print("Now is the time to attach gdb by running the above "
-                  "command and set up breakpoints etc., then resume from"
-                  " within gdb by issuing the 'continue' command")
+            print(
+                "sudo gdb "
+                + self.app_bin
+                + " -ex 'attach {pid}'".format(pid=self.process.pid)
+            )
+            print(
+                "Now is the time to attach gdb by running the above "
+                "command and set up breakpoints etc., then resume from"
+                " within gdb by issuing the 'continue' command"
+            )
         print(single_line_delim)
         input("Press ENTER to continue running the testcase...")
 
     def run(self):
         executable = self.args[0]
         if not os.path.exists(executable) or not os.access(
         print(single_line_delim)
         input("Press ENTER to continue running the testcase...")
 
     def run(self):
         executable = self.args[0]
         if not os.path.exists(executable) or not os.access(
-                executable, os.F_OK | os.X_OK):
+            executable, os.F_OK | os.X_OK
+        ):
             # Exit code that means some system file did not exist,
             # could not be opened, or had some other kind of error.
             self.result = os.EX_OSFILE
             raise EnvironmentError(
             # Exit code that means some system file did not exist,
             # could not be opened, or had some other kind of error.
             self.result = os.EX_OSFILE
             raise EnvironmentError(
-                "executable '%s' is not found or executable." % executable)
-        self.logger.debug("Running executable '{app}': '{cmd}'"
-                          .format(app=self.app_name,
-                                  cmd=' '.join(self.args)))
+                "executable '%s' is not found or executable." % executable
+            )
+        self.logger.debug(
+            "Running executable '{app}': '{cmd}'".format(
+                app=self.app_name, cmd=" ".join(self.args)
+            )
+        )
         env = os.environ.copy()
         env.update(self.env)
         env["CK_LOG_FILE_NAME"] = "-"
         self.process = subprocess.Popen(
         env = os.environ.copy()
         env.update(self.env)
         env["CK_LOG_FILE_NAME"] = "-"
         self.process = subprocess.Popen(
-            ['stdbuf', '-o0', '-e0'] + self.args, shell=False, env=env,
-            preexec_fn=os.setpgrp, stdout=subprocess.PIPE,
-            stderr=subprocess.PIPE)
+            ["stdbuf", "-o0", "-e0"] + self.args,
+            shell=False,
+            env=env,
+            preexec_fn=os.setpgrp,
+            stdout=subprocess.PIPE,
+            stderr=subprocess.PIPE,
+        )
         self.wait_for_enter()
         out, err = self.process.communicate()
         self.logger.debug("Finished running `{app}'".format(app=self.app_name))
         self.logger.info("Return code is `%s'" % self.process.returncode)
         self.logger.info(single_line_delim)
         self.wait_for_enter()
         out, err = self.process.communicate()
         self.logger.debug("Finished running `{app}'".format(app=self.app_name))
         self.logger.info("Return code is `%s'" % self.process.returncode)
         self.logger.info(single_line_delim)
-        self.logger.info("Executable `{app}' wrote to stdout:"
-                         .format(app=self.app_name))
+        self.logger.info(
+            "Executable `{app}' wrote to stdout:".format(app=self.app_name)
+        )
         self.logger.info(single_line_delim)
         self.logger.info(single_line_delim)
-        self.logger.info(out.decode('utf-8'))
+        self.logger.info(out.decode("utf-8"))
         self.logger.info(single_line_delim)
         self.logger.info(single_line_delim)
-        self.logger.info("Executable `{app}' wrote to stderr:"
-                         .format(app=self.app_name))
+        self.logger.info(
+            "Executable `{app}' wrote to stderr:".format(app=self.app_name)
+        )
         self.logger.info(single_line_delim)
         self.logger.info(single_line_delim)
-        self.logger.info(err.decode('utf-8'))
+        self.logger.info(err.decode("utf-8"))
         self.logger.info(single_line_delim)
         self.result = self.process.returncode
 
 
         self.logger.info(single_line_delim)
         self.result = self.process.returncode
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     pass
     pass
index 8033c93..3429bda 100644 (file)
@@ -33,19 +33,20 @@ class Hook:
             if not isinstance(val, str):
                 return val
             if len(val) == 6:
             if not isinstance(val, str):
                 return val
             if len(val) == 6:
-                return '{!s} ({!s})'.format(val, ':'.join(['{:02x}'.format(
-                    scapy.compat.orb(x)) for x in val]))
+                return "{!s} ({!s})".format(
+                    val, ":".join(["{:02x}".format(scapy.compat.orb(x)) for x in val])
+                )
             try:
                 # we don't call test_type(val) because it is a packed value.
             try:
                 # we don't call test_type(val) because it is a packed value.
-                return '{!s} ({!s})'.format(val, str(
-                    ipaddress.ip_address(val)))
+                return "{!s} ({!s})".format(val, str(ipaddress.ip_address(val)))
             except ValueError:
                 return val
 
             except ValueError:
                 return val
 
-        _args = ', '.join("{!s}={!r}".format(key, _friendly_format(val)) for
-                          (key, val) in api_args.items())
-        self.logger.debug("API: %s (%s)" %
-                          (api_name, _args), extra={'color': RED})
+        _args = ", ".join(
+            "{!s}={!r}".format(key, _friendly_format(val))
+            for (key, val) in api_args.items()
+        )
+        self.logger.debug("API: %s (%s)" % (api_name, _args), extra={"color": RED})
 
     def after_api(self, api_name, api_args):
         """
 
     def after_api(self, api_name, api_args):
         """
@@ -63,7 +64,7 @@ class Hook:
 
         @param cli: CLI string
         """
 
         @param cli: CLI string
         """
-        self.logger.debug("CLI: %s" % (cli), extra={'color': RED})
+        self.logger.debug("CLI: %s" % (cli), extra={"color": RED})
 
     def after_cli(self, cli):
         """
 
     def after_cli(self, cli):
         """
@@ -73,14 +74,15 @@ class Hook:
 
 
 class PollHook(Hook):
 
 
 class PollHook(Hook):
-    """ Hook which checks if the vpp subprocess is alive """
+    """Hook which checks if the vpp subprocess is alive"""
 
     def __init__(self, test):
         super(PollHook, self).__init__(test)
 
     def on_crash(self, core_path):
 
     def __init__(self, test):
         super(PollHook, self).__init__(test)
 
     def on_crash(self, core_path):
-        self.logger.error("Core file present, debug with: gdb %s %s",
-                          config.vpp, core_path)
+        self.logger.error(
+            "Core file present, debug with: gdb %s %s", config.vpp, core_path
+        )
         check_core_path(self.logger, core_path)
         self.logger.error("Running `file %s':", core_path)
         try:
         check_core_path(self.logger, core_path)
         self.logger.error("Running `file %s':", core_path)
         try:
@@ -90,17 +92,24 @@ class PollHook(Hook):
             self.logger.error(
                 "Subprocess returned with error running `file' utility on "
                 "core-file, "
             self.logger.error(
                 "Subprocess returned with error running `file' utility on "
                 "core-file, "
-                "rc=%s",  e.returncode)
+                "rc=%s",
+                e.returncode,
+            )
         except OSError as e:
             self.logger.error(
                 "Subprocess returned OS error running `file' utility on "
                 "core-file, "
         except OSError as e:
             self.logger.error(
                 "Subprocess returned OS error running `file' utility on "
                 "core-file, "
-                "oserror=(%s) %s", e.errno, e.strerror)
+                "oserror=(%s) %s",
+                e.errno,
+                e.strerror,
+            )
         except Exception as e:
             self.logger.error(
                 "Subprocess returned unanticipated error running `file' "
                 "utility on core-file, "
         except Exception as e:
             self.logger.error(
                 "Subprocess returned unanticipated error running `file' "
                 "utility on core-file, "
-                "%s", e)
+                "%s",
+                e,
+            )
 
     def poll_vpp(self):
         """
 
     def poll_vpp(self):
         """
@@ -144,7 +153,7 @@ class PollHook(Hook):
 
 
 class StepHook(PollHook):
 
 
 class StepHook(PollHook):
-    """ Hook which requires user to press ENTER before doing any API/CLI """
+    """Hook which requires user to press ENTER before doing any API/CLI"""
 
     def __init__(self, test):
         self.skip_stack = None
 
     def __init__(self, test):
         self.skip_stack = None
@@ -183,19 +192,18 @@ class StepHook(PollHook):
             self.skip_count += 1
             return True
         else:
             self.skip_count += 1
             return True
         else:
-            print("%d API/CLI calls skipped in specified stack "
-                  "frame" % self.skip_count)
+            print("%d API/CLI calls skipped in specified stack frame" % self.skip_count)
             self.skip_count = 0
             self.skip_stack = None
             self.skip_num = None
             return False
 
     def user_input(self):
             self.skip_count = 0
             self.skip_stack = None
             self.skip_num = None
             return False
 
     def user_input(self):
-        print('number\tfunction\tfile\tcode')
+        print("number\tfunction\tfile\tcode")
         counter = 0
         stack = traceback.extract_stack()
         for e in stack:
         counter = 0
         stack = traceback.extract_stack()
         for e in stack:
-            print('%02d.\t%s\t%s:%d\t[%s]' % (counter, e[2], e[0], e[1], e[3]))
+            print("%02d.\t%s\t%s:%d\t[%s]" % (counter, e[2], e[0], e[1], e[3]))
             counter += 1
         print(single_line_delim)
         print("You may enter a number of stack frame chosen from above")
             counter += 1
         print(single_line_delim)
         print("You may enter a number of stack frame chosen from above")
@@ -203,9 +211,11 @@ class StepHook(PollHook):
         print("Alternatively, enter a test function name to stop at")
         print(single_line_delim)
         while True:
         print("Alternatively, enter a test function name to stop at")
         print(single_line_delim)
         while True:
-            print("Enter your choice, if any, and press ENTER to continue "
-                  "running the testcase...")
-            choice = sys.stdin.readline().rstrip('\r\n')
+            print(
+                "Enter your choice, if any, and press ENTER to continue "
+                "running the testcase..."
+            )
+            choice = sys.stdin.readline().rstrip("\r\n")
             if choice == "":
                 choice = None
             try:
             if choice == "":
                 choice = None
             try:
@@ -229,7 +239,7 @@ class StepHook(PollHook):
                 self.skip_num = num
 
     def before_cli(self, cli):
                 self.skip_num = num
 
     def before_cli(self, cli):
-        """ Wait for ENTER before executing CLI """
+        """Wait for ENTER before executing CLI"""
         if self.skip():
             print("Skip pause before executing CLI: %s" % cli)
         else:
         if self.skip():
             print("Skip pause before executing CLI: %s" % cli)
         else:
@@ -240,14 +250,12 @@ class StepHook(PollHook):
         super(StepHook, self).before_cli(cli)
 
     def before_api(self, api_name, api_args):
         super(StepHook, self).before_cli(cli)
 
     def before_api(self, api_name, api_args):
-        """ Wait for ENTER before executing API """
+        """Wait for ENTER before executing API"""
         if self.skip():
         if self.skip():
-            print("Skip pause before executing API: %s (%s)"
-                  % (api_name, api_args))
+            print("Skip pause before executing API: %s (%s)" % (api_name, api_args))
         else:
             print(double_line_delim)
         else:
             print(double_line_delim)
-            print("Test paused before executing API: %s (%s)"
-                  % (api_name, api_args))
+            print("Test paused before executing API: %s (%s)" % (api_name, api_args))
             print(single_line_delim)
             self.user_input()
         super(StepHook, self).before_api(api_name, api_args)
             print(single_line_delim)
             self.user_input()
         super(StepHook, self).before_api(api_name, api_args)
index bac6dfd..bf833b3 100644 (file)
 #!/usr/bin/env python3
 # IPFIX support for Scapy (RFC7011)
 
 #!/usr/bin/env python3
 # IPFIX support for Scapy (RFC7011)
 
-from scapy.all import bind_layers, FieldLenField, IntField, Packet, \
-    PacketListField, ShortEnumField, ShortField, StrLenField
+from scapy.all import (
+    bind_layers,
+    FieldLenField,
+    IntField,
+    Packet,
+    PacketListField,
+    ShortEnumField,
+    ShortField,
+    StrLenField,
+)
 from scapy.layers.inet import UDP
 
 
 # IPFIX Information Elements http://www.iana.org/assignments/ipfix/ipfix.xhtml
 information_elements = {
 from scapy.layers.inet import UDP
 
 
 # IPFIX Information Elements http://www.iana.org/assignments/ipfix/ipfix.xhtml
 information_elements = {
-    1:   "octetDeltaCount",
-    2:   "packetDeltaCount",
-    3:   "deltaFlowCount",
-    4:   "protocolIdentifier",
-    5:   "ipClassOfService",
-    6:   "tcpControlBits",
-    7:   "sourceTransportPort",
-    8:   "sourceIPv4Address",
-    9:   "sourceIPv4PrefixLength",
-    10:  "ingressInterface",
-    11:  "destinationTransportPort",
-    12:  "destinationIPv4Address",
-    13:  "destinationIPv4PrefixLength",
-    14:  "egressInterface",
-    15:  "ipNextHopIPv4Address",
-    16:  "bgpSourceAsNumber",
-    17:  "bgpDestinationAsNumber",
-    18:  "bgpNextHopIPv4Address",
-    19:  "postMCastPacketDeltaCount",
-    20:  "postMCastOctetDeltaCount",
-    21:  "flowEndSysUpTime",
-    22:  "flowStartSysUpTime",
-    23:  "postOctetDeltaCount",
-    24:  "postPacketDeltaCount",
-    25:  "minimumIpTotalLength",
-    26:  "maximumIpTotalLength",
-    27:  "sourceIPv6Address",
-    28:  "destinationIPv6Address",
-    29:  "sourceIPv6PrefixLength",
-    30:  "destinationIPv6PrefixLength",
-    31:  "flowLabelIPv6",
-    32:  "icmpTypeCodeIPv4",
-    33:  "igmpType",
-    34:  "samplingInterval",
-    35:  "samplingAlgorithm",
-    36:  "flowActiveTimeout",
-    37:  "flowIdleTimeout",
-    38:  "engineType",
-    39:  "engineId",
-    40:  "exportedOctetTotalCount",
-    41:  "exportedMessageTotalCount",
-    42:  "exportedFlowRecordTotalCount",
-    43:  "ipv4RouterSc",
-    44:  "sourceIPv4Prefix",
-    45:  "destinationIPv4Prefix",
-    46:  "mplsTopLabelType",
-    47:  "mplsTopLabelIPv4Address",
-    48:  "samplerId",
-    49:  "samplerMode",
-    50:  "samplerRandomInterval",
-    51:  "classId",
-    52:  "minimumTTL",
-    53:  "maximumTTL",
-    54:  "fragmentIdentification",
-    55:  "postIpClassOfService",
-    56:  "sourceMacAddress",
-    57:  "postDestinationMacAddress",
-    58:  "vlanId",
-    59:  "postVlanId",
-    60:  "ipVersion",
-    61:  "flowDirection",
-    62:  "ipNextHopIPv6Address",
-    63:  "bgpNextHopIPv6Address",
-    64:  "ipv6ExtensionHeaders",
-    70:  "mplsTopLabelStackSection",
-    71:  "mplsLabelStackSection2",
-    72:  "mplsLabelStackSection3",
-    73:  "mplsLabelStackSection4",
-    74:  "mplsLabelStackSection5",
-    75:  "mplsLabelStackSection6",
-    76:  "mplsLabelStackSection7",
-    77:  "mplsLabelStackSection8",
-    78:  "mplsLabelStackSection9",
-    79:  "mplsLabelStackSection10",
-    80:  "destinationMacAddress",
-    81:  "postSourceMacAddress",
-    82:  "interfaceName",
-    83:  "interfaceDescription",
-    84:  "samplerName",
-    85:  "octetTotalCount",
-    86:  "packetTotalCount",
-    87:  "flagsAndSamplerId",
-    88:  "fragmentOffset",
-    89:  "forwardingStatus",
-    90:  "mplsVpnRouteDistinguisher",
-    91:  "mplsTopLabelPrefixLength",
-    92:  "srcTrafficIndex",
-    93:  "dstTrafficIndex",
-    94:  "applicationDescription",
-    95:  "applicationId",
-    96:  "applicationName",
-    98:  "postIpDiffServCodePoint",
-    99:  "multicastReplicationFactor",
+    1: "octetDeltaCount",
+    2: "packetDeltaCount",
+    3: "deltaFlowCount",
+    4: "protocolIdentifier",
+    5: "ipClassOfService",
+    6: "tcpControlBits",
+    7: "sourceTransportPort",
+    8: "sourceIPv4Address",
+    9: "sourceIPv4PrefixLength",
+    10: "ingressInterface",
+    11: "destinationTransportPort",
+    12: "destinationIPv4Address",
+    13: "destinationIPv4PrefixLength",
+    14: "egressInterface",
+    15: "ipNextHopIPv4Address",
+    16: "bgpSourceAsNumber",
+    17: "bgpDestinationAsNumber",
+    18: "bgpNextHopIPv4Address",
+    19: "postMCastPacketDeltaCount",
+    20: "postMCastOctetDeltaCount",
+    21: "flowEndSysUpTime",
+    22: "flowStartSysUpTime",
+    23: "postOctetDeltaCount",
+    24: "postPacketDeltaCount",
+    25: "minimumIpTotalLength",
+    26: "maximumIpTotalLength",
+    27: "sourceIPv6Address",
+    28: "destinationIPv6Address",
+    29: "sourceIPv6PrefixLength",
+    30: "destinationIPv6PrefixLength",
+    31: "flowLabelIPv6",
+    32: "icmpTypeCodeIPv4",
+    33: "igmpType",
+    34: "samplingInterval",
+    35: "samplingAlgorithm",
+    36: "flowActiveTimeout",
+    37: "flowIdleTimeout",
+    38: "engineType",
+    39: "engineId",
+    40: "exportedOctetTotalCount",
+    41: "exportedMessageTotalCount",
+    42: "exportedFlowRecordTotalCount",
+    43: "ipv4RouterSc",
+    44: "sourceIPv4Prefix",
+    45: "destinationIPv4Prefix",
+    46: "mplsTopLabelType",
+    47: "mplsTopLabelIPv4Address",
+    48: "samplerId",
+    49: "samplerMode",
+    50: "samplerRandomInterval",
+    51: "classId",
+    52: "minimumTTL",
+    53: "maximumTTL",
+    54: "fragmentIdentification",
+    55: "postIpClassOfService",
+    56: "sourceMacAddress",
+    57: "postDestinationMacAddress",
+    58: "vlanId",
+    59: "postVlanId",
+    60: "ipVersion",
+    61: "flowDirection",
+    62: "ipNextHopIPv6Address",
+    63: "bgpNextHopIPv6Address",
+    64: "ipv6ExtensionHeaders",
+    70: "mplsTopLabelStackSection",
+    71: "mplsLabelStackSection2",
+    72: "mplsLabelStackSection3",
+    73: "mplsLabelStackSection4",
+    74: "mplsLabelStackSection5",
+    75: "mplsLabelStackSection6",
+    76: "mplsLabelStackSection7",
+    77: "mplsLabelStackSection8",
+    78: "mplsLabelStackSection9",
+    79: "mplsLabelStackSection10",
+    80: "destinationMacAddress",
+    81: "postSourceMacAddress",
+    82: "interfaceName",
+    83: "interfaceDescription",
+    84: "samplerName",
+    85: "octetTotalCount",
+    86: "packetTotalCount",
+    87: "flagsAndSamplerId",
+    88: "fragmentOffset",
+    89: "forwardingStatus",
+    90: "mplsVpnRouteDistinguisher",
+    91: "mplsTopLabelPrefixLength",
+    92: "srcTrafficIndex",
+    93: "dstTrafficIndex",
+    94: "applicationDescription",
+    95: "applicationId",
+    96: "applicationName",
+    98: "postIpDiffServCodePoint",
+    99: "multicastReplicationFactor",
     100: "className",
     101: "classificationEngineId",
     102: "layer2packetSectionOffset",
     100: "className",
     101: "classificationEngineId",
     102: "layer2packetSectionOffset",
@@ -443,24 +451,27 @@ information_elements = {
     471: "maxSessionEntries",
     472: "maxBIBEntries",
     473: "maxEntriesPerUser",
     471: "maxSessionEntries",
     472: "maxBIBEntries",
     473: "maxEntriesPerUser",
-    475: "maxFragmentsPendingReassembly"
+    475: "maxFragmentsPendingReassembly",
 }
 
 
 class IPFIX(Packet):
     name = "IPFIX"
 }
 
 
 class IPFIX(Packet):
     name = "IPFIX"
-    fields_desc = [ShortField("version", 10),
-                   ShortField("length", None),
-                   IntField("exportTime", None),
-                   IntField("sequenceNumber", 1),
-                   IntField("observationDomainID", 1)]
+    fields_desc = [
+        ShortField("version", 10),
+        ShortField("length", None),
+        IntField("exportTime", None),
+        IntField("sequenceNumber", 1),
+        IntField("observationDomainID", 1),
+    ]
 
 
 class FieldSpecifier(Packet):
     name = "Field Specifier"
 
 
 class FieldSpecifier(Packet):
     name = "Field Specifier"
-    fields_desc = [ShortEnumField(
-        "informationElement", None, information_elements),
-        ShortField("fieldLength", None)]
+    fields_desc = [
+        ShortEnumField("informationElement", None, information_elements),
+        ShortField("fieldLength", None),
+    ]
 
     def extract_padding(self, s):
         return "", s
 
     def extract_padding(self, s):
         return "", s
@@ -468,16 +479,20 @@ class FieldSpecifier(Packet):
 
 class Template(Packet):
     name = "Template"
 
 class Template(Packet):
     name = "Template"
-    fields_desc = [ShortField("templateID", 256),
-                   FieldLenField("fieldCount", None, count_of="fields"),
-                   PacketListField("templateFields", [], FieldSpecifier,
-                                   count_from=lambda p: p.fieldCount)]
+    fields_desc = [
+        ShortField("templateID", 256),
+        FieldLenField("fieldCount", None, count_of="fields"),
+        PacketListField(
+            "templateFields", [], FieldSpecifier, count_from=lambda p: p.fieldCount
+        ),
+    ]
 
 
 class Data(Packet):
     name = "Data"
     fields_desc = [
 
 
 class Data(Packet):
     name = "Data"
     fields_desc = [
-        StrLenField("data", "", length_from=lambda p: p.underlayer.length - 4)]
+        StrLenField("data", "", length_from=lambda p: p.underlayer.length - 4)
+    ]
 
     def extract_padding(self, s):
         return "", s
 
     def extract_padding(self, s):
         return "", s
@@ -485,8 +500,7 @@ class Data(Packet):
 
 class Set(Packet):
     name = "Set"
 
 class Set(Packet):
     name = "Set"
-    fields_desc = [ShortField("setID", 256),
-                   ShortField("length", None)]
+    fields_desc = [ShortField("setID", 256), ShortField("length", None)]
 
     def guess_payload_class(self, payload):
         if self.setID == 2:
 
     def guess_payload_class(self, payload):
         if self.setID == 2:
@@ -502,7 +516,7 @@ bind_layers(UDP, IPFIX, dport=4739)
 
 
 class IPFIXDecoder:
 
 
 class IPFIXDecoder:
-    """ IPFIX data set decoder """
+    """IPFIX data set decoder"""
 
     def __init__(self):
         self._templates = []
 
     def __init__(self):
         self._templates = []
@@ -517,11 +531,9 @@ class IPFIXDecoder:
         fields = []
         rec_len = 0
         for field in template.templateFields:
         fields = []
         rec_len = 0
         for field in template.templateFields:
-            fields.append(
-                {'name': field.informationElement, 'len': field.fieldLength})
+            fields.append({"name": field.informationElement, "len": field.fieldLength})
             rec_len += field.fieldLength
             rec_len += field.fieldLength
-        self._templates.append(
-            {'id': templateID, 'fields': fields, 'rec_len': rec_len})
+        self._templates.append({"id": templateID, "fields": fields, "rec_len": rec_len})
 
     def decode_data_set(self, data_set):
         """
 
     def decode_data_set(self, data_set):
         """
@@ -532,15 +544,15 @@ class IPFIXDecoder:
         """
         data = []
         for template in self._templates:
         """
         data = []
         for template in self._templates:
-            if template['id'] == data_set.setID:
+            if template["id"] == data_set.setID:
                 offset = 0
                 d = data_set[Data].data
                 offset = 0
                 d = data_set[Data].data
-                for i in range(len(d) // template['rec_len']):
+                for i in range(len(d) // template["rec_len"]):
                     record = {}
                     record = {}
-                    for field in template['fields']:
-                        f = d[offset:offset + field['len']]
-                        offset += field['len']
-                        record.update({field['name']: f})
+                    for field in template["fields"]:
+                        f = d[offset : offset + field["len"]]
+                        offset += field["len"]
+                        record.update({field["name"]: f})
                     data.append(record)
                 break
         return data
                     data.append(record)
                 break
         return data
index bd5e1ab..9ebc86a 100644 (file)
@@ -5,7 +5,7 @@ from vpp_object import VppObject
 
 
 class VppLispLocatorSet(VppObject):
 
 
 class VppLispLocatorSet(VppObject):
-    """ Represents LISP locator set in VPP """
+    """Represents LISP locator set in VPP"""
 
     def __init__(self, test, ls_name):
         self._test = test
 
     def __init__(self, test, ls_name):
         self._test = test
@@ -26,7 +26,7 @@ class VppLispLocatorSet(VppObject):
     def get_lisp_locator_sets_dump_entry(self):
         result = self.test.vapi.lisp_locator_set_dump()
         for ls in result:
     def get_lisp_locator_sets_dump_entry(self):
         result = self.test.vapi.lisp_locator_set_dump()
         for ls in result:
-            if ls.ls_name.strip('\x00') == self._ls_name:
+            if ls.ls_name.strip("\x00") == self._ls_name:
                 return ls
         return None
 
                 return ls
         return None
 
@@ -34,15 +34,16 @@ class VppLispLocatorSet(VppObject):
         return self.get_lisp_locator_sets_dump_entry() is not None
 
     def remove_vpp_config(self):
         return self.get_lisp_locator_sets_dump_entry() is not None
 
     def remove_vpp_config(self):
-        self.test.vapi.lisp_add_del_locator_set(locator_set_name=self._ls_name,
-                                                is_add=0)
+        self.test.vapi.lisp_add_del_locator_set(
+            locator_set_name=self._ls_name, is_add=0
+        )
 
     def object_id(self):
 
     def object_id(self):
-        return 'lisp-locator-set-%s' % self._ls_name
+        return "lisp-locator-set-%s" % self._ls_name
 
 
 class VppLispLocator(VppObject):
 
 
 class VppLispLocator(VppObject):
-    """ Represents LISP locator in VPP """
+    """Represents LISP locator in VPP"""
 
     def __init__(self, test, sw_if_index, ls_name, priority=1, weight=1):
         self._test = test
 
     def __init__(self, test, sw_if_index, ls_name, priority=1, weight=1):
         self._test = test
@@ -53,12 +54,12 @@ class VppLispLocator(VppObject):
 
     @property
     def test(self):
 
     @property
     def test(self):
-        """ Test which created this locator """
+        """Test which created this locator"""
         return self._test
 
     @property
     def ls_name(self):
         return self._test
 
     @property
     def ls_name(self):
-        """ Locator set name """
+        """Locator set name"""
         return self._ls_name
 
     @property
         return self._ls_name
 
     @property
@@ -74,15 +75,18 @@ class VppLispLocator(VppObject):
         return self._weight
 
     def add_vpp_config(self):
         return self._weight
 
     def add_vpp_config(self):
-        self.test.vapi.lisp_add_del_locator(locator_set_name=self._ls_name,
-                                            sw_if_index=self._sw_if_index,
-                                            priority=self._priority,
-                                            weight=self._weight)
+        self.test.vapi.lisp_add_del_locator(
+            locator_set_name=self._ls_name,
+            sw_if_index=self._sw_if_index,
+            priority=self._priority,
+            weight=self._weight,
+        )
         self._test.registry.register(self, self.test.logger)
 
     def get_lisp_locator_dump_entry(self):
         locators = self.test.vapi.lisp_locator_dump(
         self._test.registry.register(self, self.test.logger)
 
     def get_lisp_locator_dump_entry(self):
         locators = self.test.vapi.lisp_locator_dump(
-                is_index_set=0, ls_name=self._ls_name)
+            is_index_set=0, ls_name=self._ls_name
+        )
         for locator in locators:
             if locator.sw_if_index == self._sw_if_index:
                 return locator
         for locator in locators:
             if locator.sw_if_index == self._sw_if_index:
                 return locator
@@ -94,12 +98,16 @@ class VppLispLocator(VppObject):
 
     def remove_vpp_config(self):
         self.test.vapi.lisp_add_del_locator(
 
     def remove_vpp_config(self):
         self.test.vapi.lisp_add_del_locator(
-                locator_set_name=self._ls_name, sw_if_index=self._sw_if_index,
-                priority=self._priority, weight=self._weight, is_add=0)
+            locator_set_name=self._ls_name,
+            sw_if_index=self._sw_if_index,
+            priority=self._priority,
+            weight=self._weight,
+            is_add=0,
+        )
         self._test.registry.register(self, self.test.logger)
 
     def object_id(self):
         self._test.registry.register(self, self.test.logger)
 
     def object_id(self):
-        return 'lisp-locator-%s-%d' % (self._ls_name, self._sw_if_index)
+        return "lisp-locator-%s-%d" % (self._ls_name, self._sw_if_index)
 
 
 class LispEIDType:
 
 
 class LispEIDType:
@@ -115,7 +123,8 @@ class LispKeyIdType:
 
 
 class LispEID:
 
 
 class LispEID:
-    """ Lisp endpoint identifier """
+    """Lisp endpoint identifier"""
+
     def __init__(self, eid):
         self.eid = eid
         self._type = -1
     def __init__(self, eid):
         self.eid = eid
         self._type = -1
@@ -130,7 +139,7 @@ class LispEID:
                 self.mac = self.eid
                 self._type = LispEIDType.MAC
                 return
                 self.mac = self.eid
                 self._type = LispEIDType.MAC
                 return
-        raise Exception('Unsupported EID format {!s}!'.format(eid))
+        raise Exception("Unsupported EID format {!s}!".format(eid))
 
     @property
     def eid_type(self):
 
     @property
     def eid_type(self):
@@ -143,7 +152,7 @@ class LispEID:
         elif self.eid_type == LispEIDType.MAC:
             return self.mac
         elif self.eid_type == LispEIDType.NSH:
         elif self.eid_type == LispEIDType.MAC:
             return self.mac
         elif self.eid_type == LispEIDType.NSH:
-            return Exception('Unimplemented')
+            return Exception("Unimplemented")
 
     @property
     def packed(self):
 
     @property
     def packed(self):
@@ -152,11 +161,12 @@ class LispEID:
         elif self.eid_type == LispEIDType.MAC:
             return {"type": self._type, "address": {"mac": self.mac}}
         elif self.eid_type == LispEIDType.NSH:
         elif self.eid_type == LispEIDType.MAC:
             return {"type": self._type, "address": {"mac": self.mac}}
         elif self.eid_type == LispEIDType.NSH:
-            return Exception('Unimplemented')
+            return Exception("Unimplemented")
 
 
 class LispKey:
 
 
 class LispKey:
-    """ Lisp Key """
+    """Lisp Key"""
+
     def __init__(self, key_type, key):
         self._key_type = key_type
         self._key = key
     def __init__(self, key_type, key):
         self._key_type = key_type
         self._key = key
@@ -167,7 +177,7 @@ class LispKey:
 
 
 class VppLispMapping(VppObject):
 
 
 class VppLispMapping(VppObject):
-    """ Represents common features for remote and local LISP mapping in VPP """
+    """Represents common features for remote and local LISP mapping in VPP"""
 
     def __init__(self, test, eid, vni=0, priority=1, weight=1):
         self._eid = LispEID(eid)
 
     def __init__(self, test, eid, vni=0, priority=1, weight=1):
         self._eid = LispEID(eid)
@@ -198,21 +208,36 @@ class VppLispMapping(VppObject):
 
     def get_lisp_mapping_dump_entry(self):
         return self.test.vapi.lisp_eid_table_dump(
 
     def get_lisp_mapping_dump_entry(self):
         return self.test.vapi.lisp_eid_table_dump(
-            eid_set=1, vni=self._vni, eid=self._eid.packed)
+            eid_set=1, vni=self._vni, eid=self._eid.packed
+        )
 
     def query_vpp_config(self):
         mapping = self.get_lisp_mapping_dump_entry()
         return mapping
 
     def object_id(self):
 
     def query_vpp_config(self):
         mapping = self.get_lisp_mapping_dump_entry()
         return mapping
 
     def object_id(self):
-        return 'lisp-mapping-[%s]-%s-%s-%s' % (
-            self.vni, self.eid.address, self.priority, self.weight)
+        return "lisp-mapping-[%s]-%s-%s-%s" % (
+            self.vni,
+            self.eid.address,
+            self.priority,
+            self.weight,
+        )
 
 
 class VppLocalMapping(VppLispMapping):
 
 
 class VppLocalMapping(VppLispMapping):
-    """ LISP Local mapping """
-    def __init__(self, test, eid, ls_name, vni=0, priority=1, weight=1,
-                 key_id=LispKeyIdType.NONE, key=''):
+    """LISP Local mapping"""
+
+    def __init__(
+        self,
+        test,
+        eid,
+        ls_name,
+        vni=0,
+        priority=1,
+        weight=1,
+        key_id=LispKeyIdType.NONE,
+        key="",
+    ):
         super(VppLocalMapping, self).__init__(test, eid, vni, priority, weight)
         self._ls_name = ls_name
         self._key = LispKey(key_id, key)
         super(VppLocalMapping, self).__init__(test, eid, vni, priority, weight)
         self._ls_name = ls_name
         self._key = LispKey(key_id, key)
@@ -231,17 +256,23 @@ class VppLocalMapping(VppLispMapping):
 
     def add_vpp_config(self):
         self.test.vapi.lisp_add_del_local_eid(
 
     def add_vpp_config(self):
         self.test.vapi.lisp_add_del_local_eid(
-                locator_set_name=self._ls_name, eid=self._eid.packed,
-                vni=self._vni, key=self._key.packed)
+            locator_set_name=self._ls_name,
+            eid=self._eid.packed,
+            vni=self._vni,
+            key=self._key.packed,
+        )
         self._test.registry.register(self, self.test.logger)
 
     def remove_vpp_config(self):
         self.test.vapi.lisp_add_del_local_eid(
         self._test.registry.register(self, self.test.logger)
 
     def remove_vpp_config(self):
         self.test.vapi.lisp_add_del_local_eid(
-                locator_set_name=self._ls_name, eid=self._eid.packed,
-                vni=self._vni, is_add=0)
+            locator_set_name=self._ls_name,
+            eid=self._eid.packed,
+            vni=self._vni,
+            is_add=0,
+        )
 
     def object_id(self):
 
     def object_id(self):
-        return 'lisp-eid-local-mapping-%s[%d]' % (self._eid.address, self._vni)
+        return "lisp-eid-local-mapping-%s[%d]" % (self._eid.address, self._vni)
 
 
 class LispRemoteLocator:
 
 
 class LispRemoteLocator:
@@ -252,15 +283,16 @@ class LispRemoteLocator:
 
     @property
     def packed(self):
 
     @property
     def packed(self):
-        return {"priority": self.priority, "weight": self.weight,
-                "ip_address": self.addr}
+        return {
+            "priority": self.priority,
+            "weight": self.weight,
+            "ip_address": self.addr,
+        }
 
 
 class VppRemoteMapping(VppLispMapping):
 
 
 class VppRemoteMapping(VppLispMapping):
-
     def __init__(self, test, eid, rlocs=None, vni=0, priority=1, weight=1):
     def __init__(self, test, eid, rlocs=None, vni=0, priority=1, weight=1):
-        super(VppRemoteMapping, self).__init__(test, eid, vni, priority,
-                                               weight)
+        super(VppRemoteMapping, self).__init__(test, eid, vni, priority, weight)
         self._rlocs = rlocs
 
     @property
         self._rlocs = rlocs
 
     @property
@@ -272,27 +304,30 @@ class VppRemoteMapping(VppLispMapping):
 
     def add_vpp_config(self):
         self.test.vapi.lisp_add_del_remote_mapping(
 
     def add_vpp_config(self):
         self.test.vapi.lisp_add_del_remote_mapping(
-                rlocs=self.rlocs, deid=self._eid.packed,
-                vni=self._vni, rloc_num=len(self._rlocs))
+            rlocs=self.rlocs,
+            deid=self._eid.packed,
+            vni=self._vni,
+            rloc_num=len(self._rlocs),
+        )
         self._test.registry.register(self, self.test.logger)
 
     def remove_vpp_config(self):
         self.test.vapi.lisp_add_del_remote_mapping(
         self._test.registry.register(self, self.test.logger)
 
     def remove_vpp_config(self):
         self.test.vapi.lisp_add_del_remote_mapping(
-                deid=self._eid.packed, vni=self._vni, is_add=0, rloc_num=0)
+            deid=self._eid.packed, vni=self._vni, is_add=0, rloc_num=0
+        )
 
     def object_id(self):
 
     def object_id(self):
-        return 'lisp-eid-remote-mapping-%s[%d]' % (self._eid.address,
-                                                   self._vni)
+        return "lisp-eid-remote-mapping-%s[%d]" % (self._eid.address, self._vni)
 
 
 class VppLispAdjacency(VppObject):
 
 
 class VppLispAdjacency(VppObject):
-    """ Represents LISP adjacency in VPP """
+    """Represents LISP adjacency in VPP"""
 
     def __init__(self, test, leid, reid, vni=0):
         self._leid = LispEID(leid)
         self._reid = LispEID(reid)
         if self._leid.eid_type != self._reid.eid_type:
 
     def __init__(self, test, leid, reid, vni=0):
         self._leid = LispEID(leid)
         self._reid = LispEID(reid)
         if self._leid.eid_type != self._reid.eid_type:
-            raise Exception('remote and local EID are different types!')
+            raise Exception("remote and local EID are different types!")
         self._vni = vni
         self._test = test
 
         self._vni = vni
         self._test = test
 
@@ -314,7 +349,8 @@ class VppLispAdjacency(VppObject):
 
     def add_vpp_config(self):
         self.test.vapi.lisp_add_del_adjacency(
 
     def add_vpp_config(self):
         self.test.vapi.lisp_add_del_adjacency(
-                leid=self._leid.packed, reid=self._reid.packed, vni=self._vni)
+            leid=self._leid.packed, reid=self._reid.packed, vni=self._vni
+        )
         self._test.registry.register(self, self.test.logger)
 
     @staticmethod
         self._test.registry.register(self, self.test.logger)
 
     @staticmethod
@@ -334,15 +370,16 @@ class VppLispAdjacency(VppObject):
     def query_vpp_config(self):
         res = self.test.vapi.lisp_adjacencies_get(vni=self._vni)
         for adj in res.adjacencies:
     def query_vpp_config(self):
         res = self.test.vapi.lisp_adjacencies_get(vni=self._vni)
         for adj in res.adjacencies:
-            if self.eid_equal(self._leid, adj.leid) and \
-                    self.eid_equal(self._reid, adj.reid):
+            if self.eid_equal(self._leid, adj.leid) and self.eid_equal(
+                self._reid, adj.reid
+            ):
                 return True
         return False
 
     def remove_vpp_config(self):
         self.test.vapi.lisp_add_del_adjacency(
                 return True
         return False
 
     def remove_vpp_config(self):
         self.test.vapi.lisp_add_del_adjacency(
-                leid=self._leid.packed, reid=self._reid.packed,
-                vni=self._vni, is_add=0)
+            leid=self._leid.packed, reid=self._reid.packed, vni=self._vni, is_add=0
+        )
 
     def object_id(self):
 
     def object_id(self):
-        return 'lisp-adjacency-%s-%s[%d]' % (self._leid, self._reid, self._vni)
+        return "lisp-adjacency-%s-%s[%d]" % (self._leid, self._reid, self._vni)
index 9701aec..f848e22 100644 (file)
@@ -7,9 +7,9 @@ import logging
 from config import config
 
 """ @var formatting delimiter consisting of '=' characters """
 from config import config
 
 """ @var formatting delimiter consisting of '=' characters """
-double_line_delim = '=' * 78
+double_line_delim = "=" * 78
 """ @var formatting delimiter consisting of '-' characters """
 """ @var formatting delimiter consisting of '-' characters """
-single_line_delim = '-' * 78
+single_line_delim = "-" * 78
 
 
 def colorize(msg, color):
 
 
 def colorize(msg, color):
@@ -17,13 +17,12 @@ def colorize(msg, color):
 
 
 class ColorFormatter(logging.Formatter):
 
 
 class ColorFormatter(logging.Formatter):
-
     def init(self, fmt=None, datefmt=None):
         super(ColorFormatter, self).__init__(fmt, datefmt)
 
     def format(self, record):
         message = super(ColorFormatter, self).format(record)
     def init(self, fmt=None, datefmt=None):
         super(ColorFormatter, self).__init__(fmt, datefmt)
 
     def format(self, record):
         message = super(ColorFormatter, self).format(record)
-        if hasattr(record, 'color'):
+        if hasattr(record, "color"):
             message = colorize(message, record.color)
         return message
 
             message = colorize(message, record.color)
         return message
 
@@ -37,8 +36,9 @@ else:
     log_level = 40
 
 handler = logging.StreamHandler(sys.stdout)
     log_level = 40
 
 handler = logging.StreamHandler(sys.stdout)
-color_formatter = ColorFormatter(fmt='%(asctime)s,%(msecs)03d %(message)s',
-                                 datefmt="%H:%M:%S")
+color_formatter = ColorFormatter(
+    fmt="%(asctime)s,%(msecs)03d %(message)s", datefmt="%H:%M:%S"
+)
 handler.setFormatter(color_formatter)
 handler.setLevel(log_level)
 
 handler.setFormatter(color_formatter)
 handler.setLevel(log_level)
 
@@ -56,7 +56,7 @@ def get_logger(name):
 
 
 def get_parallel_logger(stream):
 
 
 def get_parallel_logger(stream):
-    logger = logging.getLogger('parallel_logger_{!s}'.format(stream))
+    logger = logging.getLogger("parallel_logger_{!s}".format(stream))
     logger.propagate = False
     logger.setLevel(logging.DEBUG)
     handler = logging.StreamHandler(stream)
     logger.propagate = False
     logger.setLevel(logging.DEBUG)
     handler = logging.StreamHandler(stream)
@@ -71,15 +71,15 @@ def get_parallel_logger(stream):
 # These variables (RED, GREEN, YELLOW and LPURPLE) are used to configure
 # the color of the text to be printed in the terminal. Variable COLOR_RESET
 # is used to revert the text color to the default one.
 # These variables (RED, GREEN, YELLOW and LPURPLE) are used to configure
 # the color of the text to be printed in the terminal. Variable COLOR_RESET
 # is used to revert the text color to the default one.
-if hasattr(sys.stdout, 'isatty') and sys.stdout.isatty():
-    RED = '\033[91m'
-    GREEN = '\033[92m'
-    YELLOW = '\033[93m'
-    LPURPLE = '\033[94m'
-    COLOR_RESET = '\033[0m'
+if hasattr(sys.stdout, "isatty") and sys.stdout.isatty():
+    RED = "\033[91m"
+    GREEN = "\033[92m"
+    YELLOW = "\033[93m"
+    LPURPLE = "\033[94m"
+    COLOR_RESET = "\033[0m"
 else:
 else:
-    RED = ''
-    GREEN = ''
-    YELLOW = ''
-    LPURPLE = ''
-    COLOR_RESET = ''
+    RED = ""
+    GREEN = ""
+    YELLOW = ""
+    LPURPLE = ""
+    COLOR_RESET = ""
index 19bad89..707d61f 100644 (file)
@@ -16,10 +16,11 @@ class SerializableClassCopy:
     """
     Empty class used as a basis for a serializable copy of another class.
     """
     """
     Empty class used as a basis for a serializable copy of another class.
     """
+
     pass
 
     def __repr__(self):
     pass
 
     def __repr__(self):
-        return '<SerializableClassCopy dict=%s>' % self.__dict__
+        return "<SerializableClassCopy dict=%s>" % self.__dict__
 
 
 class RemoteClassAttr:
 
 
 class RemoteClassAttr:
@@ -32,7 +33,7 @@ class RemoteClassAttr:
         self._remote = remote
 
     def path_to_str(self):
         self._remote = remote
 
     def path_to_str(self):
-        return '.'.join(self._path)
+        return ".".join(self._path)
 
     def get_remote_value(self):
         return self._remote._remote_exec(RemoteClass.GET, self.path_to_str())
 
     def get_remote_value(self):
         return self._remote._remote_exec(RemoteClass.GET, self.path_to_str())
@@ -44,25 +45,24 @@ class RemoteClassAttr:
         return self._remote._remote_exec(RemoteClass.STR, self.path_to_str())
 
     def __getattr__(self, attr):
         return self._remote._remote_exec(RemoteClass.STR, self.path_to_str())
 
     def __getattr__(self, attr):
-        if attr[0] == '_':
-            if not (attr.startswith('__') and attr.endswith('__')):
-                raise AttributeError('tried to get private attribute: %s ',
-                                     attr)
+        if attr[0] == "_":
+            if not (attr.startswith("__") and attr.endswith("__")):
+                raise AttributeError("tried to get private attribute: %s ", attr)
         self._path.append(attr)
         return self
 
     def __setattr__(self, attr, val):
         self._path.append(attr)
         return self
 
     def __setattr__(self, attr, val):
-        if attr[0] == '_':
-            if not (attr.startswith('__') and attr.endswith('__')):
+        if attr[0] == "_":
+            if not (attr.startswith("__") and attr.endswith("__")):
                 super(RemoteClassAttr, self).__setattr__(attr, val)
                 return
         self._path.append(attr)
                 super(RemoteClassAttr, self).__setattr__(attr, val)
                 return
         self._path.append(attr)
-        self._remote._remote_exec(RemoteClass.SETATTR, self.path_to_str(),
-                                  value=val)
+        self._remote._remote_exec(RemoteClass.SETATTR, self.path_to_str(), value=val)
 
     def __call__(self, *args, **kwargs):
 
     def __call__(self, *args, **kwargs):
-        return self._remote._remote_exec(RemoteClass.CALL, self.path_to_str(),
-                                         *args, **kwargs)
+        return self._remote._remote_exec(
+            RemoteClass.CALL, self.path_to_str(), *args, **kwargs
+        )
 
 
 class RemoteClass(Process):
 
 
 class RemoteClass(Process):
@@ -98,12 +98,12 @@ class RemoteClass(Process):
             object.terminate()
     """
 
             object.terminate()
     """
 
-    GET = 0       # Get attribute remotely
-    CALL = 1      # Call method remotely
-    SETATTR = 2   # Set attribute remotely
-    REPR = 3      # Get representation of a remote object
-    STR = 4       # Get string representation of a remote object
-    QUIT = 5      # Quit remote execution
+    GET = 0  # Get attribute remotely
+    CALL = 1  # Call method remotely
+    SETATTR = 2  # Set attribute remotely
+    REPR = 3  # Get representation of a remote object
+    STR = 4  # Get string representation of a remote object
+    QUIT = 5  # Quit remote execution
 
     PIPE_PARENT = 0  # Parent end of the pipe
     PIPE_CHILD = 1  # Child end of the pipe
 
     PIPE_PARENT = 0  # Parent end of the pipe
     PIPE_CHILD = 1  # Child end of the pipe
@@ -128,16 +128,16 @@ class RemoteClass(Process):
         return self.RemoteClassAttr(self, None)()
 
     def __getattr__(self, attr):
         return self.RemoteClassAttr(self, None)()
 
     def __getattr__(self, attr):
-        if attr[0] == '_' or not self.is_alive():
-            if not (attr.startswith('__') and attr.endswith('__')):
-                if hasattr(super(RemoteClass, self), '__getattr__'):
+        if attr[0] == "_" or not self.is_alive():
+            if not (attr.startswith("__") and attr.endswith("__")):
+                if hasattr(super(RemoteClass, self), "__getattr__"):
                     return super(RemoteClass, self).__getattr__(attr)
                     return super(RemoteClass, self).__getattr__(attr)
-                raise AttributeError('missing: %s', attr)
+                raise AttributeError("missing: %s", attr)
         return RemoteClassAttr(self, attr)
 
     def __setattr__(self, attr, val):
         return RemoteClassAttr(self, attr)
 
     def __setattr__(self, attr, val):
-        if attr[0] == '_' or not self.is_alive():
-            if not (attr.startswith('__') and attr.endswith('__')):
+        if attr[0] == "_" or not self.is_alive():
+            if not (attr.startswith("__") and attr.endswith("__")):
                 super(RemoteClass, self).__setattr__(attr, val)
                 return
         setattr(RemoteClassAttr(self, None), attr, val)
                 super(RemoteClass, self).__setattr__(attr, val)
                 return
         setattr(RemoteClassAttr(self, None), attr, val)
@@ -149,13 +149,11 @@ class RemoteClass(Process):
         # automatically resolve remote objects in the arguments
         mutable_args = list(args)
         for i, val in enumerate(mutable_args):
         # automatically resolve remote objects in the arguments
         mutable_args = list(args)
         for i, val in enumerate(mutable_args):
-            if isinstance(val, RemoteClass) or \
-                    isinstance(val, RemoteClassAttr):
+            if isinstance(val, RemoteClass) or isinstance(val, RemoteClassAttr):
                 mutable_args[i] = val.get_remote_value()
         args = tuple(mutable_args)
         for key, val in kwargs.items():
                 mutable_args[i] = val.get_remote_value()
         args = tuple(mutable_args)
         for key, val in kwargs.items():
-            if isinstance(val, RemoteClass) or \
-                    isinstance(val, RemoteClassAttr):
+            if isinstance(val, RemoteClass) or isinstance(val, RemoteClassAttr):
                 kwargs[key] = val.get_remote_value()
         # send request
         args = self._make_serializable(args)
                 kwargs[key] = val.get_remote_value()
         # send request
         args = self._make_serializable(args)
@@ -163,11 +161,11 @@ class RemoteClass(Process):
         self._pipe[RemoteClass.PIPE_PARENT].send((op, path, args, kwargs))
         timeout = self._timeout
         # adjust timeout specifically for the .sleep method
         self._pipe[RemoteClass.PIPE_PARENT].send((op, path, args, kwargs))
         timeout = self._timeout
         # adjust timeout specifically for the .sleep method
-        if path is not None and path.split('.')[-1] == 'sleep':
+        if path is not None and path.split(".")[-1] == "sleep":
             if args and isinstance(args[0], (long, int)):
                 timeout += args[0]
             if args and isinstance(args[0], (long, int)):
                 timeout += args[0]
-            elif 'timeout' in kwargs:
-                timeout += kwargs['timeout']
+            elif "timeout" in kwargs:
+                timeout += kwargs["timeout"]
         if not self._pipe[RemoteClass.PIPE_PARENT].poll(timeout):
             return None
         try:
         if not self._pipe[RemoteClass.PIPE_PARENT].poll(timeout):
             return None
         try:
@@ -222,7 +220,7 @@ class RemoteClass(Process):
             return None
 
     def _serializable(self, obj):
             return None
 
     def _serializable(self, obj):
-        """ Test if the given object is serializable """
+        """Test if the given object is serializable"""
         try:
             dumps(obj)
             return True
         try:
             dumps(obj)
             return True
@@ -243,7 +241,7 @@ class RemoteClass(Process):
         Dictionaries can hold complex values, so we split keys and values into
         separate lists and serialize them individually.
         """
         Dictionaries can hold complex values, so we split keys and values into
         separate lists and serialize them individually.
         """
-        if (type(obj) is dict):
+        if type(obj) is dict:
             copy.type = type(obj)
             copy.k_list = list()
             copy.v_list = list()
             copy.type = type(obj)
             copy.k_list = list()
             copy.v_list = list()
@@ -255,12 +253,12 @@ class RemoteClass(Process):
         # copy at least serializable attributes and properties
         for name, member in inspect.getmembers(obj):
             # skip private members and non-writable dunder methods.
         # copy at least serializable attributes and properties
         for name, member in inspect.getmembers(obj):
             # skip private members and non-writable dunder methods.
-            if name[0] == '_':
-                if name in ['__weakref__']:
+            if name[0] == "_":
+                if name in ["__weakref__"]:
                     continue
                     continue
-                if name in ['__dict__']:
+                if name in ["__dict__"]:
                     continue
                     continue
-                if not (name.startswith('__') and name.endswith('__')):
+                if not (name.startswith("__") and name.endswith("__")):
                     continue
             if callable(member) and not isinstance(member, property):
                 continue
                     continue
             if callable(member) and not isinstance(member, property):
                 continue
@@ -281,13 +279,13 @@ class RemoteClass(Process):
             if type(obj) is tuple:
                 rv = tuple(rv)
             return rv
             if type(obj) is tuple:
                 rv = tuple(rv)
             return rv
-        elif (isinstance(obj, IntEnum) or isinstance(obj, IntFlag)):
+        elif isinstance(obj, IntEnum) or isinstance(obj, IntFlag):
             return obj.value
         else:
             return self._make_obj_serializable(obj)
 
     def _deserialize_obj(self, obj):
             return obj.value
         else:
             return self._make_obj_serializable(obj)
 
     def _deserialize_obj(self, obj):
-        if (hasattr(obj, 'type')):
+        if hasattr(obj, "type"):
             if obj.type is dict:
                 _obj = dict()
                 for k, v in zip(obj.k_list, obj.v_list):
             if obj.type is dict:
                 _obj = dict()
                 for k, v in zip(obj.k_list, obj.v_list):
@@ -307,19 +305,19 @@ class RemoteClass(Process):
             return self._deserialize_obj(obj)
 
     def start_remote(self):
             return self._deserialize_obj(obj)
 
     def start_remote(self):
-        """ Start remote execution """
+        """Start remote execution"""
         self.start()
 
     def quit_remote(self):
         self.start()
 
     def quit_remote(self):
-        """ Quit remote execution """
+        """Quit remote execution"""
         self._remote_exec(RemoteClass.QUIT, None)
 
     def get_remote_value(self):
         self._remote_exec(RemoteClass.QUIT, None)
 
     def get_remote_value(self):
-        """ Get value of a remotely held object """
+        """Get value of a remotely held object"""
         return RemoteClassAttr(self, None).get_remote_value()
 
     def set_request_timeout(self, timeout):
         return RemoteClassAttr(self, None).get_remote_value()
 
     def set_request_timeout(self, timeout):
-        """ Change request timeout """
+        """Change request timeout"""
         self._timeout = timeout
 
     def run(self):
         self._timeout = timeout
 
     def run(self):
@@ -332,17 +330,16 @@ class RemoteClass(Process):
             try:
                 rv = None
                 # get request from the parent process
             try:
                 rv = None
                 # get request from the parent process
-                (op, path, args,
-                 kwargs) = self._pipe[RemoteClass.PIPE_CHILD].recv()
+                (op, path, args, kwargs) = self._pipe[RemoteClass.PIPE_CHILD].recv()
                 args = self._deserialize(args)
                 kwargs = self._deserialize(kwargs)
                 args = self._deserialize(args)
                 kwargs = self._deserialize(kwargs)
-                path = path.split('.') if path else []
+                path = path.split(".") if path else []
                 if op == RemoteClass.GET:
                     rv = self._get_local_value(path)
                 elif op == RemoteClass.CALL:
                     rv = self._call_local_method(path, *args, **kwargs)
                 if op == RemoteClass.GET:
                     rv = self._get_local_value(path)
                 elif op == RemoteClass.CALL:
                     rv = self._call_local_method(path, *args, **kwargs)
-                elif op == RemoteClass.SETATTR and 'value' in kwargs:
-                    self._set_local_attr(path, kwargs['value'])
+                elif op == RemoteClass.SETATTR and "value" in kwargs:
+                    self._set_local_attr(path, kwargs["value"])
                 elif op == RemoteClass.REPR:
                     rv = self._get_local_repr(path)
                 elif op == RemoteClass.STR:
                 elif op == RemoteClass.REPR:
                     rv = self._get_local_repr(path)
                 elif op == RemoteClass.STR:
@@ -362,34 +359,34 @@ class RemoteClass(Process):
 
 @unittest.skip("Remote Vpp Test Case Class")
 class RemoteVppTestCase(VppTestCase):
 
 @unittest.skip("Remote Vpp Test Case Class")
 class RemoteVppTestCase(VppTestCase):
-    """ Re-use VppTestCase to create remote VPP segment
+    """Re-use VppTestCase to create remote VPP segment
 
 
-        In your test case::
+    In your test case::
 
 
-            @classmethod
-            def setUpClass(cls):
-                # fork new process before client connects to VPP
-                cls.remote_test = RemoteClass(RemoteVppTestCase)
+        @classmethod
+        def setUpClass(cls):
+            # fork new process before client connects to VPP
+            cls.remote_test = RemoteClass(RemoteVppTestCase)
 
 
-                # start remote process
-                cls.remote_test.start_remote()
+            # start remote process
+            cls.remote_test.start_remote()
 
 
-                # set up your test case
-                super(MyTestCase, cls).setUpClass()
+            # set up your test case
+            super(MyTestCase, cls).setUpClass()
 
 
-                # set up remote test
-                cls.remote_test.setUpClass(cls.tempdir)
+            # set up remote test
+            cls.remote_test.setUpClass(cls.tempdir)
 
 
-            @classmethod
-            def tearDownClass(cls):
-                # tear down remote test
-                cls.remote_test.tearDownClass()
+        @classmethod
+        def tearDownClass(cls):
+            # tear down remote test
+            cls.remote_test.tearDownClass()
 
 
-                # stop remote process
-                cls.remote_test.quit_remote()
+            # stop remote process
+            cls.remote_test.quit_remote()
 
 
-                # tear down your test case
-                super(MyTestCase, cls).tearDownClass()
+            # tear down your test case
+            super(MyTestCase, cls).tearDownClass()
     """
 
     def __init__(self):
     """
 
     def __init__(self):
@@ -408,10 +405,10 @@ class RemoteVppTestCase(VppTestCase):
     def setUpClass(cls, tempdir):
         # disable features unsupported in remote VPP
         orig_env = dict(os.environ)
     def setUpClass(cls, tempdir):
         # disable features unsupported in remote VPP
         orig_env = dict(os.environ)
-        if 'STEP' in os.environ:
-            del os.environ['STEP']
-        if 'DEBUG' in os.environ:
-            del os.environ['DEBUG']
+        if "STEP" in os.environ:
+            del os.environ["STEP"]
+        if "DEBUG" in os.environ:
+            del os.environ["DEBUG"]
         cls.tempdir_prefix = os.path.basename(tempdir) + "/"
         super(RemoteVppTestCase, cls).setUpClass()
         os.environ = orig_env
         cls.tempdir_prefix = os.path.basename(tempdir) + "/"
         super(RemoteVppTestCase, cls).setUpClass()
         os.environ = orig_env
@@ -422,7 +419,7 @@ class RemoteVppTestCase(VppTestCase):
 
     @unittest.skip("Empty test")
     def emptyTest(self):
 
     @unittest.skip("Empty test")
     def emptyTest(self):
-        """ Do nothing """
+        """Do nothing"""
         pass
 
     def setTestFunctionInfo(self, name, doc):
         pass
 
     def setTestFunctionInfo(self, name, doc):
index 0ccdec7..2e8f17d 100644 (file)
@@ -1,5 +1,5 @@
 #
 #
-# This file is autogenerated by pip-compile with python 3.8
+# This file is autogenerated by pip-compile with python 3.7
 # To update, run:
 #
 #    make test-refresh-deps (or update requirements.txt)
 # To update, run:
 #
 #    make test-refresh-deps (or update requirements.txt)
@@ -12,10 +12,35 @@ attrs==21.4.0 \
     --hash=sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4 \
     --hash=sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd
     # via jsonschema
     --hash=sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4 \
     --hash=sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd
     # via jsonschema
-babel==2.9.1 \
-    --hash=sha256:ab49e12b91d937cd11f0b67cb259a57ab4ad2b59ac7a3b41d6c06c0ac5b0def9 \
-    --hash=sha256:bc0c176f9f6a994582230df350aa6e05ba2ebe4b3ac317eab29d9be5d2768da0
+babel==2.10.1 \
+    --hash=sha256:3f349e85ad3154559ac4930c3918247d319f21910d5ce4b25d439ed8693b98d2 \
+    --hash=sha256:98aeaca086133efb3e1e2aad0396987490c8425929ddbcfe0550184fdc54cd13
     # via sphinx
     # via sphinx
+black==22.3.0 \
+    --hash=sha256:06f9d8846f2340dfac80ceb20200ea5d1b3f181dd0556b47af4e8e0b24fa0a6b \
+    --hash=sha256:10dbe6e6d2988049b4655b2b739f98785a884d4d6b85bc35133a8fb9a2233176 \
+    --hash=sha256:2497f9c2386572e28921fa8bec7be3e51de6801f7459dffd6e62492531c47e09 \
+    --hash=sha256:30d78ba6bf080eeaf0b7b875d924b15cd46fec5fd044ddfbad38c8ea9171043a \
+    --hash=sha256:328efc0cc70ccb23429d6be184a15ce613f676bdfc85e5fe8ea2a9354b4e9015 \
+    --hash=sha256:35020b8886c022ced9282b51b5a875b6d1ab0c387b31a065b84db7c33085ca79 \
+    --hash=sha256:5795a0375eb87bfe902e80e0c8cfaedf8af4d49694d69161e5bd3206c18618bb \
+    --hash=sha256:5891ef8abc06576985de8fa88e95ab70641de6c1fca97e2a15820a9b69e51b20 \
+    --hash=sha256:637a4014c63fbf42a692d22b55d8ad6968a946b4a6ebc385c5505d9625b6a464 \
+    --hash=sha256:67c8301ec94e3bcc8906740fe071391bce40a862b7be0b86fb5382beefecd968 \
+    --hash=sha256:6d2fc92002d44746d3e7db7cf9313cf4452f43e9ea77a2c939defce3b10b5c82 \
+    --hash=sha256:6ee227b696ca60dd1c507be80a6bc849a5a6ab57ac7352aad1ffec9e8b805f21 \
+    --hash=sha256:863714200ada56cbc366dc9ae5291ceb936573155f8bf8e9de92aef51f3ad0f0 \
+    --hash=sha256:9b542ced1ec0ceeff5b37d69838106a6348e60db7b8fdd245294dc1d26136265 \
+    --hash=sha256:a6342964b43a99dbc72f72812bf88cad8f0217ae9acb47c0d4f141a6416d2d7b \
+    --hash=sha256:ad4efa5fad66b903b4a5f96d91461d90b9507a812b3c5de657d544215bb7877a \
+    --hash=sha256:bc58025940a896d7e5356952228b68f793cf5fcb342be703c3a2669a1488cb72 \
+    --hash=sha256:cc1e1de68c8e5444e8f94c3670bb48a2beef0e91dddfd4fcc29595ebd90bb9ce \
+    --hash=sha256:cee3e11161dde1b2a33a904b850b0899e0424cc331b7295f2a9698e79f9a69a0 \
+    --hash=sha256:e3556168e2e5c49629f7b0f377070240bd5511e45e25a4497bb0073d9dda776a \
+    --hash=sha256:e8477ec6bbfe0312c128e74644ac8a02ca06bcdb8982d4ee06f209be28cdf163 \
+    --hash=sha256:ee8f1f7228cce7dffc2b464f07ce769f478968bfb3dd1254a4c2eeed84928aad \
+    --hash=sha256:fd57160949179ec517d32ac2ac898b5f20d68ed1a9c977346efbac9c2f1e779d
+    # via -r requirements.txt
 certifi==2021.10.8 \
     --hash=sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872 \
     --hash=sha256:d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569
 certifi==2021.10.8 \
     --hash=sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872 \
     --hash=sha256:d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569
@@ -72,39 +97,43 @@ cffi==1.15.0 \
     --hash=sha256:fd8a250edc26254fe5b33be00402e6d287f562b6a5b2152dec302fa15bb3e997 \
     --hash=sha256:ffaa5c925128e29efbde7301d8ecaf35c8c60ffbcd6a1ffd3a552177c8e5e796
     # via cryptography
     --hash=sha256:fd8a250edc26254fe5b33be00402e6d287f562b6a5b2152dec302fa15bb3e997 \
     --hash=sha256:ffaa5c925128e29efbde7301d8ecaf35c8c60ffbcd6a1ffd3a552177c8e5e796
     # via cryptography
-charset-normalizer==2.0.11 \
-    --hash=sha256:2842d8f5e82a1f6aa437380934d5e1cd4fcf2003b06fed6940769c164a480a45 \
-    --hash=sha256:98398a9d69ee80548c762ba991a4728bfc3836768ed226b3945908d1a688371c
+charset-normalizer==2.0.12 \
+    --hash=sha256:2857e29ff0d34db842cd7ca3230549d1a697f96ee6d3fb071cfa6c7393832597 \
+    --hash=sha256:6881edbebdb17b39b4eaaa821b438bf6eddffb4468cf344f09f89def34a8b1df
     # via requests
     # via requests
-click==8.0.3 \
-    --hash=sha256:353f466495adaeb40b6b5f592f9f91cb22372351c84caeb068132442a4518ef3 \
-    --hash=sha256:410e932b050f5eed773c4cda94de75971c89cdb3155a72a0831139a79e5ecb5b
-    # via pip-tools
+click==8.1.3 \
+    --hash=sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e \
+    --hash=sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48
+    # via
+    #   black
+    #   pip-tools
 commonmark==0.9.1 \
     --hash=sha256:452f9dc859be7f06631ddcb328b6919c67984aca654e5fefb3914d54691aed60 \
     --hash=sha256:da2f38c92590f83de410ba1a3cbceafbc74fee9def35f9251ba9a971d6d66fd9
     # via recommonmark
 commonmark==0.9.1 \
     --hash=sha256:452f9dc859be7f06631ddcb328b6919c67984aca654e5fefb3914d54691aed60 \
     --hash=sha256:da2f38c92590f83de410ba1a3cbceafbc74fee9def35f9251ba9a971d6d66fd9
     # via recommonmark
-cryptography==36.0.1 \
-    --hash=sha256:0a817b961b46894c5ca8a66b599c745b9a3d9f822725221f0e0fe49dc043a3a3 \
-    --hash=sha256:2d87cdcb378d3cfed944dac30596da1968f88fb96d7fc34fdae30a99054b2e31 \
-    --hash=sha256:30ee1eb3ebe1644d1c3f183d115a8c04e4e603ed6ce8e394ed39eea4a98469ac \
-    --hash=sha256:391432971a66cfaf94b21c24ab465a4cc3e8bf4a939c1ca5c3e3a6e0abebdbcf \
-    --hash=sha256:39bdf8e70eee6b1c7b289ec6e5d84d49a6bfa11f8b8646b5b3dfe41219153316 \
-    --hash=sha256:4caa4b893d8fad33cf1964d3e51842cd78ba87401ab1d2e44556826df849a8ca \
-    --hash=sha256:53e5c1dc3d7a953de055d77bef2ff607ceef7a2aac0353b5d630ab67f7423638 \
-    --hash=sha256:596f3cd67e1b950bc372c33f1a28a0692080625592ea6392987dba7f09f17a94 \
-    --hash=sha256:5d59a9d55027a8b88fd9fd2826c4392bd487d74bf628bb9d39beecc62a644c12 \
-    --hash=sha256:6c0c021f35b421ebf5976abf2daacc47e235f8b6082d3396a2fe3ccd537ab173 \
-    --hash=sha256:73bc2d3f2444bcfeac67dd130ff2ea598ea5f20b40e36d19821b4df8c9c5037b \
-    --hash=sha256:74d6c7e80609c0f4c2434b97b80c7f8fdfaa072ca4baab7e239a15d6d70ed73a \
-    --hash=sha256:7be0eec337359c155df191d6ae00a5e8bbb63933883f4f5dffc439dac5348c3f \
-    --hash=sha256:94ae132f0e40fe48f310bba63f477f14a43116f05ddb69d6fa31e93f05848ae2 \
-    --hash=sha256:bb5829d027ff82aa872d76158919045a7c1e91fbf241aec32cb07956e9ebd3c9 \
-    --hash=sha256:ca238ceb7ba0bdf6ce88c1b74a87bffcee5afbfa1e41e173b1ceb095b39add46 \
-    --hash=sha256:ca28641954f767f9822c24e927ad894d45d5a1e501767599647259cbf030b903 \
-    --hash=sha256:e0344c14c9cb89e76eb6a060e67980c9e35b3f36691e15e1b7a9e58a0a6c6dc3 \
-    --hash=sha256:ebc15b1c22e55c4d5566e3ca4db8689470a0ca2babef8e3a9ee057a8b82ce4b1 \
-    --hash=sha256:ec63da4e7e4a5f924b90af42eddf20b698a70e58d86a72d943857c4c6045b3ee
+cryptography==37.0.1 \
+    --hash=sha256:06bfafa6e53ccbfb7a94be4687b211a025ce0625e3f3c60bb15cd048a18f3ed8 \
+    --hash=sha256:0db5cf21bd7d092baacb576482b0245102cea2d3cf09f09271ce9f69624ecb6f \
+    --hash=sha256:125702572be12bcd318e3a14e9e70acd4be69a43664a75f0397e8650fe3c6cc3 \
+    --hash=sha256:1858eff6246bb8bbc080eee78f3dd1528739e3f416cba5f9914e8631b8df9871 \
+    --hash=sha256:315af6268de72bcfa0bb3401350ce7d921f216e6b60de12a363dad128d9d459f \
+    --hash=sha256:451aaff8b8adf2dd0597cbb1fdcfc8a7d580f33f843b7cce75307a7f20112dd8 \
+    --hash=sha256:58021d6e9b1d88b1105269d0da5e60e778b37dfc0e824efc71343dd003726831 \
+    --hash=sha256:618391152147a1221c87b1b0b7f792cafcfd4b5a685c5c72eeea2ddd29aeceff \
+    --hash=sha256:6d4daf890e674d191757d8d7d60dc3a29c58c72c7a76a05f1c0a326013f47e8b \
+    --hash=sha256:74b55f67f4cf026cb84da7a1b04fc2a1d260193d4ad0ea5e9897c8b74c1e76ac \
+    --hash=sha256:7ceae26f876aabe193b13a0c36d1bb8e3e7e608d17351861b437bd882f617e9f \
+    --hash=sha256:930b829e8a2abaf43a19f38277ae3c5e1ffcf547b936a927d2587769ae52c296 \
+    --hash=sha256:a18ff4bfa9d64914a84d7b06c46eb86e0cc03113470b3c111255aceb6dcaf81d \
+    --hash=sha256:ae1cd29fbe6b716855454e44f4bf743465152e15d2d317303fe3b58ee9e5af7a \
+    --hash=sha256:b1ee5c82cf03b30f6ae4e32d2bcb1e167ef74d6071cbb77c2af30f101d0b360b \
+    --hash=sha256:bf585476fcbcd37bed08072e8e2db3954ce1bfc68087a2dc9c19cfe0b90979ca \
+    --hash=sha256:c4a58eeafbd7409054be41a377e726a7904a17c26f45abf18125d21b1215b08b \
+    --hash=sha256:cce90609e01e1b192fae9e13665058ab46b2ea53a3c05a3ea74a3eb8c3af8857 \
+    --hash=sha256:d610d0ee14dd9109006215c7c0de15eee91230b70a9bce2263461cf7c3720b83 \
+    --hash=sha256:e69a0e36e62279120e648e787b76d79b41e0f9e86c1c636a4f38d415595c722e \
+    --hash=sha256:f095988548ec5095e3750cdb30e6962273d239b1998ba1aac66c0d5bee7111c1 \
+    --hash=sha256:faf0f5456c059c7b1c29441bdd5e988f0ba75bdc3eea776520d8dcb1e30e1b5c
     # via
     #   -r requirements.txt
     #   noiseprotocol
     # via
     #   -r requirements.txt
     #   noiseprotocol
@@ -119,9 +148,9 @@ docutils==0.17.1 \
     #   recommonmark
     #   sphinx
     #   sphinx-rtd-theme
     #   recommonmark
     #   sphinx
     #   sphinx-rtd-theme
-graphviz==0.19.1 \
-    --hash=sha256:09ed0cde452d015fe77c4845a210eb642f28d245f5bc250d4b97808cb8f49078 \
-    --hash=sha256:f34088c08be2ec16279dfa9c3b4ff3d1453c5c67597a33e2819b000e18d4c546
+graphviz==0.20 \
+    --hash=sha256:62c5f48bcc534a45b4588c548ff75e419c1f1f3a33d31a91796ae80a7f581e4a \
+    --hash=sha256:76bdfb73f42e72564ffe9c7299482f9d72f8e6cb8d54bce7b48ab323755e9ba5
     # via objgraph
 idna==3.3 \
     --hash=sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff \
     # via objgraph
 idna==3.3 \
     --hash=sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff \
@@ -131,17 +160,22 @@ imagesize==1.3.0 \
     --hash=sha256:1db2f82529e53c3e929e8926a1fa9235aa82d0bd0c580359c67ec31b2fddaa8c \
     --hash=sha256:cd1750d452385ca327479d45b64d9c7729ecf0b3969a58148298c77092261f9d
     # via sphinx
     --hash=sha256:1db2f82529e53c3e929e8926a1fa9235aa82d0bd0c580359c67ec31b2fddaa8c \
     --hash=sha256:cd1750d452385ca327479d45b64d9c7729ecf0b3969a58148298c77092261f9d
     # via sphinx
-importlib-metadata==4.10.1 \
-    --hash=sha256:899e2a40a8c4a1aec681feef45733de8a6c58f3f6a0dbed2eb6574b4387a77b6 \
-    --hash=sha256:951f0d8a5b7260e9db5e41d429285b5f451e928479f19d80818878527d36e95e
-    # via sphinx
-importlib-resources==5.4.0 \
-    --hash=sha256:33a95faed5fc19b4bc16b29a6eeae248a3fe69dd55d4d229d2b480e23eeaad45 \
-    --hash=sha256:d756e2f85dd4de2ba89be0b21dba2a3bbec2e871a42a3a16719258a11f87506b
+importlib-metadata==4.11.3 \
+    --hash=sha256:1208431ca90a8cca1a6b8af391bb53c1a2db74e5d1cef6ddced95d4b2062edc6 \
+    --hash=sha256:ea4c597ebf37142f827b8f39299579e31685c31d3a438b59f469406afd0f2539
+    # via
+    #   click
+    #   jsonschema
+    #   pep517
+    #   sphinx
+    #   sphinxcontrib-spelling
+importlib-resources==5.7.1 \
+    --hash=sha256:b6062987dfc51f0fcb809187cffbd60f35df7acb4589091f154214af6d0d49d3 \
+    --hash=sha256:e447dc01619b1e951286f3929be820029d48c75eb25d265c28b92a16548212b8
     # via jsonschema
     # via jsonschema
-jinja2==3.0.3 \
-    --hash=sha256:077ce6014f7b40d03b47d1f1ca4b0fc8328a692bd284016f806ed0eaca390ad8 \
-    --hash=sha256:611bb273cd68f3b993fabdc4064fc858c5b47a973cb5aa7999ec1ba405c87cd7
+jinja2==3.1.2 \
+    --hash=sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852 \
+    --hash=sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61
     # via sphinx
 jsonschema==4.4.0 ; python_version >= "3.7" \
     --hash=sha256:636694eb41b3535ed608fe04129f26542b59ed99808b4f688aa32dcf55317a83 \
     # via sphinx
 jsonschema==4.4.0 ; python_version >= "3.7" \
     --hash=sha256:636694eb41b3535ed608fe04129f26542b59ed99808b4f688aa32dcf55317a83 \
@@ -150,77 +184,52 @@ jsonschema==4.4.0 ; python_version >= "3.7" \
 lark-parser==0.6.7 \
     --hash=sha256:062800f3823a6c733ec1d181a2089a22d1f62dbe65f90a3f6b1e6de1934b05ef
     # via syslog-rfc5424-parser
 lark-parser==0.6.7 \
     --hash=sha256:062800f3823a6c733ec1d181a2089a22d1f62dbe65f90a3f6b1e6de1934b05ef
     # via syslog-rfc5424-parser
-markupsafe==2.0.1 \
-    --hash=sha256:01a9b8ea66f1658938f65b93a85ebe8bc016e6769611be228d797c9d998dd298 \
-    --hash=sha256:023cb26ec21ece8dc3907c0e8320058b2e0cb3c55cf9564da612bc325bed5e64 \
-    --hash=sha256:0446679737af14f45767963a1a9ef7620189912317d095f2d9ffa183a4d25d2b \
-    --hash=sha256:04635854b943835a6ea959e948d19dcd311762c5c0c6e1f0e16ee57022669194 \
-    --hash=sha256:0717a7390a68be14b8c793ba258e075c6f4ca819f15edfc2a3a027c823718567 \
-    --hash=sha256:0955295dd5eec6cb6cc2fe1698f4c6d84af2e92de33fbcac4111913cd100a6ff \
-    --hash=sha256:0d4b31cc67ab36e3392bbf3862cfbadac3db12bdd8b02a2731f509ed5b829724 \
-    --hash=sha256:10f82115e21dc0dfec9ab5c0223652f7197feb168c940f3ef61563fc2d6beb74 \
-    --hash=sha256:168cd0a3642de83558a5153c8bd34f175a9a6e7f6dc6384b9655d2697312a646 \
-    --hash=sha256:1d609f577dc6e1aa17d746f8bd3c31aa4d258f4070d61b2aa5c4166c1539de35 \
-    --hash=sha256:1f2ade76b9903f39aa442b4aadd2177decb66525062db244b35d71d0ee8599b6 \
-    --hash=sha256:20dca64a3ef2d6e4d5d615a3fd418ad3bde77a47ec8a23d984a12b5b4c74491a \
-    --hash=sha256:2a7d351cbd8cfeb19ca00de495e224dea7e7d919659c2841bbb7f420ad03e2d6 \
-    --hash=sha256:2d7d807855b419fc2ed3e631034685db6079889a1f01d5d9dac950f764da3dad \
-    --hash=sha256:2ef54abee730b502252bcdf31b10dacb0a416229b72c18b19e24a4509f273d26 \
-    --hash=sha256:36bc903cbb393720fad60fc28c10de6acf10dc6cc883f3e24ee4012371399a38 \
-    --hash=sha256:37205cac2a79194e3750b0af2a5720d95f786a55ce7df90c3af697bfa100eaac \
-    --hash=sha256:3c112550557578c26af18a1ccc9e090bfe03832ae994343cfdacd287db6a6ae7 \
-    --hash=sha256:3dd007d54ee88b46be476e293f48c85048603f5f516008bee124ddd891398ed6 \
-    --hash=sha256:4296f2b1ce8c86a6aea78613c34bb1a672ea0e3de9c6ba08a960efe0b0a09047 \
-    --hash=sha256:47ab1e7b91c098ab893b828deafa1203de86d0bc6ab587b160f78fe6c4011f75 \
-    --hash=sha256:49e3ceeabbfb9d66c3aef5af3a60cc43b85c33df25ce03d0031a608b0a8b2e3f \
-    --hash=sha256:4dc8f9fb58f7364b63fd9f85013b780ef83c11857ae79f2feda41e270468dd9b \
-    --hash=sha256:4efca8f86c54b22348a5467704e3fec767b2db12fc39c6d963168ab1d3fc9135 \
-    --hash=sha256:53edb4da6925ad13c07b6d26c2a852bd81e364f95301c66e930ab2aef5b5ddd8 \
-    --hash=sha256:5855f8438a7d1d458206a2466bf82b0f104a3724bf96a1c781ab731e4201731a \
-    --hash=sha256:594c67807fb16238b30c44bdf74f36c02cdf22d1c8cda91ef8a0ed8dabf5620a \
-    --hash=sha256:5b6d930f030f8ed98e3e6c98ffa0652bdb82601e7a016ec2ab5d7ff23baa78d1 \
-    --hash=sha256:5bb28c636d87e840583ee3adeb78172efc47c8b26127267f54a9c0ec251d41a9 \
-    --hash=sha256:60bf42e36abfaf9aff1f50f52644b336d4f0a3fd6d8a60ca0d054ac9f713a864 \
-    --hash=sha256:611d1ad9a4288cf3e3c16014564df047fe08410e628f89805e475368bd304914 \
-    --hash=sha256:6300b8454aa6930a24b9618fbb54b5a68135092bc666f7b06901f897fa5c2fee \
-    --hash=sha256:63f3268ba69ace99cab4e3e3b5840b03340efed0948ab8f78d2fd87ee5442a4f \
-    --hash=sha256:6557b31b5e2c9ddf0de32a691f2312a32f77cd7681d8af66c2692efdbef84c18 \
-    --hash=sha256:693ce3f9e70a6cf7d2fb9e6c9d8b204b6b39897a2c4a1aa65728d5ac97dcc1d8 \
-    --hash=sha256:6a7fae0dd14cf60ad5ff42baa2e95727c3d81ded453457771d02b7d2b3f9c0c2 \
-    --hash=sha256:6c4ca60fa24e85fe25b912b01e62cb969d69a23a5d5867682dd3e80b5b02581d \
-    --hash=sha256:6fcf051089389abe060c9cd7caa212c707e58153afa2c649f00346ce6d260f1b \
-    --hash=sha256:7d91275b0245b1da4d4cfa07e0faedd5b0812efc15b702576d103293e252af1b \
-    --hash=sha256:89c687013cb1cd489a0f0ac24febe8c7a666e6e221b783e53ac50ebf68e45d86 \
-    --hash=sha256:8d206346619592c6200148b01a2142798c989edcb9c896f9ac9722a99d4e77e6 \
-    --hash=sha256:905fec760bd2fa1388bb5b489ee8ee5f7291d692638ea5f67982d968366bef9f \
-    --hash=sha256:97383d78eb34da7e1fa37dd273c20ad4320929af65d156e35a5e2d89566d9dfb \
-    --hash=sha256:984d76483eb32f1bcb536dc27e4ad56bba4baa70be32fa87152832cdd9db0833 \
-    --hash=sha256:99df47edb6bda1249d3e80fdabb1dab8c08ef3975f69aed437cb69d0a5de1e28 \
-    --hash=sha256:9f02365d4e99430a12647f09b6cc8bab61a6564363f313126f775eb4f6ef798e \
-    --hash=sha256:a30e67a65b53ea0a5e62fe23682cfe22712e01f453b95233b25502f7c61cb415 \
-    --hash=sha256:ab3ef638ace319fa26553db0624c4699e31a28bb2a835c5faca8f8acf6a5a902 \
-    --hash=sha256:aca6377c0cb8a8253e493c6b451565ac77e98c2951c45f913e0b52facdcff83f \
-    --hash=sha256:add36cb2dbb8b736611303cd3bfcee00afd96471b09cda130da3581cbdc56a6d \
-    --hash=sha256:b2f4bf27480f5e5e8ce285a8c8fd176c0b03e93dcc6646477d4630e83440c6a9 \
-    --hash=sha256:b7f2d075102dc8c794cbde1947378051c4e5180d52d276987b8d28a3bd58c17d \
-    --hash=sha256:baa1a4e8f868845af802979fcdbf0bb11f94f1cb7ced4c4b8a351bb60d108145 \
-    --hash=sha256:be98f628055368795d818ebf93da628541e10b75b41c559fdf36d104c5787066 \
-    --hash=sha256:bf5d821ffabf0ef3533c39c518f3357b171a1651c1ff6827325e4489b0e46c3c \
-    --hash=sha256:c47adbc92fc1bb2b3274c4b3a43ae0e4573d9fbff4f54cd484555edbf030baf1 \
-    --hash=sha256:cdfba22ea2f0029c9261a4bd07e830a8da012291fbe44dc794e488b6c9bb353a \
-    --hash=sha256:d6c7ebd4e944c85e2c3421e612a7057a2f48d478d79e61800d81468a8d842207 \
-    --hash=sha256:d7f9850398e85aba693bb640262d3611788b1f29a79f0c93c565694658f4071f \
-    --hash=sha256:d8446c54dc28c01e5a2dbac5a25f071f6653e6e40f3a8818e8b45d790fe6ef53 \
-    --hash=sha256:deb993cacb280823246a026e3b2d81c493c53de6acfd5e6bfe31ab3402bb37dd \
-    --hash=sha256:e0f138900af21926a02425cf736db95be9f4af72ba1bb21453432a07f6082134 \
-    --hash=sha256:e9936f0b261d4df76ad22f8fee3ae83b60d7c3e871292cd42f40b81b70afae85 \
-    --hash=sha256:f0567c4dc99f264f49fe27da5f735f414c4e7e7dd850cfd8e69f0862d7c74ea9 \
-    --hash=sha256:f5653a225f31e113b152e56f154ccbe59eeb1c7487b39b9d9f9cdb58e6c79dc5 \
-    --hash=sha256:f826e31d18b516f653fe296d967d700fddad5901ae07c622bb3705955e1faa94 \
-    --hash=sha256:f8ba0e8349a38d3001fae7eadded3f6606f0da5d748ee53cc1dab1d6527b9509 \
-    --hash=sha256:f9081981fe268bd86831e5c75f7de206ef275defcb82bc70740ae6dc507aee51 \
-    --hash=sha256:fa130dd50c57d53368c9d59395cb5526eda596d3ffe36666cd81a44d56e48872
+markupsafe==2.1.1 \
+    --hash=sha256:0212a68688482dc52b2d45013df70d169f542b7394fc744c02a57374a4207003 \
+    --hash=sha256:089cf3dbf0cd6c100f02945abeb18484bd1ee57a079aefd52cffd17fba910b88 \
+    --hash=sha256:10c1bfff05d95783da83491be968e8fe789263689c02724e0c691933c52994f5 \
+    --hash=sha256:33b74d289bd2f5e527beadcaa3f401e0df0a89927c1559c8566c066fa4248ab7 \
+    --hash=sha256:3799351e2336dc91ea70b034983ee71cf2f9533cdff7c14c90ea126bfd95d65a \
+    --hash=sha256:3ce11ee3f23f79dbd06fb3d63e2f6af7b12db1d46932fe7bd8afa259a5996603 \
+    --hash=sha256:421be9fbf0ffe9ffd7a378aafebbf6f4602d564d34be190fc19a193232fd12b1 \
+    --hash=sha256:43093fb83d8343aac0b1baa75516da6092f58f41200907ef92448ecab8825135 \
+    --hash=sha256:46d00d6cfecdde84d40e572d63735ef81423ad31184100411e6e3388d405e247 \
+    --hash=sha256:4a33dea2b688b3190ee12bd7cfa29d39c9ed176bda40bfa11099a3ce5d3a7ac6 \
+    --hash=sha256:4b9fe39a2ccc108a4accc2676e77da025ce383c108593d65cc909add5c3bd601 \
+    --hash=sha256:56442863ed2b06d19c37f94d999035e15ee982988920e12a5b4ba29b62ad1f77 \
+    --hash=sha256:671cd1187ed5e62818414afe79ed29da836dde67166a9fac6d435873c44fdd02 \
+    --hash=sha256:694deca8d702d5db21ec83983ce0bb4b26a578e71fbdbd4fdcd387daa90e4d5e \
+    --hash=sha256:6a074d34ee7a5ce3effbc526b7083ec9731bb3cbf921bbe1d3005d4d2bdb3a63 \
+    --hash=sha256:6d0072fea50feec76a4c418096652f2c3238eaa014b2f94aeb1d56a66b41403f \
+    --hash=sha256:6fbf47b5d3728c6aea2abb0589b5d30459e369baa772e0f37a0320185e87c980 \
+    --hash=sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b \
+    --hash=sha256:86b1f75c4e7c2ac2ccdaec2b9022845dbb81880ca318bb7a0a01fbf7813e3812 \
+    --hash=sha256:8dc1c72a69aa7e082593c4a203dcf94ddb74bb5c8a731e4e1eb68d031e8498ff \
+    --hash=sha256:8e3dcf21f367459434c18e71b2a9532d96547aef8a871872a5bd69a715c15f96 \
+    --hash=sha256:8e576a51ad59e4bfaac456023a78f6b5e6e7651dcd383bcc3e18d06f9b55d6d1 \
+    --hash=sha256:96e37a3dc86e80bf81758c152fe66dbf60ed5eca3d26305edf01892257049925 \
+    --hash=sha256:97a68e6ada378df82bc9f16b800ab77cbf4b2fada0081794318520138c088e4a \
+    --hash=sha256:99a2a507ed3ac881b975a2976d59f38c19386d128e7a9a18b7df6fff1fd4c1d6 \
+    --hash=sha256:a49907dd8420c5685cfa064a1335b6754b74541bbb3706c259c02ed65b644b3e \
+    --hash=sha256:b09bf97215625a311f669476f44b8b318b075847b49316d3e28c08e41a7a573f \
+    --hash=sha256:b7bd98b796e2b6553da7225aeb61f447f80a1ca64f41d83612e6139ca5213aa4 \
+    --hash=sha256:b87db4360013327109564f0e591bd2a3b318547bcef31b468a92ee504d07ae4f \
+    --hash=sha256:bcb3ed405ed3222f9904899563d6fc492ff75cce56cba05e32eff40e6acbeaa3 \
+    --hash=sha256:d4306c36ca495956b6d568d276ac11fdd9c30a36f1b6eb928070dc5360b22e1c \
+    --hash=sha256:d5ee4f386140395a2c818d149221149c54849dfcfcb9f1debfe07a8b8bd63f9a \
+    --hash=sha256:dda30ba7e87fbbb7eab1ec9f58678558fd9a6b8b853530e176eabd064da81417 \
+    --hash=sha256:e04e26803c9c3851c931eac40c695602c6295b8d432cbe78609649ad9bd2da8a \
+    --hash=sha256:e1c0b87e09fa55a220f058d1d49d3fb8df88fbfab58558f1198e08c1e1de842a \
+    --hash=sha256:e72591e9ecd94d7feb70c1cbd7be7b3ebea3f548870aa91e2732960fa4d57a37 \
+    --hash=sha256:e8c843bbcda3a2f1e3c2ab25913c80a3c5376cd00c6e8c4a86a89a28c8dc5452 \
+    --hash=sha256:efc1913fd2ca4f334418481c7e595c00aad186563bbc1ec76067848c7ca0a933 \
+    --hash=sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a \
+    --hash=sha256:fc7b548b17d238737688817ab67deebb30e8073c95749d55538ed473130ec0c7
     # via jinja2
     # via jinja2
+mypy-extensions==0.4.3 \
+    --hash=sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d \
+    --hash=sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8
+    # via black
 noiseprotocol==0.3.1 \
     --hash=sha256:2e1a603a38439636cf0ffd8b3e8b12cee27d368a28b41be7dbe568b2abb23111 \
     --hash=sha256:b092a871b60f6a8f07f17950dc9f7098c8fe7d715b049bd4c24ee3752b90d645
 noiseprotocol==0.3.1 \
     --hash=sha256:2e1a603a38439636cf0ffd8b3e8b12cee27d368a28b41be7dbe568b2abb23111 \
     --hash=sha256:b092a871b60f6a8f07f17950dc9f7098c8fe7d715b049bd4c24ee3752b90d645
@@ -239,6 +248,10 @@ parameterized==0.8.1 \
     --hash=sha256:41bbff37d6186430f77f900d777e5bb6a24928a1c46fb1de692f8b52b8833b5c \
     --hash=sha256:9cbb0b69a03e8695d68b3399a8a5825200976536fe1cb79db60ed6a4c8c9efe9
     # via -r requirements.txt
     --hash=sha256:41bbff37d6186430f77f900d777e5bb6a24928a1c46fb1de692f8b52b8833b5c \
     --hash=sha256:9cbb0b69a03e8695d68b3399a8a5825200976536fe1cb79db60ed6a4c8c9efe9
     # via -r requirements.txt
+pathspec==0.9.0 \
+    --hash=sha256:7d15c4ddb0b5c802d161efc417ec1a2558ea2653c2e8ad9c19098201dc1c993a \
+    --hash=sha256:e564499435a2673d586f6b2130bb5b95f04a3ba06f81b8f895b651a3c76aabb1
+    # via black
 pep517==0.12.0 \
     --hash=sha256:931378d93d11b298cf511dd634cf5ea4cb249a28ef84160b3247ee9afb4e8ab0 \
     --hash=sha256:dd884c326898e2c6e11f9e0b64940606a93eb10ea022a2e067959f3a110cf161
 pep517==0.12.0 \
     --hash=sha256:931378d93d11b298cf511dd634cf5ea4cb249a28ef84160b3247ee9afb4e8ab0 \
     --hash=sha256:dd884c326898e2c6e11f9e0b64940606a93eb10ea022a2e067959f3a110cf161
@@ -247,10 +260,14 @@ pexpect==4.8.0 \
     --hash=sha256:0b48a55dcb3c05f3329815901ea4fc1537514d6ba867a152b581d69ae3710937 \
     --hash=sha256:fc65a43959d153d0114afe13997d439c22823a27cefceb5ff35c2178c6784c0c
     # via -r requirements.txt
     --hash=sha256:0b48a55dcb3c05f3329815901ea4fc1537514d6ba867a152b581d69ae3710937 \
     --hash=sha256:fc65a43959d153d0114afe13997d439c22823a27cefceb5ff35c2178c6784c0c
     # via -r requirements.txt
-pip-tools==6.5.0 \
-    --hash=sha256:9cf69a020e3c208a7a1bcc78cbfd436dab323efc187919df6182eca98efbe3f2 \
-    --hash=sha256:d14ea4fc2c118db2a6af65a4345a8b9b355e792aedad6bf64dd3eb97c5fc5fee
+pip-tools==6.6.0 \
+    --hash=sha256:66318bc2e884b61fafa1cb2cf01b35fdd779ab9ce82cc1bce277adb8cf3ab845 \
+    --hash=sha256:98aa24004440a1c0489d71a567a4e8afdf23c7782bff483d1219881e7302de83
     # via -r requirements.txt
     # via -r requirements.txt
+platformdirs==2.5.2 \
+    --hash=sha256:027d8e83a2d7de06bbac4e5ef7e023c02b863d7ea5d079477e722bb41ab25788 \
+    --hash=sha256:58c8abb07dcb441e6ee4b11d8df0ac856038f944ab98b7be6b27b2a3c7feef19
+    # via black
 psutil==5.9.0 \
     --hash=sha256:072664401ae6e7c1bfb878c65d7282d4b4391f1bc9a56d5e03b5a490403271b5 \
     --hash=sha256:1070a9b287846a21a5d572d6dddd369517510b68710fca56b0e9e02fd24bed9a \
 psutil==5.9.0 \
     --hash=sha256:072664401ae6e7c1bfb878c65d7282d4b4391f1bc9a56d5e03b5a490403271b5 \
     --hash=sha256:1070a9b287846a21a5d572d6dddd369517510b68710fca56b0e9e02fd24bed9a \
@@ -289,10 +306,6 @@ ptyprocess==0.7.0 \
     --hash=sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35 \
     --hash=sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220
     # via pexpect
     --hash=sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35 \
     --hash=sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220
     # via pexpect
-pycodestyle==2.8.0 \
-    --hash=sha256:720f8b39dde8b293825e7ff02c475f3077124006db4f440dcbc9a20b76548a20 \
-    --hash=sha256:eddd5847ef438ea1c7870ca7eb78a9d47ce0cdb4851a5523949f2601d0cbbe7f
-    # via -r requirements.txt
 pycparser==2.21 \
     --hash=sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9 \
     --hash=sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206
 pycparser==2.21 \
     --hash=sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9 \
     --hash=sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206
@@ -303,17 +316,17 @@ pyenchant==3.2.2 \
     --hash=sha256:5facc821ece957208a81423af7d6ec7810dad29697cb0d77aae81e4e11c8e5a6 \
     --hash=sha256:6153f521852e23a5add923dbacfbf4bebbb8d70c4e4bad609a8e0f9faeb915d1
     # via sphinxcontrib-spelling
     --hash=sha256:5facc821ece957208a81423af7d6ec7810dad29697cb0d77aae81e4e11c8e5a6 \
     --hash=sha256:6153f521852e23a5add923dbacfbf4bebbb8d70c4e4bad609a8e0f9faeb915d1
     # via sphinxcontrib-spelling
-pygments==2.11.2 \
-    --hash=sha256:44238f1b60a76d78fc8ca0528ee429702aae011c265fe6a8dd8b63049ae41c65 \
-    --hash=sha256:4e426f72023d88d03b2fa258de560726ce890ff3b630f88c21cbb8b2503b8c6a
+pygments==2.12.0 \
+    --hash=sha256:5eb116118f9612ff1ee89ac96437bb6b49e8f04d8a13b514ba26f620208e26eb \
+    --hash=sha256:dc9c10fb40944260f6ed4c688ece0cd2048414940f1cea51b8b226318411c519
     # via sphinx
 pympler==1.0.1 \
     --hash=sha256:993f1a3599ca3f4fcd7160c7545ad06310c9e12f70174ae7ae8d4e25f6c5d3fa \
     --hash=sha256:d260dda9ae781e1eab6ea15bacb84015849833ba5555f141d2d9b7b7473b307d
     # via -r requirements.txt
     # via sphinx
 pympler==1.0.1 \
     --hash=sha256:993f1a3599ca3f4fcd7160c7545ad06310c9e12f70174ae7ae8d4e25f6c5d3fa \
     --hash=sha256:d260dda9ae781e1eab6ea15bacb84015849833ba5555f141d2d9b7b7473b307d
     # via -r requirements.txt
-pyparsing==3.0.7 \
-    --hash=sha256:18ee9022775d270c55187733956460083db60b37d0d0fb357445f3094eed3eea \
-    --hash=sha256:a6c06a88f252e6c322f65faf8f418b16213b51bdfaece0524c1c1bc30c63c484
+pyparsing==3.0.8 \
+    --hash=sha256:7bf433498c016c4314268d95df76c81b842a4cb2b276fa3312cfb1e1d85f6954 \
+    --hash=sha256:ef7b523f6356f763771559412c0d7134753f037822dad1b16945b7b846f7ad06
     # via packaging
 pyrsistent==0.18.1 \
     --hash=sha256:0e3e1fcc45199df76053026a51cc59ab2ea3fc7c094c6627e93b7b44cdae2c8c \
     # via packaging
 pyrsistent==0.18.1 \
     --hash=sha256:0e3e1fcc45199df76053026a51cc59ab2ea3fc7c094c6627e93b7b44cdae2c8c \
@@ -338,9 +351,9 @@ pyrsistent==0.18.1 \
     --hash=sha256:f87cc2863ef33c709e237d4b5f4502a62a00fab450c9e020892e8e2ede5847f5 \
     --hash=sha256:fd8da6d0124efa2f67d86fa70c851022f87c98e205f0594e1fae044e7119a5a6
     # via jsonschema
     --hash=sha256:f87cc2863ef33c709e237d4b5f4502a62a00fab450c9e020892e8e2ede5847f5 \
     --hash=sha256:fd8da6d0124efa2f67d86fa70c851022f87c98e205f0594e1fae044e7119a5a6
     # via jsonschema
-pytz==2021.3 \
-    --hash=sha256:3672058bc3453457b622aab7a1c3bfd5ab0bdae451512f6cf25f64ed37f5b87c \
-    --hash=sha256:acad2d8b20a1af07d4e4c9d2e9285c5ed9104354062f275f3fcd88dcef4f1326
+pytz==2022.1 \
+    --hash=sha256:1e760e2fe6a8163bc0b3d9a19c4f84342afa0a2affebfaa84b01b978a02ecaa7 \
+    --hash=sha256:e68985985296d9a66a881eb3193b0906246245294a881e7c8afe623866ac6a5c
     # via babel
 pyyaml==6.0 \
     --hash=sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293 \
     # via babel
 pyyaml==6.0 \
     --hash=sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293 \
@@ -396,9 +409,9 @@ snowballstemmer==2.2.0 \
     --hash=sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1 \
     --hash=sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a
     # via sphinx
     --hash=sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1 \
     --hash=sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a
     # via sphinx
-sphinx==4.4.0 \
-    --hash=sha256:5da895959511473857b6d0200f56865ed62c31e8f82dd338063b84ec022701fe \
-    --hash=sha256:6caad9786055cb1fa22b4a365c1775816b876f91966481765d7d50e9f0dd35cc
+sphinx==4.5.0 \
+    --hash=sha256:7bf8ca9637a4ee15af412d1a1d9689fec70523a68ca9bb9127c2f3eeb344e2e6 \
+    --hash=sha256:ebf612653238bcc8f4359627a9b7ce44ede6fdd75d9d30f68255c7383d3a6226
     # via
     #   -r requirements.txt
     #   recommonmark
     # via
     #   -r requirements.txt
     #   recommonmark
@@ -432,32 +445,68 @@ sphinxcontrib-serializinghtml==1.1.5 \
     --hash=sha256:352a9a00ae864471d3a7ead8d7d79f5fc0b57e8b3f95e9867eb9eb28999b92fd \
     --hash=sha256:aa5f6de5dfdf809ef505c4895e51ef5c9eac17d0f287933eb49ec495280b6952
     # via sphinx
     --hash=sha256:352a9a00ae864471d3a7ead8d7d79f5fc0b57e8b3f95e9867eb9eb28999b92fd \
     --hash=sha256:aa5f6de5dfdf809ef505c4895e51ef5c9eac17d0f287933eb49ec495280b6952
     # via sphinx
-sphinxcontrib-spelling==7.3.2 \
-    --hash=sha256:1b99cdb1a30271c7080ec5b968dfc243c2540a960afdc4c052cd59dfe8d94c54 \
-    --hash=sha256:9d66dc4990749c5ac52e7eaf17e82f4dc6b4aff6515d26bbf48821829d41bd02
+sphinxcontrib-spelling==7.3.3 \
+    --hash=sha256:3819d12629d95e0c909224fa40b462a67e0adb321d50283d7fc0d11686c8ac7e \
+    --hash=sha256:8809d5dc175f43f00628134a41ef9fec56db9f794f4eab701f9a5a87f8c69bb0
     # via -r requirements.txt
 syslog-rfc5424-parser==0.3.2 \
     --hash=sha256:6134ee1958da89ab7f8d32ed5370a49ddabcc99d75a950b6ec59708417f20a7a \
     --hash=sha256:80a9239d4da404a271266000f4c5f00a183af3d03d53d19d7052c8272430bee9
     # via -r requirements.txt
     # via -r requirements.txt
 syslog-rfc5424-parser==0.3.2 \
     --hash=sha256:6134ee1958da89ab7f8d32ed5370a49ddabcc99d75a950b6ec59708417f20a7a \
     --hash=sha256:80a9239d4da404a271266000f4c5f00a183af3d03d53d19d7052c8272430bee9
     # via -r requirements.txt
-tomli==2.0.0 \
-    --hash=sha256:b5bde28da1fed24b9bd1d4d2b8cba62300bfb4ec9a6187a957e8ddb9434c5224 \
-    --hash=sha256:c292c34f58502a1eb2bbb9f5bbc9a5ebc37bee10ffb8c2d6bbdfa8eb13cc14e1
-    # via pep517
-urllib3==1.26.8 \
-    --hash=sha256:000ca7f471a233c2251c6c7023ee85305721bfdf18621ebff4fd17a8653427ed \
-    --hash=sha256:0e7c33d9a63e7ddfcb86780aac87befc2fbddf46c58dbb487e0855f7ceec283c
+tomli==2.0.1 \
+    --hash=sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc \
+    --hash=sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f
+    # via
+    #   black
+    #   pep517
+typed-ast==1.5.3 \
+    --hash=sha256:20d5118e494478ef2d3a2702d964dae830aedd7b4d3b626d003eea526be18718 \
+    --hash=sha256:27e46cdd01d6c3a0dd8f728b6a938a6751f7bd324817501c15fb056307f918c6 \
+    --hash=sha256:27f25232e2dd0edfe1f019d6bfaaf11e86e657d9bdb7b0956db95f560cceb2b3 \
+    --hash=sha256:3042bfc9ca118712c9809201f55355479cfcdc17449f9f8db5e744e9625c6805 \
+    --hash=sha256:37e5349d1d5de2f4763d534ccb26809d1c24b180a477659a12c4bde9dd677d74 \
+    --hash=sha256:4fff9fdcce59dc61ec1b317bdb319f8f4e6b69ebbe61193ae0a60c5f9333dc49 \
+    --hash=sha256:542cd732351ba8235f20faa0fc7398946fe1a57f2cdb289e5497e1e7f48cfedb \
+    --hash=sha256:5dc2c11ae59003d4a26dda637222d9ae924387f96acae9492df663843aefad55 \
+    --hash=sha256:8831479695eadc8b5ffed06fdfb3e424adc37962a75925668deeb503f446c0a3 \
+    --hash=sha256:8cdf91b0c466a6c43f36c1964772918a2c04cfa83df8001ff32a89e357f8eb06 \
+    --hash=sha256:8e0b8528838ffd426fea8d18bde4c73bcb4167218998cc8b9ee0a0f2bfe678a6 \
+    --hash=sha256:8ef1d96ad05a291f5c36895d86d1375c0ee70595b90f6bb5f5fdbee749b146db \
+    --hash=sha256:9ad3b48cf2b487be140072fb86feff36801487d4abb7382bb1929aaac80638ea \
+    --hash=sha256:9cc9e1457e1feb06b075c8ef8aeb046a28ec351b1958b42c7c31c989c841403a \
+    --hash=sha256:9e237e74fd321a55c90eee9bc5d44be976979ad38a29bbd734148295c1ce7617 \
+    --hash=sha256:c9f1a27592fac87daa4e3f16538713d705599b0a27dfe25518b80b6b017f0a6d \
+    --hash=sha256:d64dabc6336ddc10373922a146fa2256043b3b43e61f28961caec2a5207c56d5 \
+    --hash=sha256:e20d196815eeffb3d76b75223e8ffed124e65ee62097e4e73afb5fec6b993e7a \
+    --hash=sha256:e34f9b9e61333ecb0f7d79c21c28aa5cd63bec15cb7e1310d7d3da6ce886bc9b \
+    --hash=sha256:ed44e81517364cb5ba367e4f68fca01fba42a7a4690d40c07886586ac267d9b9 \
+    --hash=sha256:ee852185964744987609b40aee1d2eb81502ae63ee8eef614558f96a56c1902d \
+    --hash=sha256:f60d9de0d087454c91b3999a296d0c4558c1666771e3460621875021bf899af9 \
+    --hash=sha256:f818c5b81966d4728fec14caa338e30a70dfc3da577984d38f97816c4b3071ec \
+    --hash=sha256:fd5df1313915dbd70eaaa88c19030b441742e8b05e6103c631c83b75e0435ccc
+    # via black
+typing-extensions==4.2.0 \
+    --hash=sha256:6657594ee297170d19f67d55c05852a874e7eb634f4f753dbd667855e07c1708 \
+    --hash=sha256:f1c24655a0da0d1b67f07e17a5e6b2a105894e6824b92096378bb3668ef02376
+    # via
+    #   black
+    #   importlib-metadata
+    #   jsonschema
+urllib3==1.26.9 \
+    --hash=sha256:44ece4d53fb1706f667c9bd1c648f5469a2ec925fcf3a776667042d645472c14 \
+    --hash=sha256:aabaf16477806a5e1dd19aa41f8c2b7950dd3c746362d7e3223dbe6de6ac448e
     # via requests
 wheel==0.37.1 \
     --hash=sha256:4bdcd7d840138086126cd09254dc6195fb4fc6f01c050a1d7236f2630db1d22a \
     --hash=sha256:e9a504e793efbca1b8e0e9cb979a249cf4a0a7b5b8c9e8b65a5e39d49529c1c4
     # via pip-tools
     # via requests
 wheel==0.37.1 \
     --hash=sha256:4bdcd7d840138086126cd09254dc6195fb4fc6f01c050a1d7236f2630db1d22a \
     --hash=sha256:e9a504e793efbca1b8e0e9cb979a249cf4a0a7b5b8c9e8b65a5e39d49529c1c4
     # via pip-tools
-zipp==3.7.0 \
-    --hash=sha256:9f50f446828eb9d45b267433fd3e9da8d801f614129124863f9c51ebceafb87d \
-    --hash=sha256:b47250dd24f92b7dd6a0a8fc5244da14608f3ca90a5efcd37a3b1642fac9a375
+zipp==3.8.0 \
+    --hash=sha256:56bf8aadb83c24db6c4b577e13de374ccfb67da2078beba1d037c17980bf43ad \
+    --hash=sha256:c4f6e5bbf48e74f7a38e7cc5b0480ff42b0ae5178957d564d18932525d5cf099
     # via
     #   importlib-metadata
     #   importlib-resources
     # via
     #   importlib-metadata
     #   importlib-resources
+    #   pep517
 
 # WARNING: The following packages were not pinned, but pip requires them to be
 # pinned when the requirements file includes hashes. Consider using the --allow-unsafe flag.
 
 # WARNING: The following packages were not pinned, but pip requires them to be
 # pinned when the requirements file includes hashes. Consider using the --allow-unsafe flag.
index 7df3793..a177967 100644 (file)
@@ -1,4 +1,4 @@
-pip-tools==6.5.0                        # BSD   Keep this in sync with Makefile's PIP_TOOLS_VERSION
+pip-tools==6.6.0                        # BSD   Keep this in sync with Makefile's PIP_TOOLS_VERSION
 cryptography!=2.0                       # BSD/Apache-2.0
 deprecation>=2.0.6                      # Apache-2.0
 faulthandler; python_version < '3.3' #  # BSD License (2 clause)
 cryptography!=2.0                       # BSD/Apache-2.0
 deprecation>=2.0.6                      # Apache-2.0
 faulthandler; python_version < '3.3' #  # BSD License (2 clause)
@@ -6,7 +6,6 @@ ipaddress; python_version < '3.3'       # PSF
 parameterized>=0.6.1                    # BSD
 pexpect                                 # ISC
 psutil                                  # BSD
 parameterized>=0.6.1                    # BSD
 pexpect                                 # ISC
 psutil                                  # BSD
-pycodestyle                             # MIT (Expat license)       https://pypi.org/project/pycodestyle/
 scapy==2.4.3; python_version >= '2.7' or python_version >= '3.4'    # GPL2  https://github.com/secdev/scapy/blob/master/LICENSE
 six                                     # MIT
 syslog_rfc5424_parser>=0.3.1            # ISC
 scapy==2.4.3; python_version >= '2.7' or python_version >= '3.4'    # GPL2  https://github.com/secdev/scapy/blob/master/LICENSE
 six                                     # MIT
 syslog_rfc5424_parser>=0.3.1            # ISC
@@ -20,3 +19,4 @@ recommonmark                            # MIT
 pyyaml                                  # MIT
 jsonschema; python_version >= '3.7'     # MIT
 dataclasses; python_version == '3.6'    # Apache-2.0
 pyyaml                                  # MIT
 jsonschema; python_version >= '3.7'     # MIT
 dataclasses; python_version == '3.6'    # Apache-2.0
+black                                   # MIT https://github.com/psf/black
index 8cb631e..5df37ef 100644 (file)
@@ -16,12 +16,28 @@ from multiprocessing.queues import Queue
 from multiprocessing.managers import BaseManager
 import framework
 from config import config, num_cpus, available_cpus, max_vpp_cpus
 from multiprocessing.managers import BaseManager
 import framework
 from config import config, num_cpus, available_cpus, max_vpp_cpus
-from framework import VppTestRunner, VppTestCase, \
-    get_testcase_doc_name, get_test_description, PASS, FAIL, ERROR, SKIP, \
-    TEST_RUN, SKIP_CPU_SHORTAGE
+from framework import (
+    VppTestRunner,
+    VppTestCase,
+    get_testcase_doc_name,
+    get_test_description,
+    PASS,
+    FAIL,
+    ERROR,
+    SKIP,
+    TEST_RUN,
+    SKIP_CPU_SHORTAGE,
+)
 from debug import spawn_gdb, start_vpp_in_gdb
 from debug import spawn_gdb, start_vpp_in_gdb
-from log import get_parallel_logger, double_line_delim, RED, YELLOW, GREEN, \
-    colorize, single_line_delim
+from log import (
+    get_parallel_logger,
+    double_line_delim,
+    RED,
+    YELLOW,
+    GREEN,
+    colorize,
+    single_line_delim,
+)
 from discover_tests import discover_tests
 import sanity_run_vpp
 from subprocess import check_output, CalledProcessError
 from discover_tests import discover_tests
 import sanity_run_vpp
 from subprocess import check_output, CalledProcessError
@@ -50,7 +66,7 @@ class StreamQueueManager(BaseManager):
     pass
 
 
     pass
 
 
-StreamQueueManager.register('StreamQueue', StreamQueue)
+StreamQueueManager.register("StreamQueue", StreamQueue)
 
 
 class TestResult(dict):
 
 
 class TestResult(dict):
@@ -68,9 +84,11 @@ class TestResult(dict):
         self.testcases_by_id = testcases_by_id
 
     def was_successful(self):
         self.testcases_by_id = testcases_by_id
 
     def was_successful(self):
-        return 0 == len(self[FAIL]) == len(self[ERROR]) \
-            and len(self[PASS] + self[SKIP] + self[SKIP_CPU_SHORTAGE]) \
+        return (
+            0 == len(self[FAIL]) == len(self[ERROR])
+            and len(self[PASS] + self[SKIP] + self[SKIP_CPU_SHORTAGE])
             == self.testcase_suite.countTestCases()
             == self.testcase_suite.countTestCases()
+        )
 
     def no_tests_run(self):
         return 0 == len(self[TEST_RUN])
 
     def no_tests_run(self):
         return 0 == len(self[TEST_RUN])
@@ -90,10 +108,11 @@ class TestResult(dict):
     def get_testcase_names(self, test_id):
         # could be tearDownClass (test_ipsec_esp.TestIpsecEsp1)
         setup_teardown_match = re.match(
     def get_testcase_names(self, test_id):
         # could be tearDownClass (test_ipsec_esp.TestIpsecEsp1)
         setup_teardown_match = re.match(
-            r'((tearDownClass)|(setUpClass)) \((.+\..+)\)', test_id)
+            r"((tearDownClass)|(setUpClass)) \((.+\..+)\)", test_id
+        )
         if setup_teardown_match:
             test_name, _, _, testcase_name = setup_teardown_match.groups()
         if setup_teardown_match:
             test_name, _, _, testcase_name = setup_teardown_match.groups()
-            if len(testcase_name.split('.')) == 2:
+            if len(testcase_name.split(".")) == 2:
                 for key in self.testcases_by_id.keys():
                     if key.startswith(testcase_name):
                         testcase_name = key
                 for key in self.testcases_by_id.keys():
                     if key.startswith(testcase_name):
                         testcase_name = key
@@ -107,8 +126,7 @@ class TestResult(dict):
 
     def _get_test_description(self, test_id):
         if test_id in self.testcases_by_id:
 
     def _get_test_description(self, test_id):
         if test_id in self.testcases_by_id:
-            desc = get_test_description(descriptions,
-                                        self.testcases_by_id[test_id])
+            desc = get_test_description(descriptions, self.testcases_by_id[test_id])
         else:
             desc = test_id
         return desc
         else:
             desc = test_id
         return desc
@@ -121,17 +139,20 @@ class TestResult(dict):
         return doc_name
 
 
         return doc_name
 
 
-def test_runner_wrapper(suite, keep_alive_pipe, stdouterr_queue,
-                        finished_pipe, result_pipe, logger):
+def test_runner_wrapper(
+    suite, keep_alive_pipe, stdouterr_queue, finished_pipe, result_pipe, logger
+):
     sys.stdout = stdouterr_queue
     sys.stderr = stdouterr_queue
     VppTestCase.parallel_handler = logger.handlers[0]
     sys.stdout = stdouterr_queue
     sys.stderr = stdouterr_queue
     VppTestCase.parallel_handler = logger.handlers[0]
-    result = VppTestRunner(keep_alive_pipe=keep_alive_pipe,
-                           descriptions=descriptions,
-                           verbosity=config.verbose,
-                           result_pipe=result_pipe,
-                           failfast=config.failfast,
-                           print_summary=False).run(suite)
+    result = VppTestRunner(
+        keep_alive_pipe=keep_alive_pipe,
+        descriptions=descriptions,
+        verbosity=config.verbose,
+        result_pipe=result_pipe,
+        failfast=config.failfast,
+        print_summary=False,
+    ).run(suite)
     finished_pipe.send(result.wasSuccessful())
     finished_pipe.close()
     keep_alive_pipe.close()
     finished_pipe.send(result.wasSuccessful())
     finished_pipe.close()
     keep_alive_pipe.close()
@@ -139,21 +160,23 @@ def test_runner_wrapper(suite, keep_alive_pipe, stdouterr_queue,
 
 class TestCaseWrapper(object):
     def __init__(self, testcase_suite, manager):
 
 class TestCaseWrapper(object):
     def __init__(self, testcase_suite, manager):
-        self.keep_alive_parent_end, self.keep_alive_child_end = Pipe(
-            duplex=False)
+        self.keep_alive_parent_end, self.keep_alive_child_end = Pipe(duplex=False)
         self.finished_parent_end, self.finished_child_end = Pipe(duplex=False)
         self.result_parent_end, self.result_child_end = Pipe(duplex=False)
         self.testcase_suite = testcase_suite
         self.stdouterr_queue = manager.StreamQueue(ctx=get_context())
         self.logger = get_parallel_logger(self.stdouterr_queue)
         self.finished_parent_end, self.finished_child_end = Pipe(duplex=False)
         self.result_parent_end, self.result_child_end = Pipe(duplex=False)
         self.testcase_suite = testcase_suite
         self.stdouterr_queue = manager.StreamQueue(ctx=get_context())
         self.logger = get_parallel_logger(self.stdouterr_queue)
-        self.child = Process(target=test_runner_wrapper,
-                             args=(testcase_suite,
-                                   self.keep_alive_child_end,
-                                   self.stdouterr_queue,
-                                   self.finished_child_end,
-                                   self.result_child_end,
-                                   self.logger)
-                             )
+        self.child = Process(
+            target=test_runner_wrapper,
+            args=(
+                testcase_suite,
+                self.keep_alive_child_end,
+                self.stdouterr_queue,
+                self.finished_child_end,
+                self.result_child_end,
+                self.logger,
+            ),
+        )
         self.child.start()
         self.last_test_temp_dir = None
         self.last_test_vpp_binary = None
         self.child.start()
         self.last_test_temp_dir = None
         self.last_test_vpp_binary = None
@@ -187,18 +210,20 @@ class TestCaseWrapper(object):
         if self.last_test_id in self.testcases_by_id:
             test = self.testcases_by_id[self.last_test_id]
             class_name = unittest.util.strclass(test.__class__)
         if self.last_test_id in self.testcases_by_id:
             test = self.testcases_by_id[self.last_test_id]
             class_name = unittest.util.strclass(test.__class__)
-            test_name = "'{}' ({})".format(get_test_description(descriptions,
-                                                                test),
-                                           self.last_test_id)
+            test_name = "'{}' ({})".format(
+                get_test_description(descriptions, test), self.last_test_id
+            )
         else:
             test_name = self.last_test_id
         else:
             test_name = self.last_test_id
-            class_name = re.match(r'((tearDownClass)|(setUpClass)) '
-                                  r'\((.+\..+)\)', test_name).groups()[3]
+            class_name = re.match(
+                r"((tearDownClass)|(setUpClass)) " r"\((.+\..+)\)", test_name
+            ).groups()[3]
         if class_name not in self.testclasess_with_core:
             self.testclasess_with_core[class_name] = (
                 test_name,
                 self.last_test_vpp_binary,
         if class_name not in self.testclasess_with_core:
             self.testclasess_with_core[class_name] = (
                 test_name,
                 self.last_test_vpp_binary,
-                self.last_test_temp_dir)
+                self.last_test_temp_dir,
+            )
 
     def close_pipes(self):
         self.keep_alive_child_end.close()
 
     def close_pipes(self):
         self.keep_alive_child_end.close()
@@ -219,8 +244,9 @@ class TestCaseWrapper(object):
         return self.testcase_suite.get_assigned_cpus()
 
 
         return self.testcase_suite.get_assigned_cpus()
 
 
-def stdouterr_reader_wrapper(unread_testcases, finished_unread_testcases,
-                             read_testcases):
+def stdouterr_reader_wrapper(
+    unread_testcases, finished_unread_testcases, read_testcases
+):
     read_testcase = None
     while read_testcases.is_set() or unread_testcases:
         if finished_unread_testcases:
     read_testcase = None
     while read_testcases.is_set() or unread_testcases:
         if finished_unread_testcases:
@@ -229,7 +255,7 @@ def stdouterr_reader_wrapper(unread_testcases, finished_unread_testcases,
         elif unread_testcases:
             read_testcase = unread_testcases.pop()
         if read_testcase:
         elif unread_testcases:
             read_testcase = unread_testcases.pop()
         if read_testcase:
-            data = ''
+            data = ""
             while data is not None:
                 sys.stdout.write(data)
                 data = read_testcase.stdouterr_queue.get()
             while data is not None:
                 sys.stdout.write(data)
                 data = read_testcase.stdouterr_queue.get()
@@ -243,52 +269,62 @@ def handle_failed_suite(logger, last_test_temp_dir, vpp_pid, vpp_binary):
     if last_test_temp_dir:
         # Need to create link in case of a timeout or core dump without failure
         lttd = os.path.basename(last_test_temp_dir)
     if last_test_temp_dir:
         # Need to create link in case of a timeout or core dump without failure
         lttd = os.path.basename(last_test_temp_dir)
-        link_path = '%s%s-FAILED' % (config.failed_dir, lttd)
+        link_path = "%s%s-FAILED" % (config.failed_dir, lttd)
         if not os.path.exists(link_path):
             os.symlink(last_test_temp_dir, link_path)
         if not os.path.exists(link_path):
             os.symlink(last_test_temp_dir, link_path)
-        logger.error("Symlink to failed testcase directory: %s -> %s"
-                     % (link_path, lttd))
+        logger.error(
+            "Symlink to failed testcase directory: %s -> %s" % (link_path, lttd)
+        )
 
         # Report core existence
         core_path = get_core_path(last_test_temp_dir)
         if os.path.exists(core_path):
             logger.error(
 
         # Report core existence
         core_path = get_core_path(last_test_temp_dir)
         if os.path.exists(core_path):
             logger.error(
-                "Core-file exists in test temporary directory: %s!" %
-                core_path)
+                "Core-file exists in test temporary directory: %s!" % core_path
+            )
             check_core_path(logger, core_path)
             logger.debug("Running 'file %s':" % core_path)
             try:
                 info = check_output(["file", core_path])
                 logger.debug(info)
             except CalledProcessError as e:
             check_core_path(logger, core_path)
             logger.debug("Running 'file %s':" % core_path)
             try:
                 info = check_output(["file", core_path])
                 logger.debug(info)
             except CalledProcessError as e:
-                logger.error("Subprocess returned with return code "
-                             "while running `file' utility on core-file "
-                             "returned: "
-                             "rc=%s", e.returncode)
+                logger.error(
+                    "Subprocess returned with return code "
+                    "while running `file' utility on core-file "
+                    "returned: "
+                    "rc=%s",
+                    e.returncode,
+                )
             except OSError as e:
             except OSError as e:
-                logger.error("Subprocess returned with OS error while "
-                             "running 'file' utility "
-                             "on core-file: "
-                             "(%s) %s", e.errno, e.strerror)
+                logger.error(
+                    "Subprocess returned with OS error while "
+                    "running 'file' utility "
+                    "on core-file: "
+                    "(%s) %s",
+                    e.errno,
+                    e.strerror,
+                )
             except Exception as e:
             except Exception as e:
-                logger.exception("Unexpected error running `file' utility "
-                                 "on core-file")
+                logger.exception("Unexpected error running `file' utility on core-file")
             logger.error(f"gdb {vpp_binary} {core_path}")
 
     if vpp_pid:
         # Copy api post mortem
         api_post_mortem_path = "/tmp/api_post_mortem.%d" % vpp_pid
         if os.path.isfile(api_post_mortem_path):
             logger.error(f"gdb {vpp_binary} {core_path}")
 
     if vpp_pid:
         # Copy api post mortem
         api_post_mortem_path = "/tmp/api_post_mortem.%d" % vpp_pid
         if os.path.isfile(api_post_mortem_path):
-            logger.error("Copying api_post_mortem.%d to %s" %
-                         (vpp_pid, last_test_temp_dir))
+            logger.error(
+                "Copying api_post_mortem.%d to %s" % (vpp_pid, last_test_temp_dir)
+            )
             shutil.copy2(api_post_mortem_path, last_test_temp_dir)
 
 
 def check_and_handle_core(vpp_binary, tempdir, core_crash_test):
     if is_core_present(tempdir):
         if debug_core:
             shutil.copy2(api_post_mortem_path, last_test_temp_dir)
 
 
 def check_and_handle_core(vpp_binary, tempdir, core_crash_test):
     if is_core_present(tempdir):
         if debug_core:
-            print('VPP core detected in %s. Last test running was %s' %
-                  (tempdir, core_crash_test))
+            print(
+                "VPP core detected in %s. Last test running was %s"
+                % (tempdir, core_crash_test)
+            )
             print(single_line_delim)
             spawn_gdb(vpp_binary, get_core_path(tempdir))
             print(single_line_delim)
             print(single_line_delim)
             spawn_gdb(vpp_binary, get_core_path(tempdir))
             print(single_line_delim)
@@ -305,10 +341,9 @@ def handle_cores(failed_testcases):
                 check_and_handle_core(vpp_binary, tempdir, test)
 
 
                 check_and_handle_core(vpp_binary, tempdir, test)
 
 
-def process_finished_testsuite(wrapped_testcase_suite,
-                               finished_testcase_suites,
-                               failed_wrapped_testcases,
-                               results):
+def process_finished_testsuite(
+    wrapped_testcase_suite, finished_testcase_suites, failed_wrapped_testcases, results
+):
     results.append(wrapped_testcase_suite.result)
     finished_testcase_suites.add(wrapped_testcase_suite)
     stop_run = False
     results.append(wrapped_testcase_suite.result)
     finished_testcase_suites.add(wrapped_testcase_suite)
     stop_run = False
@@ -317,10 +352,12 @@ def process_finished_testsuite(wrapped_testcase_suite,
 
     if not wrapped_testcase_suite.was_successful():
         failed_wrapped_testcases.add(wrapped_testcase_suite)
 
     if not wrapped_testcase_suite.was_successful():
         failed_wrapped_testcases.add(wrapped_testcase_suite)
-        handle_failed_suite(wrapped_testcase_suite.logger,
-                            wrapped_testcase_suite.last_test_temp_dir,
-                            wrapped_testcase_suite.vpp_pid,
-                            wrapped_testcase_suite.last_test_vpp_binary,)
+        handle_failed_suite(
+            wrapped_testcase_suite.logger,
+            wrapped_testcase_suite.last_test_temp_dir,
+            wrapped_testcase_suite.vpp_pid,
+            wrapped_testcase_suite.last_test_vpp_binary,
+        )
 
     return stop_run
 
 
     return stop_run
 
@@ -355,17 +392,17 @@ def run_forked(testcase_suites):
         nonlocal wrapped_testcase_suites
         nonlocal unread_testcases
         nonlocal free_cpus
         nonlocal wrapped_testcase_suites
         nonlocal unread_testcases
         nonlocal free_cpus
-        suite.assign_cpus(free_cpus[:suite.cpus_used])
-        free_cpus = free_cpus[suite.cpus_used:]
+        suite.assign_cpus(free_cpus[: suite.cpus_used])
+        free_cpus = free_cpus[suite.cpus_used :]
         wrapper = TestCaseWrapper(suite, manager)
         wrapped_testcase_suites.add(wrapper)
         unread_testcases.add(wrapper)
         on_suite_start(suite)
 
     def can_run_suite(suite):
         wrapper = TestCaseWrapper(suite, manager)
         wrapped_testcase_suites.add(wrapper)
         unread_testcases.add(wrapper)
         on_suite_start(suite)
 
     def can_run_suite(suite):
-        return (tests_running < max_concurrent_tests and
-                (suite.cpus_used <= len(free_cpus) or
-                 suite.cpus_used > max_vpp_cpus))
+        return tests_running < max_concurrent_tests and (
+            suite.cpus_used <= len(free_cpus) or suite.cpus_used > max_vpp_cpus
+        )
 
     while free_cpus and testcase_suites:
         a_suite = testcase_suites[0]
 
     while free_cpus and testcase_suites:
         a_suite = testcase_suites[0]
@@ -385,10 +422,10 @@ def run_forked(testcase_suites):
 
     read_from_testcases = threading.Event()
     read_from_testcases.set()
 
     read_from_testcases = threading.Event()
     read_from_testcases.set()
-    stdouterr_thread = threading.Thread(target=stdouterr_reader_wrapper,
-                                        args=(unread_testcases,
-                                              finished_unread_testcases,
-                                              read_from_testcases))
+    stdouterr_thread = threading.Thread(
+        target=stdouterr_reader_wrapper,
+        args=(unread_testcases, finished_unread_testcases, read_from_testcases),
+    )
     stdouterr_thread.start()
 
     failed_wrapped_testcases = set()
     stdouterr_thread.start()
 
     failed_wrapped_testcases = set()
@@ -400,59 +437,75 @@ def run_forked(testcase_suites):
             for wrapped_testcase_suite in wrapped_testcase_suites:
                 while wrapped_testcase_suite.result_parent_end.poll():
                     wrapped_testcase_suite.result.process_result(
             for wrapped_testcase_suite in wrapped_testcase_suites:
                 while wrapped_testcase_suite.result_parent_end.poll():
                     wrapped_testcase_suite.result.process_result(
-                        *wrapped_testcase_suite.result_parent_end.recv())
+                        *wrapped_testcase_suite.result_parent_end.recv()
+                    )
                     wrapped_testcase_suite.last_heard = time.time()
 
                 while wrapped_testcase_suite.keep_alive_parent_end.poll():
                     wrapped_testcase_suite.last_heard = time.time()
 
                 while wrapped_testcase_suite.keep_alive_parent_end.poll():
-                    wrapped_testcase_suite.last_test, \
-                        wrapped_testcase_suite.last_test_vpp_binary, \
-                        wrapped_testcase_suite.last_test_temp_dir, \
-                        wrapped_testcase_suite.vpp_pid = \
-                        wrapped_testcase_suite.keep_alive_parent_end.recv()
+                    (
+                        wrapped_testcase_suite.last_test,
+                        wrapped_testcase_suite.last_test_vpp_binary,
+                        wrapped_testcase_suite.last_test_temp_dir,
+                        wrapped_testcase_suite.vpp_pid,
+                    ) = wrapped_testcase_suite.keep_alive_parent_end.recv()
                     wrapped_testcase_suite.last_heard = time.time()
 
                 if wrapped_testcase_suite.finished_parent_end.poll():
                     wrapped_testcase_suite.finished_parent_end.recv()
                     wrapped_testcase_suite.last_heard = time.time()
                     wrapped_testcase_suite.last_heard = time.time()
 
                 if wrapped_testcase_suite.finished_parent_end.poll():
                     wrapped_testcase_suite.finished_parent_end.recv()
                     wrapped_testcase_suite.last_heard = time.time()
-                    stop_run = process_finished_testsuite(
-                        wrapped_testcase_suite,
-                        finished_testcase_suites,
-                        failed_wrapped_testcases,
-                        results) or stop_run
+                    stop_run = (
+                        process_finished_testsuite(
+                            wrapped_testcase_suite,
+                            finished_testcase_suites,
+                            failed_wrapped_testcases,
+                            results,
+                        )
+                        or stop_run
+                    )
                     continue
 
                 fail = False
                     continue
 
                 fail = False
-                if wrapped_testcase_suite.last_heard + config.timeout < \
-                        time.time():
+                if wrapped_testcase_suite.last_heard + config.timeout < time.time():
                     fail = True
                     wrapped_testcase_suite.logger.critical(
                         "Child test runner process timed out "
                     fail = True
                     wrapped_testcase_suite.logger.critical(
                         "Child test runner process timed out "
-                        "(last test running was `%s' in `%s')!" %
-                        (wrapped_testcase_suite.last_test,
-                         wrapped_testcase_suite.last_test_temp_dir))
+                        "(last test running was `%s' in `%s')!"
+                        % (
+                            wrapped_testcase_suite.last_test,
+                            wrapped_testcase_suite.last_test_temp_dir,
+                        )
+                    )
                 elif not wrapped_testcase_suite.child.is_alive():
                     fail = True
                     wrapped_testcase_suite.logger.critical(
                         "Child test runner process unexpectedly died "
                 elif not wrapped_testcase_suite.child.is_alive():
                     fail = True
                     wrapped_testcase_suite.logger.critical(
                         "Child test runner process unexpectedly died "
-                        "(last test running was `%s' in `%s')!" %
-                        (wrapped_testcase_suite.last_test,
-                         wrapped_testcase_suite.last_test_temp_dir))
-                elif wrapped_testcase_suite.last_test_temp_dir and \
-                        wrapped_testcase_suite.last_test_vpp_binary:
-                    if is_core_present(
-                            wrapped_testcase_suite.last_test_temp_dir):
+                        "(last test running was `%s' in `%s')!"
+                        % (
+                            wrapped_testcase_suite.last_test,
+                            wrapped_testcase_suite.last_test_temp_dir,
+                        )
+                    )
+                elif (
+                    wrapped_testcase_suite.last_test_temp_dir
+                    and wrapped_testcase_suite.last_test_vpp_binary
+                ):
+                    if is_core_present(wrapped_testcase_suite.last_test_temp_dir):
                         wrapped_testcase_suite.add_testclass_with_core()
                         if wrapped_testcase_suite.core_detected_at is None:
                         wrapped_testcase_suite.add_testclass_with_core()
                         if wrapped_testcase_suite.core_detected_at is None:
-                            wrapped_testcase_suite.core_detected_at = \
-                                time.time()
-                        elif wrapped_testcase_suite.core_detected_at + \
-                                core_timeout < time.time():
+                            wrapped_testcase_suite.core_detected_at = time.time()
+                        elif (
+                            wrapped_testcase_suite.core_detected_at + core_timeout
+                            < time.time()
+                        ):
                             wrapped_testcase_suite.logger.critical(
                                 "Child test runner process unresponsive and "
                                 "core-file exists in test temporary directory "
                             wrapped_testcase_suite.logger.critical(
                                 "Child test runner process unresponsive and "
                                 "core-file exists in test temporary directory "
-                                "(last test running was `%s' in `%s')!" %
-                                (wrapped_testcase_suite.last_test,
-                                 wrapped_testcase_suite.last_test_temp_dir))
+                                "(last test running was `%s' in `%s')!"
+                                % (
+                                    wrapped_testcase_suite.last_test,
+                                    wrapped_testcase_suite.last_test_temp_dir,
+                                )
+                            )
                             fail = True
 
                 if fail:
                             fail = True
 
                 if fail:
@@ -461,19 +514,23 @@ def run_forked(testcase_suites):
                         # terminating the child process tends to leave orphan
                         # VPP process around
                         if wrapped_testcase_suite.vpp_pid:
                         # terminating the child process tends to leave orphan
                         # VPP process around
                         if wrapped_testcase_suite.vpp_pid:
-                            os.kill(wrapped_testcase_suite.vpp_pid,
-                                    signal.SIGTERM)
+                            os.kill(wrapped_testcase_suite.vpp_pid, signal.SIGTERM)
                     except OSError:
                         # already dead
                         pass
                     wrapped_testcase_suite.result.crashed = True
                     wrapped_testcase_suite.result.process_result(
                     except OSError:
                         # already dead
                         pass
                     wrapped_testcase_suite.result.crashed = True
                     wrapped_testcase_suite.result.process_result(
-                        wrapped_testcase_suite.last_test_id, ERROR)
-                    stop_run = process_finished_testsuite(
-                        wrapped_testcase_suite,
-                        finished_testcase_suites,
-                        failed_wrapped_testcases,
-                        results) or stop_run
+                        wrapped_testcase_suite.last_test_id, ERROR
+                    )
+                    stop_run = (
+                        process_finished_testsuite(
+                            wrapped_testcase_suite,
+                            finished_testcase_suites,
+                            failed_wrapped_testcases,
+                            results,
+                        )
+                        or stop_run
+                    )
 
             for finished_testcase in finished_testcase_suites:
                 # Somewhat surprisingly, the join below may
 
             for finished_testcase in finished_testcase_suites:
                 # Somewhat surprisingly, the join below may
@@ -484,9 +541,9 @@ def run_forked(testcase_suites):
                 join_end = time.time()
                 if join_end - join_start >= test_finished_join_timeout:
                     finished_testcase.logger.error(
                 join_end = time.time()
                 if join_end - join_start >= test_finished_join_timeout:
                     finished_testcase.logger.error(
-                        "Timeout joining finished test: %s (pid %d)" %
-                        (finished_testcase.last_test,
-                         finished_testcase.child.pid))
+                        "Timeout joining finished test: %s (pid %d)"
+                        % (finished_testcase.last_test, finished_testcase.child.pid)
+                    )
                 finished_testcase.close_pipes()
                 wrapped_testcase_suites.remove(finished_testcase)
                 finished_unread_testcases.add(finished_testcase)
                 finished_testcase.close_pipes()
                 wrapped_testcase_suites.remove(finished_testcase)
                 finished_unread_testcases.add(finished_testcase)
@@ -548,7 +605,7 @@ class TestSuiteWrapper(unittest.TestSuite):
 class SplitToSuitesCallback:
     def __init__(self, filter_callback):
         self.suites = {}
 class SplitToSuitesCallback:
     def __init__(self, filter_callback):
         self.suites = {}
-        self.suite_name = 'default'
+        self.suite_name = "default"
         self.filter_callback = filter_callback
         self.filtered = TestSuiteWrapper()
 
         self.filter_callback = filter_callback
         self.filtered = TestSuiteWrapper()
 
@@ -573,28 +630,27 @@ def parse_test_filter(test_filter):
     filter_class_name = None
     filter_func_name = None
     if f:
     filter_class_name = None
     filter_func_name = None
     if f:
-        if '.' in f:
-            parts = f.split('.')
+        if "." in f:
+            parts = f.split(".")
             if len(parts) > 3:
             if len(parts) > 3:
-                raise Exception("Unrecognized %s option: %s" %
-                                (test_option, f))
+                raise Exception("Unrecognized %s option: %s" % (test_option, f))
             if len(parts) > 2:
             if len(parts) > 2:
-                if parts[2] not in ('*', ''):
+                if parts[2] not in ("*", ""):
                     filter_func_name = parts[2]
                     filter_func_name = parts[2]
-            if parts[1] not in ('*', ''):
+            if parts[1] not in ("*", ""):
                 filter_class_name = parts[1]
                 filter_class_name = parts[1]
-            if parts[0] not in ('*', ''):
-                if parts[0].startswith('test_'):
+            if parts[0] not in ("*", ""):
+                if parts[0].startswith("test_"):
                     filter_file_name = parts[0]
                 else:
                     filter_file_name = parts[0]
                 else:
-                    filter_file_name = 'test_%s' % parts[0]
+                    filter_file_name = "test_%s" % parts[0]
         else:
         else:
-            if f.startswith('test_'):
+            if f.startswith("test_"):
                 filter_file_name = f
             else:
                 filter_file_name = f
             else:
-                filter_file_name = 'test_%s' % f
+                filter_file_name = "test_%s" % f
     if filter_file_name:
     if filter_file_name:
-        filter_file_name = '%s.py' % filter_file_name
+        filter_file_name = "%s.py" % filter_file_name
     return filter_file_name, filter_class_name, filter_func_name
 
 
     return filter_file_name, filter_class_name, filter_func_name
 
 
@@ -608,7 +664,7 @@ def filter_tests(tests, filter_cb):
                 result.addTest(x)
         elif isinstance(t, unittest.TestCase):
             # this is a single test
                 result.addTest(x)
         elif isinstance(t, unittest.TestCase):
             # this is a single test
-            parts = t.id().split('.')
+            parts = t.id().split(".")
             # t.id() for common cases like this:
             # test_classifier.TestClassifier.test_acl_ip
             # apply filtering only if it is so
             # t.id() for common cases like this:
             # test_classifier.TestClassifier.test_acl_ip
             # apply filtering only if it is so
@@ -645,11 +701,11 @@ class FilterByClassList:
         self.classes_with_filenames = classes_with_filenames
 
     def __call__(self, file_name, class_name, func_name):
         self.classes_with_filenames = classes_with_filenames
 
     def __call__(self, file_name, class_name, func_name):
-        return '.'.join([file_name, class_name]) in self.classes_with_filenames
+        return ".".join([file_name, class_name]) in self.classes_with_filenames
 
 
 def suite_from_failed(suite, failed):
 
 
 def suite_from_failed(suite, failed):
-    failed = {x.rsplit('.', 1)[0] for x in failed}
+    failed = {x.rsplit(".", 1)[0] for x in failed}
     filter_cb = FilterByClassList(failed)
     suite = filter_tests(suite, filter_cb)
     return suite
     filter_cb = FilterByClassList(failed)
     suite = filter_tests(suite, filter_cb)
     return suite
@@ -695,9 +751,9 @@ class AllResults(dict):
         return retval
 
     def print_results(self):
         return retval
 
     def print_results(self):
-        print('')
+        print("")
         print(double_line_delim)
         print(double_line_delim)
-        print('TEST RESULTS:')
+        print("TEST RESULTS:")
 
         def indent_results(lines):
             lines = list(filter(None, lines))
 
         def indent_results(lines):
             lines = list(filter(None, lines))
@@ -707,62 +763,86 @@ class AllResults(dict):
                 padding = " " * (maximum - l.index(":"))
                 print(f"{padding}{l}")
 
                 padding = " " * (maximum - l.index(":"))
                 print(f"{padding}{l}")
 
-        indent_results([
-            f'Scheduled tests: {self.all_testcases}',
-            f'Executed tests: {self[TEST_RUN]}',
-            f'Passed tests: {colorize(self[PASS], GREEN)}',
-            f'Skipped tests: {colorize(self[SKIP], YELLOW)}'
-            if self[SKIP] else None,
-            f'Not Executed tests: {colorize(self.not_executed, RED)}'
-            if self.not_executed else None,
-            f'Failures: {colorize(self[FAIL], RED)}' if self[FAIL] else None,
-            f'Errors: {colorize(self[ERROR], RED)}' if self[ERROR] else None,
-            'Tests skipped due to lack of CPUS: '
-            f'{colorize(self[SKIP_CPU_SHORTAGE], YELLOW)}'
-            if self[SKIP_CPU_SHORTAGE] else None
-        ])
+        indent_results(
+            [
+                f"Scheduled tests: {self.all_testcases}",
+                f"Executed tests: {self[TEST_RUN]}",
+                f"Passed tests: {colorize(self[PASS], GREEN)}",
+                f"Skipped tests: {colorize(self[SKIP], YELLOW)}"
+                if self[SKIP]
+                else None,
+                f"Not Executed tests: {colorize(self.not_executed, RED)}"
+                if self.not_executed
+                else None,
+                f"Failures: {colorize(self[FAIL], RED)}" if self[FAIL] else None,
+                f"Errors: {colorize(self[ERROR], RED)}" if self[ERROR] else None,
+                "Tests skipped due to lack of CPUS: "
+                f"{colorize(self[SKIP_CPU_SHORTAGE], YELLOW)}"
+                if self[SKIP_CPU_SHORTAGE]
+                else None,
+            ]
+        )
 
         if self.all_failed > 0:
 
         if self.all_failed > 0:
-            print('FAILURES AND ERRORS IN TESTS:')
+            print("FAILURES AND ERRORS IN TESTS:")
             for result in self.results_per_suite:
                 failed_testcase_ids = result[FAIL]
                 errored_testcase_ids = result[ERROR]
                 old_testcase_name = None
                 if failed_testcase_ids:
                     for failed_test_id in failed_testcase_ids:
             for result in self.results_per_suite:
                 failed_testcase_ids = result[FAIL]
                 errored_testcase_ids = result[ERROR]
                 old_testcase_name = None
                 if failed_testcase_ids:
                     for failed_test_id in failed_testcase_ids:
-                        new_testcase_name, test_name = \
-                            result.get_testcase_names(failed_test_id)
+                        new_testcase_name, test_name = result.get_testcase_names(
+                            failed_test_id
+                        )
                         if new_testcase_name != old_testcase_name:
                         if new_testcase_name != old_testcase_name:
-                            print('  Testcase name: {}'.format(
-                                colorize(new_testcase_name, RED)))
+                            print(
+                                "  Testcase name: {}".format(
+                                    colorize(new_testcase_name, RED)
+                                )
+                            )
                             old_testcase_name = new_testcase_name
                             old_testcase_name = new_testcase_name
-                        print('    FAILURE: {} [{}]'.format(
-                            colorize(test_name, RED), failed_test_id))
+                        print(
+                            "    FAILURE: {} [{}]".format(
+                                colorize(test_name, RED), failed_test_id
+                            )
+                        )
                 if errored_testcase_ids:
                     for errored_test_id in errored_testcase_ids:
                 if errored_testcase_ids:
                     for errored_test_id in errored_testcase_ids:
-                        new_testcase_name, test_name = \
-                            result.get_testcase_names(errored_test_id)
+                        new_testcase_name, test_name = result.get_testcase_names(
+                            errored_test_id
+                        )
                         if new_testcase_name != old_testcase_name:
                         if new_testcase_name != old_testcase_name:
-                            print('  Testcase name: {}'.format(
-                                colorize(new_testcase_name, RED)))
+                            print(
+                                "  Testcase name: {}".format(
+                                    colorize(new_testcase_name, RED)
+                                )
+                            )
                             old_testcase_name = new_testcase_name
                             old_testcase_name = new_testcase_name
-                        print('      ERROR: {} [{}]'.format(
-                            colorize(test_name, RED), errored_test_id))
+                        print(
+                            "      ERROR: {} [{}]".format(
+                                colorize(test_name, RED), errored_test_id
+                            )
+                        )
         if self.testsuites_no_tests_run:
         if self.testsuites_no_tests_run:
-            print('TESTCASES WHERE NO TESTS WERE SUCCESSFULLY EXECUTED:')
+            print("TESTCASES WHERE NO TESTS WERE SUCCESSFULLY EXECUTED:")
             tc_classes = set()
             for testsuite in self.testsuites_no_tests_run:
                 for testcase in testsuite:
                     tc_classes.add(get_testcase_doc_name(testcase))
             for tc_class in tc_classes:
             tc_classes = set()
             for testsuite in self.testsuites_no_tests_run:
                 for testcase in testsuite:
                     tc_classes.add(get_testcase_doc_name(testcase))
             for tc_class in tc_classes:
-                print('  {}'.format(colorize(tc_class, RED)))
+                print("  {}".format(colorize(tc_class, RED)))
 
         if self[SKIP_CPU_SHORTAGE]:
             print()
 
         if self[SKIP_CPU_SHORTAGE]:
             print()
-            print(colorize('     SOME TESTS WERE SKIPPED BECAUSE THERE ARE NOT'
-                           ' ENOUGH CPUS AVAILABLE', YELLOW))
+            print(
+                colorize(
+                    "     SOME TESTS WERE SKIPPED BECAUSE THERE ARE NOT"
+                    " ENOUGH CPUS AVAILABLE",
+                    YELLOW,
+                )
+            )
         print(double_line_delim)
         print(double_line_delim)
-        print('')
+        print("")
 
     @property
     def not_executed(self):
 
     @property
     def not_executed(self):
@@ -805,7 +885,7 @@ def parse_results(results):
     return return_code, results_per_suite.rerun
 
 
     return return_code, results_per_suite.rerun
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
 
     print(f"Config is: {config}")
 
 
     print(f"Config is: {config}")
 
@@ -831,35 +911,41 @@ if __name__ == '__main__':
     print(f"OS reports {num_cpus} available cpu(s).")
 
     test_jobs = config.jobs
     print(f"OS reports {num_cpus} available cpu(s).")
 
     test_jobs = config.jobs
-    if test_jobs == 'auto':
+    if test_jobs == "auto":
         if run_interactive:
             max_concurrent_tests = 1
         if run_interactive:
             max_concurrent_tests = 1
-            print('Interactive mode required, running tests consecutively.')
+            print("Interactive mode required, running tests consecutively.")
         else:
             max_concurrent_tests = num_cpus
         else:
             max_concurrent_tests = num_cpus
-            print(f"Running at most {max_concurrent_tests} python test "
-                  "processes concurrently.")
+            print(
+                f"Running at most {max_concurrent_tests} python test "
+                "processes concurrently."
+            )
     else:
         max_concurrent_tests = test_jobs
     else:
         max_concurrent_tests = test_jobs
-        print(f"Running at most {max_concurrent_tests} python test processes "
-              "concurrently as set by 'TEST_JOBS'.")
+        print(
+            f"Running at most {max_concurrent_tests} python test processes "
+            "concurrently as set by 'TEST_JOBS'."
+        )
 
     print(f"Using at most {max_vpp_cpus} cpus for VPP threads.")
 
     if run_interactive and max_concurrent_tests > 1:
         raise NotImplementedError(
 
     print(f"Using at most {max_vpp_cpus} cpus for VPP threads.")
 
     if run_interactive and max_concurrent_tests > 1:
         raise NotImplementedError(
-            'Running tests interactively (DEBUG is gdb[server] or ATTACH or '
-            'STEP is set) in parallel (TEST_JOBS is more than 1) is not '
-            'supported')
+            "Running tests interactively (DEBUG is gdb[server] or ATTACH or "
+            "STEP is set) in parallel (TEST_JOBS is more than 1) is not "
+            "supported"
+        )
 
     descriptions = True
 
     print("Running tests using custom test runner.")
 
     descriptions = True
 
     print("Running tests using custom test runner.")
-    filter_file, filter_class, filter_func = \
-        parse_test_filter(config.filter)
+    filter_file, filter_class, filter_func = parse_test_filter(config.filter)
 
 
-    print("Selected filters: file=%s, class=%s, function=%s" % (
-        filter_file, filter_class, filter_func))
+    print(
+        "Selected filters: file=%s, class=%s, function=%s"
+        % (filter_file, filter_class, filter_func)
+    )
 
     filter_cb = FilterByTestOption(filter_file, filter_class, filter_func)
 
 
     filter_cb = FilterByTestOption(filter_file, filter_class, filter_func)
 
@@ -882,17 +968,19 @@ if __name__ == '__main__':
             # in stopTest() (for that to trigger, test function must run)
             for t in testcase_suite:
                 for m in dir(t):
             # in stopTest() (for that to trigger, test function must run)
             for t in testcase_suite:
                 for m in dir(t):
-                    if m.startswith('test_'):
+                    if m.startswith("test_"):
                         setattr(t, m, lambda: t.skipTest("not enough cpus"))
                         setattr(t, m, lambda: t.skipTest("not enough cpus"))
-                setattr(t.__class__, 'setUpClass', lambda: None)
-                setattr(t.__class__, 'tearDownClass', lambda: None)
-                setattr(t, 'setUp', lambda: None)
-                setattr(t, 'tearDown', lambda: None)
+                setattr(t.__class__, "setUpClass", lambda: None)
+                setattr(t.__class__, "tearDownClass", lambda: None)
+                setattr(t, "setUp", lambda: None)
+                setattr(t, "tearDown", lambda: None)
                 t.__class__.skipped_due_to_cpu_lack = True
         suites.append(testcase_suite)
 
                 t.__class__.skipped_due_to_cpu_lack = True
         suites.append(testcase_suite)
 
-    print("%s out of %s tests match specified filters" % (
-        tests_amount, tests_amount + cb.filtered.countTestCases()))
+    print(
+        "%s out of %s tests match specified filters"
+        % (tests_amount, tests_amount + cb.filtered.countTestCases())
+    )
 
     if not config.extended:
         print("Not running extended tests (some tests will be skipped)")
 
     if not config.extended:
         print("Not running extended tests (some tests will be skipped)")
@@ -903,49 +991,60 @@ if __name__ == '__main__':
 
     if run_interactive and suites:
         # don't fork if requiring interactive terminal
 
     if run_interactive and suites:
         # don't fork if requiring interactive terminal
-        print('Running tests in foreground in the current process')
+        print("Running tests in foreground in the current process")
         full_suite = unittest.TestSuite()
         free_cpus = list(available_cpus)
         cpu_shortage = False
         for suite in suites:
             if suite.cpus_used <= max_vpp_cpus:
         full_suite = unittest.TestSuite()
         free_cpus = list(available_cpus)
         cpu_shortage = False
         for suite in suites:
             if suite.cpus_used <= max_vpp_cpus:
-                suite.assign_cpus(free_cpus[:suite.cpus_used])
+                suite.assign_cpus(free_cpus[: suite.cpus_used])
             else:
                 suite.assign_cpus([])
                 cpu_shortage = True
         full_suite.addTests(suites)
             else:
                 suite.assign_cpus([])
                 cpu_shortage = True
         full_suite.addTests(suites)
-        result = VppTestRunner(verbosity=config.verbose,
-                               failfast=config.failfast,
-                               print_summary=True).run(full_suite)
+        result = VppTestRunner(
+            verbosity=config.verbose, failfast=config.failfast, print_summary=True
+        ).run(full_suite)
         was_successful = result.wasSuccessful()
         if not was_successful:
             for test_case_info in result.failed_test_cases_info:
         was_successful = result.wasSuccessful()
         if not was_successful:
             for test_case_info in result.failed_test_cases_info:
-                handle_failed_suite(test_case_info.logger,
-                                    test_case_info.tempdir,
-                                    test_case_info.vpp_pid,
-                                    config.vpp)
+                handle_failed_suite(
+                    test_case_info.logger,
+                    test_case_info.tempdir,
+                    test_case_info.vpp_pid,
+                    config.vpp,
+                )
                 if test_case_info in result.core_crash_test_cases_info:
                 if test_case_info in result.core_crash_test_cases_info:
-                    check_and_handle_core(test_case_info.vpp_bin_path,
-                                          test_case_info.tempdir,
-                                          test_case_info.core_crash_test)
+                    check_and_handle_core(
+                        test_case_info.vpp_bin_path,
+                        test_case_info.tempdir,
+                        test_case_info.core_crash_test,
+                    )
 
         if cpu_shortage:
             print()
 
         if cpu_shortage:
             print()
-            print(colorize('SOME TESTS WERE SKIPPED BECAUSE THERE ARE NOT'
-                           ' ENOUGH CPUS AVAILABLE', YELLOW))
+            print(
+                colorize(
+                    "SOME TESTS WERE SKIPPED BECAUSE THERE ARE NOT"
+                    " ENOUGH CPUS AVAILABLE",
+                    YELLOW,
+                )
+            )
             print()
         sys.exit(not was_successful)
     else:
             print()
         sys.exit(not was_successful)
     else:
-        print('Running each VPPTestCase in a separate background process'
-              f' with at most {max_concurrent_tests} parallel python test '
-              'process(es)')
+        print(
+            "Running each VPPTestCase in a separate background process"
+            f" with at most {max_concurrent_tests} parallel python test "
+            "process(es)"
+        )
         exit_code = 0
         while suites and attempts > 0:
             results = run_forked(suites)
             exit_code, suites = parse_results(results)
             attempts -= 1
             if exit_code == 0:
         exit_code = 0
         while suites and attempts > 0:
             results = run_forked(suites)
             exit_code, suites = parse_results(results)
             attempts -= 1
             if exit_code == 0:
-                print('Test run was successful')
+                print("Test run was successful")
             else:
             else:
-                print('%s attempt(s) left.' % attempts)
+                print("%s attempt(s) left." % attempts)
         sys.exit(exit_code)
         sys.exit(exit_code)
index b923c79..5e2b3c1 100644 (file)
@@ -8,7 +8,8 @@ from framework import VppDiedError, VppTestCase, KeepAliveReporter
 
 
 class SanityTestCase(VppTestCase):
 
 
 class SanityTestCase(VppTestCase):
-    """ Sanity test case - verify whether VPP is able to start """
+    """Sanity test case - verify whether VPP is able to start"""
+
     cpus = [0]
 
     # don't ask to debug SanityTestCase
     cpus = [0]
 
     # don't ask to debug SanityTestCase
@@ -43,11 +44,11 @@ def main():
     y.close()
 
     if rc == 0:
     y.close()
 
     if rc == 0:
-        print('Sanity test case passed.')
+        print("Sanity test case passed.")
     else:
     else:
-        print('Sanity test case failed.')
+        print("Sanity test case failed.")
     return rc
 
 
     return rc
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     sys.exit(main())
     sys.exit(main())
index bebe76d..55aaa5a 100644 (file)
@@ -8,51 +8,55 @@ from scapy.layers.inet import IP, UDP
 
 
 class BridgeDomain(metaclass=abc.ABCMeta):
 
 
 class BridgeDomain(metaclass=abc.ABCMeta):
-    """ Bridge domain abstraction """
+    """Bridge domain abstraction"""
 
     @property
     def frame_request(self):
 
     @property
     def frame_request(self):
-        """ Ethernet frame modeling a generic request """
-        return (Ether(src='00:00:00:00:00:01', dst='00:00:00:00:00:02') /
-                IP(src='1.2.3.4', dst='4.3.2.1') /
-                UDP(sport=10000, dport=20000) /
-                Raw('\xa5' * 100))
+        """Ethernet frame modeling a generic request"""
+        return (
+            Ether(src="00:00:00:00:00:01", dst="00:00:00:00:00:02")
+            / IP(src="1.2.3.4", dst="4.3.2.1")
+            / UDP(sport=10000, dport=20000)
+            / Raw("\xa5" * 100)
+        )
 
     @property
     def frame_reply(self):
 
     @property
     def frame_reply(self):
-        """ Ethernet frame modeling a generic reply """
-        return (Ether(src='00:00:00:00:00:02', dst='00:00:00:00:00:01') /
-                IP(src='4.3.2.1', dst='1.2.3.4') /
-                UDP(sport=20000, dport=10000) /
-                Raw('\xa5' * 100))
+        """Ethernet frame modeling a generic reply"""
+        return (
+            Ether(src="00:00:00:00:00:02", dst="00:00:00:00:00:01")
+            / IP(src="4.3.2.1", dst="1.2.3.4")
+            / UDP(sport=20000, dport=10000)
+            / Raw("\xa5" * 100)
+        )
 
     @abc.abstractmethod
     def ip_range(self, start, end):
 
     @abc.abstractmethod
     def ip_range(self, start, end):
-        """ range of remote ip's """
+        """range of remote ip's"""
         pass
 
     @abc.abstractmethod
     def encap_mcast(self, pkt, src_ip, src_mac, vni):
         pass
 
     @abc.abstractmethod
     def encap_mcast(self, pkt, src_ip, src_mac, vni):
-        """ Encapsulate mcast packet """
+        """Encapsulate mcast packet"""
         pass
 
     @abc.abstractmethod
     def encapsulate(self, pkt, vni):
         pass
 
     @abc.abstractmethod
     def encapsulate(self, pkt, vni):
-        """ Encapsulate packet """
+        """Encapsulate packet"""
         pass
 
     @abc.abstractmethod
     def decapsulate(self, pkt):
         pass
 
     @abc.abstractmethod
     def decapsulate(self, pkt):
-        """ Decapsulate packet """
+        """Decapsulate packet"""
         pass
 
     @abc.abstractmethod
     def check_encapsulation(self, pkt, vni, local_only=False):
         pass
 
     @abc.abstractmethod
     def check_encapsulation(self, pkt, vni, local_only=False):
-        """ Verify the encapsulation """
+        """Verify the encapsulation"""
         pass
 
     def assert_eq_pkts(self, pkt1, pkt2):
         pass
 
     def assert_eq_pkts(self, pkt1, pkt2):
-        """ Verify the Ether, IP, UDP, payload are equal in both
+        """Verify the Ether, IP, UDP, payload are equal in both
         packets
         """
         self.assertEqual(pkt1[Ether].src, pkt2[Ether].src)
         packets
         """
         self.assertEqual(pkt1[Ether].src, pkt2[Ether].src)
@@ -64,15 +68,18 @@ class BridgeDomain(metaclass=abc.ABCMeta):
         self.assertEqual(pkt1[Raw], pkt2[Raw])
 
     def test_decap(self):
         self.assertEqual(pkt1[Raw], pkt2[Raw])
 
     def test_decap(self):
-        """ Decapsulation test
+        """Decapsulation test
         Send encapsulated frames from pg0
         Verify receipt of decapsulated frames on pg1
         """
 
         Send encapsulated frames from pg0
         Verify receipt of decapsulated frames on pg1
         """
 
-        encapsulated_pkt = self.encapsulate(self.frame_request,
-                                            self.single_tunnel_vni)
+        encapsulated_pkt = self.encapsulate(self.frame_request, self.single_tunnel_vni)
 
 
-        self.pg0.add_stream([encapsulated_pkt, ])
+        self.pg0.add_stream(
+            [
+                encapsulated_pkt,
+            ]
+        )
 
         self.pg1.enable_capture()
 
 
         self.pg1.enable_capture()
 
@@ -85,7 +92,7 @@ class BridgeDomain(metaclass=abc.ABCMeta):
         self.assert_eq_pkts(pkt, self.frame_request)
 
     def test_encap(self):
         self.assert_eq_pkts(pkt, self.frame_request)
 
     def test_encap(self):
-        """ Encapsulation test
+        """Encapsulation test
         Send frames from pg1
         Verify receipt of encapsulated frames on pg0
         """
         Send frames from pg1
         Verify receipt of encapsulated frames on pg0
         """
@@ -104,7 +111,7 @@ class BridgeDomain(metaclass=abc.ABCMeta):
         self.assert_eq_pkts(payload, self.frame_reply)
 
     def test_ucast_flood(self):
         self.assert_eq_pkts(payload, self.frame_reply)
 
     def test_ucast_flood(self):
-        """ Unicast flood test
+        """Unicast flood test
         Send frames from pg3
         Verify receipt of encapsulated frames on pg0
         """
         Send frames from pg3
         Verify receipt of encapsulated frames on pg0
         """
@@ -122,7 +129,7 @@ class BridgeDomain(metaclass=abc.ABCMeta):
             self.assert_eq_pkts(payload, self.frame_reply)
 
     def test_mcast_flood(self):
             self.assert_eq_pkts(payload, self.frame_reply)
 
     def test_mcast_flood(self):
-        """ Multicast flood test
+        """Multicast flood test
         Send frames from pg2
         Verify receipt of encapsulated frames on pg0
         """
         Send frames from pg2
         Verify receipt of encapsulated frames on pg0
         """
@@ -135,14 +142,15 @@ class BridgeDomain(metaclass=abc.ABCMeta):
         # Pick first received frame and check if it's correctly encapsulated.
         out = self.pg0.get_capture(1)
         pkt = out[0]
         # Pick first received frame and check if it's correctly encapsulated.
         out = self.pg0.get_capture(1)
         pkt = out[0]
-        self.check_encapsulation(pkt, self.mcast_flood_bd,
-                                 local_only=False, mcast_pkt=True)
+        self.check_encapsulation(
+            pkt, self.mcast_flood_bd, local_only=False, mcast_pkt=True
+        )
 
         payload = self.decapsulate(pkt)
         self.assert_eq_pkts(payload, self.frame_reply)
 
     def test_mcast_rcv(self):
 
         payload = self.decapsulate(pkt)
         self.assert_eq_pkts(payload, self.frame_reply)
 
     def test_mcast_rcv(self):
-        """ Multicast receive test
+        """Multicast receive test
         Send 20 encapsulated frames from pg0 only 10 match unicast tunnels
         Verify receipt of 10 decap frames on pg2
         """
         Send 20 encapsulated frames from pg0 only 10 match unicast tunnels
         Verify receipt of 10 decap frames on pg2
         """
@@ -151,7 +159,8 @@ class BridgeDomain(metaclass=abc.ABCMeta):
         ip_range_end = 30
         mcast_stream = [
             self.encap_mcast(self.frame_request, ip, mac, self.mcast_flood_bd)
         ip_range_end = 30
         mcast_stream = [
             self.encap_mcast(self.frame_request, ip, mac, self.mcast_flood_bd)
-            for ip in self.ip_range(ip_range_start, ip_range_end)]
+            for ip in self.ip_range(ip_range_start, ip_range_end)
+        ]
         self.pg0.add_stream(mcast_stream)
         self.pg2.enable_capture()
         self.pg_start()
         self.pg0.add_stream(mcast_stream)
         self.pg2.enable_capture()
         self.pg_start()
index 7ce69d4..ec2a414 100644 (file)
@@ -30,13 +30,11 @@ class VarMatch:
 
 
 class TestClassifier(VppTestCase):
 
 
 class TestClassifier(VppTestCase):
-
     @staticmethod
     def _resolve_mask_match(mask_match):
         mask_match = binascii.unhexlify(mask_match)
         mask_match_len = ((len(mask_match) - 1) // 16 + 1) * 16
     @staticmethod
     def _resolve_mask_match(mask_match):
         mask_match = binascii.unhexlify(mask_match)
         mask_match_len = ((len(mask_match) - 1) // 16 + 1) * 16
-        mask_match = mask_match + b'\0' * \
-            (mask_match_len - len(mask_match))
+        mask_match = mask_match + b"\0" * (mask_match_len - len(mask_match))
         return mask_match, mask_match_len
 
     @classmethod
         return mask_match, mask_match_len
 
     @classmethod
@@ -47,7 +45,7 @@ class TestClassifier(VppTestCase):
         variables and configure VPP.
         """
         super(TestClassifier, cls).setUpClass()
         variables and configure VPP.
         """
         super(TestClassifier, cls).setUpClass()
-        cls.acl_active_table = ''
+        cls.acl_active_table = ""
         cls.af = AF_INET
 
     def setUp(self):
         cls.af = AF_INET
 
     def setUp(self):
@@ -113,13 +111,15 @@ class TestClassifier(VppTestCase):
             self.logger.info(self.vapi.cli("show ip fib"))
             self.logger.info(self.vapi.cli("show error"))
 
             self.logger.info(self.vapi.cli("show ip fib"))
             self.logger.info(self.vapi.cli("show error"))
 
-            if self.acl_active_table.endswith('out'):
+            if self.acl_active_table.endswith("out"):
                 self.output_acl_set_interface(
                 self.output_acl_set_interface(
-                    self.pg0, self.acl_tbl_idx.get(self.acl_active_table), 0)
-            elif self.acl_active_table != '':
+                    self.pg0, self.acl_tbl_idx.get(self.acl_active_table), 0
+                )
+            elif self.acl_active_table != "":
                 self.input_acl_set_interface(
                 self.input_acl_set_interface(
-                    self.pg0, self.acl_tbl_idx.get(self.acl_active_table), 0)
-            self.acl_active_table = ''
+                    self.pg0, self.acl_tbl_idx.get(self.acl_active_table), 0
+                )
+            self.acl_active_table = ""
 
             for intf in self.interfaces:
                 if self.af == AF_INET:
 
             for intf in self.interfaces:
                 if self.af == AF_INET:
@@ -131,7 +131,7 @@ class TestClassifier(VppTestCase):
         super(TestClassifier, self).tearDown()
 
     @staticmethod
         super(TestClassifier, self).tearDown()
 
     @staticmethod
-    def build_mac_match(dst_mac='', src_mac='', ether_type=''):
+    def build_mac_match(dst_mac="", src_mac="", ether_type=""):
         """Build MAC ACL match data with hexstring format.
 
         :param str dst_mac: source MAC address <x:x:x:x:x:x>
         """Build MAC ACL match data with hexstring format.
 
         :param str dst_mac: source MAC address <x:x:x:x:x:x>
@@ -139,15 +139,16 @@ class TestClassifier(VppTestCase):
         :param str ether_type: ethernet type <0-ffff>
         """
         if dst_mac:
         :param str ether_type: ethernet type <0-ffff>
         """
         if dst_mac:
-            dst_mac = dst_mac.replace(':', '')
+            dst_mac = dst_mac.replace(":", "")
         if src_mac:
         if src_mac:
-            src_mac = src_mac.replace(':', '')
+            src_mac = src_mac.replace(":", "")
 
 
-        return ('{!s:0>12}{!s:0>12}{!s:0>4}'.format(
-            dst_mac, src_mac, ether_type)).rstrip()
+        return (
+            "{!s:0>12}{!s:0>12}{!s:0>4}".format(dst_mac, src_mac, ether_type)
+        ).rstrip()
 
     @staticmethod
 
     @staticmethod
-    def build_mac_mask(dst_mac='', src_mac='', ether_type=''):
+    def build_mac_mask(dst_mac="", src_mac="", ether_type=""):
         """Build MAC ACL mask data with hexstring format.
 
         :param str dst_mac: source MAC address <0-ffffffffffff>
         """Build MAC ACL mask data with hexstring format.
 
         :param str dst_mac: source MAC address <0-ffffffffffff>
@@ -155,12 +156,12 @@ class TestClassifier(VppTestCase):
         :param str ether_type: ethernet type <0-ffff>
         """
 
         :param str ether_type: ethernet type <0-ffff>
         """
 
-        return ('{!s:0>12}{!s:0>12}{!s:0>4}'.format(
-            dst_mac, src_mac, ether_type)).rstrip()
+        return (
+            "{!s:0>12}{!s:0>12}{!s:0>4}".format(dst_mac, src_mac, ether_type)
+        ).rstrip()
 
     @staticmethod
 
     @staticmethod
-    def build_ip_mask(proto='', src_ip='', dst_ip='',
-                      src_port='', dst_port=''):
+    def build_ip_mask(proto="", src_ip="", dst_ip="", src_port="", dst_port=""):
         """Build IP ACL mask data with hexstring format.
 
         :param str proto: protocol number <0-ff>
         """Build IP ACL mask data with hexstring format.
 
         :param str proto: protocol number <0-ff>
@@ -170,12 +171,14 @@ class TestClassifier(VppTestCase):
         :param str dst_port: destination port number <0-ffff>
         """
 
         :param str dst_port: destination port number <0-ffff>
         """
 
-        return ('{!s:0>20}{!s:0>12}{!s:0>8}{!s:0>4}{!s:0>4}'.format(
-            proto, src_ip, dst_ip, src_port, dst_port)).rstrip('0')
+        return (
+            "{!s:0>20}{!s:0>12}{!s:0>8}{!s:0>4}{!s:0>4}".format(
+                proto, src_ip, dst_ip, src_port, dst_port
+            )
+        ).rstrip("0")
 
     @staticmethod
 
     @staticmethod
-    def build_ip6_mask(nh='', src_ip='', dst_ip='',
-                       src_port='', dst_port=''):
+    def build_ip6_mask(nh="", src_ip="", dst_ip="", src_port="", dst_port=""):
         """Build IPv6 ACL mask data with hexstring format.
 
         :param str nh: next header number <0-ff>
         """Build IPv6 ACL mask data with hexstring format.
 
         :param str nh: next header number <0-ff>
@@ -185,24 +188,26 @@ class TestClassifier(VppTestCase):
         :param str dst_port: destination port number <0-ffff>
         """
 
         :param str dst_port: destination port number <0-ffff>
         """
 
-        return ('{!s:0>14}{!s:0>34}{!s:0>32}{!s:0>4}{!s:0>4}'.format(
-            nh, src_ip, dst_ip, src_port, dst_port)).rstrip('0')
+        return (
+            "{!s:0>14}{!s:0>34}{!s:0>32}{!s:0>4}{!s:0>4}".format(
+                nh, src_ip, dst_ip, src_port, dst_port
+            )
+        ).rstrip("0")
 
     @staticmethod
     def build_payload_mask(masks):
 
     @staticmethod
     def build_payload_mask(masks):
-        payload_mask = ''
+        payload_mask = ""
 
         for mask in masks:
             # offset is specified in bytes, convert to hex format.
             length = (mask.offset * 2) + len(mask.spec)
 
         for mask in masks:
             # offset is specified in bytes, convert to hex format.
             length = (mask.offset * 2) + len(mask.spec)
-            format_spec = '{!s:0>' + str(length) + '}'
+            format_spec = "{!s:0>" + str(length) + "}"
             payload_mask += format_spec.format(mask.spec)
 
             payload_mask += format_spec.format(mask.spec)
 
-        return payload_mask.rstrip('0')
+        return payload_mask.rstrip("0")
 
     @staticmethod
 
     @staticmethod
-    def build_ip_match(proto=0, src_ip='', dst_ip='',
-                       src_port=0, dst_port=0):
+    def build_ip_match(proto=0, src_ip="", dst_ip="", src_port=0, dst_port=0):
         """Build IP ACL match data with hexstring format.
 
         :param int proto: protocol number with valid option "x"
         """Build IP ACL match data with hexstring format.
 
         :param int proto: protocol number with valid option "x"
@@ -212,17 +217,18 @@ class TestClassifier(VppTestCase):
         :param int dst_port: destination port number "x"
         """
         if src_ip:
         :param int dst_port: destination port number "x"
         """
         if src_ip:
-            src_ip = binascii.hexlify(socket.inet_aton(src_ip)).decode('ascii')
+            src_ip = binascii.hexlify(socket.inet_aton(src_ip)).decode("ascii")
         if dst_ip:
         if dst_ip:
-            dst_ip = binascii.hexlify(socket.inet_aton(dst_ip)).decode('ascii')
+            dst_ip = binascii.hexlify(socket.inet_aton(dst_ip)).decode("ascii")
 
 
-        return ('{!s:0>20}{!s:0>12}{!s:0>8}{!s:0>4}{!s:0>4}'.format(
-            hex(proto)[2:], src_ip, dst_ip, hex(src_port)[2:],
-            hex(dst_port)[2:])).rstrip('0')
+        return (
+            "{!s:0>20}{!s:0>12}{!s:0>8}{!s:0>4}{!s:0>4}".format(
+                hex(proto)[2:], src_ip, dst_ip, hex(src_port)[2:], hex(dst_port)[2:]
+            )
+        ).rstrip("0")
 
     @staticmethod
 
     @staticmethod
-    def build_ip6_match(nh=0, src_ip='', dst_ip='',
-                        src_port=0, dst_port=0):
+    def build_ip6_match(nh=0, src_ip="", dst_ip="", src_port=0, dst_port=0):
         """Build IPv6 ACL match data with hexstring format.
 
         :param int nh: next header number with valid option "x"
         """Build IPv6 ACL match data with hexstring format.
 
         :param int nh: next header number with valid option "x"
@@ -234,39 +240,44 @@ class TestClassifier(VppTestCase):
         """
         if src_ip:
             if sys.version_info[0] == 2:
         """
         if src_ip:
             if sys.version_info[0] == 2:
-                src_ip = binascii.hexlify(socket.inet_pton(
-                    socket.AF_INET6, src_ip))
+                src_ip = binascii.hexlify(socket.inet_pton(socket.AF_INET6, src_ip))
             else:
                 src_ip = socket.inet_pton(socket.AF_INET6, src_ip).hex()
 
         if dst_ip:
             if sys.version_info[0] == 2:
             else:
                 src_ip = socket.inet_pton(socket.AF_INET6, src_ip).hex()
 
         if dst_ip:
             if sys.version_info[0] == 2:
-                dst_ip = binascii.hexlify(socket.inet_pton(
-                    socket.AF_INET6, dst_ip))
+                dst_ip = binascii.hexlify(socket.inet_pton(socket.AF_INET6, dst_ip))
             else:
                 dst_ip = socket.inet_pton(socket.AF_INET6, dst_ip).hex()
 
             else:
                 dst_ip = socket.inet_pton(socket.AF_INET6, dst_ip).hex()
 
-        return ('{!s:0>14}{!s:0>34}{!s:0>32}{!s:0>4}{!s:0>4}'.format(
-            hex(nh)[2:], src_ip, dst_ip, hex(src_port)[2:],
-            hex(dst_port)[2:])).rstrip('0')
+        return (
+            "{!s:0>14}{!s:0>34}{!s:0>32}{!s:0>4}{!s:0>4}".format(
+                hex(nh)[2:], src_ip, dst_ip, hex(src_port)[2:], hex(dst_port)[2:]
+            )
+        ).rstrip("0")
 
     @staticmethod
     def build_payload_match(matches):
 
     @staticmethod
     def build_payload_match(matches):
-        payload_match = ''
+        payload_match = ""
 
         for match in matches:
             sval = str(hex(match.value)[2:])
             # offset is specified in bytes, convert to hex format.
             length = (match.offset + match.length) * 2
 
 
         for match in matches:
             sval = str(hex(match.value)[2:])
             # offset is specified in bytes, convert to hex format.
             length = (match.offset + match.length) * 2
 
-            format_spec = '{!s:0>' + str(length) + '}'
+            format_spec = "{!s:0>" + str(length) + "}"
             payload_match += format_spec.format(sval)
 
             payload_match += format_spec.format(sval)
 
-        return payload_match.rstrip('0')
+        return payload_match.rstrip("0")
 
 
-    def create_stream(self, src_if, dst_if, packet_sizes,
-                      proto_l=UDP(sport=1234, dport=5678),
-                      payload_ex=None):
+    def create_stream(
+        self,
+        src_if,
+        dst_if,
+        packet_sizes,
+        proto_l=UDP(sport=1234, dport=5678),
+        payload_ex=None,
+    ):
         """Create input packet stream for defined interfaces.
 
         :param VppInterface src_if: Source Interface for packet stream.
         """Create input packet stream for defined interfaces.
 
         :param VppInterface src_if: Source Interface for packet stream.
@@ -285,15 +296,19 @@ class TestClassifier(VppTestCase):
                 payload += payload_ex
 
             if self.af == AF_INET:
                 payload += payload_ex
 
             if self.af == AF_INET:
-                p = (Ether(dst=src_if.local_mac, src=src_if.remote_mac) /
-                     IP(src=src_if.remote_ip4, dst=dst_if.remote_ip4) /
-                     proto_l /
-                     Raw(payload))
+                p = (
+                    Ether(dst=src_if.local_mac, src=src_if.remote_mac)
+                    / IP(src=src_if.remote_ip4, dst=dst_if.remote_ip4)
+                    / proto_l
+                    / Raw(payload)
+                )
             elif self.af == AF_INET6:
             elif self.af == AF_INET6:
-                p = (Ether(dst=src_if.local_mac, src=src_if.remote_mac) /
-                     IPv6(src=src_if.remote_ip6, dst=dst_if.remote_ip6) /
-                     proto_l /
-                     Raw(payload))
+                p = (
+                    Ether(dst=src_if.local_mac, src=src_if.remote_mac)
+                    / IPv6(src=src_if.remote_ip6, dst=dst_if.remote_ip6)
+                    / proto_l
+                    / Raw(payload)
+                )
             info.data = p.copy()
             self.extend_packet(p, size)
             pkts.append(p)
             info.data = p.copy()
             self.extend_packet(p, size)
             pkts.append(p)
@@ -322,11 +337,12 @@ class TestClassifier(VppTestCase):
                 packet_index = payload_info.index
                 self.assertEqual(payload_info.dst, dst_sw_if_index)
                 self.logger.debug(
                 packet_index = payload_info.index
                 self.assertEqual(payload_info.dst, dst_sw_if_index)
                 self.logger.debug(
-                    "Got packet on port %s: src=%u (id=%u)" %
-                    (dst_if.name, payload_info.src, packet_index))
+                    "Got packet on port %s: src=%u (id=%u)"
+                    % (dst_if.name, payload_info.src, packet_index)
+                )
                 next_info = self.get_next_packet_info_for_interface2(
                 next_info = self.get_next_packet_info_for_interface2(
-                    payload_info.src, dst_sw_if_index,
-                    last_info[payload_info.src])
+                    payload_info.src, dst_sw_if_index, last_info[payload_info.src]
+                )
                 last_info[payload_info.src] = next_info
                 self.assertTrue(next_info is not None)
                 self.assertEqual(packet_index, next_info.index)
                 last_info[payload_info.src] = next_info
                 self.assertTrue(next_info is not None)
                 self.assertEqual(packet_index, next_info.index)
@@ -343,13 +359,15 @@ class TestClassifier(VppTestCase):
                 raise
         for i in self.interfaces:
             remaining_packet = self.get_next_packet_info_for_interface2(
                 raise
         for i in self.interfaces:
             remaining_packet = self.get_next_packet_info_for_interface2(
-                i.sw_if_index, dst_sw_if_index, last_info[i.sw_if_index])
-            self.assertTrue(remaining_packet is None,
-                            "Interface %s: Packet expected from interface %s "
-                            "didn't arrive" % (dst_if.name, i.name))
-
-    def create_classify_table(self, key, mask, data_offset=0,
-                              next_table_index=None):
+                i.sw_if_index, dst_sw_if_index, last_info[i.sw_if_index]
+            )
+            self.assertTrue(
+                remaining_packet is None,
+                "Interface %s: Packet expected from interface %s "
+                "didn't arrive" % (dst_if.name, i.name),
+            )
+
+    def create_classify_table(self, key, mask, data_offset=0, next_table_index=None):
         """Create Classify Table
 
         :param str key: key for classify table (ex, ACL name).
         """Create Classify Table
 
         :param str key: key for classify table (ex, ACL name).
@@ -366,12 +384,14 @@ class TestClassifier(VppTestCase):
             miss_next_index=0,
             current_data_flag=1,
             current_data_offset=data_offset,
             miss_next_index=0,
             current_data_flag=1,
             current_data_offset=data_offset,
-            next_table_index=next_table_index)
-        self.assertIsNotNone(r, 'No response msg for add_del_table')
+            next_table_index=next_table_index,
+        )
+        self.assertIsNotNone(r, "No response msg for add_del_table")
         self.acl_tbl_idx[key] = r.new_table_index
 
         self.acl_tbl_idx[key] = r.new_table_index
 
-    def create_classify_session(self, table_index, match, pbr_option=0,
-                                vrfid=0, is_add=1):
+    def create_classify_session(
+        self, table_index, match, pbr_option=0, vrfid=0, is_add=1
+    ):
         """Create Classify Session
 
         :param int table_index: table index to identify classify table.
         """Create Classify Session
 
         :param int table_index: table index to identify classify table.
@@ -389,8 +409,9 @@ class TestClassifier(VppTestCase):
             match_len=mask_match_len,
             opaque_index=0,
             action=pbr_option,
             match_len=mask_match_len,
             opaque_index=0,
             action=pbr_option,
-            metadata=vrfid)
-        self.assertIsNotNone(r, 'No response msg for add_del_session')
+            metadata=vrfid,
+        )
+        self.assertIsNotNone(r, "No response msg for add_del_session")
 
     def input_acl_set_interface(self, intf, table_index, is_add=1):
         """Configure Input ACL interface
 
     def input_acl_set_interface(self, intf, table_index, is_add=1):
         """Configure Input ACL interface
@@ -403,20 +424,17 @@ class TestClassifier(VppTestCase):
         r = None
         if self.af == AF_INET:
             r = self.vapi.input_acl_set_interface(
         r = None
         if self.af == AF_INET:
             r = self.vapi.input_acl_set_interface(
-                is_add,
-                intf.sw_if_index,
-                ip4_table_index=table_index)
+                is_add, intf.sw_if_index, ip4_table_index=table_index
+            )
         elif self.af == AF_INET6:
             r = self.vapi.input_acl_set_interface(
         elif self.af == AF_INET6:
             r = self.vapi.input_acl_set_interface(
-                is_add,
-                intf.sw_if_index,
-                ip6_table_index=table_index)
+                is_add, intf.sw_if_index, ip6_table_index=table_index
+            )
         else:
             r = self.vapi.input_acl_set_interface(
         else:
             r = self.vapi.input_acl_set_interface(
-                is_add,
-                intf.sw_if_index,
-                l2_table_index=table_index)
-        self.assertIsNotNone(r, 'No response msg for acl_set_interface')
+                is_add, intf.sw_if_index, l2_table_index=table_index
+            )
+        self.assertIsNotNone(r, "No response msg for acl_set_interface")
 
     def output_acl_set_interface(self, intf, table_index, is_add=1):
         """Configure Output ACL interface
 
     def output_acl_set_interface(self, intf, table_index, is_add=1):
         """Configure Output ACL interface
@@ -429,20 +447,17 @@ class TestClassifier(VppTestCase):
         r = None
         if self.af == AF_INET:
             r = self.vapi.output_acl_set_interface(
         r = None
         if self.af == AF_INET:
             r = self.vapi.output_acl_set_interface(
-                is_add,
-                intf.sw_if_index,
-                ip4_table_index=table_index)
+                is_add, intf.sw_if_index, ip4_table_index=table_index
+            )
         elif self.af == AF_INET6:
             r = self.vapi.output_acl_set_interface(
         elif self.af == AF_INET6:
             r = self.vapi.output_acl_set_interface(
-                is_add,
-                intf.sw_if_index,
-                ip6_table_index=table_index)
+                is_add, intf.sw_if_index, ip6_table_index=table_index
+            )
         else:
             r = self.vapi.output_acl_set_interface(
         else:
             r = self.vapi.output_acl_set_interface(
-                is_add,
-                intf.sw_if_index,
-                l2_table_index=table_index)
-        self.assertIsNotNone(r, 'No response msg for acl_set_interface')
+                is_add, intf.sw_if_index, l2_table_index=table_index
+            )
+        self.assertIsNotNone(r, "No response msg for acl_set_interface")
 
     def config_pbr_fib_entry(self, intf, is_add=1):
         """Configure fib entry to route traffic toward PBR VRF table
 
     def config_pbr_fib_entry(self, intf, is_add=1):
         """Configure fib entry to route traffic toward PBR VRF table
@@ -451,10 +466,13 @@ class TestClassifier(VppTestCase):
 
         """
         addr_len = 24
 
         """
         addr_len = 24
-        self.vapi.ip_add_del_route(dst_address=intf.local_ip4,
-                                   dst_address_length=addr_len,
-                                   next_hop_address=intf.remote_ip4,
-                                   table_id=self.pbr_vrfid, is_add=is_add)
+        self.vapi.ip_add_del_route(
+            dst_address=intf.local_ip4,
+            dst_address_length=addr_len,
+            next_hop_address=intf.remote_ip4,
+            table_id=self.pbr_vrfid,
+            is_add=is_add,
+        )
 
     def verify_vrf(self, vrf_id):
         """
 
     def verify_vrf(self, vrf_id):
         """
index 8105f0c..578c284 100644 (file)
@@ -6,16 +6,20 @@ from scapy.layers.inet import IP, ICMP, TCP, UDP
 from scapy.layers.ipsec import SecurityAssociation, ESP
 from scapy.layers.l2 import Ether
 from scapy.packet import raw, Raw
 from scapy.layers.ipsec import SecurityAssociation, ESP
 from scapy.layers.l2 import Ether
 from scapy.packet import raw, Raw
-from scapy.layers.inet6 import IPv6, ICMPv6EchoRequest, IPv6ExtHdrHopByHop, \
-    IPv6ExtHdrFragment, IPv6ExtHdrDestOpt
+from scapy.layers.inet6 import (
+    IPv6,
+    ICMPv6EchoRequest,
+    IPv6ExtHdrHopByHop,
+    IPv6ExtHdrFragment,
+    IPv6ExtHdrDestOpt,
+)
 
 
 from framework import VppTestCase, VppTestRunner
 from util import ppp, reassemble4, fragment_rfc791, fragment_rfc8200
 from vpp_papi import VppEnum
 
 
 
 from framework import VppTestCase, VppTestRunner
 from util import ppp, reassemble4, fragment_rfc791, fragment_rfc8200
 from vpp_papi import VppEnum
 
-from vpp_ipsec import VppIpsecSpd, VppIpsecSpdEntry, \
-    VppIpsecSpdItfBinding
+from vpp_ipsec import VppIpsecSpd, VppIpsecSpdEntry, VppIpsecSpdItfBinding
 from ipaddress import ip_address
 from re import search
 from os import popen
 from ipaddress import ip_address
 from re import search
 from os import popen
@@ -30,8 +34,8 @@ class IPsecIPv4Params:
     is_ipv6 = 0
 
     def __init__(self):
     is_ipv6 = 0
 
     def __init__(self):
-        self.remote_tun_if_host = '1.1.1.1'
-        self.remote_tun_if_host6 = '1111::1'
+        self.remote_tun_if_host = "1.1.1.1"
+        self.remote_tun_if_host6 = "1111::1"
 
         self.scapy_tun_sa_id = 100
         self.scapy_tun_spi = 1000
 
         self.scapy_tun_sa_id = 100
         self.scapy_tun_spi = 1000
@@ -48,20 +52,23 @@ class IPsecIPv4Params:
         self.outer_flow_label = 0
         self.inner_flow_label = 0x12345
 
         self.outer_flow_label = 0
         self.inner_flow_label = 0x12345
 
-        self.auth_algo_vpp_id = (VppEnum.vl_api_ipsec_integ_alg_t.
-                                 IPSEC_API_INTEG_ALG_SHA1_96)
-        self.auth_algo = 'HMAC-SHA1-96'  # scapy name
-        self.auth_key = b'C91KUR9GYMm5GfkEvNjX'
-
-        self.crypt_algo_vpp_id = (VppEnum.vl_api_ipsec_crypto_alg_t.
-                                  IPSEC_API_CRYPTO_ALG_AES_CBC_128)
-        self.crypt_algo = 'AES-CBC'  # scapy name
-        self.crypt_key = b'JPjyOWBeVEQiMe7h'
+        self.auth_algo_vpp_id = (
+            VppEnum.vl_api_ipsec_integ_alg_t.IPSEC_API_INTEG_ALG_SHA1_96
+        )
+        self.auth_algo = "HMAC-SHA1-96"  # scapy name
+        self.auth_key = b"C91KUR9GYMm5GfkEvNjX"
+
+        self.crypt_algo_vpp_id = (
+            VppEnum.vl_api_ipsec_crypto_alg_t.IPSEC_API_CRYPTO_ALG_AES_CBC_128
+        )
+        self.crypt_algo = "AES-CBC"  # scapy name
+        self.crypt_key = b"JPjyOWBeVEQiMe7h"
         self.salt = 0
         self.flags = 0
         self.nat_header = None
         self.salt = 0
         self.flags = 0
         self.nat_header = None
-        self.tun_flags = (VppEnum.vl_api_tunnel_encap_decap_flags_t.
-                          TUNNEL_API_ENCAP_DECAP_FLAG_NONE)
+        self.tun_flags = (
+            VppEnum.vl_api_tunnel_encap_decap_flags_t.TUNNEL_API_ENCAP_DECAP_FLAG_NONE
+        )
         self.dscp = 0
         self.async_mode = False
 
         self.dscp = 0
         self.async_mode = False
 
@@ -75,8 +82,8 @@ class IPsecIPv6Params:
     is_ipv6 = 1
 
     def __init__(self):
     is_ipv6 = 1
 
     def __init__(self):
-        self.remote_tun_if_host = '1111:1111:1111:1111:1111:1111:1111:1111'
-        self.remote_tun_if_host4 = '1.1.1.1'
+        self.remote_tun_if_host = "1111:1111:1111:1111:1111:1111:1111:1111"
+        self.remote_tun_if_host4 = "1.1.1.1"
 
         self.scapy_tun_sa_id = 500
         self.scapy_tun_spi = 3001
 
         self.scapy_tun_sa_id = 500
         self.scapy_tun_spi = 3001
@@ -93,20 +100,23 @@ class IPsecIPv6Params:
         self.outer_flow_label = 0
         self.inner_flow_label = 0x12345
 
         self.outer_flow_label = 0
         self.inner_flow_label = 0x12345
 
-        self.auth_algo_vpp_id = (VppEnum.vl_api_ipsec_integ_alg_t.
-                                 IPSEC_API_INTEG_ALG_SHA1_96)
-        self.auth_algo = 'HMAC-SHA1-96'  # scapy name
-        self.auth_key = b'C91KUR9GYMm5GfkEvNjX'
-
-        self.crypt_algo_vpp_id = (VppEnum.vl_api_ipsec_crypto_alg_t.
-                                  IPSEC_API_CRYPTO_ALG_AES_CBC_128)
-        self.crypt_algo = 'AES-CBC'  # scapy name
-        self.crypt_key = b'JPjyOWBeVEQiMe7h'
+        self.auth_algo_vpp_id = (
+            VppEnum.vl_api_ipsec_integ_alg_t.IPSEC_API_INTEG_ALG_SHA1_96
+        )
+        self.auth_algo = "HMAC-SHA1-96"  # scapy name
+        self.auth_key = b"C91KUR9GYMm5GfkEvNjX"
+
+        self.crypt_algo_vpp_id = (
+            VppEnum.vl_api_ipsec_crypto_alg_t.IPSEC_API_CRYPTO_ALG_AES_CBC_128
+        )
+        self.crypt_algo = "AES-CBC"  # scapy name
+        self.crypt_key = b"JPjyOWBeVEQiMe7h"
         self.salt = 0
         self.flags = 0
         self.nat_header = None
         self.salt = 0
         self.flags = 0
         self.nat_header = None
-        self.tun_flags = (VppEnum.vl_api_tunnel_encap_decap_flags_t.
-                          TUNNEL_API_ENCAP_DECAP_FLAG_NONE)
+        self.tun_flags = (
+            VppEnum.vl_api_tunnel_encap_decap_flags_t.TUNNEL_API_ENCAP_DECAP_FLAG_NONE
+        )
         self.dscp = 0
         self.async_mode = False
 
         self.dscp = 0
         self.async_mode = False
 
@@ -120,36 +130,40 @@ def mk_scapy_crypt_key(p):
 
 def config_tun_params(p, encryption_type, tun_if):
     ip_class_by_addr_type = {socket.AF_INET: IP, socket.AF_INET6: IPv6}
 
 def config_tun_params(p, encryption_type, tun_if):
     ip_class_by_addr_type = {socket.AF_INET: IP, socket.AF_INET6: IPv6}
-    esn_en = bool(p.flags & (VppEnum.vl_api_ipsec_sad_flags_t.
-                             IPSEC_API_SAD_FLAG_USE_ESN))
+    esn_en = bool(
+        p.flags & (VppEnum.vl_api_ipsec_sad_flags_t.IPSEC_API_SAD_FLAG_USE_ESN)
+    )
     p.tun_dst = tun_if.remote_addr[p.addr_type]
     p.tun_src = tun_if.local_addr[p.addr_type]
     crypt_key = mk_scapy_crypt_key(p)
     p.scapy_tun_sa = SecurityAssociation(
     p.tun_dst = tun_if.remote_addr[p.addr_type]
     p.tun_src = tun_if.local_addr[p.addr_type]
     crypt_key = mk_scapy_crypt_key(p)
     p.scapy_tun_sa = SecurityAssociation(
-        encryption_type, spi=p.vpp_tun_spi,
+        encryption_type,
+        spi=p.vpp_tun_spi,
         crypt_algo=p.crypt_algo,
         crypt_key=crypt_key,
         crypt_algo=p.crypt_algo,
         crypt_key=crypt_key,
-        auth_algo=p.auth_algo, auth_key=p.auth_key,
-        tunnel_header=ip_class_by_addr_type[p.addr_type](
-            src=p.tun_dst,
-            dst=p.tun_src),
+        auth_algo=p.auth_algo,
+        auth_key=p.auth_key,
+        tunnel_header=ip_class_by_addr_type[p.addr_type](src=p.tun_dst, dst=p.tun_src),
         nat_t_header=p.nat_header,
         nat_t_header=p.nat_header,
-        esn_en=esn_en)
+        esn_en=esn_en,
+    )
     p.vpp_tun_sa = SecurityAssociation(
     p.vpp_tun_sa = SecurityAssociation(
-        encryption_type, spi=p.scapy_tun_spi,
+        encryption_type,
+        spi=p.scapy_tun_spi,
         crypt_algo=p.crypt_algo,
         crypt_key=crypt_key,
         crypt_algo=p.crypt_algo,
         crypt_key=crypt_key,
-        auth_algo=p.auth_algo, auth_key=p.auth_key,
-        tunnel_header=ip_class_by_addr_type[p.addr_type](
-            dst=p.tun_dst,
-            src=p.tun_src),
+        auth_algo=p.auth_algo,
+        auth_key=p.auth_key,
+        tunnel_header=ip_class_by_addr_type[p.addr_type](dst=p.tun_dst, src=p.tun_src),
         nat_t_header=p.nat_header,
         nat_t_header=p.nat_header,
-        esn_en=esn_en)
+        esn_en=esn_en,
+    )
 
 
 def config_tra_params(p, encryption_type):
 
 
 def config_tra_params(p, encryption_type):
-    esn_en = bool(p.flags & (VppEnum.vl_api_ipsec_sad_flags_t.
-                             IPSEC_API_SAD_FLAG_USE_ESN))
+    esn_en = bool(
+        p.flags & (VppEnum.vl_api_ipsec_sad_flags_t.IPSEC_API_SAD_FLAG_USE_ESN)
+    )
     crypt_key = mk_scapy_crypt_key(p)
     p.scapy_tra_sa = SecurityAssociation(
         encryption_type,
     crypt_key = mk_scapy_crypt_key(p)
     p.scapy_tra_sa = SecurityAssociation(
         encryption_type,
@@ -159,7 +173,8 @@ def config_tra_params(p, encryption_type):
         auth_algo=p.auth_algo,
         auth_key=p.auth_key,
         nat_t_header=p.nat_header,
         auth_algo=p.auth_algo,
         auth_key=p.auth_key,
         nat_t_header=p.nat_header,
-        esn_en=esn_en)
+        esn_en=esn_en,
+    )
     p.vpp_tra_sa = SecurityAssociation(
         encryption_type,
         spi=p.scapy_tra_spi,
     p.vpp_tra_sa = SecurityAssociation(
         encryption_type,
         spi=p.scapy_tra_spi,
@@ -168,7 +183,8 @@ def config_tra_params(p, encryption_type):
         auth_algo=p.auth_algo,
         auth_key=p.auth_key,
         nat_t_header=p.nat_header,
         auth_algo=p.auth_algo,
         auth_key=p.auth_key,
         nat_t_header=p.nat_header,
-        esn_en=esn_en)
+        esn_en=esn_en,
+    )
 
 
 class TemplateIpsec(VppTestCase):
 
 
 class TemplateIpsec(VppTestCase):
@@ -189,11 +205,12 @@ class TemplateIpsec(VppTestCase):
         |tun_if| ------->  |VPP| ------> |pg1|
          ------             ---           ---
     """
         |tun_if| ------->  |VPP| ------> |pg1|
          ------             ---           ---
     """
+
     tun_spd_id = 1
     tra_spd_id = 2
 
     def ipsec_select_backend(self):
     tun_spd_id = 1
     tra_spd_id = 2
 
     def ipsec_select_backend(self):
-        """ empty method to be overloaded when necessary """
+        """empty method to be overloaded when necessary"""
         pass
 
     @classmethod
         pass
 
     @classmethod
@@ -205,12 +222,14 @@ class TemplateIpsec(VppTestCase):
         super(TemplateIpsec, cls).tearDownClass()
 
     def setup_params(self):
         super(TemplateIpsec, cls).tearDownClass()
 
     def setup_params(self):
-        if not hasattr(self, 'ipv4_params'):
+        if not hasattr(self, "ipv4_params"):
             self.ipv4_params = IPsecIPv4Params()
             self.ipv4_params = IPsecIPv4Params()
-        if not hasattr(self, 'ipv6_params'):
+        if not hasattr(self, "ipv6_params"):
             self.ipv6_params = IPsecIPv6Params()
             self.ipv6_params = IPsecIPv6Params()
-        self.params = {self.ipv4_params.addr_type: self.ipv4_params,
-                       self.ipv6_params.addr_type: self.ipv6_params}
+        self.params = {
+            self.ipv4_params.addr_type: self.ipv4_params,
+            self.ipv6_params.addr_type: self.ipv6_params,
+        }
 
     def config_interfaces(self):
         self.create_pg_interfaces(range(3))
 
     def config_interfaces(self):
         self.create_pg_interfaces(range(3))
@@ -227,10 +246,8 @@ class TemplateIpsec(VppTestCase):
 
         self.setup_params()
 
 
         self.setup_params()
 
-        self.vpp_esp_protocol = (VppEnum.vl_api_ipsec_proto_t.
-                                 IPSEC_API_PROTO_ESP)
-        self.vpp_ah_protocol = (VppEnum.vl_api_ipsec_proto_t.
-                                IPSEC_API_PROTO_AH)
+        self.vpp_esp_protocol = VppEnum.vl_api_ipsec_proto_t.IPSEC_API_PROTO_ESP
+        self.vpp_ah_protocol = VppEnum.vl_api_ipsec_proto_t.IPSEC_API_PROTO_AH
 
         self.config_interfaces()
 
 
         self.config_interfaces()
 
@@ -250,34 +267,39 @@ class TemplateIpsec(VppTestCase):
     def show_commands_at_teardown(self):
         self.logger.info(self.vapi.cli("show hardware"))
 
     def show_commands_at_teardown(self):
         self.logger.info(self.vapi.cli("show hardware"))
 
-    def gen_encrypt_pkts(self, p, sa, sw_intf, src, dst, count=1,
-                         payload_size=54):
-        return [Ether(src=sw_intf.remote_mac, dst=sw_intf.local_mac) /
-                sa.encrypt(IP(src=src, dst=dst) /
-                           ICMP() / Raw(b'X' * payload_size))
-                for i in range(count)]
-
-    def gen_encrypt_pkts6(self, p, sa, sw_intf, src, dst, count=1,
-                          payload_size=54):
-        return [Ether(src=sw_intf.remote_mac, dst=sw_intf.local_mac) /
-                sa.encrypt(IPv6(src=src, dst=dst,
-                                hlim=p.inner_hop_limit,
-                                fl=p.inner_flow_label) /
-                           ICMPv6EchoRequest(id=0, seq=1,
-                                             data='X' * payload_size))
-                for i in range(count)]
+    def gen_encrypt_pkts(self, p, sa, sw_intf, src, dst, count=1, payload_size=54):
+        return [
+            Ether(src=sw_intf.remote_mac, dst=sw_intf.local_mac)
+            / sa.encrypt(IP(src=src, dst=dst) / ICMP() / Raw(b"X" * payload_size))
+            for i in range(count)
+        ]
+
+    def gen_encrypt_pkts6(self, p, sa, sw_intf, src, dst, count=1, payload_size=54):
+        return [
+            Ether(src=sw_intf.remote_mac, dst=sw_intf.local_mac)
+            / sa.encrypt(
+                IPv6(src=src, dst=dst, hlim=p.inner_hop_limit, fl=p.inner_flow_label)
+                / ICMPv6EchoRequest(id=0, seq=1, data="X" * payload_size)
+            )
+            for i in range(count)
+        ]
 
     def gen_pkts(self, sw_intf, src, dst, count=1, payload_size=54):
 
     def gen_pkts(self, sw_intf, src, dst, count=1, payload_size=54):
-        return [Ether(src=sw_intf.remote_mac, dst=sw_intf.local_mac) /
-                IP(src=src, dst=dst) / ICMP() / Raw(b'X' * payload_size)
-                for i in range(count)]
+        return [
+            Ether(src=sw_intf.remote_mac, dst=sw_intf.local_mac)
+            / IP(src=src, dst=dst)
+            / ICMP()
+            / Raw(b"X" * payload_size)
+            for i in range(count)
+        ]
 
     def gen_pkts6(self, p, sw_intf, src, dst, count=1, payload_size=54):
 
     def gen_pkts6(self, p, sw_intf, src, dst, count=1, payload_size=54):
-        return [Ether(src=sw_intf.remote_mac, dst=sw_intf.local_mac) /
-                IPv6(src=src, dst=dst,
-                     hlim=p.inner_hop_limit, fl=p.inner_flow_label) /
-                ICMPv6EchoRequest(id=0, seq=1, data='X' * payload_size)
-                for i in range(count)]
+        return [
+            Ether(src=sw_intf.remote_mac, dst=sw_intf.local_mac)
+            / IPv6(src=src, dst=dst, hlim=p.inner_hop_limit, fl=p.inner_flow_label)
+            / ICMPv6EchoRequest(id=0, seq=1, data="X" * payload_size)
+            for i in range(count)
+        ]
 
 
 class IpsecTcp(object):
 
 
 class IpsecTcp(object):
@@ -285,10 +307,12 @@ class IpsecTcp(object):
         # start http cli server listener on http://0.0.0.0:80
         self.vapi.cli("http cli server")
         p = self.params[socket.AF_INET]
         # start http cli server listener on http://0.0.0.0:80
         self.vapi.cli("http cli server")
         p = self.params[socket.AF_INET]
-        send = (Ether(src=self.tun_if.remote_mac, dst=self.tun_if.local_mac) /
-                p.scapy_tun_sa.encrypt(IP(src=p.remote_tun_if_host,
-                                          dst=self.tun_if.local_ip4) /
-                                       TCP(flags='S', dport=80)))
+        send = Ether(
+            src=self.tun_if.remote_mac, dst=self.tun_if.local_mac
+        ) / p.scapy_tun_sa.encrypt(
+            IP(src=p.remote_tun_if_host, dst=self.tun_if.local_ip4)
+            / TCP(flags="S", dport=80)
+        )
         self.logger.debug(ppp("Sending packet:", send))
         recv = self.send_and_expect(self.tun_if, [send], self.tun_if)
         recv = recv[0]
         self.logger.debug(ppp("Sending packet:", send))
         recv = self.send_and_expect(self.tun_if, [send], self.tun_if)
         recv = recv[0]
@@ -298,36 +322,40 @@ class IpsecTcp(object):
 
 class IpsecTcpTests(IpsecTcp):
     def test_tcp_checksum(self):
 
 class IpsecTcpTests(IpsecTcp):
     def test_tcp_checksum(self):
-        """ verify checksum correctness for vpp generated packets """
+        """verify checksum correctness for vpp generated packets"""
         self.verify_tcp_checksum()
 
 
 class IpsecTra4(object):
         self.verify_tcp_checksum()
 
 
 class IpsecTra4(object):
-    """ verify methods for Transport v4 """
+    """verify methods for Transport v4"""
+
     def get_replay_counts(self, p):
     def get_replay_counts(self, p):
-        replay_node_name = ('/err/%s/SA replayed packet' %
-                            self.tra4_decrypt_node_name[0])
+        replay_node_name = "/err/%s/SA replayed packet" % self.tra4_decrypt_node_name[0]
         count = self.statistics.get_err_counter(replay_node_name)
 
         if p.async_mode:
         count = self.statistics.get_err_counter(replay_node_name)
 
         if p.async_mode:
-            replay_post_node_name = ('/err/%s/SA replayed packet' %
-                                     self.tra4_decrypt_node_name[p.async_mode])
+            replay_post_node_name = (
+                "/err/%s/SA replayed packet" % self.tra4_decrypt_node_name[p.async_mode]
+            )
             count += self.statistics.get_err_counter(replay_post_node_name)
 
         return count
 
     def get_hash_failed_counts(self, p):
         if ESP == self.encryption_type and p.crypt_algo == "AES-GCM":
             count += self.statistics.get_err_counter(replay_post_node_name)
 
         return count
 
     def get_hash_failed_counts(self, p):
         if ESP == self.encryption_type and p.crypt_algo == "AES-GCM":
-            hash_failed_node_name = ('/err/%s/ESP decryption failed' %
-                                     self.tra4_decrypt_node_name[p.async_mode])
+            hash_failed_node_name = (
+                "/err/%s/ESP decryption failed"
+                % self.tra4_decrypt_node_name[p.async_mode]
+            )
         else:
         else:
-            hash_failed_node_name = ('/err/%s/Integrity check failed' %
-                                     self.tra4_decrypt_node_name[p.async_mode])
+            hash_failed_node_name = (
+                "/err/%s/Integrity check failed"
+                % self.tra4_decrypt_node_name[p.async_mode]
+            )
         count = self.statistics.get_err_counter(hash_failed_node_name)
 
         if p.async_mode:
         count = self.statistics.get_err_counter(hash_failed_node_name)
 
         if p.async_mode:
-            count += self.statistics.get_err_counter(
-                '/err/crypto-dispatch/bad-hmac')
+            count += self.statistics.get_err_counter("/err/crypto-dispatch/bad-hmac")
 
         return count
 
 
         return count
 
@@ -337,81 +365,100 @@ class IpsecTra4(object):
         esn_on = p.vpp_tra_sa.esn_en
         ar_on = p.flags & saf.IPSEC_API_SAD_FLAG_USE_ANTI_REPLAY
 
         esn_on = p.vpp_tra_sa.esn_en
         ar_on = p.flags & saf.IPSEC_API_SAD_FLAG_USE_ANTI_REPLAY
 
-        seq_cycle_node_name = \
-            ('/err/%s/sequence number cycled (packet dropped)' %
-             self.tra4_encrypt_node_name)
+        seq_cycle_node_name = (
+            "/err/%s/sequence number cycled (packet dropped)"
+            % self.tra4_encrypt_node_name
+        )
         replay_count = self.get_replay_counts(p)
         hash_failed_count = self.get_hash_failed_counts(p)
         seq_cycle_count = self.statistics.get_err_counter(seq_cycle_node_name)
 
         # a few packets so we get the rx seq number above the window size and
         # thus can simulate a wrap with an out of window packet
         replay_count = self.get_replay_counts(p)
         hash_failed_count = self.get_hash_failed_counts(p)
         seq_cycle_count = self.statistics.get_err_counter(seq_cycle_node_name)
 
         # a few packets so we get the rx seq number above the window size and
         # thus can simulate a wrap with an out of window packet
-        pkts = [(Ether(src=self.tra_if.remote_mac,
-                       dst=self.tra_if.local_mac) /
-                 p.scapy_tra_sa.encrypt(IP(src=self.tra_if.remote_ip4,
-                                           dst=self.tra_if.local_ip4) /
-                                        ICMP(),
-                                        seq_num=seq))
-                for seq in range(63, 80)]
+        pkts = [
+            (
+                Ether(src=self.tra_if.remote_mac, dst=self.tra_if.local_mac)
+                / p.scapy_tra_sa.encrypt(
+                    IP(src=self.tra_if.remote_ip4, dst=self.tra_if.local_ip4) / ICMP(),
+                    seq_num=seq,
+                )
+            )
+            for seq in range(63, 80)
+        ]
         recv_pkts = self.send_and_expect(self.tra_if, pkts, self.tra_if)
 
         # these 4 packets will all choose seq-num 0 to decrpyt since none
         # are out of window when first checked. however, once #200 has
         # decrypted it will move the window to 200 and has #81 is out of
         # window. this packet should be dropped.
         recv_pkts = self.send_and_expect(self.tra_if, pkts, self.tra_if)
 
         # these 4 packets will all choose seq-num 0 to decrpyt since none
         # are out of window when first checked. however, once #200 has
         # decrypted it will move the window to 200 and has #81 is out of
         # window. this packet should be dropped.
-        pkts = [(Ether(src=self.tra_if.remote_mac,
-                       dst=self.tra_if.local_mac) /
-                 p.scapy_tra_sa.encrypt(IP(src=self.tra_if.remote_ip4,
-                                           dst=self.tra_if.local_ip4) /
-                                        ICMP(),
-                                        seq_num=200)),
-                (Ether(src=self.tra_if.remote_mac,
-                       dst=self.tra_if.local_mac) /
-                 p.scapy_tra_sa.encrypt(IP(src=self.tra_if.remote_ip4,
-                                           dst=self.tra_if.local_ip4) /
-                                        ICMP(),
-                                        seq_num=81)),
-                (Ether(src=self.tra_if.remote_mac,
-                       dst=self.tra_if.local_mac) /
-                 p.scapy_tra_sa.encrypt(IP(src=self.tra_if.remote_ip4,
-                                           dst=self.tra_if.local_ip4) /
-                                        ICMP(),
-                                        seq_num=201)),
-                (Ether(src=self.tra_if.remote_mac,
-                       dst=self.tra_if.local_mac) /
-                 p.scapy_tra_sa.encrypt(IP(src=self.tra_if.remote_ip4,
-                                           dst=self.tra_if.local_ip4) /
-                                        ICMP(),
-                                        seq_num=202))]
+        pkts = [
+            (
+                Ether(src=self.tra_if.remote_mac, dst=self.tra_if.local_mac)
+                / p.scapy_tra_sa.encrypt(
+                    IP(src=self.tra_if.remote_ip4, dst=self.tra_if.local_ip4) / ICMP(),
+                    seq_num=200,
+                )
+            ),
+            (
+                Ether(src=self.tra_if.remote_mac, dst=self.tra_if.local_mac)
+                / p.scapy_tra_sa.encrypt(
+                    IP(src=self.tra_if.remote_ip4, dst=self.tra_if.local_ip4) / ICMP(),
+                    seq_num=81,
+                )
+            ),
+            (
+                Ether(src=self.tra_if.remote_mac, dst=self.tra_if.local_mac)
+                / p.scapy_tra_sa.encrypt(
+                    IP(src=self.tra_if.remote_ip4, dst=self.tra_if.local_ip4) / ICMP(),
+                    seq_num=201,
+                )
+            ),
+            (
+                Ether(src=self.tra_if.remote_mac, dst=self.tra_if.local_mac)
+                / p.scapy_tra_sa.encrypt(
+                    IP(src=self.tra_if.remote_ip4, dst=self.tra_if.local_ip4) / ICMP(),
+                    seq_num=202,
+                )
+            ),
+        ]
 
         # if anti-replay is off then we won't drop #81
         n_rx = 3 if ar_on else 4
         self.send_and_expect(self.tra_if, pkts, self.tra_if, n_rx=n_rx)
         # this packet is one before the wrap
 
         # if anti-replay is off then we won't drop #81
         n_rx = 3 if ar_on else 4
         self.send_and_expect(self.tra_if, pkts, self.tra_if, n_rx=n_rx)
         # this packet is one before the wrap
-        pkts = [(Ether(src=self.tra_if.remote_mac,
-                       dst=self.tra_if.local_mac) /
-                 p.scapy_tra_sa.encrypt(IP(src=self.tra_if.remote_ip4,
-                                           dst=self.tra_if.local_ip4) /
-                                        ICMP(),
-                                        seq_num=203))]
+        pkts = [
+            (
+                Ether(src=self.tra_if.remote_mac, dst=self.tra_if.local_mac)
+                / p.scapy_tra_sa.encrypt(
+                    IP(src=self.tra_if.remote_ip4, dst=self.tra_if.local_ip4) / ICMP(),
+                    seq_num=203,
+                )
+            )
+        ]
         recv_pkts = self.send_and_expect(self.tra_if, pkts, self.tra_if)
 
         # move the window over half way to a wrap
         recv_pkts = self.send_and_expect(self.tra_if, pkts, self.tra_if)
 
         # move the window over half way to a wrap
-        pkts = [(Ether(src=self.tra_if.remote_mac,
-                       dst=self.tra_if.local_mac) /
-                 p.scapy_tra_sa.encrypt(IP(src=self.tra_if.remote_ip4,
-                                           dst=self.tra_if.local_ip4) /
-                                        ICMP(),
-                                        seq_num=0x80000001))]
+        pkts = [
+            (
+                Ether(src=self.tra_if.remote_mac, dst=self.tra_if.local_mac)
+                / p.scapy_tra_sa.encrypt(
+                    IP(src=self.tra_if.remote_ip4, dst=self.tra_if.local_ip4) / ICMP(),
+                    seq_num=0x80000001,
+                )
+            )
+        ]
         recv_pkts = self.send_and_expect(self.tra_if, pkts, self.tra_if)
 
         # anti-replay will drop old packets, no anti-replay will not
         recv_pkts = self.send_and_expect(self.tra_if, pkts, self.tra_if)
 
         # anti-replay will drop old packets, no anti-replay will not
-        pkts = [(Ether(src=self.tra_if.remote_mac,
-                       dst=self.tra_if.local_mac) /
-                 p.scapy_tra_sa.encrypt(IP(src=self.tra_if.remote_ip4,
-                                           dst=self.tra_if.local_ip4) /
-                                        ICMP(),
-                                        seq_num=0x44000001))]
+        pkts = [
+            (
+                Ether(src=self.tra_if.remote_mac, dst=self.tra_if.local_mac)
+                / p.scapy_tra_sa.encrypt(
+                    IP(src=self.tra_if.remote_ip4, dst=self.tra_if.local_ip4) / ICMP(),
+                    seq_num=0x44000001,
+                )
+            )
+        ]
 
         if ar_on:
             self.send_and_assert_no_replies(self.tra_if, pkts)
 
         if ar_on:
             self.send_and_assert_no_replies(self.tra_if, pkts)
@@ -427,36 +474,48 @@ class IpsecTra4(object):
             p.scapy_tra_sa.seq_num = 0x100000005
 
             # send a packet that wraps the window for both AR and no AR
             p.scapy_tra_sa.seq_num = 0x100000005
 
             # send a packet that wraps the window for both AR and no AR
-            pkts = [(Ether(src=self.tra_if.remote_mac,
-                           dst=self.tra_if.local_mac) /
-                     p.scapy_tra_sa.encrypt(IP(src=self.tra_if.remote_ip4,
-                                               dst=self.tra_if.local_ip4) /
-                                            ICMP(),
-                                            seq_num=0x100000005))]
+            pkts = [
+                (
+                    Ether(src=self.tra_if.remote_mac, dst=self.tra_if.local_mac)
+                    / p.scapy_tra_sa.encrypt(
+                        IP(src=self.tra_if.remote_ip4, dst=self.tra_if.local_ip4)
+                        / ICMP(),
+                        seq_num=0x100000005,
+                    )
+                )
+            ]
 
             rxs = self.send_and_expect(self.tra_if, pkts, self.tra_if)
             for rx in rxs:
                 decrypted = p.vpp_tra_sa.decrypt(rx[0][IP])
 
             # move the window forward to half way to the next wrap
 
             rxs = self.send_and_expect(self.tra_if, pkts, self.tra_if)
             for rx in rxs:
                 decrypted = p.vpp_tra_sa.decrypt(rx[0][IP])
 
             # move the window forward to half way to the next wrap
-            pkts = [(Ether(src=self.tra_if.remote_mac,
-                           dst=self.tra_if.local_mac) /
-                     p.scapy_tra_sa.encrypt(IP(src=self.tra_if.remote_ip4,
-                                               dst=self.tra_if.local_ip4) /
-                                            ICMP(),
-                                            seq_num=0x180000005))]
+            pkts = [
+                (
+                    Ether(src=self.tra_if.remote_mac, dst=self.tra_if.local_mac)
+                    / p.scapy_tra_sa.encrypt(
+                        IP(src=self.tra_if.remote_ip4, dst=self.tra_if.local_ip4)
+                        / ICMP(),
+                        seq_num=0x180000005,
+                    )
+                )
+            ]
 
             rxs = self.send_and_expect(self.tra_if, pkts, self.tra_if)
 
             # a packet less than 2^30 from the current position is:
             #  - AR: out of window and dropped
             #  - non-AR: accepted
 
             rxs = self.send_and_expect(self.tra_if, pkts, self.tra_if)
 
             # a packet less than 2^30 from the current position is:
             #  - AR: out of window and dropped
             #  - non-AR: accepted
-            pkts = [(Ether(src=self.tra_if.remote_mac,
-                           dst=self.tra_if.local_mac) /
-                     p.scapy_tra_sa.encrypt(IP(src=self.tra_if.remote_ip4,
-                                               dst=self.tra_if.local_ip4) /
-                                            ICMP(),
-                                            seq_num=0x170000005))]
+            pkts = [
+                (
+                    Ether(src=self.tra_if.remote_mac, dst=self.tra_if.local_mac)
+                    / p.scapy_tra_sa.encrypt(
+                        IP(src=self.tra_if.remote_ip4, dst=self.tra_if.local_ip4)
+                        / ICMP(),
+                        seq_num=0x170000005,
+                    )
+                )
+            ]
 
             if ar_on:
                 self.send_and_assert_no_replies(self.tra_if, pkts)
 
             if ar_on:
                 self.send_and_assert_no_replies(self.tra_if, pkts)
@@ -467,12 +526,16 @@ class IpsecTra4(object):
             #  - AR: out of window and dropped
             #  - non-AR: considered a wrap, but since it's not a wrap
             #    it won't decrpyt and so will be dropped
             #  - AR: out of window and dropped
             #  - non-AR: considered a wrap, but since it's not a wrap
             #    it won't decrpyt and so will be dropped
-            pkts = [(Ether(src=self.tra_if.remote_mac,
-                           dst=self.tra_if.local_mac) /
-                     p.scapy_tra_sa.encrypt(IP(src=self.tra_if.remote_ip4,
-                                               dst=self.tra_if.local_ip4) /
-                                            ICMP(),
-                                            seq_num=0x130000005))]
+            pkts = [
+                (
+                    Ether(src=self.tra_if.remote_mac, dst=self.tra_if.local_mac)
+                    / p.scapy_tra_sa.encrypt(
+                        IP(src=self.tra_if.remote_ip4, dst=self.tra_if.local_ip4)
+                        / ICMP(),
+                        seq_num=0x130000005,
+                    )
+                )
+            ]
 
             self.send_and_assert_no_replies(self.tra_if, pkts)
 
 
             self.send_and_assert_no_replies(self.tra_if, pkts)
 
@@ -481,12 +544,16 @@ class IpsecTra4(object):
             #  - AR: out of window so considered a wrap, so accepted
             #  - non-AR: not considered a wrap, so won't decrypt
             p.scapy_tra_sa.seq_num = 0x260000005
             #  - AR: out of window so considered a wrap, so accepted
             #  - non-AR: not considered a wrap, so won't decrypt
             p.scapy_tra_sa.seq_num = 0x260000005
-            pkts = [(Ether(src=self.tra_if.remote_mac,
-                           dst=self.tra_if.local_mac) /
-                     p.scapy_tra_sa.encrypt(IP(src=self.tra_if.remote_ip4,
-                                               dst=self.tra_if.local_ip4) /
-                                            ICMP(),
-                                            seq_num=0x260000005))]
+            pkts = [
+                (
+                    Ether(src=self.tra_if.remote_mac, dst=self.tra_if.local_mac)
+                    / p.scapy_tra_sa.encrypt(
+                        IP(src=self.tra_if.remote_ip4, dst=self.tra_if.local_ip4)
+                        / ICMP(),
+                        seq_num=0x260000005,
+                    )
+                )
+            ]
             if ar_on:
                 self.send_and_expect(self.tra_if, pkts, self.tra_if)
             else:
             if ar_on:
                 self.send_and_expect(self.tra_if, pkts, self.tra_if)
             else:
@@ -502,44 +569,55 @@ class IpsecTra4(object):
                 #  - AR: accepted
                 #  - non-AR: not considered a wrap, so won't decrypt
 
                 #  - AR: accepted
                 #  - non-AR: not considered a wrap, so won't decrypt
 
-                pkts = [(Ether(src=self.tra_if.remote_mac,
-                               dst=self.tra_if.local_mac) /
-                         p.scapy_tra_sa.encrypt(IP(src=self.tra_if.remote_ip4,
-                                                   dst=self.tra_if.local_ip4) /
-                                                ICMP(),
-                                                seq_num=0x200000005)),
-                        (Ether(src=self.tra_if.remote_mac,
-                               dst=self.tra_if.local_mac) /
-                         p.scapy_tra_sa.encrypt(IP(src=self.tra_if.remote_ip4,
-                                                   dst=self.tra_if.local_ip4) /
-                                                ICMP(),
-                                                seq_num=0x200000006))]
+                pkts = [
+                    (
+                        Ether(src=self.tra_if.remote_mac, dst=self.tra_if.local_mac)
+                        / p.scapy_tra_sa.encrypt(
+                            IP(src=self.tra_if.remote_ip4, dst=self.tra_if.local_ip4)
+                            / ICMP(),
+                            seq_num=0x200000005,
+                        )
+                    ),
+                    (
+                        Ether(src=self.tra_if.remote_mac, dst=self.tra_if.local_mac)
+                        / p.scapy_tra_sa.encrypt(
+                            IP(src=self.tra_if.remote_ip4, dst=self.tra_if.local_ip4)
+                            / ICMP(),
+                            seq_num=0x200000006,
+                        )
+                    ),
+                ]
                 self.send_and_expect(self.tra_if, pkts, self.tra_if)
 
                 self.send_and_expect(self.tra_if, pkts, self.tra_if)
 
-                pkts = [(Ether(src=self.tra_if.remote_mac,
-                               dst=self.tra_if.local_mac) /
-                         p.scapy_tra_sa.encrypt(IP(src=self.tra_if.remote_ip4,
-                                                   dst=self.tra_if.local_ip4) /
-                                                ICMP(),
-                                                seq_num=0x260000005))]
+                pkts = [
+                    (
+                        Ether(src=self.tra_if.remote_mac, dst=self.tra_if.local_mac)
+                        / p.scapy_tra_sa.encrypt(
+                            IP(src=self.tra_if.remote_ip4, dst=self.tra_if.local_ip4)
+                            / ICMP(),
+                            seq_num=0x260000005,
+                        )
+                    )
+                ]
                 self.send_and_expect(self.tra_if, pkts, self.tra_if)
 
     def verify_tra_anti_replay(self):
         p = self.params[socket.AF_INET]
         esn_en = p.vpp_tra_sa.esn_en
 
                 self.send_and_expect(self.tra_if, pkts, self.tra_if)
 
     def verify_tra_anti_replay(self):
         p = self.params[socket.AF_INET]
         esn_en = p.vpp_tra_sa.esn_en
 
-        seq_cycle_node_name = \
-            ('/err/%s/sequence number cycled (packet dropped)' %
-             self.tra4_encrypt_node_name)
+        seq_cycle_node_name = (
+            "/err/%s/sequence number cycled (packet dropped)"
+            % self.tra4_encrypt_node_name
+        )
         replay_count = self.get_replay_counts(p)
         hash_failed_count = self.get_hash_failed_counts(p)
         seq_cycle_count = self.statistics.get_err_counter(seq_cycle_node_name)
 
         if ESP == self.encryption_type:
         replay_count = self.get_replay_counts(p)
         hash_failed_count = self.get_hash_failed_counts(p)
         seq_cycle_count = self.statistics.get_err_counter(seq_cycle_node_name)
 
         if ESP == self.encryption_type:
-            undersize_node_name = ('/err/%s/undersized packet' %
-                                   self.tra4_decrypt_node_name[0])
-            undersize_count = self.statistics.get_err_counter(
-                undersize_node_name)
+            undersize_node_name = (
+                "/err/%s/undersized packet" % self.tra4_decrypt_node_name[0]
+            )
+            undersize_count = self.statistics.get_err_counter(undersize_node_name)
 
         #
         # send packets with seq numbers 1->34
 
         #
         # send packets with seq numbers 1->34
@@ -549,13 +627,16 @@ class IpsecTra4(object):
         # for reasons i haven't investigated Scapy won't create a packet with
         # seq_num=0
         #
         # for reasons i haven't investigated Scapy won't create a packet with
         # seq_num=0
         #
-        pkts = [(Ether(src=self.tra_if.remote_mac,
-                       dst=self.tra_if.local_mac) /
-                 p.scapy_tra_sa.encrypt(IP(src=self.tra_if.remote_ip4,
-                                           dst=self.tra_if.local_ip4) /
-                                        ICMP(),
-                                        seq_num=seq))
-                for seq in range(1, 34)]
+        pkts = [
+            (
+                Ether(src=self.tra_if.remote_mac, dst=self.tra_if.local_mac)
+                / p.scapy_tra_sa.encrypt(
+                    IP(src=self.tra_if.remote_ip4, dst=self.tra_if.local_ip4) / ICMP(),
+                    seq_num=seq,
+                )
+            )
+            for seq in range(1, 34)
+        ]
         recv_pkts = self.send_and_expect(self.tra_if, pkts, self.tra_if)
 
         # replayed packets are dropped
         recv_pkts = self.send_and_expect(self.tra_if, pkts, self.tra_if)
 
         # replayed packets are dropped
@@ -569,14 +650,13 @@ class IpsecTra4(object):
         #
         self.vapi.cli("clear error")
         self.vapi.cli("clear node counters")
         #
         self.vapi.cli("clear error")
         self.vapi.cli("clear node counters")
-        pkts = (Ether(src=self.tra_if.remote_mac,
-                      dst=self.tra_if.local_mac) /
-                p.scapy_tra_sa.encrypt(IP(src=self.tra_if.remote_ip4,
-                                          dst=self.tra_if.local_ip4) /
-                                       ICMP(),
-                                       seq_num=35))
-        recv_pkts = self.send_and_expect(self.tra_if, pkts * 8,
-                                         self.tra_if, n_rx=1)
+        pkts = Ether(
+            src=self.tra_if.remote_mac, dst=self.tra_if.local_mac
+        ) / p.scapy_tra_sa.encrypt(
+            IP(src=self.tra_if.remote_ip4, dst=self.tra_if.local_ip4) / ICMP(),
+            seq_num=35,
+        )
+        recv_pkts = self.send_and_expect(self.tra_if, pkts * 8, self.tra_if, n_rx=1)
         replay_count += 7
         self.assertEqual(self.get_replay_counts(p), replay_count)
 
         replay_count += 7
         self.assertEqual(self.get_replay_counts(p), replay_count)
 
@@ -584,12 +664,12 @@ class IpsecTra4(object):
         # now move the window over to 257 (more than one byte) and into Case A
         #
         self.vapi.cli("clear error")
         # now move the window over to 257 (more than one byte) and into Case A
         #
         self.vapi.cli("clear error")
-        pkt = (Ether(src=self.tra_if.remote_mac,
-                     dst=self.tra_if.local_mac) /
-               p.scapy_tra_sa.encrypt(IP(src=self.tra_if.remote_ip4,
-                                         dst=self.tra_if.local_ip4) /
-                                      ICMP(),
-                                      seq_num=257))
+        pkt = Ether(
+            src=self.tra_if.remote_mac, dst=self.tra_if.local_mac
+        ) / p.scapy_tra_sa.encrypt(
+            IP(src=self.tra_if.remote_ip4, dst=self.tra_if.local_ip4) / ICMP(),
+            seq_num=257,
+        )
         recv_pkts = self.send_and_expect(self.tra_if, [pkt], self.tra_if)
 
         # replayed packets are dropped
         recv_pkts = self.send_and_expect(self.tra_if, [pkt], self.tra_if)
 
         # replayed packets are dropped
@@ -599,27 +679,29 @@ class IpsecTra4(object):
 
         # the window size is 64 packets
         # in window are still accepted
 
         # the window size is 64 packets
         # in window are still accepted
-        pkt = (Ether(src=self.tra_if.remote_mac,
-                     dst=self.tra_if.local_mac) /
-               p.scapy_tra_sa.encrypt(IP(src=self.tra_if.remote_ip4,
-                                         dst=self.tra_if.local_ip4) /
-                                      ICMP(),
-                                      seq_num=200))
+        pkt = Ether(
+            src=self.tra_if.remote_mac, dst=self.tra_if.local_mac
+        ) / p.scapy_tra_sa.encrypt(
+            IP(src=self.tra_if.remote_ip4, dst=self.tra_if.local_ip4) / ICMP(),
+            seq_num=200,
+        )
         recv_pkts = self.send_and_expect(self.tra_if, [pkt], self.tra_if)
 
         # a packet that does not decrypt does not move the window forward
         recv_pkts = self.send_and_expect(self.tra_if, [pkt], self.tra_if)
 
         # a packet that does not decrypt does not move the window forward
-        bogus_sa = SecurityAssociation(self.encryption_type,
-                                       p.vpp_tra_spi,
-                                       crypt_algo=p.crypt_algo,
-                                       crypt_key=mk_scapy_crypt_key(p)[::-1],
-                                       auth_algo=p.auth_algo,
-                                       auth_key=p.auth_key[::-1])
-        pkt = (Ether(src=self.tra_if.remote_mac,
-                     dst=self.tra_if.local_mac) /
-               bogus_sa.encrypt(IP(src=self.tra_if.remote_ip4,
-                                   dst=self.tra_if.local_ip4) /
-                                ICMP(),
-                                seq_num=350))
+        bogus_sa = SecurityAssociation(
+            self.encryption_type,
+            p.vpp_tra_spi,
+            crypt_algo=p.crypt_algo,
+            crypt_key=mk_scapy_crypt_key(p)[::-1],
+            auth_algo=p.auth_algo,
+            auth_key=p.auth_key[::-1],
+        )
+        pkt = Ether(
+            src=self.tra_if.remote_mac, dst=self.tra_if.local_mac
+        ) / bogus_sa.encrypt(
+            IP(src=self.tra_if.remote_ip4, dst=self.tra_if.local_ip4) / ICMP(),
+            seq_num=350,
+        )
         self.send_and_assert_no_replies(self.tra_if, pkt * 17, timeout=0.2)
 
         hash_failed_count += 17
         self.send_and_assert_no_replies(self.tra_if, pkt * 17, timeout=0.2)
 
         hash_failed_count += 17
@@ -627,28 +709,26 @@ class IpsecTra4(object):
 
         # a malformed 'runt' packet
         #  created by a mis-constructed SA
 
         # a malformed 'runt' packet
         #  created by a mis-constructed SA
-        if (ESP == self.encryption_type and p.crypt_algo != "NULL"):
-            bogus_sa = SecurityAssociation(self.encryption_type,
-                                           p.vpp_tra_spi)
-            pkt = (Ether(src=self.tra_if.remote_mac,
-                         dst=self.tra_if.local_mac) /
-                   bogus_sa.encrypt(IP(src=self.tra_if.remote_ip4,
-                                       dst=self.tra_if.local_ip4) /
-                                    ICMP(),
-                                    seq_num=350))
+        if ESP == self.encryption_type and p.crypt_algo != "NULL":
+            bogus_sa = SecurityAssociation(self.encryption_type, p.vpp_tra_spi)
+            pkt = Ether(
+                src=self.tra_if.remote_mac, dst=self.tra_if.local_mac
+            ) / bogus_sa.encrypt(
+                IP(src=self.tra_if.remote_ip4, dst=self.tra_if.local_ip4) / ICMP(),
+                seq_num=350,
+            )
             self.send_and_assert_no_replies(self.tra_if, pkt * 17, timeout=0.2)
 
             undersize_count += 17
             self.send_and_assert_no_replies(self.tra_if, pkt * 17, timeout=0.2)
 
             undersize_count += 17
-            self.assert_error_counter_equal(undersize_node_name,
-                                            undersize_count)
+            self.assert_error_counter_equal(undersize_node_name, undersize_count)
 
         # which we can determine since this packet is still in the window
 
         # which we can determine since this packet is still in the window
-        pkt = (Ether(src=self.tra_if.remote_mac,
-                     dst=self.tra_if.local_mac) /
-               p.scapy_tra_sa.encrypt(IP(src=self.tra_if.remote_ip4,
-                                         dst=self.tra_if.local_ip4) /
-                                      ICMP(),
-                                      seq_num=234))
+        pkt = Ether(
+            src=self.tra_if.remote_mac, dst=self.tra_if.local_mac
+        ) / p.scapy_tra_sa.encrypt(
+            IP(src=self.tra_if.remote_ip4, dst=self.tra_if.local_ip4) / ICMP(),
+            seq_num=234,
+        )
         self.send_and_expect(self.tra_if, [pkt], self.tra_if)
 
         #
         self.send_and_expect(self.tra_if, [pkt], self.tra_if)
 
         #
@@ -656,12 +736,12 @@ class IpsecTra4(object):
         #  this is Case B. So VPP will consider this to be a high seq num wrap
         #  and so the decrypt attempt will fail
         #
         #  this is Case B. So VPP will consider this to be a high seq num wrap
         #  and so the decrypt attempt will fail
         #
-        pkt = (Ether(src=self.tra_if.remote_mac,
-                     dst=self.tra_if.local_mac) /
-               p.scapy_tra_sa.encrypt(IP(src=self.tra_if.remote_ip4,
-                                         dst=self.tra_if.local_ip4) /
-                                      ICMP(),
-                                      seq_num=17))
+        pkt = Ether(
+            src=self.tra_if.remote_mac, dst=self.tra_if.local_mac
+        ) / p.scapy_tra_sa.encrypt(
+            IP(src=self.tra_if.remote_ip4, dst=self.tra_if.local_ip4) / ICMP(),
+            seq_num=17,
+        )
         self.send_and_assert_no_replies(self.tra_if, pkt * 17, timeout=0.2)
 
         if esn_en:
         self.send_and_assert_no_replies(self.tra_if, pkt * 17, timeout=0.2)
 
         if esn_en:
@@ -675,12 +755,12 @@ class IpsecTra4(object):
             self.assertEqual(self.get_replay_counts(p), replay_count)
 
         # valid packet moves the window over to 258
             self.assertEqual(self.get_replay_counts(p), replay_count)
 
         # valid packet moves the window over to 258
-        pkt = (Ether(src=self.tra_if.remote_mac,
-                     dst=self.tra_if.local_mac) /
-               p.scapy_tra_sa.encrypt(IP(src=self.tra_if.remote_ip4,
-                                         dst=self.tra_if.local_ip4) /
-                                      ICMP(),
-                                      seq_num=258))
+        pkt = Ether(
+            src=self.tra_if.remote_mac, dst=self.tra_if.local_mac
+        ) / p.scapy_tra_sa.encrypt(
+            IP(src=self.tra_if.remote_ip4, dst=self.tra_if.local_ip4) / ICMP(),
+            seq_num=258,
+        )
         rx = self.send_and_expect(self.tra_if, [pkt], self.tra_if)
         decrypted = p.vpp_tra_sa.decrypt(rx[0][IP])
 
         rx = self.send_and_expect(self.tra_if, [pkt], self.tra_if)
         decrypted = p.vpp_tra_sa.decrypt(rx[0][IP])
 
@@ -694,13 +774,16 @@ class IpsecTra4(object):
         self.logger.info(self.vapi.ppcli("show ipsec sa 0"))
         self.logger.info(self.vapi.ppcli("show ipsec sa 1"))
 
         self.logger.info(self.vapi.ppcli("show ipsec sa 0"))
         self.logger.info(self.vapi.ppcli("show ipsec sa 1"))
 
-        pkts = [(Ether(src=self.tra_if.remote_mac,
-                       dst=self.tra_if.local_mac) /
-                 p.scapy_tra_sa.encrypt(IP(src=self.tra_if.remote_ip4,
-                                           dst=self.tra_if.local_ip4) /
-                                        ICMP(),
-                                        seq_num=seq))
-                for seq in range(259, 280)]
+        pkts = [
+            (
+                Ether(src=self.tra_if.remote_mac, dst=self.tra_if.local_mac)
+                / p.scapy_tra_sa.encrypt(
+                    IP(src=self.tra_if.remote_ip4, dst=self.tra_if.local_ip4) / ICMP(),
+                    seq_num=seq,
+                )
+            )
+            for seq in range(259, 280)
+        ]
 
         if esn_en:
             rxs = self.send_and_expect(self.tra_if, pkts, self.tra_if)
 
         if esn_en:
             rxs = self.send_and_expect(self.tra_if, pkts, self.tra_if)
@@ -719,12 +802,12 @@ class IpsecTra4(object):
             # The low seq num we set it to will place VPP's RX window in Case A
             #
             p.scapy_tra_sa.seq_num = 0x100000005
             # The low seq num we set it to will place VPP's RX window in Case A
             #
             p.scapy_tra_sa.seq_num = 0x100000005
-            pkt = (Ether(src=self.tra_if.remote_mac,
-                         dst=self.tra_if.local_mac) /
-                   p.scapy_tra_sa.encrypt(IP(src=self.tra_if.remote_ip4,
-                                             dst=self.tra_if.local_ip4) /
-                                          ICMP(),
-                                          seq_num=0x100000005))
+            pkt = Ether(
+                src=self.tra_if.remote_mac, dst=self.tra_if.local_mac
+            ) / p.scapy_tra_sa.encrypt(
+                IP(src=self.tra_if.remote_ip4, dst=self.tra_if.local_ip4) / ICMP(),
+                seq_num=0x100000005,
+            )
             rx = self.send_and_expect(self.tra_if, [pkt], self.tra_if)
 
             decrypted = p.vpp_tra_sa.decrypt(rx[0][IP])
             rx = self.send_and_expect(self.tra_if, [pkt], self.tra_if)
 
             decrypted = p.vpp_tra_sa.decrypt(rx[0][IP])
@@ -733,13 +816,13 @@ class IpsecTra4(object):
             # A packet that has seq num between (2^32-64) and 5 is within
             # the window
             #
             # A packet that has seq num between (2^32-64) and 5 is within
             # the window
             #
-            p.scapy_tra_sa.seq_num = 0xfffffffd
-            pkt = (Ether(src=self.tra_if.remote_mac,
-                         dst=self.tra_if.local_mac) /
-                   p.scapy_tra_sa.encrypt(IP(src=self.tra_if.remote_ip4,
-                                             dst=self.tra_if.local_ip4) /
-                                          ICMP(),
-                                          seq_num=0xfffffffd))
+            p.scapy_tra_sa.seq_num = 0xFFFFFFFD
+            pkt = Ether(
+                src=self.tra_if.remote_mac, dst=self.tra_if.local_mac
+            ) / p.scapy_tra_sa.encrypt(
+                IP(src=self.tra_if.remote_ip4, dst=self.tra_if.local_ip4) / ICMP(),
+                seq_num=0xFFFFFFFD,
+            )
             rx = self.send_and_expect(self.tra_if, [pkt], self.tra_if)
             decrypted = p.vpp_tra_sa.decrypt(rx[0][IP])
 
             rx = self.send_and_expect(self.tra_if, [pkt], self.tra_if)
             decrypted = p.vpp_tra_sa.decrypt(rx[0][IP])
 
@@ -748,14 +831,15 @@ class IpsecTra4(object):
             # because VPP will consider this packet to be one that moves the
             # window forward
             #
             # because VPP will consider this packet to be one that moves the
             # window forward
             #
-            pkt = (Ether(src=self.tra_if.remote_mac,
-                         dst=self.tra_if.local_mac) /
-                   p.scapy_tra_sa.encrypt(IP(src=self.tra_if.remote_ip4,
-                                             dst=self.tra_if.local_ip4) /
-                                          ICMP(),
-                                          seq_num=0x200000999))
-            self.send_and_assert_no_replies(self.tra_if, [pkt], self.tra_if,
-                                            timeout=0.2)
+            pkt = Ether(
+                src=self.tra_if.remote_mac, dst=self.tra_if.local_mac
+            ) / p.scapy_tra_sa.encrypt(
+                IP(src=self.tra_if.remote_ip4, dst=self.tra_if.local_ip4) / ICMP(),
+                seq_num=0x200000999,
+            )
+            self.send_and_assert_no_replies(
+                self.tra_if, [pkt], self.tra_if, timeout=0.2
+            )
 
             hash_failed_count += 1
             self.assertEqual(self.get_hash_failed_counts(p), hash_failed_count)
 
             hash_failed_count += 1
             self.assertEqual(self.get_hash_failed_counts(p), hash_failed_count)
@@ -765,22 +849,22 @@ class IpsecTra4(object):
             # again
             #
             p.scapy_tra_sa.seq_num = 0x100000555
             # again
             #
             p.scapy_tra_sa.seq_num = 0x100000555
-            pkt = (Ether(src=self.tra_if.remote_mac,
-                         dst=self.tra_if.local_mac) /
-                   p.scapy_tra_sa.encrypt(IP(src=self.tra_if.remote_ip4,
-                                             dst=self.tra_if.local_ip4) /
-                                          ICMP(),
-                                          seq_num=0x100000555))
+            pkt = Ether(
+                src=self.tra_if.remote_mac, dst=self.tra_if.local_mac
+            ) / p.scapy_tra_sa.encrypt(
+                IP(src=self.tra_if.remote_ip4, dst=self.tra_if.local_ip4) / ICMP(),
+                seq_num=0x100000555,
+            )
             rx = self.send_and_expect(self.tra_if, [pkt], self.tra_if)
             decrypted = p.vpp_tra_sa.decrypt(rx[0][IP])
 
             p.scapy_tra_sa.seq_num = 0x200000444
             rx = self.send_and_expect(self.tra_if, [pkt], self.tra_if)
             decrypted = p.vpp_tra_sa.decrypt(rx[0][IP])
 
             p.scapy_tra_sa.seq_num = 0x200000444
-            pkt = (Ether(src=self.tra_if.remote_mac,
-                         dst=self.tra_if.local_mac) /
-                   p.scapy_tra_sa.encrypt(IP(src=self.tra_if.remote_ip4,
-                                             dst=self.tra_if.local_ip4) /
-                                          ICMP(),
-                                          seq_num=0x200000444))
+            pkt = Ether(
+                src=self.tra_if.remote_mac, dst=self.tra_if.local_mac
+            ) / p.scapy_tra_sa.encrypt(
+                IP(src=self.tra_if.remote_ip4, dst=self.tra_if.local_ip4) / ICMP(),
+                seq_num=0x200000444,
+            )
             rx = self.send_and_expect(self.tra_if, [pkt], self.tra_if)
             decrypted = p.vpp_tra_sa.decrypt(rx[0][IP])
 
             rx = self.send_and_expect(self.tra_if, [pkt], self.tra_if)
             decrypted = p.vpp_tra_sa.decrypt(rx[0][IP])
 
@@ -791,8 +875,7 @@ class IpsecTra4(object):
             #
             self.send_and_assert_no_replies(self.tra_if, pkts, timeout=0.2)
             seq_cycle_count += len(pkts)
             #
             self.send_and_assert_no_replies(self.tra_if, pkts, timeout=0.2)
             seq_cycle_count += len(pkts)
-            self.assert_error_counter_equal(seq_cycle_node_name,
-                                            seq_cycle_count)
+            self.assert_error_counter_equal(seq_cycle_node_name, seq_cycle_count)
 
         # move the security-associations seq number on to the last we used
         self.vapi.cli("test ipsec sa %d seq 0x15f" % p.scapy_tra_sa_id)
 
         # move the security-associations seq number on to the last we used
         self.vapi.cli("test ipsec sa %d seq 0x15f" % p.scapy_tra_sa_id)
@@ -811,88 +894,109 @@ class IpsecTra4(object):
         # for reasons i haven't investigated Scapy won't create a packet with
         # seq_num=0
         #
         # for reasons i haven't investigated Scapy won't create a packet with
         # seq_num=0
         #
-        pkts = [(Ether(src=self.tra_if.remote_mac,
-                       dst=self.tra_if.local_mac) /
-                 p.scapy_tra_sa.encrypt(IP(src=self.tra_if.remote_ip4,
-                                           dst=self.tra_if.local_ip4) /
-                                        ICMP(),
-                                        seq_num=seq))
-                for seq in range(1, 3)]
+        pkts = [
+            (
+                Ether(src=self.tra_if.remote_mac, dst=self.tra_if.local_mac)
+                / p.scapy_tra_sa.encrypt(
+                    IP(src=self.tra_if.remote_ip4, dst=self.tra_if.local_ip4) / ICMP(),
+                    seq_num=seq,
+                )
+            )
+            for seq in range(1, 3)
+        ]
         self.send_and_expect(self.tra_if, pkts, self.tra_if)
 
         self.assertEqual(p.tra_sa_out.get_lost(), 0)
 
         # skip a sequence number
         self.send_and_expect(self.tra_if, pkts, self.tra_if)
 
         self.assertEqual(p.tra_sa_out.get_lost(), 0)
 
         # skip a sequence number
-        pkts = [(Ether(src=self.tra_if.remote_mac,
-                       dst=self.tra_if.local_mac) /
-                 p.scapy_tra_sa.encrypt(IP(src=self.tra_if.remote_ip4,
-                                           dst=self.tra_if.local_ip4) /
-                                        ICMP(),
-                                        seq_num=seq))
-                for seq in range(4, 6)]
+        pkts = [
+            (
+                Ether(src=self.tra_if.remote_mac, dst=self.tra_if.local_mac)
+                / p.scapy_tra_sa.encrypt(
+                    IP(src=self.tra_if.remote_ip4, dst=self.tra_if.local_ip4) / ICMP(),
+                    seq_num=seq,
+                )
+            )
+            for seq in range(4, 6)
+        ]
         self.send_and_expect(self.tra_if, pkts, self.tra_if)
 
         self.assertEqual(p.tra_sa_out.get_lost(), 0)
 
         # the lost packet are counted untill we get up past the first
         # sizeof(replay_window) packets
         self.send_and_expect(self.tra_if, pkts, self.tra_if)
 
         self.assertEqual(p.tra_sa_out.get_lost(), 0)
 
         # the lost packet are counted untill we get up past the first
         # sizeof(replay_window) packets
-        pkts = [(Ether(src=self.tra_if.remote_mac,
-                       dst=self.tra_if.local_mac) /
-                 p.scapy_tra_sa.encrypt(IP(src=self.tra_if.remote_ip4,
-                                           dst=self.tra_if.local_ip4) /
-                                        ICMP(),
-                                        seq_num=seq))
-                for seq in range(6, 100)]
+        pkts = [
+            (
+                Ether(src=self.tra_if.remote_mac, dst=self.tra_if.local_mac)
+                / p.scapy_tra_sa.encrypt(
+                    IP(src=self.tra_if.remote_ip4, dst=self.tra_if.local_ip4) / ICMP(),
+                    seq_num=seq,
+                )
+            )
+            for seq in range(6, 100)
+        ]
         self.send_and_expect(self.tra_if, pkts, self.tra_if)
 
         self.assertEqual(p.tra_sa_out.get_lost(), 1)
 
         # lost of holes in the sequence
         self.send_and_expect(self.tra_if, pkts, self.tra_if)
 
         self.assertEqual(p.tra_sa_out.get_lost(), 1)
 
         # lost of holes in the sequence
-        pkts = [(Ether(src=self.tra_if.remote_mac,
-                       dst=self.tra_if.local_mac) /
-                 p.scapy_tra_sa.encrypt(IP(src=self.tra_if.remote_ip4,
-                                           dst=self.tra_if.local_ip4) /
-                                        ICMP(),
-                                        seq_num=seq))
-                for seq in range(100, 200, 2)]
+        pkts = [
+            (
+                Ether(src=self.tra_if.remote_mac, dst=self.tra_if.local_mac)
+                / p.scapy_tra_sa.encrypt(
+                    IP(src=self.tra_if.remote_ip4, dst=self.tra_if.local_ip4) / ICMP(),
+                    seq_num=seq,
+                )
+            )
+            for seq in range(100, 200, 2)
+        ]
         self.send_and_expect(self.tra_if, pkts, self.tra_if, n_rx=50)
 
         self.send_and_expect(self.tra_if, pkts, self.tra_if, n_rx=50)
 
-        pkts = [(Ether(src=self.tra_if.remote_mac,
-                       dst=self.tra_if.local_mac) /
-                 p.scapy_tra_sa.encrypt(IP(src=self.tra_if.remote_ip4,
-                                           dst=self.tra_if.local_ip4) /
-                                        ICMP(),
-                                        seq_num=seq))
-                for seq in range(200, 300)]
+        pkts = [
+            (
+                Ether(src=self.tra_if.remote_mac, dst=self.tra_if.local_mac)
+                / p.scapy_tra_sa.encrypt(
+                    IP(src=self.tra_if.remote_ip4, dst=self.tra_if.local_ip4) / ICMP(),
+                    seq_num=seq,
+                )
+            )
+            for seq in range(200, 300)
+        ]
         self.send_and_expect(self.tra_if, pkts, self.tra_if)
 
         self.assertEqual(p.tra_sa_out.get_lost(), 51)
 
         # a big hole in the seq number space
         self.send_and_expect(self.tra_if, pkts, self.tra_if)
 
         self.assertEqual(p.tra_sa_out.get_lost(), 51)
 
         # a big hole in the seq number space
-        pkts = [(Ether(src=self.tra_if.remote_mac,
-                       dst=self.tra_if.local_mac) /
-                 p.scapy_tra_sa.encrypt(IP(src=self.tra_if.remote_ip4,
-                                           dst=self.tra_if.local_ip4) /
-                                        ICMP(),
-                                        seq_num=seq))
-                for seq in range(400, 500)]
+        pkts = [
+            (
+                Ether(src=self.tra_if.remote_mac, dst=self.tra_if.local_mac)
+                / p.scapy_tra_sa.encrypt(
+                    IP(src=self.tra_if.remote_ip4, dst=self.tra_if.local_ip4) / ICMP(),
+                    seq_num=seq,
+                )
+            )
+            for seq in range(400, 500)
+        ]
         self.send_and_expect(self.tra_if, pkts, self.tra_if)
 
         self.assertEqual(p.tra_sa_out.get_lost(), 151)
 
     def verify_tra_basic4(self, count=1, payload_size=54):
         self.send_and_expect(self.tra_if, pkts, self.tra_if)
 
         self.assertEqual(p.tra_sa_out.get_lost(), 151)
 
     def verify_tra_basic4(self, count=1, payload_size=54):
-        """ ipsec v4 transport basic test """
+        """ipsec v4 transport basic test"""
         self.vapi.cli("clear errors")
         self.vapi.cli("clear ipsec sa")
         try:
             p = self.params[socket.AF_INET]
         self.vapi.cli("clear errors")
         self.vapi.cli("clear ipsec sa")
         try:
             p = self.params[socket.AF_INET]
-            send_pkts = self.gen_encrypt_pkts(p, p.scapy_tra_sa, self.tra_if,
-                                              src=self.tra_if.remote_ip4,
-                                              dst=self.tra_if.local_ip4,
-                                              count=count,
-                                              payload_size=payload_size)
-            recv_pkts = self.send_and_expect(self.tra_if, send_pkts,
-                                             self.tra_if)
+            send_pkts = self.gen_encrypt_pkts(
+                p,
+                p.scapy_tra_sa,
+                self.tra_if,
+                src=self.tra_if.remote_ip4,
+                dst=self.tra_if.local_ip4,
+                count=count,
+                payload_size=payload_size,
+            )
+            recv_pkts = self.send_and_expect(self.tra_if, send_pkts, self.tra_if)
             for rx in recv_pkts:
                 self.assertEqual(len(rx) - len(Ether()), rx[IP].len)
                 self.assert_packet_checksums_valid(rx)
             for rx in recv_pkts:
                 self.assertEqual(len(rx) - len(Ether()), rx[IP].len)
                 self.assert_packet_checksums_valid(rx)
@@ -906,14 +1010,14 @@ class IpsecTra4(object):
             self.logger.info(self.vapi.ppcli("show error"))
             self.logger.info(self.vapi.ppcli("show ipsec all"))
 
             self.logger.info(self.vapi.ppcli("show error"))
             self.logger.info(self.vapi.ppcli("show ipsec all"))
 
-        pkts = p.tra_sa_in.get_stats()['packets']
-        self.assertEqual(pkts, count,
-                         "incorrect SA in counts: expected %d != %d" %
-                         (count, pkts))
-        pkts = p.tra_sa_out.get_stats()['packets']
-        self.assertEqual(pkts, count,
-                         "incorrect SA out counts: expected %d != %d" %
-                         (count, pkts))
+        pkts = p.tra_sa_in.get_stats()["packets"]
+        self.assertEqual(
+            pkts, count, "incorrect SA in counts: expected %d != %d" % (count, pkts)
+        )
+        pkts = p.tra_sa_out.get_stats()["packets"]
+        self.assertEqual(
+            pkts, count, "incorrect SA out counts: expected %d != %d" % (count, pkts)
+        )
         self.assertEqual(p.tra_sa_out.get_lost(), 0)
         self.assertEqual(p.tra_sa_in.get_lost(), 0)
 
         self.assertEqual(p.tra_sa_out.get_lost(), 0)
         self.assertEqual(p.tra_sa_in.get_lost(), 0)
 
@@ -922,41 +1026,45 @@ class IpsecTra4(object):
 
 
 class IpsecTra4Tests(IpsecTra4):
 
 
 class IpsecTra4Tests(IpsecTra4):
-    """ UT test methods for Transport v4 """
+    """UT test methods for Transport v4"""
+
     def test_tra_anti_replay(self):
     def test_tra_anti_replay(self):
-        """ ipsec v4 transport anti-replay test """
+        """ipsec v4 transport anti-replay test"""
         self.verify_tra_anti_replay()
 
     def test_tra_lost(self):
         self.verify_tra_anti_replay()
 
     def test_tra_lost(self):
-        """ ipsec v4 transport lost packet test """
+        """ipsec v4 transport lost packet test"""
         self.verify_tra_lost()
 
     def test_tra_basic(self, count=1):
         self.verify_tra_lost()
 
     def test_tra_basic(self, count=1):
-        """ ipsec v4 transport basic test """
+        """ipsec v4 transport basic test"""
         self.verify_tra_basic4(count=1)
 
     def test_tra_burst(self):
         self.verify_tra_basic4(count=1)
 
     def test_tra_burst(self):
-        """ ipsec v4 transport burst test """
+        """ipsec v4 transport burst test"""
         self.verify_tra_basic4(count=257)
 
 
 class IpsecTra6(object):
         self.verify_tra_basic4(count=257)
 
 
 class IpsecTra6(object):
-    """ verify methods for Transport v6 """
+    """verify methods for Transport v6"""
+
     def verify_tra_basic6(self, count=1, payload_size=54):
         self.vapi.cli("clear errors")
         self.vapi.cli("clear ipsec sa")
         try:
             p = self.params[socket.AF_INET6]
     def verify_tra_basic6(self, count=1, payload_size=54):
         self.vapi.cli("clear errors")
         self.vapi.cli("clear ipsec sa")
         try:
             p = self.params[socket.AF_INET6]
-            send_pkts = self.gen_encrypt_pkts6(p, p.scapy_tra_sa, self.tra_if,
-                                               src=self.tra_if.remote_ip6,
-                                               dst=self.tra_if.local_ip6,
-                                               count=count,
-                                               payload_size=payload_size)
-            recv_pkts = self.send_and_expect(self.tra_if, send_pkts,
-                                             self.tra_if)
+            send_pkts = self.gen_encrypt_pkts6(
+                p,
+                p.scapy_tra_sa,
+                self.tra_if,
+                src=self.tra_if.remote_ip6,
+                dst=self.tra_if.local_ip6,
+                count=count,
+                payload_size=payload_size,
+            )
+            recv_pkts = self.send_and_expect(self.tra_if, send_pkts, self.tra_if)
             for rx in recv_pkts:
             for rx in recv_pkts:
-                self.assertEqual(len(rx) - len(Ether()) - len(IPv6()),
-                                 rx[IPv6].plen)
+                self.assertEqual(len(rx) - len(Ether()) - len(IPv6()), rx[IPv6].plen)
                 try:
                     decrypted = p.vpp_tra_sa.decrypt(rx[IPv6])
                     self.assert_packet_checksums_valid(decrypted)
                 try:
                     decrypted = p.vpp_tra_sa.decrypt(rx[IPv6])
                     self.assert_packet_checksums_valid(decrypted)
@@ -967,32 +1075,38 @@ class IpsecTra6(object):
             self.logger.info(self.vapi.ppcli("show error"))
             self.logger.info(self.vapi.ppcli("show ipsec all"))
 
             self.logger.info(self.vapi.ppcli("show error"))
             self.logger.info(self.vapi.ppcli("show ipsec all"))
 
-        pkts = p.tra_sa_in.get_stats()['packets']
-        self.assertEqual(pkts, count,
-                         "incorrect SA in counts: expected %d != %d" %
-                         (count, pkts))
-        pkts = p.tra_sa_out.get_stats()['packets']
-        self.assertEqual(pkts, count,
-                         "incorrect SA out counts: expected %d != %d" %
-                         (count, pkts))
+        pkts = p.tra_sa_in.get_stats()["packets"]
+        self.assertEqual(
+            pkts, count, "incorrect SA in counts: expected %d != %d" % (count, pkts)
+        )
+        pkts = p.tra_sa_out.get_stats()["packets"]
+        self.assertEqual(
+            pkts, count, "incorrect SA out counts: expected %d != %d" % (count, pkts)
+        )
         self.assert_packet_counter_equal(self.tra6_encrypt_node_name, count)
         self.assert_packet_counter_equal(self.tra6_decrypt_node_name[0], count)
 
         self.assert_packet_counter_equal(self.tra6_encrypt_node_name, count)
         self.assert_packet_counter_equal(self.tra6_decrypt_node_name[0], count)
 
-    def gen_encrypt_pkts_ext_hdrs6(self, sa, sw_intf, src, dst, count=1,
-                                   payload_size=54):
-        return [Ether(src=sw_intf.remote_mac, dst=sw_intf.local_mac) /
-                sa.encrypt(IPv6(src=src, dst=dst) /
-                           ICMPv6EchoRequest(id=0, seq=1,
-                                             data='X' * payload_size))
-                for i in range(count)]
+    def gen_encrypt_pkts_ext_hdrs6(
+        self, sa, sw_intf, src, dst, count=1, payload_size=54
+    ):
+        return [
+            Ether(src=sw_intf.remote_mac, dst=sw_intf.local_mac)
+            / sa.encrypt(
+                IPv6(src=src, dst=dst)
+                / ICMPv6EchoRequest(id=0, seq=1, data="X" * payload_size)
+            )
+            for i in range(count)
+        ]
 
     def gen_pkts_ext_hdrs6(self, sw_intf, src, dst, count=1, payload_size=54):
 
     def gen_pkts_ext_hdrs6(self, sw_intf, src, dst, count=1, payload_size=54):
-        return [Ether(src=sw_intf.remote_mac, dst=sw_intf.local_mac) /
-                IPv6(src=src, dst=dst) /
-                IPv6ExtHdrHopByHop() /
-                IPv6ExtHdrFragment(id=2, offset=200) /
-                Raw(b'\xff' * 200)
-                for i in range(count)]
+        return [
+            Ether(src=sw_intf.remote_mac, dst=sw_intf.local_mac)
+            / IPv6(src=src, dst=dst)
+            / IPv6ExtHdrHopByHop()
+            / IPv6ExtHdrFragment(id=2, offset=200)
+            / Raw(b"\xff" * 200)
+            for i in range(count)
+        ]
 
     def verify_tra_encrypted6(self, p, sa, rxs):
         decrypted = []
 
     def verify_tra_encrypted6(self, p, sa, rxs):
         decrypted = []
@@ -1018,10 +1132,13 @@ class IpsecTra6(object):
         #
         # check we can decrypt with options
         #
         #
         # check we can decrypt with options
         #
-        tx = self.gen_encrypt_pkts_ext_hdrs6(p.scapy_tra_sa, self.tra_if,
-                                             src=self.tra_if.remote_ip6,
-                                             dst=self.tra_if.local_ip6,
-                                             count=count)
+        tx = self.gen_encrypt_pkts_ext_hdrs6(
+            p.scapy_tra_sa,
+            self.tra_if,
+            src=self.tra_if.remote_ip6,
+            dst=self.tra_if.local_ip6,
+            count=count,
+        )
         self.send_and_expect(self.tra_if, tx, self.tra_if)
 
         #
         self.send_and_expect(self.tra_if, tx, self.tra_if)
 
         #
@@ -1030,11 +1147,12 @@ class IpsecTra6(object):
         #
 
         # one extension before ESP
         #
 
         # one extension before ESP
-        tx = (Ether(src=self.pg2.remote_mac, dst=self.pg2.local_mac) /
-              IPv6(src=self.tra_if.local_ip6,
-                   dst=self.tra_if.remote_ip6) /
-              IPv6ExtHdrFragment(id=2, offset=200) /
-              Raw(b'\xff' * 200))
+        tx = (
+            Ether(src=self.pg2.remote_mac, dst=self.pg2.local_mac)
+            / IPv6(src=self.tra_if.local_ip6, dst=self.tra_if.remote_ip6)
+            / IPv6ExtHdrFragment(id=2, offset=200)
+            / Raw(b"\xff" * 200)
+        )
 
         rxs = self.send_and_expect(self.pg2, [tx], self.tra_if)
         dcs = self.verify_tra_encrypted6(p, p.vpp_tra_sa, rxs)
 
         rxs = self.send_and_expect(self.pg2, [tx], self.tra_if)
         dcs = self.verify_tra_encrypted6(p, p.vpp_tra_sa, rxs)
@@ -1047,12 +1165,13 @@ class IpsecTra6(object):
             self.assert_equal(dc[IPv6ExtHdrFragment].id, 2)
 
         # two extensions before ESP
             self.assert_equal(dc[IPv6ExtHdrFragment].id, 2)
 
         # two extensions before ESP
-        tx = (Ether(src=self.pg2.remote_mac, dst=self.pg2.local_mac) /
-              IPv6(src=self.tra_if.local_ip6,
-                   dst=self.tra_if.remote_ip6) /
-              IPv6ExtHdrHopByHop() /
-              IPv6ExtHdrFragment(id=2, offset=200) /
-              Raw(b'\xff' * 200))
+        tx = (
+            Ether(src=self.pg2.remote_mac, dst=self.pg2.local_mac)
+            / IPv6(src=self.tra_if.local_ip6, dst=self.tra_if.remote_ip6)
+            / IPv6ExtHdrHopByHop()
+            / IPv6ExtHdrFragment(id=2, offset=200)
+            / Raw(b"\xff" * 200)
+        )
 
         rxs = self.send_and_expect(self.pg2, [tx], self.tra_if)
         dcs = self.verify_tra_encrypted6(p, p.vpp_tra_sa, rxs)
 
         rxs = self.send_and_expect(self.pg2, [tx], self.tra_if)
         dcs = self.verify_tra_encrypted6(p, p.vpp_tra_sa, rxs)
@@ -1063,13 +1182,14 @@ class IpsecTra6(object):
             self.assert_equal(dc[IPv6ExtHdrFragment].id, 2)
 
         # two extensions before ESP, one after
             self.assert_equal(dc[IPv6ExtHdrFragment].id, 2)
 
         # two extensions before ESP, one after
-        tx = (Ether(src=self.pg2.remote_mac, dst=self.pg2.local_mac) /
-              IPv6(src=self.tra_if.local_ip6,
-                   dst=self.tra_if.remote_ip6) /
-              IPv6ExtHdrHopByHop() /
-              IPv6ExtHdrFragment(id=2, offset=200) /
-              IPv6ExtHdrDestOpt() /
-              Raw(b'\xff' * 200))
+        tx = (
+            Ether(src=self.pg2.remote_mac, dst=self.pg2.local_mac)
+            / IPv6(src=self.tra_if.local_ip6, dst=self.tra_if.remote_ip6)
+            / IPv6ExtHdrHopByHop()
+            / IPv6ExtHdrFragment(id=2, offset=200)
+            / IPv6ExtHdrDestOpt()
+            / Raw(b"\xff" * 200)
+        )
 
         rxs = self.send_and_expect(self.pg2, [tx], self.tra_if)
         dcs = self.verify_tra_encrypted6(p, p.vpp_tra_sa, rxs)
 
         rxs = self.send_and_expect(self.pg2, [tx], self.tra_if)
         dcs = self.verify_tra_encrypted6(p, p.vpp_tra_sa, rxs)
@@ -1082,47 +1202,54 @@ class IpsecTra6(object):
 
 
 class IpsecTra6Tests(IpsecTra6):
 
 
 class IpsecTra6Tests(IpsecTra6):
-    """ UT test methods for Transport v6 """
+    """UT test methods for Transport v6"""
+
     def test_tra_basic6(self):
     def test_tra_basic6(self):
-        """ ipsec v6 transport basic test """
+        """ipsec v6 transport basic test"""
         self.verify_tra_basic6(count=1)
 
     def test_tra_burst6(self):
         self.verify_tra_basic6(count=1)
 
     def test_tra_burst6(self):
-        """ ipsec v6 transport burst test """
+        """ipsec v6 transport burst test"""
         self.verify_tra_basic6(count=257)
 
 
 class IpsecTra6ExtTests(IpsecTra6):
     def test_tra_ext_hdrs_66(self):
         self.verify_tra_basic6(count=257)
 
 
 class IpsecTra6ExtTests(IpsecTra6):
     def test_tra_ext_hdrs_66(self):
-        """ ipsec 6o6 tra extension headers test """
+        """ipsec 6o6 tra extension headers test"""
         self.verify_tra_66_ext_hdrs(self.params[socket.AF_INET6])
 
 
 class IpsecTra46Tests(IpsecTra4Tests, IpsecTra6Tests):
         self.verify_tra_66_ext_hdrs(self.params[socket.AF_INET6])
 
 
 class IpsecTra46Tests(IpsecTra4Tests, IpsecTra6Tests):
-    """ UT test methods for Transport v6 and v4"""
+    """UT test methods for Transport v6 and v4"""
+
     pass
 
 
 class IpsecTun4(object):
     pass
 
 
 class IpsecTun4(object):
-    """ verify methods for Tunnel v4 """
+    """verify methods for Tunnel v4"""
+
     def verify_counters4(self, p, count, n_frags=None, worker=None):
         if not n_frags:
             n_frags = count
     def verify_counters4(self, p, count, n_frags=None, worker=None):
         if not n_frags:
             n_frags = count
-        if (hasattr(p, "spd_policy_in_any")):
-            pkts = p.spd_policy_in_any.get_stats(worker)['packets']
-            self.assertEqual(pkts, count,
-                             "incorrect SPD any policy: expected %d != %d" %
-                             (count, pkts))
-
-        if (hasattr(p, "tun_sa_in")):
-            pkts = p.tun_sa_in.get_stats(worker)['packets']
-            self.assertEqual(pkts, count,
-                             "incorrect SA in counts: expected %d != %d" %
-                             (count, pkts))
-            pkts = p.tun_sa_out.get_stats(worker)['packets']
-            self.assertEqual(pkts, n_frags,
-                             "incorrect SA out counts: expected %d != %d" %
-                             (count, pkts))
+        if hasattr(p, "spd_policy_in_any"):
+            pkts = p.spd_policy_in_any.get_stats(worker)["packets"]
+            self.assertEqual(
+                pkts,
+                count,
+                "incorrect SPD any policy: expected %d != %d" % (count, pkts),
+            )
+
+        if hasattr(p, "tun_sa_in"):
+            pkts = p.tun_sa_in.get_stats(worker)["packets"]
+            self.assertEqual(
+                pkts, count, "incorrect SA in counts: expected %d != %d" % (count, pkts)
+            )
+            pkts = p.tun_sa_out.get_stats(worker)["packets"]
+            self.assertEqual(
+                pkts,
+                n_frags,
+                "incorrect SA out counts: expected %d != %d" % (count, pkts),
+            )
 
         self.assert_packet_counter_equal(self.tun4_encrypt_node_name, n_frags)
         self.assert_packet_counter_equal(self.tun4_decrypt_node_name[0], count)
 
         self.assert_packet_counter_equal(self.tun4_encrypt_node_name, n_frags)
         self.assert_packet_counter_equal(self.tun4_decrypt_node_name[0], count)
@@ -1177,19 +1304,26 @@ class IpsecTun4(object):
         if not n_rx:
             n_rx = count
         try:
         if not n_rx:
             n_rx = count
         try:
-            send_pkts = self.gen_encrypt_pkts(p, p.scapy_tun_sa, self.tun_if,
-                                              src=p.remote_tun_if_host,
-                                              dst=self.pg1.remote_ip4,
-                                              count=count,
-                                              payload_size=payload_size)
+            send_pkts = self.gen_encrypt_pkts(
+                p,
+                p.scapy_tun_sa,
+                self.tun_if,
+                src=p.remote_tun_if_host,
+                dst=self.pg1.remote_ip4,
+                count=count,
+                payload_size=payload_size,
+            )
             recv_pkts = self.send_and_expect(self.tun_if, send_pkts, self.pg1)
             self.verify_decrypted(p, recv_pkts)
 
             recv_pkts = self.send_and_expect(self.tun_if, send_pkts, self.pg1)
             self.verify_decrypted(p, recv_pkts)
 
-            send_pkts = self.gen_pkts(self.pg1, src=self.pg1.remote_ip4,
-                                      dst=p.remote_tun_if_host, count=count,
-                                      payload_size=payload_size)
-            recv_pkts = self.send_and_expect(self.pg1, send_pkts,
-                                             self.tun_if, n_rx)
+            send_pkts = self.gen_pkts(
+                self.pg1,
+                src=self.pg1.remote_ip4,
+                dst=p.remote_tun_if_host,
+                count=count,
+                payload_size=payload_size,
+            )
+            recv_pkts = self.send_and_expect(self.pg1, send_pkts, self.tun_if, n_rx)
             self.verify_encrypted(p, p.vpp_tun_sa, recv_pkts)
 
             for rx in recv_pkts:
             self.verify_encrypted(p, p.vpp_tun_sa, recv_pkts)
 
             for rx in recv_pkts:
@@ -1209,15 +1343,23 @@ class IpsecTun4(object):
         if not n_rx:
             n_rx = count
         try:
         if not n_rx:
             n_rx = count
         try:
-            send_pkts = self.gen_encrypt_pkts(p, p.scapy_tun_sa, self.tun_if,
-                                              src=p.remote_tun_if_host,
-                                              dst=self.pg1.remote_ip4,
-                                              count=count)
+            send_pkts = self.gen_encrypt_pkts(
+                p,
+                p.scapy_tun_sa,
+                self.tun_if,
+                src=p.remote_tun_if_host,
+                dst=self.pg1.remote_ip4,
+                count=count,
+            )
             self.send_and_assert_no_replies(self.tun_if, send_pkts)
 
             self.send_and_assert_no_replies(self.tun_if, send_pkts)
 
-            send_pkts = self.gen_pkts(self.pg1, src=self.pg1.remote_ip4,
-                                      dst=p.remote_tun_if_host, count=count,
-                                      payload_size=payload_size)
+            send_pkts = self.gen_pkts(
+                self.pg1,
+                src=self.pg1.remote_ip4,
+                dst=p.remote_tun_if_host,
+                count=count,
+                payload_size=payload_size,
+            )
             self.send_and_assert_no_replies(self.pg1, send_pkts)
 
         finally:
             self.send_and_assert_no_replies(self.pg1, send_pkts)
 
         finally:
@@ -1227,23 +1369,27 @@ class IpsecTun4(object):
     def verify_tun_reass_44(self, p):
         self.vapi.cli("clear errors")
         self.vapi.ip_reassembly_enable_disable(
     def verify_tun_reass_44(self, p):
         self.vapi.cli("clear errors")
         self.vapi.ip_reassembly_enable_disable(
-            sw_if_index=self.tun_if.sw_if_index, enable_ip4=True)
+            sw_if_index=self.tun_if.sw_if_index, enable_ip4=True
+        )
 
         try:
 
         try:
-            send_pkts = self.gen_encrypt_pkts(p, p.scapy_tun_sa, self.tun_if,
-                                              src=p.remote_tun_if_host,
-                                              dst=self.pg1.remote_ip4,
-                                              payload_size=1900,
-                                              count=1)
+            send_pkts = self.gen_encrypt_pkts(
+                p,
+                p.scapy_tun_sa,
+                self.tun_if,
+                src=p.remote_tun_if_host,
+                dst=self.pg1.remote_ip4,
+                payload_size=1900,
+                count=1,
+            )
             send_pkts = fragment_rfc791(send_pkts[0], 1400)
             send_pkts = fragment_rfc791(send_pkts[0], 1400)
-            recv_pkts = self.send_and_expect(self.tun_if, send_pkts,
-                                             self.pg1, n_rx=1)
+            recv_pkts = self.send_and_expect(self.tun_if, send_pkts, self.pg1, n_rx=1)
             self.verify_decrypted(p, recv_pkts)
 
             self.verify_decrypted(p, recv_pkts)
 
-            send_pkts = self.gen_pkts(self.pg1, src=self.pg1.remote_ip4,
-                                      dst=p.remote_tun_if_host, count=1)
-            recv_pkts = self.send_and_expect(self.pg1, send_pkts,
-                                             self.tun_if)
+            send_pkts = self.gen_pkts(
+                self.pg1, src=self.pg1.remote_ip4, dst=p.remote_tun_if_host, count=1
+            )
+            recv_pkts = self.send_and_expect(self.pg1, send_pkts, self.tun_if)
             self.verify_encrypted(p, p.vpp_tun_sa, recv_pkts)
 
         finally:
             self.verify_encrypted(p, p.vpp_tun_sa, recv_pkts)
 
         finally:
@@ -1252,23 +1398,33 @@ class IpsecTun4(object):
 
         self.verify_counters4(p, 1, 1)
         self.vapi.ip_reassembly_enable_disable(
 
         self.verify_counters4(p, 1, 1)
         self.vapi.ip_reassembly_enable_disable(
-            sw_if_index=self.tun_if.sw_if_index, enable_ip4=False)
+            sw_if_index=self.tun_if.sw_if_index, enable_ip4=False
+        )
 
     def verify_tun_64(self, p, count=1):
         self.vapi.cli("clear errors")
         self.vapi.cli("clear ipsec sa")
         try:
 
     def verify_tun_64(self, p, count=1):
         self.vapi.cli("clear errors")
         self.vapi.cli("clear ipsec sa")
         try:
-            send_pkts = self.gen_encrypt_pkts6(p, p.scapy_tun_sa, self.tun_if,
-                                               src=p.remote_tun_if_host6,
-                                               dst=self.pg1.remote_ip6,
-                                               count=count)
+            send_pkts = self.gen_encrypt_pkts6(
+                p,
+                p.scapy_tun_sa,
+                self.tun_if,
+                src=p.remote_tun_if_host6,
+                dst=self.pg1.remote_ip6,
+                count=count,
+            )
             recv_pkts = self.send_and_expect(self.tun_if, send_pkts, self.pg1)
             for recv_pkt in recv_pkts:
                 self.assert_equal(recv_pkt[IPv6].src, p.remote_tun_if_host6)
                 self.assert_equal(recv_pkt[IPv6].dst, self.pg1.remote_ip6)
                 self.assert_packet_checksums_valid(recv_pkt)
             recv_pkts = self.send_and_expect(self.tun_if, send_pkts, self.pg1)
             for recv_pkt in recv_pkts:
                 self.assert_equal(recv_pkt[IPv6].src, p.remote_tun_if_host6)
                 self.assert_equal(recv_pkt[IPv6].dst, self.pg1.remote_ip6)
                 self.assert_packet_checksums_valid(recv_pkt)
-            send_pkts = self.gen_pkts6(p, self.pg1, src=self.pg1.remote_ip6,
-                                       dst=p.remote_tun_if_host6, count=count)
+            send_pkts = self.gen_pkts6(
+                p,
+                self.pg1,
+                src=self.pg1.remote_ip6,
+                dst=p.remote_tun_if_host6,
+                count=count,
+            )
             recv_pkts = self.send_and_expect(self.pg1, send_pkts, self.tun_if)
             for recv_pkt in recv_pkts:
                 try:
             recv_pkts = self.send_and_expect(self.pg1, send_pkts, self.tun_if)
             for recv_pkt in recv_pkts:
                 try:
@@ -1281,8 +1437,7 @@ class IpsecTun4(object):
                 except:
                     self.logger.error(ppp("Unexpected packet:", recv_pkt))
                     try:
                 except:
                     self.logger.error(ppp("Unexpected packet:", recv_pkt))
                     try:
-                        self.logger.debug(
-                            ppp("Decrypted packet:", decrypt_pkt))
+                        self.logger.debug(ppp("Decrypted packet:", decrypt_pkt))
                     except:
                         pass
                     raise
                     except:
                         pass
                     raise
@@ -1295,37 +1450,43 @@ class IpsecTun4(object):
     def verify_keepalive(self, p):
         # the sizeof Raw is calculated to pad to the minimum ehternet
         # frame size of 64 btyes
     def verify_keepalive(self, p):
         # the sizeof Raw is calculated to pad to the minimum ehternet
         # frame size of 64 btyes
-        pkt = (Ether(src=self.tun_if.remote_mac, dst=self.tun_if.local_mac) /
-               IP(src=p.remote_tun_if_host, dst=self.tun_if.local_ip4) /
-               UDP(sport=333, dport=4500) /
-               Raw(b'\xff') /
-               Padding(0 * 21))
-        self.send_and_assert_no_replies(self.tun_if, pkt*31)
+        pkt = (
+            Ether(src=self.tun_if.remote_mac, dst=self.tun_if.local_mac)
+            / IP(src=p.remote_tun_if_host, dst=self.tun_if.local_ip4)
+            / UDP(sport=333, dport=4500)
+            / Raw(b"\xff")
+            / Padding(0 * 21)
+        )
+        self.send_and_assert_no_replies(self.tun_if, pkt * 31)
         self.assert_error_counter_equal(
         self.assert_error_counter_equal(
-            '/err/%s/NAT Keepalive' % self.tun4_input_node, 31)
-
-        pkt = (Ether(src=self.tun_if.remote_mac, dst=self.tun_if.local_mac) /
-               IP(src=p.remote_tun_if_host, dst=self.tun_if.local_ip4) /
-               UDP(sport=333, dport=4500) /
-               Raw(b'\xfe'))
-        self.send_and_assert_no_replies(self.tun_if, pkt*31)
-        self.assert_error_counter_equal(
-            '/err/%s/Too Short' % self.tun4_input_node, 31)
-
-        pkt = (Ether(src=self.tun_if.remote_mac, dst=self.tun_if.local_mac) /
-               IP(src=p.remote_tun_if_host, dst=self.tun_if.local_ip4) /
-               UDP(sport=333, dport=4500) /
-               Raw(b'\xfe') /
-               Padding(0 * 21))
-        self.send_and_assert_no_replies(self.tun_if, pkt*31)
-        self.assert_error_counter_equal(
-            '/err/%s/Too Short' % self.tun4_input_node, 62)
+            "/err/%s/NAT Keepalive" % self.tun4_input_node, 31
+        )
+
+        pkt = (
+            Ether(src=self.tun_if.remote_mac, dst=self.tun_if.local_mac)
+            / IP(src=p.remote_tun_if_host, dst=self.tun_if.local_ip4)
+            / UDP(sport=333, dport=4500)
+            / Raw(b"\xfe")
+        )
+        self.send_and_assert_no_replies(self.tun_if, pkt * 31)
+        self.assert_error_counter_equal("/err/%s/Too Short" % self.tun4_input_node, 31)
+
+        pkt = (
+            Ether(src=self.tun_if.remote_mac, dst=self.tun_if.local_mac)
+            / IP(src=p.remote_tun_if_host, dst=self.tun_if.local_ip4)
+            / UDP(sport=333, dport=4500)
+            / Raw(b"\xfe")
+            / Padding(0 * 21)
+        )
+        self.send_and_assert_no_replies(self.tun_if, pkt * 31)
+        self.assert_error_counter_equal("/err/%s/Too Short" % self.tun4_input_node, 62)
 
 
 class IpsecTun4Tests(IpsecTun4):
 
 
 class IpsecTun4Tests(IpsecTun4):
-    """ UT test methods for Tunnel v4 """
+    """UT test methods for Tunnel v4"""
+
     def test_tun_basic44(self):
     def test_tun_basic44(self):
-        """ ipsec 4o4 tunnel basic test """
+        """ipsec 4o4 tunnel basic test"""
         self.verify_tun_44(self.params[socket.AF_INET], count=1)
         self.tun_if.admin_down()
         self.tun_if.resolve_arp()
         self.verify_tun_44(self.params[socket.AF_INET], count=1)
         self.tun_if.admin_down()
         self.tun_if.resolve_arp()
@@ -1333,27 +1494,30 @@ class IpsecTun4Tests(IpsecTun4):
         self.verify_tun_44(self.params[socket.AF_INET], count=1)
 
     def test_tun_reass_basic44(self):
         self.verify_tun_44(self.params[socket.AF_INET], count=1)
 
     def test_tun_reass_basic44(self):
-        """ ipsec 4o4 tunnel basic reassembly test """
+        """ipsec 4o4 tunnel basic reassembly test"""
         self.verify_tun_reass_44(self.params[socket.AF_INET])
 
     def test_tun_burst44(self):
         self.verify_tun_reass_44(self.params[socket.AF_INET])
 
     def test_tun_burst44(self):
-        """ ipsec 4o4 tunnel burst test """
+        """ipsec 4o4 tunnel burst test"""
         self.verify_tun_44(self.params[socket.AF_INET], count=127)
 
 
 class IpsecTun6(object):
         self.verify_tun_44(self.params[socket.AF_INET], count=127)
 
 
 class IpsecTun6(object):
-    """ verify methods for Tunnel v6 """
+    """verify methods for Tunnel v6"""
+
     def verify_counters6(self, p_in, p_out, count, worker=None):
     def verify_counters6(self, p_in, p_out, count, worker=None):
-        if (hasattr(p_in, "tun_sa_in")):
-            pkts = p_in.tun_sa_in.get_stats(worker)['packets']
-            self.assertEqual(pkts, count,
-                             "incorrect SA in counts: expected %d != %d" %
-                             (count, pkts))
-        if (hasattr(p_out, "tun_sa_out")):
-            pkts = p_out.tun_sa_out.get_stats(worker)['packets']
-            self.assertEqual(pkts, count,
-                             "incorrect SA out counts: expected %d != %d" %
-                             (count, pkts))
+        if hasattr(p_in, "tun_sa_in"):
+            pkts = p_in.tun_sa_in.get_stats(worker)["packets"]
+            self.assertEqual(
+                pkts, count, "incorrect SA in counts: expected %d != %d" % (count, pkts)
+            )
+        if hasattr(p_out, "tun_sa_out"):
+            pkts = p_out.tun_sa_out.get_stats(worker)["packets"]
+            self.assertEqual(
+                pkts,
+                count,
+                "incorrect SA out counts: expected %d != %d" % (count, pkts),
+            )
         self.assert_packet_counter_equal(self.tun6_encrypt_node_name, count)
         self.assert_packet_counter_equal(self.tun6_decrypt_node_name[0], count)
 
         self.assert_packet_counter_equal(self.tun6_encrypt_node_name, count)
         self.assert_packet_counter_equal(self.tun6_decrypt_node_name[0], count)
 
@@ -1366,8 +1530,7 @@ class IpsecTun6(object):
     def verify_encrypted6(self, p, sa, rxs):
         for rx in rxs:
             self.assert_packet_checksums_valid(rx)
     def verify_encrypted6(self, p, sa, rxs):
         for rx in rxs:
             self.assert_packet_checksums_valid(rx)
-            self.assertEqual(len(rx) - len(Ether()) - len(IPv6()),
-                             rx[IPv6].plen)
+            self.assertEqual(len(rx) - len(Ether()) - len(IPv6()), rx[IPv6].plen)
             self.assert_equal(rx[IPv6].hlim, p.outer_hop_limit)
             if p.outer_flow_label:
                 self.assert_equal(rx[IPv6].fl, p.outer_flow_label)
             self.assert_equal(rx[IPv6].hlim, p.outer_hop_limit)
             if p.outer_flow_label:
                 self.assert_equal(rx[IPv6].fl, p.outer_flow_label)
@@ -1392,9 +1555,14 @@ class IpsecTun6(object):
         self.vapi.cli("clear errors")
         self.vapi.cli("clear ipsec sa")
 
         self.vapi.cli("clear errors")
         self.vapi.cli("clear ipsec sa")
 
-        send_pkts = self.gen_pkts6(p_in, self.pg1, src=self.pg1.remote_ip6,
-                                   dst=p_in.remote_tun_if_host, count=count,
-                                   payload_size=payload_size)
+        send_pkts = self.gen_pkts6(
+            p_in,
+            self.pg1,
+            src=self.pg1.remote_ip6,
+            dst=p_in.remote_tun_if_host,
+            count=count,
+            payload_size=payload_size,
+        )
         self.send_and_assert_no_replies(self.tun_if, send_pkts)
         self.logger.info(self.vapi.cli("sh punt stats"))
 
         self.send_and_assert_no_replies(self.tun_if, send_pkts)
         self.logger.info(self.vapi.cli("sh punt stats"))
 
@@ -1402,18 +1570,19 @@ class IpsecTun6(object):
         self.vapi.cli("clear errors")
         self.vapi.cli("clear ipsec sa")
 
         self.vapi.cli("clear errors")
         self.vapi.cli("clear ipsec sa")
 
-        send_pkts = self.gen_encrypt_pkts6(p_in, p_in.scapy_tun_sa,
-                                           self.tun_if,
-                                           src=p_in.remote_tun_if_host,
-                                           dst=self.pg1.remote_ip6,
-                                           count=count)
+        send_pkts = self.gen_encrypt_pkts6(
+            p_in,
+            p_in.scapy_tun_sa,
+            self.tun_if,
+            src=p_in.remote_tun_if_host,
+            dst=self.pg1.remote_ip6,
+            count=count,
+        )
         self.send_and_assert_no_replies(self.tun_if, send_pkts)
 
     def verify_drop_tun_66(self, p_in, count=1, payload_size=64):
         self.send_and_assert_no_replies(self.tun_if, send_pkts)
 
     def verify_drop_tun_66(self, p_in, count=1, payload_size=64):
-        self.verify_drop_tun_tx_66(p_in, count=count,
-                                   payload_size=payload_size)
-        self.verify_drop_tun_rx_66(p_in, count=count,
-                                   payload_size=payload_size)
+        self.verify_drop_tun_tx_66(p_in, count=count, payload_size=payload_size)
+        self.verify_drop_tun_rx_66(p_in, count=count, payload_size=payload_size)
 
     def verify_tun_66(self, p_in, p_out=None, count=1, payload_size=64):
         self.vapi.cli("clear errors")
 
     def verify_tun_66(self, p_in, p_out=None, count=1, payload_size=64):
         self.vapi.cli("clear errors")
@@ -1421,19 +1590,26 @@ class IpsecTun6(object):
         if not p_out:
             p_out = p_in
         try:
         if not p_out:
             p_out = p_in
         try:
-            send_pkts = self.gen_encrypt_pkts6(p_in, p_in.scapy_tun_sa,
-                                               self.tun_if,
-                                               src=p_in.remote_tun_if_host,
-                                               dst=self.pg1.remote_ip6,
-                                               count=count,
-                                               payload_size=payload_size)
+            send_pkts = self.gen_encrypt_pkts6(
+                p_in,
+                p_in.scapy_tun_sa,
+                self.tun_if,
+                src=p_in.remote_tun_if_host,
+                dst=self.pg1.remote_ip6,
+                count=count,
+                payload_size=payload_size,
+            )
             recv_pkts = self.send_and_expect(self.tun_if, send_pkts, self.pg1)
             self.verify_decrypted6(p_in, recv_pkts)
 
             recv_pkts = self.send_and_expect(self.tun_if, send_pkts, self.pg1)
             self.verify_decrypted6(p_in, recv_pkts)
 
-            send_pkts = self.gen_pkts6(p_in, self.pg1, src=self.pg1.remote_ip6,
-                                       dst=p_out.remote_tun_if_host,
-                                       count=count,
-                                       payload_size=payload_size)
+            send_pkts = self.gen_pkts6(
+                p_in,
+                self.pg1,
+                src=self.pg1.remote_ip6,
+                dst=p_out.remote_tun_if_host,
+                count=count,
+                payload_size=payload_size,
+            )
             recv_pkts = self.send_and_expect(self.pg1, send_pkts, self.tun_if)
             self.verify_encrypted6(p_out, p_out.vpp_tun_sa, recv_pkts)
 
             recv_pkts = self.send_and_expect(self.pg1, send_pkts, self.tun_if)
             self.verify_encrypted6(p_out, p_out.vpp_tun_sa, recv_pkts)
 
@@ -1449,50 +1625,65 @@ class IpsecTun6(object):
     def verify_tun_reass_66(self, p):
         self.vapi.cli("clear errors")
         self.vapi.ip_reassembly_enable_disable(
     def verify_tun_reass_66(self, p):
         self.vapi.cli("clear errors")
         self.vapi.ip_reassembly_enable_disable(
-            sw_if_index=self.tun_if.sw_if_index, enable_ip6=True)
+            sw_if_index=self.tun_if.sw_if_index, enable_ip6=True
+        )
 
         try:
 
         try:
-            send_pkts = self.gen_encrypt_pkts6(p, p.scapy_tun_sa, self.tun_if,
-                                               src=p.remote_tun_if_host,
-                                               dst=self.pg1.remote_ip6,
-                                               count=1,
-                                               payload_size=1850)
+            send_pkts = self.gen_encrypt_pkts6(
+                p,
+                p.scapy_tun_sa,
+                self.tun_if,
+                src=p.remote_tun_if_host,
+                dst=self.pg1.remote_ip6,
+                count=1,
+                payload_size=1850,
+            )
             send_pkts = fragment_rfc8200(send_pkts[0], 1, 1400, self.logger)
             send_pkts = fragment_rfc8200(send_pkts[0], 1, 1400, self.logger)
-            recv_pkts = self.send_and_expect(self.tun_if, send_pkts,
-                                             self.pg1, n_rx=1)
+            recv_pkts = self.send_and_expect(self.tun_if, send_pkts, self.pg1, n_rx=1)
             self.verify_decrypted6(p, recv_pkts)
 
             self.verify_decrypted6(p, recv_pkts)
 
-            send_pkts = self.gen_pkts6(p, self.pg1, src=self.pg1.remote_ip6,
-                                       dst=p.remote_tun_if_host,
-                                       count=1,
-                                       payload_size=64)
-            recv_pkts = self.send_and_expect(self.pg1, send_pkts,
-                                             self.tun_if)
+            send_pkts = self.gen_pkts6(
+                p,
+                self.pg1,
+                src=self.pg1.remote_ip6,
+                dst=p.remote_tun_if_host,
+                count=1,
+                payload_size=64,
+            )
+            recv_pkts = self.send_and_expect(self.pg1, send_pkts, self.tun_if)
             self.verify_encrypted6(p, p.vpp_tun_sa, recv_pkts)
         finally:
             self.logger.info(self.vapi.ppcli("show error"))
             self.logger.info(self.vapi.ppcli("show ipsec all"))
         self.verify_counters6(p, p, 1)
         self.vapi.ip_reassembly_enable_disable(
             self.verify_encrypted6(p, p.vpp_tun_sa, recv_pkts)
         finally:
             self.logger.info(self.vapi.ppcli("show error"))
             self.logger.info(self.vapi.ppcli("show ipsec all"))
         self.verify_counters6(p, p, 1)
         self.vapi.ip_reassembly_enable_disable(
-            sw_if_index=self.tun_if.sw_if_index, enable_ip6=False)
+            sw_if_index=self.tun_if.sw_if_index, enable_ip6=False
+        )
 
     def verify_tun_46(self, p, count=1):
 
     def verify_tun_46(self, p, count=1):
-        """ ipsec 4o6 tunnel basic test """
+        """ipsec 4o6 tunnel basic test"""
         self.vapi.cli("clear errors")
         self.vapi.cli("clear ipsec sa")
         try:
         self.vapi.cli("clear errors")
         self.vapi.cli("clear ipsec sa")
         try:
-            send_pkts = self.gen_encrypt_pkts(p, p.scapy_tun_sa, self.tun_if,
-                                              src=p.remote_tun_if_host4,
-                                              dst=self.pg1.remote_ip4,
-                                              count=count)
+            send_pkts = self.gen_encrypt_pkts(
+                p,
+                p.scapy_tun_sa,
+                self.tun_if,
+                src=p.remote_tun_if_host4,
+                dst=self.pg1.remote_ip4,
+                count=count,
+            )
             recv_pkts = self.send_and_expect(self.tun_if, send_pkts, self.pg1)
             for recv_pkt in recv_pkts:
                 self.assert_equal(recv_pkt[IP].src, p.remote_tun_if_host4)
                 self.assert_equal(recv_pkt[IP].dst, self.pg1.remote_ip4)
                 self.assert_packet_checksums_valid(recv_pkt)
             recv_pkts = self.send_and_expect(self.tun_if, send_pkts, self.pg1)
             for recv_pkt in recv_pkts:
                 self.assert_equal(recv_pkt[IP].src, p.remote_tun_if_host4)
                 self.assert_equal(recv_pkt[IP].dst, self.pg1.remote_ip4)
                 self.assert_packet_checksums_valid(recv_pkt)
-            send_pkts = self.gen_pkts(self.pg1, src=self.pg1.remote_ip4,
-                                      dst=p.remote_tun_if_host4,
-                                      count=count)
+            send_pkts = self.gen_pkts(
+                self.pg1,
+                src=self.pg1.remote_ip4,
+                dst=p.remote_tun_if_host4,
+                count=count,
+            )
             recv_pkts = self.send_and_expect(self.pg1, send_pkts, self.tun_if)
             for recv_pkt in recv_pkts:
                 try:
             recv_pkts = self.send_and_expect(self.pg1, send_pkts, self.tun_if)
             for recv_pkt in recv_pkts:
                 try:
@@ -1505,8 +1696,7 @@ class IpsecTun6(object):
                 except:
                     self.logger.debug(ppp("Unexpected packet:", recv_pkt))
                     try:
                 except:
                     self.logger.debug(ppp("Unexpected packet:", recv_pkt))
                     try:
-                        self.logger.debug(ppp("Decrypted packet:",
-                                              decrypt_pkt))
+                        self.logger.debug(ppp("Decrypted packet:", decrypt_pkt))
                     except:
                         pass
                     raise
                     except:
                         pass
                     raise
@@ -1517,27 +1707,28 @@ class IpsecTun6(object):
 
 
 class IpsecTun6Tests(IpsecTun6):
 
 
 class IpsecTun6Tests(IpsecTun6):
-    """ UT test methods for Tunnel v6 """
+    """UT test methods for Tunnel v6"""
 
     def test_tun_basic66(self):
 
     def test_tun_basic66(self):
-        """ ipsec 6o6 tunnel basic test """
+        """ipsec 6o6 tunnel basic test"""
         self.verify_tun_66(self.params[socket.AF_INET6], count=1)
 
     def test_tun_reass_basic66(self):
         self.verify_tun_66(self.params[socket.AF_INET6], count=1)
 
     def test_tun_reass_basic66(self):
-        """ ipsec 6o6 tunnel basic reassembly test """
+        """ipsec 6o6 tunnel basic reassembly test"""
         self.verify_tun_reass_66(self.params[socket.AF_INET6])
 
     def test_tun_burst66(self):
         self.verify_tun_reass_66(self.params[socket.AF_INET6])
 
     def test_tun_burst66(self):
-        """ ipsec 6o6 tunnel burst test """
+        """ipsec 6o6 tunnel burst test"""
         self.verify_tun_66(self.params[socket.AF_INET6], count=257)
 
 
 class IpsecTun6HandoffTests(IpsecTun6):
         self.verify_tun_66(self.params[socket.AF_INET6], count=257)
 
 
 class IpsecTun6HandoffTests(IpsecTun6):
-    """ UT test methods for Tunnel v6 with multiple workers """
+    """UT test methods for Tunnel v6 with multiple workers"""
+
     vpp_worker_count = 2
 
     def test_tun_handoff_66(self):
     vpp_worker_count = 2
 
     def test_tun_handoff_66(self):
-        """ ipsec 6o6 tunnel worker hand-off test """
+        """ipsec 6o6 tunnel worker hand-off test"""
         self.vapi.cli("clear errors")
         self.vapi.cli("clear ipsec sa")
 
         self.vapi.cli("clear errors")
         self.vapi.cli("clear ipsec sa")
 
@@ -1547,31 +1738,42 @@ class IpsecTun6HandoffTests(IpsecTun6):
         # inject alternately on worker 0 and 1. all counts on the SA
         # should be against worker 0
         for worker in [0, 1, 0, 1]:
         # inject alternately on worker 0 and 1. all counts on the SA
         # should be against worker 0
         for worker in [0, 1, 0, 1]:
-            send_pkts = self.gen_encrypt_pkts6(p, p.scapy_tun_sa, self.tun_if,
-                                               src=p.remote_tun_if_host,
-                                               dst=self.pg1.remote_ip6,
-                                               count=N_PKTS)
-            recv_pkts = self.send_and_expect(self.tun_if, send_pkts,
-                                             self.pg1, worker=worker)
+            send_pkts = self.gen_encrypt_pkts6(
+                p,
+                p.scapy_tun_sa,
+                self.tun_if,
+                src=p.remote_tun_if_host,
+                dst=self.pg1.remote_ip6,
+                count=N_PKTS,
+            )
+            recv_pkts = self.send_and_expect(
+                self.tun_if, send_pkts, self.pg1, worker=worker
+            )
             self.verify_decrypted6(p, recv_pkts)
 
             self.verify_decrypted6(p, recv_pkts)
 
-            send_pkts = self.gen_pkts6(p, self.pg1, src=self.pg1.remote_ip6,
-                                       dst=p.remote_tun_if_host,
-                                       count=N_PKTS)
-            recv_pkts = self.send_and_expect(self.pg1, send_pkts,
-                                             self.tun_if, worker=worker)
+            send_pkts = self.gen_pkts6(
+                p,
+                self.pg1,
+                src=self.pg1.remote_ip6,
+                dst=p.remote_tun_if_host,
+                count=N_PKTS,
+            )
+            recv_pkts = self.send_and_expect(
+                self.pg1, send_pkts, self.tun_if, worker=worker
+            )
             self.verify_encrypted6(p, p.vpp_tun_sa, recv_pkts)
 
         # all counts against the first worker that was used
             self.verify_encrypted6(p, p.vpp_tun_sa, recv_pkts)
 
         # all counts against the first worker that was used
-        self.verify_counters6(p, p, 4*N_PKTS, worker=0)
+        self.verify_counters6(p, p, 4 * N_PKTS, worker=0)
 
 
 class IpsecTun4HandoffTests(IpsecTun4):
 
 
 class IpsecTun4HandoffTests(IpsecTun4):
-    """ UT test methods for Tunnel v4 with multiple workers """
+    """UT test methods for Tunnel v4 with multiple workers"""
+
     vpp_worker_count = 2
 
     def test_tun_handooff_44(self):
     vpp_worker_count = 2
 
     def test_tun_handooff_44(self):
-        """ ipsec 4o4 tunnel worker hand-off test """
+        """ipsec 4o4 tunnel worker hand-off test"""
         self.vapi.cli("clear errors")
         self.vapi.cli("clear ipsec sa")
 
         self.vapi.cli("clear errors")
         self.vapi.cli("clear ipsec sa")
 
@@ -1581,32 +1783,43 @@ class IpsecTun4HandoffTests(IpsecTun4):
         # inject alternately on worker 0 and 1. all counts on the SA
         # should be against worker 0
         for worker in [0, 1, 0, 1]:
         # inject alternately on worker 0 and 1. all counts on the SA
         # should be against worker 0
         for worker in [0, 1, 0, 1]:
-            send_pkts = self.gen_encrypt_pkts(p, p.scapy_tun_sa, self.tun_if,
-                                              src=p.remote_tun_if_host,
-                                              dst=self.pg1.remote_ip4,
-                                              count=N_PKTS)
-            recv_pkts = self.send_and_expect(self.tun_if, send_pkts,
-                                             self.pg1, worker=worker)
+            send_pkts = self.gen_encrypt_pkts(
+                p,
+                p.scapy_tun_sa,
+                self.tun_if,
+                src=p.remote_tun_if_host,
+                dst=self.pg1.remote_ip4,
+                count=N_PKTS,
+            )
+            recv_pkts = self.send_and_expect(
+                self.tun_if, send_pkts, self.pg1, worker=worker
+            )
             self.verify_decrypted(p, recv_pkts)
 
             self.verify_decrypted(p, recv_pkts)
 
-            send_pkts = self.gen_pkts(self.pg1, src=self.pg1.remote_ip4,
-                                      dst=p.remote_tun_if_host,
-                                      count=N_PKTS)
-            recv_pkts = self.send_and_expect(self.pg1, send_pkts,
-                                             self.tun_if, worker=worker)
+            send_pkts = self.gen_pkts(
+                self.pg1,
+                src=self.pg1.remote_ip4,
+                dst=p.remote_tun_if_host,
+                count=N_PKTS,
+            )
+            recv_pkts = self.send_and_expect(
+                self.pg1, send_pkts, self.tun_if, worker=worker
+            )
             self.verify_encrypted(p, p.vpp_tun_sa, recv_pkts)
 
         # all counts against the first worker that was used
             self.verify_encrypted(p, p.vpp_tun_sa, recv_pkts)
 
         # all counts against the first worker that was used
-        self.verify_counters4(p, 4*N_PKTS, worker=0)
+        self.verify_counters4(p, 4 * N_PKTS, worker=0)
 
 
 class IpsecTun46Tests(IpsecTun4Tests, IpsecTun6Tests):
 
 
 class IpsecTun46Tests(IpsecTun4Tests, IpsecTun6Tests):
-    """ UT test methods for Tunnel v6 & v4 """
+    """UT test methods for Tunnel v6 & v4"""
+
     pass
 
 
 class IPSecIPv4Fwd(VppTestCase):
     pass
 
 
 class IPSecIPv4Fwd(VppTestCase):
-    """ Test IPSec by capturing and verifying IPv4 forwarded pkts """
+    """Test IPSec by capturing and verifying IPv4 forwarded pkts"""
+
     @classmethod
     def setUpConstants(cls):
         super(IPSecIPv4Fwd, cls).setUpConstants()
     @classmethod
     def setUpConstants(cls):
         super(IPSecIPv4Fwd, cls).setUpConstants()
@@ -1664,9 +1877,18 @@ class IPSecIPv4Fwd(VppTestCase):
         else:
             raise Exception("Invalid policy type: %s", policy_type)
 
         else:
             raise Exception("Invalid policy type: %s", policy_type)
 
-    def spd_add_rem_policy(self, spd_id, src_if, dst_if,
-                           proto, is_out, priority, policy_type,
-                           remove=False, all_ips=False):
+    def spd_add_rem_policy(
+        self,
+        spd_id,
+        src_if,
+        dst_if,
+        proto,
+        is_out,
+        priority,
+        policy_type,
+        remove=False,
+        all_ips=False,
+    ):
         spd = VppIpsecSpd(self, spd_id)
 
         if all_ips:
         spd = VppIpsecSpd(self, spd_id)
 
         if all_ips:
@@ -1680,17 +1902,21 @@ class IPSecIPv4Fwd(VppTestCase):
             dst_range_low = dst_if.remote_ip4
             dst_range_high = dst_if.remote_ip4
 
             dst_range_low = dst_if.remote_ip4
             dst_range_high = dst_if.remote_ip4
 
-        spdEntry = VppIpsecSpdEntry(self, spd, 0,
-                                    src_range_low,
-                                    src_range_high,
-                                    dst_range_low,
-                                    dst_range_high,
-                                    proto,
-                                    priority=priority,
-                                    policy=self.get_policy(policy_type),
-                                    is_outbound=is_out)
-
-        if(remove is False):
+        spdEntry = VppIpsecSpdEntry(
+            self,
+            spd,
+            0,
+            src_range_low,
+            src_range_high,
+            dst_range_low,
+            dst_range_high,
+            proto,
+            priority=priority,
+            policy=self.get_policy(policy_type),
+            is_outbound=is_out,
+        )
+
+        if remove is False:
             spdEntry.add_vpp_config()
             self.spd_policies.append(spdEntry)
         else:
             spdEntry.add_vpp_config()
             self.spd_policies.append(spdEntry)
         else:
@@ -1699,8 +1925,7 @@ class IPSecIPv4Fwd(VppTestCase):
         self.logger.info(self.vapi.ppcli("show ipsec all"))
         return spdEntry
 
         self.logger.info(self.vapi.ppcli("show ipsec all"))
         return spdEntry
 
-    def create_stream(self, src_if, dst_if, pkt_count,
-                      src_prt=1234, dst_prt=5678):
+    def create_stream(self, src_if, dst_if, pkt_count, src_prt=1234, dst_prt=5678):
         packets = []
         for i in range(pkt_count):
             # create packet info stored in the test case instance
         packets = []
         for i in range(pkt_count):
             # create packet info stored in the test case instance
@@ -1708,10 +1933,12 @@ class IPSecIPv4Fwd(VppTestCase):
             # convert the info into packet payload
             payload = self.info_to_payload(info)
             # create the packet itself
             # convert the info into packet payload
             payload = self.info_to_payload(info)
             # create the packet itself
-            p = (Ether(dst=src_if.local_mac, src=src_if.remote_mac) /
-                 IP(src=src_if.remote_ip4, dst=dst_if.remote_ip4) /
-                 UDP(sport=src_prt, dport=dst_prt) /
-                 Raw(payload))
+            p = (
+                Ether(dst=src_if.local_mac, src=src_if.remote_mac)
+                / IP(src=src_if.remote_ip4, dst=dst_if.remote_ip4)
+                / UDP(sport=src_prt, dport=dst_prt)
+                / Raw(payload)
+            )
             # store a copy of the packet in the packet info
             info.data = p.copy()
             # append the packet to the list
             # store a copy of the packet in the packet info
             info.data = p.copy()
             # append the packet to the list
@@ -1728,43 +1955,41 @@ class IPSecIPv4Fwd(VppTestCase):
                 # convert the payload to packet info object
                 payload_info = self.payload_to_info(packet)
                 # make sure the indexes match
                 # convert the payload to packet info object
                 payload_info = self.payload_to_info(packet)
                 # make sure the indexes match
-                self.assert_equal(payload_info.src, src_if.sw_if_index,
-                                  "source sw_if_index")
-                self.assert_equal(payload_info.dst, dst_if.sw_if_index,
-                                  "destination sw_if_index")
+                self.assert_equal(
+                    payload_info.src, src_if.sw_if_index, "source sw_if_index"
+                )
+                self.assert_equal(
+                    payload_info.dst, dst_if.sw_if_index, "destination sw_if_index"
+                )
                 packet_info = self.get_next_packet_info_for_interface2(
                 packet_info = self.get_next_packet_info_for_interface2(
-                                src_if.sw_if_index,
-                                dst_if.sw_if_index,
-                                packet_info)
+                    src_if.sw_if_index, dst_if.sw_if_index, packet_info
+                )
                 # make sure we didn't run out of saved packets
                 self.assertIsNotNone(packet_info)
                 # make sure we didn't run out of saved packets
                 self.assertIsNotNone(packet_info)
-                self.assert_equal(payload_info.index, packet_info.index,
-                                  "packet info index")
+                self.assert_equal(
+                    payload_info.index, packet_info.index, "packet info index"
+                )
                 saved_packet = packet_info.data  # fetch the saved packet
                 # assert the values match
                 saved_packet = packet_info.data  # fetch the saved packet
                 # assert the values match
-                self.assert_equal(ip.src, saved_packet[IP].src,
-                                  "IP source address")
+                self.assert_equal(ip.src, saved_packet[IP].src, "IP source address")
                 # ... more assertions here
                 # ... more assertions here
-                self.assert_equal(udp.sport, saved_packet[UDP].sport,
-                                  "UDP source port")
+                self.assert_equal(udp.sport, saved_packet[UDP].sport, "UDP source port")
             except Exception as e:
             except Exception as e:
-                self.logger.error(ppp("Unexpected or invalid packet:",
-                                  packet))
+                self.logger.error(ppp("Unexpected or invalid packet:", packet))
                 raise
         remaining_packet = self.get_next_packet_info_for_interface2(
                 raise
         remaining_packet = self.get_next_packet_info_for_interface2(
-                src_if.sw_if_index,
-                dst_if.sw_if_index,
-                packet_info)
-        self.assertIsNone(remaining_packet,
-                          "Interface %s: Packet expected from interface "
-                          "%s didn't arrive" % (dst_if.name, src_if.name))
+            src_if.sw_if_index, dst_if.sw_if_index, packet_info
+        )
+        self.assertIsNone(
+            remaining_packet,
+            "Interface %s: Packet expected from interface "
+            "%s didn't arrive" % (dst_if.name, src_if.name),
+        )
 
     def verify_policy_match(self, pkt_count, spdEntry):
 
     def verify_policy_match(self, pkt_count, spdEntry):
-        self.logger.info(
-            "XXXX %s %s", str(spdEntry), str(spdEntry.get_stats()))
-        matched_pkts = spdEntry.get_stats().get('packets')
-        self.logger.info(
-            "Policy %s matched: %d pkts", str(spdEntry), matched_pkts)
+        self.logger.info("XXXX %s %s", str(spdEntry), str(spdEntry.get_stats()))
+        matched_pkts = spdEntry.get_stats().get("packets")
+        self.logger.info("Policy %s matched: %d pkts", str(spdEntry), matched_pkts)
         self.assert_equal(pkt_count, matched_pkts)
 
 
         self.assert_equal(pkt_count, matched_pkts)
 
 
@@ -1786,43 +2011,52 @@ class SpdFlowCacheTemplate(IPSecIPv4Fwd):
         super(SpdFlowCacheTemplate, self).tearDown()
 
     def get_spd_flow_cache_entries(self, outbound):
         super(SpdFlowCacheTemplate, self).tearDown()
 
     def get_spd_flow_cache_entries(self, outbound):
-        """ 'show ipsec spd' output:
+        """'show ipsec spd' output:
         ipv4-inbound-spd-flow-cache-entries: 0
         ipv4-outbound-spd-flow-cache-entries: 0
         """
         show_ipsec_reply = self.vapi.cli("show ipsec spd")
         # match the relevant section of 'show ipsec spd' output
         ipv4-inbound-spd-flow-cache-entries: 0
         ipv4-outbound-spd-flow-cache-entries: 0
         """
         show_ipsec_reply = self.vapi.cli("show ipsec spd")
         # match the relevant section of 'show ipsec spd' output
-        if(outbound):
+        if outbound:
             regex_match = re.search(
             regex_match = re.search(
-                'ipv4-outbound-spd-flow-cache-entries: (.*)',
-                show_ipsec_reply, re.DOTALL)
+                "ipv4-outbound-spd-flow-cache-entries: (.*)",
+                show_ipsec_reply,
+                re.DOTALL,
+            )
         else:
             regex_match = re.search(
         else:
             regex_match = re.search(
-                'ipv4-inbound-spd-flow-cache-entries: (.*)',
-                show_ipsec_reply, re.DOTALL)
+                "ipv4-inbound-spd-flow-cache-entries: (.*)", show_ipsec_reply, re.DOTALL
+            )
         if regex_match is None:
         if regex_match is None:
-            raise Exception("Unable to find spd flow cache entries \
-                in \'show ipsec spd\' CLI output - regex failed to match")
+            raise Exception(
+                "Unable to find spd flow cache entries \
+                in 'show ipsec spd' CLI output - regex failed to match"
+            )
         else:
             try:
                 num_entries = int(regex_match.group(1))
             except ValueError:
         else:
             try:
                 num_entries = int(regex_match.group(1))
             except ValueError:
-                raise Exception("Unable to get spd flow cache entries \
-                from \'show ipsec spd\' string: %s", regex_match.group(0))
+                raise Exception(
+                    "Unable to get spd flow cache entries \
+                from 'show ipsec spd' string: %s",
+                    regex_match.group(0),
+                )
             self.logger.info("%s", regex_match.group(0))
         return num_entries
 
     def verify_num_outbound_flow_cache_entries(self, expected_elements):
             self.logger.info("%s", regex_match.group(0))
         return num_entries
 
     def verify_num_outbound_flow_cache_entries(self, expected_elements):
-        self.assertEqual(self.get_spd_flow_cache_entries(outbound=True),
-                         expected_elements)
+        self.assertEqual(
+            self.get_spd_flow_cache_entries(outbound=True), expected_elements
+        )
 
     def verify_num_inbound_flow_cache_entries(self, expected_elements):
 
     def verify_num_inbound_flow_cache_entries(self, expected_elements):
-        self.assertEqual(self.get_spd_flow_cache_entries(outbound=False),
-                         expected_elements)
+        self.assertEqual(
+            self.get_spd_flow_cache_entries(outbound=False), expected_elements
+        )
 
     def crc32_supported(self):
         # lscpu is part of util-linux package, available on all Linux Distros
 
     def crc32_supported(self):
         # lscpu is part of util-linux package, available on all Linux Distros
-        stream = os.popen('lscpu')
+        stream = os.popen("lscpu")
         cpu_info = stream.read()
         # feature/flag "crc32" on Aarch64 and "sse4_2" on x86
         # see vppinfra/crc32.h
         cpu_info = stream.read()
         # feature/flag "crc32" on Aarch64 and "sse4_2" on x86
         # see vppinfra/crc32.h
@@ -1833,5 +2067,6 @@ class SpdFlowCacheTemplate(IPSecIPv4Fwd):
             self.logger.info("\ncrc32 NOT supported:\n" + cpu_info)
             return False
 
             self.logger.info("\ncrc32 NOT supported:\n" + cpu_info)
             return False
 
-if __name__ == '__main__':
+
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index 097476b..856d02a 100644 (file)
@@ -5,8 +5,13 @@ import unittest
 
 from framework import VppTestCase, VppTestRunner
 from vpp_ip import DpoProto
 
 from framework import VppTestCase, VppTestRunner
 from vpp_ip import DpoProto
-from vpp_ip_route import VppIpRoute, VppRoutePath, VppMplsLabel, \
-    VppIpTable, FibPathProto
+from vpp_ip_route import (
+    VppIpRoute,
+    VppRoutePath,
+    VppMplsLabel,
+    VppIpTable,
+    FibPathProto,
+)
 from vpp_acl import AclRule, VppAcl
 
 from scapy.packet import Raw
 from vpp_acl import AclRule, VppAcl
 
 from scapy.packet import Raw
@@ -31,19 +36,13 @@ def find_abf_policy(test, id):
 def find_abf_itf_attach(test, id, sw_if_index):
     attachs = test.vapi.abf_itf_attach_dump()
     for a in attachs:
 def find_abf_itf_attach(test, id, sw_if_index):
     attachs = test.vapi.abf_itf_attach_dump()
     for a in attachs:
-        if id == a.attach.policy_id and \
-           sw_if_index == a.attach.sw_if_index:
+        if id == a.attach.policy_id and sw_if_index == a.attach.sw_if_index:
             return True
     return False
 
 
 class VppAbfPolicy(VppObject):
             return True
     return False
 
 
 class VppAbfPolicy(VppObject):
-
-    def __init__(self,
-                 test,
-                 policy_id,
-                 acl,
-                 paths):
+    def __init__(self, test, policy_id, acl, paths):
         self._test = test
         self.policy_id = policy_id
         self.acl = acl
         self._test = test
         self.policy_id = policy_id
         self.acl = acl
@@ -55,35 +54,35 @@ class VppAbfPolicy(VppObject):
     def add_vpp_config(self):
         self._test.vapi.abf_policy_add_del(
             1,
     def add_vpp_config(self):
         self._test.vapi.abf_policy_add_del(
             1,
-            {'policy_id': self.policy_id,
-             'acl_index': self.acl.acl_index,
-             'n_paths': len(self.paths),
-             'paths': self.encoded_paths})
+            {
+                "policy_id": self.policy_id,
+                "acl_index": self.acl.acl_index,
+                "n_paths": len(self.paths),
+                "paths": self.encoded_paths,
+            },
+        )
         self._test.registry.register(self, self._test.logger)
 
     def remove_vpp_config(self):
         self._test.vapi.abf_policy_add_del(
             0,
         self._test.registry.register(self, self._test.logger)
 
     def remove_vpp_config(self):
         self._test.vapi.abf_policy_add_del(
             0,
-            {'policy_id': self.policy_id,
-             'acl_index': self.acl.acl_index,
-             'n_paths': len(self.paths),
-             'paths': self.encoded_paths})
+            {
+                "policy_id": self.policy_id,
+                "acl_index": self.acl.acl_index,
+                "n_paths": len(self.paths),
+                "paths": self.encoded_paths,
+            },
+        )
 
     def query_vpp_config(self):
         return find_abf_policy(self._test, self.policy_id)
 
     def object_id(self):
 
     def query_vpp_config(self):
         return find_abf_policy(self._test, self.policy_id)
 
     def object_id(self):
-        return ("abf-policy-%d" % self.policy_id)
+        return "abf-policy-%d" % self.policy_id
 
 
 class VppAbfAttach(VppObject):
 
 
 class VppAbfAttach(VppObject):
-
-    def __init__(self,
-                 test,
-                 policy_id,
-                 sw_if_index,
-                 priority,
-                 is_ipv6=0):
+    def __init__(self, test, policy_id, sw_if_index, priority, is_ipv6=0):
         self._test = test
         self.policy_id = policy_id
         self.sw_if_index = sw_if_index
         self._test = test
         self.policy_id = policy_id
         self.sw_if_index = sw_if_index
@@ -93,31 +92,35 @@ class VppAbfAttach(VppObject):
     def add_vpp_config(self):
         self._test.vapi.abf_itf_attach_add_del(
             1,
     def add_vpp_config(self):
         self._test.vapi.abf_itf_attach_add_del(
             1,
-            {'policy_id': self.policy_id,
-             'sw_if_index': self.sw_if_index,
-             'priority': self.priority,
-             'is_ipv6': self.is_ipv6})
+            {
+                "policy_id": self.policy_id,
+                "sw_if_index": self.sw_if_index,
+                "priority": self.priority,
+                "is_ipv6": self.is_ipv6,
+            },
+        )
         self._test.registry.register(self, self._test.logger)
 
     def remove_vpp_config(self):
         self._test.vapi.abf_itf_attach_add_del(
             0,
         self._test.registry.register(self, self._test.logger)
 
     def remove_vpp_config(self):
         self._test.vapi.abf_itf_attach_add_del(
             0,
-            {'policy_id': self.policy_id,
-             'sw_if_index': self.sw_if_index,
-             'priority': self.priority,
-             'is_ipv6': self.is_ipv6})
+            {
+                "policy_id": self.policy_id,
+                "sw_if_index": self.sw_if_index,
+                "priority": self.priority,
+                "is_ipv6": self.is_ipv6,
+            },
+        )
 
     def query_vpp_config(self):
 
     def query_vpp_config(self):
-        return find_abf_itf_attach(self._test,
-                                   self.policy_id,
-                                   self.sw_if_index)
+        return find_abf_itf_attach(self._test, self.policy_id, self.sw_if_index)
 
     def object_id(self):
 
     def object_id(self):
-        return ("abf-attach-%d-%d" % (self.policy_id, self.sw_if_index))
+        return "abf-attach-%d-%d" % (self.policy_id, self.sw_if_index)
 
 
 class TestAbf(VppTestCase):
 
 
 class TestAbf(VppTestCase):
-    """ ABF Test Case """
+    """ABF Test Case"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -147,8 +150,7 @@ class TestAbf(VppTestCase):
         super(TestAbf, self).tearDown()
 
     def test_abf4(self):
         super(TestAbf, self).tearDown()
 
     def test_abf4(self):
-        """ IPv4 ACL Based Forwarding
-        """
+        """IPv4 ACL Based Forwarding"""
 
         #
         # We are not testing the various matching capabilities
 
         #
         # We are not testing the various matching capabilities
@@ -163,18 +165,22 @@ class TestAbf(VppTestCase):
         #
         # Rule 1
         #
         #
         # Rule 1
         #
-        rule_1 = AclRule(is_permit=1, proto=17, ports=1234,
-                         src_prefix=IPv4Network("1.1.1.1/32"),
-                         dst_prefix=IPv4Network("1.1.1.2/32"))
+        rule_1 = AclRule(
+            is_permit=1,
+            proto=17,
+            ports=1234,
+            src_prefix=IPv4Network("1.1.1.1/32"),
+            dst_prefix=IPv4Network("1.1.1.2/32"),
+        )
         acl_1 = VppAcl(self, rules=[rule_1])
         acl_1.add_vpp_config()
 
         #
         # ABF policy for ACL 1 - path via interface 1
         #
         acl_1 = VppAcl(self, rules=[rule_1])
         acl_1.add_vpp_config()
 
         #
         # ABF policy for ACL 1 - path via interface 1
         #
-        abf_1 = VppAbfPolicy(self, 10, acl_1,
-                             [VppRoutePath(self.pg1.remote_ip4,
-                                           self.pg1.sw_if_index)])
+        abf_1 = VppAbfPolicy(
+            self, 10, acl_1, [VppRoutePath(self.pg1.remote_ip4, self.pg1.sw_if_index)]
+        )
         abf_1.add_vpp_config()
 
         #
         abf_1.add_vpp_config()
 
         #
@@ -187,42 +193,43 @@ class TestAbf(VppTestCase):
         # fire in packet matching the ACL src,dst. If it's forwarded
         # then the ABF was successful, since default routing will drop it
         #
         # fire in packet matching the ACL src,dst. If it's forwarded
         # then the ABF was successful, since default routing will drop it
         #
-        p_1 = (Ether(src=self.pg0.remote_mac,
-                     dst=self.pg0.local_mac) /
-               IP(src="1.1.1.1", dst="1.1.1.2") /
-               UDP(sport=1234, dport=1234) /
-               Raw(b'\xa5' * 100))
-        self.send_and_expect(self.pg0, p_1*NUM_PKTS, self.pg1)
+        p_1 = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src="1.1.1.1", dst="1.1.1.2")
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
+        self.send_and_expect(self.pg0, p_1 * NUM_PKTS, self.pg1)
 
         #
         # Attach a 'better' priority policy to the same interface
         #
 
         #
         # Attach a 'better' priority policy to the same interface
         #
-        abf_2 = VppAbfPolicy(self, 11, acl_1,
-                             [VppRoutePath(self.pg2.remote_ip4,
-                                           self.pg2.sw_if_index)])
+        abf_2 = VppAbfPolicy(
+            self, 11, acl_1, [VppRoutePath(self.pg2.remote_ip4, self.pg2.sw_if_index)]
+        )
         abf_2.add_vpp_config()
         attach_2 = VppAbfAttach(self, 11, self.pg0.sw_if_index, 40)
         attach_2.add_vpp_config()
 
         abf_2.add_vpp_config()
         attach_2 = VppAbfAttach(self, 11, self.pg0.sw_if_index, 40)
         attach_2.add_vpp_config()
 
-        self.send_and_expect(self.pg0, p_1*NUM_PKTS, self.pg2)
+        self.send_and_expect(self.pg0, p_1 * NUM_PKTS, self.pg2)
 
         #
         # Attach a policy with priority in the middle
         #
 
         #
         # Attach a policy with priority in the middle
         #
-        abf_3 = VppAbfPolicy(self, 12, acl_1,
-                             [VppRoutePath(self.pg3.remote_ip4,
-                                           self.pg3.sw_if_index)])
+        abf_3 = VppAbfPolicy(
+            self, 12, acl_1, [VppRoutePath(self.pg3.remote_ip4, self.pg3.sw_if_index)]
+        )
         abf_3.add_vpp_config()
         attach_3 = VppAbfAttach(self, 12, self.pg0.sw_if_index, 45)
         attach_3.add_vpp_config()
 
         abf_3.add_vpp_config()
         attach_3 = VppAbfAttach(self, 12, self.pg0.sw_if_index, 45)
         attach_3.add_vpp_config()
 
-        self.send_and_expect(self.pg0, p_1*NUM_PKTS, self.pg2)
+        self.send_and_expect(self.pg0, p_1 * NUM_PKTS, self.pg2)
 
         #
         # remove the best priority
         #
         attach_2.remove_vpp_config()
 
         #
         # remove the best priority
         #
         attach_2.remove_vpp_config()
-        self.send_and_expect(self.pg0, p_1*NUM_PKTS, self.pg3)
+        self.send_and_expect(self.pg0, p_1 * NUM_PKTS, self.pg3)
 
         #
         # Attach one of the same policies to Pg1
 
         #
         # Attach one of the same policies to Pg1
@@ -230,11 +237,12 @@ class TestAbf(VppTestCase):
         attach_4 = VppAbfAttach(self, 12, self.pg1.sw_if_index, 45)
         attach_4.add_vpp_config()
 
         attach_4 = VppAbfAttach(self, 12, self.pg1.sw_if_index, 45)
         attach_4.add_vpp_config()
 
-        p_2 = (Ether(src=self.pg1.remote_mac,
-                     dst=self.pg1.local_mac) /
-               IP(src="1.1.1.1", dst="1.1.1.2") /
-               UDP(sport=1234, dport=1234) /
-               Raw(b'\xa5' * 100))
+        p_2 = (
+            Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
+            / IP(src="1.1.1.1", dst="1.1.1.2")
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
         self.send_and_expect(self.pg1, p_2 * NUM_PKTS, self.pg3)
 
         #
         self.send_and_expect(self.pg1, p_2 * NUM_PKTS, self.pg3)
 
         #
@@ -255,22 +263,27 @@ class TestAbf(VppTestCase):
         self.pg4.config_ip4()
         self.pg4.resolve_arp()
 
         self.pg4.config_ip4()
         self.pg4.resolve_arp()
 
-        abf_13 = VppAbfPolicy(self, 13, acl_1,
-                              [VppRoutePath(self.pg4.remote_ip4,
-                                            0xffffffff,
-                                            nh_table_id=table_20.table_id)])
+        abf_13 = VppAbfPolicy(
+            self,
+            13,
+            acl_1,
+            [
+                VppRoutePath(
+                    self.pg4.remote_ip4, 0xFFFFFFFF, nh_table_id=table_20.table_id
+                )
+            ],
+        )
         abf_13.add_vpp_config()
         attach_5 = VppAbfAttach(self, 13, self.pg0.sw_if_index, 30)
         attach_5.add_vpp_config()
 
         abf_13.add_vpp_config()
         attach_5 = VppAbfAttach(self, 13, self.pg0.sw_if_index, 30)
         attach_5.add_vpp_config()
 
-        self.send_and_expect(self.pg0, p_1*NUM_PKTS, self.pg4)
+        self.send_and_expect(self.pg0, p_1 * NUM_PKTS, self.pg4)
 
         self.pg4.unconfig_ip4()
         self.pg4.set_table_ip4(0)
 
     def test_abf6(self):
 
         self.pg4.unconfig_ip4()
         self.pg4.set_table_ip4(0)
 
     def test_abf6(self):
-        """ IPv6 ACL Based Forwarding
-        """
+        """IPv6 ACL Based Forwarding"""
 
         #
         # Simple test for matching IPv6 packets
 
         #
         # Simple test for matching IPv6 packets
@@ -279,32 +292,34 @@ class TestAbf(VppTestCase):
         #
         # Rule 1
         #
         #
         # Rule 1
         #
-        rule_1 = AclRule(is_permit=1, proto=17, ports=1234,
-                         src_prefix=IPv6Network("2001::2/128"),
-                         dst_prefix=IPv6Network("2001::1/128"))
+        rule_1 = AclRule(
+            is_permit=1,
+            proto=17,
+            ports=1234,
+            src_prefix=IPv6Network("2001::2/128"),
+            dst_prefix=IPv6Network("2001::1/128"),
+        )
         acl_1 = VppAcl(self, rules=[rule_1])
         acl_1.add_vpp_config()
 
         #
         # ABF policy for ACL 1 - path via interface 1
         #
         acl_1 = VppAcl(self, rules=[rule_1])
         acl_1.add_vpp_config()
 
         #
         # ABF policy for ACL 1 - path via interface 1
         #
-        abf_1 = VppAbfPolicy(self, 10, acl_1,
-                             [VppRoutePath("3001::1",
-                                           0xffffffff)])
+        abf_1 = VppAbfPolicy(self, 10, acl_1, [VppRoutePath("3001::1", 0xFFFFFFFF)])
         abf_1.add_vpp_config()
 
         abf_1.add_vpp_config()
 
-        attach_1 = VppAbfAttach(self, 10, self.pg0.sw_if_index,
-                                45, is_ipv6=True)
+        attach_1 = VppAbfAttach(self, 10, self.pg0.sw_if_index, 45, is_ipv6=True)
         attach_1.add_vpp_config()
 
         #
         # a packet matching the rule
         #
         attach_1.add_vpp_config()
 
         #
         # a packet matching the rule
         #
-        p = (Ether(src=self.pg0.remote_mac,
-                   dst=self.pg0.local_mac) /
-             IPv6(src="2001::2", dst="2001::1") /
-             UDP(sport=1234, dport=1234) /
-             Raw(b'\xa5' * 100))
+        p = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IPv6(src="2001::2", dst="2001::1")
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
 
         #
         # packets are dropped because there is no route to the policy's
 
         #
         # packets are dropped because there is no route to the policy's
@@ -315,9 +330,12 @@ class TestAbf(VppTestCase):
         #
         # add a route resolving the next-hop
         #
         #
         # add a route resolving the next-hop
         #
-        route = VppIpRoute(self, "3001::1", 32,
-                           [VppRoutePath(self.pg1.remote_ip6,
-                                         self.pg1.sw_if_index)])
+        route = VppIpRoute(
+            self,
+            "3001::1",
+            32,
+            [VppRoutePath(self.pg1.remote_ip6, self.pg1.sw_if_index)],
+        )
         route.add_vpp_config()
 
         #
         route.add_vpp_config()
 
         #
@@ -326,5 +344,5 @@ class TestAbf(VppTestCase):
         self.send_and_expect(self.pg0, p * NUM_PKTS, self.pg1)
 
 
         self.send_and_expect(self.pg0, p * NUM_PKTS, self.pg1)
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index 53d9621..32ecedb 100644 (file)
@@ -22,7 +22,7 @@ from vpp_ip import INVALID_INDEX
 
 @tag_fixme_vpp_workers
 class TestACLplugin(VppTestCase):
 
 @tag_fixme_vpp_workers
 class TestACLplugin(VppTestCase):
-    """ ACL plugin Test Case """
+    """ACL plugin Test Case"""
 
     # traffic types
     IP = 0
 
     # traffic types
     IP = 0
@@ -39,7 +39,7 @@ class TestACLplugin(VppTestCase):
 
     # supported protocols
     proto = [[6, 17], [1, 58]]
 
     # supported protocols
     proto = [[6, 17], [1, 58]]
-    proto_map = {1: 'ICMP', 58: 'ICMPv6EchoRequest', 6: 'TCP', 17: 'UDP'}
+    proto_map = {1: "ICMP", 58: "ICMPv6EchoRequest", 6: "TCP", 17: "UDP"}
     ICMPv4 = 0
     ICMPv6 = 1
     TCP = 0
     ICMPv4 = 0
     ICMPv6 = 1
     TCP = 0
@@ -105,11 +105,11 @@ class TestACLplugin(VppTestCase):
 
             # Create BD with MAC learning and unknown unicast flooding disabled
             # and put interfaces to this BD
 
             # Create BD with MAC learning and unknown unicast flooding disabled
             # and put interfaces to this BD
-            cls.vapi.bridge_domain_add_del(bd_id=cls.bd_id, uu_flood=1,
-                                           learn=1)
+            cls.vapi.bridge_domain_add_del(bd_id=cls.bd_id, uu_flood=1, learn=1)
             for pg_if in cls.pg_interfaces:
                 cls.vapi.sw_interface_set_l2_bridge(
             for pg_if in cls.pg_interfaces:
                 cls.vapi.sw_interface_set_l2_bridge(
-                    rx_sw_if_index=pg_if.sw_if_index, bd_id=cls.bd_id)
+                    rx_sw_if_index=pg_if.sw_if_index, bd_id=cls.bd_id
+                )
 
             # Set up all interfaces
             for i in cls.pg_interfaces:
 
             # Set up all interfaces
             for i in cls.pg_interfaces:
@@ -135,14 +135,16 @@ class TestACLplugin(VppTestCase):
             for pg_if in cls.pg_interfaces:
                 i += 1
                 start_nr = macs_per_if * i + start
             for pg_if in cls.pg_interfaces:
                 i += 1
                 start_nr = macs_per_if * i + start
-                end_nr = count + start if i == (n_int - 1) \
-                    else macs_per_if * (i + 1) + start
+                end_nr = (
+                    count + start if i == (n_int - 1) else macs_per_if * (i + 1) + start
+                )
                 hosts = cls.hosts_by_pg_idx[pg_if.sw_if_index]
                 for j in range(int(start_nr), int(end_nr)):
                     host = Host(
                         "00:00:00:ff:%02x:%02x" % (pg_if.sw_if_index, j),
                         "172.17.1%02x.%u" % (pg_if.sw_if_index, j),
                 hosts = cls.hosts_by_pg_idx[pg_if.sw_if_index]
                 for j in range(int(start_nr), int(end_nr)):
                     host = Host(
                         "00:00:00:ff:%02x:%02x" % (pg_if.sw_if_index, j),
                         "172.17.1%02x.%u" % (pg_if.sw_if_index, j),
-                        "2017:dead:%02x::%u" % (pg_if.sw_if_index, j))
+                        "2017:dead:%02x::%u" % (pg_if.sw_if_index, j),
+                    )
                     hosts.append(host)
 
         except Exception:
                     hosts.append(host)
 
         except Exception:
@@ -176,20 +178,32 @@ class TestACLplugin(VppTestCase):
         self.logger.info(self.vapi.ppcli("show acl-plugin acl"))
         self.logger.info(self.vapi.ppcli("show acl-plugin interface"))
         self.logger.info(self.vapi.ppcli("show acl-plugin tables"))
         self.logger.info(self.vapi.ppcli("show acl-plugin acl"))
         self.logger.info(self.vapi.ppcli("show acl-plugin interface"))
         self.logger.info(self.vapi.ppcli("show acl-plugin tables"))
-        self.logger.info(self.vapi.ppcli("show bridge-domain %s detail"
-                                         % self.bd_id))
-
-    def create_rule(self, ip=0, permit_deny=0, ports=PORTS_ALL, proto=-1,
-                    s_prefix=0, s_ip=0,
-                    d_prefix=0, d_ip=0):
+        self.logger.info(self.vapi.ppcli("show bridge-domain %s detail" % self.bd_id))
+
+    def create_rule(
+        self,
+        ip=0,
+        permit_deny=0,
+        ports=PORTS_ALL,
+        proto=-1,
+        s_prefix=0,
+        s_ip=0,
+        d_prefix=0,
+        d_ip=0,
+    ):
         if ip:
             src_prefix = IPv6Network((s_ip, s_prefix))
             dst_prefix = IPv6Network((d_ip, d_prefix))
         else:
             src_prefix = IPv4Network((s_ip, s_prefix))
             dst_prefix = IPv4Network((d_ip, d_prefix))
         if ip:
             src_prefix = IPv6Network((s_ip, s_prefix))
             dst_prefix = IPv6Network((d_ip, d_prefix))
         else:
             src_prefix = IPv4Network((s_ip, s_prefix))
             dst_prefix = IPv4Network((d_ip, d_prefix))
-        return AclRule(is_permit=permit_deny, ports=ports, proto=proto,
-                       src_prefix=src_prefix, dst_prefix=dst_prefix)
+        return AclRule(
+            is_permit=permit_deny,
+            ports=ports,
+            proto=proto,
+            src_prefix=src_prefix,
+            dst_prefix=dst_prefix,
+        )
 
     def apply_rules(self, rules, tag=None):
         acl = VppAcl(self, rules, tag=tag)
 
     def apply_rules(self, rules, tag=None):
         acl = VppAcl(self, rules, tag=tag)
@@ -198,7 +212,8 @@ class TestACLplugin(VppTestCase):
         # Apply a ACL on the interface as inbound
         for i in self.pg_interfaces:
             acl_if = VppAclInterface(
         # Apply a ACL on the interface as inbound
         for i in self.pg_interfaces:
             acl_if = VppAclInterface(
-                self, sw_if_index=i.sw_if_index, n_input=1, acls=[acl])
+                self, sw_if_index=i.sw_if_index, n_input=1, acls=[acl]
+            )
             acl_if.add_vpp_config()
         return acl.acl_index
 
             acl_if.add_vpp_config()
         return acl.acl_index
 
@@ -207,8 +222,7 @@ class TestACLplugin(VppTestCase):
         acl.add_vpp_config()
         self.logger.info("Dumped ACL: " + str(acl.dump()))
         # Apply a ACL on the interface as inbound
         acl.add_vpp_config()
         self.logger.info("Dumped ACL: " + str(acl.dump()))
         # Apply a ACL on the interface as inbound
-        acl_if = VppAclInterface(self, sw_if_index=sw_if_index, n_input=1,
-                                 acls=[acl])
+        acl_if = VppAclInterface(self, sw_if_index=sw_if_index, n_input=1, acls=[acl])
         return acl.acl_index
 
     def etype_whitelist(self, whitelist, n_input, add=True):
         return acl.acl_index
 
     def etype_whitelist(self, whitelist, n_input, add=True):
@@ -216,9 +230,14 @@ class TestACLplugin(VppTestCase):
         if add:
             self._wl = []
             for i in self.pg_interfaces:
         if add:
             self._wl = []
             for i in self.pg_interfaces:
-                self._wl.append(VppEtypeWhitelist(
-                    self, sw_if_index=i.sw_if_index, whitelist=whitelist,
-                    n_input=n_input).add_vpp_config())
+                self._wl.append(
+                    VppEtypeWhitelist(
+                        self,
+                        sw_if_index=i.sw_if_index,
+                        whitelist=whitelist,
+                        n_input=n_input,
+                    ).add_vpp_config()
+                )
         else:
             if hasattr(self, "_wl"):
                 for wl in self._wl:
         else:
             if hasattr(self, "_wl"):
                 for wl in self._wl:
@@ -226,27 +245,36 @@ class TestACLplugin(VppTestCase):
 
     def create_upper_layer(self, packet_index, proto, ports=0):
         p = self.proto_map[proto]
 
     def create_upper_layer(self, packet_index, proto, ports=0):
         p = self.proto_map[proto]
-        if p == 'UDP':
+        if p == "UDP":
             if ports == 0:
             if ports == 0:
-                return UDP(sport=random.randint(self.udp_sport_from,
-                                                self.udp_sport_to),
-                           dport=random.randint(self.udp_dport_from,
-                                                self.udp_dport_to))
+                return UDP(
+                    sport=random.randint(self.udp_sport_from, self.udp_sport_to),
+                    dport=random.randint(self.udp_dport_from, self.udp_dport_to),
+                )
             else:
                 return UDP(sport=ports, dport=ports)
             else:
                 return UDP(sport=ports, dport=ports)
-        elif p == 'TCP':
+        elif p == "TCP":
             if ports == 0:
             if ports == 0:
-                return TCP(sport=random.randint(self.tcp_sport_from,
-                                                self.tcp_sport_to),
-                           dport=random.randint(self.tcp_dport_from,
-                                                self.tcp_dport_to))
+                return TCP(
+                    sport=random.randint(self.tcp_sport_from, self.tcp_sport_to),
+                    dport=random.randint(self.tcp_dport_from, self.tcp_dport_to),
+                )
             else:
                 return TCP(sport=ports, dport=ports)
             else:
                 return TCP(sport=ports, dport=ports)
-        return ''
-
-    def create_stream(self, src_if, packet_sizes, traffic_type=0, ipv6=0,
-                      proto=-1, ports=0, fragments=False,
-                      pkt_raw=True, etype=-1):
+        return ""
+
+    def create_stream(
+        self,
+        src_if,
+        packet_sizes,
+        traffic_type=0,
+        ipv6=0,
+        proto=-1,
+        ports=0,
+        fragments=False,
+        pkt_raw=True,
+        etype=-1,
+    ):
         """
         Create input packet stream for defined interface using hosts or
         deleted_hosts list.
         """
         Create input packet stream for defined interface using hosts or
         deleted_hosts list.
@@ -279,26 +307,25 @@ class TestACLplugin(VppTestCase):
                     payload = self.info_to_payload(pkt_info)
                     p = Ether(dst=dst_host.mac, src=src_host.mac)
                     if etype > 0:
                     payload = self.info_to_payload(pkt_info)
                     p = Ether(dst=dst_host.mac, src=src_host.mac)
                     if etype > 0:
-                        p = Ether(dst=dst_host.mac,
-                                  src=src_host.mac,
-                                  type=etype)
+                        p = Ether(dst=dst_host.mac, src=src_host.mac, type=etype)
                     if pkt_info.ip:
                         p /= IPv6(dst=dst_host.ip6, src=src_host.ip6)
                         if fragments:
                             p /= IPv6ExtHdrFragment(offset=64, m=1)
                     else:
                         if fragments:
                     if pkt_info.ip:
                         p /= IPv6(dst=dst_host.ip6, src=src_host.ip6)
                         if fragments:
                             p /= IPv6ExtHdrFragment(offset=64, m=1)
                     else:
                         if fragments:
-                            p /= IP(src=src_host.ip4, dst=dst_host.ip4,
-                                    flags=1, frag=64)
+                            p /= IP(
+                                src=src_host.ip4, dst=dst_host.ip4, flags=1, frag=64
+                            )
                         else:
                             p /= IP(src=src_host.ip4, dst=dst_host.ip4)
                     if traffic_type == self.ICMP:
                         if pkt_info.ip:
                         else:
                             p /= IP(src=src_host.ip4, dst=dst_host.ip4)
                     if traffic_type == self.ICMP:
                         if pkt_info.ip:
-                            p /= ICMPv6EchoRequest(type=self.icmp6_type,
-                                                   code=self.icmp6_code)
+                            p /= ICMPv6EchoRequest(
+                                type=self.icmp6_type, code=self.icmp6_code
+                            )
                         else:
                         else:
-                            p /= ICMP(type=self.icmp4_type,
-                                      code=self.icmp4_code)
+                            p /= ICMP(type=self.icmp4_type, code=self.icmp4_code)
                     else:
                         p /= self.create_upper_layer(i, pkt_info.proto, ports)
                     if pkt_raw:
                     else:
                         p /= self.create_upper_layer(i, pkt_info.proto, ports)
                     if pkt_raw:
@@ -310,8 +337,7 @@ class TestACLplugin(VppTestCase):
                     pkts.append(p)
         return pkts
 
                     pkts.append(p)
         return pkts
 
-    def verify_capture(self, pg_if, capture,
-                       traffic_type=0, ip_type=0, etype=-1):
+    def verify_capture(self, pg_if, capture, traffic_type=0, ip_type=0, etype=-1):
         """
         Verify captured input packet stream for defined interface.
 
         """
         Verify captured input packet stream for defined interface.
 
@@ -326,22 +352,23 @@ class TestACLplugin(VppTestCase):
         for packet in capture:
             if etype > 0:
                 if packet[Ether].type != etype:
         for packet in capture:
             if etype > 0:
                 if packet[Ether].type != etype:
-                    self.logger.error(ppp("Unexpected ethertype in packet:",
-                                          packet))
+                    self.logger.error(ppp("Unexpected ethertype in packet:", packet))
                 else:
                     continue
             try:
                 # Raw data for ICMPv6 are stored in ICMPv6EchoRequest.data
                 if traffic_type == self.ICMP and ip_type == self.IPV6:
                     payload_info = self.payload_to_info(
                 else:
                     continue
             try:
                 # Raw data for ICMPv6 are stored in ICMPv6EchoRequest.data
                 if traffic_type == self.ICMP and ip_type == self.IPV6:
                     payload_info = self.payload_to_info(
-                        packet[ICMPv6EchoRequest], 'data')
+                        packet[ICMPv6EchoRequest], "data"
+                    )
                     payload = packet[ICMPv6EchoRequest]
                 else:
                     payload_info = self.payload_to_info(packet[Raw])
                     payload = packet[self.proto_map[payload_info.proto]]
             except:
                     payload = packet[ICMPv6EchoRequest]
                 else:
                     payload_info = self.payload_to_info(packet[Raw])
                     payload = packet[self.proto_map[payload_info.proto]]
             except:
-                self.logger.error(ppp("Unexpected or invalid packet "
-                                      "(outside network):", packet))
+                self.logger.error(
+                    ppp("Unexpected or invalid packet (outside network):", packet)
+                )
                 raise
 
             if ip_type != 0:
                 raise
 
             if ip_type != 0:
@@ -355,8 +382,9 @@ class TestACLplugin(VppTestCase):
                         self.assertEqual(payload.type, self.icmp6_type)
                         self.assertEqual(payload.code, self.icmp6_code)
                 except:
                         self.assertEqual(payload.type, self.icmp6_type)
                         self.assertEqual(payload.code, self.icmp6_code)
                 except:
-                    self.logger.error(ppp("Unexpected or invalid packet "
-                                          "(outside network):", packet))
+                    self.logger.error(
+                        ppp("Unexpected or invalid packet (outside network):", packet)
+                    )
                     raise
             else:
                 try:
                     raise
             else:
                 try:
@@ -366,12 +394,13 @@ class TestACLplugin(VppTestCase):
                     packet_index = payload_info.index
 
                     self.assertEqual(payload_info.dst, dst_sw_if_index)
                     packet_index = payload_info.index
 
                     self.assertEqual(payload_info.dst, dst_sw_if_index)
-                    self.logger.debug("Got packet on port %s: src=%u (id=%u)" %
-                                      (pg_if.name, payload_info.src,
-                                       packet_index))
+                    self.logger.debug(
+                        "Got packet on port %s: src=%u (id=%u)"
+                        % (pg_if.name, payload_info.src, packet_index)
+                    )
                     next_info = self.get_next_packet_info_for_interface2(
                     next_info = self.get_next_packet_info_for_interface2(
-                        payload_info.src, dst_sw_if_index,
-                        last_info[payload_info.src])
+                        payload_info.src, dst_sw_if_index, last_info[payload_info.src]
+                    )
                     last_info[payload_info.src] = next_info
                     self.assertTrue(next_info is not None)
                     self.assertEqual(packet_index, next_info.index)
                     last_info[payload_info.src] = next_info
                     self.assertTrue(next_info is not None)
                     self.assertEqual(packet_index, next_info.index)
@@ -380,29 +409,26 @@ class TestACLplugin(VppTestCase):
                     self.assertEqual(ip.src, saved_packet[ip_version].src)
                     self.assertEqual(ip.dst, saved_packet[ip_version].dst)
                     p = self.proto_map[payload_info.proto]
                     self.assertEqual(ip.src, saved_packet[ip_version].src)
                     self.assertEqual(ip.dst, saved_packet[ip_version].dst)
                     p = self.proto_map[payload_info.proto]
-                    if p == 'TCP':
+                    if p == "TCP":
                         tcp = packet[TCP]
                         tcp = packet[TCP]
-                        self.assertEqual(tcp.sport, saved_packet[
-                            TCP].sport)
-                        self.assertEqual(tcp.dport, saved_packet[
-                            TCP].dport)
-                    elif p == 'UDP':
+                        self.assertEqual(tcp.sport, saved_packet[TCP].sport)
+                        self.assertEqual(tcp.dport, saved_packet[TCP].dport)
+                    elif p == "UDP":
                         udp = packet[UDP]
                         udp = packet[UDP]
-                        self.assertEqual(udp.sport, saved_packet[
-                            UDP].sport)
-                        self.assertEqual(udp.dport, saved_packet[
-                            UDP].dport)
+                        self.assertEqual(udp.sport, saved_packet[UDP].sport)
+                        self.assertEqual(udp.dport, saved_packet[UDP].dport)
                 except:
                 except:
-                    self.logger.error(ppp("Unexpected or invalid packet:",
-                                          packet))
+                    self.logger.error(ppp("Unexpected or invalid packet:", packet))
                     raise
         for i in self.pg_interfaces:
             remaining_packet = self.get_next_packet_info_for_interface2(
                     raise
         for i in self.pg_interfaces:
             remaining_packet = self.get_next_packet_info_for_interface2(
-                i, dst_sw_if_index, last_info[i.sw_if_index])
+                i, dst_sw_if_index, last_info[i.sw_if_index]
+            )
             self.assertTrue(
                 remaining_packet is None,
             self.assertTrue(
                 remaining_packet is None,
-                "Port %u: Packet expected from source %u didn't arrive" %
-                (dst_sw_if_index, i.sw_if_index))
+                "Port %u: Packet expected from source %u didn't arrive"
+                % (dst_sw_if_index, i.sw_if_index),
+            )
 
     def run_traffic_no_check(self):
         # Test
 
     def run_traffic_no_check(self):
         # Test
@@ -417,16 +443,32 @@ class TestACLplugin(VppTestCase):
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
-    def run_verify_test(self, traffic_type=0, ip_type=0, proto=-1, ports=0,
-                        frags=False, pkt_raw=True, etype=-1):
+    def run_verify_test(
+        self,
+        traffic_type=0,
+        ip_type=0,
+        proto=-1,
+        ports=0,
+        frags=False,
+        pkt_raw=True,
+        etype=-1,
+    ):
         # Test
         # Create incoming packet streams for packet-generator interfaces
         pkts_cnt = 0
         for i in self.pg_interfaces:
             if self.flows.__contains__(i):
         # Test
         # Create incoming packet streams for packet-generator interfaces
         pkts_cnt = 0
         for i in self.pg_interfaces:
             if self.flows.__contains__(i):
-                pkts = self.create_stream(i, self.pg_if_packet_sizes,
-                                          traffic_type, ip_type, proto, ports,
-                                          frags, pkt_raw, etype)
+                pkts = self.create_stream(
+                    i,
+                    self.pg_if_packet_sizes,
+                    traffic_type,
+                    ip_type,
+                    proto,
+                    ports,
+                    frags,
+                    pkt_raw,
+                    etype,
+                )
                 if len(pkts) > 0:
                     i.add_stream(pkts)
                     pkts_cnt += len(pkts)
                 if len(pkts) > 0:
                     i.add_stream(pkts)
                     pkts_cnt += len(pkts)
@@ -442,21 +484,28 @@ class TestACLplugin(VppTestCase):
             if self.flows.__contains__(src_if):
                 for dst_if in self.flows[src_if]:
                     capture = dst_if.get_capture(pkts_cnt)
             if self.flows.__contains__(src_if):
                 for dst_if in self.flows[src_if]:
                     capture = dst_if.get_capture(pkts_cnt)
-                    self.logger.info("Verifying capture on interface %s" %
-                                     dst_if.name)
-                    self.verify_capture(dst_if, capture,
-                                        traffic_type, ip_type, etype)
+                    self.logger.info("Verifying capture on interface %s" % dst_if.name)
+                    self.verify_capture(dst_if, capture, traffic_type, ip_type, etype)
 
 
-    def run_verify_negat_test(self, traffic_type=0, ip_type=0, proto=-1,
-                              ports=0, frags=False, etype=-1):
+    def run_verify_negat_test(
+        self, traffic_type=0, ip_type=0, proto=-1, ports=0, frags=False, etype=-1
+    ):
         # Test
         pkts_cnt = 0
         self.reset_packet_infos()
         for i in self.pg_interfaces:
             if self.flows.__contains__(i):
         # Test
         pkts_cnt = 0
         self.reset_packet_infos()
         for i in self.pg_interfaces:
             if self.flows.__contains__(i):
-                pkts = self.create_stream(i, self.pg_if_packet_sizes,
-                                          traffic_type, ip_type, proto, ports,
-                                          frags, True, etype)
+                pkts = self.create_stream(
+                    i,
+                    self.pg_if_packet_sizes,
+                    traffic_type,
+                    ip_type,
+                    proto,
+                    ports,
+                    frags,
+                    True,
+                    etype,
+                )
                 if len(pkts) > 0:
                     i.add_stream(pkts)
                     pkts_cnt += len(pkts)
                 if len(pkts) > 0:
                     i.add_stream(pkts)
                     pkts_cnt += len(pkts)
@@ -471,24 +520,22 @@ class TestACLplugin(VppTestCase):
         for src_if in self.pg_interfaces:
             if self.flows.__contains__(src_if):
                 for dst_if in self.flows[src_if]:
         for src_if in self.pg_interfaces:
             if self.flows.__contains__(src_if):
                 for dst_if in self.flows[src_if]:
-                    self.logger.info("Verifying capture on interface %s" %
-                                     dst_if.name)
+                    self.logger.info("Verifying capture on interface %s" % dst_if.name)
                     capture = dst_if.get_capture(0)
                     self.assertEqual(len(capture), 0)
 
     def test_0000_warmup_test(self):
                     capture = dst_if.get_capture(0)
                     self.assertEqual(len(capture), 0)
 
     def test_0000_warmup_test(self):
-        """ ACL plugin version check; learn MACs
-        """
+        """ACL plugin version check; learn MACs"""
         reply = self.vapi.papi.acl_plugin_get_version()
         self.assertEqual(reply.major, 1)
         reply = self.vapi.papi.acl_plugin_get_version()
         self.assertEqual(reply.major, 1)
-        self.logger.info("Working with ACL plugin version: %d.%d" % (
-            reply.major, reply.minor))
+        self.logger.info(
+            "Working with ACL plugin version: %d.%d" % (reply.major, reply.minor)
+        )
         # minor version changes are non breaking
         # self.assertEqual(reply.minor, 0)
 
     def test_0001_acl_create(self):
         # minor version changes are non breaking
         # self.assertEqual(reply.minor, 0)
 
     def test_0001_acl_create(self):
-        """ ACL create/delete test
-        """
+        """ACL create/delete test"""
 
         self.logger.info("ACLP_TEST_START_0001")
         # Create a permit-1234 ACL
 
         self.logger.info("ACLP_TEST_START_0001")
         # Create a permit-1234 ACL
@@ -510,12 +557,13 @@ class TestACLplugin(VppTestCase):
         for i_rule in range(0, len(r) - 1):
             encoded_rule = r[i_rule].encode()
             for rule_key in encoded_rule:
         for i_rule in range(0, len(r) - 1):
             encoded_rule = r[i_rule].encode()
             for rule_key in encoded_rule:
-                self.assertEqual(rr[0].r[i_rule][rule_key],
-                                 encoded_rule[rule_key])
+                self.assertEqual(rr[0].r[i_rule][rule_key], encoded_rule[rule_key])
 
         # Create a deny-1234 ACL
 
         # Create a deny-1234 ACL
-        r_deny = [AclRule(is_permit=0, proto=17, ports=1234, sport_to=1235),
-                  AclRule(is_permit=1, proto=17, ports=0)]
+        r_deny = [
+            AclRule(is_permit=0, proto=17, ports=1234, sport_to=1235),
+            AclRule(is_permit=1, proto=17, ports=0),
+        ]
         second_acl = VppAcl(self, rules=r_deny, tag="deny 1234;permit all")
         second_acl.add_vpp_config()
         self.assertTrue(second_acl.query_vpp_config())
         second_acl = VppAcl(self, rules=r_deny, tag="deny 1234;permit all")
         second_acl.add_vpp_config()
         self.assertTrue(second_acl.query_vpp_config())
@@ -528,8 +576,8 @@ class TestACLplugin(VppTestCase):
 
         # apply an ACL on an interface inbound, try to delete ACL, must fail
         acl_if_list = VppAclInterface(
 
         # apply an ACL on an interface inbound, try to delete ACL, must fail
         acl_if_list = VppAclInterface(
-            self, sw_if_index=self.pg0.sw_if_index, n_input=1,
-            acls=[first_acl])
+            self, sw_if_index=self.pg0.sw_if_index, n_input=1, acls=[first_acl]
+        )
         acl_if_list.add_vpp_config()
         first_acl.remove_vpp_config(expect_error=True)
         # Unapply an ACL and then try to delete it - must be ok
         acl_if_list.add_vpp_config()
         first_acl.remove_vpp_config(expect_error=True)
         # Unapply an ACL and then try to delete it - must be ok
@@ -538,8 +586,8 @@ class TestACLplugin(VppTestCase):
 
         # apply an ACL on an interface inbound, try to delete ACL, must fail
         acl_if_list = VppAclInterface(
 
         # apply an ACL on an interface inbound, try to delete ACL, must fail
         acl_if_list = VppAclInterface(
-            self, sw_if_index=self.pg0.sw_if_index, n_input=0,
-            acls=[second_acl])
+            self, sw_if_index=self.pg0.sw_if_index, n_input=0, acls=[second_acl]
+        )
         acl_if_list.add_vpp_config()
         second_acl.remove_vpp_config(expect_error=True)
         # Unapply an ACL and then try to delete it - must be ok
         acl_if_list.add_vpp_config()
         second_acl.remove_vpp_config(expect_error=True)
         # Unapply an ACL and then try to delete it - must be ok
@@ -548,22 +596,23 @@ class TestACLplugin(VppTestCase):
 
         # try to apply a nonexistent ACL - must fail
         acl_if_list = VppAclInterface(
 
         # try to apply a nonexistent ACL - must fail
         acl_if_list = VppAclInterface(
-            self, sw_if_index=self.pg0.sw_if_index, n_input=0,
-            acls=[invalid_acl])
+            self, sw_if_index=self.pg0.sw_if_index, n_input=0, acls=[invalid_acl]
+        )
         acl_if_list.add_vpp_config(expect_error=True)
 
         self.logger.info("ACLP_TEST_FINISH_0001")
 
     def test_0002_acl_permit_apply(self):
         acl_if_list.add_vpp_config(expect_error=True)
 
         self.logger.info("ACLP_TEST_FINISH_0001")
 
     def test_0002_acl_permit_apply(self):
-        """ permit ACL apply test
-        """
+        """permit ACL apply test"""
         self.logger.info("ACLP_TEST_START_0002")
 
         rules = []
         self.logger.info("ACLP_TEST_START_0002")
 
         rules = []
-        rules.append(self.create_rule(self.IPV4, self.PERMIT,
-                                      0, self.proto[self.IP][self.UDP]))
-        rules.append(self.create_rule(self.IPV4, self.PERMIT,
-                                      0, self.proto[self.IP][self.TCP]))
+        rules.append(
+            self.create_rule(self.IPV4, self.PERMIT, 0, self.proto[self.IP][self.UDP])
+        )
+        rules.append(
+            self.create_rule(self.IPV4, self.PERMIT, 0, self.proto[self.IP][self.TCP])
+        )
 
         # Apply rules
         acl_idx = self.apply_rules(rules, "permit per-flow")
 
         # Apply rules
         acl_idx = self.apply_rules(rules, "permit per-flow")
@@ -574,14 +623,14 @@ class TestACLplugin(VppTestCase):
         # Traffic should still pass
         self.run_verify_test(self.IP, self.IPV4, -1)
 
         # Traffic should still pass
         self.run_verify_test(self.IP, self.IPV4, -1)
 
-        matches = self.statistics.get_counter('/acl/%d/matches' % acl_idx)
+        matches = self.statistics.get_counter("/acl/%d/matches" % acl_idx)
         self.logger.info("stat segment counters: %s" % repr(matches))
         cli = "show acl-plugin acl"
         self.logger.info(self.vapi.ppcli(cli))
         cli = "show acl-plugin tables"
         self.logger.info(self.vapi.ppcli(cli))
 
         self.logger.info("stat segment counters: %s" % repr(matches))
         cli = "show acl-plugin acl"
         self.logger.info(self.vapi.ppcli(cli))
         cli = "show acl-plugin tables"
         self.logger.info(self.vapi.ppcli(cli))
 
-        total_hits = matches[0][0]['packets'] + matches[0][1]['packets']
+        total_hits = matches[0][0]["packets"] + matches[0][1]["packets"]
         self.assertEqual(total_hits, 64)
 
         # disable counters
         self.assertEqual(total_hits, 64)
 
         # disable counters
@@ -590,17 +639,17 @@ class TestACLplugin(VppTestCase):
         self.logger.info("ACLP_TEST_FINISH_0002")
 
     def test_0003_acl_deny_apply(self):
         self.logger.info("ACLP_TEST_FINISH_0002")
 
     def test_0003_acl_deny_apply(self):
-        """ deny ACL apply test
-        """
+        """deny ACL apply test"""
         self.logger.info("ACLP_TEST_START_0003")
         # Add a deny-flows ACL
         rules = []
         self.logger.info("ACLP_TEST_START_0003")
         # Add a deny-flows ACL
         rules = []
-        rules.append(self.create_rule(
-            self.IPV4, self.DENY, self.PORTS_ALL,
-            self.proto[self.IP][self.UDP]))
+        rules.append(
+            self.create_rule(
+                self.IPV4, self.DENY, self.PORTS_ALL, self.proto[self.IP][self.UDP]
+            )
+        )
         # Permit ip any any in the end
         # Permit ip any any in the end
-        rules.append(self.create_rule(self.IPV4, self.PERMIT,
-                                      self.PORTS_ALL, 0))
+        rules.append(self.create_rule(self.IPV4, self.PERMIT, self.PORTS_ALL, 0))
 
         # Apply rules
         acl_idx = self.apply_rules(rules, "deny per-flow;permit all")
 
         # Apply rules
         acl_idx = self.apply_rules(rules, "deny per-flow;permit all")
@@ -609,30 +658,34 @@ class TestACLplugin(VppTestCase):
         reply = self.vapi.papi.acl_stats_intf_counters_enable(enable=1)
 
         # Traffic should not pass
         reply = self.vapi.papi.acl_stats_intf_counters_enable(enable=1)
 
         # Traffic should not pass
-        self.run_verify_negat_test(self.IP, self.IPV4,
-                                   self.proto[self.IP][self.UDP])
+        self.run_verify_negat_test(self.IP, self.IPV4, self.proto[self.IP][self.UDP])
 
 
-        matches = self.statistics.get_counter('/acl/%d/matches' % acl_idx)
+        matches = self.statistics.get_counter("/acl/%d/matches" % acl_idx)
         self.logger.info("stat segment counters: %s" % repr(matches))
         cli = "show acl-plugin acl"
         self.logger.info(self.vapi.ppcli(cli))
         cli = "show acl-plugin tables"
         self.logger.info(self.vapi.ppcli(cli))
         self.logger.info("stat segment counters: %s" % repr(matches))
         cli = "show acl-plugin acl"
         self.logger.info(self.vapi.ppcli(cli))
         cli = "show acl-plugin tables"
         self.logger.info(self.vapi.ppcli(cli))
-        self.assertEqual(matches[0][0]['packets'], 64)
+        self.assertEqual(matches[0][0]["packets"], 64)
         # disable counters
         reply = self.vapi.papi.acl_stats_intf_counters_enable(enable=0)
         self.logger.info("ACLP_TEST_FINISH_0003")
         # self.assertEqual(, 0)
 
     def test_0004_vpp624_permit_icmpv4(self):
         # disable counters
         reply = self.vapi.papi.acl_stats_intf_counters_enable(enable=0)
         self.logger.info("ACLP_TEST_FINISH_0003")
         # self.assertEqual(, 0)
 
     def test_0004_vpp624_permit_icmpv4(self):
-        """ VPP_624 permit ICMPv4
-        """
+        """VPP_624 permit ICMPv4"""
         self.logger.info("ACLP_TEST_START_0004")
 
         # Add an ACL
         rules = []
         self.logger.info("ACLP_TEST_START_0004")
 
         # Add an ACL
         rules = []
-        rules.append(self.create_rule(self.IPV4, self.PERMIT, self.PORTS_RANGE,
-                                      self.proto[self.ICMP][self.ICMPv4]))
+        rules.append(
+            self.create_rule(
+                self.IPV4,
+                self.PERMIT,
+                self.PORTS_RANGE,
+                self.proto[self.ICMP][self.ICMPv4],
+            )
+        )
         # deny ip any any in the end
         rules.append(self.create_rule(self.IPV4, self.DENY, self.PORTS_ALL, 0))
 
         # deny ip any any in the end
         rules.append(self.create_rule(self.IPV4, self.DENY, self.PORTS_ALL, 0))
 
@@ -640,20 +693,24 @@ class TestACLplugin(VppTestCase):
         self.apply_rules(rules, "permit icmpv4")
 
         # Traffic should still pass
         self.apply_rules(rules, "permit icmpv4")
 
         # Traffic should still pass
-        self.run_verify_test(self.ICMP, self.IPV4,
-                             self.proto[self.ICMP][self.ICMPv4])
+        self.run_verify_test(self.ICMP, self.IPV4, self.proto[self.ICMP][self.ICMPv4])
 
         self.logger.info("ACLP_TEST_FINISH_0004")
 
     def test_0005_vpp624_permit_icmpv6(self):
 
         self.logger.info("ACLP_TEST_FINISH_0004")
 
     def test_0005_vpp624_permit_icmpv6(self):
-        """ VPP_624 permit ICMPv6
-        """
+        """VPP_624 permit ICMPv6"""
         self.logger.info("ACLP_TEST_START_0005")
 
         # Add an ACL
         rules = []
         self.logger.info("ACLP_TEST_START_0005")
 
         # Add an ACL
         rules = []
-        rules.append(self.create_rule(self.IPV6, self.PERMIT, self.PORTS_RANGE,
-                                      self.proto[self.ICMP][self.ICMPv6]))
+        rules.append(
+            self.create_rule(
+                self.IPV6,
+                self.PERMIT,
+                self.PORTS_RANGE,
+                self.proto[self.ICMP][self.ICMPv6],
+            )
+        )
         # deny ip any any in the end
         rules.append(self.create_rule(self.IPV6, self.DENY, self.PORTS_ALL, 0))
 
         # deny ip any any in the end
         rules.append(self.create_rule(self.IPV6, self.DENY, self.PORTS_ALL, 0))
 
@@ -661,22 +718,25 @@ class TestACLplugin(VppTestCase):
         self.apply_rules(rules, "permit icmpv6")
 
         # Traffic should still pass
         self.apply_rules(rules, "permit icmpv6")
 
         # Traffic should still pass
-        self.run_verify_test(self.ICMP, self.IPV6,
-                             self.proto[self.ICMP][self.ICMPv6])
+        self.run_verify_test(self.ICMP, self.IPV6, self.proto[self.ICMP][self.ICMPv6])
 
         self.logger.info("ACLP_TEST_FINISH_0005")
 
     def test_0006_vpp624_deny_icmpv4(self):
 
         self.logger.info("ACLP_TEST_FINISH_0005")
 
     def test_0006_vpp624_deny_icmpv4(self):
-        """ VPP_624 deny ICMPv4
-        """
+        """VPP_624 deny ICMPv4"""
         self.logger.info("ACLP_TEST_START_0006")
         # Add an ACL
         rules = []
         self.logger.info("ACLP_TEST_START_0006")
         # Add an ACL
         rules = []
-        rules.append(self.create_rule(self.IPV4, self.DENY, self.PORTS_RANGE,
-                                      self.proto[self.ICMP][self.ICMPv4]))
+        rules.append(
+            self.create_rule(
+                self.IPV4,
+                self.DENY,
+                self.PORTS_RANGE,
+                self.proto[self.ICMP][self.ICMPv4],
+            )
+        )
         # permit ip any any in the end
         # permit ip any any in the end
-        rules.append(self.create_rule(self.IPV4, self.PERMIT,
-                                      self.PORTS_ALL, 0))
+        rules.append(self.create_rule(self.IPV4, self.PERMIT, self.PORTS_ALL, 0))
 
         # Apply rules
         self.apply_rules(rules, "deny icmpv4")
 
         # Apply rules
         self.apply_rules(rules, "deny icmpv4")
@@ -687,16 +747,20 @@ class TestACLplugin(VppTestCase):
         self.logger.info("ACLP_TEST_FINISH_0006")
 
     def test_0007_vpp624_deny_icmpv6(self):
         self.logger.info("ACLP_TEST_FINISH_0006")
 
     def test_0007_vpp624_deny_icmpv6(self):
-        """ VPP_624 deny ICMPv6
-        """
+        """VPP_624 deny ICMPv6"""
         self.logger.info("ACLP_TEST_START_0007")
         # Add an ACL
         rules = []
         self.logger.info("ACLP_TEST_START_0007")
         # Add an ACL
         rules = []
-        rules.append(self.create_rule(self.IPV6, self.DENY, self.PORTS_RANGE,
-                                      self.proto[self.ICMP][self.ICMPv6]))
+        rules.append(
+            self.create_rule(
+                self.IPV6,
+                self.DENY,
+                self.PORTS_RANGE,
+                self.proto[self.ICMP][self.ICMPv6],
+            )
+        )
         # deny ip any any in the end
         # deny ip any any in the end
-        rules.append(self.create_rule(self.IPV6, self.PERMIT,
-                                      self.PORTS_ALL, 0))
+        rules.append(self.create_rule(self.IPV6, self.PERMIT, self.PORTS_ALL, 0))
 
         # Apply rules
         self.apply_rules(rules, "deny icmpv6")
 
         # Apply rules
         self.apply_rules(rules, "deny icmpv6")
@@ -707,14 +771,16 @@ class TestACLplugin(VppTestCase):
         self.logger.info("ACLP_TEST_FINISH_0007")
 
     def test_0008_tcp_permit_v4(self):
         self.logger.info("ACLP_TEST_FINISH_0007")
 
     def test_0008_tcp_permit_v4(self):
-        """ permit TCPv4
-        """
+        """permit TCPv4"""
         self.logger.info("ACLP_TEST_START_0008")
 
         # Add an ACL
         rules = []
         self.logger.info("ACLP_TEST_START_0008")
 
         # Add an ACL
         rules = []
-        rules.append(self.create_rule(self.IPV4, self.PERMIT, self.PORTS_RANGE,
-                                      self.proto[self.IP][self.TCP]))
+        rules.append(
+            self.create_rule(
+                self.IPV4, self.PERMIT, self.PORTS_RANGE, self.proto[self.IP][self.TCP]
+            )
+        )
         # deny ip any any in the end
         rules.append(self.create_rule(self.IPV4, self.DENY, self.PORTS_ALL, 0))
 
         # deny ip any any in the end
         rules.append(self.create_rule(self.IPV4, self.DENY, self.PORTS_ALL, 0))
 
@@ -727,14 +793,16 @@ class TestACLplugin(VppTestCase):
         self.logger.info("ACLP_TEST_FINISH_0008")
 
     def test_0009_tcp_permit_v6(self):
         self.logger.info("ACLP_TEST_FINISH_0008")
 
     def test_0009_tcp_permit_v6(self):
-        """ permit TCPv6
-        """
+        """permit TCPv6"""
         self.logger.info("ACLP_TEST_START_0009")
 
         # Add an ACL
         rules = []
         self.logger.info("ACLP_TEST_START_0009")
 
         # Add an ACL
         rules = []
-        rules.append(self.create_rule(self.IPV6, self.PERMIT, self.PORTS_RANGE,
-                                      self.proto[self.IP][self.TCP]))
+        rules.append(
+            self.create_rule(
+                self.IPV6, self.PERMIT, self.PORTS_RANGE, self.proto[self.IP][self.TCP]
+            )
+        )
         # deny ip any any in the end
         rules.append(self.create_rule(self.IPV6, self.DENY, self.PORTS_ALL, 0))
 
         # deny ip any any in the end
         rules.append(self.create_rule(self.IPV6, self.DENY, self.PORTS_ALL, 0))
 
@@ -747,14 +815,16 @@ class TestACLplugin(VppTestCase):
         self.logger.info("ACLP_TEST_FINISH_0008")
 
     def test_0010_udp_permit_v4(self):
         self.logger.info("ACLP_TEST_FINISH_0008")
 
     def test_0010_udp_permit_v4(self):
-        """ permit UDPv4
-        """
+        """permit UDPv4"""
         self.logger.info("ACLP_TEST_START_0010")
 
         # Add an ACL
         rules = []
         self.logger.info("ACLP_TEST_START_0010")
 
         # Add an ACL
         rules = []
-        rules.append(self.create_rule(self.IPV4, self.PERMIT, self.PORTS_RANGE,
-                                      self.proto[self.IP][self.UDP]))
+        rules.append(
+            self.create_rule(
+                self.IPV4, self.PERMIT, self.PORTS_RANGE, self.proto[self.IP][self.UDP]
+            )
+        )
         # deny ip any any in the end
         rules.append(self.create_rule(self.IPV4, self.DENY, self.PORTS_ALL, 0))
 
         # deny ip any any in the end
         rules.append(self.create_rule(self.IPV4, self.DENY, self.PORTS_ALL, 0))
 
@@ -767,14 +837,16 @@ class TestACLplugin(VppTestCase):
         self.logger.info("ACLP_TEST_FINISH_0010")
 
     def test_0011_udp_permit_v6(self):
         self.logger.info("ACLP_TEST_FINISH_0010")
 
     def test_0011_udp_permit_v6(self):
-        """ permit UDPv6
-        """
+        """permit UDPv6"""
         self.logger.info("ACLP_TEST_START_0011")
 
         # Add an ACL
         rules = []
         self.logger.info("ACLP_TEST_START_0011")
 
         # Add an ACL
         rules = []
-        rules.append(self.create_rule(self.IPV6, self.PERMIT, self.PORTS_RANGE,
-                                      self.proto[self.IP][self.UDP]))
+        rules.append(
+            self.create_rule(
+                self.IPV6, self.PERMIT, self.PORTS_RANGE, self.proto[self.IP][self.UDP]
+            )
+        )
         # deny ip any any in the end
         rules.append(self.create_rule(self.IPV6, self.DENY, self.PORTS_ALL, 0))
 
         # deny ip any any in the end
         rules.append(self.create_rule(self.IPV6, self.DENY, self.PORTS_ALL, 0))
 
@@ -787,81 +859,89 @@ class TestACLplugin(VppTestCase):
         self.logger.info("ACLP_TEST_FINISH_0011")
 
     def test_0012_tcp_deny(self):
         self.logger.info("ACLP_TEST_FINISH_0011")
 
     def test_0012_tcp_deny(self):
-        """ deny TCPv4/v6
-        """
+        """deny TCPv4/v6"""
         self.logger.info("ACLP_TEST_START_0012")
 
         # Add an ACL
         rules = []
         self.logger.info("ACLP_TEST_START_0012")
 
         # Add an ACL
         rules = []
-        rules.append(self.create_rule(self.IPV4, self.DENY, self.PORTS_RANGE,
-                                      self.proto[self.IP][self.TCP]))
-        rules.append(self.create_rule(self.IPV6, self.DENY, self.PORTS_RANGE,
-                                      self.proto[self.IP][self.TCP]))
+        rules.append(
+            self.create_rule(
+                self.IPV4, self.DENY, self.PORTS_RANGE, self.proto[self.IP][self.TCP]
+            )
+        )
+        rules.append(
+            self.create_rule(
+                self.IPV6, self.DENY, self.PORTS_RANGE, self.proto[self.IP][self.TCP]
+            )
+        )
         # permit ip any any in the end
         # permit ip any any in the end
-        rules.append(self.create_rule(self.IPV4, self.PERMIT,
-                                      self.PORTS_ALL, 0))
-        rules.append(self.create_rule(self.IPV6, self.PERMIT,
-                                      self.PORTS_ALL, 0))
+        rules.append(self.create_rule(self.IPV4, self.PERMIT, self.PORTS_ALL, 0))
+        rules.append(self.create_rule(self.IPV6, self.PERMIT, self.PORTS_ALL, 0))
 
         # Apply rules
         self.apply_rules(rules, "deny ip4/ip6 tcp")
 
         # Traffic should not pass
 
         # Apply rules
         self.apply_rules(rules, "deny ip4/ip6 tcp")
 
         # Traffic should not pass
-        self.run_verify_negat_test(self.IP, self.IPRANDOM,
-                                   self.proto[self.IP][self.TCP])
+        self.run_verify_negat_test(
+            self.IP, self.IPRANDOM, self.proto[self.IP][self.TCP]
+        )
 
         self.logger.info("ACLP_TEST_FINISH_0012")
 
     def test_0013_udp_deny(self):
 
         self.logger.info("ACLP_TEST_FINISH_0012")
 
     def test_0013_udp_deny(self):
-        """ deny UDPv4/v6
-        """
+        """deny UDPv4/v6"""
         self.logger.info("ACLP_TEST_START_0013")
 
         # Add an ACL
         rules = []
         self.logger.info("ACLP_TEST_START_0013")
 
         # Add an ACL
         rules = []
-        rules.append(self.create_rule(self.IPV4, self.DENY, self.PORTS_RANGE,
-                                      self.proto[self.IP][self.UDP]))
-        rules.append(self.create_rule(self.IPV6, self.DENY, self.PORTS_RANGE,
-                                      self.proto[self.IP][self.UDP]))
+        rules.append(
+            self.create_rule(
+                self.IPV4, self.DENY, self.PORTS_RANGE, self.proto[self.IP][self.UDP]
+            )
+        )
+        rules.append(
+            self.create_rule(
+                self.IPV6, self.DENY, self.PORTS_RANGE, self.proto[self.IP][self.UDP]
+            )
+        )
         # permit ip any any in the end
         # permit ip any any in the end
-        rules.append(self.create_rule(self.IPV4, self.PERMIT,
-                                      self.PORTS_ALL, 0))
-        rules.append(self.create_rule(self.IPV6, self.PERMIT,
-                                      self.PORTS_ALL, 0))
+        rules.append(self.create_rule(self.IPV4, self.PERMIT, self.PORTS_ALL, 0))
+        rules.append(self.create_rule(self.IPV6, self.PERMIT, self.PORTS_ALL, 0))
 
         # Apply rules
         self.apply_rules(rules, "deny ip4/ip6 udp")
 
         # Traffic should not pass
 
         # Apply rules
         self.apply_rules(rules, "deny ip4/ip6 udp")
 
         # Traffic should not pass
-        self.run_verify_negat_test(self.IP, self.IPRANDOM,
-                                   self.proto[self.IP][self.UDP])
+        self.run_verify_negat_test(
+            self.IP, self.IPRANDOM, self.proto[self.IP][self.UDP]
+        )
 
         self.logger.info("ACLP_TEST_FINISH_0013")
 
     def test_0014_acl_dump(self):
 
         self.logger.info("ACLP_TEST_FINISH_0013")
 
     def test_0014_acl_dump(self):
-        """ verify add/dump acls
-        """
+        """verify add/dump acls"""
         self.logger.info("ACLP_TEST_START_0014")
 
         self.logger.info("ACLP_TEST_START_0014")
 
-        r = [[self.IPV4, self.PERMIT, 1234, self.proto[self.IP][self.TCP]],
-             [self.IPV4, self.PERMIT, 2345, self.proto[self.IP][self.UDP]],
-             [self.IPV4, self.PERMIT, 0, self.proto[self.IP][self.TCP]],
-             [self.IPV4, self.PERMIT, 0, self.proto[self.IP][self.UDP]],
-             [self.IPV4, self.PERMIT, 5, self.proto[self.ICMP][self.ICMPv4]],
-             [self.IPV6, self.PERMIT, 4321, self.proto[self.IP][self.TCP]],
-             [self.IPV6, self.PERMIT, 5432, self.proto[self.IP][self.UDP]],
-             [self.IPV6, self.PERMIT, 0, self.proto[self.IP][self.TCP]],
-             [self.IPV6, self.PERMIT, 0, self.proto[self.IP][self.UDP]],
-             [self.IPV6, self.PERMIT, 6, self.proto[self.ICMP][self.ICMPv6]],
-             [self.IPV4, self.DENY, self.PORTS_ALL, 0],
-             [self.IPV4, self.DENY, 1234, self.proto[self.IP][self.TCP]],
-             [self.IPV4, self.DENY, 2345, self.proto[self.IP][self.UDP]],
-             [self.IPV4, self.DENY, 5, self.proto[self.ICMP][self.ICMPv4]],
-             [self.IPV6, self.DENY, 4321, self.proto[self.IP][self.TCP]],
-             [self.IPV6, self.DENY, 5432, self.proto[self.IP][self.UDP]],
-             [self.IPV6, self.DENY, 6, self.proto[self.ICMP][self.ICMPv6]],
-             [self.IPV6, self.DENY, self.PORTS_ALL, 0]
-             ]
+        r = [
+            [self.IPV4, self.PERMIT, 1234, self.proto[self.IP][self.TCP]],
+            [self.IPV4, self.PERMIT, 2345, self.proto[self.IP][self.UDP]],
+            [self.IPV4, self.PERMIT, 0, self.proto[self.IP][self.TCP]],
+            [self.IPV4, self.PERMIT, 0, self.proto[self.IP][self.UDP]],
+            [self.IPV4, self.PERMIT, 5, self.proto[self.ICMP][self.ICMPv4]],
+            [self.IPV6, self.PERMIT, 4321, self.proto[self.IP][self.TCP]],
+            [self.IPV6, self.PERMIT, 5432, self.proto[self.IP][self.UDP]],
+            [self.IPV6, self.PERMIT, 0, self.proto[self.IP][self.TCP]],
+            [self.IPV6, self.PERMIT, 0, self.proto[self.IP][self.UDP]],
+            [self.IPV6, self.PERMIT, 6, self.proto[self.ICMP][self.ICMPv6]],
+            [self.IPV4, self.DENY, self.PORTS_ALL, 0],
+            [self.IPV4, self.DENY, 1234, self.proto[self.IP][self.TCP]],
+            [self.IPV4, self.DENY, 2345, self.proto[self.IP][self.UDP]],
+            [self.IPV4, self.DENY, 5, self.proto[self.ICMP][self.ICMPv4]],
+            [self.IPV6, self.DENY, 4321, self.proto[self.IP][self.TCP]],
+            [self.IPV6, self.DENY, 5432, self.proto[self.IP][self.UDP]],
+            [self.IPV6, self.DENY, 6, self.proto[self.ICMP][self.ICMPv6]],
+            [self.IPV6, self.DENY, self.PORTS_ALL, 0],
+        ]
 
         # Add and verify new ACLs
         rules = []
 
         # Add and verify new ACLs
         rules = []
@@ -886,37 +966,47 @@ class TestACLplugin(VppTestCase):
                         self.assertEqual(dr.srcport_or_icmptype_last, 65535)
                     else:
                         if dr.proto == self.proto[self.IP][self.TCP]:
                         self.assertEqual(dr.srcport_or_icmptype_last, 65535)
                     else:
                         if dr.proto == self.proto[self.IP][self.TCP]:
-                            self.assertGreater(dr.srcport_or_icmptype_first,
-                                               self.tcp_sport_from-1)
-                            self.assertLess(dr.srcport_or_icmptype_first,
-                                            self.tcp_sport_to+1)
-                            self.assertGreater(dr.dstport_or_icmpcode_last,
-                                               self.tcp_dport_from-1)
-                            self.assertLess(dr.dstport_or_icmpcode_last,
-                                            self.tcp_dport_to+1)
+                            self.assertGreater(
+                                dr.srcport_or_icmptype_first, self.tcp_sport_from - 1
+                            )
+                            self.assertLess(
+                                dr.srcport_or_icmptype_first, self.tcp_sport_to + 1
+                            )
+                            self.assertGreater(
+                                dr.dstport_or_icmpcode_last, self.tcp_dport_from - 1
+                            )
+                            self.assertLess(
+                                dr.dstport_or_icmpcode_last, self.tcp_dport_to + 1
+                            )
                         elif dr.proto == self.proto[self.IP][self.UDP]:
                         elif dr.proto == self.proto[self.IP][self.UDP]:
-                            self.assertGreater(dr.srcport_or_icmptype_first,
-                                               self.udp_sport_from-1)
-                            self.assertLess(dr.srcport_or_icmptype_first,
-                                            self.udp_sport_to+1)
-                            self.assertGreater(dr.dstport_or_icmpcode_last,
-                                               self.udp_dport_from-1)
-                            self.assertLess(dr.dstport_or_icmpcode_last,
-                                            self.udp_dport_to+1)
+                            self.assertGreater(
+                                dr.srcport_or_icmptype_first, self.udp_sport_from - 1
+                            )
+                            self.assertLess(
+                                dr.srcport_or_icmptype_first, self.udp_sport_to + 1
+                            )
+                            self.assertGreater(
+                                dr.dstport_or_icmpcode_last, self.udp_dport_from - 1
+                            )
+                            self.assertLess(
+                                dr.dstport_or_icmpcode_last, self.udp_dport_to + 1
+                            )
                 i += 1
 
         self.logger.info("ACLP_TEST_FINISH_0014")
 
     def test_0015_tcp_permit_port_v4(self):
                 i += 1
 
         self.logger.info("ACLP_TEST_FINISH_0014")
 
     def test_0015_tcp_permit_port_v4(self):
-        """ permit single TCPv4
-        """
+        """permit single TCPv4"""
         self.logger.info("ACLP_TEST_START_0015")
 
         port = random.randint(16384, 65535)
         # Add an ACL
         rules = []
         self.logger.info("ACLP_TEST_START_0015")
 
         port = random.randint(16384, 65535)
         # Add an ACL
         rules = []
-        rules.append(self.create_rule(self.IPV4, self.PERMIT, port,
-                                      self.proto[self.IP][self.TCP]))
+        rules.append(
+            self.create_rule(
+                self.IPV4, self.PERMIT, port, self.proto[self.IP][self.TCP]
+            )
+        )
         # deny ip any any in the end
         rules.append(self.create_rule(self.IPV4, self.DENY, self.PORTS_ALL, 0))
 
         # deny ip any any in the end
         rules.append(self.create_rule(self.IPV4, self.DENY, self.PORTS_ALL, 0))
 
@@ -924,21 +1014,22 @@ class TestACLplugin(VppTestCase):
         self.apply_rules(rules, "permit ip4 tcp %d" % port)
 
         # Traffic should still pass
         self.apply_rules(rules, "permit ip4 tcp %d" % port)
 
         # Traffic should still pass
-        self.run_verify_test(self.IP, self.IPV4,
-                             self.proto[self.IP][self.TCP], port)
+        self.run_verify_test(self.IP, self.IPV4, self.proto[self.IP][self.TCP], port)
 
         self.logger.info("ACLP_TEST_FINISH_0015")
 
     def test_0016_udp_permit_port_v4(self):
 
         self.logger.info("ACLP_TEST_FINISH_0015")
 
     def test_0016_udp_permit_port_v4(self):
-        """ permit single UDPv4
-        """
+        """permit single UDPv4"""
         self.logger.info("ACLP_TEST_START_0016")
 
         port = random.randint(16384, 65535)
         # Add an ACL
         rules = []
         self.logger.info("ACLP_TEST_START_0016")
 
         port = random.randint(16384, 65535)
         # Add an ACL
         rules = []
-        rules.append(self.create_rule(self.IPV4, self.PERMIT, port,
-                                      self.proto[self.IP][self.UDP]))
+        rules.append(
+            self.create_rule(
+                self.IPV4, self.PERMIT, port, self.proto[self.IP][self.UDP]
+            )
+        )
         # deny ip any any in the end
         rules.append(self.create_rule(self.IPV4, self.DENY, self.PORTS_ALL, 0))
 
         # deny ip any any in the end
         rules.append(self.create_rule(self.IPV4, self.DENY, self.PORTS_ALL, 0))
 
@@ -946,21 +1037,22 @@ class TestACLplugin(VppTestCase):
         self.apply_rules(rules, "permit ip4 tcp %d" % port)
 
         # Traffic should still pass
         self.apply_rules(rules, "permit ip4 tcp %d" % port)
 
         # Traffic should still pass
-        self.run_verify_test(self.IP, self.IPV4,
-                             self.proto[self.IP][self.UDP], port)
+        self.run_verify_test(self.IP, self.IPV4, self.proto[self.IP][self.UDP], port)
 
         self.logger.info("ACLP_TEST_FINISH_0016")
 
     def test_0017_tcp_permit_port_v6(self):
 
         self.logger.info("ACLP_TEST_FINISH_0016")
 
     def test_0017_tcp_permit_port_v6(self):
-        """ permit single TCPv6
-        """
+        """permit single TCPv6"""
         self.logger.info("ACLP_TEST_START_0017")
 
         port = random.randint(16384, 65535)
         # Add an ACL
         rules = []
         self.logger.info("ACLP_TEST_START_0017")
 
         port = random.randint(16384, 65535)
         # Add an ACL
         rules = []
-        rules.append(self.create_rule(self.IPV6, self.PERMIT, port,
-                                      self.proto[self.IP][self.TCP]))
+        rules.append(
+            self.create_rule(
+                self.IPV6, self.PERMIT, port, self.proto[self.IP][self.TCP]
+            )
+        )
         # deny ip any any in the end
         rules.append(self.create_rule(self.IPV6, self.DENY, self.PORTS_ALL, 0))
 
         # deny ip any any in the end
         rules.append(self.create_rule(self.IPV6, self.DENY, self.PORTS_ALL, 0))
 
@@ -968,90 +1060,89 @@ class TestACLplugin(VppTestCase):
         self.apply_rules(rules, "permit ip4 tcp %d" % port)
 
         # Traffic should still pass
         self.apply_rules(rules, "permit ip4 tcp %d" % port)
 
         # Traffic should still pass
-        self.run_verify_test(self.IP, self.IPV6,
-                             self.proto[self.IP][self.TCP], port)
+        self.run_verify_test(self.IP, self.IPV6, self.proto[self.IP][self.TCP], port)
 
         self.logger.info("ACLP_TEST_FINISH_0017")
 
     def test_0018_udp_permit_port_v6(self):
 
         self.logger.info("ACLP_TEST_FINISH_0017")
 
     def test_0018_udp_permit_port_v6(self):
-        """ permit single UDPv6
-        """
+        """permit single UDPv6"""
         self.logger.info("ACLP_TEST_START_0018")
 
         port = random.randint(16384, 65535)
         # Add an ACL
         rules = []
         self.logger.info("ACLP_TEST_START_0018")
 
         port = random.randint(16384, 65535)
         # Add an ACL
         rules = []
-        rules.append(self.create_rule(self.IPV6, self.PERMIT, port,
-                                      self.proto[self.IP][self.UDP]))
+        rules.append(
+            self.create_rule(
+                self.IPV6, self.PERMIT, port, self.proto[self.IP][self.UDP]
+            )
+        )
         # deny ip any any in the end
         # deny ip any any in the end
-        rules.append(self.create_rule(self.IPV6, self.DENY,
-                                      self.PORTS_ALL, 0))
+        rules.append(self.create_rule(self.IPV6, self.DENY, self.PORTS_ALL, 0))
 
         # Apply rules
         self.apply_rules(rules, "permit ip4 tcp %d" % port)
 
         # Traffic should still pass
 
         # Apply rules
         self.apply_rules(rules, "permit ip4 tcp %d" % port)
 
         # Traffic should still pass
-        self.run_verify_test(self.IP, self.IPV6,
-                             self.proto[self.IP][self.UDP], port)
+        self.run_verify_test(self.IP, self.IPV6, self.proto[self.IP][self.UDP], port)
 
         self.logger.info("ACLP_TEST_FINISH_0018")
 
     def test_0019_udp_deny_port(self):
 
         self.logger.info("ACLP_TEST_FINISH_0018")
 
     def test_0019_udp_deny_port(self):
-        """ deny single TCPv4/v6
-        """
+        """deny single TCPv4/v6"""
         self.logger.info("ACLP_TEST_START_0019")
 
         port = random.randint(16384, 65535)
         # Add an ACL
         rules = []
         self.logger.info("ACLP_TEST_START_0019")
 
         port = random.randint(16384, 65535)
         # Add an ACL
         rules = []
-        rules.append(self.create_rule(self.IPV4, self.DENY, port,
-                                      self.proto[self.IP][self.TCP]))
-        rules.append(self.create_rule(self.IPV6, self.DENY, port,
-                                      self.proto[self.IP][self.TCP]))
+        rules.append(
+            self.create_rule(self.IPV4, self.DENY, port, self.proto[self.IP][self.TCP])
+        )
+        rules.append(
+            self.create_rule(self.IPV6, self.DENY, port, self.proto[self.IP][self.TCP])
+        )
         # Permit ip any any in the end
         # Permit ip any any in the end
-        rules.append(self.create_rule(self.IPV4, self.PERMIT,
-                                      self.PORTS_ALL, 0))
-        rules.append(self.create_rule(self.IPV6, self.PERMIT,
-                                      self.PORTS_ALL, 0))
+        rules.append(self.create_rule(self.IPV4, self.PERMIT, self.PORTS_ALL, 0))
+        rules.append(self.create_rule(self.IPV6, self.PERMIT, self.PORTS_ALL, 0))
 
         # Apply rules
         self.apply_rules(rules, "deny ip4/ip6 udp %d" % port)
 
         # Traffic should not pass
 
         # Apply rules
         self.apply_rules(rules, "deny ip4/ip6 udp %d" % port)
 
         # Traffic should not pass
-        self.run_verify_negat_test(self.IP, self.IPRANDOM,
-                                   self.proto[self.IP][self.TCP], port)
+        self.run_verify_negat_test(
+            self.IP, self.IPRANDOM, self.proto[self.IP][self.TCP], port
+        )
 
         self.logger.info("ACLP_TEST_FINISH_0019")
 
     def test_0020_udp_deny_port(self):
 
         self.logger.info("ACLP_TEST_FINISH_0019")
 
     def test_0020_udp_deny_port(self):
-        """ deny single UDPv4/v6
-        """
+        """deny single UDPv4/v6"""
         self.logger.info("ACLP_TEST_START_0020")
 
         port = random.randint(16384, 65535)
         # Add an ACL
         rules = []
         self.logger.info("ACLP_TEST_START_0020")
 
         port = random.randint(16384, 65535)
         # Add an ACL
         rules = []
-        rules.append(self.create_rule(self.IPV4, self.DENY, port,
-                                      self.proto[self.IP][self.UDP]))
-        rules.append(self.create_rule(self.IPV6, self.DENY, port,
-                                      self.proto[self.IP][self.UDP]))
+        rules.append(
+            self.create_rule(self.IPV4, self.DENY, port, self.proto[self.IP][self.UDP])
+        )
+        rules.append(
+            self.create_rule(self.IPV6, self.DENY, port, self.proto[self.IP][self.UDP])
+        )
         # Permit ip any any in the end
         # Permit ip any any in the end
-        rules.append(self.create_rule(self.IPV4, self.PERMIT,
-                                      self.PORTS_ALL, 0))
-        rules.append(self.create_rule(self.IPV6, self.PERMIT,
-                                      self.PORTS_ALL, 0))
+        rules.append(self.create_rule(self.IPV4, self.PERMIT, self.PORTS_ALL, 0))
+        rules.append(self.create_rule(self.IPV6, self.PERMIT, self.PORTS_ALL, 0))
 
         # Apply rules
         self.apply_rules(rules, "deny ip4/ip6 udp %d" % port)
 
         # Traffic should not pass
 
         # Apply rules
         self.apply_rules(rules, "deny ip4/ip6 udp %d" % port)
 
         # Traffic should not pass
-        self.run_verify_negat_test(self.IP, self.IPRANDOM,
-                                   self.proto[self.IP][self.UDP], port)
+        self.run_verify_negat_test(
+            self.IP, self.IPRANDOM, self.proto[self.IP][self.UDP], port
+        )
 
         self.logger.info("ACLP_TEST_FINISH_0020")
 
     def test_0021_udp_deny_port_verify_fragment_deny(self):
 
         self.logger.info("ACLP_TEST_FINISH_0020")
 
     def test_0021_udp_deny_port_verify_fragment_deny(self):
-        """ deny single UDPv4/v6, permit ip any, verify non-initial fragment
+        """deny single UDPv4/v6, permit ip any, verify non-initial fragment
         blocked
         """
         self.logger.info("ACLP_TEST_START_0021")
         blocked
         """
         self.logger.info("ACLP_TEST_START_0021")
@@ -1059,37 +1150,40 @@ class TestACLplugin(VppTestCase):
         port = random.randint(16384, 65535)
         # Add an ACL
         rules = []
         port = random.randint(16384, 65535)
         # Add an ACL
         rules = []
-        rules.append(self.create_rule(self.IPV4, self.DENY, port,
-                                      self.proto[self.IP][self.UDP]))
-        rules.append(self.create_rule(self.IPV6, self.DENY, port,
-                                      self.proto[self.IP][self.UDP]))
+        rules.append(
+            self.create_rule(self.IPV4, self.DENY, port, self.proto[self.IP][self.UDP])
+        )
+        rules.append(
+            self.create_rule(self.IPV6, self.DENY, port, self.proto[self.IP][self.UDP])
+        )
         # deny ip any any in the end
         # deny ip any any in the end
-        rules.append(self.create_rule(self.IPV4, self.PERMIT,
-                                      self.PORTS_ALL, 0))
-        rules.append(self.create_rule(self.IPV6, self.PERMIT,
-                                      self.PORTS_ALL, 0))
+        rules.append(self.create_rule(self.IPV4, self.PERMIT, self.PORTS_ALL, 0))
+        rules.append(self.create_rule(self.IPV6, self.PERMIT, self.PORTS_ALL, 0))
 
         # Apply rules
         self.apply_rules(rules, "deny ip4/ip6 udp %d" % port)
 
         # Traffic should not pass
 
         # Apply rules
         self.apply_rules(rules, "deny ip4/ip6 udp %d" % port)
 
         # Traffic should not pass
-        self.run_verify_negat_test(self.IP, self.IPRANDOM,
-                                   self.proto[self.IP][self.UDP], port, True)
+        self.run_verify_negat_test(
+            self.IP, self.IPRANDOM, self.proto[self.IP][self.UDP], port, True
+        )
 
         self.logger.info("ACLP_TEST_FINISH_0021")
 
     def test_0022_zero_length_udp_ipv4(self):
 
         self.logger.info("ACLP_TEST_FINISH_0021")
 
     def test_0022_zero_length_udp_ipv4(self):
-        """ VPP-687 zero length udp ipv4 packet"""
+        """VPP-687 zero length udp ipv4 packet"""
         self.logger.info("ACLP_TEST_START_0022")
 
         port = random.randint(16384, 65535)
         # Add an ACL
         rules = []
         self.logger.info("ACLP_TEST_START_0022")
 
         port = random.randint(16384, 65535)
         # Add an ACL
         rules = []
-        rules.append(self.create_rule(self.IPV4, self.PERMIT, port,
-                                      self.proto[self.IP][self.UDP]))
-        # deny ip any any in the end
         rules.append(
         rules.append(
-            self.create_rule(self.IPV4, self.DENY, self.PORTS_ALL, 0))
+            self.create_rule(
+                self.IPV4, self.PERMIT, port, self.proto[self.IP][self.UDP]
+            )
+        )
+        # deny ip any any in the end
+        rules.append(self.create_rule(self.IPV4, self.DENY, self.PORTS_ALL, 0))
 
         # Apply rules
         self.apply_rules(rules, "permit empty udp ip4 %d" % port)
 
         # Apply rules
         self.apply_rules(rules, "permit empty udp ip4 %d" % port)
@@ -1097,10 +1191,16 @@ class TestACLplugin(VppTestCase):
         # Traffic should still pass
         # Create incoming packet streams for packet-generator interfaces
         pkts_cnt = 0
         # Traffic should still pass
         # Create incoming packet streams for packet-generator interfaces
         pkts_cnt = 0
-        pkts = self.create_stream(self.pg0, self.pg_if_packet_sizes,
-                                  self.IP, self.IPV4,
-                                  self.proto[self.IP][self.UDP], port,
-                                  False, False)
+        pkts = self.create_stream(
+            self.pg0,
+            self.pg_if_packet_sizes,
+            self.IP,
+            self.IPV4,
+            self.proto[self.IP][self.UDP],
+            port,
+            False,
+            False,
+        )
         if len(pkts) > 0:
             self.pg0.add_stream(pkts)
             pkts_cnt += len(pkts)
         if len(pkts) > 0:
             self.pg0.add_stream(pkts)
             pkts_cnt += len(pkts)
@@ -1114,14 +1214,17 @@ class TestACLplugin(VppTestCase):
         self.logger.info("ACLP_TEST_FINISH_0022")
 
     def test_0023_zero_length_udp_ipv6(self):
         self.logger.info("ACLP_TEST_FINISH_0022")
 
     def test_0023_zero_length_udp_ipv6(self):
-        """ VPP-687 zero length udp ipv6 packet"""
+        """VPP-687 zero length udp ipv6 packet"""
         self.logger.info("ACLP_TEST_START_0023")
 
         port = random.randint(16384, 65535)
         # Add an ACL
         rules = []
         self.logger.info("ACLP_TEST_START_0023")
 
         port = random.randint(16384, 65535)
         # Add an ACL
         rules = []
-        rules.append(self.create_rule(self.IPV6, self.PERMIT, port,
-                                      self.proto[self.IP][self.UDP]))
+        rules.append(
+            self.create_rule(
+                self.IPV6, self.PERMIT, port, self.proto[self.IP][self.UDP]
+            )
+        )
         # deny ip any any in the end
         rules.append(self.create_rule(self.IPV6, self.DENY, self.PORTS_ALL, 0))
 
         # deny ip any any in the end
         rules.append(self.create_rule(self.IPV6, self.DENY, self.PORTS_ALL, 0))
 
@@ -1131,10 +1234,16 @@ class TestACLplugin(VppTestCase):
         # Traffic should still pass
         # Create incoming packet streams for packet-generator interfaces
         pkts_cnt = 0
         # Traffic should still pass
         # Create incoming packet streams for packet-generator interfaces
         pkts_cnt = 0
-        pkts = self.create_stream(self.pg0, self.pg_if_packet_sizes,
-                                  self.IP, self.IPV6,
-                                  self.proto[self.IP][self.UDP], port,
-                                  False, False)
+        pkts = self.create_stream(
+            self.pg0,
+            self.pg_if_packet_sizes,
+            self.IP,
+            self.IPV6,
+            self.proto[self.IP][self.UDP],
+            port,
+            False,
+            False,
+        )
         if len(pkts) > 0:
             self.pg0.add_stream(pkts)
             pkts_cnt += len(pkts)
         if len(pkts) > 0:
             self.pg0.add_stream(pkts)
             pkts_cnt += len(pkts)
@@ -1149,16 +1258,21 @@ class TestACLplugin(VppTestCase):
         self.logger.info("ACLP_TEST_FINISH_0023")
 
     def test_0108_tcp_permit_v4(self):
         self.logger.info("ACLP_TEST_FINISH_0023")
 
     def test_0108_tcp_permit_v4(self):
-        """ permit TCPv4 + non-match range
-        """
+        """permit TCPv4 + non-match range"""
         self.logger.info("ACLP_TEST_START_0108")
 
         # Add an ACL
         rules = []
         self.logger.info("ACLP_TEST_START_0108")
 
         # Add an ACL
         rules = []
-        rules.append(self.create_rule(self.IPV4, self.DENY, self.PORTS_RANGE_2,
-                                      self.proto[self.IP][self.TCP]))
-        rules.append(self.create_rule(self.IPV4, self.PERMIT, self.PORTS_RANGE,
-                                      self.proto[self.IP][self.TCP]))
+        rules.append(
+            self.create_rule(
+                self.IPV4, self.DENY, self.PORTS_RANGE_2, self.proto[self.IP][self.TCP]
+            )
+        )
+        rules.append(
+            self.create_rule(
+                self.IPV4, self.PERMIT, self.PORTS_RANGE, self.proto[self.IP][self.TCP]
+            )
+        )
         # deny ip any any in the end
         rules.append(self.create_rule(self.IPV4, self.DENY, self.PORTS_ALL, 0))
 
         # deny ip any any in the end
         rules.append(self.create_rule(self.IPV4, self.DENY, self.PORTS_ALL, 0))
 
@@ -1171,16 +1285,21 @@ class TestACLplugin(VppTestCase):
         self.logger.info("ACLP_TEST_FINISH_0108")
 
     def test_0109_tcp_permit_v6(self):
         self.logger.info("ACLP_TEST_FINISH_0108")
 
     def test_0109_tcp_permit_v6(self):
-        """ permit TCPv6 + non-match range
-        """
+        """permit TCPv6 + non-match range"""
         self.logger.info("ACLP_TEST_START_0109")
 
         # Add an ACL
         rules = []
         self.logger.info("ACLP_TEST_START_0109")
 
         # Add an ACL
         rules = []
-        rules.append(self.create_rule(self.IPV6, self.DENY, self.PORTS_RANGE_2,
-                                      self.proto[self.IP][self.TCP]))
-        rules.append(self.create_rule(self.IPV6, self.PERMIT, self.PORTS_RANGE,
-                                      self.proto[self.IP][self.TCP]))
+        rules.append(
+            self.create_rule(
+                self.IPV6, self.DENY, self.PORTS_RANGE_2, self.proto[self.IP][self.TCP]
+            )
+        )
+        rules.append(
+            self.create_rule(
+                self.IPV6, self.PERMIT, self.PORTS_RANGE, self.proto[self.IP][self.TCP]
+            )
+        )
         # deny ip any any in the end
         rules.append(self.create_rule(self.IPV6, self.DENY, self.PORTS_ALL, 0))
 
         # deny ip any any in the end
         rules.append(self.create_rule(self.IPV6, self.DENY, self.PORTS_ALL, 0))
 
@@ -1193,16 +1312,21 @@ class TestACLplugin(VppTestCase):
         self.logger.info("ACLP_TEST_FINISH_0109")
 
     def test_0110_udp_permit_v4(self):
         self.logger.info("ACLP_TEST_FINISH_0109")
 
     def test_0110_udp_permit_v4(self):
-        """ permit UDPv4 + non-match range
-        """
+        """permit UDPv4 + non-match range"""
         self.logger.info("ACLP_TEST_START_0110")
 
         # Add an ACL
         rules = []
         self.logger.info("ACLP_TEST_START_0110")
 
         # Add an ACL
         rules = []
-        rules.append(self.create_rule(self.IPV4, self.DENY, self.PORTS_RANGE_2,
-                                      self.proto[self.IP][self.UDP]))
-        rules.append(self.create_rule(self.IPV4, self.PERMIT, self.PORTS_RANGE,
-                                      self.proto[self.IP][self.UDP]))
+        rules.append(
+            self.create_rule(
+                self.IPV4, self.DENY, self.PORTS_RANGE_2, self.proto[self.IP][self.UDP]
+            )
+        )
+        rules.append(
+            self.create_rule(
+                self.IPV4, self.PERMIT, self.PORTS_RANGE, self.proto[self.IP][self.UDP]
+            )
+        )
         # deny ip any any in the end
         rules.append(self.create_rule(self.IPV4, self.DENY, self.PORTS_ALL, 0))
 
         # deny ip any any in the end
         rules.append(self.create_rule(self.IPV4, self.DENY, self.PORTS_ALL, 0))
 
@@ -1215,16 +1339,21 @@ class TestACLplugin(VppTestCase):
         self.logger.info("ACLP_TEST_FINISH_0110")
 
     def test_0111_udp_permit_v6(self):
         self.logger.info("ACLP_TEST_FINISH_0110")
 
     def test_0111_udp_permit_v6(self):
-        """ permit UDPv6 + non-match range
-        """
+        """permit UDPv6 + non-match range"""
         self.logger.info("ACLP_TEST_START_0111")
 
         # Add an ACL
         rules = []
         self.logger.info("ACLP_TEST_START_0111")
 
         # Add an ACL
         rules = []
-        rules.append(self.create_rule(self.IPV6, self.DENY, self.PORTS_RANGE_2,
-                                      self.proto[self.IP][self.UDP]))
-        rules.append(self.create_rule(self.IPV6, self.PERMIT, self.PORTS_RANGE,
-                                      self.proto[self.IP][self.UDP]))
+        rules.append(
+            self.create_rule(
+                self.IPV6, self.DENY, self.PORTS_RANGE_2, self.proto[self.IP][self.UDP]
+            )
+        )
+        rules.append(
+            self.create_rule(
+                self.IPV6, self.PERMIT, self.PORTS_RANGE, self.proto[self.IP][self.UDP]
+            )
+        )
         # deny ip any any in the end
         rules.append(self.create_rule(self.IPV6, self.DENY, self.PORTS_ALL, 0))
 
         # deny ip any any in the end
         rules.append(self.create_rule(self.IPV6, self.DENY, self.PORTS_ALL, 0))
 
@@ -1237,80 +1366,113 @@ class TestACLplugin(VppTestCase):
         self.logger.info("ACLP_TEST_FINISH_0111")
 
     def test_0112_tcp_deny(self):
         self.logger.info("ACLP_TEST_FINISH_0111")
 
     def test_0112_tcp_deny(self):
-        """ deny TCPv4/v6 + non-match range
-        """
+        """deny TCPv4/v6 + non-match range"""
         self.logger.info("ACLP_TEST_START_0112")
 
         # Add an ACL
         rules = []
         self.logger.info("ACLP_TEST_START_0112")
 
         # Add an ACL
         rules = []
-        rules.append(self.create_rule(self.IPV4, self.PERMIT,
-                                      self.PORTS_RANGE_2,
-                                      self.proto[self.IP][self.TCP]))
-        rules.append(self.create_rule(self.IPV6, self.PERMIT,
-                                      self.PORTS_RANGE_2,
-                                      self.proto[self.IP][self.TCP]))
-        rules.append(self.create_rule(self.IPV4, self.DENY, self.PORTS_RANGE,
-                                      self.proto[self.IP][self.TCP]))
-        rules.append(self.create_rule(self.IPV6, self.DENY, self.PORTS_RANGE,
-                                      self.proto[self.IP][self.TCP]))
+        rules.append(
+            self.create_rule(
+                self.IPV4,
+                self.PERMIT,
+                self.PORTS_RANGE_2,
+                self.proto[self.IP][self.TCP],
+            )
+        )
+        rules.append(
+            self.create_rule(
+                self.IPV6,
+                self.PERMIT,
+                self.PORTS_RANGE_2,
+                self.proto[self.IP][self.TCP],
+            )
+        )
+        rules.append(
+            self.create_rule(
+                self.IPV4, self.DENY, self.PORTS_RANGE, self.proto[self.IP][self.TCP]
+            )
+        )
+        rules.append(
+            self.create_rule(
+                self.IPV6, self.DENY, self.PORTS_RANGE, self.proto[self.IP][self.TCP]
+            )
+        )
         # permit ip any any in the end
         # permit ip any any in the end
-        rules.append(self.create_rule(self.IPV4, self.PERMIT,
-                                      self.PORTS_ALL, 0))
-        rules.append(self.create_rule(self.IPV6, self.PERMIT,
-                                      self.PORTS_ALL, 0))
+        rules.append(self.create_rule(self.IPV4, self.PERMIT, self.PORTS_ALL, 0))
+        rules.append(self.create_rule(self.IPV6, self.PERMIT, self.PORTS_ALL, 0))
 
         # Apply rules
         self.apply_rules(rules, "deny ip4/ip6 tcp")
 
         # Traffic should not pass
 
         # Apply rules
         self.apply_rules(rules, "deny ip4/ip6 tcp")
 
         # Traffic should not pass
-        self.run_verify_negat_test(self.IP, self.IPRANDOM,
-                                   self.proto[self.IP][self.TCP])
+        self.run_verify_negat_test(
+            self.IP, self.IPRANDOM, self.proto[self.IP][self.TCP]
+        )
 
         self.logger.info("ACLP_TEST_FINISH_0112")
 
     def test_0113_udp_deny(self):
 
         self.logger.info("ACLP_TEST_FINISH_0112")
 
     def test_0113_udp_deny(self):
-        """ deny UDPv4/v6 + non-match range
-        """
+        """deny UDPv4/v6 + non-match range"""
         self.logger.info("ACLP_TEST_START_0113")
 
         # Add an ACL
         rules = []
         self.logger.info("ACLP_TEST_START_0113")
 
         # Add an ACL
         rules = []
-        rules.append(self.create_rule(self.IPV4, self.PERMIT,
-                                      self.PORTS_RANGE_2,
-                                      self.proto[self.IP][self.UDP]))
-        rules.append(self.create_rule(self.IPV6, self.PERMIT,
-                                      self.PORTS_RANGE_2,
-                                      self.proto[self.IP][self.UDP]))
-        rules.append(self.create_rule(self.IPV4, self.DENY, self.PORTS_RANGE,
-                                      self.proto[self.IP][self.UDP]))
-        rules.append(self.create_rule(self.IPV6, self.DENY, self.PORTS_RANGE,
-                                      self.proto[self.IP][self.UDP]))
+        rules.append(
+            self.create_rule(
+                self.IPV4,
+                self.PERMIT,
+                self.PORTS_RANGE_2,
+                self.proto[self.IP][self.UDP],
+            )
+        )
+        rules.append(
+            self.create_rule(
+                self.IPV6,
+                self.PERMIT,
+                self.PORTS_RANGE_2,
+                self.proto[self.IP][self.UDP],
+            )
+        )
+        rules.append(
+            self.create_rule(
+                self.IPV4, self.DENY, self.PORTS_RANGE, self.proto[self.IP][self.UDP]
+            )
+        )
+        rules.append(
+            self.create_rule(
+                self.IPV6, self.DENY, self.PORTS_RANGE, self.proto[self.IP][self.UDP]
+            )
+        )
         # permit ip any any in the end
         # permit ip any any in the end
-        rules.append(self.create_rule(self.IPV4, self.PERMIT,
-                                      self.PORTS_ALL, 0))
-        rules.append(self.create_rule(self.IPV6, self.PERMIT,
-                                      self.PORTS_ALL, 0))
+        rules.append(self.create_rule(self.IPV4, self.PERMIT, self.PORTS_ALL, 0))
+        rules.append(self.create_rule(self.IPV6, self.PERMIT, self.PORTS_ALL, 0))
 
         # Apply rules
         self.apply_rules(rules, "deny ip4/ip6 udp")
 
         # Traffic should not pass
 
         # Apply rules
         self.apply_rules(rules, "deny ip4/ip6 udp")
 
         # Traffic should not pass
-        self.run_verify_negat_test(self.IP, self.IPRANDOM,
-                                   self.proto[self.IP][self.UDP])
+        self.run_verify_negat_test(
+            self.IP, self.IPRANDOM, self.proto[self.IP][self.UDP]
+        )
 
         self.logger.info("ACLP_TEST_FINISH_0113")
 
     def test_0300_tcp_permit_v4_etype_aaaa(self):
 
         self.logger.info("ACLP_TEST_FINISH_0113")
 
     def test_0300_tcp_permit_v4_etype_aaaa(self):
-        """ permit TCPv4, send 0xAAAA etype
-        """
+        """permit TCPv4, send 0xAAAA etype"""
         self.logger.info("ACLP_TEST_START_0300")
 
         # Add an ACL
         rules = []
         self.logger.info("ACLP_TEST_START_0300")
 
         # Add an ACL
         rules = []
-        rules.append(self.create_rule(self.IPV4, self.DENY, self.PORTS_RANGE_2,
-                                      self.proto[self.IP][self.TCP]))
-        rules.append(self.create_rule(self.IPV4, self.PERMIT, self.PORTS_RANGE,
-                                      self.proto[self.IP][self.TCP]))
+        rules.append(
+            self.create_rule(
+                self.IPV4, self.DENY, self.PORTS_RANGE_2, self.proto[self.IP][self.TCP]
+            )
+        )
+        rules.append(
+            self.create_rule(
+                self.IPV4, self.PERMIT, self.PORTS_RANGE, self.proto[self.IP][self.TCP]
+            )
+        )
         # deny ip any any in the end
         rules.append(self.create_rule(self.IPV4, self.DENY, self.PORTS_ALL, 0))
 
         # deny ip any any in the end
         rules.append(self.create_rule(self.IPV4, self.DENY, self.PORTS_ALL, 0))
 
@@ -1318,33 +1480,39 @@ class TestACLplugin(VppTestCase):
         self.apply_rules(rules, "permit ipv4 tcp")
 
         # Traffic should still pass also for an odd ethertype
         self.apply_rules(rules, "permit ipv4 tcp")
 
         # Traffic should still pass also for an odd ethertype
-        self.run_verify_test(self.IP, self.IPV4, self.proto[self.IP][self.TCP],
-                             0, False, True, 0xaaaa)
+        self.run_verify_test(
+            self.IP, self.IPV4, self.proto[self.IP][self.TCP], 0, False, True, 0xAAAA
+        )
         self.logger.info("ACLP_TEST_FINISH_0300")
 
     def test_0305_tcp_permit_v4_etype_blacklist_aaaa(self):
         self.logger.info("ACLP_TEST_FINISH_0300")
 
     def test_0305_tcp_permit_v4_etype_blacklist_aaaa(self):
-        """ permit TCPv4, whitelist 0x0BBB ethertype, send 0xAAAA-blocked
-        """
+        """permit TCPv4, whitelist 0x0BBB ethertype, send 0xAAAA-blocked"""
         self.logger.info("ACLP_TEST_START_0305")
 
         # Add an ACL
         rules = []
         self.logger.info("ACLP_TEST_START_0305")
 
         # Add an ACL
         rules = []
-        rules.append(self.create_rule(self.IPV4, self.DENY, self.PORTS_RANGE_2,
-                                      self.proto[self.IP][self.TCP]))
-        rules.append(self.create_rule(self.IPV4, self.PERMIT, self.PORTS_RANGE,
-                                      self.proto[self.IP][self.TCP]))
+        rules.append(
+            self.create_rule(
+                self.IPV4, self.DENY, self.PORTS_RANGE_2, self.proto[self.IP][self.TCP]
+            )
+        )
+        rules.append(
+            self.create_rule(
+                self.IPV4, self.PERMIT, self.PORTS_RANGE, self.proto[self.IP][self.TCP]
+            )
+        )
         # deny ip any any in the end
         rules.append(self.create_rule(self.IPV4, self.DENY, self.PORTS_ALL, 0))
 
         # Apply rules
         self.apply_rules(rules, "permit ipv4 tcp")
         # whitelist the 0xbbbb etype - so the 0xaaaa should be blocked
         # deny ip any any in the end
         rules.append(self.create_rule(self.IPV4, self.DENY, self.PORTS_ALL, 0))
 
         # Apply rules
         self.apply_rules(rules, "permit ipv4 tcp")
         # whitelist the 0xbbbb etype - so the 0xaaaa should be blocked
-        self.etype_whitelist([0xbbb], 1)
+        self.etype_whitelist([0xBBB], 1)
 
         # The oddball ethertype should be blocked
 
         # The oddball ethertype should be blocked
-        self.run_verify_negat_test(self.IP, self.IPV4,
-                                   self.proto[self.IP][self.TCP],
-                                   0, False, 0xaaaa)
+        self.run_verify_negat_test(
+            self.IP, self.IPV4, self.proto[self.IP][self.TCP], 0, False, 0xAAAA
+        )
 
         # remove the whitelist
         self.etype_whitelist([], 0, add=False)
 
         # remove the whitelist
         self.etype_whitelist([], 0, add=False)
@@ -1352,27 +1520,33 @@ class TestACLplugin(VppTestCase):
         self.logger.info("ACLP_TEST_FINISH_0305")
 
     def test_0306_tcp_permit_v4_etype_blacklist_aaaa(self):
         self.logger.info("ACLP_TEST_FINISH_0305")
 
     def test_0306_tcp_permit_v4_etype_blacklist_aaaa(self):
-        """ permit TCPv4, whitelist 0x0BBB ethertype, send 0x0BBB - pass
-        """
+        """permit TCPv4, whitelist 0x0BBB ethertype, send 0x0BBB - pass"""
         self.logger.info("ACLP_TEST_START_0306")
 
         # Add an ACL
         rules = []
         self.logger.info("ACLP_TEST_START_0306")
 
         # Add an ACL
         rules = []
-        rules.append(self.create_rule(self.IPV4, self.DENY, self.PORTS_RANGE_2,
-                                      self.proto[self.IP][self.TCP]))
-        rules.append(self.create_rule(self.IPV4, self.PERMIT, self.PORTS_RANGE,
-                                      self.proto[self.IP][self.TCP]))
+        rules.append(
+            self.create_rule(
+                self.IPV4, self.DENY, self.PORTS_RANGE_2, self.proto[self.IP][self.TCP]
+            )
+        )
+        rules.append(
+            self.create_rule(
+                self.IPV4, self.PERMIT, self.PORTS_RANGE, self.proto[self.IP][self.TCP]
+            )
+        )
         # deny ip any any in the end
         rules.append(self.create_rule(self.IPV4, self.DENY, self.PORTS_ALL, 0))
 
         # Apply rules
         self.apply_rules(rules, "permit ipv4 tcp")
         # whitelist the 0xbbbb etype - so the 0xaaaa should be blocked
         # deny ip any any in the end
         rules.append(self.create_rule(self.IPV4, self.DENY, self.PORTS_ALL, 0))
 
         # Apply rules
         self.apply_rules(rules, "permit ipv4 tcp")
         # whitelist the 0xbbbb etype - so the 0xaaaa should be blocked
-        self.etype_whitelist([0xbbb], 1)
+        self.etype_whitelist([0xBBB], 1)
 
         # The whitelisted traffic, should pass
 
         # The whitelisted traffic, should pass
-        self.run_verify_test(self.IP, self.IPV4, self.proto[self.IP][self.TCP],
-                             0, False, True, 0x0bbb)
+        self.run_verify_test(
+            self.IP, self.IPV4, self.proto[self.IP][self.TCP], 0, False, True, 0x0BBB
+        )
 
         # remove the whitelist, the previously blocked 0xAAAA should pass now
         self.etype_whitelist([], 0, add=False)
 
         # remove the whitelist, the previously blocked 0xAAAA should pass now
         self.etype_whitelist([], 0, add=False)
@@ -1380,16 +1554,21 @@ class TestACLplugin(VppTestCase):
         self.logger.info("ACLP_TEST_FINISH_0306")
 
     def test_0307_tcp_permit_v4_etype_blacklist_aaaa(self):
         self.logger.info("ACLP_TEST_FINISH_0306")
 
     def test_0307_tcp_permit_v4_etype_blacklist_aaaa(self):
-        """ permit TCPv4, whitelist 0x0BBB, remove, send 0xAAAA - pass
-        """
+        """permit TCPv4, whitelist 0x0BBB, remove, send 0xAAAA - pass"""
         self.logger.info("ACLP_TEST_START_0307")
 
         # Add an ACL
         rules = []
         self.logger.info("ACLP_TEST_START_0307")
 
         # Add an ACL
         rules = []
-        rules.append(self.create_rule(self.IPV4, self.DENY, self.PORTS_RANGE_2,
-                                      self.proto[self.IP][self.TCP]))
-        rules.append(self.create_rule(self.IPV4, self.PERMIT, self.PORTS_RANGE,
-                                      self.proto[self.IP][self.TCP]))
+        rules.append(
+            self.create_rule(
+                self.IPV4, self.DENY, self.PORTS_RANGE_2, self.proto[self.IP][self.TCP]
+            )
+        )
+        rules.append(
+            self.create_rule(
+                self.IPV4, self.PERMIT, self.PORTS_RANGE, self.proto[self.IP][self.TCP]
+            )
+        )
         # deny ip any any in the end
         rules.append(self.create_rule(self.IPV4, self.DENY, self.PORTS_ALL, 0))
 
         # deny ip any any in the end
         rules.append(self.create_rule(self.IPV4, self.DENY, self.PORTS_ALL, 0))
 
@@ -1397,27 +1576,33 @@ class TestACLplugin(VppTestCase):
         self.apply_rules(rules, "permit ipv4 tcp")
 
         # whitelist the 0xbbbb etype - so the 0xaaaa should be blocked
         self.apply_rules(rules, "permit ipv4 tcp")
 
         # whitelist the 0xbbbb etype - so the 0xaaaa should be blocked
-        self.etype_whitelist([0xbbb], 1)
+        self.etype_whitelist([0xBBB], 1)
         # remove the whitelist, the previously blocked 0xAAAA should pass now
         self.etype_whitelist([], 0, add=False)
 
         # The whitelisted traffic, should pass
         # remove the whitelist, the previously blocked 0xAAAA should pass now
         self.etype_whitelist([], 0, add=False)
 
         # The whitelisted traffic, should pass
-        self.run_verify_test(self.IP, self.IPV4, self.proto[self.IP][self.TCP],
-                             0, False, True, 0xaaaa)
+        self.run_verify_test(
+            self.IP, self.IPV4, self.proto[self.IP][self.TCP], 0, False, True, 0xAAAA
+        )
 
         self.logger.info("ACLP_TEST_FINISH_0306")
 
     def test_0315_del_intf(self):
 
         self.logger.info("ACLP_TEST_FINISH_0306")
 
     def test_0315_del_intf(self):
-        """ apply an acl and delete the interface
-        """
+        """apply an acl and delete the interface"""
         self.logger.info("ACLP_TEST_START_0315")
 
         # Add an ACL
         rules = []
         self.logger.info("ACLP_TEST_START_0315")
 
         # Add an ACL
         rules = []
-        rules.append(self.create_rule(self.IPV4, self.DENY, self.PORTS_RANGE_2,
-                                      self.proto[self.IP][self.TCP]))
-        rules.append(self.create_rule(self.IPV4, self.PERMIT, self.PORTS_RANGE,
-                                      self.proto[self.IP][self.TCP]))
+        rules.append(
+            self.create_rule(
+                self.IPV4, self.DENY, self.PORTS_RANGE_2, self.proto[self.IP][self.TCP]
+            )
+        )
+        rules.append(
+            self.create_rule(
+                self.IPV4, self.PERMIT, self.PORTS_RANGE, self.proto[self.IP][self.TCP]
+            )
+        )
         # deny ip any any in the end
         rules.append(self.create_rule(self.IPV4, self.DENY, self.PORTS_ALL, 0))
 
         # deny ip any any in the end
         rules.append(self.create_rule(self.IPV4, self.DENY, self.PORTS_ALL, 0))
 
@@ -1434,5 +1619,5 @@ class TestACLplugin(VppTestCase):
         self.logger.info("ACLP_TEST_FINISH_0315")
 
 
         self.logger.info("ACLP_TEST_FINISH_0315")
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index cbf0ab3..1b41698 100644 (file)
@@ -39,14 +39,16 @@ def to_acl_rule(self, is_permit, wildcard_sport=False):
         rule_l4_sport_first = rule_l4_sport
         rule_l4_sport_last = rule_l4_sport
 
         rule_l4_sport_first = rule_l4_sport
         rule_l4_sport_last = rule_l4_sport
 
-    new_rule = AclRule(is_permit=is_permit, proto=rule_l4_proto,
-                       src_prefix=ip_network(
-                           (p[rule_l3_layer].src, rule_prefix_len)),
-                       dst_prefix=ip_network(
-                           (p[rule_l3_layer].dst, rule_prefix_len)),
-                       sport_from=rule_l4_sport_first,
-                       sport_to=rule_l4_sport_last,
-                       dport_from=rule_l4_dport, dport_to=rule_l4_dport)
+    new_rule = AclRule(
+        is_permit=is_permit,
+        proto=rule_l4_proto,
+        src_prefix=ip_network((p[rule_l3_layer].src, rule_prefix_len)),
+        dst_prefix=ip_network((p[rule_l3_layer].dst, rule_prefix_len)),
+        sport_from=rule_l4_sport_first,
+        sport_to=rule_l4_sport_last,
+        dport_from=rule_l4_dport,
+        dport_to=rule_l4_dport,
+    )
 
     return new_rule
 
 
     return new_rule
 
@@ -54,7 +56,7 @@ def to_acl_rule(self, is_permit, wildcard_sport=False):
 Packet.to_acl_rule = to_acl_rule
 
 
 Packet.to_acl_rule = to_acl_rule
 
 
-class IterateWithSleep():
+class IterateWithSleep:
     def __init__(self, testcase, n_iters, description, sleep_sec):
         self.curr = 0
         self.testcase = testcase
     def __init__(self, testcase, n_iters, description, sleep_sec):
         self.curr = 0
         self.testcase = testcase
@@ -87,21 +89,27 @@ class Conn(L4_Conn):
         deny_acl.add_vpp_config()
 
         if reflect_side == acl_side:
         deny_acl.add_vpp_config()
 
         if reflect_side == acl_side:
-            acl_if0 = VppAclInterface(self.testcase,
-                                      self.ifs[acl_side].sw_if_index,
-                                      [reflect_acl, deny_acl], n_input=1)
-            acl_if1 = VppAclInterface(self.testcase,
-                                      self.ifs[1-acl_side].sw_if_index, [],
-                                      n_input=0)
+            acl_if0 = VppAclInterface(
+                self.testcase,
+                self.ifs[acl_side].sw_if_index,
+                [reflect_acl, deny_acl],
+                n_input=1,
+            )
+            acl_if1 = VppAclInterface(
+                self.testcase, self.ifs[1 - acl_side].sw_if_index, [], n_input=0
+            )
             acl_if0.add_vpp_config()
             acl_if1.add_vpp_config()
         else:
             acl_if0.add_vpp_config()
             acl_if1.add_vpp_config()
         else:
-            acl_if0 = VppAclInterface(self.testcase,
-                                      self.ifs[acl_side].sw_if_index,
-                                      [deny_acl, reflect_acl], n_input=1)
-            acl_if1 = VppAclInterface(self.testcase,
-                                      self.ifs[1-acl_side].sw_if_index, [],
-                                      n_input=0)
+            acl_if0 = VppAclInterface(
+                self.testcase,
+                self.ifs[acl_side].sw_if_index,
+                [deny_acl, reflect_acl],
+                n_input=1,
+            )
+            acl_if1 = VppAclInterface(
+                self.testcase, self.ifs[1 - acl_side].sw_if_index, [], n_input=0
+            )
             acl_if0.add_vpp_config()
             acl_if1.add_vpp_config()
 
             acl_if0.add_vpp_config()
             acl_if1.add_vpp_config()
 
@@ -109,19 +117,22 @@ class Conn(L4_Conn):
         any_addr = ["0.0.0.0", "::"]
         rule_family = self.address_family
         is_ip6 = 1 if rule_family == AF_INET6 else 0
         any_addr = ["0.0.0.0", "::"]
         rule_family = self.address_family
         is_ip6 = 1 if rule_family == AF_INET6 else 0
-        new_rule = AclRule(is_permit=is_permit, proto=0,
-                           src_prefix=ip_network(
-                               (any_addr[is_ip6], 0)),
-                           dst_prefix=ip_network(
-                               (any_addr[is_ip6], 0)),
-                           sport_from=0, sport_to=65535, dport_from=0,
-                           dport_to=65535)
+        new_rule = AclRule(
+            is_permit=is_permit,
+            proto=0,
+            src_prefix=ip_network((any_addr[is_ip6], 0)),
+            dst_prefix=ip_network((any_addr[is_ip6], 0)),
+            sport_from=0,
+            sport_to=65535,
+            dport_from=0,
+            dport_to=65535,
+        )
         return new_rule
 
 
 @unittest.skipUnless(config.extended, "part of extended tests")
 class ACLPluginConnTestCase(VppTestCase):
         return new_rule
 
 
 @unittest.skipUnless(config.extended, "part of extended tests")
 class ACLPluginConnTestCase(VppTestCase):
-    """ ACL plugin connection-oriented extended testcases """
+    """ACL plugin connection-oriented extended testcases"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -142,8 +153,7 @@ class ACLPluginConnTestCase(VppTestCase):
         super(ACLPluginConnTestCase, cls).tearDownClass()
 
     def tearDown(self):
         super(ACLPluginConnTestCase, cls).tearDownClass()
 
     def tearDown(self):
-        """Run standard test teardown and log various show commands
-        """
+        """Run standard test teardown and log various show commands"""
         super(ACLPluginConnTestCase, self).tearDown()
 
     def show_commands_at_teardown(self):
         super(ACLPluginConnTestCase, self).tearDown()
 
     def show_commands_at_teardown(self):
@@ -156,7 +166,7 @@ class ACLPluginConnTestCase(VppTestCase):
         self.logger.info(self.vapi.cli("show event-logger all"))
 
     def run_basic_conn_test(self, af, acl_side):
         self.logger.info(self.vapi.cli("show event-logger all"))
 
     def run_basic_conn_test(self, af, acl_side):
-        """ Basic conn timeout test """
+        """Basic conn timeout test"""
         conn1 = Conn(self, self.pg0, self.pg1, af, UDP, 42001, 4242)
         conn1.apply_acls(0, acl_side)
         conn1.send_through(0)
         conn1 = Conn(self, self.pg0, self.pg1, af, UDP, 42001, 4242)
         conn1.apply_acls(0, acl_side)
         conn1.send_through(0)
@@ -178,8 +188,8 @@ class ACLPluginConnTestCase(VppTestCase):
         self.assert_equal(p2, None, "packet on long-idle conn")
 
     def run_active_conn_test(self, af, acl_side):
         self.assert_equal(p2, None, "packet on long-idle conn")
 
     def run_active_conn_test(self, af, acl_side):
-        """ Idle connection behind active connection test """
-        base = 10000 + 1000*acl_side
+        """Idle connection behind active connection test"""
+        base = 10000 + 1000 * acl_side
         conn1 = Conn(self, self.pg0, self.pg1, af, UDP, base + 1, 2323)
         conn2 = Conn(self, self.pg0, self.pg1, af, UDP, base + 2, 2323)
         conn3 = Conn(self, self.pg0, self.pg1, af, UDP, base + 3, 2323)
         conn1 = Conn(self, self.pg0, self.pg1, af, UDP, base + 1, 2323)
         conn2 = Conn(self, self.pg0, self.pg1, af, UDP, base + 2, 2323)
         conn3 = Conn(self, self.pg0, self.pg1, af, UDP, base + 3, 2323)
@@ -206,7 +216,7 @@ class ACLPluginConnTestCase(VppTestCase):
         self.assert_equal(p2, None, "packet on long-idle conn")
 
     def run_clear_conn_test(self, af, acl_side):
         self.assert_equal(p2, None, "packet on long-idle conn")
 
     def run_clear_conn_test(self, af, acl_side):
-        """ Clear the connections via CLI """
+        """Clear the connections via CLI"""
         conn1 = Conn(self, self.pg0, self.pg1, af, UDP, 42001, 4242)
         conn1.apply_acls(0, acl_side)
         conn1.send_through(0)
         conn1 = Conn(self, self.pg0, self.pg1, af, UDP, 42001, 4242)
         conn1.apply_acls(0, acl_side)
         conn1.send_through(0)
@@ -229,9 +239,9 @@ class ACLPluginConnTestCase(VppTestCase):
     def run_tcp_transient_setup_conn_test(self, af, acl_side):
         conn1 = Conn(self, self.pg0, self.pg1, af, TCP, 53001, 5151)
         conn1.apply_acls(0, acl_side)
     def run_tcp_transient_setup_conn_test(self, af, acl_side):
         conn1 = Conn(self, self.pg0, self.pg1, af, TCP, 53001, 5151)
         conn1.apply_acls(0, acl_side)
-        conn1.send_through(0, 'S')
+        conn1.send_through(0, "S")
         # the return packets should pass
         # the return packets should pass
-        conn1.send_through(1, 'SA')
+        conn1.send_through(1, "SA")
         # allow the conn to time out
         for i in IterateWithSleep(self, 30, "Wait for timeout", 0.1):
             pass
         # allow the conn to time out
         for i in IterateWithSleep(self, 30, "Wait for timeout", 0.1):
             pass
@@ -247,17 +257,17 @@ class ACLPluginConnTestCase(VppTestCase):
     def run_tcp_established_conn_test(self, af, acl_side):
         conn1 = Conn(self, self.pg0, self.pg1, af, TCP, 53002, 5052)
         conn1.apply_acls(0, acl_side)
     def run_tcp_established_conn_test(self, af, acl_side):
         conn1 = Conn(self, self.pg0, self.pg1, af, TCP, 53002, 5052)
         conn1.apply_acls(0, acl_side)
-        conn1.send_through(0, 'S')
+        conn1.send_through(0, "S")
         # the return packets should pass
         # the return packets should pass
-        conn1.send_through(1, 'SA')
+        conn1.send_through(1, "SA")
         # complete the threeway handshake
         # (NB: sequence numbers not tracked, so not set!)
         # complete the threeway handshake
         # (NB: sequence numbers not tracked, so not set!)
-        conn1.send_through(0, 'A')
+        conn1.send_through(0, "A")
         # allow the conn to time out if it's in embryonic timer
         for i in IterateWithSleep(self, 30, "Wait for transient timeout", 0.1):
             pass
         # Try to send the packet from the "forbidden" side - it must pass
         # allow the conn to time out if it's in embryonic timer
         for i in IterateWithSleep(self, 30, "Wait for transient timeout", 0.1):
             pass
         # Try to send the packet from the "forbidden" side - it must pass
-        conn1.send_through(1, 'A')
+        conn1.send_through(1, "A")
         # ensure conn times out for real
         for i in IterateWithSleep(self, 130, "Wait for timeout", 0.1):
             pass
         # ensure conn times out for real
         for i in IterateWithSleep(self, 130, "Wait for timeout", 0.1):
             pass
@@ -272,19 +282,19 @@ class ACLPluginConnTestCase(VppTestCase):
     def run_tcp_transient_teardown_conn_test(self, af, acl_side):
         conn1 = Conn(self, self.pg0, self.pg1, af, TCP, 53002, 5052)
         conn1.apply_acls(0, acl_side)
     def run_tcp_transient_teardown_conn_test(self, af, acl_side):
         conn1 = Conn(self, self.pg0, self.pg1, af, TCP, 53002, 5052)
         conn1.apply_acls(0, acl_side)
-        conn1.send_through(0, 'S')
+        conn1.send_through(0, "S")
         # the return packets should pass
         # the return packets should pass
-        conn1.send_through(1, 'SA')
+        conn1.send_through(1, "SA")
         # complete the threeway handshake
         # (NB: sequence numbers not tracked, so not set!)
         # complete the threeway handshake
         # (NB: sequence numbers not tracked, so not set!)
-        conn1.send_through(0, 'A')
+        conn1.send_through(0, "A")
         # allow the conn to time out if it's in embryonic timer
         for i in IterateWithSleep(self, 30, "Wait for transient timeout", 0.1):
             pass
         # Try to send the packet from the "forbidden" side - it must pass
         # allow the conn to time out if it's in embryonic timer
         for i in IterateWithSleep(self, 30, "Wait for transient timeout", 0.1):
             pass
         # Try to send the packet from the "forbidden" side - it must pass
-        conn1.send_through(1, 'A')
+        conn1.send_through(1, "A")
         # Send the FIN to bounce the session out of established
         # Send the FIN to bounce the session out of established
-        conn1.send_through(1, 'FA')
+        conn1.send_through(1, "FA")
         # If conn landed on transient timer it will time out here
         for i in IterateWithSleep(self, 30, "Wait for transient timeout", 0.1):
             pass
         # If conn landed on transient timer it will time out here
         for i in IterateWithSleep(self, 30, "Wait for transient timeout", 0.1):
             pass
@@ -298,59 +308,59 @@ class ACLPluginConnTestCase(VppTestCase):
         self.assert_equal(p2, None, "packet on supposedly deleted conn")
 
     def test_0000_conn_prepare_test(self):
         self.assert_equal(p2, None, "packet on supposedly deleted conn")
 
     def test_0000_conn_prepare_test(self):
-        """ Prepare the settings """
+        """Prepare the settings"""
         self.vapi.ppcli("set acl-plugin session timeout udp idle 1")
 
     def test_0001_basic_conn_test(self):
         self.vapi.ppcli("set acl-plugin session timeout udp idle 1")
 
     def test_0001_basic_conn_test(self):
-        """ IPv4: Basic conn timeout test reflect on ingress """
+        """IPv4: Basic conn timeout test reflect on ingress"""
         self.run_basic_conn_test(AF_INET, 0)
 
     def test_0002_basic_conn_test(self):
         self.run_basic_conn_test(AF_INET, 0)
 
     def test_0002_basic_conn_test(self):
-        """ IPv4: Basic conn timeout test reflect on egress """
+        """IPv4: Basic conn timeout test reflect on egress"""
         self.run_basic_conn_test(AF_INET, 1)
 
     def test_0005_clear_conn_test(self):
         self.run_basic_conn_test(AF_INET, 1)
 
     def test_0005_clear_conn_test(self):
-        """ IPv4: reflect egress, clear conn """
+        """IPv4: reflect egress, clear conn"""
         self.run_clear_conn_test(AF_INET, 1)
 
     def test_0006_clear_conn_test(self):
         self.run_clear_conn_test(AF_INET, 1)
 
     def test_0006_clear_conn_test(self):
-        """ IPv4: reflect ingress, clear conn """
+        """IPv4: reflect ingress, clear conn"""
         self.run_clear_conn_test(AF_INET, 0)
 
     def test_0011_active_conn_test(self):
         self.run_clear_conn_test(AF_INET, 0)
 
     def test_0011_active_conn_test(self):
-        """ IPv4: Idle conn behind active conn, reflect on ingress """
+        """IPv4: Idle conn behind active conn, reflect on ingress"""
         self.run_active_conn_test(AF_INET, 0)
 
     def test_0012_active_conn_test(self):
         self.run_active_conn_test(AF_INET, 0)
 
     def test_0012_active_conn_test(self):
-        """ IPv4: Idle conn behind active conn, reflect on egress """
+        """IPv4: Idle conn behind active conn, reflect on egress"""
         self.run_active_conn_test(AF_INET, 1)
 
     def test_1001_basic_conn_test(self):
         self.run_active_conn_test(AF_INET, 1)
 
     def test_1001_basic_conn_test(self):
-        """ IPv6: Basic conn timeout test reflect on ingress """
+        """IPv6: Basic conn timeout test reflect on ingress"""
         self.run_basic_conn_test(AF_INET6, 0)
 
     def test_1002_basic_conn_test(self):
         self.run_basic_conn_test(AF_INET6, 0)
 
     def test_1002_basic_conn_test(self):
-        """ IPv6: Basic conn timeout test reflect on egress """
+        """IPv6: Basic conn timeout test reflect on egress"""
         self.run_basic_conn_test(AF_INET6, 1)
 
     def test_1005_clear_conn_test(self):
         self.run_basic_conn_test(AF_INET6, 1)
 
     def test_1005_clear_conn_test(self):
-        """ IPv6: reflect egress, clear conn """
+        """IPv6: reflect egress, clear conn"""
         self.run_clear_conn_test(AF_INET6, 1)
 
     def test_1006_clear_conn_test(self):
         self.run_clear_conn_test(AF_INET6, 1)
 
     def test_1006_clear_conn_test(self):
-        """ IPv6: reflect ingress, clear conn """
+        """IPv6: reflect ingress, clear conn"""
         self.run_clear_conn_test(AF_INET6, 0)
 
     def test_1011_active_conn_test(self):
         self.run_clear_conn_test(AF_INET6, 0)
 
     def test_1011_active_conn_test(self):
-        """ IPv6: Idle conn behind active conn, reflect on ingress """
+        """IPv6: Idle conn behind active conn, reflect on ingress"""
         self.run_active_conn_test(AF_INET6, 0)
 
     def test_1012_active_conn_test(self):
         self.run_active_conn_test(AF_INET6, 0)
 
     def test_1012_active_conn_test(self):
-        """ IPv6: Idle conn behind active conn, reflect on egress """
+        """IPv6: Idle conn behind active conn, reflect on egress"""
         self.run_active_conn_test(AF_INET6, 1)
 
     def test_2000_prepare_for_tcp_test(self):
         self.run_active_conn_test(AF_INET6, 1)
 
     def test_2000_prepare_for_tcp_test(self):
-        """ Prepare for TCP session tests """
+        """Prepare for TCP session tests"""
         # ensure the session hangs on if it gets treated as UDP
         self.vapi.ppcli("set acl-plugin session timeout udp idle 200")
         # let the TCP connection time out at 5 seconds
         # ensure the session hangs on if it gets treated as UDP
         self.vapi.ppcli("set acl-plugin session timeout udp idle 200")
         # let the TCP connection time out at 5 seconds
@@ -358,49 +368,49 @@ class ACLPluginConnTestCase(VppTestCase):
         self.vapi.ppcli("set acl-plugin session timeout tcp transient 1")
 
     def test_2001_tcp_transient_conn_test(self):
         self.vapi.ppcli("set acl-plugin session timeout tcp transient 1")
 
     def test_2001_tcp_transient_conn_test(self):
-        """ IPv4: transient TCP session (incomplete 3WHS), ref. on ingress """
+        """IPv4: transient TCP session (incomplete 3WHS), ref. on ingress"""
         self.run_tcp_transient_setup_conn_test(AF_INET, 0)
 
     def test_2002_tcp_transient_conn_test(self):
         self.run_tcp_transient_setup_conn_test(AF_INET, 0)
 
     def test_2002_tcp_transient_conn_test(self):
-        """ IPv4: transient TCP session (incomplete 3WHS), ref. on egress """
+        """IPv4: transient TCP session (incomplete 3WHS), ref. on egress"""
         self.run_tcp_transient_setup_conn_test(AF_INET, 1)
 
     def test_2003_tcp_transient_conn_test(self):
         self.run_tcp_transient_setup_conn_test(AF_INET, 1)
 
     def test_2003_tcp_transient_conn_test(self):
-        """ IPv4: established TCP session (complete 3WHS), ref. on ingress """
+        """IPv4: established TCP session (complete 3WHS), ref. on ingress"""
         self.run_tcp_established_conn_test(AF_INET, 0)
 
     def test_2004_tcp_transient_conn_test(self):
         self.run_tcp_established_conn_test(AF_INET, 0)
 
     def test_2004_tcp_transient_conn_test(self):
-        """ IPv4: established TCP session (complete 3WHS), ref. on egress """
+        """IPv4: established TCP session (complete 3WHS), ref. on egress"""
         self.run_tcp_established_conn_test(AF_INET, 1)
 
     def test_2005_tcp_transient_teardown_conn_test(self):
         self.run_tcp_established_conn_test(AF_INET, 1)
 
     def test_2005_tcp_transient_teardown_conn_test(self):
-        """ IPv4: transient TCP session (3WHS,ACK,FINACK), ref. on ingress """
+        """IPv4: transient TCP session (3WHS,ACK,FINACK), ref. on ingress"""
         self.run_tcp_transient_teardown_conn_test(AF_INET, 0)
 
     def test_2006_tcp_transient_teardown_conn_test(self):
         self.run_tcp_transient_teardown_conn_test(AF_INET, 0)
 
     def test_2006_tcp_transient_teardown_conn_test(self):
-        """ IPv4: transient TCP session (3WHS,ACK,FINACK), ref. on egress """
+        """IPv4: transient TCP session (3WHS,ACK,FINACK), ref. on egress"""
         self.run_tcp_transient_teardown_conn_test(AF_INET, 1)
 
     def test_3001_tcp_transient_conn_test(self):
         self.run_tcp_transient_teardown_conn_test(AF_INET, 1)
 
     def test_3001_tcp_transient_conn_test(self):
-        """ IPv6: transient TCP session (incomplete 3WHS), ref. on ingress """
+        """IPv6: transient TCP session (incomplete 3WHS), ref. on ingress"""
         self.run_tcp_transient_setup_conn_test(AF_INET6, 0)
 
     def test_3002_tcp_transient_conn_test(self):
         self.run_tcp_transient_setup_conn_test(AF_INET6, 0)
 
     def test_3002_tcp_transient_conn_test(self):
-        """ IPv6: transient TCP session (incomplete 3WHS), ref. on egress """
+        """IPv6: transient TCP session (incomplete 3WHS), ref. on egress"""
         self.run_tcp_transient_setup_conn_test(AF_INET6, 1)
 
     def test_3003_tcp_transient_conn_test(self):
         self.run_tcp_transient_setup_conn_test(AF_INET6, 1)
 
     def test_3003_tcp_transient_conn_test(self):
-        """ IPv6: established TCP session (complete 3WHS), ref. on ingress """
+        """IPv6: established TCP session (complete 3WHS), ref. on ingress"""
         self.run_tcp_established_conn_test(AF_INET6, 0)
 
     def test_3004_tcp_transient_conn_test(self):
         self.run_tcp_established_conn_test(AF_INET6, 0)
 
     def test_3004_tcp_transient_conn_test(self):
-        """ IPv6: established TCP session (complete 3WHS), ref. on egress """
+        """IPv6: established TCP session (complete 3WHS), ref. on egress"""
         self.run_tcp_established_conn_test(AF_INET6, 1)
 
     def test_3005_tcp_transient_teardown_conn_test(self):
         self.run_tcp_established_conn_test(AF_INET6, 1)
 
     def test_3005_tcp_transient_teardown_conn_test(self):
-        """ IPv6: transient TCP session (3WHS,ACK,FINACK), ref. on ingress """
+        """IPv6: transient TCP session (3WHS,ACK,FINACK), ref. on ingress"""
         self.run_tcp_transient_teardown_conn_test(AF_INET6, 0)
 
     def test_3006_tcp_transient_teardown_conn_test(self):
         self.run_tcp_transient_teardown_conn_test(AF_INET6, 0)
 
     def test_3006_tcp_transient_teardown_conn_test(self):
-        """ IPv6: transient TCP session (3WHS,ACK,FINACK), ref. on egress """
+        """IPv6: transient TCP session (3WHS,ACK,FINACK), ref. on egress"""
         self.run_tcp_transient_teardown_conn_test(AF_INET6, 1)
         self.run_tcp_transient_teardown_conn_test(AF_INET6, 1)
index 48faafb..343e611 100644 (file)
@@ -76,12 +76,16 @@ class TestACLpluginL2L3(VppTestCase):
 
         # Create BD with MAC learning enabled and put interfaces to this BD
         cls.vapi.sw_interface_set_l2_bridge(
 
         # Create BD with MAC learning enabled and put interfaces to this BD
         cls.vapi.sw_interface_set_l2_bridge(
-            rx_sw_if_index=cls.loop0.sw_if_index, bd_id=cls.bd_id,
-            port_type=L2_PORT_TYPE.BVI)
-        cls.vapi.sw_interface_set_l2_bridge(rx_sw_if_index=cls.pg0.sw_if_index,
-                                            bd_id=cls.bd_id)
-        cls.vapi.sw_interface_set_l2_bridge(rx_sw_if_index=cls.pg1.sw_if_index,
-                                            bd_id=cls.bd_id)
+            rx_sw_if_index=cls.loop0.sw_if_index,
+            bd_id=cls.bd_id,
+            port_type=L2_PORT_TYPE.BVI,
+        )
+        cls.vapi.sw_interface_set_l2_bridge(
+            rx_sw_if_index=cls.pg0.sw_if_index, bd_id=cls.bd_id
+        )
+        cls.vapi.sw_interface_set_l2_bridge(
+            rx_sw_if_index=cls.pg1.sw_if_index, bd_id=cls.bd_id
+        )
 
         # Configure IPv4 addresses on loopback interface and routed interface
         cls.loop0.config_ip4()
 
         # Configure IPv4 addresses on loopback interface and routed interface
         cls.loop0.config_ip4()
@@ -125,8 +129,7 @@ class TestACLpluginL2L3(VppTestCase):
         self.logger.info(self.vapi.cli("show l2patch"))
         self.logger.info(self.vapi.cli("show classify tables"))
         self.logger.info(self.vapi.cli("show l2fib verbose"))
         self.logger.info(self.vapi.cli("show l2patch"))
         self.logger.info(self.vapi.cli("show classify tables"))
         self.logger.info(self.vapi.cli("show l2fib verbose"))
-        self.logger.info(self.vapi.cli("show bridge-domain %s detail" %
-                                       self.bd_id))
+        self.logger.info(self.vapi.cli("show bridge-domain %s detail" % self.bd_id))
         self.logger.info(self.vapi.cli("show ip neighbors"))
         cmd = "show acl-plugin sessions verbose 1"
         self.logger.info(self.vapi.cli(cmd))
         self.logger.info(self.vapi.cli("show ip neighbors"))
         cmd = "show acl-plugin sessions verbose 1"
         self.logger.info(self.vapi.cli(cmd))
@@ -134,23 +137,33 @@ class TestACLpluginL2L3(VppTestCase):
         self.logger.info(self.vapi.cli("show acl-plugin interface"))
         self.logger.info(self.vapi.cli("show acl-plugin tables"))
 
         self.logger.info(self.vapi.cli("show acl-plugin interface"))
         self.logger.info(self.vapi.cli("show acl-plugin tables"))
 
-    def create_stream(self, src_ip_if, dst_ip_if, reverse, packet_sizes,
-                      is_ip6, expect_blocked, expect_established,
-                      add_extension_header, icmp_stateful=False):
+    def create_stream(
+        self,
+        src_ip_if,
+        dst_ip_if,
+        reverse,
+        packet_sizes,
+        is_ip6,
+        expect_blocked,
+        expect_established,
+        add_extension_header,
+        icmp_stateful=False,
+    ):
         pkts = []
         rules = []
         permit_rules = []
         permit_and_reflect_rules = []
         total_packet_count = 8
         for i in range(0, total_packet_count):
         pkts = []
         rules = []
         permit_rules = []
         permit_and_reflect_rules = []
         total_packet_count = 8
         for i in range(0, total_packet_count):
-            modulo = (i//2) % 2
+            modulo = (i // 2) % 2
             icmp_type_delta = i % 2
             icmp_code = i
             icmp_type_delta = i % 2
             icmp_code = i
-            is_udp_packet = (modulo == 0)
+            is_udp_packet = modulo == 0
             if is_udp_packet and icmp_stateful:
                 continue
             if is_udp_packet and icmp_stateful:
                 continue
-            is_reflectable_icmp = (icmp_stateful and icmp_type_delta == 0 and
-                                   not is_udp_packet)
+            is_reflectable_icmp = (
+                icmp_stateful and icmp_type_delta == 0 and not is_udp_packet
+            )
             is_reflected_icmp = is_reflectable_icmp and expect_established
             can_reflect_this_packet = is_udp_packet or is_reflectable_icmp
             is_permit = i % 2
             is_reflected_icmp = is_reflectable_icmp and expect_established
             can_reflect_this_packet = is_udp_packet or is_reflectable_icmp
             is_permit = i % 2
@@ -161,9 +174,9 @@ class TestACLpluginL2L3(VppTestCase):
                 payload = self.info_to_payload(info)
             else:
                 to_be_blocked = False
                 payload = self.info_to_payload(info)
             else:
                 to_be_blocked = False
-                if (expect_blocked and not expect_established):
+                if expect_blocked and not expect_established:
                     to_be_blocked = True
                     to_be_blocked = True
-                if (not can_reflect_this_packet):
+                if not can_reflect_this_packet:
                     to_be_blocked = True
                 if to_be_blocked:
                     payload = "to be blocked"
                     to_be_blocked = True
                 if to_be_blocked:
                     payload = "to be blocked"
@@ -171,7 +184,7 @@ class TestACLpluginL2L3(VppTestCase):
                     info = self.create_packet_info(src_ip_if, dst_ip_if)
                     payload = self.info_to_payload(info)
             if reverse:
                     info = self.create_packet_info(src_ip_if, dst_ip_if)
                     payload = self.info_to_payload(info)
             if reverse:
-                dst_mac = 'de:ad:00:00:00:00'
+                dst_mac = "de:ad:00:00:00:00"
                 src_mac = remote_dst_host._mac
                 dst_ip6 = src_ip_if.remote_ip6
                 src_ip6 = remote_dst_host.ip6
                 src_mac = remote_dst_host._mac
                 dst_ip6 = src_ip_if.remote_ip6
                 src_ip6 = remote_dst_host.ip6
@@ -201,42 +214,53 @@ class TestACLpluginL2L3(VppTestCase):
                     ulp_l4 = UDP(sport=src_l4, dport=dst_l4)
                     if add_extension_header:
                         # prepend some extension headers
                     ulp_l4 = UDP(sport=src_l4, dport=dst_l4)
                     if add_extension_header:
                         # prepend some extension headers
-                        ulp = (IPv6ExtHdrRouting() / IPv6ExtHdrRouting() /
-                               IPv6ExtHdrFragment(offset=0, m=1) / ulp_l4)
+                        ulp = (
+                            IPv6ExtHdrRouting()
+                            / IPv6ExtHdrRouting()
+                            / IPv6ExtHdrFragment(offset=0, m=1)
+                            / ulp_l4
+                        )
                         # uncomment below to test invalid ones
                         # ulp = IPv6ExtHdrRouting(len = 200) / ulp_l4
                     else:
                         ulp = ulp_l4
                         # uncomment below to test invalid ones
                         # ulp = IPv6ExtHdrRouting(len = 200) / ulp_l4
                     else:
                         ulp = ulp_l4
-                    p = (Ether(dst=dst_mac, src=src_mac) /
-                         IPv6(src=src_ip6, dst=dst_ip6) /
-                         ulp /
-                         Raw(payload))
+                    p = (
+                        Ether(dst=dst_mac, src=src_mac)
+                        / IPv6(src=src_ip6, dst=dst_ip6)
+                        / ulp
+                        / Raw(payload)
+                    )
                 else:
                     ulp_l4 = UDP(sport=src_l4, dport=dst_l4)
                     # IPv4 does not allow extension headers,
                     # but we rather make it a first fragment
                     flags = 1 if add_extension_header else 0
                     ulp = ulp_l4
                 else:
                     ulp_l4 = UDP(sport=src_l4, dport=dst_l4)
                     # IPv4 does not allow extension headers,
                     # but we rather make it a first fragment
                     flags = 1 if add_extension_header else 0
                     ulp = ulp_l4
-                    p = (Ether(dst=dst_mac, src=src_mac) /
-                         IP(src=src_ip4, dst=dst_ip4, frag=0, flags=flags) /
-                         ulp /
-                         Raw(payload))
+                    p = (
+                        Ether(dst=dst_mac, src=src_mac)
+                        / IP(src=src_ip4, dst=dst_ip4, frag=0, flags=flags)
+                        / ulp
+                        / Raw(payload)
+                    )
             elif modulo == 1:
                 if is_ip6:
             elif modulo == 1:
                 if is_ip6:
-                    ulp_l4 = ICMPv6Unknown(type=128 + icmp_type_delta,
-                                           code=icmp_code)
+                    ulp_l4 = ICMPv6Unknown(type=128 + icmp_type_delta, code=icmp_code)
                     ulp = ulp_l4
                     ulp = ulp_l4
-                    p = (Ether(dst=dst_mac, src=src_mac) /
-                         IPv6(src=src_ip6, dst=dst_ip6) /
-                         ulp /
-                         Raw(payload))
+                    p = (
+                        Ether(dst=dst_mac, src=src_mac)
+                        / IPv6(src=src_ip6, dst=dst_ip6)
+                        / ulp
+                        / Raw(payload)
+                    )
                 else:
                 else:
-                    ulp_l4 = ICMP(type=8 - 8*icmp_type_delta, code=icmp_code)
+                    ulp_l4 = ICMP(type=8 - 8 * icmp_type_delta, code=icmp_code)
                     ulp = ulp_l4
                     ulp = ulp_l4
-                    p = (Ether(dst=dst_mac, src=src_mac) /
-                         IP(src=src_ip4, dst=dst_ip4) /
-                         ulp /
-                         Raw(payload))
+                    p = (
+                        Ether(dst=dst_mac, src=src_mac)
+                        / IP(src=src_ip4, dst=dst_ip4)
+                        / ulp
+                        / Raw(payload)
+                    )
 
             if i % 2 == 1:
                 info.data = p.copy()
 
             if i % 2 == 1:
                 info.data = p.copy()
@@ -259,19 +283,20 @@ class TestACLpluginL2L3(VppTestCase):
                     rule_l4_sport = p[ICMPv6Unknown].type
                     rule_l4_dport = p[ICMPv6Unknown].code
             if p.haslayer(IPv6):
                     rule_l4_sport = p[ICMPv6Unknown].type
                     rule_l4_dport = p[ICMPv6Unknown].code
             if p.haslayer(IPv6):
-                rule_l4_proto = ulp_l4.overload_fields[IPv6]['nh']
+                rule_l4_proto = ulp_l4.overload_fields[IPv6]["nh"]
             else:
                 rule_l4_proto = p[IP].proto
 
             else:
                 rule_l4_proto = p[IP].proto
 
-            new_rule = AclRule(is_permit=is_permit, proto=rule_l4_proto,
-                               src_prefix=ip_network(
-                                   (p[rule_l3_layer].src, rule_prefix_len)),
-                               dst_prefix=ip_network(
-                                   (p[rule_l3_layer].dst, rule_prefix_len)),
-                               sport_from=rule_l4_sport,
-                               sport_to=rule_l4_sport,
-                               dport_from=rule_l4_dport,
-                               dport_to=rule_l4_dport)
+            new_rule = AclRule(
+                is_permit=is_permit,
+                proto=rule_l4_proto,
+                src_prefix=ip_network((p[rule_l3_layer].src, rule_prefix_len)),
+                dst_prefix=ip_network((p[rule_l3_layer].dst, rule_prefix_len)),
+                sport_from=rule_l4_sport,
+                sport_to=rule_l4_sport,
+                dport_from=rule_l4_dport,
+                dport_to=rule_l4_dport,
+            )
 
             rules.append(new_rule)
             new_rule_permit = copy.copy(new_rule)
 
             rules.append(new_rule)
             new_rule_permit = copy.copy(new_rule)
@@ -287,10 +312,12 @@ class TestACLpluginL2L3(VppTestCase):
             permit_and_reflect_rules.append(new_rule_permit_and_reflect)
             self.logger.info("create_stream pkt#%d: %s" % (i, payload))
 
             permit_and_reflect_rules.append(new_rule_permit_and_reflect)
             self.logger.info("create_stream pkt#%d: %s" % (i, payload))
 
-        return {'stream': pkts,
-                'rules': rules,
-                'permit_rules': permit_rules,
-                'permit_and_reflect_rules': permit_and_reflect_rules}
+        return {
+            "stream": pkts,
+            "rules": rules,
+            "permit_rules": permit_rules,
+            "permit_and_reflect_rules": permit_and_reflect_rules,
+        }
 
     def verify_capture(self, dst_ip_if, src_ip_if, capture, reverse):
         last_info = dict()
 
     def verify_capture(self, dst_ip_if, src_ip_if, capture, reverse):
         last_info = dict()
@@ -316,11 +343,13 @@ class TestACLpluginL2L3(VppTestCase):
                 data = scapy.compat.raw(packet[UDP][Raw])
             else:
                 if l3 == IP:
                 data = scapy.compat.raw(packet[UDP][Raw])
             else:
                 if l3 == IP:
-                    data = scapy.compat.raw(ICMP(
-                        scapy.compat.raw(packet[l3].payload))[Raw])
+                    data = scapy.compat.raw(
+                        ICMP(scapy.compat.raw(packet[l3].payload))[Raw]
+                    )
                 else:
                 else:
-                    data = scapy.compat.raw(ICMPv6Unknown(
-                        scapy.compat.raw(packet[l3].payload)).msgbody)
+                    data = scapy.compat.raw(
+                        ICMPv6Unknown(scapy.compat.raw(packet[l3].payload)).msgbody
+                    )
             udp_or_icmp = packet[l3].payload
             data_obj = Raw(data)
             # FIXME: make framework believe we are on object
             udp_or_icmp = packet[l3].payload
             data_obj = Raw(data)
             # FIXME: make framework believe we are on object
@@ -330,8 +359,8 @@ class TestACLpluginL2L3(VppTestCase):
             self.assertEqual(payload_info.dst, dst_ip_sw_if_index)
 
             next_info = self.get_next_packet_info_for_interface2(
             self.assertEqual(payload_info.dst, dst_ip_sw_if_index)
 
             next_info = self.get_next_packet_info_for_interface2(
-                payload_info.src, dst_ip_sw_if_index,
-                last_info[payload_info.src])
+                payload_info.src, dst_ip_sw_if_index, last_info[payload_info.src]
+            )
             last_info[payload_info.src] = next_info
             self.assertTrue(next_info is not None)
             self.assertEqual(packet_index, next_info.index)
             last_info[payload_info.src] = next_info
             self.assertTrue(next_info is not None)
             self.assertEqual(packet_index, next_info.index)
@@ -400,13 +429,13 @@ class TestACLpluginL2L3(VppTestCase):
         # change the ACLs a few times
         for i in range(1, 10):
             shuffle(all_rules)
         # change the ACLs a few times
         for i in range(1, 10):
             shuffle(all_rules)
-            acl1.modify_vpp_config(all_rules[::1+(i % 2)])
+            acl1.modify_vpp_config(all_rules[:: 1 + (i % 2)])
 
             shuffle(all_rules)
 
             shuffle(all_rules)
-            acl2.modify_vpp_config(all_rules[::1+(i % 3)])
+            acl2.modify_vpp_config(all_rules[:: 1 + (i % 3)])
 
             shuffle(all_rules)
 
             shuffle(all_rules)
-            acl3.modify_vpp_config(all_rules[::1+(i % 5)])
+            acl3.modify_vpp_config(all_rules[:: 1 + (i % 5)])
 
         # restore to how it was before and clean up
         acl_if.n_input = saved_n_input
 
         # restore to how it was before and clean up
         acl_if.n_input = saved_n_input
@@ -417,143 +446,200 @@ class TestACLpluginL2L3(VppTestCase):
         acl2.remove_vpp_config()
         acl3.remove_vpp_config()
 
         acl2.remove_vpp_config()
         acl3.remove_vpp_config()
 
-    def create_acls_for_a_stream(self, stream_dict,
-                                 test_l2_action, is_reflect):
-        r = stream_dict['rules']
-        r_permit = stream_dict['permit_rules']
-        r_permit_reflect = stream_dict['permit_and_reflect_rules']
+    def create_acls_for_a_stream(self, stream_dict, test_l2_action, is_reflect):
+        r = stream_dict["rules"]
+        r_permit = stream_dict["permit_rules"]
+        r_permit_reflect = stream_dict["permit_and_reflect_rules"]
         r_action = r_permit_reflect if is_reflect else r
         action_acl = VppAcl(self, rules=r_action, tag="act. acl")
         action_acl.add_vpp_config()
         permit_acl = VppAcl(self, rules=r_permit, tag="perm. acl")
         permit_acl.add_vpp_config()
 
         r_action = r_permit_reflect if is_reflect else r
         action_acl = VppAcl(self, rules=r_action, tag="act. acl")
         action_acl.add_vpp_config()
         permit_acl = VppAcl(self, rules=r_permit, tag="perm. acl")
         permit_acl.add_vpp_config()
 
-        return {'L2': action_acl if test_l2_action else permit_acl,
-                'L3': permit_acl if test_l2_action else action_acl,
-                'permit': permit_acl, 'action': action_acl}
-
-    def apply_acl_ip46_x_to_y(self, bridged_to_routed, test_l2_deny,
-                              is_ip6, is_reflect, add_eh):
-        """ Apply the ACLs
-        """
+        return {
+            "L2": action_acl if test_l2_action else permit_acl,
+            "L3": permit_acl if test_l2_action else action_acl,
+            "permit": permit_acl,
+            "action": action_acl,
+        }
+
+    def apply_acl_ip46_x_to_y(
+        self, bridged_to_routed, test_l2_deny, is_ip6, is_reflect, add_eh
+    ):
+        """Apply the ACLs"""
         self.reset_packet_infos()
         stream_dict = self.create_stream(
         self.reset_packet_infos()
         stream_dict = self.create_stream(
-            self.pg2, self.loop0,
+            self.pg2,
+            self.loop0,
             bridged_to_routed,
             bridged_to_routed,
-            self.pg_if_packet_sizes, is_ip6,
-            not is_reflect, False, add_eh)
-        stream = stream_dict['stream']
-        acl_idx = self.create_acls_for_a_stream(stream_dict, test_l2_deny,
-                                                is_reflect)
+            self.pg_if_packet_sizes,
+            is_ip6,
+            not is_reflect,
+            False,
+            add_eh,
+        )
+        stream = stream_dict["stream"]
+        acl_idx = self.create_acls_for_a_stream(stream_dict, test_l2_deny, is_reflect)
         n_input_l3 = 0 if bridged_to_routed else 1
         n_input_l2 = 1 if bridged_to_routed else 0
 
         n_input_l3 = 0 if bridged_to_routed else 1
         n_input_l2 = 1 if bridged_to_routed else 0
 
-        acl_if_pg2 = VppAclInterface(self, sw_if_index=self.pg2.sw_if_index,
-                                     n_input=n_input_l3, acls=[acl_idx['L3']])
+        acl_if_pg2 = VppAclInterface(
+            self,
+            sw_if_index=self.pg2.sw_if_index,
+            n_input=n_input_l3,
+            acls=[acl_idx["L3"]],
+        )
         acl_if_pg2.add_vpp_config()
 
         acl_if_pg2.add_vpp_config()
 
-        acl_if_pg0 = VppAclInterface(self, sw_if_index=self.pg0.sw_if_index,
-                                     n_input=n_input_l2, acls=[acl_idx['L2']])
+        acl_if_pg0 = VppAclInterface(
+            self,
+            sw_if_index=self.pg0.sw_if_index,
+            n_input=n_input_l2,
+            acls=[acl_idx["L2"]],
+        )
         acl_if_pg0.add_vpp_config()
 
         acl_if_pg0.add_vpp_config()
 
-        acl_if_pg1 = VppAclInterface(self, sw_if_index=self.pg1.sw_if_index,
-                                     n_input=n_input_l2, acls=[acl_idx['L2']])
+        acl_if_pg1 = VppAclInterface(
+            self,
+            sw_if_index=self.pg1.sw_if_index,
+            n_input=n_input_l2,
+            acls=[acl_idx["L2"]],
+        )
         acl_if_pg1.add_vpp_config()
 
         self.applied_acl_shuffle(acl_if_pg0)
         self.applied_acl_shuffle(acl_if_pg1)
         acl_if_pg1.add_vpp_config()
 
         self.applied_acl_shuffle(acl_if_pg0)
         self.applied_acl_shuffle(acl_if_pg1)
-        return {'L2': acl_idx['L2'], 'L3': acl_idx['L3']}
+        return {"L2": acl_idx["L2"], "L3": acl_idx["L3"]}
 
 
-    def apply_acl_ip46_both_directions_reflect(self,
-                                               primary_is_bridged_to_routed,
-                                               reflect_on_l2, is_ip6, add_eh,
-                                               stateful_icmp):
+    def apply_acl_ip46_both_directions_reflect(
+        self, primary_is_bridged_to_routed, reflect_on_l2, is_ip6, add_eh, stateful_icmp
+    ):
         primary_is_routed_to_bridged = not primary_is_bridged_to_routed
         self.reset_packet_infos()
         primary_is_routed_to_bridged = not primary_is_bridged_to_routed
         self.reset_packet_infos()
-        stream_dict_fwd = self.create_stream(self.pg2, self.loop0,
-                                             primary_is_bridged_to_routed,
-                                             self.pg_if_packet_sizes, is_ip6,
-                                             False, False, add_eh,
-                                             stateful_icmp)
-        acl_idx_fwd = self.create_acls_for_a_stream(stream_dict_fwd,
-                                                    reflect_on_l2, True)
-
-        stream_dict_rev = self.create_stream(self.pg2, self.loop0,
-                                             not primary_is_bridged_to_routed,
-                                             self.pg_if_packet_sizes, is_ip6,
-                                             True, True, add_eh, stateful_icmp)
+        stream_dict_fwd = self.create_stream(
+            self.pg2,
+            self.loop0,
+            primary_is_bridged_to_routed,
+            self.pg_if_packet_sizes,
+            is_ip6,
+            False,
+            False,
+            add_eh,
+            stateful_icmp,
+        )
+        acl_idx_fwd = self.create_acls_for_a_stream(
+            stream_dict_fwd, reflect_on_l2, True
+        )
+
+        stream_dict_rev = self.create_stream(
+            self.pg2,
+            self.loop0,
+            not primary_is_bridged_to_routed,
+            self.pg_if_packet_sizes,
+            is_ip6,
+            True,
+            True,
+            add_eh,
+            stateful_icmp,
+        )
         # We want the primary action to be "deny" rather than reflect
         # We want the primary action to be "deny" rather than reflect
-        acl_idx_rev = self.create_acls_for_a_stream(stream_dict_rev,
-                                                    reflect_on_l2, False)
+        acl_idx_rev = self.create_acls_for_a_stream(
+            stream_dict_rev, reflect_on_l2, False
+        )
 
         if primary_is_bridged_to_routed:
 
         if primary_is_bridged_to_routed:
-            inbound_l2_acl = acl_idx_fwd['L2']
+            inbound_l2_acl = acl_idx_fwd["L2"]
         else:
         else:
-            inbound_l2_acl = acl_idx_rev['L2']
+            inbound_l2_acl = acl_idx_rev["L2"]
 
         if primary_is_routed_to_bridged:
 
         if primary_is_routed_to_bridged:
-            outbound_l2_acl = acl_idx_fwd['L2']
+            outbound_l2_acl = acl_idx_fwd["L2"]
         else:
         else:
-            outbound_l2_acl = acl_idx_rev['L2']
+            outbound_l2_acl = acl_idx_rev["L2"]
 
         if primary_is_routed_to_bridged:
 
         if primary_is_routed_to_bridged:
-            inbound_l3_acl = acl_idx_fwd['L3']
+            inbound_l3_acl = acl_idx_fwd["L3"]
         else:
         else:
-            inbound_l3_acl = acl_idx_rev['L3']
+            inbound_l3_acl = acl_idx_rev["L3"]
 
         if primary_is_bridged_to_routed:
 
         if primary_is_bridged_to_routed:
-            outbound_l3_acl = acl_idx_fwd['L3']
+            outbound_l3_acl = acl_idx_fwd["L3"]
         else:
         else:
-            outbound_l3_acl = acl_idx_rev['L3']
-
-        acl_if_pg2 = VppAclInterface(self, sw_if_index=self.pg2.sw_if_index,
-                                     n_input=1,
-                                     acls=[inbound_l3_acl, outbound_l3_acl])
+            outbound_l3_acl = acl_idx_rev["L3"]
+
+        acl_if_pg2 = VppAclInterface(
+            self,
+            sw_if_index=self.pg2.sw_if_index,
+            n_input=1,
+            acls=[inbound_l3_acl, outbound_l3_acl],
+        )
         acl_if_pg2.add_vpp_config()
 
         acl_if_pg2.add_vpp_config()
 
-        acl_if_pg0 = VppAclInterface(self, sw_if_index=self.pg0.sw_if_index,
-                                     n_input=1,
-                                     acls=[inbound_l2_acl, outbound_l2_acl])
+        acl_if_pg0 = VppAclInterface(
+            self,
+            sw_if_index=self.pg0.sw_if_index,
+            n_input=1,
+            acls=[inbound_l2_acl, outbound_l2_acl],
+        )
         acl_if_pg0.add_vpp_config()
 
         acl_if_pg0.add_vpp_config()
 
-        acl_if_pg1 = VppAclInterface(self, sw_if_index=self.pg1.sw_if_index,
-                                     n_input=1,
-                                     acls=[inbound_l2_acl, outbound_l2_acl])
+        acl_if_pg1 = VppAclInterface(
+            self,
+            sw_if_index=self.pg1.sw_if_index,
+            n_input=1,
+            acls=[inbound_l2_acl, outbound_l2_acl],
+        )
         acl_if_pg1.add_vpp_config()
 
         self.applied_acl_shuffle(acl_if_pg0)
         self.applied_acl_shuffle(acl_if_pg2)
 
         acl_if_pg1.add_vpp_config()
 
         self.applied_acl_shuffle(acl_if_pg0)
         self.applied_acl_shuffle(acl_if_pg2)
 
-    def apply_acl_ip46_routed_to_bridged(self, test_l2_deny, is_ip6,
-                                         is_reflect, add_eh):
-        return self.apply_acl_ip46_x_to_y(False, test_l2_deny, is_ip6,
-                                          is_reflect, add_eh)
+    def apply_acl_ip46_routed_to_bridged(
+        self, test_l2_deny, is_ip6, is_reflect, add_eh
+    ):
+        return self.apply_acl_ip46_x_to_y(
+            False, test_l2_deny, is_ip6, is_reflect, add_eh
+        )
 
 
-    def apply_acl_ip46_bridged_to_routed(self, test_l2_deny, is_ip6,
-                                         is_reflect, add_eh):
-        return self.apply_acl_ip46_x_to_y(True, test_l2_deny, is_ip6,
-                                          is_reflect, add_eh)
+    def apply_acl_ip46_bridged_to_routed(
+        self, test_l2_deny, is_ip6, is_reflect, add_eh
+    ):
+        return self.apply_acl_ip46_x_to_y(
+            True, test_l2_deny, is_ip6, is_reflect, add_eh
+        )
 
     def verify_acl_packet_count(self, acl_idx, packet_count):
 
     def verify_acl_packet_count(self, acl_idx, packet_count):
-        matches = self.statistics.get_counter('/acl/%d/matches' % acl_idx)
+        matches = self.statistics.get_counter("/acl/%d/matches" % acl_idx)
         self.logger.info("stat seg for ACL %d: %s" % (acl_idx, repr(matches)))
         total_count = 0
         for m in matches:
             for p in m:
         self.logger.info("stat seg for ACL %d: %s" % (acl_idx, repr(matches)))
         total_count = 0
         for m in matches:
             for p in m:
-                total_count = total_count + p['packets']
+                total_count = total_count + p["packets"]
         self.assertEqual(total_count, packet_count)
 
         self.assertEqual(total_count, packet_count)
 
-    def run_traffic_ip46_x_to_y(self, bridged_to_routed,
-                                test_l2_deny, is_ip6,
-                                is_reflect, is_established, add_eh,
-                                stateful_icmp=False):
+    def run_traffic_ip46_x_to_y(
+        self,
+        bridged_to_routed,
+        test_l2_deny,
+        is_ip6,
+        is_reflect,
+        is_established,
+        add_eh,
+        stateful_icmp=False,
+    ):
         self.reset_packet_infos()
         self.reset_packet_infos()
-        stream_dict = self.create_stream(self.pg2, self.loop0,
-                                         bridged_to_routed,
-                                         self.pg_if_packet_sizes, is_ip6,
-                                         not is_reflect, is_established,
-                                         add_eh, stateful_icmp)
-        stream = stream_dict['stream']
+        stream_dict = self.create_stream(
+            self.pg2,
+            self.loop0,
+            bridged_to_routed,
+            self.pg_if_packet_sizes,
+            is_ip6,
+            not is_reflect,
+            is_established,
+            add_eh,
+            stateful_icmp,
+        )
+        stream = stream_dict["stream"]
 
         tx_if = self.pg0 if bridged_to_routed else self.pg2
         rx_if = self.pg2 if bridged_to_routed else self.pg0
 
         tx_if = self.pg0 if bridged_to_routed else self.pg2
         rx_if = self.pg2 if bridged_to_routed else self.pg0
@@ -566,68 +652,90 @@ class TestACLpluginL2L3(VppTestCase):
         self.verify_capture(self.loop0, self.pg2, rcvd1, bridged_to_routed)
         return len(stream)
 
         self.verify_capture(self.loop0, self.pg2, rcvd1, bridged_to_routed)
         return len(stream)
 
-    def run_traffic_ip46_routed_to_bridged(self, test_l2_deny, is_ip6,
-                                           is_reflect, is_established, add_eh,
-                                           stateful_icmp=False):
-        return self.run_traffic_ip46_x_to_y(False, test_l2_deny, is_ip6,
-                                            is_reflect, is_established, add_eh,
-                                            stateful_icmp)
-
-    def run_traffic_ip46_bridged_to_routed(self, test_l2_deny, is_ip6,
-                                           is_reflect, is_established, add_eh,
-                                           stateful_icmp=False):
-        return self.run_traffic_ip46_x_to_y(True, test_l2_deny, is_ip6,
-                                            is_reflect, is_established, add_eh,
-                                            stateful_icmp)
-
-    def run_test_ip46_routed_to_bridged(self, test_l2_deny,
-                                        is_ip6, is_reflect, add_eh):
-        acls = self.apply_acl_ip46_routed_to_bridged(test_l2_deny,
-                                                     is_ip6, is_reflect,
-                                                     add_eh)
-        pkts = self.run_traffic_ip46_routed_to_bridged(test_l2_deny, is_ip6,
-                                                       is_reflect, False,
-                                                       add_eh)
-        self.verify_acl_packet_count(acls['L3'].acl_index, pkts)
-
-    def run_test_ip46_bridged_to_routed(self, test_l2_deny,
-                                        is_ip6, is_reflect, add_eh):
-        acls = self.apply_acl_ip46_bridged_to_routed(test_l2_deny,
-                                                     is_ip6, is_reflect,
-                                                     add_eh)
-        pkts = self.run_traffic_ip46_bridged_to_routed(test_l2_deny, is_ip6,
-                                                       is_reflect, False,
-                                                       add_eh)
-        self.verify_acl_packet_count(acls['L2'].acl_index, pkts)
-
-    def run_test_ip46_routed_to_bridged_and_back(self, test_l2_action,
-                                                 is_ip6, add_eh,
-                                                 stateful_icmp=False):
-        self.apply_acl_ip46_both_directions_reflect(False, test_l2_action,
-                                                    is_ip6, add_eh,
-                                                    stateful_icmp)
-        self.run_traffic_ip46_routed_to_bridged(test_l2_action, is_ip6,
-                                                True, False, add_eh,
-                                                stateful_icmp)
-        self.run_traffic_ip46_bridged_to_routed(test_l2_action, is_ip6,
-                                                False, True, add_eh,
-                                                stateful_icmp)
-
-    def run_test_ip46_bridged_to_routed_and_back(self, test_l2_action,
-                                                 is_ip6, add_eh,
-                                                 stateful_icmp=False):
-        self.apply_acl_ip46_both_directions_reflect(True, test_l2_action,
-                                                    is_ip6, add_eh,
-                                                    stateful_icmp)
-        self.run_traffic_ip46_bridged_to_routed(test_l2_action, is_ip6,
-                                                True, False, add_eh,
-                                                stateful_icmp)
-        self.run_traffic_ip46_routed_to_bridged(test_l2_action, is_ip6,
-                                                False, True, add_eh,
-                                                stateful_icmp)
+    def run_traffic_ip46_routed_to_bridged(
+        self,
+        test_l2_deny,
+        is_ip6,
+        is_reflect,
+        is_established,
+        add_eh,
+        stateful_icmp=False,
+    ):
+        return self.run_traffic_ip46_x_to_y(
+            False,
+            test_l2_deny,
+            is_ip6,
+            is_reflect,
+            is_established,
+            add_eh,
+            stateful_icmp,
+        )
+
+    def run_traffic_ip46_bridged_to_routed(
+        self,
+        test_l2_deny,
+        is_ip6,
+        is_reflect,
+        is_established,
+        add_eh,
+        stateful_icmp=False,
+    ):
+        return self.run_traffic_ip46_x_to_y(
+            True,
+            test_l2_deny,
+            is_ip6,
+            is_reflect,
+            is_established,
+            add_eh,
+            stateful_icmp,
+        )
+
+    def run_test_ip46_routed_to_bridged(self, test_l2_deny, is_ip6, is_reflect, add_eh):
+        acls = self.apply_acl_ip46_routed_to_bridged(
+            test_l2_deny, is_ip6, is_reflect, add_eh
+        )
+        pkts = self.run_traffic_ip46_routed_to_bridged(
+            test_l2_deny, is_ip6, is_reflect, False, add_eh
+        )
+        self.verify_acl_packet_count(acls["L3"].acl_index, pkts)
+
+    def run_test_ip46_bridged_to_routed(self, test_l2_deny, is_ip6, is_reflect, add_eh):
+        acls = self.apply_acl_ip46_bridged_to_routed(
+            test_l2_deny, is_ip6, is_reflect, add_eh
+        )
+        pkts = self.run_traffic_ip46_bridged_to_routed(
+            test_l2_deny, is_ip6, is_reflect, False, add_eh
+        )
+        self.verify_acl_packet_count(acls["L2"].acl_index, pkts)
+
+    def run_test_ip46_routed_to_bridged_and_back(
+        self, test_l2_action, is_ip6, add_eh, stateful_icmp=False
+    ):
+        self.apply_acl_ip46_both_directions_reflect(
+            False, test_l2_action, is_ip6, add_eh, stateful_icmp
+        )
+        self.run_traffic_ip46_routed_to_bridged(
+            test_l2_action, is_ip6, True, False, add_eh, stateful_icmp
+        )
+        self.run_traffic_ip46_bridged_to_routed(
+            test_l2_action, is_ip6, False, True, add_eh, stateful_icmp
+        )
+
+    def run_test_ip46_bridged_to_routed_and_back(
+        self, test_l2_action, is_ip6, add_eh, stateful_icmp=False
+    ):
+        self.apply_acl_ip46_both_directions_reflect(
+            True, test_l2_action, is_ip6, add_eh, stateful_icmp
+        )
+        self.run_traffic_ip46_bridged_to_routed(
+            test_l2_action, is_ip6, True, False, add_eh, stateful_icmp
+        )
+        self.run_traffic_ip46_routed_to_bridged(
+            test_l2_action, is_ip6, False, True, add_eh, stateful_icmp
+        )
 
     def test_0000_ip6_irb_1(self):
 
     def test_0000_ip6_irb_1(self):
-        """ ACL plugin prepare"""
+        """ACL plugin prepare"""
         if not self.vpp_dead:
             cmd = "set acl-plugin session timeout udp idle 2000"
             self.logger.info(self.vapi.ppcli(cmd))
         if not self.vpp_dead:
             cmd = "set acl-plugin session timeout udp idle 2000"
             self.logger.info(self.vapi.ppcli(cmd))
@@ -646,219 +754,188 @@ class TestACLpluginL2L3(VppTestCase):
             #    "set acl-plugin l2-datapath old"))
 
     def test_0001_ip6_irb_1(self):
             #    "set acl-plugin l2-datapath old"))
 
     def test_0001_ip6_irb_1(self):
-        """ ACL IPv6 routed -> bridged, L2 ACL deny"""
-        self.run_test_ip46_routed_to_bridged(True, True, False,
-                                             self.WITHOUT_EH)
+        """ACL IPv6 routed -> bridged, L2 ACL deny"""
+        self.run_test_ip46_routed_to_bridged(True, True, False, self.WITHOUT_EH)
 
     def test_0002_ip6_irb_1(self):
 
     def test_0002_ip6_irb_1(self):
-        """ ACL IPv6 routed -> bridged, L3 ACL deny"""
-        self.run_test_ip46_routed_to_bridged(False, True, False,
-                                             self.WITHOUT_EH)
+        """ACL IPv6 routed -> bridged, L3 ACL deny"""
+        self.run_test_ip46_routed_to_bridged(False, True, False, self.WITHOUT_EH)
 
     def test_0003_ip4_irb_1(self):
 
     def test_0003_ip4_irb_1(self):
-        """ ACL IPv4 routed -> bridged, L2 ACL deny"""
-        self.run_test_ip46_routed_to_bridged(True, False, False,
-                                             self.WITHOUT_EH)
+        """ACL IPv4 routed -> bridged, L2 ACL deny"""
+        self.run_test_ip46_routed_to_bridged(True, False, False, self.WITHOUT_EH)
 
     def test_0004_ip4_irb_1(self):
 
     def test_0004_ip4_irb_1(self):
-        """ ACL IPv4 routed -> bridged, L3 ACL deny"""
-        self.run_test_ip46_routed_to_bridged(False, False, False,
-                                             self.WITHOUT_EH)
+        """ACL IPv4 routed -> bridged, L3 ACL deny"""
+        self.run_test_ip46_routed_to_bridged(False, False, False, self.WITHOUT_EH)
 
     def test_0005_ip6_irb_1(self):
 
     def test_0005_ip6_irb_1(self):
-        """ ACL IPv6 bridged -> routed, L2 ACL deny """
-        self.run_test_ip46_bridged_to_routed(True, True, False,
-                                             self.WITHOUT_EH)
+        """ACL IPv6 bridged -> routed, L2 ACL deny"""
+        self.run_test_ip46_bridged_to_routed(True, True, False, self.WITHOUT_EH)
 
     def test_0006_ip6_irb_1(self):
 
     def test_0006_ip6_irb_1(self):
-        """ ACL IPv6 bridged -> routed, L3 ACL deny """
-        self.run_test_ip46_bridged_to_routed(False, True, False,
-                                             self.WITHOUT_EH)
+        """ACL IPv6 bridged -> routed, L3 ACL deny"""
+        self.run_test_ip46_bridged_to_routed(False, True, False, self.WITHOUT_EH)
 
     def test_0007_ip6_irb_1(self):
 
     def test_0007_ip6_irb_1(self):
-        """ ACL IPv4 bridged -> routed, L2 ACL deny """
-        self.run_test_ip46_bridged_to_routed(True, False, False,
-                                             self.WITHOUT_EH)
+        """ACL IPv4 bridged -> routed, L2 ACL deny"""
+        self.run_test_ip46_bridged_to_routed(True, False, False, self.WITHOUT_EH)
 
     def test_0008_ip6_irb_1(self):
 
     def test_0008_ip6_irb_1(self):
-        """ ACL IPv4 bridged -> routed, L3 ACL deny """
-        self.run_test_ip46_bridged_to_routed(False, False, False,
-                                             self.WITHOUT_EH)
+        """ACL IPv4 bridged -> routed, L3 ACL deny"""
+        self.run_test_ip46_bridged_to_routed(False, False, False, self.WITHOUT_EH)
 
     # Stateful ACL tests
     def test_0101_ip6_irb_1(self):
 
     # Stateful ACL tests
     def test_0101_ip6_irb_1(self):
-        """ ACL IPv6 routed -> bridged, L2 ACL permit+reflect"""
-        self.run_test_ip46_routed_to_bridged_and_back(True, True,
-                                                      self.WITHOUT_EH)
+        """ACL IPv6 routed -> bridged, L2 ACL permit+reflect"""
+        self.run_test_ip46_routed_to_bridged_and_back(True, True, self.WITHOUT_EH)
 
     def test_0102_ip6_irb_1(self):
 
     def test_0102_ip6_irb_1(self):
-        """ ACL IPv6 bridged -> routed, L2 ACL permit+reflect"""
-        self.run_test_ip46_bridged_to_routed_and_back(True, True,
-                                                      self.WITHOUT_EH)
+        """ACL IPv6 bridged -> routed, L2 ACL permit+reflect"""
+        self.run_test_ip46_bridged_to_routed_and_back(True, True, self.WITHOUT_EH)
 
     def test_0103_ip6_irb_1(self):
 
     def test_0103_ip6_irb_1(self):
-        """ ACL IPv4 routed -> bridged, L2 ACL permit+reflect"""
-        self.run_test_ip46_routed_to_bridged_and_back(True, False,
-                                                      self.WITHOUT_EH)
+        """ACL IPv4 routed -> bridged, L2 ACL permit+reflect"""
+        self.run_test_ip46_routed_to_bridged_and_back(True, False, self.WITHOUT_EH)
 
     def test_0104_ip6_irb_1(self):
 
     def test_0104_ip6_irb_1(self):
-        """ ACL IPv4 bridged -> routed, L2 ACL permit+reflect"""
-        self.run_test_ip46_bridged_to_routed_and_back(True, False,
-                                                      self.WITHOUT_EH)
+        """ACL IPv4 bridged -> routed, L2 ACL permit+reflect"""
+        self.run_test_ip46_bridged_to_routed_and_back(True, False, self.WITHOUT_EH)
 
     def test_0111_ip6_irb_1(self):
 
     def test_0111_ip6_irb_1(self):
-        """ ACL IPv6 routed -> bridged, L3 ACL permit+reflect"""
-        self.run_test_ip46_routed_to_bridged_and_back(False, True,
-                                                      self.WITHOUT_EH)
+        """ACL IPv6 routed -> bridged, L3 ACL permit+reflect"""
+        self.run_test_ip46_routed_to_bridged_and_back(False, True, self.WITHOUT_EH)
 
     def test_0112_ip6_irb_1(self):
 
     def test_0112_ip6_irb_1(self):
-        """ ACL IPv6 bridged -> routed, L3 ACL permit+reflect"""
-        self.run_test_ip46_bridged_to_routed_and_back(False, True,
-                                                      self.WITHOUT_EH)
+        """ACL IPv6 bridged -> routed, L3 ACL permit+reflect"""
+        self.run_test_ip46_bridged_to_routed_and_back(False, True, self.WITHOUT_EH)
 
     def test_0113_ip6_irb_1(self):
 
     def test_0113_ip6_irb_1(self):
-        """ ACL IPv4 routed -> bridged, L3 ACL permit+reflect"""
-        self.run_test_ip46_routed_to_bridged_and_back(False, False,
-                                                      self.WITHOUT_EH)
+        """ACL IPv4 routed -> bridged, L3 ACL permit+reflect"""
+        self.run_test_ip46_routed_to_bridged_and_back(False, False, self.WITHOUT_EH)
 
     def test_0114_ip6_irb_1(self):
 
     def test_0114_ip6_irb_1(self):
-        """ ACL IPv4 bridged -> routed, L3 ACL permit+reflect"""
-        self.run_test_ip46_bridged_to_routed_and_back(False, False,
-                                                      self.WITHOUT_EH)
+        """ACL IPv4 bridged -> routed, L3 ACL permit+reflect"""
+        self.run_test_ip46_bridged_to_routed_and_back(False, False, self.WITHOUT_EH)
 
     # A block of tests with extension headers
 
     def test_1001_ip6_irb_1(self):
 
     # A block of tests with extension headers
 
     def test_1001_ip6_irb_1(self):
-        """ ACL IPv6+EH routed -> bridged, L2 ACL deny"""
-        self.run_test_ip46_routed_to_bridged(True, True, False,
-                                             self.WITH_EH)
+        """ACL IPv6+EH routed -> bridged, L2 ACL deny"""
+        self.run_test_ip46_routed_to_bridged(True, True, False, self.WITH_EH)
 
     def test_1002_ip6_irb_1(self):
 
     def test_1002_ip6_irb_1(self):
-        """ ACL IPv6+EH routed -> bridged, L3 ACL deny"""
-        self.run_test_ip46_routed_to_bridged(False, True, False,
-                                             self.WITH_EH)
+        """ACL IPv6+EH routed -> bridged, L3 ACL deny"""
+        self.run_test_ip46_routed_to_bridged(False, True, False, self.WITH_EH)
 
     def test_1005_ip6_irb_1(self):
 
     def test_1005_ip6_irb_1(self):
-        """ ACL IPv6+EH bridged -> routed, L2 ACL deny """
-        self.run_test_ip46_bridged_to_routed(True, True, False,
-                                             self.WITH_EH)
+        """ACL IPv6+EH bridged -> routed, L2 ACL deny"""
+        self.run_test_ip46_bridged_to_routed(True, True, False, self.WITH_EH)
 
     def test_1006_ip6_irb_1(self):
 
     def test_1006_ip6_irb_1(self):
-        """ ACL IPv6+EH bridged -> routed, L3 ACL deny """
-        self.run_test_ip46_bridged_to_routed(False, True, False,
-                                             self.WITH_EH)
+        """ACL IPv6+EH bridged -> routed, L3 ACL deny"""
+        self.run_test_ip46_bridged_to_routed(False, True, False, self.WITH_EH)
 
     def test_1101_ip6_irb_1(self):
 
     def test_1101_ip6_irb_1(self):
-        """ ACL IPv6+EH routed -> bridged, L2 ACL permit+reflect"""
-        self.run_test_ip46_routed_to_bridged_and_back(True, True,
-                                                      self.WITH_EH)
+        """ACL IPv6+EH routed -> bridged, L2 ACL permit+reflect"""
+        self.run_test_ip46_routed_to_bridged_and_back(True, True, self.WITH_EH)
 
     def test_1102_ip6_irb_1(self):
 
     def test_1102_ip6_irb_1(self):
-        """ ACL IPv6+EH bridged -> routed, L2 ACL permit+reflect"""
-        self.run_test_ip46_bridged_to_routed_and_back(True, True,
-                                                      self.WITH_EH)
+        """ACL IPv6+EH bridged -> routed, L2 ACL permit+reflect"""
+        self.run_test_ip46_bridged_to_routed_and_back(True, True, self.WITH_EH)
 
     def test_1111_ip6_irb_1(self):
 
     def test_1111_ip6_irb_1(self):
-        """ ACL IPv6+EH routed -> bridged, L3 ACL permit+reflect"""
-        self.run_test_ip46_routed_to_bridged_and_back(False, True,
-                                                      self.WITH_EH)
+        """ACL IPv6+EH routed -> bridged, L3 ACL permit+reflect"""
+        self.run_test_ip46_routed_to_bridged_and_back(False, True, self.WITH_EH)
 
     def test_1112_ip6_irb_1(self):
 
     def test_1112_ip6_irb_1(self):
-        """ ACL IPv6+EH bridged -> routed, L3 ACL permit+reflect"""
-        self.run_test_ip46_bridged_to_routed_and_back(False, True,
-                                                      self.WITH_EH)
+        """ACL IPv6+EH bridged -> routed, L3 ACL permit+reflect"""
+        self.run_test_ip46_bridged_to_routed_and_back(False, True, self.WITH_EH)
 
     # IPv4 with "MF" bit set
 
     def test_1201_ip6_irb_1(self):
 
     # IPv4 with "MF" bit set
 
     def test_1201_ip6_irb_1(self):
-        """ ACL IPv4+MF routed -> bridged, L2 ACL deny"""
-        self.run_test_ip46_routed_to_bridged(True, False, False,
-                                             self.WITH_EH)
+        """ACL IPv4+MF routed -> bridged, L2 ACL deny"""
+        self.run_test_ip46_routed_to_bridged(True, False, False, self.WITH_EH)
 
     def test_1202_ip6_irb_1(self):
 
     def test_1202_ip6_irb_1(self):
-        """ ACL IPv4+MF routed -> bridged, L3 ACL deny"""
-        self.run_test_ip46_routed_to_bridged(False, False, False,
-                                             self.WITH_EH)
+        """ACL IPv4+MF routed -> bridged, L3 ACL deny"""
+        self.run_test_ip46_routed_to_bridged(False, False, False, self.WITH_EH)
 
     def test_1205_ip6_irb_1(self):
 
     def test_1205_ip6_irb_1(self):
-        """ ACL IPv4+MF bridged -> routed, L2 ACL deny """
-        self.run_test_ip46_bridged_to_routed(True, False, False,
-                                             self.WITH_EH)
+        """ACL IPv4+MF bridged -> routed, L2 ACL deny"""
+        self.run_test_ip46_bridged_to_routed(True, False, False, self.WITH_EH)
 
     def test_1206_ip6_irb_1(self):
 
     def test_1206_ip6_irb_1(self):
-        """ ACL IPv4+MF bridged -> routed, L3 ACL deny """
-        self.run_test_ip46_bridged_to_routed(False, False, False,
-                                             self.WITH_EH)
+        """ACL IPv4+MF bridged -> routed, L3 ACL deny"""
+        self.run_test_ip46_bridged_to_routed(False, False, False, self.WITH_EH)
 
     def test_1301_ip6_irb_1(self):
 
     def test_1301_ip6_irb_1(self):
-        """ ACL IPv4+MF routed -> bridged, L2 ACL permit+reflect"""
-        self.run_test_ip46_routed_to_bridged_and_back(True, False,
-                                                      self.WITH_EH)
+        """ACL IPv4+MF routed -> bridged, L2 ACL permit+reflect"""
+        self.run_test_ip46_routed_to_bridged_and_back(True, False, self.WITH_EH)
 
     def test_1302_ip6_irb_1(self):
 
     def test_1302_ip6_irb_1(self):
-        """ ACL IPv4+MF bridged -> routed, L2 ACL permit+reflect"""
-        self.run_test_ip46_bridged_to_routed_and_back(True, False,
-                                                      self.WITH_EH)
+        """ACL IPv4+MF bridged -> routed, L2 ACL permit+reflect"""
+        self.run_test_ip46_bridged_to_routed_and_back(True, False, self.WITH_EH)
 
     def test_1311_ip6_irb_1(self):
 
     def test_1311_ip6_irb_1(self):
-        """ ACL IPv4+MF routed -> bridged, L3 ACL permit+reflect"""
-        self.run_test_ip46_routed_to_bridged_and_back(False, False,
-                                                      self.WITH_EH)
+        """ACL IPv4+MF routed -> bridged, L3 ACL permit+reflect"""
+        self.run_test_ip46_routed_to_bridged_and_back(False, False, self.WITH_EH)
 
     def test_1312_ip6_irb_1(self):
 
     def test_1312_ip6_irb_1(self):
-        """ ACL IPv4+MF bridged -> routed, L3 ACL permit+reflect"""
-        self.run_test_ip46_bridged_to_routed_and_back(False, False,
-                                                      self.WITH_EH)
+        """ACL IPv4+MF bridged -> routed, L3 ACL permit+reflect"""
+        self.run_test_ip46_bridged_to_routed_and_back(False, False, self.WITH_EH)
+
     # Stateful ACL tests with stateful ICMP
 
     def test_1401_ip6_irb_1(self):
     # Stateful ACL tests with stateful ICMP
 
     def test_1401_ip6_irb_1(self):
-        """ IPv6 routed -> bridged, L2 ACL permit+reflect, ICMP reflect"""
-        self.run_test_ip46_routed_to_bridged_and_back(True, True,
-                                                      self.WITHOUT_EH,
-                                                      self.STATEFUL_ICMP)
+        """IPv6 routed -> bridged, L2 ACL permit+reflect, ICMP reflect"""
+        self.run_test_ip46_routed_to_bridged_and_back(
+            True, True, self.WITHOUT_EH, self.STATEFUL_ICMP
+        )
 
     def test_1402_ip6_irb_1(self):
 
     def test_1402_ip6_irb_1(self):
-        """ IPv6 bridged -> routed, L2 ACL permit+reflect, ICMP reflect"""
-        self.run_test_ip46_bridged_to_routed_and_back(True, True,
-                                                      self.WITHOUT_EH,
-                                                      self.STATEFUL_ICMP)
+        """IPv6 bridged -> routed, L2 ACL permit+reflect, ICMP reflect"""
+        self.run_test_ip46_bridged_to_routed_and_back(
+            True, True, self.WITHOUT_EH, self.STATEFUL_ICMP
+        )
 
     def test_1403_ip4_irb_1(self):
 
     def test_1403_ip4_irb_1(self):
-        """ IPv4 routed -> bridged, L2 ACL permit+reflect, ICMP reflect"""
-        self.run_test_ip46_routed_to_bridged_and_back(True, False,
-                                                      self.WITHOUT_EH,
-                                                      self.STATEFUL_ICMP)
+        """IPv4 routed -> bridged, L2 ACL permit+reflect, ICMP reflect"""
+        self.run_test_ip46_routed_to_bridged_and_back(
+            True, False, self.WITHOUT_EH, self.STATEFUL_ICMP
+        )
 
     def test_1404_ip4_irb_1(self):
 
     def test_1404_ip4_irb_1(self):
-        """ IPv4 bridged -> routed, L2 ACL permit+reflect, ICMP reflect"""
-        self.run_test_ip46_bridged_to_routed_and_back(True, False,
-                                                      self.WITHOUT_EH,
-                                                      self.STATEFUL_ICMP)
+        """IPv4 bridged -> routed, L2 ACL permit+reflect, ICMP reflect"""
+        self.run_test_ip46_bridged_to_routed_and_back(
+            True, False, self.WITHOUT_EH, self.STATEFUL_ICMP
+        )
 
     def test_1411_ip6_irb_1(self):
 
     def test_1411_ip6_irb_1(self):
-        """ IPv6 routed -> bridged, L3 ACL permit+reflect, ICMP reflect"""
-        self.run_test_ip46_routed_to_bridged_and_back(False, True,
-                                                      self.WITHOUT_EH,
-                                                      self.STATEFUL_ICMP)
+        """IPv6 routed -> bridged, L3 ACL permit+reflect, ICMP reflect"""
+        self.run_test_ip46_routed_to_bridged_and_back(
+            False, True, self.WITHOUT_EH, self.STATEFUL_ICMP
+        )
 
     def test_1412_ip6_irb_1(self):
 
     def test_1412_ip6_irb_1(self):
-        """ IPv6 bridged -> routed, L3 ACL permit+reflect, ICMP reflect"""
-        self.run_test_ip46_bridged_to_routed_and_back(False, True,
-                                                      self.WITHOUT_EH,
-                                                      self.STATEFUL_ICMP)
+        """IPv6 bridged -> routed, L3 ACL permit+reflect, ICMP reflect"""
+        self.run_test_ip46_bridged_to_routed_and_back(
+            False, True, self.WITHOUT_EH, self.STATEFUL_ICMP
+        )
 
     def test_1413_ip4_irb_1(self):
 
     def test_1413_ip4_irb_1(self):
-        """ IPv4 routed -> bridged, L3 ACL permit+reflect, ICMP reflect"""
-        self.run_test_ip46_routed_to_bridged_and_back(False, False,
-                                                      self.WITHOUT_EH,
-                                                      self.STATEFUL_ICMP)
+        """IPv4 routed -> bridged, L3 ACL permit+reflect, ICMP reflect"""
+        self.run_test_ip46_routed_to_bridged_and_back(
+            False, False, self.WITHOUT_EH, self.STATEFUL_ICMP
+        )
 
     def test_1414_ip4_irb_1(self):
 
     def test_1414_ip4_irb_1(self):
-        """ IPv4 bridged -> routed, L3 ACL permit+reflect, ICMP reflect"""
-        self.run_test_ip46_bridged_to_routed_and_back(False, False,
-                                                      self.WITHOUT_EH,
-                                                      self.STATEFUL_ICMP)
+        """IPv4 bridged -> routed, L3 ACL permit+reflect, ICMP reflect"""
+        self.run_test_ip46_bridged_to_routed_and_back(
+            False, False, self.WITHOUT_EH, self.STATEFUL_ICMP
+        )
 
 
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index 5353c16..6a1ba58 100644 (file)
@@ -1,5 +1,6 @@
 #!/usr/bin/env python3
 from __future__ import print_function
 #!/usr/bin/env python3
 from __future__ import print_function
+
 """ACL plugin - MACIP tests
 """
 import binascii
 """ACL plugin - MACIP tests
 """
 import binascii
@@ -20,10 +21,21 @@ from scapy.layers.inet6 import IPv6
 from framework import VppTestCase, VppTestRunner
 from vpp_lo_interface import VppLoInterface
 from vpp_l2 import L2_PORT_TYPE
 from framework import VppTestCase, VppTestRunner
 from vpp_lo_interface import VppLoInterface
 from vpp_l2 import L2_PORT_TYPE
-from vpp_sub_interface import L2_VTR_OP, VppSubInterface, VppDot1QSubint, \
-    VppDot1ADSubint
-from vpp_acl import AclRule, VppAcl, VppAclInterface, VppEtypeWhitelist, \
-    VppMacipAclInterface, VppMacipAcl, MacipRule
+from vpp_sub_interface import (
+    L2_VTR_OP,
+    VppSubInterface,
+    VppDot1QSubint,
+    VppDot1ADSubint,
+)
+from vpp_acl import (
+    AclRule,
+    VppAcl,
+    VppAclInterface,
+    VppEtypeWhitelist,
+    VppMacipAclInterface,
+    VppMacipAcl,
+    MacipRule,
+)
 from vpp_papi import MACAddress
 
 
 from vpp_papi import MACAddress
 
 
@@ -79,16 +91,13 @@ class MethodHolder(VppTestCase):
                 VppDot1QSubint(cls, cls.pg1, 10),
                 VppDot1ADSubint(cls, cls.pg2, 20, 300, 400),
                 VppDot1QSubint(cls, cls.pg3, 30),
                 VppDot1QSubint(cls, cls.pg1, 10),
                 VppDot1ADSubint(cls, cls.pg2, 20, 300, 400),
                 VppDot1QSubint(cls, cls.pg3, 30),
-                VppDot1ADSubint(cls, cls.pg3, 40, 600, 700)]
+                VppDot1ADSubint(cls, cls.pg3, 40, 600, 700),
+            ]
 
 
-            cls.subifs[0].set_vtr(L2_VTR_OP.L2_POP_1,
-                                  inner=10, push1q=1)
-            cls.subifs[1].set_vtr(L2_VTR_OP.L2_POP_2,
-                                  outer=300, inner=400, push1q=1)
-            cls.subifs[2].set_vtr(L2_VTR_OP.L2_POP_1,
-                                  inner=30, push1q=1)
-            cls.subifs[3].set_vtr(L2_VTR_OP.L2_POP_2,
-                                  outer=600, inner=700, push1q=1)
+            cls.subifs[0].set_vtr(L2_VTR_OP.L2_POP_1, inner=10, push1q=1)
+            cls.subifs[1].set_vtr(L2_VTR_OP.L2_POP_2, outer=300, inner=400, push1q=1)
+            cls.subifs[2].set_vtr(L2_VTR_OP.L2_POP_1, inner=30, push1q=1)
+            cls.subifs[3].set_vtr(L2_VTR_OP.L2_POP_2, outer=600, inner=700, push1q=1)
 
             cls.interfaces = list(cls.pg_interfaces)
             cls.interfaces.extend(cls.lo_interfaces)
 
             cls.interfaces = list(cls.pg_interfaces)
             cls.interfaces.extend(cls.lo_interfaces)
@@ -99,16 +108,22 @@ class MethodHolder(VppTestCase):
 
             # Create BD with MAC learning enabled and put interfaces to this BD
             cls.vapi.sw_interface_set_l2_bridge(
 
             # Create BD with MAC learning enabled and put interfaces to this BD
             cls.vapi.sw_interface_set_l2_bridge(
-                rx_sw_if_index=cls.loop0.sw_if_index, bd_id=cls.bd_id,
-                port_type=L2_PORT_TYPE.BVI)
+                rx_sw_if_index=cls.loop0.sw_if_index,
+                bd_id=cls.bd_id,
+                port_type=L2_PORT_TYPE.BVI,
+            )
             cls.vapi.sw_interface_set_l2_bridge(
             cls.vapi.sw_interface_set_l2_bridge(
-                rx_sw_if_index=cls.pg0.sw_if_index, bd_id=cls.bd_id)
+                rx_sw_if_index=cls.pg0.sw_if_index, bd_id=cls.bd_id
+            )
             cls.vapi.sw_interface_set_l2_bridge(
             cls.vapi.sw_interface_set_l2_bridge(
-                rx_sw_if_index=cls.pg1.sw_if_index, bd_id=cls.bd_id)
+                rx_sw_if_index=cls.pg1.sw_if_index, bd_id=cls.bd_id
+            )
             cls.vapi.sw_interface_set_l2_bridge(
             cls.vapi.sw_interface_set_l2_bridge(
-                rx_sw_if_index=cls.subifs[0].sw_if_index, bd_id=cls.bd_id)
+                rx_sw_if_index=cls.subifs[0].sw_if_index, bd_id=cls.bd_id
+            )
             cls.vapi.sw_interface_set_l2_bridge(
             cls.vapi.sw_interface_set_l2_bridge(
-                rx_sw_if_index=cls.subifs[1].sw_if_index, bd_id=cls.bd_id)
+                rx_sw_if_index=cls.subifs[1].sw_if_index, bd_id=cls.bd_id
+            )
 
             # Configure IPv4/6 addresses on loop interface and routed interface
             cls.loop0.config_ip4()
 
             # Configure IPv4/6 addresses on loop interface and routed interface
             cls.loop0.config_ip4()
@@ -122,7 +137,7 @@ class MethodHolder(VppTestCase):
             cls.loop0.generate_remote_hosts(cls.remote_hosts_count)
             # Modify host mac addresses to have different OUI parts
             for i in range(2, cls.remote_hosts_count + 2):
             cls.loop0.generate_remote_hosts(cls.remote_hosts_count)
             # Modify host mac addresses to have different OUI parts
             for i in range(2, cls.remote_hosts_count + 2):
-                mac = cls.loop0.remote_hosts[i-2]._mac.split(':')
+                mac = cls.loop0.remote_hosts[i - 2]._mac.split(":")
                 mac[2] = format(int(mac[2], 16) + i, "02x")
                 cls.loop0.remote_hosts[i - 2]._mac = ":".join(mac)
 
                 mac[2] = format(int(mac[2], 16) + i, "02x")
                 cls.loop0.remote_hosts[i - 2]._mac = ":".join(mac)
 
@@ -198,18 +213,19 @@ class MethodHolder(VppTestCase):
                     """
         return acls
 
                     """
         return acls
 
-    def create_rules(self, mac_type=EXACT_MAC, ip_type=EXACT_IP,
-                     acl_count=1, rules_count=None):
+    def create_rules(
+        self, mac_type=EXACT_MAC, ip_type=EXACT_IP, acl_count=1, rules_count=None
+    ):
         acls = []
         if rules_count is None:
             rules_count = [1]
         src_mac = int("220000dead00", 16)
         acls = []
         if rules_count is None:
             rules_count = [1]
         src_mac = int("220000dead00", 16)
-        for acl in range(2, (acl_count+1) * 2):
+        for acl in range(2, (acl_count + 1) * 2):
             rules = []
             host = random.choice(self.loop0.remote_hosts)
             is_ip6 = acl % 2
             rules = []
             host = random.choice(self.loop0.remote_hosts)
             is_ip6 = acl % 2
-            ip4 = host.ip4.split('.')
-            ip6 = list(unpack('<16B', inet_pton(AF_INET6, host.ip6)))
+            ip4 = host.ip4.split(".")
+            ip6 = list(unpack("<16B", inet_pton(AF_INET6, host.ip6)))
 
             if ip_type == self.EXACT_IP:
                 prefix_len4 = 32
 
             if ip_type == self.EXACT_IP:
                 prefix_len4 = 32
@@ -241,11 +257,12 @@ class MethodHolder(VppTestCase):
                 if mac_type == self.WILD_MAC:
                     mac = "00:00:00:00:00:00"
                 elif mac_type == self.OUI_MAC:
                 if mac_type == self.WILD_MAC:
                     mac = "00:00:00:00:00:00"
                 elif mac_type == self.OUI_MAC:
-                    mac = ':'.join(re.findall('..', '{:02x}'.format(
-                        src_mac))[:3])+":00:00:00"
+                    mac = (
+                        ":".join(re.findall("..", "{:02x}".format(src_mac))[:3])
+                        + ":00:00:00"
+                    )
                 else:
                 else:
-                    mac = ':'.join(re.findall(
-                        '..', '{:02x}'.format(src_mac)))
+                    mac = ":".join(re.findall("..", "{:02x}".format(src_mac)))
 
                 if ip_type == self.EXACT_IP:
                     ip4[3] = random.randint(100, 200)
 
                 if ip_type == self.EXACT_IP:
                     ip4[3] = random.randint(100, 200)
@@ -255,14 +272,16 @@ class MethodHolder(VppTestCase):
                     ip4[3] = 0
                     ip6[7] = random.randint(100, 200)
                     ip6[15] = 0
                     ip4[3] = 0
                     ip6[7] = random.randint(100, 200)
                     ip6[15] = 0
-                ip_pack = b''
+                ip_pack = b""
                 for j in range(0, len(ip)):
                 for j in range(0, len(ip)):
-                    ip_pack += pack('<B', int(ip[j]))
-
-                rule = MacipRule(is_permit=self.PERMIT,
-                                 src_prefix=ip_network((ip_pack, ip_len)),
-                                 src_mac=MACAddress(mac).packed,
-                                 src_mac_mask=MACAddress(mask).packed)
+                    ip_pack += pack("<B", int(ip[j]))
+
+                rule = MacipRule(
+                    is_permit=self.PERMIT,
+                    src_prefix=ip_network((ip_pack, ip_len)),
+                    src_mac=MACAddress(mac).packed,
+                    src_mac_mask=MACAddress(mask).packed,
+                )
                 rules.append(rule)
                 if ip_type == self.WILD_IP:
                     break
                 rules.append(rule)
                 if ip_type == self.WILD_IP:
                     break
@@ -281,8 +300,8 @@ class MethodHolder(VppTestCase):
 
     def verify_macip_acls(self, acl_count, rules_count, expected_count=2):
         reply = self.macip_acl_dump_debug()
 
     def verify_macip_acls(self, acl_count, rules_count, expected_count=2):
         reply = self.macip_acl_dump_debug()
-        for acl in range(2, (acl_count+1) * 2):
-            self.assertEqual(reply[acl - 2].count, rules_count[acl//2-1])
+        for acl in range(2, (acl_count + 1) * 2):
+            self.assertEqual(reply[acl - 2].count, rules_count[acl // 2 - 1])
 
         self.vapi.macip_acl_interface_get()
 
 
         self.vapi.macip_acl_interface_get()
 
@@ -292,8 +311,17 @@ class MethodHolder(VppTestCase):
         reply = self.vapi.macip_acl_interface_get()
         self.assertEqual(reply.count, expected_count)
 
         reply = self.vapi.macip_acl_interface_get()
         self.assertEqual(reply.count, expected_count)
 
-    def create_stream(self, mac_type, ip_type, packet_count,
-                      src_if, dst_if, traffic, is_ip6, tags=PERMIT_TAGS):
+    def create_stream(
+        self,
+        mac_type,
+        ip_type,
+        packet_count,
+        src_if,
+        dst_if,
+        traffic,
+        is_ip6,
+        tags=PERMIT_TAGS,
+    ):
         # exact MAC and exact IP
         # exact MAC and subnet of IPs
         # exact MAC and wildcard IP
         # exact MAC and exact IP
         # exact MAC and subnet of IPs
         # exact MAC and wildcard IP
@@ -329,7 +357,7 @@ class MethodHolder(VppTestCase):
             if traffic == self.BRIDGED:
                 if is_permit:
                     src_mac = remote_dst_host._mac
             if traffic == self.BRIDGED:
                 if is_permit:
                     src_mac = remote_dst_host._mac
-                    dst_mac = 'de:ad:00:00:00:00'
+                    dst_mac = "de:ad:00:00:00:00"
                     src_ip4 = remote_dst_host.ip4
                     dst_ip4 = src_if.remote_ip4
                     src_ip6 = remote_dst_host.ip6
                     src_ip4 = remote_dst_host.ip4
                     dst_ip4 = src_if.remote_ip4
                     src_ip6 = remote_dst_host.ip6
@@ -337,8 +365,8 @@ class MethodHolder(VppTestCase):
                     ip_permit = src_ip6 if is_ip6 else src_ip4
                     mac_permit = src_mac
                 if denyMAC:
                     ip_permit = src_ip6 if is_ip6 else src_ip4
                     mac_permit = src_mac
                 if denyMAC:
-                    mac = src_mac.split(':')
-                    mac[0] = format(int(mac[0], 16)+1, "02x")
+                    mac = src_mac.split(":")
+                    mac[0] = format(int(mac[0], 16) + 1, "02x")
                     src_mac = ":".join(mac)
                     if is_ip6:
                         src_ip6 = ip_permit
                     src_mac = ":".join(mac)
                     if is_ip6:
                         src_ip6 = ip_permit
@@ -362,7 +390,7 @@ class MethodHolder(VppTestCase):
                     ip_permit = src_ip6 if is_ip6 else src_ip4
                     mac_permit = src_mac
                 if denyMAC:
                     ip_permit = src_ip6 if is_ip6 else src_ip4
                     mac_permit = src_mac
                 if denyMAC:
-                    mac = src_mac.split(':')
+                    mac = src_mac.split(":")
                     mac[0] = format(int(mac[0], 16) + 1, "02x")
                     src_mac = ":".join(mac)
                     if is_ip6:
                     mac[0] = format(int(mac[0], 16) + 1, "02x")
                     src_mac = ":".join(mac)
                     if is_ip6:
@@ -385,7 +413,7 @@ class MethodHolder(VppTestCase):
                 payload = "to be blocked"
 
             if mac_type == self.WILD_MAC:
                 payload = "to be blocked"
 
             if mac_type == self.WILD_MAC:
-                mac = src_mac.split(':')
+                mac = src_mac.split(":")
                 for i in range(1, 5):
                     mac[i] = format(random.randint(0, 255), "02x")
                 src_mac = ":".join(mac)
                 for i in range(1, 5):
                     mac[i] = format(random.randint(0, 255), "02x")
                 src_mac = ":".join(mac)
@@ -395,7 +423,7 @@ class MethodHolder(VppTestCase):
             ip_rule = src_ip6 if is_ip6 else src_ip4
             if is_ip6:
                 if ip_type != self.EXACT_IP:
             ip_rule = src_ip6 if is_ip6 else src_ip4
             if is_ip6:
                 if ip_type != self.EXACT_IP:
-                    sub_ip = list(unpack('<16B', inet_pton(AF_INET6, ip_rule)))
+                    sub_ip = list(unpack("<16B", inet_pton(AF_INET6, ip_rule)))
                     if ip_type == self.WILD_IP:
                         sub_ip[0] = random.randint(240, 254)
                         sub_ip[1] = random.randint(230, 239)
                     if ip_type == self.WILD_IP:
                         sub_ip[0] = random.randint(240, 254)
                         sub_ip[1] = random.randint(230, 239)
@@ -406,13 +434,12 @@ class MethodHolder(VppTestCase):
                             sub_ip[2] = int(sub_ip[2]) + 1
                         sub_ip[14] = random.randint(100, 199)
                         sub_ip[15] = random.randint(200, 255)
                             sub_ip[2] = int(sub_ip[2]) + 1
                         sub_ip[14] = random.randint(100, 199)
                         sub_ip[15] = random.randint(200, 255)
-                    packed_src_ip6 = b''.join(
-                        [scapy.compat.chb(x) for x in sub_ip])
+                    packed_src_ip6 = b"".join([scapy.compat.chb(x) for x in sub_ip])
                     src_ip6 = inet_ntop(AF_INET6, packed_src_ip6)
                 packet /= IPv6(src=src_ip6, dst=dst_ip6)
             else:
                 if ip_type != self.EXACT_IP:
                     src_ip6 = inet_ntop(AF_INET6, packed_src_ip6)
                 packet /= IPv6(src=src_ip6, dst=dst_ip6)
             else:
                 if ip_type != self.EXACT_IP:
-                    sub_ip = ip_rule.split('.')
+                    sub_ip = ip_rule.split(".")
                     if ip_type == self.WILD_IP:
                         sub_ip[0] = random.randint(1, 49)
                         sub_ip[1] = random.randint(50, 99)
                     if ip_type == self.WILD_IP:
                         sub_ip[0] = random.randint(1, 49)
                         sub_ip[1] = random.randint(50, 99)
@@ -420,15 +447,15 @@ class MethodHolder(VppTestCase):
                         sub_ip[3] = random.randint(200, 255)
                     elif ip_type == self.SUBNET_IP:
                         if denyIP:
                         sub_ip[3] = random.randint(200, 255)
                     elif ip_type == self.SUBNET_IP:
                         if denyIP:
-                            sub_ip[1] = int(sub_ip[1])+1
+                            sub_ip[1] = int(sub_ip[1]) + 1
                         sub_ip[2] = random.randint(100, 199)
                         sub_ip[3] = random.randint(200, 255)
                         sub_ip[2] = random.randint(100, 199)
                         sub_ip[3] = random.randint(200, 255)
-                    src_ip4 = '.'.join(['{!s}'.format(x) for x in sub_ip])
+                    src_ip4 = ".".join(["{!s}".format(x) for x in sub_ip])
                 packet /= IP(src=src_ip4, dst=dst_ip4, frag=0, flags=0)
 
                 packet /= IP(src=src_ip4, dst=dst_ip4, frag=0, flags=0)
 
-            packet /= UDP(sport=src_port, dport=dst_port)/Raw(payload)
+            packet /= UDP(sport=src_port, dport=dst_port) / Raw(payload)
 
 
-            packet[Raw].load += b" mac:%s" % src_mac.encode('utf-8')
+            packet[Raw].load += b" mac:%s" % src_mac.encode("utf-8")
 
             size = self.pg_if_packet_sizes[p % len(self.pg_if_packet_sizes)]
             if isinstance(src_if, VppSubInterface):
 
             size = self.pg_if_packet_sizes[p % len(self.pg_if_packet_sizes)]
             if isinstance(src_if, VppSubInterface):
@@ -466,8 +493,8 @@ class MethodHolder(VppTestCase):
                 mac_rule = "00:00:00:00:00:00"
                 mac_mask = "00:00:00:00:00:00"
             elif mac_type == self.OUI_MAC:
                 mac_rule = "00:00:00:00:00:00"
                 mac_mask = "00:00:00:00:00:00"
             elif mac_type == self.OUI_MAC:
-                mac = src_mac.split(':')
-                mac[3] = mac[4] = mac[5] = '00'
+                mac = src_mac.split(":")
+                mac[3] = mac[4] = mac[5] = "00"
                 mac_rule = ":".join(mac)
                 mac_mask = "ff:ff:ff:00:00:00"
 
                 mac_rule = ":".join(mac)
                 mac_mask = "ff:ff:ff:00:00:00"
 
@@ -477,11 +504,10 @@ class MethodHolder(VppTestCase):
                 else:
                     ip = src_ip6
                     if ip_type == self.SUBNET_IP:
                 else:
                     ip = src_ip6
                     if ip_type == self.SUBNET_IP:
-                        sub_ip = list(unpack('<16B', inet_pton(AF_INET6, ip)))
+                        sub_ip = list(unpack("<16B", inet_pton(AF_INET6, ip)))
                         for i in range(8, 16):
                             sub_ip[i] = 0
                         for i in range(8, 16):
                             sub_ip[i] = 0
-                        packed_ip = b''.join(
-                            [scapy.compat.chb(x) for x in sub_ip])
+                        packed_ip = b"".join([scapy.compat.chb(x) for x in sub_ip])
                         ip = inet_ntop(AF_INET6, packed_ip)
             else:
                 if ip_type == self.WILD_IP:
                         ip = inet_ntop(AF_INET6, packed_ip)
             else:
                 if ip_type == self.WILD_IP:
@@ -489,8 +515,8 @@ class MethodHolder(VppTestCase):
                 else:
                     ip = src_ip4
                     if ip_type == self.SUBNET_IP:
                 else:
                     ip = src_ip4
                     if ip_type == self.SUBNET_IP:
-                        sub_ip = ip.split('.')
-                        sub_ip[2] = sub_ip[3] = '0'
+                        sub_ip = ip.split(".")
+                        sub_ip[2] = sub_ip[3] = "0"
                         ip = ".".join(sub_ip)
 
             prefix_len = 128 if is_ip6 else 32
                         ip = ".".join(sub_ip)
 
             prefix_len = 128 if is_ip6 else 32
@@ -508,21 +534,22 @@ class MethodHolder(VppTestCase):
                 rule_prefix_len = 128 if packet.haslayer(IPv6) else 32
                 rule_l3_layer = IPv6 if packet.haslayer(IPv6) else IP
                 if packet.haslayer(IPv6):
                 rule_prefix_len = 128 if packet.haslayer(IPv6) else 32
                 rule_l3_layer = IPv6 if packet.haslayer(IPv6) else IP
                 if packet.haslayer(IPv6):
-                    rule_l4_proto = packet[UDP].overload_fields[IPv6]['nh']
+                    rule_l4_proto = packet[UDP].overload_fields[IPv6]["nh"]
                 else:
                     rule_l4_proto = packet[IP].proto
 
                 else:
                     rule_l4_proto = packet[IP].proto
 
-                src_network = ip_network(
-                    (packet[rule_l3_layer].src, rule_prefix_len))
-                dst_network = ip_network(
-                    (packet[rule_l3_layer].dst, rule_prefix_len))
-                acl_rule = AclRule(is_permit=is_permit, proto=rule_l4_proto,
-                                   src_prefix=src_network,
-                                   dst_prefix=dst_network,
-                                   sport_from=rule_l4_sport,
-                                   sport_to=rule_l4_sport,
-                                   dport_from=rule_l4_dport,
-                                   dport_to=rule_l4_dport)
+                src_network = ip_network((packet[rule_l3_layer].src, rule_prefix_len))
+                dst_network = ip_network((packet[rule_l3_layer].dst, rule_prefix_len))
+                acl_rule = AclRule(
+                    is_permit=is_permit,
+                    proto=rule_l4_proto,
+                    src_prefix=src_network,
+                    dst_prefix=dst_network,
+                    sport_from=rule_l4_sport,
+                    sport_to=rule_l4_sport,
+                    dport_from=rule_l4_dport,
+                    dport_to=rule_l4_dport,
+                )
                 acl_rules.append(acl_rule)
 
             if mac_type == self.WILD_MAC and ip_type == self.WILD_IP and p > 0:
                 acl_rules.append(acl_rule)
 
             if mac_type == self.WILD_MAC and ip_type == self.WILD_IP and p > 0:
@@ -531,10 +558,10 @@ class MethodHolder(VppTestCase):
             if is_permit:
                 macip_rule = MacipRule(
                     is_permit=is_permit,
             if is_permit:
                 macip_rule = MacipRule(
                     is_permit=is_permit,
-                    src_prefix=ip_network(
-                        (ip_rule, prefix_len)),
+                    src_prefix=ip_network((ip_rule, prefix_len)),
                     src_mac=MACAddress(mac_rule).packed,
                     src_mac=MACAddress(mac_rule).packed,
-                    src_mac_mask=MACAddress(mac_mask).packed)
+                    src_mac_mask=MACAddress(mac_mask).packed,
+                )
                 macip_rules.append(macip_rule)
 
         # deny all other packets
                 macip_rules.append(macip_rule)
 
         # deny all other packets
@@ -544,16 +571,22 @@ class MethodHolder(VppTestCase):
                 is_permit=0,
                 src_prefix=network,
                 src_mac=MACAddress("00:00:00:00:00:00").packed,
                 is_permit=0,
                 src_prefix=network,
                 src_mac=MACAddress("00:00:00:00:00:00").packed,
-                src_mac_mask=MACAddress("00:00:00:00:00:00").packed)
+                src_mac_mask=MACAddress("00:00:00:00:00:00").packed,
+            )
             macip_rules.append(macip_rule)
 
         network = IPv6Network((0, 0)) if is_ip6 else IPv4Network((0, 0))
             macip_rules.append(macip_rule)
 
         network = IPv6Network((0, 0)) if is_ip6 else IPv4Network((0, 0))
-        acl_rule = AclRule(is_permit=0, src_prefix=network, dst_prefix=network,
-                           sport_from=0, sport_to=0, dport_from=0, dport_to=0)
+        acl_rule = AclRule(
+            is_permit=0,
+            src_prefix=network,
+            dst_prefix=network,
+            sport_from=0,
+            sport_to=0,
+            dport_from=0,
+            dport_to=0,
+        )
         acl_rules.append(acl_rule)
         acl_rules.append(acl_rule)
-        return {'stream': packets,
-                'macip_rules': macip_rules,
-                'acl_rules': acl_rules}
+        return {"stream": packets, "macip_rules": macip_rules, "acl_rules": acl_rules}
 
     def verify_capture(self, stream, capture, is_ip6):
         """
 
     def verify_capture(self, stream, capture, is_ip6):
         """
@@ -582,10 +615,20 @@ class MethodHolder(VppTestCase):
         #     data = p[Raw].load.split(':',1)[1])
         #     print(p[p_l3].src, data)
 
         #     data = p[Raw].load.split(':',1)[1])
         #     print(p[p_l3].src, data)
 
-    def run_traffic(self, mac_type, ip_type, traffic, is_ip6, packets,
-                    do_not_expected_capture=False, tags=None,
-                    apply_rules=True, isMACIP=True, permit_tags=PERMIT_TAGS,
-                    try_replace=False):
+    def run_traffic(
+        self,
+        mac_type,
+        ip_type,
+        traffic,
+        is_ip6,
+        packets,
+        do_not_expected_capture=False,
+        tags=None,
+        apply_rules=True,
+        isMACIP=True,
+        permit_tags=PERMIT_TAGS,
+        try_replace=False,
+    ):
         self.reset_packet_infos()
 
         if tags is None:
         self.reset_packet_infos()
 
         if tags is None:
@@ -619,21 +662,28 @@ class MethodHolder(VppTestCase):
             else:
                 return
 
             else:
                 return
 
-        test_dict = self.create_stream(mac_type, ip_type, packets,
-                                       src_if, dst_if,
-                                       traffic, is_ip6,
-                                       tags=permit_tags)
+        test_dict = self.create_stream(
+            mac_type,
+            ip_type,
+            packets,
+            src_if,
+            dst_if,
+            traffic,
+            is_ip6,
+            tags=permit_tags,
+        )
 
         if apply_rules:
             if isMACIP:
 
         if apply_rules:
             if isMACIP:
-                self.acl = VppMacipAcl(self, rules=test_dict['macip_rules'])
+                self.acl = VppMacipAcl(self, rules=test_dict["macip_rules"])
             else:
             else:
-                self.acl = VppAcl(self, rules=test_dict['acl_rules'])
+                self.acl = VppAcl(self, rules=test_dict["acl_rules"])
             self.acl.add_vpp_config()
 
             if isMACIP:
                 self.acl_if = VppMacipAclInterface(
             self.acl.add_vpp_config()
 
             if isMACIP:
                 self.acl_if = VppMacipAclInterface(
-                    self, sw_if_index=tx_if.sw_if_index, acls=[self.acl])
+                    self, sw_if_index=tx_if.sw_if_index, acls=[self.acl]
+                )
                 self.acl_if.add_vpp_config()
 
                 dump = self.acl_if.dump()
                 self.acl_if.add_vpp_config()
 
                 dump = self.acl_if.dump()
@@ -641,45 +691,51 @@ class MethodHolder(VppTestCase):
                 self.assertEqual(dump[0].acls[0], self.acl.acl_index)
             else:
                 self.acl_if = VppAclInterface(
                 self.assertEqual(dump[0].acls[0], self.acl.acl_index)
             else:
                 self.acl_if = VppAclInterface(
-                    self, sw_if_index=tx_if.sw_if_index, n_input=1,
-                    acls=[self.acl])
+                    self, sw_if_index=tx_if.sw_if_index, n_input=1, acls=[self.acl]
+                )
                 self.acl_if.add_vpp_config()
         else:
             if hasattr(self, "acl_if"):
                 self.acl_if.remove_vpp_config()
         if try_replace and hasattr(self, "acl"):
             if isMACIP:
                 self.acl_if.add_vpp_config()
         else:
             if hasattr(self, "acl_if"):
                 self.acl_if.remove_vpp_config()
         if try_replace and hasattr(self, "acl"):
             if isMACIP:
-                self.acl.modify_vpp_config(test_dict['macip_rules'])
+                self.acl.modify_vpp_config(test_dict["macip_rules"])
             else:
             else:
-                self.acl.modify_vpp_config(test_dict['acl_rules'])
+                self.acl.modify_vpp_config(test_dict["acl_rules"])
 
         if not isinstance(src_if, VppSubInterface):
 
         if not isinstance(src_if, VppSubInterface):
-            tx_if.add_stream(test_dict['stream'])
+            tx_if.add_stream(test_dict["stream"])
         else:
         else:
-            tx_if.parent.add_stream(test_dict['stream'])
+            tx_if.parent.add_stream(test_dict["stream"])
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
         if do_not_expected_capture:
             rx_if.get_capture(0)
         else:
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
         if do_not_expected_capture:
             rx_if.get_capture(0)
         else:
-            if traffic == self.BRIDGED and mac_type == self.WILD_MAC and \
-                    ip_type == self.WILD_IP:
+            if (
+                traffic == self.BRIDGED
+                and mac_type == self.WILD_MAC
+                and ip_type == self.WILD_IP
+            ):
                 capture = rx_if.get_capture(packets)
             else:
                 capture = rx_if.get_capture(
                 capture = rx_if.get_capture(packets)
             else:
                 capture = rx_if.get_capture(
-                    self.get_packet_count_for_if_idx(dst_if.sw_if_index))
-            self.verify_capture(test_dict['stream'], capture, is_ip6)
+                    self.get_packet_count_for_if_idx(dst_if.sw_if_index)
+                )
+            self.verify_capture(test_dict["stream"], capture, is_ip6)
         if not isMACIP:
             if hasattr(self, "acl_if"):
                 self.acl_if.remove_vpp_config()
             if hasattr(self, "acl"):
                 self.acl.remove_vpp_config()
 
         if not isMACIP:
             if hasattr(self, "acl_if"):
                 self.acl_if.remove_vpp_config()
             if hasattr(self, "acl"):
                 self.acl.remove_vpp_config()
 
-    def run_test_acls(self, mac_type, ip_type, acl_count,
-                      rules_count, traffic=None, ip=None):
-        self.apply_macip_rules(self.create_rules(mac_type, ip_type, acl_count,
-                                                 rules_count))
+    def run_test_acls(
+        self, mac_type, ip_type, acl_count, rules_count, traffic=None, ip=None
+    ):
+        self.apply_macip_rules(
+            self.create_rules(mac_type, ip_type, acl_count, rules_count)
+        )
         self.verify_macip_acls(acl_count, rules_count)
 
         if traffic is not None:
         self.verify_macip_acls(acl_count, rules_count)
 
         if traffic is not None:
@@ -698,134 +754,104 @@ class TestMACIP_IP4(MethodHolder):
         super(TestMACIP_IP4, cls).tearDownClass()
 
     def test_acl_bridged_ip4_exactMAC_exactIP(self):
         super(TestMACIP_IP4, cls).tearDownClass()
 
     def test_acl_bridged_ip4_exactMAC_exactIP(self):
-        """ IP4 MACIP exactMAC|exactIP ACL bridged traffic
-        """
-        self.run_traffic(self.EXACT_MAC, self.EXACT_IP,
-                         self.BRIDGED, self.IS_IP4, 9)
+        """IP4 MACIP exactMAC|exactIP ACL bridged traffic"""
+        self.run_traffic(self.EXACT_MAC, self.EXACT_IP, self.BRIDGED, self.IS_IP4, 9)
 
     def test_acl_bridged_ip4_exactMAC_subnetIP(self):
 
     def test_acl_bridged_ip4_exactMAC_subnetIP(self):
-        """ IP4 MACIP exactMAC|subnetIP ACL bridged traffic
-        """
+        """IP4 MACIP exactMAC|subnetIP ACL bridged traffic"""
 
 
-        self.run_traffic(self.EXACT_MAC, self.SUBNET_IP,
-                         self.BRIDGED, self.IS_IP4, 9)
+        self.run_traffic(self.EXACT_MAC, self.SUBNET_IP, self.BRIDGED, self.IS_IP4, 9)
 
     def test_acl_bridged_ip4_exactMAC_wildIP(self):
 
     def test_acl_bridged_ip4_exactMAC_wildIP(self):
-        """ IP4 MACIP exactMAC|wildIP ACL bridged traffic
-        """
+        """IP4 MACIP exactMAC|wildIP ACL bridged traffic"""
 
 
-        self.run_traffic(self.EXACT_MAC, self.WILD_IP,
-                         self.BRIDGED, self.IS_IP4, 9)
+        self.run_traffic(self.EXACT_MAC, self.WILD_IP, self.BRIDGED, self.IS_IP4, 9)
 
     def test_acl_bridged_ip4_ouiMAC_exactIP(self):
 
     def test_acl_bridged_ip4_ouiMAC_exactIP(self):
-        """ IP4 MACIP ouiMAC|exactIP ACL bridged traffic
-        """
+        """IP4 MACIP ouiMAC|exactIP ACL bridged traffic"""
 
 
-        self.run_traffic(self.OUI_MAC, self.EXACT_IP,
-                         self.BRIDGED, self.IS_IP4, 3)
+        self.run_traffic(self.OUI_MAC, self.EXACT_IP, self.BRIDGED, self.IS_IP4, 3)
 
     def test_acl_bridged_ip4_ouiMAC_subnetIP(self):
 
     def test_acl_bridged_ip4_ouiMAC_subnetIP(self):
-        """ IP4 MACIP ouiMAC|subnetIP ACL bridged traffic
-        """
+        """IP4 MACIP ouiMAC|subnetIP ACL bridged traffic"""
 
 
-        self.run_traffic(self.OUI_MAC, self.SUBNET_IP,
-                         self.BRIDGED, self.IS_IP4, 9)
+        self.run_traffic(self.OUI_MAC, self.SUBNET_IP, self.BRIDGED, self.IS_IP4, 9)
 
     def test_acl_bridged_ip4_ouiMAC_wildIP(self):
 
     def test_acl_bridged_ip4_ouiMAC_wildIP(self):
-        """ IP4 MACIP ouiMAC|wildIP ACL bridged traffic
-        """
+        """IP4 MACIP ouiMAC|wildIP ACL bridged traffic"""
 
 
-        self.run_traffic(self.OUI_MAC, self.WILD_IP,
-                         self.BRIDGED, self.IS_IP4, 9)
+        self.run_traffic(self.OUI_MAC, self.WILD_IP, self.BRIDGED, self.IS_IP4, 9)
 
     def test_ac_bridgedl_ip4_wildMAC_exactIP(self):
 
     def test_ac_bridgedl_ip4_wildMAC_exactIP(self):
-        """ IP4 MACIP wildcardMAC|exactIP ACL bridged traffic
-        """
+        """IP4 MACIP wildcardMAC|exactIP ACL bridged traffic"""
 
 
-        self.run_traffic(self.WILD_MAC, self.EXACT_IP,
-                         self.BRIDGED, self.IS_IP4, 9)
+        self.run_traffic(self.WILD_MAC, self.EXACT_IP, self.BRIDGED, self.IS_IP4, 9)
 
     def test_acl_bridged_ip4_wildMAC_subnetIP(self):
 
     def test_acl_bridged_ip4_wildMAC_subnetIP(self):
-        """ IP4 MACIP wildcardMAC|subnetIP ACL bridged traffic
-        """
+        """IP4 MACIP wildcardMAC|subnetIP ACL bridged traffic"""
 
 
-        self.run_traffic(self.WILD_MAC, self.SUBNET_IP,
-                         self.BRIDGED, self.IS_IP4, 9)
+        self.run_traffic(self.WILD_MAC, self.SUBNET_IP, self.BRIDGED, self.IS_IP4, 9)
 
     def test_acl_bridged_ip4_wildMAC_wildIP(self):
 
     def test_acl_bridged_ip4_wildMAC_wildIP(self):
-        """ IP4 MACIP wildcardMAC|wildIP ACL bridged traffic
-        """
+        """IP4 MACIP wildcardMAC|wildIP ACL bridged traffic"""
 
 
-        self.run_traffic(self.WILD_MAC, self.WILD_IP,
-                         self.BRIDGED, self.IS_IP4, 9)
+        self.run_traffic(self.WILD_MAC, self.WILD_IP, self.BRIDGED, self.IS_IP4, 9)
 
     def test_acl_routed_ip4_exactMAC_exactIP(self):
 
     def test_acl_routed_ip4_exactMAC_exactIP(self):
-        """ IP4 MACIP exactMAC|exactIP ACL routed traffic
-        """
-        self.run_traffic(self.EXACT_MAC, self.EXACT_IP,
-                         self.ROUTED, self.IS_IP4, 9)
+        """IP4 MACIP exactMAC|exactIP ACL routed traffic"""
+        self.run_traffic(self.EXACT_MAC, self.EXACT_IP, self.ROUTED, self.IS_IP4, 9)
 
     def test_acl_routed_ip4_exactMAC_subnetIP(self):
 
     def test_acl_routed_ip4_exactMAC_subnetIP(self):
-        """ IP4 MACIP exactMAC|subnetIP ACL routed traffic
-        """
-        self.run_traffic(self.EXACT_MAC, self.SUBNET_IP,
-                         self.ROUTED, self.IS_IP4, 9)
+        """IP4 MACIP exactMAC|subnetIP ACL routed traffic"""
+        self.run_traffic(self.EXACT_MAC, self.SUBNET_IP, self.ROUTED, self.IS_IP4, 9)
 
     def test_acl_routed_ip4_exactMAC_wildIP(self):
 
     def test_acl_routed_ip4_exactMAC_wildIP(self):
-        """ IP4 MACIP exactMAC|wildIP ACL routed traffic
-        """
-        self.run_traffic(self.EXACT_MAC, self.WILD_IP,
-                         self.ROUTED, self.IS_IP4, 9)
+        """IP4 MACIP exactMAC|wildIP ACL routed traffic"""
+        self.run_traffic(self.EXACT_MAC, self.WILD_IP, self.ROUTED, self.IS_IP4, 9)
 
     def test_acl_routed_ip4_ouiMAC_exactIP(self):
 
     def test_acl_routed_ip4_ouiMAC_exactIP(self):
-        """ IP4 MACIP ouiMAC|exactIP ACL routed traffic
-        """
+        """IP4 MACIP ouiMAC|exactIP ACL routed traffic"""
 
 
-        self.run_traffic(self.OUI_MAC, self.EXACT_IP,
-                         self.ROUTED, self.IS_IP4, 9)
+        self.run_traffic(self.OUI_MAC, self.EXACT_IP, self.ROUTED, self.IS_IP4, 9)
 
     def test_acl_routed_ip4_ouiMAC_subnetIP(self):
 
     def test_acl_routed_ip4_ouiMAC_subnetIP(self):
-        """ IP4 MACIP ouiMAC|subnetIP ACL routed traffic
-        """
+        """IP4 MACIP ouiMAC|subnetIP ACL routed traffic"""
 
 
-        self.run_traffic(self.OUI_MAC, self.SUBNET_IP,
-                         self.ROUTED, self.IS_IP4, 9)
+        self.run_traffic(self.OUI_MAC, self.SUBNET_IP, self.ROUTED, self.IS_IP4, 9)
 
     def test_acl_routed_ip4_ouiMAC_wildIP(self):
 
     def test_acl_routed_ip4_ouiMAC_wildIP(self):
-        """ IP4 MACIP ouiMAC|wildIP ACL routed traffic
-        """
+        """IP4 MACIP ouiMAC|wildIP ACL routed traffic"""
 
 
-        self.run_traffic(self.OUI_MAC, self.WILD_IP,
-                         self.ROUTED, self.IS_IP4, 9)
+        self.run_traffic(self.OUI_MAC, self.WILD_IP, self.ROUTED, self.IS_IP4, 9)
 
     def test_acl_routed_ip4_wildMAC_exactIP(self):
 
     def test_acl_routed_ip4_wildMAC_exactIP(self):
-        """ IP4 MACIP wildcardMAC|exactIP ACL routed traffic
-        """
+        """IP4 MACIP wildcardMAC|exactIP ACL routed traffic"""
 
 
-        self.run_traffic(self.WILD_MAC, self.EXACT_IP,
-                         self.ROUTED, self.IS_IP4, 9)
+        self.run_traffic(self.WILD_MAC, self.EXACT_IP, self.ROUTED, self.IS_IP4, 9)
 
     def test_acl_routed_ip4_wildMAC_subnetIP(self):
 
     def test_acl_routed_ip4_wildMAC_subnetIP(self):
-        """ IP4 MACIP wildcardMAC|subnetIP ACL routed traffic
-        """
+        """IP4 MACIP wildcardMAC|subnetIP ACL routed traffic"""
 
 
-        self.run_traffic(self.WILD_MAC, self.SUBNET_IP,
-                         self.ROUTED, self.IS_IP4, 9)
+        self.run_traffic(self.WILD_MAC, self.SUBNET_IP, self.ROUTED, self.IS_IP4, 9)
 
     def test_acl_routed_ip4_wildMAC_wildIP(self):
 
     def test_acl_routed_ip4_wildMAC_wildIP(self):
-        """ IP4 MACIP wildcardMAC|wildIP ACL
-        """
+        """IP4 MACIP wildcardMAC|wildIP ACL"""
 
 
-        self.run_traffic(self.WILD_MAC, self.WILD_IP,
-                         self.ROUTED, self.IS_IP4, 9)
+        self.run_traffic(self.WILD_MAC, self.WILD_IP, self.ROUTED, self.IS_IP4, 9)
 
     def test_acl_replace_traffic_ip4(self):
 
     def test_acl_replace_traffic_ip4(self):
-        """ MACIP replace ACL with IP4 traffic
-        """
-        self.run_traffic(self.OUI_MAC, self.SUBNET_IP,
-                         self.BRIDGED, self.IS_IP4, 9, try_replace=True)
-        self.run_traffic(self.EXACT_MAC, self.EXACT_IP,
-                         self.BRIDGED, self.IS_IP4, 9, try_replace=True)
+        """MACIP replace ACL with IP4 traffic"""
+        self.run_traffic(
+            self.OUI_MAC, self.SUBNET_IP, self.BRIDGED, self.IS_IP4, 9, try_replace=True
+        )
+        self.run_traffic(
+            self.EXACT_MAC,
+            self.EXACT_IP,
+            self.BRIDGED,
+            self.IS_IP4,
+            9,
+            try_replace=True,
+        )
 
 
 class TestMACIP_IP6(MethodHolder):
 
 
 class TestMACIP_IP6(MethodHolder):
@@ -840,138 +866,108 @@ class TestMACIP_IP6(MethodHolder):
         super(TestMACIP_IP6, cls).tearDownClass()
 
     def test_acl_bridged_ip6_exactMAC_exactIP(self):
         super(TestMACIP_IP6, cls).tearDownClass()
 
     def test_acl_bridged_ip6_exactMAC_exactIP(self):
-        """ IP6 MACIP exactMAC|exactIP ACL bridged traffic
-        """
+        """IP6 MACIP exactMAC|exactIP ACL bridged traffic"""
 
 
-        self.run_traffic(self.EXACT_MAC, self.EXACT_IP,
-                         self.BRIDGED, self.IS_IP6, 9)
+        self.run_traffic(self.EXACT_MAC, self.EXACT_IP, self.BRIDGED, self.IS_IP6, 9)
 
     def test_acl_bridged_ip6_exactMAC_subnetIP(self):
 
     def test_acl_bridged_ip6_exactMAC_subnetIP(self):
-        """ IP6 MACIP exactMAC|subnetIP ACL bridged traffic
-        """
+        """IP6 MACIP exactMAC|subnetIP ACL bridged traffic"""
 
 
-        self.run_traffic(self.EXACT_MAC, self.SUBNET_IP,
-                         self.BRIDGED, self.IS_IP6, 9)
+        self.run_traffic(self.EXACT_MAC, self.SUBNET_IP, self.BRIDGED, self.IS_IP6, 9)
 
     def test_acl_bridged_ip6_exactMAC_wildIP(self):
 
     def test_acl_bridged_ip6_exactMAC_wildIP(self):
-        """ IP6 MACIP exactMAC|wildIP ACL bridged traffic
-        """
+        """IP6 MACIP exactMAC|wildIP ACL bridged traffic"""
 
 
-        self.run_traffic(self.EXACT_MAC, self.WILD_IP,
-                         self.BRIDGED, self.IS_IP6, 9)
+        self.run_traffic(self.EXACT_MAC, self.WILD_IP, self.BRIDGED, self.IS_IP6, 9)
 
     def test_acl_bridged_ip6_ouiMAC_exactIP(self):
 
     def test_acl_bridged_ip6_ouiMAC_exactIP(self):
-        """ IP6 MACIP oui_MAC|exactIP ACL bridged traffic
-        """
+        """IP6 MACIP oui_MAC|exactIP ACL bridged traffic"""
 
 
-        self.run_traffic(self.OUI_MAC, self.EXACT_IP,
-                         self.BRIDGED, self.IS_IP6, 9)
+        self.run_traffic(self.OUI_MAC, self.EXACT_IP, self.BRIDGED, self.IS_IP6, 9)
 
     def test_acl_bridged_ip6_ouiMAC_subnetIP(self):
 
     def test_acl_bridged_ip6_ouiMAC_subnetIP(self):
-        """ IP6 MACIP ouiMAC|subnetIP ACL bridged traffic
-        """
+        """IP6 MACIP ouiMAC|subnetIP ACL bridged traffic"""
 
 
-        self.run_traffic(self.OUI_MAC, self.SUBNET_IP,
-                         self.BRIDGED, self.IS_IP6, 9)
+        self.run_traffic(self.OUI_MAC, self.SUBNET_IP, self.BRIDGED, self.IS_IP6, 9)
 
     def test_acl_bridged_ip6_ouiMAC_wildIP(self):
 
     def test_acl_bridged_ip6_ouiMAC_wildIP(self):
-        """ IP6 MACIP ouiMAC|wildIP ACL bridged traffic
-        """
+        """IP6 MACIP ouiMAC|wildIP ACL bridged traffic"""
 
 
-        self.run_traffic(self.OUI_MAC, self.WILD_IP,
-                         self.BRIDGED, self.IS_IP6, 9)
+        self.run_traffic(self.OUI_MAC, self.WILD_IP, self.BRIDGED, self.IS_IP6, 9)
 
     def test_acl_bridged_ip6_wildMAC_exactIP(self):
 
     def test_acl_bridged_ip6_wildMAC_exactIP(self):
-        """ IP6 MACIP wildcardMAC|exactIP ACL bridged traffic
-        """
+        """IP6 MACIP wildcardMAC|exactIP ACL bridged traffic"""
 
 
-        self.run_traffic(self.WILD_MAC, self.EXACT_IP,
-                         self.BRIDGED, self.IS_IP6, 9)
+        self.run_traffic(self.WILD_MAC, self.EXACT_IP, self.BRIDGED, self.IS_IP6, 9)
 
     def test_acl_bridged_ip6_wildMAC_subnetIP(self):
 
     def test_acl_bridged_ip6_wildMAC_subnetIP(self):
-        """ IP6 MACIP wildcardMAC|subnetIP ACL bridged traffic
-        """
+        """IP6 MACIP wildcardMAC|subnetIP ACL bridged traffic"""
 
 
-        self.run_traffic(self.WILD_MAC, self.SUBNET_IP,
-                         self.BRIDGED, self.IS_IP6, 9)
+        self.run_traffic(self.WILD_MAC, self.SUBNET_IP, self.BRIDGED, self.IS_IP6, 9)
 
     def test_acl_bridged_ip6_wildMAC_wildIP(self):
 
     def test_acl_bridged_ip6_wildMAC_wildIP(self):
-        """ IP6 MACIP wildcardMAC|wildIP ACL bridged traffic
-        """
+        """IP6 MACIP wildcardMAC|wildIP ACL bridged traffic"""
 
 
-        self.run_traffic(self.WILD_MAC, self.WILD_IP,
-                         self.BRIDGED, self.IS_IP6, 9)
+        self.run_traffic(self.WILD_MAC, self.WILD_IP, self.BRIDGED, self.IS_IP6, 9)
 
     def test_acl_routed_ip6_exactMAC_exactIP(self):
 
     def test_acl_routed_ip6_exactMAC_exactIP(self):
-        """ IP6 MACIP exactMAC|exactIP ACL routed traffic
-        """
+        """IP6 MACIP exactMAC|exactIP ACL routed traffic"""
 
 
-        self.run_traffic(self.EXACT_MAC, self.EXACT_IP,
-                         self.ROUTED, self.IS_IP6, 9)
+        self.run_traffic(self.EXACT_MAC, self.EXACT_IP, self.ROUTED, self.IS_IP6, 9)
 
     def test_acl_routed_ip6_exactMAC_subnetIP(self):
 
     def test_acl_routed_ip6_exactMAC_subnetIP(self):
-        """ IP6 MACIP exactMAC|subnetIP ACL routed traffic
-        """
+        """IP6 MACIP exactMAC|subnetIP ACL routed traffic"""
 
 
-        self.run_traffic(self.EXACT_MAC, self.SUBNET_IP,
-                         self.ROUTED, self.IS_IP6, 9)
+        self.run_traffic(self.EXACT_MAC, self.SUBNET_IP, self.ROUTED, self.IS_IP6, 9)
 
     def test_acl_routed_ip6_exactMAC_wildIP(self):
 
     def test_acl_routed_ip6_exactMAC_wildIP(self):
-        """ IP6 MACIP exactMAC|wildIP ACL routed traffic
-        """
+        """IP6 MACIP exactMAC|wildIP ACL routed traffic"""
 
 
-        self.run_traffic(self.EXACT_MAC, self.WILD_IP,
-                         self.ROUTED, self.IS_IP6, 9)
+        self.run_traffic(self.EXACT_MAC, self.WILD_IP, self.ROUTED, self.IS_IP6, 9)
 
     def test_acl_routed_ip6_ouiMAC_exactIP(self):
 
     def test_acl_routed_ip6_ouiMAC_exactIP(self):
-        """ IP6 MACIP ouiMAC|exactIP ACL routed traffic
-        """
+        """IP6 MACIP ouiMAC|exactIP ACL routed traffic"""
 
 
-        self.run_traffic(self.OUI_MAC, self.EXACT_IP,
-                         self.ROUTED, self.IS_IP6, 9)
+        self.run_traffic(self.OUI_MAC, self.EXACT_IP, self.ROUTED, self.IS_IP6, 9)
 
     def test_acl_routed_ip6_ouiMAC_subnetIP(self):
 
     def test_acl_routed_ip6_ouiMAC_subnetIP(self):
-        """ IP6 MACIP ouiMAC|subnetIP ACL routed traffic
-        """
+        """IP6 MACIP ouiMAC|subnetIP ACL routed traffic"""
 
 
-        self.run_traffic(self.OUI_MAC, self.SUBNET_IP,
-                         self.ROUTED, self.IS_IP6, 9)
+        self.run_traffic(self.OUI_MAC, self.SUBNET_IP, self.ROUTED, self.IS_IP6, 9)
 
     def test_acl_routed_ip6_ouiMAC_wildIP(self):
 
     def test_acl_routed_ip6_ouiMAC_wildIP(self):
-        """ IP6 MACIP ouiMAC|wildIP ACL routed traffic
-        """
+        """IP6 MACIP ouiMAC|wildIP ACL routed traffic"""
 
 
-        self.run_traffic(self.OUI_MAC, self.WILD_IP,
-                         self.ROUTED, self.IS_IP6, 9)
+        self.run_traffic(self.OUI_MAC, self.WILD_IP, self.ROUTED, self.IS_IP6, 9)
 
     def test_acl_routed_ip6_wildMAC_exactIP(self):
 
     def test_acl_routed_ip6_wildMAC_exactIP(self):
-        """ IP6 MACIP wildcardMAC|exactIP ACL routed traffic
-        """
+        """IP6 MACIP wildcardMAC|exactIP ACL routed traffic"""
 
 
-        self.run_traffic(self.WILD_MAC, self.EXACT_IP,
-                         self.ROUTED, self.IS_IP6, 9)
+        self.run_traffic(self.WILD_MAC, self.EXACT_IP, self.ROUTED, self.IS_IP6, 9)
 
     def test_acl_routed_ip6_wildMAC_subnetIP(self):
 
     def test_acl_routed_ip6_wildMAC_subnetIP(self):
-        """ IP6 MACIP wildcardMAC|subnetIP ACL routed traffic
-        """
+        """IP6 MACIP wildcardMAC|subnetIP ACL routed traffic"""
 
 
-        self.run_traffic(self.WILD_MAC, self.SUBNET_IP,
-                         self.ROUTED, self.IS_IP6, 9)
+        self.run_traffic(self.WILD_MAC, self.SUBNET_IP, self.ROUTED, self.IS_IP6, 9)
 
     def test_acl_routed_ip6_wildMAC_wildIP(self):
 
     def test_acl_routed_ip6_wildMAC_wildIP(self):
-        """ IP6 MACIP wildcardMAC|wildIP ACL
-        """
+        """IP6 MACIP wildcardMAC|wildIP ACL"""
 
 
-        self.run_traffic(self.WILD_MAC, self.WILD_IP,
-                         self.ROUTED, self.IS_IP6, 9)
+        self.run_traffic(self.WILD_MAC, self.WILD_IP, self.ROUTED, self.IS_IP6, 9)
 
     def test_acl_replace_traffic_ip6(self):
 
     def test_acl_replace_traffic_ip6(self):
-        """ MACIP replace ACL with IP6 traffic
-        """
-        self.run_traffic(self.OUI_MAC, self.SUBNET_IP,
-                         self.BRIDGED, self.IS_IP6, 9, try_replace=True)
-        self.run_traffic(self.EXACT_MAC, self.EXACT_IP,
-                         self.BRIDGED, self.IS_IP6, 9, try_replace=True)
+        """MACIP replace ACL with IP6 traffic"""
+        self.run_traffic(
+            self.OUI_MAC, self.SUBNET_IP, self.BRIDGED, self.IS_IP6, 9, try_replace=True
+        )
+        self.run_traffic(
+            self.EXACT_MAC,
+            self.EXACT_IP,
+            self.BRIDGED,
+            self.IS_IP6,
+            9,
+            try_replace=True,
+        )
 
 
 class TestMACIP(MethodHolder):
 
 
 class TestMACIP(MethodHolder):
@@ -986,73 +982,76 @@ class TestMACIP(MethodHolder):
         super(TestMACIP, cls).tearDownClass()
 
     def test_acl_1_2(self):
         super(TestMACIP, cls).tearDownClass()
 
     def test_acl_1_2(self):
-        """ MACIP ACL with 2 entries
-        """
+        """MACIP ACL with 2 entries"""
 
         self.run_test_acls(self.EXACT_MAC, self.WILD_IP, 1, [2])
 
     def test_acl_1_5(self):
 
         self.run_test_acls(self.EXACT_MAC, self.WILD_IP, 1, [2])
 
     def test_acl_1_5(self):
-        """ MACIP ACL with 5 entries
-        """
+        """MACIP ACL with 5 entries"""
 
         self.run_test_acls(self.EXACT_MAC, self.SUBNET_IP, 1, [5])
 
     def test_acl_1_10(self):
 
         self.run_test_acls(self.EXACT_MAC, self.SUBNET_IP, 1, [5])
 
     def test_acl_1_10(self):
-        """ MACIP ACL with 10 entries
-        """
+        """MACIP ACL with 10 entries"""
 
         self.run_test_acls(self.EXACT_MAC, self.EXACT_IP, 1, [10])
 
     def test_acl_1_20(self):
 
         self.run_test_acls(self.EXACT_MAC, self.EXACT_IP, 1, [10])
 
     def test_acl_1_20(self):
-        """ MACIP ACL with 20 entries
-        """
+        """MACIP ACL with 20 entries"""
 
         self.run_test_acls(self.OUI_MAC, self.WILD_IP, 1, [20])
 
     def test_acl_1_50(self):
 
         self.run_test_acls(self.OUI_MAC, self.WILD_IP, 1, [20])
 
     def test_acl_1_50(self):
-        """ MACIP ACL with 50 entries
-        """
+        """MACIP ACL with 50 entries"""
 
         self.run_test_acls(self.OUI_MAC, self.SUBNET_IP, 1, [50])
 
     def test_acl_1_100(self):
 
         self.run_test_acls(self.OUI_MAC, self.SUBNET_IP, 1, [50])
 
     def test_acl_1_100(self):
-        """ MACIP ACL with 100 entries
-        """
+        """MACIP ACL with 100 entries"""
 
         self.run_test_acls(self.OUI_MAC, self.EXACT_IP, 1, [100])
 
     def test_acl_2_X(self):
 
         self.run_test_acls(self.OUI_MAC, self.EXACT_IP, 1, [100])
 
     def test_acl_2_X(self):
-        """ MACIP 2 ACLs each with 100+ entries
-        """
+        """MACIP 2 ACLs each with 100+ entries"""
 
         self.run_test_acls(self.OUI_MAC, self.SUBNET_IP, 2, [100, 200])
 
     def test_acl_10_X(self):
 
         self.run_test_acls(self.OUI_MAC, self.SUBNET_IP, 2, [100, 200])
 
     def test_acl_10_X(self):
-        """ MACIP 10 ACLs each with 100+ entries
-        """
+        """MACIP 10 ACLs each with 100+ entries"""
 
 
-        self.run_test_acls(self.EXACT_MAC, self.EXACT_IP, 10,
-                           [100, 120, 140, 160, 180, 200, 210, 220, 230, 240])
+        self.run_test_acls(
+            self.EXACT_MAC,
+            self.EXACT_IP,
+            10,
+            [100, 120, 140, 160, 180, 200, 210, 220, 230, 240],
+        )
 
     def test_acl_10_X_traffic_ip4(self):
 
     def test_acl_10_X_traffic_ip4(self):
-        """ MACIP 10 ACLs each with 100+ entries with IP4 traffic
-        """
+        """MACIP 10 ACLs each with 100+ entries with IP4 traffic"""
 
 
-        self.run_test_acls(self.EXACT_MAC, self.EXACT_IP, 10,
-                           [100, 120, 140, 160, 180, 200, 210, 220, 230, 240],
-                           self.BRIDGED, self.IS_IP4)
+        self.run_test_acls(
+            self.EXACT_MAC,
+            self.EXACT_IP,
+            10,
+            [100, 120, 140, 160, 180, 200, 210, 220, 230, 240],
+            self.BRIDGED,
+            self.IS_IP4,
+        )
 
     def test_acl_10_X_traffic_ip6(self):
 
     def test_acl_10_X_traffic_ip6(self):
-        """ MACIP 10 ACLs each with 100+ entries with IP6 traffic
-        """
+        """MACIP 10 ACLs each with 100+ entries with IP6 traffic"""
 
 
-        self.run_test_acls(self.EXACT_MAC, self.EXACT_IP, 10,
-                           [100, 120, 140, 160, 180, 200, 210, 220, 230, 240],
-                           self.BRIDGED, self.IS_IP6)
+        self.run_test_acls(
+            self.EXACT_MAC,
+            self.EXACT_IP,
+            10,
+            [100, 120, 140, 160, 180, 200, 210, 220, 230, 240],
+            self.BRIDGED,
+            self.IS_IP6,
+        )
 
     def test_acl_replace(self):
 
     def test_acl_replace(self):
-        """ MACIP replace ACL
-        """
+        """MACIP replace ACL"""
 
         r1 = self.create_rules(acl_count=3, rules_count=[2, 2, 2])
         r2 = self.create_rules(mac_type=self.OUI_MAC, ip_type=self.SUBNET_IP)
 
         r1 = self.create_rules(acl_count=3, rules_count=[2, 2, 2])
         r2 = self.create_rules(mac_type=self.OUI_MAC, ip_type=self.SUBNET_IP)
@@ -1069,17 +1068,15 @@ class TestMACIP(MethodHolder):
         # verify changes
         self.assertEqual(len(acls_before), len(acls_after))
         for acl1, acl2 in zip(
         # verify changes
         self.assertEqual(len(acls_before), len(acls_after))
         for acl1, acl2 in zip(
-                acls_before[:2]+acls_before[4:],
-                acls_after[:2]+acls_after[4:]):
+            acls_before[:2] + acls_before[4:], acls_after[:2] + acls_after[4:]
+        ):
             self.assertEqual(len(acl1), len(acl2))
 
             self.assertEqual(len(acl1.r), len(acl2.r))
             for r1, r2 in zip(acl1.r, acl2.r):
                 self.assertEqual(len(acl1.r), len(acl2.r))
                 self.assertEqual(acl1.r, acl2.r)
             self.assertEqual(len(acl1), len(acl2))
 
             self.assertEqual(len(acl1.r), len(acl2.r))
             for r1, r2 in zip(acl1.r, acl2.r):
                 self.assertEqual(len(acl1.r), len(acl2.r))
                 self.assertEqual(acl1.r, acl2.r)
-        for acl1, acl2 in zip(
-                acls_before[2:4],
-                acls_after[2:4]):
+        for acl1, acl2 in zip(acls_before[2:4], acls_after[2:4]):
             self.assertEqual(len(acl1), len(acl2))
 
             self.assertNotEqual(len(acl1.r), len(acl2.r))
             self.assertEqual(len(acl1), len(acl2))
 
             self.assertNotEqual(len(acl1.r), len(acl2.r))
@@ -1088,38 +1085,40 @@ class TestMACIP(MethodHolder):
                 self.assertNotEqual(acl1.r, acl2.r)
 
     def test_delete_intf(self):
                 self.assertNotEqual(acl1.r, acl2.r)
 
     def test_delete_intf(self):
-        """ MACIP ACL delete intf with acl
-        """
+        """MACIP ACL delete intf with acl"""
 
 
-        intf_count = len(self.interfaces)+1
+        intf_count = len(self.interfaces) + 1
         intf = []
         macip_alcs = self.apply_macip_rules(
         intf = []
         macip_alcs = self.apply_macip_rules(
-            self.create_rules(acl_count=3, rules_count=[3, 5, 4]))
+            self.create_rules(acl_count=3, rules_count=[3, 5, 4])
+        )
 
         intf.append(VppLoInterface(self))
         intf.append(VppLoInterface(self))
 
         sw_if_index0 = intf[0].sw_if_index
         macip_acl_if0 = VppMacipAclInterface(
 
         intf.append(VppLoInterface(self))
         intf.append(VppLoInterface(self))
 
         sw_if_index0 = intf[0].sw_if_index
         macip_acl_if0 = VppMacipAclInterface(
-            self, sw_if_index=sw_if_index0, acls=[macip_alcs[1]])
+            self, sw_if_index=sw_if_index0, acls=[macip_alcs[1]]
+        )
         macip_acl_if0.add_vpp_config()
 
         reply = self.vapi.macip_acl_interface_get()
         macip_acl_if0.add_vpp_config()
 
         reply = self.vapi.macip_acl_interface_get()
-        self.assertEqual(reply.count, intf_count+1)
+        self.assertEqual(reply.count, intf_count + 1)
         self.assertEqual(reply.acls[sw_if_index0], 1)
 
         sw_if_index1 = intf[1].sw_if_index
         macip_acl_if1 = VppMacipAclInterface(
         self.assertEqual(reply.acls[sw_if_index0], 1)
 
         sw_if_index1 = intf[1].sw_if_index
         macip_acl_if1 = VppMacipAclInterface(
-            self, sw_if_index=sw_if_index1, acls=[macip_alcs[0]])
+            self, sw_if_index=sw_if_index1, acls=[macip_alcs[0]]
+        )
         macip_acl_if1.add_vpp_config()
 
         reply = self.vapi.macip_acl_interface_get()
         macip_acl_if1.add_vpp_config()
 
         reply = self.vapi.macip_acl_interface_get()
-        self.assertEqual(reply.count, intf_count+2)
+        self.assertEqual(reply.count, intf_count + 2)
         self.assertEqual(reply.acls[sw_if_index1], 0)
 
         intf[0].remove_vpp_config()
         reply = self.vapi.macip_acl_interface_get()
         self.assertEqual(reply.acls[sw_if_index1], 0)
 
         intf[0].remove_vpp_config()
         reply = self.vapi.macip_acl_interface_get()
-        self.assertEqual(reply.count, intf_count+2)
+        self.assertEqual(reply.count, intf_count + 2)
         self.assertEqual(reply.acls[sw_if_index0], 4294967295)
         self.assertEqual(reply.acls[sw_if_index1], 0)
 
         self.assertEqual(reply.acls[sw_if_index0], 4294967295)
         self.assertEqual(reply.acls[sw_if_index1], 0)
 
@@ -1128,14 +1127,16 @@ class TestMACIP(MethodHolder):
         sw_if_index2 = intf[2].sw_if_index
         sw_if_index3 = intf[3].sw_if_index
         macip_acl_if2 = VppMacipAclInterface(
         sw_if_index2 = intf[2].sw_if_index
         sw_if_index3 = intf[3].sw_if_index
         macip_acl_if2 = VppMacipAclInterface(
-            self, sw_if_index=sw_if_index2, acls=[macip_alcs[1]])
+            self, sw_if_index=sw_if_index2, acls=[macip_alcs[1]]
+        )
         macip_acl_if2.add_vpp_config()
         macip_acl_if3 = VppMacipAclInterface(
         macip_acl_if2.add_vpp_config()
         macip_acl_if3 = VppMacipAclInterface(
-            self, sw_if_index=sw_if_index3, acls=[macip_alcs[1]])
+            self, sw_if_index=sw_if_index3, acls=[macip_alcs[1]]
+        )
         macip_acl_if3.add_vpp_config()
 
         reply = self.vapi.macip_acl_interface_get()
         macip_acl_if3.add_vpp_config()
 
         reply = self.vapi.macip_acl_interface_get()
-        self.assertEqual(reply.count, intf_count+3)
+        self.assertEqual(reply.count, intf_count + 3)
         self.assertEqual(reply.acls[sw_if_index1], 0)
         self.assertEqual(reply.acls[sw_if_index2], 1)
         self.assertEqual(reply.acls[sw_if_index3], 1)
         self.assertEqual(reply.acls[sw_if_index1], 0)
         self.assertEqual(reply.acls[sw_if_index2], 1)
         self.assertEqual(reply.acls[sw_if_index3], 1)
@@ -1150,7 +1151,7 @@ class TestMACIP(MethodHolder):
         intf[1].remove_vpp_config()
 
         reply = self.vapi.macip_acl_interface_get()
         intf[1].remove_vpp_config()
 
         reply = self.vapi.macip_acl_interface_get()
-        self.assertEqual(reply.count, intf_count+3)
+        self.assertEqual(reply.count, intf_count + 3)
         self.assertEqual(reply.acls[sw_if_index0], 4294967295)
         self.assertEqual(reply.acls[sw_if_index1], 4294967295)
         self.assertEqual(reply.acls[sw_if_index2], 4294967295)
         self.assertEqual(reply.acls[sw_if_index0], 4294967295)
         self.assertEqual(reply.acls[sw_if_index1], 4294967295)
         self.assertEqual(reply.acls[sw_if_index2], 4294967295)
@@ -1174,14 +1175,28 @@ class TestACL_dot1q_bridged(MethodHolder):
         super(TestACL_dot1q_bridged, cls).tearDownClass()
 
     def test_acl_bridged_ip4_subif_dot1q(self):
         super(TestACL_dot1q_bridged, cls).tearDownClass()
 
     def test_acl_bridged_ip4_subif_dot1q(self):
-        """ IP4 ACL SubIf Dot1Q bridged traffic"""
-        self.run_traffic(self.EXACT_MAC, self.EXACT_IP, self.BRIDGED,
-                         self.IS_IP4, 9, tags=self.DOT1Q, isMACIP=False)
+        """IP4 ACL SubIf Dot1Q bridged traffic"""
+        self.run_traffic(
+            self.EXACT_MAC,
+            self.EXACT_IP,
+            self.BRIDGED,
+            self.IS_IP4,
+            9,
+            tags=self.DOT1Q,
+            isMACIP=False,
+        )
 
     def test_acl_bridged_ip6_subif_dot1q(self):
 
     def test_acl_bridged_ip6_subif_dot1q(self):
-        """ IP6 ACL SubIf Dot1Q bridged traffic"""
-        self.run_traffic(self.EXACT_MAC, self.EXACT_IP, self.BRIDGED,
-                         self.IS_IP6, 9, tags=self.DOT1Q, isMACIP=False)
+        """IP6 ACL SubIf Dot1Q bridged traffic"""
+        self.run_traffic(
+            self.EXACT_MAC,
+            self.EXACT_IP,
+            self.BRIDGED,
+            self.IS_IP6,
+            9,
+            tags=self.DOT1Q,
+            isMACIP=False,
+        )
 
 
 class TestACL_dot1ad_bridged(MethodHolder):
 
 
 class TestACL_dot1ad_bridged(MethodHolder):
@@ -1196,14 +1211,28 @@ class TestACL_dot1ad_bridged(MethodHolder):
         super(TestACL_dot1ad_bridged, cls).tearDownClass()
 
     def test_acl_bridged_ip4_subif_dot1ad(self):
         super(TestACL_dot1ad_bridged, cls).tearDownClass()
 
     def test_acl_bridged_ip4_subif_dot1ad(self):
-        """ IP4 ACL SubIf Dot1AD bridged traffic"""
-        self.run_traffic(self.EXACT_MAC, self.EXACT_IP, self.BRIDGED,
-                         self.IS_IP4, 9, tags=self.DOT1AD, isMACIP=False)
+        """IP4 ACL SubIf Dot1AD bridged traffic"""
+        self.run_traffic(
+            self.EXACT_MAC,
+            self.EXACT_IP,
+            self.BRIDGED,
+            self.IS_IP4,
+            9,
+            tags=self.DOT1AD,
+            isMACIP=False,
+        )
 
     def test_acl_bridged_ip6_subif_dot1ad(self):
 
     def test_acl_bridged_ip6_subif_dot1ad(self):
-        """ IP6 ACL SubIf Dot1AD bridged traffic"""
-        self.run_traffic(self.EXACT_MAC, self.EXACT_IP, self.BRIDGED,
-                         self.IS_IP6, 9, tags=self.DOT1AD, isMACIP=False)
+        """IP6 ACL SubIf Dot1AD bridged traffic"""
+        self.run_traffic(
+            self.EXACT_MAC,
+            self.EXACT_IP,
+            self.BRIDGED,
+            self.IS_IP6,
+            9,
+            tags=self.DOT1AD,
+            isMACIP=False,
+        )
 
 
 class TestACL_dot1q_routed(MethodHolder):
 
 
 class TestACL_dot1q_routed(MethodHolder):
@@ -1218,26 +1247,56 @@ class TestACL_dot1q_routed(MethodHolder):
         super(TestACL_dot1q_routed, cls).tearDownClass()
 
     def test_acl_routed_ip4_subif_dot1q(self):
         super(TestACL_dot1q_routed, cls).tearDownClass()
 
     def test_acl_routed_ip4_subif_dot1q(self):
-        """ IP4 ACL SubIf Dot1Q routed traffic"""
-        self.run_traffic(self.EXACT_MAC, self.EXACT_IP, self.ROUTED,
-                         self.IS_IP4, 9, tags=self.DOT1Q, isMACIP=False)
+        """IP4 ACL SubIf Dot1Q routed traffic"""
+        self.run_traffic(
+            self.EXACT_MAC,
+            self.EXACT_IP,
+            self.ROUTED,
+            self.IS_IP4,
+            9,
+            tags=self.DOT1Q,
+            isMACIP=False,
+        )
 
     def test_acl_routed_ip6_subif_dot1q(self):
 
     def test_acl_routed_ip6_subif_dot1q(self):
-        """ IP6 ACL SubIf Dot1Q routed traffic"""
-        self.run_traffic(self.EXACT_MAC, self.EXACT_IP, self.ROUTED,
-                         self.IS_IP6, 9, tags=self.DOT1Q, isMACIP=False)
+        """IP6 ACL SubIf Dot1Q routed traffic"""
+        self.run_traffic(
+            self.EXACT_MAC,
+            self.EXACT_IP,
+            self.ROUTED,
+            self.IS_IP6,
+            9,
+            tags=self.DOT1Q,
+            isMACIP=False,
+        )
 
     def test_acl_routed_ip4_subif_dot1q_deny_by_tags(self):
 
     def test_acl_routed_ip4_subif_dot1q_deny_by_tags(self):
-        """ IP4 ACL SubIf wrong tags Dot1Q routed traffic"""
-        self.run_traffic(self.EXACT_MAC, self.EXACT_IP, self.ROUTED,
-                         self.IS_IP4, 9, True, tags=self.DOT1Q, isMACIP=False,
-                         permit_tags=self.DENY_TAGS)
+        """IP4 ACL SubIf wrong tags Dot1Q routed traffic"""
+        self.run_traffic(
+            self.EXACT_MAC,
+            self.EXACT_IP,
+            self.ROUTED,
+            self.IS_IP4,
+            9,
+            True,
+            tags=self.DOT1Q,
+            isMACIP=False,
+            permit_tags=self.DENY_TAGS,
+        )
 
     def test_acl_routed_ip6_subif_dot1q_deny_by_tags(self):
 
     def test_acl_routed_ip6_subif_dot1q_deny_by_tags(self):
-        """ IP6 ACL SubIf wrong tags Dot1Q routed traffic"""
-        self.run_traffic(self.EXACT_MAC, self.EXACT_IP, self.ROUTED,
-                         self.IS_IP6, 9, True, tags=self.DOT1Q, isMACIP=False,
-                         permit_tags=self.DENY_TAGS)
+        """IP6 ACL SubIf wrong tags Dot1Q routed traffic"""
+        self.run_traffic(
+            self.EXACT_MAC,
+            self.EXACT_IP,
+            self.ROUTED,
+            self.IS_IP6,
+            9,
+            True,
+            tags=self.DOT1Q,
+            isMACIP=False,
+            permit_tags=self.DENY_TAGS,
+        )
 
 
 class TestACL_dot1ad_routed(MethodHolder):
 
 
 class TestACL_dot1ad_routed(MethodHolder):
@@ -1252,27 +1311,57 @@ class TestACL_dot1ad_routed(MethodHolder):
         super(TestACL_dot1ad_routed, cls).tearDownClass()
 
     def test_acl_routed_ip6_subif_dot1ad(self):
         super(TestACL_dot1ad_routed, cls).tearDownClass()
 
     def test_acl_routed_ip6_subif_dot1ad(self):
-        """ IP6 ACL SubIf Dot1AD routed traffic"""
-        self.run_traffic(self.EXACT_MAC, self.EXACT_IP, self.ROUTED,
-                         self.IS_IP6, 9, tags=self.DOT1AD, isMACIP=False)
+        """IP6 ACL SubIf Dot1AD routed traffic"""
+        self.run_traffic(
+            self.EXACT_MAC,
+            self.EXACT_IP,
+            self.ROUTED,
+            self.IS_IP6,
+            9,
+            tags=self.DOT1AD,
+            isMACIP=False,
+        )
 
     def test_acl_routed_ip4_subif_dot1ad(self):
 
     def test_acl_routed_ip4_subif_dot1ad(self):
-        """ IP4 ACL SubIf Dot1AD routed traffic"""
-        self.run_traffic(self.EXACT_MAC, self.EXACT_IP, self.ROUTED,
-                         self.IS_IP4, 9, tags=self.DOT1AD, isMACIP=False)
+        """IP4 ACL SubIf Dot1AD routed traffic"""
+        self.run_traffic(
+            self.EXACT_MAC,
+            self.EXACT_IP,
+            self.ROUTED,
+            self.IS_IP4,
+            9,
+            tags=self.DOT1AD,
+            isMACIP=False,
+        )
 
     def test_acl_routed_ip6_subif_dot1ad_deny_by_tags(self):
 
     def test_acl_routed_ip6_subif_dot1ad_deny_by_tags(self):
-        """ IP6 ACL SubIf wrong tags Dot1AD routed traffic"""
-        self.run_traffic(self.EXACT_MAC, self.EXACT_IP, self.ROUTED,
-                         self.IS_IP6, 9, True, tags=self.DOT1AD, isMACIP=False,
-                         permit_tags=self.DENY_TAGS)
+        """IP6 ACL SubIf wrong tags Dot1AD routed traffic"""
+        self.run_traffic(
+            self.EXACT_MAC,
+            self.EXACT_IP,
+            self.ROUTED,
+            self.IS_IP6,
+            9,
+            True,
+            tags=self.DOT1AD,
+            isMACIP=False,
+            permit_tags=self.DENY_TAGS,
+        )
 
     def test_acl_routed_ip4_subif_dot1ad_deny_by_tags(self):
 
     def test_acl_routed_ip4_subif_dot1ad_deny_by_tags(self):
-        """ IP4 ACL SubIf wrong tags Dot1AD routed traffic"""
-        self.run_traffic(self.EXACT_MAC, self.EXACT_IP, self.ROUTED,
-                         self.IS_IP4, 9, True, tags=self.DOT1AD, isMACIP=False,
-                         permit_tags=self.DENY_TAGS)
-
-
-if __name__ == '__main__':
+        """IP4 ACL SubIf wrong tags Dot1AD routed traffic"""
+        self.run_traffic(
+            self.EXACT_MAC,
+            self.EXACT_IP,
+            self.ROUTED,
+            self.IS_IP4,
+            9,
+            True,
+            tags=self.DOT1AD,
+            isMACIP=False,
+            permit_tags=self.DENY_TAGS,
+        )
+
+
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index 0463e25..f58147d 100644 (file)
@@ -7,7 +7,7 @@ from vpp_ip_route import VppIpTable, VppIpRoute, VppRoutePath
 
 
 class TestAdl(VppTestCase):
 
 
 class TestAdl(VppTestCase):
-    """ Allow/Deny Plugin Unit Test Cases """
+    """Allow/Deny Plugin Unit Test Cases"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -24,80 +24,86 @@ class TestAdl(VppTestCase):
         super(TestAdl, self).tearDown()
 
     def test_adl1_unittest(self):
         super(TestAdl, self).tearDown()
 
     def test_adl1_unittest(self):
-        """ Plugin API Test """
-        cmds = ["loop create\n",
-                "set int ip address loop0 192.168.1.1/24\n",
-                "set int ip6 table loop0 0\n",
-                "set int ip address loop0 2001:db01::1/64\n",
-                "set int state loop0 up\n",
-                "packet-generator new {\n"
-                " name ip4\n"
-                " limit 100\n"
-                " rate 0\n"
-                " size 128-128\n"
-                " interface loop0\n"
-                " node adl-input\n"
-                " data { IP4: 1.2.40 -> 3cfd.fed0.b6c8\n"
-                "        UDP: 192.168.1.2-192.168.1.10 -> 192.168.2.1\n"
-                "        UDP: 1234 -> 2345\n"
-                "        incrementing 114\n"
-                "       }\n"
-                " }\n",
-                "packet-generator new {\n"
-                " name ip6-allow\n"
-                " limit 50\n"
-                " rate 0\n"
-                " size 128-128\n"
-                " interface loop0\n"
-                " node adl-input\n"
-                " data { IP6: 1.2.40 -> 3cfd.fed0.b6c8\n"
-                "        UDP: 2001:db01::2 -> 2001:db01::1\n"
-                "        UDP: 1234 -> 2345\n"
-                "        incrementing 80\n"
-                "      }\n"
-                " }\n",
-                "packet-generator new {\n"
-                " name ip6-drop\n"
-                " limit 50\n"
-                " rate 0\n"
-                " size 128-128\n"
-                " interface loop0\n"
-                " node adl-input\n"
-                " data { IP6: 1.2.40 -> 3cfd.fed0.b6c8\n"
-                "        UDP: 2001:db01::3 -> 2001:db01::1\n"
-                "        UDP: 1234 -> 2345\n"
-                "        incrementing 80\n"
-                "      }\n"
-                " }\n",
-                "ip table 1\n",
-                "ip route add 192.168.2.1/32 via drop\n",
-                "ip route add table 1 192.168.1.2/32 via local\n",
-                "ip6 table 1\n",
-                "ip route add 2001:db01::1/128 via drop\n",
-                "ip route add table 1 2001:db01::2/128 via local\n",
-                "bin adl_interface_enable_disable loop0\n",
-                "bin adl_allowlist_enable_disable loop0 fib-id 1 ip4 ip6\n",
-                "pa en\n"]
+        """Plugin API Test"""
+        cmds = [
+            "loop create\n",
+            "set int ip address loop0 192.168.1.1/24\n",
+            "set int ip6 table loop0 0\n",
+            "set int ip address loop0 2001:db01::1/64\n",
+            "set int state loop0 up\n",
+            "packet-generator new {\n"
+            " name ip4\n"
+            " limit 100\n"
+            " rate 0\n"
+            " size 128-128\n"
+            " interface loop0\n"
+            " node adl-input\n"
+            " data { IP4: 1.2.40 -> 3cfd.fed0.b6c8\n"
+            "        UDP: 192.168.1.2-192.168.1.10 -> 192.168.2.1\n"
+            "        UDP: 1234 -> 2345\n"
+            "        incrementing 114\n"
+            "       }\n"
+            " }\n",
+            "packet-generator new {\n"
+            " name ip6-allow\n"
+            " limit 50\n"
+            " rate 0\n"
+            " size 128-128\n"
+            " interface loop0\n"
+            " node adl-input\n"
+            " data { IP6: 1.2.40 -> 3cfd.fed0.b6c8\n"
+            "        UDP: 2001:db01::2 -> 2001:db01::1\n"
+            "        UDP: 1234 -> 2345\n"
+            "        incrementing 80\n"
+            "      }\n"
+            " }\n",
+            "packet-generator new {\n"
+            " name ip6-drop\n"
+            " limit 50\n"
+            " rate 0\n"
+            " size 128-128\n"
+            " interface loop0\n"
+            " node adl-input\n"
+            " data { IP6: 1.2.40 -> 3cfd.fed0.b6c8\n"
+            "        UDP: 2001:db01::3 -> 2001:db01::1\n"
+            "        UDP: 1234 -> 2345\n"
+            "        incrementing 80\n"
+            "      }\n"
+            " }\n",
+            "ip table 1\n",
+            "ip route add 192.168.2.1/32 via drop\n",
+            "ip route add table 1 192.168.1.2/32 via local\n",
+            "ip6 table 1\n",
+            "ip route add 2001:db01::1/128 via drop\n",
+            "ip route add table 1 2001:db01::2/128 via local\n",
+            "bin adl_interface_enable_disable loop0\n",
+            "bin adl_allowlist_enable_disable loop0 fib-id 1 ip4 ip6\n",
+            "pa en\n",
+        ]
 
         for cmd in cmds:
             r = self.vapi.cli_return_response(cmd)
             if r.retval != 0:
 
         for cmd in cmds:
             r = self.vapi.cli_return_response(cmd)
             if r.retval != 0:
-                if hasattr(r, 'reply'):
+                if hasattr(r, "reply"):
                     self.logger.info(cmd + " FAIL reply " + r.reply)
                 else:
                     self.logger.info(cmd + " FAIL retval " + str(r.retval))
 
         total_pkts = self.statistics.get_err_counter(
                     self.logger.info(cmd + " FAIL reply " + r.reply)
                 else:
                     self.logger.info(cmd + " FAIL retval " + str(r.retval))
 
         total_pkts = self.statistics.get_err_counter(
-            "/err/adl-input/Allow/Deny packets processed")
+            "/err/adl-input/Allow/Deny packets processed"
+        )
 
         self.assertEqual(total_pkts, 200)
 
         ip4_allow = self.statistics.get_err_counter(
 
         self.assertEqual(total_pkts, 200)
 
         ip4_allow = self.statistics.get_err_counter(
-            "/err/ip4-adl-allowlist/ip4 allowlist allowed")
+            "/err/ip4-adl-allowlist/ip4 allowlist allowed"
+        )
         self.assertEqual(ip4_allow, 12)
         ip6_allow = self.statistics.get_err_counter(
         self.assertEqual(ip4_allow, 12)
         ip6_allow = self.statistics.get_err_counter(
-            "/err/ip6-adl-allowlist/ip6 allowlist allowed")
+            "/err/ip6-adl-allowlist/ip6 allowlist allowed"
+        )
         self.assertEqual(ip6_allow, 50)
 
         self.assertEqual(ip6_allow, 50)
 
-if __name__ == '__main__':
+
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index ec44be7..200835b 100644 (file)
@@ -7,14 +7,15 @@ from vpp_ip_route import VppIpTable, VppIpRoute, VppRoutePath
 
 
 class TestAPIClient(VppTestCase):
 
 
 class TestAPIClient(VppTestCase):
-    """ API Internal client Test Cases """
+    """API Internal client Test Cases"""
 
     def test_client_unittest(self):
 
     def test_client_unittest(self):
-        """ Internal API client """
+        """Internal API client"""
         error = self.vapi.cli("test api internal")
         if error:
             self.logger.critical(error)
         error = self.vapi.cli("test api internal")
         if error:
             self.logger.critical(error)
-            self.assertNotIn('failed', error)
+            self.assertNotIn("failed", error)
 
 
-if __name__ == '__main__':
+
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index 6524878..ae70666 100644 (file)
@@ -6,7 +6,7 @@ import json
 
 
 class TestJsonApiTrace(VppTestCase):
 
 
 class TestJsonApiTrace(VppTestCase):
-    """ JSON API trace related tests """
+    """JSON API trace related tests"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -24,24 +24,24 @@ class TestJsonApiTrace(VppTestCase):
     def test_json_api_trace_save(self):
         self.vapi.show_version()
 
     def test_json_api_trace_save(self):
         self.vapi.show_version()
 
-        fname = 'test_api_trace-%d.json' % self.vpp.pid
+        fname = "test_api_trace-%d.json" % self.vpp.pid
         tmp_api_trace = "/tmp/%s" % fname
         tmp_api_trace = "/tmp/%s" % fname
-        fpath = '%s/%s' % (self.tempdir, fname)
+        fpath = "%s/%s" % (self.tempdir, fname)
         self.vapi.cli("api trace save-json {}".format(fname))
         os.rename(tmp_api_trace, fpath)
         self.vapi.cli("api trace save-json {}".format(fname))
         os.rename(tmp_api_trace, fpath)
-        with open(fpath, encoding='utf-8') as f:
+        with open(fpath, encoding="utf-8") as f:
             s = f.read()
         trace = json.loads(s)
         found = False
         for o in trace:
             s = f.read()
         trace = json.loads(s)
         found = False
         for o in trace:
-            if o['_msgname'] == 'show_version':
+            if o["_msgname"] == "show_version":
                 found = True
                 break
         self.assertTrue(found)
                 found = True
                 break
         self.assertTrue(found)
-        self.assertEquals(o['_msgname'], 'show_version')
+        self.assertEquals(o["_msgname"], "show_version")
 
     def test_json_api_trace_replay(self):
 
     def test_json_api_trace_replay(self):
-        fname = '/tmp/create_loop.json'
+        fname = "/tmp/create_loop.json"
         req = """
 [
 {
         req = """
 [
 {
@@ -50,14 +50,13 @@ class TestJsonApiTrace(VppTestCase):
         "mac_address": "00:00:00:00:00:00"
 }]
 """
         "mac_address": "00:00:00:00:00:00"
 }]
 """
-        with open(fname, 'w') as f:
+        with open(fname, "w") as f:
             f.write(req)
         self.vapi.cli("api trace replay-json {}".format(fname))
             f.write(req)
         self.vapi.cli("api trace replay-json {}".format(fname))
-        r = self.vapi.sw_interface_dump(name_filter='loop',
-                                        name_filter_valid=True)
+        r = self.vapi.sw_interface_dump(name_filter="loop", name_filter_valid=True)
         self.assertEqual(len(r), 1)
         self.assertEqual(len(r), 1)
-        self.assertEqual(r[0].interface_name, 'loop0')
+        self.assertEqual(r[0].interface_name, "loop0")
 
 
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index bd8b625..a3e7e04 100644 (file)
@@ -11,7 +11,7 @@ Basic test for sanity check of arping.
 
 
 class TestArping(VppTestCase):
 
 
 class TestArping(VppTestCase):
-    """ Arping Test Case """
+    """Arping Test Case"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -65,7 +65,7 @@ class TestArping(VppTestCase):
         self.assertEqual(src, ipv6.src)
 
     def test_arping_ip4_arp_request_cli(self):
         self.assertEqual(src, ipv6.src)
 
     def test_arping_ip4_arp_request_cli(self):
-        """ arping IP4 arp request CLI test """
+        """arping IP4 arp request CLI test"""
         try:
             self.pg_enable_capture(self.pg_interfaces)
             self.pg_start()
         try:
             self.pg_enable_capture(self.pg_interfaces)
             self.pg_start()
@@ -81,19 +81,19 @@ class TestArping(VppTestCase):
 
             out = self.pg1.get_capture(6)
             for p in out:
 
             out = self.pg1.get_capture(6)
             for p in out:
-                self.verify_arping_request(p, self.pg1.local_ip4,
-                                           self.pg1.remote_ip4)
+                self.verify_arping_request(p, self.pg1.local_ip4, self.pg1.remote_ip4)
         finally:
             self.vapi.cli("show error")
 
     def test_arping_ip4_garp_cli(self):
         finally:
             self.vapi.cli("show error")
 
     def test_arping_ip4_garp_cli(self):
-        """ arping ip4 gratuitous arp CLI test """
+        """arping ip4 gratuitous arp CLI test"""
         try:
             self.pg_enable_capture(self.pg_interfaces)
             self.pg_start()
 
         try:
             self.pg_enable_capture(self.pg_interfaces)
             self.pg_start()
 
-            ping_cmd = ("arping gratuitous" + self.pg1.local_ip4 +
-                        "pg1 repeat 5 interval 0.1")
+            ping_cmd = (
+                "arping gratuitous" + self.pg1.local_ip4 + "pg1 repeat 5 interval 0.1"
+            )
             ret = self.vapi.cli(ping_cmd)
             self.logger.info(ret)
 
             ret = self.vapi.cli(ping_cmd)
             self.logger.info(ret)
 
@@ -103,60 +103,65 @@ class TestArping(VppTestCase):
 
             out = self.pg1.get_capture(6)
             for p in out:
 
             out = self.pg1.get_capture(6)
             for p in out:
-                self.verify_arping_request(p, self.pg1.local_ip4,
-                                           self.pg1.local_ip4)
+                self.verify_arping_request(p, self.pg1.local_ip4, self.pg1.local_ip4)
         finally:
             self.vapi.cli("show error")
 
     def test_arping_ip4_arp_request_api(self):
         finally:
             self.vapi.cli("show error")
 
     def test_arping_ip4_arp_request_api(self):
-        """ arping ip4 arp request API test """
+        """arping ip4 arp request API test"""
         try:
             self.pg_enable_capture(self.pg_interfaces)
             self.pg_start()
             remote_ip4 = self.pg1.remote_ip4
 
         try:
             self.pg_enable_capture(self.pg_interfaces)
             self.pg_start()
             remote_ip4 = self.pg1.remote_ip4
 
-            ret = self.vapi.arping(address=remote_ip4,
-                                   sw_if_index=self.pg1.sw_if_index,
-                                   is_garp=0, repeat=5, interval=0.1)
+            ret = self.vapi.arping(
+                address=remote_ip4,
+                sw_if_index=self.pg1.sw_if_index,
+                is_garp=0,
+                repeat=5,
+                interval=0.1,
+            )
             self.logger.info(ret)
 
             self.logger.info(ret)
 
-            ret = self.vapi.arping(address=remote_ip4,
-                                   sw_if_index=self.pg1.sw_if_index,
-                                   is_garp=0)
+            ret = self.vapi.arping(
+                address=remote_ip4, sw_if_index=self.pg1.sw_if_index, is_garp=0
+            )
             self.logger.info(ret)
 
             out = self.pg1.get_capture(6)
             for p in out:
             self.logger.info(ret)
 
             out = self.pg1.get_capture(6)
             for p in out:
-                self.verify_arping_request(p, self.pg1.local_ip4,
-                                           self.pg1.remote_ip4)
+                self.verify_arping_request(p, self.pg1.local_ip4, self.pg1.remote_ip4)
         finally:
             self.vapi.cli("show error")
 
     def test_arping_ip4_garp_api(self):
         finally:
             self.vapi.cli("show error")
 
     def test_arping_ip4_garp_api(self):
-        """ arping ip4 gratuitous arp API test """
+        """arping ip4 gratuitous arp API test"""
         try:
             self.pg_enable_capture(self.pg_interfaces)
             self.pg_start()
 
         try:
             self.pg_enable_capture(self.pg_interfaces)
             self.pg_start()
 
-            ret = self.vapi.arping(address=self.pg1.local_ip4,
-                                   sw_if_index=self.pg1.sw_if_index,
-                                   is_garp=1, repeat=5, interval=0.1)
+            ret = self.vapi.arping(
+                address=self.pg1.local_ip4,
+                sw_if_index=self.pg1.sw_if_index,
+                is_garp=1,
+                repeat=5,
+                interval=0.1,
+            )
             self.logger.info(ret)
 
             self.logger.info(ret)
 
-            ret = self.vapi.arping(address=self.pg1.local_ip4,
-                                   sw_if_index=self.pg1.sw_if_index,
-                                   is_garp=1)
+            ret = self.vapi.arping(
+                address=self.pg1.local_ip4, sw_if_index=self.pg1.sw_if_index, is_garp=1
+            )
             self.logger.info(ret)
 
             out = self.pg1.get_capture(6)
             for p in out:
             self.logger.info(ret)
 
             out = self.pg1.get_capture(6)
             for p in out:
-                self.verify_arping_request(p, self.pg1.local_ip4,
-                                           self.pg1.local_ip4)
+                self.verify_arping_request(p, self.pg1.local_ip4, self.pg1.local_ip4)
         finally:
             self.vapi.cli("show error")
 
     def test_arping_ip6_ns_cli(self):
         finally:
             self.vapi.cli("show error")
 
     def test_arping_ip6_ns_cli(self):
-        """ arping IP6 neighbor solicitation CLI test """
+        """arping IP6 neighbor solicitation CLI test"""
         try:
             self.pg_enable_capture(self.pg_interfaces)
             self.pg_start()
         try:
             self.pg_enable_capture(self.pg_interfaces)
             self.pg_start()
@@ -172,43 +177,46 @@ class TestArping(VppTestCase):
 
             out = self.pg1.get_capture(6)
             for p in out:
 
             out = self.pg1.get_capture(6)
             for p in out:
-                self.verify_arping_ip6_ns(p, self.pg1.local_ip6,
-                                          self.pg1.remote_ip6)
+                self.verify_arping_ip6_ns(p, self.pg1.local_ip6, self.pg1.remote_ip6)
         finally:
             self.vapi.cli("show error")
 
     def test_arping_ip6_ns_api(self):
         finally:
             self.vapi.cli("show error")
 
     def test_arping_ip6_ns_api(self):
-        """ arping ip6 neighbor solicitation API test """
+        """arping ip6 neighbor solicitation API test"""
         try:
             self.pg_enable_capture(self.pg_interfaces)
             self.pg_start()
             remote_ip6 = self.pg1.remote_ip6
 
         try:
             self.pg_enable_capture(self.pg_interfaces)
             self.pg_start()
             remote_ip6 = self.pg1.remote_ip6
 
-            ret = self.vapi.arping(address=remote_ip6,
-                                   sw_if_index=self.pg1.sw_if_index,
-                                   is_garp=0, repeat=5, interval=0.1)
+            ret = self.vapi.arping(
+                address=remote_ip6,
+                sw_if_index=self.pg1.sw_if_index,
+                is_garp=0,
+                repeat=5,
+                interval=0.1,
+            )
             self.logger.info(ret)
 
             self.logger.info(ret)
 
-            ret = self.vapi.arping(address=remote_ip6,
-                                   sw_if_index=self.pg1.sw_if_index,
-                                   is_garp=0)
+            ret = self.vapi.arping(
+                address=remote_ip6, sw_if_index=self.pg1.sw_if_index, is_garp=0
+            )
             self.logger.info(ret)
 
             out = self.pg1.get_capture(6)
             for p in out:
             self.logger.info(ret)
 
             out = self.pg1.get_capture(6)
             for p in out:
-                self.verify_arping_ip6_ns(p, self.pg1.local_ip6,
-                                          self.pg1.remote_ip6)
+                self.verify_arping_ip6_ns(p, self.pg1.local_ip6, self.pg1.remote_ip6)
         finally:
             self.vapi.cli("show error")
 
     def test_arping_ip6_na_cli(self):
         finally:
             self.vapi.cli("show error")
 
     def test_arping_ip6_na_cli(self):
-        """ arping ip6 neighbor advertisement CLI test """
+        """arping ip6 neighbor advertisement CLI test"""
         try:
             self.pg_enable_capture(self.pg_interfaces)
             self.pg_start()
 
         try:
             self.pg_enable_capture(self.pg_interfaces)
             self.pg_start()
 
-            ping_cmd = ("arping gratuitous" + self.pg1.local_ip6 +
-                        "pg1 repeat 5 interval 0.1")
+            ping_cmd = (
+                "arping gratuitous" + self.pg1.local_ip6 + "pg1 repeat 5 interval 0.1"
+            )
             ret = self.vapi.cli(ping_cmd)
             self.logger.info(ret)
 
             ret = self.vapi.cli(ping_cmd)
             self.logger.info(ret)
 
@@ -218,34 +226,36 @@ class TestArping(VppTestCase):
 
             out = self.pg1.get_capture(6)
             for p in out:
 
             out = self.pg1.get_capture(6)
             for p in out:
-                self.verify_arping_ip6_na(p, self.pg1.local_ip6,
-                                          self.pg1.local_ip6)
+                self.verify_arping_ip6_na(p, self.pg1.local_ip6, self.pg1.local_ip6)
         finally:
             self.vapi.cli("show error")
 
     def test_arping_ip6_na_api(self):
         finally:
             self.vapi.cli("show error")
 
     def test_arping_ip6_na_api(self):
-        """ arping ip6 neighbor advertisement API test """
+        """arping ip6 neighbor advertisement API test"""
         try:
             self.pg_enable_capture(self.pg_interfaces)
             self.pg_start()
 
         try:
             self.pg_enable_capture(self.pg_interfaces)
             self.pg_start()
 
-            ret = self.vapi.arping(address=self.pg1.local_ip6,
-                                   sw_if_index=self.pg1.sw_if_index,
-                                   is_garp=1, repeat=5, interval=0.1)
+            ret = self.vapi.arping(
+                address=self.pg1.local_ip6,
+                sw_if_index=self.pg1.sw_if_index,
+                is_garp=1,
+                repeat=5,
+                interval=0.1,
+            )
             self.logger.info(ret)
 
             self.logger.info(ret)
 
-            ret = self.vapi.arping(address=self.pg1.local_ip6,
-                                   sw_if_index=self.pg1.sw_if_index,
-                                   is_garp=1)
+            ret = self.vapi.arping(
+                address=self.pg1.local_ip6, sw_if_index=self.pg1.sw_if_index, is_garp=1
+            )
             self.logger.info(ret)
 
             out = self.pg1.get_capture(6)
             for p in out:
             self.logger.info(ret)
 
             out = self.pg1.get_capture(6)
             for p in out:
-                self.verify_arping_ip6_na(p, self.pg1.local_ip6,
-                                          self.pg1.local_ip6)
+                self.verify_arping_ip6_na(p, self.pg1.local_ip6, self.pg1.local_ip6)
         finally:
             self.vapi.cli("show error")
 
 
         finally:
             self.vapi.cli("show error")
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index d1c7b92..c7ea79a 100644 (file)
@@ -21,8 +21,15 @@ from scapy.layers.l2 import Ether, GRE
 from scapy.packet import Raw
 
 from config import config
 from scapy.packet import Raw
 
 from config import config
-from bfd import VppBFDAuthKey, BFD, BFDAuthType, VppBFDUDPSession, \
-    BFDDiagCode, BFDState, BFD_vpp_echo
+from bfd import (
+    VppBFDAuthKey,
+    BFD,
+    BFDAuthType,
+    VppBFDUDPSession,
+    BFDDiagCode,
+    BFDState,
+    BFD_vpp_echo,
+)
 from framework import tag_fixme_vpp_workers
 from framework import VppTestCase, VppTestRunner
 from framework import tag_run_solo
 from framework import tag_fixme_vpp_workers
 from framework import VppTestCase, VppTestRunner
 from framework import tag_run_solo
@@ -30,8 +37,7 @@ from util import ppp
 from vpp_ip import DpoProto
 from vpp_ip_route import VppIpRoute, VppRoutePath
 from vpp_lo_interface import VppLoInterface
 from vpp_ip import DpoProto
 from vpp_ip_route import VppIpRoute, VppRoutePath
 from vpp_lo_interface import VppLoInterface
-from vpp_papi_provider import UnexpectedApiReturnValueError, \
-    CliFailedCommandError
+from vpp_papi_provider import UnexpectedApiReturnValueError, CliFailedCommandError
 from vpp_pg_interface import CaptureTimeoutError, is_ipv6_misc
 from vpp_gre_interface import VppGreInterface
 from vpp_papi import VppEnum
 from vpp_pg_interface import CaptureTimeoutError, is_ipv6_misc
 from vpp_gre_interface import VppGreInterface
 from vpp_papi import VppEnum
@@ -46,15 +52,17 @@ class AuthKeyFactory(object):
         self._conf_key_ids = {}
 
     def create_random_key(self, test, auth_type=BFDAuthType.keyed_sha1):
         self._conf_key_ids = {}
 
     def create_random_key(self, test, auth_type=BFDAuthType.keyed_sha1):
-        """ create a random key with unique conf key id """
+        """create a random key with unique conf key id"""
         conf_key_id = randint(0, 0xFFFFFFFF)
         while conf_key_id in self._conf_key_ids:
             conf_key_id = randint(0, 0xFFFFFFFF)
         self._conf_key_ids[conf_key_id] = 1
         key = scapy.compat.raw(
         conf_key_id = randint(0, 0xFFFFFFFF)
         while conf_key_id in self._conf_key_ids:
             conf_key_id = randint(0, 0xFFFFFFFF)
         self._conf_key_ids[conf_key_id] = 1
         key = scapy.compat.raw(
-            bytearray([randint(0, 255) for _ in range(randint(1, 20))]))
-        return VppBFDAuthKey(test=test, auth_type=auth_type,
-                             conf_key_id=conf_key_id, key=key)
+            bytearray([randint(0, 255) for _ in range(randint(1, 20))])
+        )
+        return VppBFDAuthKey(
+            test=test, auth_type=auth_type, conf_key_id=conf_key_id, key=key
+        )
 
 
 class BFDAPITestCase(VppTestCase):
 
 
 class BFDAPITestCase(VppTestCase):
@@ -87,7 +95,7 @@ class BFDAPITestCase(VppTestCase):
         self.factory = AuthKeyFactory()
 
     def test_add_bfd(self):
         self.factory = AuthKeyFactory()
 
     def test_add_bfd(self):
-        """ create a BFD session """
+        """create a BFD session"""
         session = VppBFDUDPSession(self, self.pg0, self.pg0.remote_ip4)
         session.add_vpp_config()
         self.logger.debug("Session state is %s", session.state)
         session = VppBFDUDPSession(self, self.pg0, self.pg0.remote_ip4)
         session.add_vpp_config()
         self.logger.debug("Session state is %s", session.state)
@@ -97,7 +105,7 @@ class BFDAPITestCase(VppTestCase):
         session.remove_vpp_config()
 
     def test_double_add(self):
         session.remove_vpp_config()
 
     def test_double_add(self):
-        """ create the same BFD session twice (negative case) """
+        """create the same BFD session twice (negative case)"""
         session = VppBFDUDPSession(self, self.pg0, self.pg0.remote_ip4)
         session.add_vpp_config()
 
         session = VppBFDUDPSession(self, self.pg0, self.pg0.remote_ip4)
         session.add_vpp_config()
 
@@ -107,9 +115,8 @@ class BFDAPITestCase(VppTestCase):
         session.remove_vpp_config()
 
     def test_add_bfd6(self):
         session.remove_vpp_config()
 
     def test_add_bfd6(self):
-        """ create IPv6 BFD session """
-        session = VppBFDUDPSession(
-            self, self.pg0, self.pg0.remote_ip6, af=AF_INET6)
+        """create IPv6 BFD session"""
+        session = VppBFDUDPSession(self, self.pg0, self.pg0.remote_ip6, af=AF_INET6)
         session.add_vpp_config()
         self.logger.debug("Session state is %s", session.state)
         session.remove_vpp_config()
         session.add_vpp_config()
         self.logger.debug("Session state is %s", session.state)
         session.remove_vpp_config()
@@ -118,65 +125,76 @@ class BFDAPITestCase(VppTestCase):
         session.remove_vpp_config()
 
     def test_mod_bfd(self):
         session.remove_vpp_config()
 
     def test_mod_bfd(self):
-        """ modify BFD session parameters """
-        session = VppBFDUDPSession(self, self.pg0, self.pg0.remote_ip4,
-                                   desired_min_tx=50000,
-                                   required_min_rx=10000,
-                                   detect_mult=1)
+        """modify BFD session parameters"""
+        session = VppBFDUDPSession(
+            self,
+            self.pg0,
+            self.pg0.remote_ip4,
+            desired_min_tx=50000,
+            required_min_rx=10000,
+            detect_mult=1,
+        )
         session.add_vpp_config()
         s = session.get_bfd_udp_session_dump_entry()
         session.add_vpp_config()
         s = session.get_bfd_udp_session_dump_entry()
-        self.assert_equal(session.desired_min_tx,
-                          s.desired_min_tx,
-                          "desired min transmit interval")
-        self.assert_equal(session.required_min_rx,
-                          s.required_min_rx,
-                          "required min receive interval")
+        self.assert_equal(
+            session.desired_min_tx, s.desired_min_tx, "desired min transmit interval"
+        )
+        self.assert_equal(
+            session.required_min_rx, s.required_min_rx, "required min receive interval"
+        )
         self.assert_equal(session.detect_mult, s.detect_mult, "detect mult")
         self.assert_equal(session.detect_mult, s.detect_mult, "detect mult")
-        session.modify_parameters(desired_min_tx=session.desired_min_tx * 2,
-                                  required_min_rx=session.required_min_rx * 2,
-                                  detect_mult=session.detect_mult * 2)
+        session.modify_parameters(
+            desired_min_tx=session.desired_min_tx * 2,
+            required_min_rx=session.required_min_rx * 2,
+            detect_mult=session.detect_mult * 2,
+        )
         s = session.get_bfd_udp_session_dump_entry()
         s = session.get_bfd_udp_session_dump_entry()
-        self.assert_equal(session.desired_min_tx,
-                          s.desired_min_tx,
-                          "desired min transmit interval")
-        self.assert_equal(session.required_min_rx,
-                          s.required_min_rx,
-                          "required min receive interval")
+        self.assert_equal(
+            session.desired_min_tx, s.desired_min_tx, "desired min transmit interval"
+        )
+        self.assert_equal(
+            session.required_min_rx, s.required_min_rx, "required min receive interval"
+        )
         self.assert_equal(session.detect_mult, s.detect_mult, "detect mult")
 
     def test_upd_bfd(self):
         self.assert_equal(session.detect_mult, s.detect_mult, "detect mult")
 
     def test_upd_bfd(self):
-        """ Create/Modify w/ Update BFD session parameters """
-        session = VppBFDUDPSession(self, self.pg0, self.pg0.remote_ip4,
-                                   desired_min_tx=50000,
-                                   required_min_rx=10000,
-                                   detect_mult=1)
+        """Create/Modify w/ Update BFD session parameters"""
+        session = VppBFDUDPSession(
+            self,
+            self.pg0,
+            self.pg0.remote_ip4,
+            desired_min_tx=50000,
+            required_min_rx=10000,
+            detect_mult=1,
+        )
         session.upd_vpp_config()
         s = session.get_bfd_udp_session_dump_entry()
         session.upd_vpp_config()
         s = session.get_bfd_udp_session_dump_entry()
-        self.assert_equal(session.desired_min_tx,
-                          s.desired_min_tx,
-                          "desired min transmit interval")
-        self.assert_equal(session.required_min_rx,
-                          s.required_min_rx,
-                          "required min receive interval")
+        self.assert_equal(
+            session.desired_min_tx, s.desired_min_tx, "desired min transmit interval"
+        )
+        self.assert_equal(
+            session.required_min_rx, s.required_min_rx, "required min receive interval"
+        )
 
         self.assert_equal(session.detect_mult, s.detect_mult, "detect mult")
 
         self.assert_equal(session.detect_mult, s.detect_mult, "detect mult")
-        session.upd_vpp_config(desired_min_tx=session.desired_min_tx * 2,
-                               required_min_rx=session.required_min_rx * 2,
-                               detect_mult=session.detect_mult * 2)
+        session.upd_vpp_config(
+            desired_min_tx=session.desired_min_tx * 2,
+            required_min_rx=session.required_min_rx * 2,
+            detect_mult=session.detect_mult * 2,
+        )
         s = session.get_bfd_udp_session_dump_entry()
         s = session.get_bfd_udp_session_dump_entry()
-        self.assert_equal(session.desired_min_tx,
-                          s.desired_min_tx,
-                          "desired min transmit interval")
-        self.assert_equal(session.required_min_rx,
-                          s.required_min_rx,
-                          "required min receive interval")
+        self.assert_equal(
+            session.desired_min_tx, s.desired_min_tx, "desired min transmit interval"
+        )
+        self.assert_equal(
+            session.required_min_rx, s.required_min_rx, "required min receive interval"
+        )
         self.assert_equal(session.detect_mult, s.detect_mult, "detect mult")
 
     def test_add_sha1_keys(self):
         self.assert_equal(session.detect_mult, s.detect_mult, "detect mult")
 
     def test_add_sha1_keys(self):
-        """ add SHA1 keys """
+        """add SHA1 keys"""
         key_count = 10
         key_count = 10
-        keys = [self.factory.create_random_key(
-            self) for i in range(0, key_count)]
+        keys = [self.factory.create_random_key(self) for i in range(0, key_count)]
         for key in keys:
             self.assertFalse(key.query_vpp_config())
         for key in keys:
         for key in keys:
             self.assertFalse(key.query_vpp_config())
         for key in keys:
@@ -211,11 +229,10 @@ class BFDAPITestCase(VppTestCase):
             self.assertFalse(key.query_vpp_config())
 
     def test_add_bfd_sha1(self):
             self.assertFalse(key.query_vpp_config())
 
     def test_add_bfd_sha1(self):
-        """ create a BFD session (SHA1) """
+        """create a BFD session (SHA1)"""
         key = self.factory.create_random_key(self)
         key.add_vpp_config()
         key = self.factory.create_random_key(self)
         key.add_vpp_config()
-        session = VppBFDUDPSession(self, self.pg0, self.pg0.remote_ip4,
-                                   sha1_key=key)
+        session = VppBFDUDPSession(self, self.pg0, self.pg0.remote_ip4, sha1_key=key)
         session.add_vpp_config()
         self.logger.debug("Session state is %s", session.state)
         session.remove_vpp_config()
         session.add_vpp_config()
         self.logger.debug("Session state is %s", session.state)
         session.remove_vpp_config()
@@ -224,51 +241,56 @@ class BFDAPITestCase(VppTestCase):
         session.remove_vpp_config()
 
     def test_double_add_sha1(self):
         session.remove_vpp_config()
 
     def test_double_add_sha1(self):
-        """ create the same BFD session twice (negative case) (SHA1) """
+        """create the same BFD session twice (negative case) (SHA1)"""
         key = self.factory.create_random_key(self)
         key.add_vpp_config()
         key = self.factory.create_random_key(self)
         key.add_vpp_config()
-        session = VppBFDUDPSession(self, self.pg0, self.pg0.remote_ip4,
-                                   sha1_key=key)
+        session = VppBFDUDPSession(self, self.pg0, self.pg0.remote_ip4, sha1_key=key)
         session.add_vpp_config()
         with self.assertRaises(Exception):
             session.add_vpp_config()
 
     def test_add_auth_nonexistent_key(self):
         session.add_vpp_config()
         with self.assertRaises(Exception):
             session.add_vpp_config()
 
     def test_add_auth_nonexistent_key(self):
-        """ create BFD session using non-existent SHA1 (negative case) """
+        """create BFD session using non-existent SHA1 (negative case)"""
         session = VppBFDUDPSession(
         session = VppBFDUDPSession(
-            self, self.pg0, self.pg0.remote_ip4,
-            sha1_key=self.factory.create_random_key(self))
+            self,
+            self.pg0,
+            self.pg0.remote_ip4,
+            sha1_key=self.factory.create_random_key(self),
+        )
         with self.assertRaises(Exception):
             session.add_vpp_config()
 
     def test_shared_sha1_key(self):
         with self.assertRaises(Exception):
             session.add_vpp_config()
 
     def test_shared_sha1_key(self):
-        """ single SHA1 key shared by multiple BFD sessions """
+        """single SHA1 key shared by multiple BFD sessions"""
         key = self.factory.create_random_key(self)
         key.add_vpp_config()
         sessions = [
         key = self.factory.create_random_key(self)
         key.add_vpp_config()
         sessions = [
-            VppBFDUDPSession(self, self.pg0, self.pg0.remote_ip4,
-                             sha1_key=key),
-            VppBFDUDPSession(self, self.pg0, self.pg0.remote_ip6,
-                             sha1_key=key, af=AF_INET6),
-            VppBFDUDPSession(self, self.pg1, self.pg1.remote_ip4,
-                             sha1_key=key),
-            VppBFDUDPSession(self, self.pg1, self.pg1.remote_ip6,
-                             sha1_key=key, af=AF_INET6)]
+            VppBFDUDPSession(self, self.pg0, self.pg0.remote_ip4, sha1_key=key),
+            VppBFDUDPSession(
+                self, self.pg0, self.pg0.remote_ip6, sha1_key=key, af=AF_INET6
+            ),
+            VppBFDUDPSession(self, self.pg1, self.pg1.remote_ip4, sha1_key=key),
+            VppBFDUDPSession(
+                self, self.pg1, self.pg1.remote_ip6, sha1_key=key, af=AF_INET6
+            ),
+        ]
         for s in sessions:
             s.add_vpp_config()
         removed = 0
         for s in sessions:
             e = key.get_bfd_auth_keys_dump_entry()
         for s in sessions:
             s.add_vpp_config()
         removed = 0
         for s in sessions:
             e = key.get_bfd_auth_keys_dump_entry()
-            self.assert_equal(e.use_count, len(sessions) - removed,
-                              "Use count for shared key")
+            self.assert_equal(
+                e.use_count, len(sessions) - removed, "Use count for shared key"
+            )
             s.remove_vpp_config()
             removed += 1
         e = key.get_bfd_auth_keys_dump_entry()
             s.remove_vpp_config()
             removed += 1
         e = key.get_bfd_auth_keys_dump_entry()
-        self.assert_equal(e.use_count, len(sessions) - removed,
-                          "Use count for shared key")
+        self.assert_equal(
+            e.use_count, len(sessions) - removed, "Use count for shared key"
+        )
 
     def test_activate_auth(self):
 
     def test_activate_auth(self):
-        """ activate SHA1 authentication """
+        """activate SHA1 authentication"""
         key = self.factory.create_random_key(self)
         key.add_vpp_config()
         session = VppBFDUDPSession(self, self.pg0, self.pg0.remote_ip4)
         key = self.factory.create_random_key(self)
         key.add_vpp_config()
         session = VppBFDUDPSession(self, self.pg0, self.pg0.remote_ip4)
@@ -276,7 +298,7 @@ class BFDAPITestCase(VppTestCase):
         session.activate_auth(key)
 
     def test_deactivate_auth(self):
         session.activate_auth(key)
 
     def test_deactivate_auth(self):
-        """ deactivate SHA1 authentication """
+        """deactivate SHA1 authentication"""
         key = self.factory.create_random_key(self)
         key.add_vpp_config()
         session = VppBFDUDPSession(self, self.pg0, self.pg0.remote_ip4)
         key = self.factory.create_random_key(self)
         key.add_vpp_config()
         session = VppBFDUDPSession(self, self.pg0, self.pg0.remote_ip4)
@@ -285,20 +307,19 @@ class BFDAPITestCase(VppTestCase):
         session.deactivate_auth()
 
     def test_change_key(self):
         session.deactivate_auth()
 
     def test_change_key(self):
-        """ change SHA1 key """
+        """change SHA1 key"""
         key1 = self.factory.create_random_key(self)
         key2 = self.factory.create_random_key(self)
         while key2.conf_key_id == key1.conf_key_id:
             key2 = self.factory.create_random_key(self)
         key1.add_vpp_config()
         key2.add_vpp_config()
         key1 = self.factory.create_random_key(self)
         key2 = self.factory.create_random_key(self)
         while key2.conf_key_id == key1.conf_key_id:
             key2 = self.factory.create_random_key(self)
         key1.add_vpp_config()
         key2.add_vpp_config()
-        session = VppBFDUDPSession(self, self.pg0, self.pg0.remote_ip4,
-                                   sha1_key=key1)
+        session = VppBFDUDPSession(self, self.pg0, self.pg0.remote_ip4, sha1_key=key1)
         session.add_vpp_config()
         session.activate_auth(key2)
 
     def test_set_del_udp_echo_source(self):
         session.add_vpp_config()
         session.activate_auth(key2)
 
     def test_set_del_udp_echo_source(self):
-        """ set/del udp echo source """
+        """set/del udp echo source"""
         self.create_loopback_interfaces(1)
         self.loopback0 = self.lo_interfaces[0]
         self.loopback0.admin_up()
         self.create_loopback_interfaces(1)
         self.loopback0 = self.lo_interfaces[0]
         self.loopback0.admin_up()
@@ -307,8 +328,7 @@ class BFDAPITestCase(VppTestCase):
         self.assertFalse(echo_source.have_usable_ip4)
         self.assertFalse(echo_source.have_usable_ip6)
 
         self.assertFalse(echo_source.have_usable_ip4)
         self.assertFalse(echo_source.have_usable_ip6)
 
-        self.vapi.bfd_udp_set_echo_source(
-            sw_if_index=self.loopback0.sw_if_index)
+        self.vapi.bfd_udp_set_echo_source(sw_if_index=self.loopback0.sw_if_index)
         echo_source = self.vapi.bfd_udp_get_echo_source()
         self.assertTrue(echo_source.is_set)
         self.assertEqual(echo_source.sw_if_index, self.loopback0.sw_if_index)
         echo_source = self.vapi.bfd_udp_get_echo_source()
         self.assertTrue(echo_source.is_set)
         self.assertEqual(echo_source.sw_if_index, self.loopback0.sw_if_index)
@@ -316,8 +336,9 @@ class BFDAPITestCase(VppTestCase):
         self.assertFalse(echo_source.have_usable_ip6)
 
         self.loopback0.config_ip4()
         self.assertFalse(echo_source.have_usable_ip6)
 
         self.loopback0.config_ip4()
-        echo_ip4 = ipaddress.IPv4Address(int(ipaddress.IPv4Address(
-            self.loopback0.local_ip4)) ^ 1).packed
+        echo_ip4 = ipaddress.IPv4Address(
+            int(ipaddress.IPv4Address(self.loopback0.local_ip4)) ^ 1
+        ).packed
         echo_source = self.vapi.bfd_udp_get_echo_source()
         self.assertTrue(echo_source.is_set)
         self.assertEqual(echo_source.sw_if_index, self.loopback0.sw_if_index)
         echo_source = self.vapi.bfd_udp_get_echo_source()
         self.assertTrue(echo_source.is_set)
         self.assertEqual(echo_source.sw_if_index, self.loopback0.sw_if_index)
@@ -326,8 +347,9 @@ class BFDAPITestCase(VppTestCase):
         self.assertFalse(echo_source.have_usable_ip6)
 
         self.loopback0.config_ip6()
         self.assertFalse(echo_source.have_usable_ip6)
 
         self.loopback0.config_ip6()
-        echo_ip6 = ipaddress.IPv6Address(int(ipaddress.IPv6Address(
-            self.loopback0.local_ip6)) ^ 1).packed
+        echo_ip6 = ipaddress.IPv6Address(
+            int(ipaddress.IPv6Address(self.loopback0.local_ip6)) ^ 1
+        ).packed
 
         echo_source = self.vapi.bfd_udp_get_echo_source()
         self.assertTrue(echo_source.is_set)
 
         echo_source = self.vapi.bfd_udp_get_echo_source()
         self.assertTrue(echo_source.is_set)
@@ -345,11 +367,20 @@ class BFDAPITestCase(VppTestCase):
 
 
 class BFDTestSession(object):
 
 
 class BFDTestSession(object):
-    """ BFD session as seen from test framework side """
-
-    def __init__(self, test, interface, af, detect_mult=3, sha1_key=None,
-                 bfd_key_id=None, our_seq_number=None,
-                 tunnel_header=None, phy_interface=None):
+    """BFD session as seen from test framework side"""
+
+    def __init__(
+        self,
+        test,
+        interface,
+        af,
+        detect_mult=3,
+        sha1_key=None,
+        bfd_key_id=None,
+        our_seq_number=None,
+        tunnel_header=None,
+        phy_interface=None,
+    ):
         self.test = test
         self.af = af
         self.sha1_key = sha1_key
         self.test = test
         self.af = af
         self.sha1_key = sha1_key
@@ -381,17 +412,25 @@ class BFDTestSession(object):
         self.rx_packets_echo = 0
 
     def inc_seq_num(self):
         self.rx_packets_echo = 0
 
     def inc_seq_num(self):
-        """ increment sequence number, wrapping if needed """
+        """increment sequence number, wrapping if needed"""
         if self.our_seq_number == 0xFFFFFFFF:
             self.our_seq_number = 0
         else:
             self.our_seq_number += 1
 
         if self.our_seq_number == 0xFFFFFFFF:
             self.our_seq_number = 0
         else:
             self.our_seq_number += 1
 
-    def update(self, my_discriminator=None, your_discriminator=None,
-               desired_min_tx=None, required_min_rx=None,
-               required_min_echo_rx=None, detect_mult=None,
-               diag=None, state=None, auth_type=None):
-        """ update BFD parameters associated with session """
+    def update(
+        self,
+        my_discriminator=None,
+        your_discriminator=None,
+        desired_min_tx=None,
+        required_min_rx=None,
+        required_min_echo_rx=None,
+        detect_mult=None,
+        diag=None,
+        state=None,
+        auth_type=None,
+    ):
+        """update BFD parameters associated with session"""
         if my_discriminator is not None:
             self.my_discriminator = my_discriminator
         if your_discriminator is not None:
         if my_discriminator is not None:
             self.my_discriminator = my_discriminator
         if your_discriminator is not None:
@@ -412,34 +451,37 @@ class BFDTestSession(object):
             self.auth_type = auth_type
 
     def fill_packet_fields(self, packet):
             self.auth_type = auth_type
 
     def fill_packet_fields(self, packet):
-        """ set packet fields with known values in packet """
+        """set packet fields with known values in packet"""
         bfd = packet[BFD]
         if self.my_discriminator:
         bfd = packet[BFD]
         if self.my_discriminator:
-            self.test.logger.debug("BFD: setting packet.my_discriminator=%s",
-                                   self.my_discriminator)
+            self.test.logger.debug(
+                "BFD: setting packet.my_discriminator=%s", self.my_discriminator
+            )
             bfd.my_discriminator = self.my_discriminator
         if self.your_discriminator:
             bfd.my_discriminator = self.my_discriminator
         if self.your_discriminator:
-            self.test.logger.debug("BFD: setting packet.your_discriminator=%s",
-                                   self.your_discriminator)
+            self.test.logger.debug(
+                "BFD: setting packet.your_discriminator=%s", self.your_discriminator
+            )
             bfd.your_discriminator = self.your_discriminator
         if self.required_min_rx:
             self.test.logger.debug(
             bfd.your_discriminator = self.your_discriminator
         if self.required_min_rx:
             self.test.logger.debug(
-                "BFD: setting packet.required_min_rx_interval=%s",
-                self.required_min_rx)
+                "BFD: setting packet.required_min_rx_interval=%s", self.required_min_rx
+            )
             bfd.required_min_rx_interval = self.required_min_rx
         if self.required_min_echo_rx:
             self.test.logger.debug(
             bfd.required_min_rx_interval = self.required_min_rx
         if self.required_min_echo_rx:
             self.test.logger.debug(
-                "BFD: setting packet.required_min_echo_rx=%s",
-                self.required_min_echo_rx)
+                "BFD: setting packet.required_min_echo_rx=%s", self.required_min_echo_rx
+            )
             bfd.required_min_echo_rx_interval = self.required_min_echo_rx
         if self.desired_min_tx:
             self.test.logger.debug(
             bfd.required_min_echo_rx_interval = self.required_min_echo_rx
         if self.desired_min_tx:
             self.test.logger.debug(
-                "BFD: setting packet.desired_min_tx_interval=%s",
-                self.desired_min_tx)
+                "BFD: setting packet.desired_min_tx_interval=%s", self.desired_min_tx
+            )
             bfd.desired_min_tx_interval = self.desired_min_tx
         if self.detect_mult:
             self.test.logger.debug(
             bfd.desired_min_tx_interval = self.desired_min_tx
         if self.detect_mult:
             self.test.logger.debug(
-                "BFD: setting packet.detect_mult=%s", self.detect_mult)
+                "BFD: setting packet.detect_mult=%s", self.detect_mult
+            )
             bfd.detect_mult = self.detect_mult
         if self.diag:
             self.test.logger.debug("BFD: setting packet.diag=%s", self.diag)
             bfd.detect_mult = self.detect_mult
         if self.diag:
             self.test.logger.debug("BFD: setting packet.diag=%s", self.diag)
@@ -449,12 +491,11 @@ class BFDTestSession(object):
             bfd.state = self.state
         if self.auth_type:
             # this is used by a negative test-case
             bfd.state = self.state
         if self.auth_type:
             # this is used by a negative test-case
-            self.test.logger.debug("BFD: setting packet.auth_type=%s",
-                                   self.auth_type)
+            self.test.logger.debug("BFD: setting packet.auth_type=%s", self.auth_type)
             bfd.auth_type = self.auth_type
 
     def create_packet(self):
             bfd.auth_type = self.auth_type
 
     def create_packet(self):
-        """ create a BFD packet, reflecting the current state of session """
+        """create a BFD packet, reflecting the current state of session"""
         if self.sha1_key:
             bfd = BFD(flags="A")
             bfd.auth_type = self.sha1_key.auth_type
         if self.sha1_key:
             bfd = BFD(flags="A")
             bfd.auth_type = self.sha1_key.auth_type
@@ -464,37 +505,48 @@ class BFDTestSession(object):
             bfd.length = BFD.sha1_auth_len + BFD.bfd_pkt_len
         else:
             bfd = BFD()
             bfd.length = BFD.sha1_auth_len + BFD.bfd_pkt_len
         else:
             bfd = BFD()
-        packet = Ether(src=self.phy_interface.remote_mac,
-                       dst=self.phy_interface.local_mac)
+        packet = Ether(
+            src=self.phy_interface.remote_mac, dst=self.phy_interface.local_mac
+        )
         if self.tunnel_header:
             packet = packet / self.tunnel_header
         if self.af == AF_INET6:
         if self.tunnel_header:
             packet = packet / self.tunnel_header
         if self.af == AF_INET6:
-            packet = (packet /
-                      IPv6(src=self.interface.remote_ip6,
-                           dst=self.interface.local_ip6,
-                           hlim=255) /
-                      UDP(sport=self.udp_sport, dport=BFD.udp_dport) /
-                      bfd)
+            packet = (
+                packet
+                / IPv6(
+                    src=self.interface.remote_ip6,
+                    dst=self.interface.local_ip6,
+                    hlim=255,
+                )
+                / UDP(sport=self.udp_sport, dport=BFD.udp_dport)
+                / bfd
+            )
         else:
         else:
-            packet = (packet /
-                      IP(src=self.interface.remote_ip4,
-                         dst=self.interface.local_ip4,
-                         ttl=255) /
-                      UDP(sport=self.udp_sport, dport=BFD.udp_dport) /
-                      bfd)
+            packet = (
+                packet
+                / IP(
+                    src=self.interface.remote_ip4, dst=self.interface.local_ip4, ttl=255
+                )
+                / UDP(sport=self.udp_sport, dport=BFD.udp_dport)
+                / bfd
+            )
         self.test.logger.debug("BFD: Creating packet")
         self.fill_packet_fields(packet)
         if self.sha1_key:
         self.test.logger.debug("BFD: Creating packet")
         self.fill_packet_fields(packet)
         if self.sha1_key:
-            hash_material = scapy.compat.raw(
-                packet[BFD])[:32] + self.sha1_key.key + \
-                b"\0" * (20 - len(self.sha1_key.key))
-            self.test.logger.debug("BFD: Calculated SHA1 hash: %s" %
-                                   hashlib.sha1(hash_material).hexdigest())
+            hash_material = (
+                scapy.compat.raw(packet[BFD])[:32]
+                + self.sha1_key.key
+                + b"\0" * (20 - len(self.sha1_key.key))
+            )
+            self.test.logger.debug(
+                "BFD: Calculated SHA1 hash: %s"
+                % hashlib.sha1(hash_material).hexdigest()
+            )
             packet[BFD].auth_key_hash = hashlib.sha1(hash_material).digest()
         return packet
 
     def send_packet(self, packet=None, interface=None):
             packet[BFD].auth_key_hash = hashlib.sha1(hash_material).digest()
         return packet
 
     def send_packet(self, packet=None, interface=None):
-        """ send packet on interface, creating the packet if needed """
+        """send packet on interface, creating the packet if needed"""
         if packet is None:
             packet = self.create_packet()
         if interface is None:
         if packet is None:
             packet = self.create_packet()
         if interface is None:
@@ -505,82 +557,95 @@ class BFDTestSession(object):
         self.test.pg_start()
 
     def verify_sha1_auth(self, packet):
         self.test.pg_start()
 
     def verify_sha1_auth(self, packet):
-        """ Verify correctness of authentication in BFD layer. """
+        """Verify correctness of authentication in BFD layer."""
         bfd = packet[BFD]
         self.test.assert_equal(bfd.auth_len, 28, "Auth section length")
         bfd = packet[BFD]
         self.test.assert_equal(bfd.auth_len, 28, "Auth section length")
-        self.test.assert_equal(bfd.auth_type, self.sha1_key.auth_type,
-                               BFDAuthType)
+        self.test.assert_equal(bfd.auth_type, self.sha1_key.auth_type, BFDAuthType)
         self.test.assert_equal(bfd.auth_key_id, self.bfd_key_id, "Key ID")
         self.test.assert_equal(bfd.auth_reserved, 0, "Reserved")
         if self.vpp_seq_number is None:
             self.vpp_seq_number = bfd.auth_seq_num
         self.test.assert_equal(bfd.auth_key_id, self.bfd_key_id, "Key ID")
         self.test.assert_equal(bfd.auth_reserved, 0, "Reserved")
         if self.vpp_seq_number is None:
             self.vpp_seq_number = bfd.auth_seq_num
-            self.test.logger.debug("Received initial sequence number: %s" %
-                                   self.vpp_seq_number)
+            self.test.logger.debug(
+                "Received initial sequence number: %s" % self.vpp_seq_number
+            )
         else:
             recvd_seq_num = bfd.auth_seq_num
         else:
             recvd_seq_num = bfd.auth_seq_num
-            self.test.logger.debug("Received followup sequence number: %s" %
-                                   recvd_seq_num)
-            if self.vpp_seq_number < 0xffffffff:
-                if self.sha1_key.auth_type == \
-                        BFDAuthType.meticulous_keyed_sha1:
-                    self.test.assert_equal(recvd_seq_num,
-                                           self.vpp_seq_number + 1,
-                                           "BFD sequence number")
+            self.test.logger.debug(
+                "Received followup sequence number: %s" % recvd_seq_num
+            )
+            if self.vpp_seq_number < 0xFFFFFFFF:
+                if self.sha1_key.auth_type == BFDAuthType.meticulous_keyed_sha1:
+                    self.test.assert_equal(
+                        recvd_seq_num, self.vpp_seq_number + 1, "BFD sequence number"
+                    )
                 else:
                 else:
-                    self.test.assert_in_range(recvd_seq_num,
-                                              self.vpp_seq_number,
-                                              self.vpp_seq_number + 1,
-                                              "BFD sequence number")
+                    self.test.assert_in_range(
+                        recvd_seq_num,
+                        self.vpp_seq_number,
+                        self.vpp_seq_number + 1,
+                        "BFD sequence number",
+                    )
             else:
             else:
-                if self.sha1_key.auth_type == \
-                        BFDAuthType.meticulous_keyed_sha1:
-                    self.test.assert_equal(recvd_seq_num, 0,
-                                           "BFD sequence number")
+                if self.sha1_key.auth_type == BFDAuthType.meticulous_keyed_sha1:
+                    self.test.assert_equal(recvd_seq_num, 0, "BFD sequence number")
                 else:
                 else:
-                    self.test.assertIn(recvd_seq_num, (self.vpp_seq_number, 0),
-                                       "BFD sequence number not one of "
-                                       "(%s, 0)" % self.vpp_seq_number)
+                    self.test.assertIn(
+                        recvd_seq_num,
+                        (self.vpp_seq_number, 0),
+                        "BFD sequence number not one of "
+                        "(%s, 0)" % self.vpp_seq_number,
+                    )
             self.vpp_seq_number = recvd_seq_num
         # last 20 bytes represent the hash - so replace them with the key,
         # pad the result with zeros and hash the result
             self.vpp_seq_number = recvd_seq_num
         # last 20 bytes represent the hash - so replace them with the key,
         # pad the result with zeros and hash the result
-        hash_material = bfd.original[:-20] + self.sha1_key.key + \
-            b"\0" * (20 - len(self.sha1_key.key))
+        hash_material = (
+            bfd.original[:-20]
+            + self.sha1_key.key
+            + b"\0" * (20 - len(self.sha1_key.key))
+        )
         expected_hash = hashlib.sha1(hash_material).hexdigest()
         expected_hash = hashlib.sha1(hash_material).hexdigest()
-        self.test.assert_equal(binascii.hexlify(bfd.auth_key_hash),
-                               expected_hash.encode(), "Auth key hash")
+        self.test.assert_equal(
+            binascii.hexlify(bfd.auth_key_hash), expected_hash.encode(), "Auth key hash"
+        )
 
     def verify_bfd(self, packet):
 
     def verify_bfd(self, packet):
-        """ Verify correctness of BFD layer. """
+        """Verify correctness of BFD layer."""
         bfd = packet[BFD]
         self.test.assert_equal(bfd.version, 1, "BFD version")
         bfd = packet[BFD]
         self.test.assert_equal(bfd.version, 1, "BFD version")
-        self.test.assert_equal(bfd.your_discriminator,
-                               self.my_discriminator,
-                               "BFD - your discriminator")
+        self.test.assert_equal(
+            bfd.your_discriminator, self.my_discriminator, "BFD - your discriminator"
+        )
         if self.sha1_key:
             self.verify_sha1_auth(packet)
 
 
 def bfd_session_up(test):
         if self.sha1_key:
             self.verify_sha1_auth(packet)
 
 
 def bfd_session_up(test):
-    """ Bring BFD session up """
+    """Bring BFD session up"""
     test.logger.info("BFD: Waiting for slow hello")
     p = wait_for_bfd_packet(test, 2, is_tunnel=test.vpp_session.is_tunnel)
     old_offset = None
     test.logger.info("BFD: Waiting for slow hello")
     p = wait_for_bfd_packet(test, 2, is_tunnel=test.vpp_session.is_tunnel)
     old_offset = None
-    if hasattr(test, 'vpp_clock_offset'):
+    if hasattr(test, "vpp_clock_offset"):
         old_offset = test.vpp_clock_offset
     test.vpp_clock_offset = time.time() - float(p.time)
         old_offset = test.vpp_clock_offset
     test.vpp_clock_offset = time.time() - float(p.time)
-    test.logger.debug("BFD: Calculated vpp clock offset: %s",
-                      test.vpp_clock_offset)
+    test.logger.debug("BFD: Calculated vpp clock offset: %s", test.vpp_clock_offset)
     if old_offset:
         test.assertAlmostEqual(
     if old_offset:
         test.assertAlmostEqual(
-            old_offset, test.vpp_clock_offset, delta=0.5,
-            msg="vpp clock offset not stable (new: %s, old: %s)" %
-            (test.vpp_clock_offset, old_offset))
+            old_offset,
+            test.vpp_clock_offset,
+            delta=0.5,
+            msg="vpp clock offset not stable (new: %s, old: %s)"
+            % (test.vpp_clock_offset, old_offset),
+        )
     test.logger.info("BFD: Sending Init")
     test.logger.info("BFD: Sending Init")
-    test.test_session.update(my_discriminator=randint(0, 40000000),
-                             your_discriminator=p[BFD].my_discriminator,
-                             state=BFDState.init)
-    if test.test_session.sha1_key and test.test_session.sha1_key.auth_type == \
-            BFDAuthType.meticulous_keyed_sha1:
+    test.test_session.update(
+        my_discriminator=randint(0, 40000000),
+        your_discriminator=p[BFD].my_discriminator,
+        state=BFDState.init,
+    )
+    if (
+        test.test_session.sha1_key
+        and test.test_session.sha1_key.auth_type == BFDAuthType.meticulous_keyed_sha1
+    ):
         test.test_session.inc_seq_num()
     test.test_session.send_packet()
     test.logger.info("BFD: Waiting for event")
         test.test_session.inc_seq_num()
     test.test_session.send_packet()
     test.logger.info("BFD: Waiting for event")
@@ -588,19 +653,23 @@ def bfd_session_up(test):
     verify_event(test, e, expected_state=BFDState.up)
     test.logger.info("BFD: Session is Up")
     test.test_session.update(state=BFDState.up)
     verify_event(test, e, expected_state=BFDState.up)
     test.logger.info("BFD: Session is Up")
     test.test_session.update(state=BFDState.up)
-    if test.test_session.sha1_key and test.test_session.sha1_key.auth_type == \
-            BFDAuthType.meticulous_keyed_sha1:
+    if (
+        test.test_session.sha1_key
+        and test.test_session.sha1_key.auth_type == BFDAuthType.meticulous_keyed_sha1
+    ):
         test.test_session.inc_seq_num()
     test.test_session.send_packet()
     test.assert_equal(test.vpp_session.state, BFDState.up, BFDState)
 
 
 def bfd_session_down(test):
         test.test_session.inc_seq_num()
     test.test_session.send_packet()
     test.assert_equal(test.vpp_session.state, BFDState.up, BFDState)
 
 
 def bfd_session_down(test):
-    """ Bring BFD session down """
+    """Bring BFD session down"""
     test.assert_equal(test.vpp_session.state, BFDState.up, BFDState)
     test.test_session.update(state=BFDState.down)
     test.assert_equal(test.vpp_session.state, BFDState.up, BFDState)
     test.test_session.update(state=BFDState.down)
-    if test.test_session.sha1_key and test.test_session.sha1_key.auth_type == \
-            BFDAuthType.meticulous_keyed_sha1:
+    if (
+        test.test_session.sha1_key
+        and test.test_session.sha1_key.auth_type == BFDAuthType.meticulous_keyed_sha1
+    ):
         test.test_session.inc_seq_num()
     test.test_session.send_packet()
     test.logger.info("BFD: Waiting for event")
         test.test_session.inc_seq_num()
     test.test_session.send_packet()
     test.logger.info("BFD: Waiting for event")
@@ -617,25 +686,25 @@ def verify_bfd_session_config(test, session, state=None):
     # are valid (in get_bfd_udp_session_dump_entry)
     if state:
         test.assert_equal(dump.state, state, "session state")
     # are valid (in get_bfd_udp_session_dump_entry)
     if state:
         test.assert_equal(dump.state, state, "session state")
-    test.assert_equal(dump.required_min_rx, session.required_min_rx,
-                      "required min rx interval")
-    test.assert_equal(dump.desired_min_tx, session.desired_min_tx,
-                      "desired min tx interval")
-    test.assert_equal(dump.detect_mult, session.detect_mult,
-                      "detect multiplier")
+    test.assert_equal(
+        dump.required_min_rx, session.required_min_rx, "required min rx interval"
+    )
+    test.assert_equal(
+        dump.desired_min_tx, session.desired_min_tx, "desired min tx interval"
+    )
+    test.assert_equal(dump.detect_mult, session.detect_mult, "detect multiplier")
     if session.sha1_key is None:
         test.assert_equal(dump.is_authenticated, 0, "is_authenticated flag")
     else:
         test.assert_equal(dump.is_authenticated, 1, "is_authenticated flag")
     if session.sha1_key is None:
         test.assert_equal(dump.is_authenticated, 0, "is_authenticated flag")
     else:
         test.assert_equal(dump.is_authenticated, 1, "is_authenticated flag")
-        test.assert_equal(dump.bfd_key_id, session.bfd_key_id,
-                          "bfd key id")
-        test.assert_equal(dump.conf_key_id,
-                          session.sha1_key.conf_key_id,
-                          "config key id")
+        test.assert_equal(dump.bfd_key_id, session.bfd_key_id, "bfd key id")
+        test.assert_equal(
+            dump.conf_key_id, session.sha1_key.conf_key_id, "config key id"
+        )
 
 
 def verify_ip(test, packet):
 
 
 def verify_ip(test, packet):
-    """ Verify correctness of IP layer. """
+    """Verify correctness of IP layer."""
     if test.vpp_session.af == AF_INET6:
         ip = packet[IPv6]
         local_ip = test.vpp_session.interface.local_ip6
     if test.vpp_session.af == AF_INET6:
         ip = packet[IPv6]
         local_ip = test.vpp_session.interface.local_ip6
@@ -651,30 +720,31 @@ def verify_ip(test, packet):
 
 
 def verify_udp(test, packet):
 
 
 def verify_udp(test, packet):
-    """ Verify correctness of UDP layer. """
+    """Verify correctness of UDP layer."""
     udp = packet[UDP]
     test.assert_equal(udp.dport, BFD.udp_dport, "UDP destination port")
     udp = packet[UDP]
     test.assert_equal(udp.dport, BFD.udp_dport, "UDP destination port")
-    test.assert_in_range(udp.sport, BFD.udp_sport_min, BFD.udp_sport_max,
-                         "UDP source port")
+    test.assert_in_range(
+        udp.sport, BFD.udp_sport_min, BFD.udp_sport_max, "UDP source port"
+    )
 
 
 def verify_event(test, event, expected_state):
 
 
 def verify_event(test, event, expected_state):
-    """ Verify correctness of event values. """
+    """Verify correctness of event values."""
     e = event
     test.logger.debug("BFD: Event: %s" % reprlib.repr(e))
     e = event
     test.logger.debug("BFD: Event: %s" % reprlib.repr(e))
-    test.assert_equal(e.sw_if_index,
-                      test.vpp_session.interface.sw_if_index,
-                      "BFD interface index")
-
-    test.assert_equal(str(e.local_addr), test.vpp_session.local_addr,
-                      "Local IPv6 address")
-    test.assert_equal(str(e.peer_addr), test.vpp_session.peer_addr,
-                      "Peer IPv6 address")
+    test.assert_equal(
+        e.sw_if_index, test.vpp_session.interface.sw_if_index, "BFD interface index"
+    )
+
+    test.assert_equal(
+        str(e.local_addr), test.vpp_session.local_addr, "Local IPv6 address"
+    )
+    test.assert_equal(str(e.peer_addr), test.vpp_session.peer_addr, "Peer IPv6 address")
     test.assert_equal(e.state, expected_state, BFDState)
 
 
 def wait_for_bfd_packet(test, timeout=1, pcap_time_min=None, is_tunnel=False):
     test.assert_equal(e.state, expected_state, BFDState)
 
 
 def wait_for_bfd_packet(test, timeout=1, pcap_time_min=None, is_tunnel=False):
-    """ wait for BFD packet and verify its correctness
+    """wait for BFD packet and verify its correctness
 
     :param timeout: how long to wait
     :param pcap_time_min: ignore packets with pcap timestamp lower than this
 
     :param timeout: how long to wait
     :param pcap_time_min: ignore packets with pcap timestamp lower than this
@@ -695,9 +765,13 @@ def wait_for_bfd_packet(test, timeout=1, pcap_time_min=None, is_tunnel=False):
         test.test_session.rx_packets += 1
         test.logger.debug(ppp("BFD: Got packet:", p))
         if pcap_time_min is not None and p.time < pcap_time_min:
         test.test_session.rx_packets += 1
         test.logger.debug(ppp("BFD: Got packet:", p))
         if pcap_time_min is not None and p.time < pcap_time_min:
-            test.logger.debug(ppp("BFD: ignoring packet (pcap time %s < "
-                                  "pcap time min %s):" %
-                                  (p.time, pcap_time_min), p))
+            test.logger.debug(
+                ppp(
+                    "BFD: ignoring packet (pcap time %s < "
+                    "pcap time min %s):" % (p.time, pcap_time_min),
+                    p,
+                )
+            )
         else:
             break
     if is_tunnel:
         else:
             break
     if is_tunnel:
@@ -722,15 +796,15 @@ def bfd_grab_stats_snapshot(test, bs_idx=0, thread_index=None):
     s = test.statistics
     ti = thread_index
     if ti is None:
     s = test.statistics
     ti = thread_index
     if ti is None:
-        rx = s['/bfd/rx-session-counters'][:, bs_idx].sum_packets()
-        rx_echo = s['/bfd/rx-session-echo-counters'][:, bs_idx].sum_packets()
-        tx = s['/bfd/tx-session-counters'][:, bs_idx].sum_packets()
-        tx_echo = s['/bfd/tx-session-echo-counters'][:, bs_idx].sum_packets()
+        rx = s["/bfd/rx-session-counters"][:, bs_idx].sum_packets()
+        rx_echo = s["/bfd/rx-session-echo-counters"][:, bs_idx].sum_packets()
+        tx = s["/bfd/tx-session-counters"][:, bs_idx].sum_packets()
+        tx_echo = s["/bfd/tx-session-echo-counters"][:, bs_idx].sum_packets()
     else:
     else:
-        rx = s['/bfd/rx-session-counters'][ti, bs_idx].sum_packets()
-        rx_echo = s['/bfd/rx-session-echo-counters'][ti, bs_idx].sum_packets()
-        tx = s['/bfd/tx-session-counters'][ti, bs_idx].sum_packets()
-        tx_echo = s['/bfd/tx-session-echo-counters'][ti, bs_idx].sum_packets()
+        rx = s["/bfd/rx-session-counters"][ti, bs_idx].sum_packets()
+        rx_echo = s["/bfd/rx-session-echo-counters"][ti, bs_idx].sum_packets()
+        tx = s["/bfd/tx-session-counters"][ti, bs_idx].sum_packets()
+        tx_echo = s["/bfd/tx-session-echo-counters"][ti, bs_idx].sum_packets()
     return BFDStats(rx, rx_echo, tx, tx_echo)
 
 
     return BFDStats(rx, rx_echo, tx, tx_echo)
 
 
@@ -780,10 +854,9 @@ class BFD4TestCase(VppTestCase):
         self.vapi.want_bfd_events()
         self.pg0.enable_capture()
         try:
         self.vapi.want_bfd_events()
         self.pg0.enable_capture()
         try:
-            self.bfd_udp4_sessions = self.statistics['/bfd/udp4/sessions']
-            self.bfd_udp6_sessions = self.statistics['/bfd/udp6/sessions']
-            self.vpp_session = VppBFDUDPSession(self, self.pg0,
-                                                self.pg0.remote_ip4)
+            self.bfd_udp4_sessions = self.statistics["/bfd/udp4/sessions"]
+            self.bfd_udp6_sessions = self.statistics["/bfd/udp6/sessions"]
+            self.vpp_session = VppBFDUDPSession(self, self.pg0, self.pg0.remote_ip4)
             self.vpp_session.add_vpp_config()
             self.vpp_session.admin_up()
             self.test_session = BFDTestSession(self, self.pg0, AF_INET)
             self.vpp_session.add_vpp_config()
             self.vpp_session.admin_up()
             self.test_session = BFDTestSession(self, self.pg0, AF_INET)
@@ -798,26 +871,29 @@ class BFD4TestCase(VppTestCase):
         super(BFD4TestCase, self).tearDown()
 
     def test_session_up(self):
         super(BFD4TestCase, self).tearDown()
 
     def test_session_up(self):
-        """ bring BFD session up """
+        """bring BFD session up"""
         bfd_session_up(self)
         bfd_session_up(self)
-        bfd_udp4_sessions = self.statistics['/bfd/udp4/sessions']
-        bfd_udp6_sessions = self.statistics['/bfd/udp6/sessions']
+        bfd_udp4_sessions = self.statistics["/bfd/udp4/sessions"]
+        bfd_udp6_sessions = self.statistics["/bfd/udp6/sessions"]
         self.assert_equal(bfd_udp4_sessions - self.bfd_udp4_sessions, 1)
         self.assert_equal(bfd_udp6_sessions, self.bfd_udp6_sessions)
 
     def test_session_up_by_ip(self):
         self.assert_equal(bfd_udp4_sessions - self.bfd_udp4_sessions, 1)
         self.assert_equal(bfd_udp6_sessions, self.bfd_udp6_sessions)
 
     def test_session_up_by_ip(self):
-        """ bring BFD session up - first frame looked up by address pair """
+        """bring BFD session up - first frame looked up by address pair"""
         self.logger.info("BFD: Sending Slow control frame")
         self.test_session.update(my_discriminator=randint(0, 40000000))
         self.test_session.send_packet()
         self.pg0.enable_capture()
         p = self.pg0.wait_for_packet(1)
         self.logger.info("BFD: Sending Slow control frame")
         self.test_session.update(my_discriminator=randint(0, 40000000))
         self.test_session.send_packet()
         self.pg0.enable_capture()
         p = self.pg0.wait_for_packet(1)
-        self.assert_equal(p[BFD].your_discriminator,
-                          self.test_session.my_discriminator,
-                          "BFD - your discriminator")
+        self.assert_equal(
+            p[BFD].your_discriminator,
+            self.test_session.my_discriminator,
+            "BFD - your discriminator",
+        )
         self.assert_equal(p[BFD].state, BFDState.init, BFDState)
         self.assert_equal(p[BFD].state, BFDState.init, BFDState)
-        self.test_session.update(your_discriminator=p[BFD].my_discriminator,
-                                 state=BFDState.up)
+        self.test_session.update(
+            your_discriminator=p[BFD].my_discriminator, state=BFDState.up
+        )
         self.logger.info("BFD: Waiting for event")
         e = self.vapi.wait_for_event(1, "bfd_udp_session_event")
         verify_event(self, e, expected_state=BFDState.init)
         self.logger.info("BFD: Waiting for event")
         e = self.vapi.wait_for_event(1, "bfd_udp_session_event")
         verify_event(self, e, expected_state=BFDState.init)
@@ -832,21 +908,20 @@ class BFD4TestCase(VppTestCase):
         self.assert_equal(self.vpp_session.state, BFDState.up, BFDState)
 
     def test_session_down(self):
         self.assert_equal(self.vpp_session.state, BFDState.up, BFDState)
 
     def test_session_down(self):
-        """ bring BFD session down """
+        """bring BFD session down"""
         bfd_session_up(self)
         bfd_session_down(self)
 
     def test_hold_up(self):
         bfd_session_up(self)
         bfd_session_down(self)
 
     def test_hold_up(self):
-        """ hold BFD session up """
+        """hold BFD session up"""
         bfd_session_up(self)
         for dummy in range(self.test_session.detect_mult * 2):
             wait_for_bfd_packet(self)
             self.test_session.send_packet()
         bfd_session_up(self)
         for dummy in range(self.test_session.detect_mult * 2):
             wait_for_bfd_packet(self)
             self.test_session.send_packet()
-        self.assert_equal(len(self.vapi.collect_events()), 0,
-                          "number of bfd events")
+        self.assert_equal(len(self.vapi.collect_events()), 0, "number of bfd events")
 
     def test_slow_timer(self):
 
     def test_slow_timer(self):
-        """ verify slow periodic control frames while session down """
+        """verify slow periodic control frames while session down"""
         packet_count = 3
         self.logger.info("BFD: Waiting for %d BFD packets", packet_count)
         prev_packet = wait_for_bfd_packet(self, 2)
         packet_count = 3
         self.logger.info("BFD: Waiting for %d BFD packets", packet_count)
         prev_packet = wait_for_bfd_packet(self, 2)
@@ -855,55 +930,60 @@ class BFD4TestCase(VppTestCase):
             time_diff = next_packet.time - prev_packet.time
             # spec says the range should be <0.75, 1>, allow extra 0.05 margin
             # to work around timing issues
             time_diff = next_packet.time - prev_packet.time
             # spec says the range should be <0.75, 1>, allow extra 0.05 margin
             # to work around timing issues
-            self.assert_in_range(
-                time_diff, 0.70, 1.05, "time between slow packets")
+            self.assert_in_range(time_diff, 0.70, 1.05, "time between slow packets")
             prev_packet = next_packet
 
     def test_zero_remote_min_rx(self):
             prev_packet = next_packet
 
     def test_zero_remote_min_rx(self):
-        """ no packets when zero remote required min rx interval """
+        """no packets when zero remote required min rx interval"""
         bfd_session_up(self)
         self.test_session.update(required_min_rx=0)
         self.test_session.send_packet()
         for dummy in range(self.test_session.detect_mult):
         bfd_session_up(self)
         self.test_session.update(required_min_rx=0)
         self.test_session.send_packet()
         for dummy in range(self.test_session.detect_mult):
-            self.sleep(self.vpp_session.required_min_rx / USEC_IN_SEC,
-                       "sleep before transmitting bfd packet")
+            self.sleep(
+                self.vpp_session.required_min_rx / USEC_IN_SEC,
+                "sleep before transmitting bfd packet",
+            )
             self.test_session.send_packet()
             try:
                 p = wait_for_bfd_packet(self, timeout=0)
                 self.logger.error(ppp("Received unexpected packet:", p))
             except CaptureTimeoutError:
                 pass
             self.test_session.send_packet()
             try:
                 p = wait_for_bfd_packet(self, timeout=0)
                 self.logger.error(ppp("Received unexpected packet:", p))
             except CaptureTimeoutError:
                 pass
-        self.assert_equal(
-            len(self.vapi.collect_events()), 0, "number of bfd events")
+        self.assert_equal(len(self.vapi.collect_events()), 0, "number of bfd events")
         self.test_session.update(required_min_rx=300000)
         for dummy in range(3):
             self.test_session.send_packet()
             wait_for_bfd_packet(
         self.test_session.update(required_min_rx=300000)
         for dummy in range(3):
             self.test_session.send_packet()
             wait_for_bfd_packet(
-                self, timeout=self.test_session.required_min_rx / USEC_IN_SEC)
-        self.assert_equal(
-            len(self.vapi.collect_events()), 0, "number of bfd events")
+                self, timeout=self.test_session.required_min_rx / USEC_IN_SEC
+            )
+        self.assert_equal(len(self.vapi.collect_events()), 0, "number of bfd events")
 
     def test_conn_down(self):
 
     def test_conn_down(self):
-        """ verify session goes down after inactivity """
+        """verify session goes down after inactivity"""
         bfd_session_up(self)
         bfd_session_up(self)
-        detection_time = self.test_session.detect_mult *\
-            self.vpp_session.required_min_rx / USEC_IN_SEC
+        detection_time = (
+            self.test_session.detect_mult
+            * self.vpp_session.required_min_rx
+            / USEC_IN_SEC
+        )
         self.sleep(detection_time, "waiting for BFD session time-out")
         e = self.vapi.wait_for_event(1, "bfd_udp_session_event")
         verify_event(self, e, expected_state=BFDState.down)
 
     def test_peer_discr_reset_sess_down(self):
         self.sleep(detection_time, "waiting for BFD session time-out")
         e = self.vapi.wait_for_event(1, "bfd_udp_session_event")
         verify_event(self, e, expected_state=BFDState.down)
 
     def test_peer_discr_reset_sess_down(self):
-        """ peer discriminator reset after session goes down """
+        """peer discriminator reset after session goes down"""
         bfd_session_up(self)
         bfd_session_up(self)
-        detection_time = self.test_session.detect_mult *\
-            self.vpp_session.required_min_rx / USEC_IN_SEC
+        detection_time = (
+            self.test_session.detect_mult
+            * self.vpp_session.required_min_rx
+            / USEC_IN_SEC
+        )
         self.sleep(detection_time, "waiting for BFD session time-out")
         self.test_session.my_discriminator = 0
         self.sleep(detection_time, "waiting for BFD session time-out")
         self.test_session.my_discriminator = 0
-        wait_for_bfd_packet(self,
-                            pcap_time_min=time.time() - self.vpp_clock_offset)
+        wait_for_bfd_packet(self, pcap_time_min=time.time() - self.vpp_clock_offset)
 
     def test_large_required_min_rx(self):
 
     def test_large_required_min_rx(self):
-        """ large remote required min rx interval """
+        """large remote required min rx interval"""
         bfd_session_up(self)
         p = wait_for_bfd_packet(self)
         interval = 3000000
         bfd_session_up(self)
         p = wait_for_bfd_packet(self)
         interval = 3000000
@@ -932,14 +1012,14 @@ class BFD4TestCase(VppTestCase):
         self.assert_equal(count, 0, "number of packets received")
 
     def test_immediate_remote_min_rx_reduction(self):
         self.assert_equal(count, 0, "number of packets received")
 
     def test_immediate_remote_min_rx_reduction(self):
-        """ immediately honor remote required min rx reduction """
+        """immediately honor remote required min rx reduction"""
         self.vpp_session.remove_vpp_config()
         self.vpp_session = VppBFDUDPSession(
         self.vpp_session.remove_vpp_config()
         self.vpp_session = VppBFDUDPSession(
-            self, self.pg0, self.pg0.remote_ip4, desired_min_tx=10000)
+            self, self.pg0, self.pg0.remote_ip4, desired_min_tx=10000
+        )
         self.pg0.enable_capture()
         self.vpp_session.add_vpp_config()
         self.pg0.enable_capture()
         self.vpp_session.add_vpp_config()
-        self.test_session.update(desired_min_tx=1000000,
-                                 required_min_rx=1000000)
+        self.test_session.update(desired_min_tx=1000000, required_min_rx=1000000)
         bfd_session_up(self)
         reference_packet = wait_for_bfd_packet(self)
         time_mark = time.time()
         bfd_session_up(self)
         reference_packet = wait_for_bfd_packet(self)
         time_mark = time.time()
@@ -950,131 +1030,143 @@ class BFD4TestCase(VppTestCase):
         p = wait_for_bfd_packet(self)
         # first packet is allowed to be late by time we spent doing the update
         # calculated in extra_time
         p = wait_for_bfd_packet(self)
         # first packet is allowed to be late by time we spent doing the update
         # calculated in extra_time
-        self.assert_in_range(p.time - reference_packet.time,
-                             .95 * 0.75 * interval / USEC_IN_SEC,
-                             1.05 * interval / USEC_IN_SEC + extra_time,
-                             "time between BFD packets")
+        self.assert_in_range(
+            p.time - reference_packet.time,
+            0.95 * 0.75 * interval / USEC_IN_SEC,
+            1.05 * interval / USEC_IN_SEC + extra_time,
+            "time between BFD packets",
+        )
         reference_packet = p
         for dummy in range(3):
             p = wait_for_bfd_packet(self)
             diff = p.time - reference_packet.time
         reference_packet = p
         for dummy in range(3):
             p = wait_for_bfd_packet(self)
             diff = p.time - reference_packet.time
-            self.assert_in_range(diff, .95 * .75 * interval / USEC_IN_SEC,
-                                 1.05 * interval / USEC_IN_SEC,
-                                 "time between BFD packets")
+            self.assert_in_range(
+                diff,
+                0.95 * 0.75 * interval / USEC_IN_SEC,
+                1.05 * interval / USEC_IN_SEC,
+                "time between BFD packets",
+            )
             reference_packet = p
 
     def test_modify_req_min_rx_double(self):
             reference_packet = p
 
     def test_modify_req_min_rx_double(self):
-        """ modify session - double required min rx """
+        """modify session - double required min rx"""
         bfd_session_up(self)
         p = wait_for_bfd_packet(self)
         bfd_session_up(self)
         p = wait_for_bfd_packet(self)
-        self.test_session.update(desired_min_tx=10000,
-                                 required_min_rx=10000)
+        self.test_session.update(desired_min_tx=10000, required_min_rx=10000)
         self.test_session.send_packet()
         # double required min rx
         self.vpp_session.modify_parameters(
         self.test_session.send_packet()
         # double required min rx
         self.vpp_session.modify_parameters(
-            required_min_rx=2 * self.vpp_session.required_min_rx)
-        p = wait_for_bfd_packet(
-            self, pcap_time_min=time.time() - self.vpp_clock_offset)
+            required_min_rx=2 * self.vpp_session.required_min_rx
+        )
+        p = wait_for_bfd_packet(self, pcap_time_min=time.time() - self.vpp_clock_offset)
         # poll bit needs to be set
         # poll bit needs to be set
-        self.assertIn("P", p.sprintf("%BFD.flags%"),
-                      "Poll bit not set in BFD packet")
+        self.assertIn("P", p.sprintf("%BFD.flags%"), "Poll bit not set in BFD packet")
         # finish poll sequence with final packet
         final = self.test_session.create_packet()
         final[BFD].flags = "F"
         # finish poll sequence with final packet
         final = self.test_session.create_packet()
         final[BFD].flags = "F"
-        timeout = self.test_session.detect_mult * \
-            max(self.test_session.desired_min_tx,
-                self.vpp_session.required_min_rx) / USEC_IN_SEC
+        timeout = (
+            self.test_session.detect_mult
+            * max(self.test_session.desired_min_tx, self.vpp_session.required_min_rx)
+            / USEC_IN_SEC
+        )
         self.test_session.send_packet(final)
         time_mark = time.time()
         e = self.vapi.wait_for_event(2 * timeout, "bfd_udp_session_event")
         verify_event(self, e, expected_state=BFDState.down)
         time_to_event = time.time() - time_mark
         self.test_session.send_packet(final)
         time_mark = time.time()
         e = self.vapi.wait_for_event(2 * timeout, "bfd_udp_session_event")
         verify_event(self, e, expected_state=BFDState.down)
         time_to_event = time.time() - time_mark
-        self.assert_in_range(time_to_event, .9 * timeout,
-                             1.1 * timeout, "session timeout")
+        self.assert_in_range(
+            time_to_event, 0.9 * timeout, 1.1 * timeout, "session timeout"
+        )
 
     def test_modify_req_min_rx_halve(self):
 
     def test_modify_req_min_rx_halve(self):
-        """ modify session - halve required min rx """
+        """modify session - halve required min rx"""
         self.vpp_session.modify_parameters(
         self.vpp_session.modify_parameters(
-            required_min_rx=2 * self.vpp_session.required_min_rx)
+            required_min_rx=2 * self.vpp_session.required_min_rx
+        )
         bfd_session_up(self)
         p = wait_for_bfd_packet(self)
         bfd_session_up(self)
         p = wait_for_bfd_packet(self)
-        self.test_session.update(desired_min_tx=10000,
-                                 required_min_rx=10000)
+        self.test_session.update(desired_min_tx=10000, required_min_rx=10000)
         self.test_session.send_packet()
         self.test_session.send_packet()
-        p = wait_for_bfd_packet(
-            self, pcap_time_min=time.time() - self.vpp_clock_offset)
+        p = wait_for_bfd_packet(self, pcap_time_min=time.time() - self.vpp_clock_offset)
         # halve required min rx
         old_required_min_rx = self.vpp_session.required_min_rx
         self.vpp_session.modify_parameters(
         # halve required min rx
         old_required_min_rx = self.vpp_session.required_min_rx
         self.vpp_session.modify_parameters(
-            required_min_rx=self.vpp_session.required_min_rx // 2)
+            required_min_rx=self.vpp_session.required_min_rx // 2
+        )
         # now we wait 0.8*3*old-req-min-rx and the session should still be up
         # now we wait 0.8*3*old-req-min-rx and the session should still be up
-        self.sleep(0.8 * self.vpp_session.detect_mult *
-                   old_required_min_rx / USEC_IN_SEC,
-                   "wait before finishing poll sequence")
-        self.assert_equal(len(self.vapi.collect_events()), 0,
-                          "number of bfd events")
+        self.sleep(
+            0.8 * self.vpp_session.detect_mult * old_required_min_rx / USEC_IN_SEC,
+            "wait before finishing poll sequence",
+        )
+        self.assert_equal(len(self.vapi.collect_events()), 0, "number of bfd events")
         p = wait_for_bfd_packet(self)
         # poll bit needs to be set
         p = wait_for_bfd_packet(self)
         # poll bit needs to be set
-        self.assertIn("P", p.sprintf("%BFD.flags%"),
-                      "Poll bit not set in BFD packet")
+        self.assertIn("P", p.sprintf("%BFD.flags%"), "Poll bit not set in BFD packet")
         # finish poll sequence with final packet
         final = self.test_session.create_packet()
         final[BFD].flags = "F"
         self.test_session.send_packet(final)
         # now the session should time out under new conditions
         # finish poll sequence with final packet
         final = self.test_session.create_packet()
         final[BFD].flags = "F"
         self.test_session.send_packet(final)
         # now the session should time out under new conditions
-        detection_time = self.test_session.detect_mult *\
-            self.vpp_session.required_min_rx / USEC_IN_SEC
+        detection_time = (
+            self.test_session.detect_mult
+            * self.vpp_session.required_min_rx
+            / USEC_IN_SEC
+        )
         before = time.time()
         before = time.time()
-        e = self.vapi.wait_for_event(
-            2 * detection_time, "bfd_udp_session_event")
+        e = self.vapi.wait_for_event(2 * detection_time, "bfd_udp_session_event")
         after = time.time()
         after = time.time()
-        self.assert_in_range(after - before,
-                             0.9 * detection_time,
-                             1.1 * detection_time,
-                             "time before bfd session goes down")
+        self.assert_in_range(
+            after - before,
+            0.9 * detection_time,
+            1.1 * detection_time,
+            "time before bfd session goes down",
+        )
         verify_event(self, e, expected_state=BFDState.down)
 
     def test_modify_detect_mult(self):
         verify_event(self, e, expected_state=BFDState.down)
 
     def test_modify_detect_mult(self):
-        """ modify detect multiplier """
+        """modify detect multiplier"""
         bfd_session_up(self)
         p = wait_for_bfd_packet(self)
         self.vpp_session.modify_parameters(detect_mult=1)
         bfd_session_up(self)
         p = wait_for_bfd_packet(self)
         self.vpp_session.modify_parameters(detect_mult=1)
-        p = wait_for_bfd_packet(
-            self, pcap_time_min=time.time() - self.vpp_clock_offset)
-        self.assert_equal(self.vpp_session.detect_mult,
-                          p[BFD].detect_mult,
-                          "detect mult")
+        p = wait_for_bfd_packet(self, pcap_time_min=time.time() - self.vpp_clock_offset)
+        self.assert_equal(
+            self.vpp_session.detect_mult, p[BFD].detect_mult, "detect mult"
+        )
         # poll bit must not be set
         # poll bit must not be set
-        self.assertNotIn("P", p.sprintf("%BFD.flags%"),
-                         "Poll bit not set in BFD packet")
+        self.assertNotIn(
+            "P", p.sprintf("%BFD.flags%"), "Poll bit not set in BFD packet"
+        )
         self.vpp_session.modify_parameters(detect_mult=10)
         self.vpp_session.modify_parameters(detect_mult=10)
-        p = wait_for_bfd_packet(
-            self, pcap_time_min=time.time() - self.vpp_clock_offset)
-        self.assert_equal(self.vpp_session.detect_mult,
-                          p[BFD].detect_mult,
-                          "detect mult")
+        p = wait_for_bfd_packet(self, pcap_time_min=time.time() - self.vpp_clock_offset)
+        self.assert_equal(
+            self.vpp_session.detect_mult, p[BFD].detect_mult, "detect mult"
+        )
         # poll bit must not be set
         # poll bit must not be set
-        self.assertNotIn("P", p.sprintf("%BFD.flags%"),
-                         "Poll bit not set in BFD packet")
+        self.assertNotIn(
+            "P", p.sprintf("%BFD.flags%"), "Poll bit not set in BFD packet"
+        )
 
     def test_queued_poll(self):
 
     def test_queued_poll(self):
-        """ test poll sequence queueing """
+        """test poll sequence queueing"""
         bfd_session_up(self)
         p = wait_for_bfd_packet(self)
         self.vpp_session.modify_parameters(
         bfd_session_up(self)
         p = wait_for_bfd_packet(self)
         self.vpp_session.modify_parameters(
-            required_min_rx=2 * self.vpp_session.required_min_rx)
+            required_min_rx=2 * self.vpp_session.required_min_rx
+        )
         p = wait_for_bfd_packet(self)
         poll_sequence_start = time.time()
         poll_sequence_length_min = 0.5
         send_final_after = time.time() + poll_sequence_length_min
         # poll bit needs to be set
         p = wait_for_bfd_packet(self)
         poll_sequence_start = time.time()
         poll_sequence_length_min = 0.5
         send_final_after = time.time() + poll_sequence_length_min
         # poll bit needs to be set
-        self.assertIn("P", p.sprintf("%BFD.flags%"),
-                      "Poll bit not set in BFD packet")
-        self.assert_equal(p[BFD].required_min_rx_interval,
-                          self.vpp_session.required_min_rx,
-                          "BFD required min rx interval")
+        self.assertIn("P", p.sprintf("%BFD.flags%"), "Poll bit not set in BFD packet")
+        self.assert_equal(
+            p[BFD].required_min_rx_interval,
+            self.vpp_session.required_min_rx,
+            "BFD required min rx interval",
+        )
         self.vpp_session.modify_parameters(
         self.vpp_session.modify_parameters(
-            required_min_rx=2 * self.vpp_session.required_min_rx)
+            required_min_rx=2 * self.vpp_session.required_min_rx
+        )
         # 2nd poll sequence should be queued now
         # don't send the reply back yet, wait for some time to emulate
         # longer round-trip time
         # 2nd poll sequence should be queued now
         # don't send the reply back yet, wait for some time to emulate
         # longer round-trip time
@@ -1082,15 +1174,19 @@ class BFD4TestCase(VppTestCase):
         while time.time() < send_final_after:
             self.test_session.send_packet()
             p = wait_for_bfd_packet(self)
         while time.time() < send_final_after:
             self.test_session.send_packet()
             p = wait_for_bfd_packet(self)
-            self.assert_equal(len(self.vapi.collect_events()), 0,
-                              "number of bfd events")
-            self.assert_equal(p[BFD].required_min_rx_interval,
-                              self.vpp_session.required_min_rx,
-                              "BFD required min rx interval")
+            self.assert_equal(
+                len(self.vapi.collect_events()), 0, "number of bfd events"
+            )
+            self.assert_equal(
+                p[BFD].required_min_rx_interval,
+                self.vpp_session.required_min_rx,
+                "BFD required min rx interval",
+            )
             packet_count += 1
             # poll bit must be set
             packet_count += 1
             # poll bit must be set
-            self.assertIn("P", p.sprintf("%BFD.flags%"),
-                          "Poll bit not set in BFD packet")
+            self.assertIn(
+                "P", p.sprintf("%BFD.flags%"), "Poll bit not set in BFD packet"
+            )
         final = self.test_session.create_packet()
         final[BFD].flags = "F"
         self.test_session.send_packet(final)
         final = self.test_session.create_packet()
         final[BFD].flags = "F"
         self.test_session.send_packet(final)
@@ -1100,8 +1196,9 @@ class BFD4TestCase(VppTestCase):
         poll_no_2_started = False
         for dummy in range(2 * packet_count):
             p = wait_for_bfd_packet(self)
         poll_no_2_started = False
         for dummy in range(2 * packet_count):
             p = wait_for_bfd_packet(self)
-            self.assert_equal(len(self.vapi.collect_events()), 0,
-                              "number of bfd events")
+            self.assert_equal(
+                len(self.vapi.collect_events()), 0, "number of bfd events"
+            )
             if "P" in p.sprintf("%BFD.flags%"):
                 poll_no_2_started = True
                 if time.time() < poll_sequence_start + poll_sequence_length:
             if "P" in p.sprintf("%BFD.flags%"):
                 poll_no_2_started = True
                 if time.time() < poll_sequence_start + poll_sequence_length:
@@ -1119,31 +1216,32 @@ class BFD4TestCase(VppTestCase):
         self.test_session.send_packet(final)
         p = wait_for_bfd_packet(self)
         # poll bit must not be set
         self.test_session.send_packet(final)
         p = wait_for_bfd_packet(self)
         # poll bit must not be set
-        self.assertNotIn("P", p.sprintf("%BFD.flags%"),
-                         "Poll bit set in BFD packet")
+        self.assertNotIn("P", p.sprintf("%BFD.flags%"), "Poll bit set in BFD packet")
 
     # returning inconsistent results requiring retries in per-patch tests
     @unittest.skipUnless(config.extended, "part of extended tests")
     def test_poll_response(self):
 
     # returning inconsistent results requiring retries in per-patch tests
     @unittest.skipUnless(config.extended, "part of extended tests")
     def test_poll_response(self):
-        """ test correct response to control frame with poll bit set """
+        """test correct response to control frame with poll bit set"""
         bfd_session_up(self)
         poll = self.test_session.create_packet()
         poll[BFD].flags = "P"
         self.test_session.send_packet(poll)
         final = wait_for_bfd_packet(
         bfd_session_up(self)
         poll = self.test_session.create_packet()
         poll[BFD].flags = "P"
         self.test_session.send_packet(poll)
         final = wait_for_bfd_packet(
-            self, pcap_time_min=time.time() - self.vpp_clock_offset)
+            self, pcap_time_min=time.time() - self.vpp_clock_offset
+        )
         self.assertIn("F", final.sprintf("%BFD.flags%"))
 
     def test_no_periodic_if_remote_demand(self):
         self.assertIn("F", final.sprintf("%BFD.flags%"))
 
     def test_no_periodic_if_remote_demand(self):
-        """ no periodic frames outside poll sequence if remote demand set """
+        """no periodic frames outside poll sequence if remote demand set"""
         bfd_session_up(self)
         demand = self.test_session.create_packet()
         demand[BFD].flags = "D"
         self.test_session.send_packet(demand)
         bfd_session_up(self)
         demand = self.test_session.create_packet()
         demand[BFD].flags = "D"
         self.test_session.send_packet(demand)
-        transmit_time = 0.9 \
-            * max(self.vpp_session.required_min_rx,
-                  self.test_session.desired_min_tx) \
+        transmit_time = (
+            0.9
+            * max(self.vpp_session.required_min_rx, self.test_session.desired_min_tx)
             / USEC_IN_SEC
             / USEC_IN_SEC
+        )
         count = 0
         for dummy in range(self.test_session.detect_mult * 2):
             self.sleep(transmit_time)
         count = 0
         for dummy in range(self.test_session.detect_mult * 2):
             self.sleep(transmit_time)
@@ -1161,7 +1259,7 @@ class BFD4TestCase(VppTestCase):
         self.assert_equal(len(events), 0, "number of events received")
 
     def test_echo_looped_back(self):
         self.assert_equal(len(events), 0, "number of events received")
 
     def test_echo_looped_back(self):
-        """ echo packets looped back """
+        """echo packets looped back"""
         bfd_session_up(self)
         stats_before = bfd_grab_stats_snapshot(self)
         self.pg0.enable_capture()
         bfd_session_up(self)
         stats_before = bfd_grab_stats_snapshot(self)
         self.pg0.enable_capture()
@@ -1169,14 +1267,14 @@ class BFD4TestCase(VppTestCase):
         # random source port low enough to increment a few times..
         udp_sport_tx = randint(1, 50000)
         udp_sport_rx = udp_sport_tx
         # random source port low enough to increment a few times..
         udp_sport_tx = randint(1, 50000)
         udp_sport_rx = udp_sport_tx
-        echo_packet = (Ether(src=self.pg0.remote_mac,
-                             dst=self.pg0.local_mac) /
-                       IP(src=self.pg0.remote_ip4,
-                          dst=self.pg0.remote_ip4) /
-                       UDP(dport=BFD.udp_dport_echo) /
-                       Raw("this should be looped back"))
+        echo_packet = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg0.remote_ip4)
+            / UDP(dport=BFD.udp_dport_echo)
+            / Raw("this should be looped back")
+        )
         for dummy in range(echo_packet_count):
         for dummy in range(echo_packet_count):
-            self.sleep(.01, "delay between echo packets")
+            self.sleep(0.01, "delay between echo packets")
             echo_packet[UDP].sport = udp_sport_tx
             udp_sport_tx += 1
             self.logger.debug(ppp("Sending packet:", echo_packet))
             echo_packet[UDP].sport = udp_sport_tx
             udp_sport_tx += 1
             self.logger.debug(ppp("Sending packet:", echo_packet))
@@ -1189,8 +1287,7 @@ class BFD4TestCase(VppTestCase):
             p = self.pg0.wait_for_packet(1)
             self.logger.debug(ppp("Got packet:", p))
             ether = p[Ether]
             p = self.pg0.wait_for_packet(1)
             self.logger.debug(ppp("Got packet:", p))
             ether = p[Ether]
-            self.assert_equal(self.pg0.remote_mac,
-                              ether.dst, "Destination MAC")
+            self.assert_equal(self.pg0.remote_mac, ether.dst, "Destination MAC")
             self.assert_equal(self.pg0.local_mac, ether.src, "Source MAC")
             ip = p[IP]
             self.assert_equal(self.pg0.remote_ip4, ip.dst, "Destination IP")
             self.assert_equal(self.pg0.local_mac, ether.src, "Source MAC")
             ip = p[IP]
             self.assert_equal(self.pg0.remote_ip4, ip.dst, "Destination IP")
@@ -1199,50 +1296,57 @@ class BFD4TestCase(VppTestCase):
                 bfd_control_packets_rx += 1
                 continue
             self.assert_equal(self.pg0.remote_ip4, ip.src, "Source IP")
                 bfd_control_packets_rx += 1
                 continue
             self.assert_equal(self.pg0.remote_ip4, ip.src, "Source IP")
-            self.assert_equal(udp.dport, BFD.udp_dport_echo,
-                              "UDP destination port")
+            self.assert_equal(udp.dport, BFD.udp_dport_echo, "UDP destination port")
             self.assert_equal(udp.sport, udp_sport_rx, "UDP source port")
             udp_sport_rx += 1
             # need to compare the hex payload here, otherwise BFD_vpp_echo
             # gets in way
             self.assert_equal(udp.sport, udp_sport_rx, "UDP source port")
             udp_sport_rx += 1
             # need to compare the hex payload here, otherwise BFD_vpp_echo
             # gets in way
-            self.assertEqual(scapy.compat.raw(p[UDP].payload),
-                             scapy.compat.raw(echo_packet[UDP].payload),
-                             "Received packet is not the echo packet sent")
+            self.assertEqual(
+                scapy.compat.raw(p[UDP].payload),
+                scapy.compat.raw(echo_packet[UDP].payload),
+                "Received packet is not the echo packet sent",
+            )
             counter += 1
             counter += 1
-        self.assert_equal(udp_sport_tx, udp_sport_rx, "UDP source port (== "
-                          "ECHO packet identifier for test purposes)")
+        self.assert_equal(
+            udp_sport_tx,
+            udp_sport_rx,
+            "UDP source port (== ECHO packet identifier for test purposes)",
+        )
         stats_after = bfd_grab_stats_snapshot(self)
         diff = bfd_stats_diff(stats_before, stats_after)
         stats_after = bfd_grab_stats_snapshot(self)
         diff = bfd_stats_diff(stats_before, stats_after)
+        self.assertEqual(0, diff.rx, "RX counter bumped but no BFD packets sent")
+        self.assertEqual(bfd_control_packets_rx, diff.tx, "TX counter incorrect")
         self.assertEqual(
         self.assertEqual(
-            0, diff.rx, "RX counter bumped but no BFD packets sent")
+            0, diff.rx_echo, "RX echo counter bumped but no BFD session exists"
+        )
         self.assertEqual(
         self.assertEqual(
-            bfd_control_packets_rx, diff.tx, "TX counter incorrect")
-        self.assertEqual(0, diff.rx_echo,
-                         "RX echo counter bumped but no BFD session exists")
-        self.assertEqual(0, diff.tx_echo,
-                         "TX echo counter bumped but no BFD session exists")
+            0, diff.tx_echo, "TX echo counter bumped but no BFD session exists"
+        )
 
     def test_echo(self):
 
     def test_echo(self):
-        """ echo function """
+        """echo function"""
         stats_before = bfd_grab_stats_snapshot(self)
         bfd_session_up(self)
         self.test_session.update(required_min_echo_rx=150000)
         self.test_session.send_packet()
         stats_before = bfd_grab_stats_snapshot(self)
         bfd_session_up(self)
         self.test_session.update(required_min_echo_rx=150000)
         self.test_session.send_packet()
-        detection_time = self.test_session.detect_mult *\
-            self.vpp_session.required_min_rx / USEC_IN_SEC
+        detection_time = (
+            self.test_session.detect_mult
+            * self.vpp_session.required_min_rx
+            / USEC_IN_SEC
+        )
         # echo shouldn't work without echo source set
         for dummy in range(10):
             sleep = self.vpp_session.required_min_rx / USEC_IN_SEC
             self.sleep(sleep, "delay before sending bfd packet")
             self.test_session.send_packet()
         # echo shouldn't work without echo source set
         for dummy in range(10):
             sleep = self.vpp_session.required_min_rx / USEC_IN_SEC
             self.sleep(sleep, "delay before sending bfd packet")
             self.test_session.send_packet()
-        p = wait_for_bfd_packet(
-            self, pcap_time_min=time.time() - self.vpp_clock_offset)
-        self.assert_equal(p[BFD].required_min_rx_interval,
-                          self.vpp_session.required_min_rx,
-                          "BFD required min rx interval")
+        p = wait_for_bfd_packet(self, pcap_time_min=time.time() - self.vpp_clock_offset)
+        self.assert_equal(
+            p[BFD].required_min_rx_interval,
+            self.vpp_session.required_min_rx,
+            "BFD required min rx interval",
+        )
         self.test_session.send_packet()
         self.test_session.send_packet()
-        self.vapi.bfd_udp_set_echo_source(
-            sw_if_index=self.loopback0.sw_if_index)
+        self.vapi.bfd_udp_set_echo_source(sw_if_index=self.loopback0.sw_if_index)
         echo_seen = False
         # should be turned on - loopback echo packets
         for dummy in range(3):
         echo_seen = False
         # should be turned on - loopback echo packets
         for dummy in range(3):
@@ -1251,13 +1355,18 @@ class BFD4TestCase(VppTestCase):
                 p = self.pg0.wait_for_packet(1)
                 self.logger.debug(ppp("Got packet:", p))
                 if p[UDP].dport == BFD.udp_dport_echo:
                 p = self.pg0.wait_for_packet(1)
                 self.logger.debug(ppp("Got packet:", p))
                 if p[UDP].dport == BFD.udp_dport_echo:
-                    self.assert_equal(
-                        p[IP].dst, self.pg0.local_ip4, "BFD ECHO dst IP")
-                    self.assertNotEqual(p[IP].src, self.loopback0.local_ip4,
-                                        "BFD ECHO src IP equal to loopback IP")
+                    self.assert_equal(p[IP].dst, self.pg0.local_ip4, "BFD ECHO dst IP")
+                    self.assertNotEqual(
+                        p[IP].src,
+                        self.loopback0.local_ip4,
+                        "BFD ECHO src IP equal to loopback IP",
+                    )
                     self.logger.debug(ppp("Looping back packet:", p))
                     self.logger.debug(ppp("Looping back packet:", p))
-                    self.assert_equal(p[Ether].dst, self.pg0.remote_mac,
-                                      "ECHO packet destination MAC address")
+                    self.assert_equal(
+                        p[Ether].dst,
+                        self.pg0.remote_mac,
+                        "ECHO packet destination MAC address",
+                    )
                     p[Ether].dst = self.pg0.local_mac
                     self.pg0.add_stream(p)
                     self.test_session.rx_packets_echo += 1
                     p[Ether].dst = self.pg0.local_mac
                     self.pg0.add_stream(p)
                     self.test_session.rx_packets_echo += 1
@@ -1268,8 +1377,8 @@ class BFD4TestCase(VppTestCase):
                     self.test_session.rx_packets += 1
                     if echo_seen:
                         self.assertGreaterEqual(
                     self.test_session.rx_packets += 1
                     if echo_seen:
                         self.assertGreaterEqual(
-                            p[BFD].required_min_rx_interval,
-                            1000000)
+                            p[BFD].required_min_rx_interval, 1000000
+                        )
                     if "P" in p.sprintf("%BFD.flags%"):
                         final = self.test_session.create_packet()
                         final[BFD].flags = "F"
                     if "P" in p.sprintf("%BFD.flags%"):
                         final = self.test_session.create_packet()
                         final[BFD].flags = "F"
@@ -1277,34 +1386,45 @@ class BFD4TestCase(VppTestCase):
                 else:
                     raise Exception(ppp("Received unknown packet:", p))
 
                 else:
                     raise Exception(ppp("Received unknown packet:", p))
 
-                self.assert_equal(len(self.vapi.collect_events()), 0,
-                                  "number of bfd events")
+                self.assert_equal(
+                    len(self.vapi.collect_events()), 0, "number of bfd events"
+                )
             self.test_session.send_packet()
         self.assertTrue(echo_seen, "No echo packets received")
 
         stats_after = bfd_grab_stats_snapshot(self)
         diff = bfd_stats_diff(stats_before, stats_after)
         # our rx is vpp tx and vice versa, also tolerate one packet off
             self.test_session.send_packet()
         self.assertTrue(echo_seen, "No echo packets received")
 
         stats_after = bfd_grab_stats_snapshot(self)
         diff = bfd_stats_diff(stats_before, stats_after)
         # our rx is vpp tx and vice versa, also tolerate one packet off
-        self.assert_in_range(self.test_session.tx_packets,
-                             diff.rx - 1, diff.rx + 1, "RX counter")
-        self.assert_in_range(self.test_session.rx_packets,
-                             diff.tx - 1, diff.tx + 1, "TX counter")
-        self.assert_in_range(self.test_session.tx_packets_echo,
-                             diff.rx_echo - 1, diff.rx_echo + 1,
-                             "RX echo counter")
-        self.assert_in_range(self.test_session.rx_packets_echo,
-                             diff.tx_echo - 1, diff.tx_echo + 1,
-                             "TX echo counter")
+        self.assert_in_range(
+            self.test_session.tx_packets, diff.rx - 1, diff.rx + 1, "RX counter"
+        )
+        self.assert_in_range(
+            self.test_session.rx_packets, diff.tx - 1, diff.tx + 1, "TX counter"
+        )
+        self.assert_in_range(
+            self.test_session.tx_packets_echo,
+            diff.rx_echo - 1,
+            diff.rx_echo + 1,
+            "RX echo counter",
+        )
+        self.assert_in_range(
+            self.test_session.rx_packets_echo,
+            diff.tx_echo - 1,
+            diff.tx_echo + 1,
+            "TX echo counter",
+        )
 
     def test_echo_fail(self):
 
     def test_echo_fail(self):
-        """ session goes down if echo function fails """
+        """session goes down if echo function fails"""
         bfd_session_up(self)
         self.test_session.update(required_min_echo_rx=150000)
         self.test_session.send_packet()
         bfd_session_up(self)
         self.test_session.update(required_min_echo_rx=150000)
         self.test_session.send_packet()
-        detection_time = self.test_session.detect_mult *\
-            self.vpp_session.required_min_rx / USEC_IN_SEC
-        self.vapi.bfd_udp_set_echo_source(
-            sw_if_index=self.loopback0.sw_if_index)
+        detection_time = (
+            self.test_session.detect_mult
+            * self.vpp_session.required_min_rx
+            / USEC_IN_SEC
+        )
+        self.vapi.bfd_udp_set_echo_source(sw_if_index=self.loopback0.sw_if_index)
         # echo function should be used now, but we will drop the echo packets
         verified_diag = False
         for dummy in range(3):
         # echo function should be used now, but we will drop the echo packets
         verified_diag = False
         for dummy in range(3):
@@ -1318,15 +1438,15 @@ class BFD4TestCase(VppTestCase):
                 elif p.haslayer(BFD):
                     if "P" in p.sprintf("%BFD.flags%"):
                         self.assertGreaterEqual(
                 elif p.haslayer(BFD):
                     if "P" in p.sprintf("%BFD.flags%"):
                         self.assertGreaterEqual(
-                            p[BFD].required_min_rx_interval,
-                            1000000)
+                            p[BFD].required_min_rx_interval, 1000000
+                        )
                         final = self.test_session.create_packet()
                         final[BFD].flags = "F"
                         self.test_session.send_packet(final)
                     if p[BFD].state == BFDState.down:
                         final = self.test_session.create_packet()
                         final[BFD].flags = "F"
                         self.test_session.send_packet(final)
                     if p[BFD].state == BFDState.down:
-                        self.assert_equal(p[BFD].diag,
-                                          BFDDiagCode.echo_function_failed,
-                                          BFDDiagCode)
+                        self.assert_equal(
+                            p[BFD].diag, BFDDiagCode.echo_function_failed, BFDDiagCode
+                        )
                         verified_diag = True
                 else:
                     raise Exception(ppp("Received unknown packet:", p))
                         verified_diag = True
                 else:
                     raise Exception(ppp("Received unknown packet:", p))
@@ -1337,12 +1457,11 @@ class BFD4TestCase(VppTestCase):
         self.assertTrue(verified_diag, "Incorrect diagnostics code received")
 
     def test_echo_stop(self):
         self.assertTrue(verified_diag, "Incorrect diagnostics code received")
 
     def test_echo_stop(self):
-        """ echo function stops if peer sets required min echo rx zero """
+        """echo function stops if peer sets required min echo rx zero"""
         bfd_session_up(self)
         self.test_session.update(required_min_echo_rx=150000)
         self.test_session.send_packet()
         bfd_session_up(self)
         self.test_session.update(required_min_echo_rx=150000)
         self.test_session.send_packet()
-        self.vapi.bfd_udp_set_echo_source(
-            sw_if_index=self.loopback0.sw_if_index)
+        self.vapi.bfd_udp_set_echo_source(sw_if_index=self.loopback0.sw_if_index)
         # wait for first echo packet
         while True:
             p = self.pg0.wait_for_packet(1)
         # wait for first echo packet
         while True:
             p = self.pg0.wait_for_packet(1)
@@ -1362,19 +1481,17 @@ class BFD4TestCase(VppTestCase):
         self.test_session.send_packet()
         # echo packets shouldn't arrive anymore
         for dummy in range(5):
         self.test_session.send_packet()
         # echo packets shouldn't arrive anymore
         for dummy in range(5):
-            wait_for_bfd_packet(
-                self, pcap_time_min=time.time() - self.vpp_clock_offset)
+            wait_for_bfd_packet(self, pcap_time_min=time.time() - self.vpp_clock_offset)
             self.test_session.send_packet()
             events = self.vapi.collect_events()
             self.assert_equal(len(events), 0, "number of bfd events")
 
     def test_echo_source_removed(self):
             self.test_session.send_packet()
             events = self.vapi.collect_events()
             self.assert_equal(len(events), 0, "number of bfd events")
 
     def test_echo_source_removed(self):
-        """ echo function stops if echo source is removed """
+        """echo function stops if echo source is removed"""
         bfd_session_up(self)
         self.test_session.update(required_min_echo_rx=150000)
         self.test_session.send_packet()
         bfd_session_up(self)
         self.test_session.update(required_min_echo_rx=150000)
         self.test_session.send_packet()
-        self.vapi.bfd_udp_set_echo_source(
-            sw_if_index=self.loopback0.sw_if_index)
+        self.vapi.bfd_udp_set_echo_source(sw_if_index=self.loopback0.sw_if_index)
         # wait for first echo packet
         while True:
             p = self.pg0.wait_for_packet(1)
         # wait for first echo packet
         while True:
             p = self.pg0.wait_for_packet(1)
@@ -1394,18 +1511,16 @@ class BFD4TestCase(VppTestCase):
         self.test_session.send_packet()
         # echo packets shouldn't arrive anymore
         for dummy in range(5):
         self.test_session.send_packet()
         # echo packets shouldn't arrive anymore
         for dummy in range(5):
-            wait_for_bfd_packet(
-                self, pcap_time_min=time.time() - self.vpp_clock_offset)
+            wait_for_bfd_packet(self, pcap_time_min=time.time() - self.vpp_clock_offset)
             self.test_session.send_packet()
             events = self.vapi.collect_events()
             self.assert_equal(len(events), 0, "number of bfd events")
 
     def test_stale_echo(self):
             self.test_session.send_packet()
             events = self.vapi.collect_events()
             self.assert_equal(len(events), 0, "number of bfd events")
 
     def test_stale_echo(self):
-        """ stale echo packets don't keep a session up """
+        """stale echo packets don't keep a session up"""
         bfd_session_up(self)
         self.test_session.update(required_min_echo_rx=150000)
         bfd_session_up(self)
         self.test_session.update(required_min_echo_rx=150000)
-        self.vapi.bfd_udp_set_echo_source(
-            sw_if_index=self.loopback0.sw_if_index)
+        self.vapi.bfd_udp_set_echo_source(sw_if_index=self.loopback0.sw_if_index)
         self.test_session.send_packet()
         # should be turned on - loopback echo packets
         echo_packet = None
         self.test_session.send_packet()
         # should be turned on - loopback echo packets
         echo_packet = None
@@ -1417,8 +1532,12 @@ class BFD4TestCase(VppTestCase):
                 if echo_packet is None:
                     self.logger.debug(ppp("Got first echo packet:", p))
                     echo_packet = p
                 if echo_packet is None:
                     self.logger.debug(ppp("Got first echo packet:", p))
                     echo_packet = p
-                    timeout_at = time.time() + self.vpp_session.detect_mult * \
-                        self.test_session.required_min_echo_rx / USEC_IN_SEC
+                    timeout_at = (
+                        time.time()
+                        + self.vpp_session.detect_mult
+                        * self.test_session.required_min_echo_rx
+                        / USEC_IN_SEC
+                    )
                 else:
                     self.logger.debug(ppp("Got followup echo packet:", p))
                 self.logger.debug(ppp("Looping back first echo packet:", p))
                 else:
                     self.logger.debug(ppp("Got followup echo packet:", p))
                 self.logger.debug(ppp("Looping back first echo packet:", p))
@@ -1434,15 +1553,18 @@ class BFD4TestCase(VppTestCase):
                 if p[BFD].state == BFDState.down:
                     self.assertIsNotNone(
                         timeout_at,
                 if p[BFD].state == BFDState.down:
                     self.assertIsNotNone(
                         timeout_at,
-                        "Session went down before first echo packet received")
+                        "Session went down before first echo packet received",
+                    )
                     now = time.time()
                     self.assertGreaterEqual(
                     now = time.time()
                     self.assertGreaterEqual(
-                        now, timeout_at,
-                        "Session timeout at %s, but is expected at %s" %
-                        (now, timeout_at))
-                    self.assert_equal(p[BFD].diag,
-                                      BFDDiagCode.echo_function_failed,
-                                      BFDDiagCode)
+                        now,
+                        timeout_at,
+                        "Session timeout at %s, but is expected at %s"
+                        % (now, timeout_at),
+                    )
+                    self.assert_equal(
+                        p[BFD].diag, BFDDiagCode.echo_function_failed, BFDDiagCode
+                    )
                     events = self.vapi.collect_events()
                     self.assert_equal(len(events), 1, "number of bfd events")
                     self.assert_equal(events[0].state, BFDState.down, BFDState)
                     events = self.vapi.collect_events()
                     self.assert_equal(len(events), 1, "number of bfd events")
                     self.assert_equal(events[0].state, BFDState.down, BFDState)
@@ -1454,11 +1576,10 @@ class BFD4TestCase(VppTestCase):
         self.assertTrue(timeout_ok, "Expected timeout event didn't occur")
 
     def test_invalid_echo_checksum(self):
         self.assertTrue(timeout_ok, "Expected timeout event didn't occur")
 
     def test_invalid_echo_checksum(self):
-        """ echo packets with invalid checksum don't keep a session up """
+        """echo packets with invalid checksum don't keep a session up"""
         bfd_session_up(self)
         self.test_session.update(required_min_echo_rx=150000)
         bfd_session_up(self)
         self.test_session.update(required_min_echo_rx=150000)
-        self.vapi.bfd_udp_set_echo_source(
-            sw_if_index=self.loopback0.sw_if_index)
+        self.vapi.bfd_udp_set_echo_source(sw_if_index=self.loopback0.sw_if_index)
         self.test_session.send_packet()
         # should be turned on - loopback echo packets
         timeout_at = None
         self.test_session.send_packet()
         # should be turned on - loopback echo packets
         timeout_at = None
@@ -1468,8 +1589,12 @@ class BFD4TestCase(VppTestCase):
             if p[UDP].dport == BFD.udp_dport_echo:
                 self.logger.debug(ppp("Got echo packet:", p))
                 if timeout_at is None:
             if p[UDP].dport == BFD.udp_dport_echo:
                 self.logger.debug(ppp("Got echo packet:", p))
                 if timeout_at is None:
-                    timeout_at = time.time() + self.vpp_session.detect_mult * \
-                        self.test_session.required_min_echo_rx / USEC_IN_SEC
+                    timeout_at = (
+                        time.time()
+                        + self.vpp_session.detect_mult
+                        * self.test_session.required_min_echo_rx
+                        / USEC_IN_SEC
+                    )
                 p[BFD_vpp_echo].checksum = getrandbits(64)
                 p[Ether].dst = self.pg0.local_mac
                 self.logger.debug(ppp("Looping back modified echo packet:", p))
                 p[BFD_vpp_echo].checksum = getrandbits(64)
                 p[Ether].dst = self.pg0.local_mac
                 self.logger.debug(ppp("Looping back modified echo packet:", p))
@@ -1484,15 +1609,18 @@ class BFD4TestCase(VppTestCase):
                 if p[BFD].state == BFDState.down:
                     self.assertIsNotNone(
                         timeout_at,
                 if p[BFD].state == BFDState.down:
                     self.assertIsNotNone(
                         timeout_at,
-                        "Session went down before first echo packet received")
+                        "Session went down before first echo packet received",
+                    )
                     now = time.time()
                     self.assertGreaterEqual(
                     now = time.time()
                     self.assertGreaterEqual(
-                        now, timeout_at,
-                        "Session timeout at %s, but is expected at %s" %
-                        (now, timeout_at))
-                    self.assert_equal(p[BFD].diag,
-                                      BFDDiagCode.echo_function_failed,
-                                      BFDDiagCode)
+                        now,
+                        timeout_at,
+                        "Session timeout at %s, but is expected at %s"
+                        % (now, timeout_at),
+                    )
+                    self.assert_equal(
+                        p[BFD].diag, BFDDiagCode.echo_function_failed, BFDDiagCode
+                    )
                     events = self.vapi.collect_events()
                     self.assert_equal(len(events), 1, "number of bfd events")
                     self.assert_equal(events[0].state, BFDState.down, BFDState)
                     events = self.vapi.collect_events()
                     self.assert_equal(len(events), 1, "number of bfd events")
                     self.assert_equal(events[0].state, BFDState.down, BFDState)
@@ -1504,7 +1632,7 @@ class BFD4TestCase(VppTestCase):
         self.assertTrue(timeout_ok, "Expected timeout event didn't occur")
 
     def test_admin_up_down(self):
         self.assertTrue(timeout_ok, "Expected timeout event didn't occur")
 
     def test_admin_up_down(self):
-        """ put session admin-up and admin-down """
+        """put session admin-up and admin-down"""
         bfd_session_up(self)
         self.vpp_session.admin_down()
         self.pg0.enable_capture()
         bfd_session_up(self)
         self.vpp_session.admin_down()
         self.pg0.enable_capture()
@@ -1523,33 +1651,30 @@ class BFD4TestCase(VppTestCase):
         self.test_session.update(state=BFDState.down)
         e = self.vapi.wait_for_event(1, "bfd_udp_session_event")
         verify_event(self, e, expected_state=BFDState.down)
         self.test_session.update(state=BFDState.down)
         e = self.vapi.wait_for_event(1, "bfd_udp_session_event")
         verify_event(self, e, expected_state=BFDState.down)
-        p = wait_for_bfd_packet(
-            self, pcap_time_min=time.time() - self.vpp_clock_offset)
+        p = wait_for_bfd_packet(self, pcap_time_min=time.time() - self.vpp_clock_offset)
         self.assert_equal(p[BFD].state, BFDState.down, BFDState)
         self.test_session.send_packet()
         self.assert_equal(p[BFD].state, BFDState.down, BFDState)
         self.test_session.send_packet()
-        p = wait_for_bfd_packet(
-            self, pcap_time_min=time.time() - self.vpp_clock_offset)
+        p = wait_for_bfd_packet(self, pcap_time_min=time.time() - self.vpp_clock_offset)
         self.assert_equal(p[BFD].state, BFDState.init, BFDState)
         e = self.vapi.wait_for_event(1, "bfd_udp_session_event")
         verify_event(self, e, expected_state=BFDState.init)
         self.test_session.update(state=BFDState.up)
         self.test_session.send_packet()
         self.assert_equal(p[BFD].state, BFDState.init, BFDState)
         e = self.vapi.wait_for_event(1, "bfd_udp_session_event")
         verify_event(self, e, expected_state=BFDState.init)
         self.test_session.update(state=BFDState.up)
         self.test_session.send_packet()
-        p = wait_for_bfd_packet(
-            self, pcap_time_min=time.time() - self.vpp_clock_offset)
+        p = wait_for_bfd_packet(self, pcap_time_min=time.time() - self.vpp_clock_offset)
         self.assert_equal(p[BFD].state, BFDState.up, BFDState)
         e = self.vapi.wait_for_event(1, "bfd_udp_session_event")
         verify_event(self, e, expected_state=BFDState.up)
 
     def test_config_change_remote_demand(self):
         self.assert_equal(p[BFD].state, BFDState.up, BFDState)
         e = self.vapi.wait_for_event(1, "bfd_udp_session_event")
         verify_event(self, e, expected_state=BFDState.up)
 
     def test_config_change_remote_demand(self):
-        """ configuration change while peer in demand mode """
+        """configuration change while peer in demand mode"""
         bfd_session_up(self)
         demand = self.test_session.create_packet()
         demand[BFD].flags = "D"
         self.test_session.send_packet(demand)
         self.vpp_session.modify_parameters(
         bfd_session_up(self)
         demand = self.test_session.create_packet()
         demand[BFD].flags = "D"
         self.test_session.send_packet(demand)
         self.vpp_session.modify_parameters(
-            required_min_rx=2 * self.vpp_session.required_min_rx)
-        p = wait_for_bfd_packet(
-            self, pcap_time_min=time.time() - self.vpp_clock_offset)
+            required_min_rx=2 * self.vpp_session.required_min_rx
+        )
+        p = wait_for_bfd_packet(self, pcap_time_min=time.time() - self.vpp_clock_offset)
         # poll bit must be set
         self.assertIn("P", p.sprintf("%BFD.flags%"), "Poll bit not set")
         # terminate poll sequence
         # poll bit must be set
         self.assertIn("P", p.sprintf("%BFD.flags%"), "Poll bit not set")
         # terminate poll sequence
@@ -1557,10 +1682,11 @@ class BFD4TestCase(VppTestCase):
         final[BFD].flags = "D+F"
         self.test_session.send_packet(final)
         # vpp should be quiet now again
         final[BFD].flags = "D+F"
         self.test_session.send_packet(final)
         # vpp should be quiet now again
-        transmit_time = 0.9 \
-            * max(self.vpp_session.required_min_rx,
-                  self.test_session.desired_min_tx) \
+        transmit_time = (
+            0.9
+            * max(self.vpp_session.required_min_rx, self.test_session.desired_min_tx)
             / USEC_IN_SEC
             / USEC_IN_SEC
+        )
         count = 0
         for dummy in range(self.test_session.detect_mult * 2):
             self.sleep(transmit_time)
         count = 0
         for dummy in range(self.test_session.detect_mult * 2):
             self.sleep(transmit_time)
@@ -1578,7 +1704,7 @@ class BFD4TestCase(VppTestCase):
         self.assert_equal(len(events), 0, "number of events received")
 
     def test_intf_deleted(self):
         self.assert_equal(len(events), 0, "number of events received")
 
     def test_intf_deleted(self):
-        """ interface with bfd session deleted """
+        """interface with bfd session deleted"""
         intf = VppLoInterface(self)
         intf.config_ip4()
         intf.admin_up()
         intf = VppLoInterface(self)
         intf.config_ip4()
         intf.admin_up()
@@ -1595,7 +1721,7 @@ class BFD4TestCase(VppTestCase):
 @tag_run_solo
 @tag_fixme_vpp_workers
 class BFD6TestCase(VppTestCase):
 @tag_run_solo
 @tag_fixme_vpp_workers
 class BFD6TestCase(VppTestCase):
-    """Bidirectional Forwarding Detection (BFD) (IPv6) """
+    """Bidirectional Forwarding Detection (BFD) (IPv6)"""
 
     pg0 = None
     vpp_clock_offset = None
 
     pg0 = None
     vpp_clock_offset = None
@@ -1631,11 +1757,11 @@ class BFD6TestCase(VppTestCase):
         self.vapi.want_bfd_events()
         self.pg0.enable_capture()
         try:
         self.vapi.want_bfd_events()
         self.pg0.enable_capture()
         try:
-            self.bfd_udp4_sessions = self.statistics['/bfd/udp4/sessions']
-            self.bfd_udp6_sessions = self.statistics['/bfd/udp6/sessions']
-            self.vpp_session = VppBFDUDPSession(self, self.pg0,
-                                                self.pg0.remote_ip6,
-                                                af=AF_INET6)
+            self.bfd_udp4_sessions = self.statistics["/bfd/udp4/sessions"]
+            self.bfd_udp6_sessions = self.statistics["/bfd/udp6/sessions"]
+            self.vpp_session = VppBFDUDPSession(
+                self, self.pg0, self.pg0.remote_ip6, af=AF_INET6
+            )
             self.vpp_session.add_vpp_config()
             self.vpp_session.admin_up()
             self.test_session = BFDTestSession(self, self.pg0, AF_INET6)
             self.vpp_session.add_vpp_config()
             self.vpp_session.admin_up()
             self.test_session = BFDTestSession(self, self.pg0, AF_INET6)
@@ -1651,26 +1777,29 @@ class BFD6TestCase(VppTestCase):
         super(BFD6TestCase, self).tearDown()
 
     def test_session_up(self):
         super(BFD6TestCase, self).tearDown()
 
     def test_session_up(self):
-        """ bring BFD session up """
+        """bring BFD session up"""
         bfd_session_up(self)
         bfd_session_up(self)
-        bfd_udp4_sessions = self.statistics['/bfd/udp4/sessions']
-        bfd_udp6_sessions = self.statistics['/bfd/udp6/sessions']
+        bfd_udp4_sessions = self.statistics["/bfd/udp4/sessions"]
+        bfd_udp6_sessions = self.statistics["/bfd/udp6/sessions"]
         self.assert_equal(bfd_udp4_sessions, self.bfd_udp4_sessions)
         self.assert_equal(bfd_udp6_sessions - self.bfd_udp6_sessions, 1)
 
     def test_session_up_by_ip(self):
         self.assert_equal(bfd_udp4_sessions, self.bfd_udp4_sessions)
         self.assert_equal(bfd_udp6_sessions - self.bfd_udp6_sessions, 1)
 
     def test_session_up_by_ip(self):
-        """ bring BFD session up - first frame looked up by address pair """
+        """bring BFD session up - first frame looked up by address pair"""
         self.logger.info("BFD: Sending Slow control frame")
         self.test_session.update(my_discriminator=randint(0, 40000000))
         self.test_session.send_packet()
         self.pg0.enable_capture()
         p = self.pg0.wait_for_packet(1)
         self.logger.info("BFD: Sending Slow control frame")
         self.test_session.update(my_discriminator=randint(0, 40000000))
         self.test_session.send_packet()
         self.pg0.enable_capture()
         p = self.pg0.wait_for_packet(1)
-        self.assert_equal(p[BFD].your_discriminator,
-                          self.test_session.my_discriminator,
-                          "BFD - your discriminator")
+        self.assert_equal(
+            p[BFD].your_discriminator,
+            self.test_session.my_discriminator,
+            "BFD - your discriminator",
+        )
         self.assert_equal(p[BFD].state, BFDState.init, BFDState)
         self.assert_equal(p[BFD].state, BFDState.init, BFDState)
-        self.test_session.update(your_discriminator=p[BFD].my_discriminator,
-                                 state=BFDState.up)
+        self.test_session.update(
+            your_discriminator=p[BFD].my_discriminator, state=BFDState.up
+        )
         self.logger.info("BFD: Waiting for event")
         e = self.vapi.wait_for_event(1, "bfd_udp_session_event")
         verify_event(self, e, expected_state=BFDState.init)
         self.logger.info("BFD: Waiting for event")
         e = self.vapi.wait_for_event(1, "bfd_udp_session_event")
         verify_event(self, e, expected_state=BFDState.init)
@@ -1685,17 +1814,16 @@ class BFD6TestCase(VppTestCase):
         self.assert_equal(self.vpp_session.state, BFDState.up, BFDState)
 
     def test_hold_up(self):
         self.assert_equal(self.vpp_session.state, BFDState.up, BFDState)
 
     def test_hold_up(self):
-        """ hold BFD session up """
+        """hold BFD session up"""
         bfd_session_up(self)
         for dummy in range(self.test_session.detect_mult * 2):
             wait_for_bfd_packet(self)
             self.test_session.send_packet()
         bfd_session_up(self)
         for dummy in range(self.test_session.detect_mult * 2):
             wait_for_bfd_packet(self)
             self.test_session.send_packet()
-        self.assert_equal(len(self.vapi.collect_events()), 0,
-                          "number of bfd events")
+        self.assert_equal(len(self.vapi.collect_events()), 0, "number of bfd events")
         self.assert_equal(self.vpp_session.state, BFDState.up, BFDState)
 
     def test_echo_looped_back(self):
         self.assert_equal(self.vpp_session.state, BFDState.up, BFDState)
 
     def test_echo_looped_back(self):
-        """ echo packets looped back """
+        """echo packets looped back"""
         bfd_session_up(self)
         stats_before = bfd_grab_stats_snapshot(self)
         self.pg0.enable_capture()
         bfd_session_up(self)
         stats_before = bfd_grab_stats_snapshot(self)
         self.pg0.enable_capture()
@@ -1703,14 +1831,14 @@ class BFD6TestCase(VppTestCase):
         # random source port low enough to increment a few times..
         udp_sport_tx = randint(1, 50000)
         udp_sport_rx = udp_sport_tx
         # random source port low enough to increment a few times..
         udp_sport_tx = randint(1, 50000)
         udp_sport_rx = udp_sport_tx
-        echo_packet = (Ether(src=self.pg0.remote_mac,
-                             dst=self.pg0.local_mac) /
-                       IPv6(src=self.pg0.remote_ip6,
-                            dst=self.pg0.remote_ip6) /
-                       UDP(dport=BFD.udp_dport_echo) /
-                       Raw("this should be looped back"))
+        echo_packet = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IPv6(src=self.pg0.remote_ip6, dst=self.pg0.remote_ip6)
+            / UDP(dport=BFD.udp_dport_echo)
+            / Raw("this should be looped back")
+        )
         for dummy in range(echo_packet_count):
         for dummy in range(echo_packet_count):
-            self.sleep(.01, "delay between echo packets")
+            self.sleep(0.01, "delay between echo packets")
             echo_packet[UDP].sport = udp_sport_tx
             udp_sport_tx += 1
             self.logger.debug(ppp("Sending packet:", echo_packet))
             echo_packet[UDP].sport = udp_sport_tx
             udp_sport_tx += 1
             self.logger.debug(ppp("Sending packet:", echo_packet))
@@ -1722,8 +1850,7 @@ class BFD6TestCase(VppTestCase):
             p = self.pg0.wait_for_packet(1)
             self.logger.debug(ppp("Got packet:", p))
             ether = p[Ether]
             p = self.pg0.wait_for_packet(1)
             self.logger.debug(ppp("Got packet:", p))
             ether = p[Ether]
-            self.assert_equal(self.pg0.remote_mac,
-                              ether.dst, "Destination MAC")
+            self.assert_equal(self.pg0.remote_mac, ether.dst, "Destination MAC")
             self.assert_equal(self.pg0.local_mac, ether.src, "Source MAC")
             ip = p[IPv6]
             self.assert_equal(self.pg0.remote_ip6, ip.dst, "Destination IP")
             self.assert_equal(self.pg0.local_mac, ether.src, "Source MAC")
             ip = p[IPv6]
             self.assert_equal(self.pg0.remote_ip6, ip.dst, "Destination IP")
@@ -1732,50 +1859,57 @@ class BFD6TestCase(VppTestCase):
                 bfd_control_packets_rx += 1
                 continue
             self.assert_equal(self.pg0.remote_ip6, ip.src, "Source IP")
                 bfd_control_packets_rx += 1
                 continue
             self.assert_equal(self.pg0.remote_ip6, ip.src, "Source IP")
-            self.assert_equal(udp.dport, BFD.udp_dport_echo,
-                              "UDP destination port")
+            self.assert_equal(udp.dport, BFD.udp_dport_echo, "UDP destination port")
             self.assert_equal(udp.sport, udp_sport_rx, "UDP source port")
             udp_sport_rx += 1
             # need to compare the hex payload here, otherwise BFD_vpp_echo
             # gets in way
             self.assert_equal(udp.sport, udp_sport_rx, "UDP source port")
             udp_sport_rx += 1
             # need to compare the hex payload here, otherwise BFD_vpp_echo
             # gets in way
-            self.assertEqual(scapy.compat.raw(p[UDP].payload),
-                             scapy.compat.raw(echo_packet[UDP].payload),
-                             "Received packet is not the echo packet sent")
+            self.assertEqual(
+                scapy.compat.raw(p[UDP].payload),
+                scapy.compat.raw(echo_packet[UDP].payload),
+                "Received packet is not the echo packet sent",
+            )
             counter += 1
             counter += 1
-        self.assert_equal(udp_sport_tx, udp_sport_rx, "UDP source port (== "
-                          "ECHO packet identifier for test purposes)")
+        self.assert_equal(
+            udp_sport_tx,
+            udp_sport_rx,
+            "UDP source port (== ECHO packet identifier for test purposes)",
+        )
         stats_after = bfd_grab_stats_snapshot(self)
         diff = bfd_stats_diff(stats_before, stats_after)
         stats_after = bfd_grab_stats_snapshot(self)
         diff = bfd_stats_diff(stats_before, stats_after)
+        self.assertEqual(0, diff.rx, "RX counter bumped but no BFD packets sent")
+        self.assertEqual(bfd_control_packets_rx, diff.tx, "TX counter incorrect")
         self.assertEqual(
         self.assertEqual(
-            0, diff.rx, "RX counter bumped but no BFD packets sent")
-        self.assertEqual(bfd_control_packets_rx,
-                         diff.tx, "TX counter incorrect")
-        self.assertEqual(0, diff.rx_echo,
-                         "RX echo counter bumped but no BFD session exists")
-        self.assertEqual(0, diff.tx_echo,
-                         "TX echo counter bumped but no BFD session exists")
+            0, diff.rx_echo, "RX echo counter bumped but no BFD session exists"
+        )
+        self.assertEqual(
+            0, diff.tx_echo, "TX echo counter bumped but no BFD session exists"
+        )
 
     def test_echo(self):
 
     def test_echo(self):
-        """ echo function """
+        """echo function"""
         stats_before = bfd_grab_stats_snapshot(self)
         bfd_session_up(self)
         self.test_session.update(required_min_echo_rx=150000)
         self.test_session.send_packet()
         stats_before = bfd_grab_stats_snapshot(self)
         bfd_session_up(self)
         self.test_session.update(required_min_echo_rx=150000)
         self.test_session.send_packet()
-        detection_time = self.test_session.detect_mult *\
-            self.vpp_session.required_min_rx / USEC_IN_SEC
+        detection_time = (
+            self.test_session.detect_mult
+            * self.vpp_session.required_min_rx
+            / USEC_IN_SEC
+        )
         # echo shouldn't work without echo source set
         for dummy in range(10):
             sleep = self.vpp_session.required_min_rx / USEC_IN_SEC
             self.sleep(sleep, "delay before sending bfd packet")
             self.test_session.send_packet()
         # echo shouldn't work without echo source set
         for dummy in range(10):
             sleep = self.vpp_session.required_min_rx / USEC_IN_SEC
             self.sleep(sleep, "delay before sending bfd packet")
             self.test_session.send_packet()
-        p = wait_for_bfd_packet(
-            self, pcap_time_min=time.time() - self.vpp_clock_offset)
-        self.assert_equal(p[BFD].required_min_rx_interval,
-                          self.vpp_session.required_min_rx,
-                          "BFD required min rx interval")
+        p = wait_for_bfd_packet(self, pcap_time_min=time.time() - self.vpp_clock_offset)
+        self.assert_equal(
+            p[BFD].required_min_rx_interval,
+            self.vpp_session.required_min_rx,
+            "BFD required min rx interval",
+        )
         self.test_session.send_packet()
         self.test_session.send_packet()
-        self.vapi.bfd_udp_set_echo_source(
-            sw_if_index=self.loopback0.sw_if_index)
+        self.vapi.bfd_udp_set_echo_source(sw_if_index=self.loopback0.sw_if_index)
         echo_seen = False
         # should be turned on - loopback echo packets
         for dummy in range(3):
         echo_seen = False
         # should be turned on - loopback echo packets
         for dummy in range(3):
@@ -1785,12 +1919,19 @@ class BFD6TestCase(VppTestCase):
                 self.logger.debug(ppp("Got packet:", p))
                 if p[UDP].dport == BFD.udp_dport_echo:
                     self.assert_equal(
                 self.logger.debug(ppp("Got packet:", p))
                 if p[UDP].dport == BFD.udp_dport_echo:
                     self.assert_equal(
-                        p[IPv6].dst, self.pg0.local_ip6, "BFD ECHO dst IP")
-                    self.assertNotEqual(p[IPv6].src, self.loopback0.local_ip6,
-                                        "BFD ECHO src IP equal to loopback IP")
+                        p[IPv6].dst, self.pg0.local_ip6, "BFD ECHO dst IP"
+                    )
+                    self.assertNotEqual(
+                        p[IPv6].src,
+                        self.loopback0.local_ip6,
+                        "BFD ECHO src IP equal to loopback IP",
+                    )
                     self.logger.debug(ppp("Looping back packet:", p))
                     self.logger.debug(ppp("Looping back packet:", p))
-                    self.assert_equal(p[Ether].dst, self.pg0.remote_mac,
-                                      "ECHO packet destination MAC address")
+                    self.assert_equal(
+                        p[Ether].dst,
+                        self.pg0.remote_mac,
+                        "ECHO packet destination MAC address",
+                    )
                     self.test_session.rx_packets_echo += 1
                     self.test_session.tx_packets_echo += 1
                     p[Ether].dst = self.pg0.local_mac
                     self.test_session.rx_packets_echo += 1
                     self.test_session.tx_packets_echo += 1
                     p[Ether].dst = self.pg0.local_mac
@@ -1801,8 +1942,8 @@ class BFD6TestCase(VppTestCase):
                     self.test_session.rx_packets += 1
                     if echo_seen:
                         self.assertGreaterEqual(
                     self.test_session.rx_packets += 1
                     if echo_seen:
                         self.assertGreaterEqual(
-                            p[BFD].required_min_rx_interval,
-                            1000000)
+                            p[BFD].required_min_rx_interval, 1000000
+                        )
                     if "P" in p.sprintf("%BFD.flags%"):
                         final = self.test_session.create_packet()
                         final[BFD].flags = "F"
                     if "P" in p.sprintf("%BFD.flags%"):
                         final = self.test_session.create_packet()
                         final[BFD].flags = "F"
@@ -1810,33 +1951,41 @@ class BFD6TestCase(VppTestCase):
                 else:
                     raise Exception(ppp("Received unknown packet:", p))
 
                 else:
                     raise Exception(ppp("Received unknown packet:", p))
 
-                self.assert_equal(len(self.vapi.collect_events()), 0,
-                                  "number of bfd events")
+                self.assert_equal(
+                    len(self.vapi.collect_events()), 0, "number of bfd events"
+                )
             self.test_session.send_packet()
         self.assertTrue(echo_seen, "No echo packets received")
 
         stats_after = bfd_grab_stats_snapshot(self)
         diff = bfd_stats_diff(stats_before, stats_after)
         # our rx is vpp tx and vice versa, also tolerate one packet off
             self.test_session.send_packet()
         self.assertTrue(echo_seen, "No echo packets received")
 
         stats_after = bfd_grab_stats_snapshot(self)
         diff = bfd_stats_diff(stats_before, stats_after)
         # our rx is vpp tx and vice versa, also tolerate one packet off
-        self.assert_in_range(self.test_session.tx_packets,
-                             diff.rx - 1, diff.rx + 1, "RX counter")
-        self.assert_in_range(self.test_session.rx_packets,
-                             diff.tx - 1, diff.tx + 1, "TX counter")
-        self.assert_in_range(self.test_session.tx_packets_echo,
-                             diff.rx_echo - 1, diff.rx_echo + 1,
-                             "RX echo counter")
-        self.assert_in_range(self.test_session.rx_packets_echo,
-                             diff.tx_echo - 1, diff.tx_echo + 1,
-                             "TX echo counter")
+        self.assert_in_range(
+            self.test_session.tx_packets, diff.rx - 1, diff.rx + 1, "RX counter"
+        )
+        self.assert_in_range(
+            self.test_session.rx_packets, diff.tx - 1, diff.tx + 1, "TX counter"
+        )
+        self.assert_in_range(
+            self.test_session.tx_packets_echo,
+            diff.rx_echo - 1,
+            diff.rx_echo + 1,
+            "RX echo counter",
+        )
+        self.assert_in_range(
+            self.test_session.rx_packets_echo,
+            diff.tx_echo - 1,
+            diff.tx_echo + 1,
+            "TX echo counter",
+        )
 
     def test_intf_deleted(self):
 
     def test_intf_deleted(self):
-        """ interface with bfd session deleted """
+        """interface with bfd session deleted"""
         intf = VppLoInterface(self)
         intf.config_ip6()
         intf.admin_up()
         sw_if_index = intf.sw_if_index
         intf = VppLoInterface(self)
         intf.config_ip6()
         intf.admin_up()
         sw_if_index = intf.sw_if_index
-        vpp_session = VppBFDUDPSession(
-            self, intf, intf.remote_ip6, af=AF_INET6)
+        vpp_session = VppBFDUDPSession(self, intf, intf.remote_ip6, af=AF_INET6)
         vpp_session.add_vpp_config()
         vpp_session.admin_up()
         intf.remove_vpp_config()
         vpp_session.add_vpp_config()
         vpp_session.admin_up()
         intf.remove_vpp_config()
@@ -1847,7 +1996,7 @@ class BFD6TestCase(VppTestCase):
 
 @tag_run_solo
 class BFDFIBTestCase(VppTestCase):
 
 @tag_run_solo
 class BFDFIBTestCase(VppTestCase):
-    """ BFD-FIB interactions (IPv6) """
+    """BFD-FIB interactions (IPv6)"""
 
     vpp_session = None
     test_session = None
 
     vpp_session = None
     test_session = None
@@ -1880,40 +2029,48 @@ class BFDFIBTestCase(VppTestCase):
 
     @staticmethod
     def pkt_is_not_data_traffic(p):
 
     @staticmethod
     def pkt_is_not_data_traffic(p):
-        """ not data traffic implies BFD or the usual IPv6 ND/RA"""
+        """not data traffic implies BFD or the usual IPv6 ND/RA"""
         if p.haslayer(BFD) or is_ipv6_misc(p):
             return True
         return False
 
     def test_session_with_fib(self):
         if p.haslayer(BFD) or is_ipv6_misc(p):
             return True
         return False
 
     def test_session_with_fib(self):
-        """ BFD-FIB interactions """
+        """BFD-FIB interactions"""
 
         # packets to match against both of the routes
 
         # packets to match against both of the routes
-        p = [(Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-              IPv6(src="3001::1", dst="2001::1") /
-              UDP(sport=1234, dport=1234) /
-              Raw(b'\xa5' * 100)),
-             (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-              IPv6(src="3001::1", dst="2002::1") /
-              UDP(sport=1234, dport=1234) /
-              Raw(b'\xa5' * 100))]
+        p = [
+            (
+                Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+                / IPv6(src="3001::1", dst="2001::1")
+                / UDP(sport=1234, dport=1234)
+                / Raw(b"\xa5" * 100)
+            ),
+            (
+                Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+                / IPv6(src="3001::1", dst="2002::1")
+                / UDP(sport=1234, dport=1234)
+                / Raw(b"\xa5" * 100)
+            ),
+        ]
 
         # A recursive and a non-recursive route via a next-hop that
         # will have a BFD session
 
         # A recursive and a non-recursive route via a next-hop that
         # will have a BFD session
-        ip_2001_s_64 = VppIpRoute(self, "2001::", 64,
-                                  [VppRoutePath(self.pg0.remote_ip6,
-                                                self.pg0.sw_if_index)])
-        ip_2002_s_64 = VppIpRoute(self, "2002::", 64,
-                                  [VppRoutePath(self.pg0.remote_ip6,
-                                                0xffffffff)])
+        ip_2001_s_64 = VppIpRoute(
+            self,
+            "2001::",
+            64,
+            [VppRoutePath(self.pg0.remote_ip6, self.pg0.sw_if_index)],
+        )
+        ip_2002_s_64 = VppIpRoute(
+            self, "2002::", 64, [VppRoutePath(self.pg0.remote_ip6, 0xFFFFFFFF)]
+        )
         ip_2001_s_64.add_vpp_config()
         ip_2002_s_64.add_vpp_config()
 
         # bring the session up now the routes are present
         ip_2001_s_64.add_vpp_config()
         ip_2002_s_64.add_vpp_config()
 
         # bring the session up now the routes are present
-        self.vpp_session = VppBFDUDPSession(self,
-                                            self.pg0,
-                                            self.pg0.remote_ip6,
-                                            af=AF_INET6)
+        self.vpp_session = VppBFDUDPSession(
+            self, self.pg0, self.pg0.remote_ip6, af=AF_INET6
+        )
         self.vpp_session.add_vpp_config()
         self.vpp_session.admin_up()
         self.test_session = BFDTestSession(self, self.pg0, AF_INET6)
         self.vpp_session.add_vpp_config()
         self.vpp_session.admin_up()
         self.test_session = BFDTestSession(self, self.pg0, AF_INET6)
@@ -1925,10 +2082,9 @@ class BFDFIBTestCase(VppTestCase):
         self.pg_start()
         for packet in p:
             captured = self.pg0.wait_for_packet(
         self.pg_start()
         for packet in p:
             captured = self.pg0.wait_for_packet(
-                1,
-                filter_out_fn=self.pkt_is_not_data_traffic)
-            self.assertEqual(captured[IPv6].dst,
-                             packet[IPv6].dst)
+                1, filter_out_fn=self.pkt_is_not_data_traffic
+            )
+            self.assertEqual(captured[IPv6].dst, packet[IPv6].dst)
 
         # session is up - traffic is dropped
         bfd_session_down(self)
 
         # session is up - traffic is dropped
         bfd_session_down(self)
@@ -1945,15 +2101,14 @@ class BFDFIBTestCase(VppTestCase):
         self.pg_start()
         for packet in p:
             captured = self.pg0.wait_for_packet(
         self.pg_start()
         for packet in p:
             captured = self.pg0.wait_for_packet(
-                1,
-                filter_out_fn=self.pkt_is_not_data_traffic)
-            self.assertEqual(captured[IPv6].dst,
-                             packet[IPv6].dst)
+                1, filter_out_fn=self.pkt_is_not_data_traffic
+            )
+            self.assertEqual(captured[IPv6].dst, packet[IPv6].dst)
 
 
 @unittest.skipUnless(config.extended, "part of extended tests")
 class BFDTunTestCase(VppTestCase):
 
 
 @unittest.skipUnless(config.extended, "part of extended tests")
 class BFDTunTestCase(VppTestCase):
-    """ BFD over GRE tunnel """
+    """BFD over GRE tunnel"""
 
     vpp_session = None
     test_session = None
 
     vpp_session = None
     test_session = None
@@ -1986,42 +2141,44 @@ class BFDTunTestCase(VppTestCase):
 
     @staticmethod
     def pkt_is_not_data_traffic(p):
 
     @staticmethod
     def pkt_is_not_data_traffic(p):
-        """ not data traffic implies BFD or the usual IPv6 ND/RA"""
+        """not data traffic implies BFD or the usual IPv6 ND/RA"""
         if p.haslayer(BFD) or is_ipv6_misc(p):
             return True
         return False
 
     def test_bfd_o_gre(self):
         if p.haslayer(BFD) or is_ipv6_misc(p):
             return True
         return False
 
     def test_bfd_o_gre(self):
-        """ BFD-o-GRE  """
+        """BFD-o-GRE"""
 
         # A GRE interface over which to run a BFD session
 
         # A GRE interface over which to run a BFD session
-        gre_if = VppGreInterface(self,
-                                 self.pg0.local_ip4,
-                                 self.pg0.remote_ip4)
+        gre_if = VppGreInterface(self, self.pg0.local_ip4, self.pg0.remote_ip4)
         gre_if.add_vpp_config()
         gre_if.admin_up()
         gre_if.config_ip4()
 
         # bring the session up now the routes are present
         gre_if.add_vpp_config()
         gre_if.admin_up()
         gre_if.config_ip4()
 
         # bring the session up now the routes are present
-        self.vpp_session = VppBFDUDPSession(self,
-                                            gre_if,
-                                            gre_if.remote_ip4,
-                                            is_tunnel=True)
+        self.vpp_session = VppBFDUDPSession(
+            self, gre_if, gre_if.remote_ip4, is_tunnel=True
+        )
         self.vpp_session.add_vpp_config()
         self.vpp_session.admin_up()
 
         self.test_session = BFDTestSession(
         self.vpp_session.add_vpp_config()
         self.vpp_session.admin_up()
 
         self.test_session = BFDTestSession(
-            self, gre_if, AF_INET,
-            tunnel_header=(IP(src=self.pg0.remote_ip4,
-                              dst=self.pg0.local_ip4) /
-                           GRE()),
-            phy_interface=self.pg0)
+            self,
+            gre_if,
+            AF_INET,
+            tunnel_header=(IP(src=self.pg0.remote_ip4, dst=self.pg0.local_ip4) / GRE()),
+            phy_interface=self.pg0,
+        )
 
         # packets to match against both of the routes
 
         # packets to match against both of the routes
-        p = [(Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-              IP(src=self.pg0.remote_ip4, dst=gre_if.remote_ip4) /
-              UDP(sport=1234, dport=1234) /
-              Raw(b'\xa5' * 100))]
+        p = [
+            (
+                Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+                / IP(src=self.pg0.remote_ip4, dst=gre_if.remote_ip4)
+                / UDP(sport=1234, dport=1234)
+                / Raw(b"\xa5" * 100)
+            )
+        ]
 
         # session is up - traffic passes
         bfd_session_up(self)
 
         # session is up - traffic passes
         bfd_session_up(self)
@@ -2034,7 +2191,7 @@ class BFDTunTestCase(VppTestCase):
 
 @tag_run_solo
 class BFDSHA1TestCase(VppTestCase):
 
 @tag_run_solo
 class BFDSHA1TestCase(VppTestCase):
-    """Bidirectional Forwarding Detection (BFD) (SHA1 auth) """
+    """Bidirectional Forwarding Detection (BFD) (SHA1 auth)"""
 
     pg0 = None
     vpp_clock_offset = None
 
     pg0 = None
     vpp_clock_offset = None
@@ -2072,31 +2229,39 @@ class BFDSHA1TestCase(VppTestCase):
         super(BFDSHA1TestCase, self).tearDown()
 
     def test_session_up(self):
         super(BFDSHA1TestCase, self).tearDown()
 
     def test_session_up(self):
-        """ bring BFD session up """
+        """bring BFD session up"""
         key = self.factory.create_random_key(self)
         key.add_vpp_config()
         key = self.factory.create_random_key(self)
         key.add_vpp_config()
-        self.vpp_session = VppBFDUDPSession(self, self.pg0,
-                                            self.pg0.remote_ip4,
-                                            sha1_key=key)
+        self.vpp_session = VppBFDUDPSession(
+            self, self.pg0, self.pg0.remote_ip4, sha1_key=key
+        )
         self.vpp_session.add_vpp_config()
         self.vpp_session.admin_up()
         self.test_session = BFDTestSession(
         self.vpp_session.add_vpp_config()
         self.vpp_session.admin_up()
         self.test_session = BFDTestSession(
-            self, self.pg0, AF_INET, sha1_key=key,
-            bfd_key_id=self.vpp_session.bfd_key_id)
+            self,
+            self.pg0,
+            AF_INET,
+            sha1_key=key,
+            bfd_key_id=self.vpp_session.bfd_key_id,
+        )
         bfd_session_up(self)
 
     def test_hold_up(self):
         bfd_session_up(self)
 
     def test_hold_up(self):
-        """ hold BFD session up """
+        """hold BFD session up"""
         key = self.factory.create_random_key(self)
         key.add_vpp_config()
         key = self.factory.create_random_key(self)
         key.add_vpp_config()
-        self.vpp_session = VppBFDUDPSession(self, self.pg0,
-                                            self.pg0.remote_ip4,
-                                            sha1_key=key)
+        self.vpp_session = VppBFDUDPSession(
+            self, self.pg0, self.pg0.remote_ip4, sha1_key=key
+        )
         self.vpp_session.add_vpp_config()
         self.vpp_session.admin_up()
         self.test_session = BFDTestSession(
         self.vpp_session.add_vpp_config()
         self.vpp_session.admin_up()
         self.test_session = BFDTestSession(
-            self, self.pg0, AF_INET, sha1_key=key,
-            bfd_key_id=self.vpp_session.bfd_key_id)
+            self,
+            self.pg0,
+            AF_INET,
+            sha1_key=key,
+            bfd_key_id=self.vpp_session.bfd_key_id,
+        )
         bfd_session_up(self)
         for dummy in range(self.test_session.detect_mult * 2):
             wait_for_bfd_packet(self)
         bfd_session_up(self)
         for dummy in range(self.test_session.detect_mult * 2):
             wait_for_bfd_packet(self)
@@ -2104,19 +2269,23 @@ class BFDSHA1TestCase(VppTestCase):
         self.assert_equal(self.vpp_session.state, BFDState.up, BFDState)
 
     def test_hold_up_meticulous(self):
         self.assert_equal(self.vpp_session.state, BFDState.up, BFDState)
 
     def test_hold_up_meticulous(self):
-        """ hold BFD session up - meticulous auth """
-        key = self.factory.create_random_key(
-            self, BFDAuthType.meticulous_keyed_sha1)
+        """hold BFD session up - meticulous auth"""
+        key = self.factory.create_random_key(self, BFDAuthType.meticulous_keyed_sha1)
         key.add_vpp_config()
         key.add_vpp_config()
-        self.vpp_session = VppBFDUDPSession(self, self.pg0,
-                                            self.pg0.remote_ip4, sha1_key=key)
+        self.vpp_session = VppBFDUDPSession(
+            self, self.pg0, self.pg0.remote_ip4, sha1_key=key
+        )
         self.vpp_session.add_vpp_config()
         self.vpp_session.admin_up()
         # specify sequence number so that it wraps
         self.test_session = BFDTestSession(
         self.vpp_session.add_vpp_config()
         self.vpp_session.admin_up()
         # specify sequence number so that it wraps
         self.test_session = BFDTestSession(
-            self, self.pg0, AF_INET, sha1_key=key,
+            self,
+            self.pg0,
+            AF_INET,
+            sha1_key=key,
             bfd_key_id=self.vpp_session.bfd_key_id,
             bfd_key_id=self.vpp_session.bfd_key_id,
-            our_seq_number=0xFFFFFFFF - 4)
+            our_seq_number=0xFFFFFFFF - 4,
+        )
         bfd_session_up(self)
         for dummy in range(30):
             wait_for_bfd_packet(self)
         bfd_session_up(self)
         for dummy in range(30):
             wait_for_bfd_packet(self)
@@ -2125,35 +2294,47 @@ class BFDSHA1TestCase(VppTestCase):
         self.assert_equal(self.vpp_session.state, BFDState.up, BFDState)
 
     def test_send_bad_seq_number(self):
         self.assert_equal(self.vpp_session.state, BFDState.up, BFDState)
 
     def test_send_bad_seq_number(self):
-        """ session is not kept alive by msgs with bad sequence numbers"""
-        key = self.factory.create_random_key(
-            self, BFDAuthType.meticulous_keyed_sha1)
+        """session is not kept alive by msgs with bad sequence numbers"""
+        key = self.factory.create_random_key(self, BFDAuthType.meticulous_keyed_sha1)
         key.add_vpp_config()
         key.add_vpp_config()
-        self.vpp_session = VppBFDUDPSession(self, self.pg0,
-                                            self.pg0.remote_ip4, sha1_key=key)
+        self.vpp_session = VppBFDUDPSession(
+            self, self.pg0, self.pg0.remote_ip4, sha1_key=key
+        )
         self.vpp_session.add_vpp_config()
         self.test_session = BFDTestSession(
         self.vpp_session.add_vpp_config()
         self.test_session = BFDTestSession(
-            self, self.pg0, AF_INET, sha1_key=key,
-            bfd_key_id=self.vpp_session.bfd_key_id)
+            self,
+            self.pg0,
+            AF_INET,
+            sha1_key=key,
+            bfd_key_id=self.vpp_session.bfd_key_id,
+        )
         bfd_session_up(self)
         bfd_session_up(self)
-        detection_time = self.test_session.detect_mult *\
-            self.vpp_session.required_min_rx / USEC_IN_SEC
+        detection_time = (
+            self.test_session.detect_mult
+            * self.vpp_session.required_min_rx
+            / USEC_IN_SEC
+        )
         send_until = time.time() + 2 * detection_time
         while time.time() < send_until:
             self.test_session.send_packet()
         send_until = time.time() + 2 * detection_time
         while time.time() < send_until:
             self.test_session.send_packet()
-            self.sleep(0.7 * self.vpp_session.required_min_rx / USEC_IN_SEC,
-                       "time between bfd packets")
+            self.sleep(
+                0.7 * self.vpp_session.required_min_rx / USEC_IN_SEC,
+                "time between bfd packets",
+            )
         e = self.vapi.collect_events()
         # session should be down now, because the sequence numbers weren't
         # updated
         self.assert_equal(len(e), 1, "number of bfd events")
         verify_event(self, e[0], expected_state=BFDState.down)
 
         e = self.vapi.collect_events()
         # session should be down now, because the sequence numbers weren't
         # updated
         self.assert_equal(len(e), 1, "number of bfd events")
         verify_event(self, e[0], expected_state=BFDState.down)
 
-    def execute_rogue_session_scenario(self, vpp_bfd_udp_session,
-                                       legitimate_test_session,
-                                       rogue_test_session,
-                                       rogue_bfd_values=None):
-        """ execute a rogue session interaction scenario
+    def execute_rogue_session_scenario(
+        self,
+        vpp_bfd_udp_session,
+        legitimate_test_session,
+        rogue_test_session,
+        rogue_bfd_values=None,
+    ):
+        """execute a rogue session interaction scenario
 
         1. create vpp session, add config
         2. bring the legitimate session up
 
         1. create vpp session, add config
         2. bring the legitimate session up
@@ -2178,7 +2359,8 @@ class BFDSHA1TestCase(VppTestCase):
             detect_mult=self.test_session.detect_mult,
             diag=self.test_session.diag,
             state=self.test_session.state,
             detect_mult=self.test_session.detect_mult,
             diag=self.test_session.diag,
             state=self.test_session.state,
-            auth_type=self.test_session.auth_type)
+            auth_type=self.test_session.auth_type,
+        )
         if rogue_bfd_values:
             rogue_test_session.update(**rogue_bfd_values)
         rogue_test_session.update(state=BFDState.down)
         if rogue_bfd_values:
             rogue_test_session.update(**rogue_bfd_values)
         rogue_test_session.update(state=BFDState.down)
@@ -2187,69 +2369,84 @@ class BFDSHA1TestCase(VppTestCase):
         self.assert_equal(self.vpp_session.state, BFDState.up, BFDState)
 
     def test_mismatch_auth(self):
         self.assert_equal(self.vpp_session.state, BFDState.up, BFDState)
 
     def test_mismatch_auth(self):
-        """ session is not brought down by unauthenticated msg """
+        """session is not brought down by unauthenticated msg"""
         key = self.factory.create_random_key(self)
         key.add_vpp_config()
         vpp_session = VppBFDUDPSession(
         key = self.factory.create_random_key(self)
         key.add_vpp_config()
         vpp_session = VppBFDUDPSession(
-            self, self.pg0, self.pg0.remote_ip4, sha1_key=key)
+            self, self.pg0, self.pg0.remote_ip4, sha1_key=key
+        )
         legitimate_test_session = BFDTestSession(
         legitimate_test_session = BFDTestSession(
-            self, self.pg0, AF_INET, sha1_key=key,
-            bfd_key_id=vpp_session.bfd_key_id)
+            self, self.pg0, AF_INET, sha1_key=key, bfd_key_id=vpp_session.bfd_key_id
+        )
         rogue_test_session = BFDTestSession(self, self.pg0, AF_INET)
         rogue_test_session = BFDTestSession(self, self.pg0, AF_INET)
-        self.execute_rogue_session_scenario(vpp_session,
-                                            legitimate_test_session,
-                                            rogue_test_session)
+        self.execute_rogue_session_scenario(
+            vpp_session, legitimate_test_session, rogue_test_session
+        )
 
     def test_mismatch_bfd_key_id(self):
 
     def test_mismatch_bfd_key_id(self):
-        """ session is not brought down by msg with non-existent key-id """
+        """session is not brought down by msg with non-existent key-id"""
         key = self.factory.create_random_key(self)
         key.add_vpp_config()
         vpp_session = VppBFDUDPSession(
         key = self.factory.create_random_key(self)
         key.add_vpp_config()
         vpp_session = VppBFDUDPSession(
-            self, self.pg0, self.pg0.remote_ip4, sha1_key=key)
+            self, self.pg0, self.pg0.remote_ip4, sha1_key=key
+        )
         # pick a different random bfd key id
         x = randint(0, 255)
         while x == vpp_session.bfd_key_id:
             x = randint(0, 255)
         legitimate_test_session = BFDTestSession(
         # pick a different random bfd key id
         x = randint(0, 255)
         while x == vpp_session.bfd_key_id:
             x = randint(0, 255)
         legitimate_test_session = BFDTestSession(
-            self, self.pg0, AF_INET, sha1_key=key,
-            bfd_key_id=vpp_session.bfd_key_id)
+            self, self.pg0, AF_INET, sha1_key=key, bfd_key_id=vpp_session.bfd_key_id
+        )
         rogue_test_session = BFDTestSession(
         rogue_test_session = BFDTestSession(
-            self, self.pg0, AF_INET, sha1_key=key, bfd_key_id=x)
-        self.execute_rogue_session_scenario(vpp_session,
-                                            legitimate_test_session,
-                                            rogue_test_session)
+            self, self.pg0, AF_INET, sha1_key=key, bfd_key_id=x
+        )
+        self.execute_rogue_session_scenario(
+            vpp_session, legitimate_test_session, rogue_test_session
+        )
 
     def test_mismatched_auth_type(self):
 
     def test_mismatched_auth_type(self):
-        """ session is not brought down by msg with wrong auth type """
+        """session is not brought down by msg with wrong auth type"""
         key = self.factory.create_random_key(self)
         key.add_vpp_config()
         vpp_session = VppBFDUDPSession(
         key = self.factory.create_random_key(self)
         key.add_vpp_config()
         vpp_session = VppBFDUDPSession(
-            self, self.pg0, self.pg0.remote_ip4, sha1_key=key)
+            self, self.pg0, self.pg0.remote_ip4, sha1_key=key
+        )
         legitimate_test_session = BFDTestSession(
         legitimate_test_session = BFDTestSession(
-            self, self.pg0, AF_INET, sha1_key=key,
-            bfd_key_id=vpp_session.bfd_key_id)
+            self, self.pg0, AF_INET, sha1_key=key, bfd_key_id=vpp_session.bfd_key_id
+        )
         rogue_test_session = BFDTestSession(
         rogue_test_session = BFDTestSession(
-            self, self.pg0, AF_INET, sha1_key=key,
-            bfd_key_id=vpp_session.bfd_key_id)
+            self, self.pg0, AF_INET, sha1_key=key, bfd_key_id=vpp_session.bfd_key_id
+        )
         self.execute_rogue_session_scenario(
         self.execute_rogue_session_scenario(
-            vpp_session, legitimate_test_session, rogue_test_session,
-            {'auth_type': BFDAuthType.keyed_md5})
+            vpp_session,
+            legitimate_test_session,
+            rogue_test_session,
+            {"auth_type": BFDAuthType.keyed_md5},
+        )
 
     def test_restart(self):
 
     def test_restart(self):
-        """ simulate remote peer restart and resynchronization """
-        key = self.factory.create_random_key(
-            self, BFDAuthType.meticulous_keyed_sha1)
+        """simulate remote peer restart and resynchronization"""
+        key = self.factory.create_random_key(self, BFDAuthType.meticulous_keyed_sha1)
         key.add_vpp_config()
         key.add_vpp_config()
-        self.vpp_session = VppBFDUDPSession(self, self.pg0,
-                                            self.pg0.remote_ip4, sha1_key=key)
+        self.vpp_session = VppBFDUDPSession(
+            self, self.pg0, self.pg0.remote_ip4, sha1_key=key
+        )
         self.vpp_session.add_vpp_config()
         self.test_session = BFDTestSession(
         self.vpp_session.add_vpp_config()
         self.test_session = BFDTestSession(
-            self, self.pg0, AF_INET, sha1_key=key,
-            bfd_key_id=self.vpp_session.bfd_key_id, our_seq_number=0)
+            self,
+            self.pg0,
+            AF_INET,
+            sha1_key=key,
+            bfd_key_id=self.vpp_session.bfd_key_id,
+            our_seq_number=0,
+        )
         bfd_session_up(self)
         # don't send any packets for 2*detection_time
         bfd_session_up(self)
         # don't send any packets for 2*detection_time
-        detection_time = self.test_session.detect_mult *\
-            self.vpp_session.required_min_rx / USEC_IN_SEC
+        detection_time = (
+            self.test_session.detect_mult
+            * self.vpp_session.required_min_rx
+            / USEC_IN_SEC
+        )
         self.sleep(2 * detection_time, "simulating peer restart")
         events = self.vapi.collect_events()
         self.assert_equal(len(events), 1, "number of bfd events")
         self.sleep(2 * detection_time, "simulating peer restart")
         events = self.vapi.collect_events()
         self.assert_equal(len(events), 1, "number of bfd events")
@@ -2266,7 +2463,7 @@ class BFDSHA1TestCase(VppTestCase):
 
 @tag_run_solo
 class BFDAuthOnOffTestCase(VppTestCase):
 
 @tag_run_solo
 class BFDAuthOnOffTestCase(VppTestCase):
-    """Bidirectional Forwarding Detection (BFD) (changing auth) """
+    """Bidirectional Forwarding Detection (BFD) (changing auth)"""
 
     pg0 = None
     vpp_session = None
 
     pg0 = None
     vpp_session = None
@@ -2303,11 +2500,10 @@ class BFDAuthOnOffTestCase(VppTestCase):
         super(BFDAuthOnOffTestCase, self).tearDown()
 
     def test_auth_on_immediate(self):
         super(BFDAuthOnOffTestCase, self).tearDown()
 
     def test_auth_on_immediate(self):
-        """ turn auth on without disturbing session state (immediate) """
+        """turn auth on without disturbing session state (immediate)"""
         key = self.factory.create_random_key(self)
         key.add_vpp_config()
         key = self.factory.create_random_key(self)
         key.add_vpp_config()
-        self.vpp_session = VppBFDUDPSession(self, self.pg0,
-                                            self.pg0.remote_ip4)
+        self.vpp_session = VppBFDUDPSession(self, self.pg0, self.pg0.remote_ip4)
         self.vpp_session.add_vpp_config()
         self.test_session = BFDTestSession(self, self.pg0, AF_INET)
         bfd_session_up(self)
         self.vpp_session.add_vpp_config()
         self.test_session = BFDTestSession(self, self.pg0, AF_INET)
         bfd_session_up(self)
@@ -2323,19 +2519,23 @@ class BFDAuthOnOffTestCase(VppTestCase):
             self.assert_equal(p[BFD].state, BFDState.up, BFDState)
             self.test_session.send_packet()
         self.assert_equal(self.vpp_session.state, BFDState.up, BFDState)
             self.assert_equal(p[BFD].state, BFDState.up, BFDState)
             self.test_session.send_packet()
         self.assert_equal(self.vpp_session.state, BFDState.up, BFDState)
-        self.assert_equal(len(self.vapi.collect_events()), 0,
-                          "number of bfd events")
+        self.assert_equal(len(self.vapi.collect_events()), 0, "number of bfd events")
 
     def test_auth_off_immediate(self):
 
     def test_auth_off_immediate(self):
-        """ turn auth off without disturbing session state (immediate) """
+        """turn auth off without disturbing session state (immediate)"""
         key = self.factory.create_random_key(self)
         key.add_vpp_config()
         key = self.factory.create_random_key(self)
         key.add_vpp_config()
-        self.vpp_session = VppBFDUDPSession(self, self.pg0,
-                                            self.pg0.remote_ip4, sha1_key=key)
+        self.vpp_session = VppBFDUDPSession(
+            self, self.pg0, self.pg0.remote_ip4, sha1_key=key
+        )
         self.vpp_session.add_vpp_config()
         self.test_session = BFDTestSession(
         self.vpp_session.add_vpp_config()
         self.test_session = BFDTestSession(
-            self, self.pg0, AF_INET, sha1_key=key,
-            bfd_key_id=self.vpp_session.bfd_key_id)
+            self,
+            self.pg0,
+            AF_INET,
+            sha1_key=key,
+            bfd_key_id=self.vpp_session.bfd_key_id,
+        )
         bfd_session_up(self)
         # self.vapi.want_bfd_events(enable_disable=0)
         for dummy in range(self.test_session.detect_mult * 2):
         bfd_session_up(self)
         # self.vapi.want_bfd_events(enable_disable=0)
         for dummy in range(self.test_session.detect_mult * 2):
@@ -2352,21 +2552,25 @@ class BFDAuthOnOffTestCase(VppTestCase):
             self.test_session.inc_seq_num()
             self.test_session.send_packet()
         self.assert_equal(self.vpp_session.state, BFDState.up, BFDState)
             self.test_session.inc_seq_num()
             self.test_session.send_packet()
         self.assert_equal(self.vpp_session.state, BFDState.up, BFDState)
-        self.assert_equal(len(self.vapi.collect_events()), 0,
-                          "number of bfd events")
+        self.assert_equal(len(self.vapi.collect_events()), 0, "number of bfd events")
 
     def test_auth_change_key_immediate(self):
 
     def test_auth_change_key_immediate(self):
-        """ change auth key without disturbing session state (immediate) """
+        """change auth key without disturbing session state (immediate)"""
         key1 = self.factory.create_random_key(self)
         key1.add_vpp_config()
         key2 = self.factory.create_random_key(self)
         key2.add_vpp_config()
         key1 = self.factory.create_random_key(self)
         key1.add_vpp_config()
         key2 = self.factory.create_random_key(self)
         key2.add_vpp_config()
-        self.vpp_session = VppBFDUDPSession(self, self.pg0,
-                                            self.pg0.remote_ip4, sha1_key=key1)
+        self.vpp_session = VppBFDUDPSession(
+            self, self.pg0, self.pg0.remote_ip4, sha1_key=key1
+        )
         self.vpp_session.add_vpp_config()
         self.test_session = BFDTestSession(
         self.vpp_session.add_vpp_config()
         self.test_session = BFDTestSession(
-            self, self.pg0, AF_INET, sha1_key=key1,
-            bfd_key_id=self.vpp_session.bfd_key_id)
+            self,
+            self.pg0,
+            AF_INET,
+            sha1_key=key1,
+            bfd_key_id=self.vpp_session.bfd_key_id,
+        )
         bfd_session_up(self)
         for dummy in range(self.test_session.detect_mult * 2):
             p = wait_for_bfd_packet(self)
         bfd_session_up(self)
         for dummy in range(self.test_session.detect_mult * 2):
             p = wait_for_bfd_packet(self)
@@ -2380,15 +2584,13 @@ class BFDAuthOnOffTestCase(VppTestCase):
             self.assert_equal(p[BFD].state, BFDState.up, BFDState)
             self.test_session.send_packet()
         self.assert_equal(self.vpp_session.state, BFDState.up, BFDState)
             self.assert_equal(p[BFD].state, BFDState.up, BFDState)
             self.test_session.send_packet()
         self.assert_equal(self.vpp_session.state, BFDState.up, BFDState)
-        self.assert_equal(len(self.vapi.collect_events()), 0,
-                          "number of bfd events")
+        self.assert_equal(len(self.vapi.collect_events()), 0, "number of bfd events")
 
     def test_auth_on_delayed(self):
 
     def test_auth_on_delayed(self):
-        """ turn auth on without disturbing session state (delayed) """
+        """turn auth on without disturbing session state (delayed)"""
         key = self.factory.create_random_key(self)
         key.add_vpp_config()
         key = self.factory.create_random_key(self)
         key.add_vpp_config()
-        self.vpp_session = VppBFDUDPSession(self, self.pg0,
-                                            self.pg0.remote_ip4)
+        self.vpp_session = VppBFDUDPSession(self, self.pg0, self.pg0.remote_ip4)
         self.vpp_session.add_vpp_config()
         self.test_session = BFDTestSession(self, self.pg0, AF_INET)
         bfd_session_up(self)
         self.vpp_session.add_vpp_config()
         self.test_session = BFDTestSession(self, self.pg0, AF_INET)
         bfd_session_up(self)
@@ -2408,19 +2610,23 @@ class BFDAuthOnOffTestCase(VppTestCase):
             self.assert_equal(p[BFD].state, BFDState.up, BFDState)
             self.test_session.send_packet()
         self.assert_equal(self.vpp_session.state, BFDState.up, BFDState)
             self.assert_equal(p[BFD].state, BFDState.up, BFDState)
             self.test_session.send_packet()
         self.assert_equal(self.vpp_session.state, BFDState.up, BFDState)
-        self.assert_equal(len(self.vapi.collect_events()), 0,
-                          "number of bfd events")
+        self.assert_equal(len(self.vapi.collect_events()), 0, "number of bfd events")
 
     def test_auth_off_delayed(self):
 
     def test_auth_off_delayed(self):
-        """ turn auth off without disturbing session state (delayed) """
+        """turn auth off without disturbing session state (delayed)"""
         key = self.factory.create_random_key(self)
         key.add_vpp_config()
         key = self.factory.create_random_key(self)
         key.add_vpp_config()
-        self.vpp_session = VppBFDUDPSession(self, self.pg0,
-                                            self.pg0.remote_ip4, sha1_key=key)
+        self.vpp_session = VppBFDUDPSession(
+            self, self.pg0, self.pg0.remote_ip4, sha1_key=key
+        )
         self.vpp_session.add_vpp_config()
         self.test_session = BFDTestSession(
         self.vpp_session.add_vpp_config()
         self.test_session = BFDTestSession(
-            self, self.pg0, AF_INET, sha1_key=key,
-            bfd_key_id=self.vpp_session.bfd_key_id)
+            self,
+            self.pg0,
+            AF_INET,
+            sha1_key=key,
+            bfd_key_id=self.vpp_session.bfd_key_id,
+        )
         bfd_session_up(self)
         for dummy in range(self.test_session.detect_mult * 2):
             p = wait_for_bfd_packet(self)
         bfd_session_up(self)
         for dummy in range(self.test_session.detect_mult * 2):
             p = wait_for_bfd_packet(self)
@@ -2439,22 +2645,26 @@ class BFDAuthOnOffTestCase(VppTestCase):
             self.assert_equal(p[BFD].state, BFDState.up, BFDState)
             self.test_session.send_packet()
         self.assert_equal(self.vpp_session.state, BFDState.up, BFDState)
             self.assert_equal(p[BFD].state, BFDState.up, BFDState)
             self.test_session.send_packet()
         self.assert_equal(self.vpp_session.state, BFDState.up, BFDState)
-        self.assert_equal(len(self.vapi.collect_events()), 0,
-                          "number of bfd events")
+        self.assert_equal(len(self.vapi.collect_events()), 0, "number of bfd events")
 
     def test_auth_change_key_delayed(self):
 
     def test_auth_change_key_delayed(self):
-        """ change auth key without disturbing session state (delayed) """
+        """change auth key without disturbing session state (delayed)"""
         key1 = self.factory.create_random_key(self)
         key1.add_vpp_config()
         key2 = self.factory.create_random_key(self)
         key2.add_vpp_config()
         key1 = self.factory.create_random_key(self)
         key1.add_vpp_config()
         key2 = self.factory.create_random_key(self)
         key2.add_vpp_config()
-        self.vpp_session = VppBFDUDPSession(self, self.pg0,
-                                            self.pg0.remote_ip4, sha1_key=key1)
+        self.vpp_session = VppBFDUDPSession(
+            self, self.pg0, self.pg0.remote_ip4, sha1_key=key1
+        )
         self.vpp_session.add_vpp_config()
         self.vpp_session.admin_up()
         self.test_session = BFDTestSession(
         self.vpp_session.add_vpp_config()
         self.vpp_session.admin_up()
         self.test_session = BFDTestSession(
-            self, self.pg0, AF_INET, sha1_key=key1,
-            bfd_key_id=self.vpp_session.bfd_key_id)
+            self,
+            self.pg0,
+            AF_INET,
+            sha1_key=key1,
+            bfd_key_id=self.vpp_session.bfd_key_id,
+        )
         bfd_session_up(self)
         for dummy in range(self.test_session.detect_mult * 2):
             p = wait_for_bfd_packet(self)
         bfd_session_up(self)
         for dummy in range(self.test_session.detect_mult * 2):
             p = wait_for_bfd_packet(self)
@@ -2473,13 +2683,13 @@ class BFDAuthOnOffTestCase(VppTestCase):
             self.assert_equal(p[BFD].state, BFDState.up, BFDState)
             self.test_session.send_packet()
         self.assert_equal(self.vpp_session.state, BFDState.up, BFDState)
             self.assert_equal(p[BFD].state, BFDState.up, BFDState)
             self.test_session.send_packet()
         self.assert_equal(self.vpp_session.state, BFDState.up, BFDState)
-        self.assert_equal(len(self.vapi.collect_events()), 0,
-                          "number of bfd events")
+        self.assert_equal(len(self.vapi.collect_events()), 0, "number of bfd events")
 
 
 @tag_run_solo
 class BFDCLITestCase(VppTestCase):
 
 
 @tag_run_solo
 class BFDCLITestCase(VppTestCase):
-    """Bidirectional Forwarding Detection (BFD) (CLI) """
+    """Bidirectional Forwarding Detection (BFD) (CLI)"""
+
     pg0 = None
 
     @classmethod
     pg0 = None
 
     @classmethod
@@ -2516,52 +2726,54 @@ class BFDCLITestCase(VppTestCase):
         super(BFDCLITestCase, self).tearDown()
 
     def cli_verify_no_response(self, cli):
         super(BFDCLITestCase, self).tearDown()
 
     def cli_verify_no_response(self, cli):
-        """ execute a CLI, asserting that the response is empty """
-        self.assert_equal(self.vapi.cli(cli),
-                          "",
-                          "CLI command response")
+        """execute a CLI, asserting that the response is empty"""
+        self.assert_equal(self.vapi.cli(cli), "", "CLI command response")
 
     def cli_verify_response(self, cli, expected):
 
     def cli_verify_response(self, cli, expected):
-        """ execute a CLI, asserting that the response matches expectation """
+        """execute a CLI, asserting that the response matches expectation"""
         try:
             reply = self.vapi.cli(cli)
         except CliFailedCommandError as cli_error:
             reply = str(cli_error)
         try:
             reply = self.vapi.cli(cli)
         except CliFailedCommandError as cli_error:
             reply = str(cli_error)
-        self.assert_equal(reply.strip(),
-                          expected,
-                          "CLI command response")
+        self.assert_equal(reply.strip(), expected, "CLI command response")
 
     def test_show(self):
 
     def test_show(self):
-        """ show commands """
+        """show commands"""
         k1 = self.factory.create_random_key(self)
         k1.add_vpp_config()
         k2 = self.factory.create_random_key(
         k1 = self.factory.create_random_key(self)
         k1.add_vpp_config()
         k2 = self.factory.create_random_key(
-            self, auth_type=BFDAuthType.meticulous_keyed_sha1)
+            self, auth_type=BFDAuthType.meticulous_keyed_sha1
+        )
         k2.add_vpp_config()
         s1 = VppBFDUDPSession(self, self.pg0, self.pg0.remote_ip4)
         s1.add_vpp_config()
         k2.add_vpp_config()
         s1 = VppBFDUDPSession(self, self.pg0, self.pg0.remote_ip4)
         s1.add_vpp_config()
-        s2 = VppBFDUDPSession(self, self.pg0, self.pg0.remote_ip6, af=AF_INET6,
-                              sha1_key=k2)
+        s2 = VppBFDUDPSession(
+            self, self.pg0, self.pg0.remote_ip6, af=AF_INET6, sha1_key=k2
+        )
         s2.add_vpp_config()
         self.logger.info(self.vapi.ppcli("show bfd keys"))
         self.logger.info(self.vapi.ppcli("show bfd sessions"))
         self.logger.info(self.vapi.ppcli("show bfd"))
 
     def test_set_del_sha1_key(self):
         s2.add_vpp_config()
         self.logger.info(self.vapi.ppcli("show bfd keys"))
         self.logger.info(self.vapi.ppcli("show bfd sessions"))
         self.logger.info(self.vapi.ppcli("show bfd"))
 
     def test_set_del_sha1_key(self):
-        """ set/delete SHA1 auth key """
+        """set/delete SHA1 auth key"""
         k = self.factory.create_random_key(self)
         self.registry.register(k, self.logger)
         self.cli_verify_no_response(
         k = self.factory.create_random_key(self)
         self.registry.register(k, self.logger)
         self.cli_verify_no_response(
-            "bfd key set conf-key-id %s type keyed-sha1 secret %s" %
-            (k.conf_key_id,
-                "".join("{:02x}".format(scapy.compat.orb(c)) for c in k.key)))
+            "bfd key set conf-key-id %s type keyed-sha1 secret %s"
+            % (
+                k.conf_key_id,
+                "".join("{:02x}".format(scapy.compat.orb(c)) for c in k.key),
+            )
+        )
         self.assertTrue(k.query_vpp_config())
         self.vpp_session = VppBFDUDPSession(
         self.assertTrue(k.query_vpp_config())
         self.vpp_session = VppBFDUDPSession(
-            self, self.pg0, self.pg0.remote_ip4, sha1_key=k)
+            self, self.pg0, self.pg0.remote_ip4, sha1_key=k
+        )
         self.vpp_session.add_vpp_config()
         self.vpp_session.add_vpp_config()
-        self.test_session = \
-            BFDTestSession(self, self.pg0, AF_INET, sha1_key=k,
-                           bfd_key_id=self.vpp_session.bfd_key_id)
+        self.test_session = BFDTestSession(
+            self, self.pg0, AF_INET, sha1_key=k, bfd_key_id=self.vpp_session.bfd_key_id
+        )
         self.vapi.want_bfd_events()
         bfd_session_up(self)
         bfd_session_down(self)
         self.vapi.want_bfd_events()
         bfd_session_up(self)
         bfd_session_down(self)
@@ -2569,37 +2781,43 @@ class BFDCLITestCase(VppTestCase):
         # is in-use
         k2 = self.factory.create_random_key(self)
         self.cli_verify_response(
         # is in-use
         k2 = self.factory.create_random_key(self)
         self.cli_verify_response(
-            "bfd key set conf-key-id %s type keyed-sha1 secret %s" %
-            (k.conf_key_id,
-                "".join("{:02x}".format(scapy.compat.orb(c)) for c in k2.key)),
+            "bfd key set conf-key-id %s type keyed-sha1 secret %s"
+            % (
+                k.conf_key_id,
+                "".join("{:02x}".format(scapy.compat.orb(c)) for c in k2.key),
+            ),
             "bfd key set: `bfd_auth_set_key' API call failed, "
             "bfd key set: `bfd_auth_set_key' API call failed, "
-            "rv=-103:BFD object in use")
+            "rv=-103:BFD object in use",
+        )
         # manipulating the session using old secret should still work
         bfd_session_up(self)
         bfd_session_down(self)
         self.vpp_session.remove_vpp_config()
         # manipulating the session using old secret should still work
         bfd_session_up(self)
         bfd_session_down(self)
         self.vpp_session.remove_vpp_config()
-        self.cli_verify_no_response(
-            "bfd key del conf-key-id %s" % k.conf_key_id)
+        self.cli_verify_no_response("bfd key del conf-key-id %s" % k.conf_key_id)
         self.assertFalse(k.query_vpp_config())
 
     def test_set_del_meticulous_sha1_key(self):
         self.assertFalse(k.query_vpp_config())
 
     def test_set_del_meticulous_sha1_key(self):
-        """ set/delete meticulous SHA1 auth key """
+        """set/delete meticulous SHA1 auth key"""
         k = self.factory.create_random_key(
         k = self.factory.create_random_key(
-            self, auth_type=BFDAuthType.meticulous_keyed_sha1)
+            self, auth_type=BFDAuthType.meticulous_keyed_sha1
+        )
         self.registry.register(k, self.logger)
         self.cli_verify_no_response(
         self.registry.register(k, self.logger)
         self.cli_verify_no_response(
-            "bfd key set conf-key-id %s type meticulous-keyed-sha1 secret %s" %
-            (k.conf_key_id,
-                "".join("{:02x}".format(scapy.compat.orb(c)) for c in k.key)))
+            "bfd key set conf-key-id %s type meticulous-keyed-sha1 secret %s"
+            % (
+                k.conf_key_id,
+                "".join("{:02x}".format(scapy.compat.orb(c)) for c in k.key),
+            )
+        )
         self.assertTrue(k.query_vpp_config())
         self.assertTrue(k.query_vpp_config())
-        self.vpp_session = VppBFDUDPSession(self, self.pg0,
-                                            self.pg0.remote_ip6, af=AF_INET6,
-                                            sha1_key=k)
+        self.vpp_session = VppBFDUDPSession(
+            self, self.pg0, self.pg0.remote_ip6, af=AF_INET6, sha1_key=k
+        )
         self.vpp_session.add_vpp_config()
         self.vpp_session.admin_up()
         self.vpp_session.add_vpp_config()
         self.vpp_session.admin_up()
-        self.test_session = \
-            BFDTestSession(self, self.pg0, AF_INET6, sha1_key=k,
-                           bfd_key_id=self.vpp_session.bfd_key_id)
+        self.test_session = BFDTestSession(
+            self, self.pg0, AF_INET6, sha1_key=k, bfd_key_id=self.vpp_session.bfd_key_id
+        )
         self.vapi.want_bfd_events()
         bfd_session_up(self)
         bfd_session_down(self)
         self.vapi.want_bfd_events()
         bfd_session_up(self)
         bfd_session_down(self)
@@ -2607,299 +2825,409 @@ class BFDCLITestCase(VppTestCase):
         # is in-use
         k2 = self.factory.create_random_key(self)
         self.cli_verify_response(
         # is in-use
         k2 = self.factory.create_random_key(self)
         self.cli_verify_response(
-            "bfd key set conf-key-id %s type keyed-sha1 secret %s" %
-            (k.conf_key_id,
-                "".join("{:02x}".format(scapy.compat.orb(c)) for c in k2.key)),
+            "bfd key set conf-key-id %s type keyed-sha1 secret %s"
+            % (
+                k.conf_key_id,
+                "".join("{:02x}".format(scapy.compat.orb(c)) for c in k2.key),
+            ),
             "bfd key set: `bfd_auth_set_key' API call failed, "
             "bfd key set: `bfd_auth_set_key' API call failed, "
-            "rv=-103:BFD object in use")
+            "rv=-103:BFD object in use",
+        )
         # manipulating the session using old secret should still work
         bfd_session_up(self)
         bfd_session_down(self)
         self.vpp_session.remove_vpp_config()
         # manipulating the session using old secret should still work
         bfd_session_up(self)
         bfd_session_down(self)
         self.vpp_session.remove_vpp_config()
-        self.cli_verify_no_response(
-            "bfd key del conf-key-id %s" % k.conf_key_id)
+        self.cli_verify_no_response("bfd key del conf-key-id %s" % k.conf_key_id)
         self.assertFalse(k.query_vpp_config())
 
     def test_add_mod_del_bfd_udp(self):
         self.assertFalse(k.query_vpp_config())
 
     def test_add_mod_del_bfd_udp(self):
-        """ create/modify/delete IPv4 BFD UDP session """
-        vpp_session = VppBFDUDPSession(
-            self, self.pg0, self.pg0.remote_ip4)
+        """create/modify/delete IPv4 BFD UDP session"""
+        vpp_session = VppBFDUDPSession(self, self.pg0, self.pg0.remote_ip4)
         self.registry.register(vpp_session, self.logger)
         self.registry.register(vpp_session, self.logger)
-        cli_add_cmd = "bfd udp session add interface %s local-addr %s " \
-            "peer-addr %s desired-min-tx %s required-min-rx %s "\
-            "detect-mult %s" % (self.pg0.name, self.pg0.local_ip4,
-                                self.pg0.remote_ip4,
-                                vpp_session.desired_min_tx,
-                                vpp_session.required_min_rx,
-                                vpp_session.detect_mult)
+        cli_add_cmd = (
+            "bfd udp session add interface %s local-addr %s "
+            "peer-addr %s desired-min-tx %s required-min-rx %s "
+            "detect-mult %s"
+            % (
+                self.pg0.name,
+                self.pg0.local_ip4,
+                self.pg0.remote_ip4,
+                vpp_session.desired_min_tx,
+                vpp_session.required_min_rx,
+                vpp_session.detect_mult,
+            )
+        )
         self.cli_verify_no_response(cli_add_cmd)
         # 2nd add should fail
         self.cli_verify_response(
             cli_add_cmd,
             "bfd udp session add: `bfd_add_add_session' API call"
         self.cli_verify_no_response(cli_add_cmd)
         # 2nd add should fail
         self.cli_verify_response(
             cli_add_cmd,
             "bfd udp session add: `bfd_add_add_session' API call"
-            " failed, rv=-101:Duplicate BFD object")
+            " failed, rv=-101:Duplicate BFD object",
+        )
         verify_bfd_session_config(self, vpp_session)
         mod_session = VppBFDUDPSession(
         verify_bfd_session_config(self, vpp_session)
         mod_session = VppBFDUDPSession(
-            self, self.pg0, self.pg0.remote_ip4,
+            self,
+            self.pg0,
+            self.pg0.remote_ip4,
             required_min_rx=2 * vpp_session.required_min_rx,
             desired_min_tx=3 * vpp_session.desired_min_tx,
             required_min_rx=2 * vpp_session.required_min_rx,
             desired_min_tx=3 * vpp_session.desired_min_tx,
-            detect_mult=4 * vpp_session.detect_mult)
+            detect_mult=4 * vpp_session.detect_mult,
+        )
         self.cli_verify_no_response(
             "bfd udp session mod interface %s local-addr %s peer-addr %s "
         self.cli_verify_no_response(
             "bfd udp session mod interface %s local-addr %s peer-addr %s "
-            "desired-min-tx %s required-min-rx %s detect-mult %s" %
-            (self.pg0.name, self.pg0.local_ip4, self.pg0.remote_ip4,
-             mod_session.desired_min_tx, mod_session.required_min_rx,
-             mod_session.detect_mult))
+            "desired-min-tx %s required-min-rx %s detect-mult %s"
+            % (
+                self.pg0.name,
+                self.pg0.local_ip4,
+                self.pg0.remote_ip4,
+                mod_session.desired_min_tx,
+                mod_session.required_min_rx,
+                mod_session.detect_mult,
+            )
+        )
         verify_bfd_session_config(self, mod_session)
         verify_bfd_session_config(self, mod_session)
-        cli_del_cmd = "bfd udp session del interface %s local-addr %s "\
-            "peer-addr %s" % (self.pg0.name,
-                              self.pg0.local_ip4, self.pg0.remote_ip4)
+        cli_del_cmd = (
+            "bfd udp session del interface %s local-addr %s "
+            "peer-addr %s" % (self.pg0.name, self.pg0.local_ip4, self.pg0.remote_ip4)
+        )
         self.cli_verify_no_response(cli_del_cmd)
         # 2nd del is expected to fail
         self.cli_verify_response(
         self.cli_verify_no_response(cli_del_cmd)
         # 2nd del is expected to fail
         self.cli_verify_response(
-            cli_del_cmd, "bfd udp session del: `bfd_udp_del_session' API call"
-            " failed, rv=-102:No such BFD object")
+            cli_del_cmd,
+            "bfd udp session del: `bfd_udp_del_session' API call"
+            " failed, rv=-102:No such BFD object",
+        )
         self.assertFalse(vpp_session.query_vpp_config())
 
     def test_add_mod_del_bfd_udp6(self):
         self.assertFalse(vpp_session.query_vpp_config())
 
     def test_add_mod_del_bfd_udp6(self):
-        """ create/modify/delete IPv6 BFD UDP session """
-        vpp_session = VppBFDUDPSession(
-            self, self.pg0, self.pg0.remote_ip6, af=AF_INET6)
+        """create/modify/delete IPv6 BFD UDP session"""
+        vpp_session = VppBFDUDPSession(self, self.pg0, self.pg0.remote_ip6, af=AF_INET6)
         self.registry.register(vpp_session, self.logger)
         self.registry.register(vpp_session, self.logger)
-        cli_add_cmd = "bfd udp session add interface %s local-addr %s " \
-            "peer-addr %s desired-min-tx %s required-min-rx %s "\
-            "detect-mult %s" % (self.pg0.name, self.pg0.local_ip6,
-                                self.pg0.remote_ip6,
-                                vpp_session.desired_min_tx,
-                                vpp_session.required_min_rx,
-                                vpp_session.detect_mult)
+        cli_add_cmd = (
+            "bfd udp session add interface %s local-addr %s "
+            "peer-addr %s desired-min-tx %s required-min-rx %s "
+            "detect-mult %s"
+            % (
+                self.pg0.name,
+                self.pg0.local_ip6,
+                self.pg0.remote_ip6,
+                vpp_session.desired_min_tx,
+                vpp_session.required_min_rx,
+                vpp_session.detect_mult,
+            )
+        )
         self.cli_verify_no_response(cli_add_cmd)
         # 2nd add should fail
         self.cli_verify_response(
             cli_add_cmd,
             "bfd udp session add: `bfd_add_add_session' API call"
         self.cli_verify_no_response(cli_add_cmd)
         # 2nd add should fail
         self.cli_verify_response(
             cli_add_cmd,
             "bfd udp session add: `bfd_add_add_session' API call"
-            " failed, rv=-101:Duplicate BFD object")
+            " failed, rv=-101:Duplicate BFD object",
+        )
         verify_bfd_session_config(self, vpp_session)
         mod_session = VppBFDUDPSession(
         verify_bfd_session_config(self, vpp_session)
         mod_session = VppBFDUDPSession(
-            self, self.pg0, self.pg0.remote_ip6, af=AF_INET6,
+            self,
+            self.pg0,
+            self.pg0.remote_ip6,
+            af=AF_INET6,
             required_min_rx=2 * vpp_session.required_min_rx,
             desired_min_tx=3 * vpp_session.desired_min_tx,
             required_min_rx=2 * vpp_session.required_min_rx,
             desired_min_tx=3 * vpp_session.desired_min_tx,
-            detect_mult=4 * vpp_session.detect_mult)
+            detect_mult=4 * vpp_session.detect_mult,
+        )
         self.cli_verify_no_response(
             "bfd udp session mod interface %s local-addr %s peer-addr %s "
         self.cli_verify_no_response(
             "bfd udp session mod interface %s local-addr %s peer-addr %s "
-            "desired-min-tx %s required-min-rx %s detect-mult %s" %
-            (self.pg0.name, self.pg0.local_ip6, self.pg0.remote_ip6,
-             mod_session.desired_min_tx,
-             mod_session.required_min_rx, mod_session.detect_mult))
+            "desired-min-tx %s required-min-rx %s detect-mult %s"
+            % (
+                self.pg0.name,
+                self.pg0.local_ip6,
+                self.pg0.remote_ip6,
+                mod_session.desired_min_tx,
+                mod_session.required_min_rx,
+                mod_session.detect_mult,
+            )
+        )
         verify_bfd_session_config(self, mod_session)
         verify_bfd_session_config(self, mod_session)
-        cli_del_cmd = "bfd udp session del interface %s local-addr %s "\
-            "peer-addr %s" % (self.pg0.name,
-                              self.pg0.local_ip6, self.pg0.remote_ip6)
+        cli_del_cmd = (
+            "bfd udp session del interface %s local-addr %s "
+            "peer-addr %s" % (self.pg0.name, self.pg0.local_ip6, self.pg0.remote_ip6)
+        )
         self.cli_verify_no_response(cli_del_cmd)
         # 2nd del is expected to fail
         self.cli_verify_response(
             cli_del_cmd,
             "bfd udp session del: `bfd_udp_del_session' API call"
         self.cli_verify_no_response(cli_del_cmd)
         # 2nd del is expected to fail
         self.cli_verify_response(
             cli_del_cmd,
             "bfd udp session del: `bfd_udp_del_session' API call"
-            " failed, rv=-102:No such BFD object")
+            " failed, rv=-102:No such BFD object",
+        )
         self.assertFalse(vpp_session.query_vpp_config())
 
     def test_add_mod_del_bfd_udp_auth(self):
         self.assertFalse(vpp_session.query_vpp_config())
 
     def test_add_mod_del_bfd_udp_auth(self):
-        """ create/modify/delete IPv4 BFD UDP session (authenticated) """
+        """create/modify/delete IPv4 BFD UDP session (authenticated)"""
         key = self.factory.create_random_key(self)
         key.add_vpp_config()
         vpp_session = VppBFDUDPSession(
         key = self.factory.create_random_key(self)
         key.add_vpp_config()
         vpp_session = VppBFDUDPSession(
-            self, self.pg0, self.pg0.remote_ip4, sha1_key=key)
+            self, self.pg0, self.pg0.remote_ip4, sha1_key=key
+        )
         self.registry.register(vpp_session, self.logger)
         self.registry.register(vpp_session, self.logger)
-        cli_add_cmd = "bfd udp session add interface %s local-addr %s " \
-            "peer-addr %s desired-min-tx %s required-min-rx %s "\
-            "detect-mult %s conf-key-id %s bfd-key-id %s"\
-            % (self.pg0.name, self.pg0.local_ip4, self.pg0.remote_ip4,
-               vpp_session.desired_min_tx, vpp_session.required_min_rx,
-               vpp_session.detect_mult, key.conf_key_id,
-               vpp_session.bfd_key_id)
+        cli_add_cmd = (
+            "bfd udp session add interface %s local-addr %s "
+            "peer-addr %s desired-min-tx %s required-min-rx %s "
+            "detect-mult %s conf-key-id %s bfd-key-id %s"
+            % (
+                self.pg0.name,
+                self.pg0.local_ip4,
+                self.pg0.remote_ip4,
+                vpp_session.desired_min_tx,
+                vpp_session.required_min_rx,
+                vpp_session.detect_mult,
+                key.conf_key_id,
+                vpp_session.bfd_key_id,
+            )
+        )
         self.cli_verify_no_response(cli_add_cmd)
         # 2nd add should fail
         self.cli_verify_response(
             cli_add_cmd,
             "bfd udp session add: `bfd_add_add_session' API call"
         self.cli_verify_no_response(cli_add_cmd)
         # 2nd add should fail
         self.cli_verify_response(
             cli_add_cmd,
             "bfd udp session add: `bfd_add_add_session' API call"
-            " failed, rv=-101:Duplicate BFD object")
+            " failed, rv=-101:Duplicate BFD object",
+        )
         verify_bfd_session_config(self, vpp_session)
         mod_session = VppBFDUDPSession(
         verify_bfd_session_config(self, vpp_session)
         mod_session = VppBFDUDPSession(
-            self, self.pg0, self.pg0.remote_ip4, sha1_key=key,
+            self,
+            self.pg0,
+            self.pg0.remote_ip4,
+            sha1_key=key,
             bfd_key_id=vpp_session.bfd_key_id,
             required_min_rx=2 * vpp_session.required_min_rx,
             desired_min_tx=3 * vpp_session.desired_min_tx,
             bfd_key_id=vpp_session.bfd_key_id,
             required_min_rx=2 * vpp_session.required_min_rx,
             desired_min_tx=3 * vpp_session.desired_min_tx,
-            detect_mult=4 * vpp_session.detect_mult)
+            detect_mult=4 * vpp_session.detect_mult,
+        )
         self.cli_verify_no_response(
             "bfd udp session mod interface %s local-addr %s peer-addr %s "
         self.cli_verify_no_response(
             "bfd udp session mod interface %s local-addr %s peer-addr %s "
-            "desired-min-tx %s required-min-rx %s detect-mult %s" %
-            (self.pg0.name, self.pg0.local_ip4, self.pg0.remote_ip4,
-             mod_session.desired_min_tx,
-             mod_session.required_min_rx, mod_session.detect_mult))
+            "desired-min-tx %s required-min-rx %s detect-mult %s"
+            % (
+                self.pg0.name,
+                self.pg0.local_ip4,
+                self.pg0.remote_ip4,
+                mod_session.desired_min_tx,
+                mod_session.required_min_rx,
+                mod_session.detect_mult,
+            )
+        )
         verify_bfd_session_config(self, mod_session)
         verify_bfd_session_config(self, mod_session)
-        cli_del_cmd = "bfd udp session del interface %s local-addr %s "\
-            "peer-addr %s" % (self.pg0.name,
-                              self.pg0.local_ip4, self.pg0.remote_ip4)
+        cli_del_cmd = (
+            "bfd udp session del interface %s local-addr %s "
+            "peer-addr %s" % (self.pg0.name, self.pg0.local_ip4, self.pg0.remote_ip4)
+        )
         self.cli_verify_no_response(cli_del_cmd)
         # 2nd del is expected to fail
         self.cli_verify_response(
             cli_del_cmd,
             "bfd udp session del: `bfd_udp_del_session' API call"
         self.cli_verify_no_response(cli_del_cmd)
         # 2nd del is expected to fail
         self.cli_verify_response(
             cli_del_cmd,
             "bfd udp session del: `bfd_udp_del_session' API call"
-            " failed, rv=-102:No such BFD object")
+            " failed, rv=-102:No such BFD object",
+        )
         self.assertFalse(vpp_session.query_vpp_config())
 
     def test_add_mod_del_bfd_udp6_auth(self):
         self.assertFalse(vpp_session.query_vpp_config())
 
     def test_add_mod_del_bfd_udp6_auth(self):
-        """ create/modify/delete IPv6 BFD UDP session (authenticated) """
+        """create/modify/delete IPv6 BFD UDP session (authenticated)"""
         key = self.factory.create_random_key(
         key = self.factory.create_random_key(
-            self, auth_type=BFDAuthType.meticulous_keyed_sha1)
+            self, auth_type=BFDAuthType.meticulous_keyed_sha1
+        )
         key.add_vpp_config()
         vpp_session = VppBFDUDPSession(
         key.add_vpp_config()
         vpp_session = VppBFDUDPSession(
-            self, self.pg0, self.pg0.remote_ip6, af=AF_INET6, sha1_key=key)
+            self, self.pg0, self.pg0.remote_ip6, af=AF_INET6, sha1_key=key
+        )
         self.registry.register(vpp_session, self.logger)
         self.registry.register(vpp_session, self.logger)
-        cli_add_cmd = "bfd udp session add interface %s local-addr %s " \
-            "peer-addr %s desired-min-tx %s required-min-rx %s "\
-            "detect-mult %s conf-key-id %s bfd-key-id %s" \
-            % (self.pg0.name, self.pg0.local_ip6, self.pg0.remote_ip6,
-               vpp_session.desired_min_tx, vpp_session.required_min_rx,
-               vpp_session.detect_mult, key.conf_key_id,
-               vpp_session.bfd_key_id)
+        cli_add_cmd = (
+            "bfd udp session add interface %s local-addr %s "
+            "peer-addr %s desired-min-tx %s required-min-rx %s "
+            "detect-mult %s conf-key-id %s bfd-key-id %s"
+            % (
+                self.pg0.name,
+                self.pg0.local_ip6,
+                self.pg0.remote_ip6,
+                vpp_session.desired_min_tx,
+                vpp_session.required_min_rx,
+                vpp_session.detect_mult,
+                key.conf_key_id,
+                vpp_session.bfd_key_id,
+            )
+        )
         self.cli_verify_no_response(cli_add_cmd)
         # 2nd add should fail
         self.cli_verify_response(
             cli_add_cmd,
             "bfd udp session add: `bfd_add_add_session' API call"
         self.cli_verify_no_response(cli_add_cmd)
         # 2nd add should fail
         self.cli_verify_response(
             cli_add_cmd,
             "bfd udp session add: `bfd_add_add_session' API call"
-            " failed, rv=-101:Duplicate BFD object")
+            " failed, rv=-101:Duplicate BFD object",
+        )
         verify_bfd_session_config(self, vpp_session)
         mod_session = VppBFDUDPSession(
         verify_bfd_session_config(self, vpp_session)
         mod_session = VppBFDUDPSession(
-            self, self.pg0, self.pg0.remote_ip6, af=AF_INET6, sha1_key=key,
+            self,
+            self.pg0,
+            self.pg0.remote_ip6,
+            af=AF_INET6,
+            sha1_key=key,
             bfd_key_id=vpp_session.bfd_key_id,
             required_min_rx=2 * vpp_session.required_min_rx,
             desired_min_tx=3 * vpp_session.desired_min_tx,
             bfd_key_id=vpp_session.bfd_key_id,
             required_min_rx=2 * vpp_session.required_min_rx,
             desired_min_tx=3 * vpp_session.desired_min_tx,
-            detect_mult=4 * vpp_session.detect_mult)
+            detect_mult=4 * vpp_session.detect_mult,
+        )
         self.cli_verify_no_response(
             "bfd udp session mod interface %s local-addr %s peer-addr %s "
         self.cli_verify_no_response(
             "bfd udp session mod interface %s local-addr %s peer-addr %s "
-            "desired-min-tx %s required-min-rx %s detect-mult %s" %
-            (self.pg0.name, self.pg0.local_ip6, self.pg0.remote_ip6,
-             mod_session.desired_min_tx,
-             mod_session.required_min_rx, mod_session.detect_mult))
+            "desired-min-tx %s required-min-rx %s detect-mult %s"
+            % (
+                self.pg0.name,
+                self.pg0.local_ip6,
+                self.pg0.remote_ip6,
+                mod_session.desired_min_tx,
+                mod_session.required_min_rx,
+                mod_session.detect_mult,
+            )
+        )
         verify_bfd_session_config(self, mod_session)
         verify_bfd_session_config(self, mod_session)
-        cli_del_cmd = "bfd udp session del interface %s local-addr %s "\
-            "peer-addr %s" % (self.pg0.name,
-                              self.pg0.local_ip6, self.pg0.remote_ip6)
+        cli_del_cmd = (
+            "bfd udp session del interface %s local-addr %s "
+            "peer-addr %s" % (self.pg0.name, self.pg0.local_ip6, self.pg0.remote_ip6)
+        )
         self.cli_verify_no_response(cli_del_cmd)
         # 2nd del is expected to fail
         self.cli_verify_response(
             cli_del_cmd,
             "bfd udp session del: `bfd_udp_del_session' API call"
         self.cli_verify_no_response(cli_del_cmd)
         # 2nd del is expected to fail
         self.cli_verify_response(
             cli_del_cmd,
             "bfd udp session del: `bfd_udp_del_session' API call"
-            " failed, rv=-102:No such BFD object")
+            " failed, rv=-102:No such BFD object",
+        )
         self.assertFalse(vpp_session.query_vpp_config())
 
     def test_auth_on_off(self):
         self.assertFalse(vpp_session.query_vpp_config())
 
     def test_auth_on_off(self):
-        """ turn authentication on and off """
+        """turn authentication on and off"""
         key = self.factory.create_random_key(
         key = self.factory.create_random_key(
-            self, auth_type=BFDAuthType.meticulous_keyed_sha1)
+            self, auth_type=BFDAuthType.meticulous_keyed_sha1
+        )
         key.add_vpp_config()
         session = VppBFDUDPSession(self, self.pg0, self.pg0.remote_ip4)
         key.add_vpp_config()
         session = VppBFDUDPSession(self, self.pg0, self.pg0.remote_ip4)
-        auth_session = VppBFDUDPSession(self, self.pg0, self.pg0.remote_ip4,
-                                        sha1_key=key)
+        auth_session = VppBFDUDPSession(
+            self, self.pg0, self.pg0.remote_ip4, sha1_key=key
+        )
         session.add_vpp_config()
         session.add_vpp_config()
-        cli_activate = \
-            "bfd udp session auth activate interface %s local-addr %s "\
-            "peer-addr %s conf-key-id %s bfd-key-id %s"\
-            % (self.pg0.name, self.pg0.local_ip4, self.pg0.remote_ip4,
-               key.conf_key_id, auth_session.bfd_key_id)
+        cli_activate = (
+            "bfd udp session auth activate interface %s local-addr %s "
+            "peer-addr %s conf-key-id %s bfd-key-id %s"
+            % (
+                self.pg0.name,
+                self.pg0.local_ip4,
+                self.pg0.remote_ip4,
+                key.conf_key_id,
+                auth_session.bfd_key_id,
+            )
+        )
         self.cli_verify_no_response(cli_activate)
         verify_bfd_session_config(self, auth_session)
         self.cli_verify_no_response(cli_activate)
         verify_bfd_session_config(self, auth_session)
         self.cli_verify_no_response(cli_activate)
         verify_bfd_session_config(self, auth_session)
         self.cli_verify_no_response(cli_activate)
         verify_bfd_session_config(self, auth_session)
-        cli_deactivate = \
-            "bfd udp session auth deactivate interface %s local-addr %s "\
-            "peer-addr %s "\
-            % (self.pg0.name, self.pg0.local_ip4, self.pg0.remote_ip4)
+        cli_deactivate = (
+            "bfd udp session auth deactivate interface %s local-addr %s "
+            "peer-addr %s " % (self.pg0.name, self.pg0.local_ip4, self.pg0.remote_ip4)
+        )
         self.cli_verify_no_response(cli_deactivate)
         verify_bfd_session_config(self, session)
         self.cli_verify_no_response(cli_deactivate)
         verify_bfd_session_config(self, session)
 
     def test_auth_on_off_delayed(self):
         self.cli_verify_no_response(cli_deactivate)
         verify_bfd_session_config(self, session)
         self.cli_verify_no_response(cli_deactivate)
         verify_bfd_session_config(self, session)
 
     def test_auth_on_off_delayed(self):
-        """ turn authentication on and off (delayed) """
+        """turn authentication on and off (delayed)"""
         key = self.factory.create_random_key(
         key = self.factory.create_random_key(
-            self, auth_type=BFDAuthType.meticulous_keyed_sha1)
+            self, auth_type=BFDAuthType.meticulous_keyed_sha1
+        )
         key.add_vpp_config()
         session = VppBFDUDPSession(self, self.pg0, self.pg0.remote_ip4)
         key.add_vpp_config()
         session = VppBFDUDPSession(self, self.pg0, self.pg0.remote_ip4)
-        auth_session = VppBFDUDPSession(self, self.pg0, self.pg0.remote_ip4,
-                                        sha1_key=key)
+        auth_session = VppBFDUDPSession(
+            self, self.pg0, self.pg0.remote_ip4, sha1_key=key
+        )
         session.add_vpp_config()
         session.add_vpp_config()
-        cli_activate = \
-            "bfd udp session auth activate interface %s local-addr %s "\
-            "peer-addr %s conf-key-id %s bfd-key-id %s delayed yes"\
-            % (self.pg0.name, self.pg0.local_ip4, self.pg0.remote_ip4,
-               key.conf_key_id, auth_session.bfd_key_id)
+        cli_activate = (
+            "bfd udp session auth activate interface %s local-addr %s "
+            "peer-addr %s conf-key-id %s bfd-key-id %s delayed yes"
+            % (
+                self.pg0.name,
+                self.pg0.local_ip4,
+                self.pg0.remote_ip4,
+                key.conf_key_id,
+                auth_session.bfd_key_id,
+            )
+        )
         self.cli_verify_no_response(cli_activate)
         verify_bfd_session_config(self, auth_session)
         self.cli_verify_no_response(cli_activate)
         verify_bfd_session_config(self, auth_session)
         self.cli_verify_no_response(cli_activate)
         verify_bfd_session_config(self, auth_session)
         self.cli_verify_no_response(cli_activate)
         verify_bfd_session_config(self, auth_session)
-        cli_deactivate = \
-            "bfd udp session auth deactivate interface %s local-addr %s "\
-            "peer-addr %s delayed yes"\
+        cli_deactivate = (
+            "bfd udp session auth deactivate interface %s local-addr %s "
+            "peer-addr %s delayed yes"
             % (self.pg0.name, self.pg0.local_ip4, self.pg0.remote_ip4)
             % (self.pg0.name, self.pg0.local_ip4, self.pg0.remote_ip4)
+        )
         self.cli_verify_no_response(cli_deactivate)
         verify_bfd_session_config(self, session)
         self.cli_verify_no_response(cli_deactivate)
         verify_bfd_session_config(self, session)
 
     def test_admin_up_down(self):
         self.cli_verify_no_response(cli_deactivate)
         verify_bfd_session_config(self, session)
         self.cli_verify_no_response(cli_deactivate)
         verify_bfd_session_config(self, session)
 
     def test_admin_up_down(self):
-        """ put session admin-up and admin-down """
+        """put session admin-up and admin-down"""
         session = VppBFDUDPSession(self, self.pg0, self.pg0.remote_ip4)
         session.add_vpp_config()
         session = VppBFDUDPSession(self, self.pg0, self.pg0.remote_ip4)
         session.add_vpp_config()
-        cli_down = \
-            "bfd udp session set-flags admin down interface %s local-addr %s "\
-            "peer-addr %s "\
-            % (self.pg0.name, self.pg0.local_ip4, self.pg0.remote_ip4)
-        cli_up = \
-            "bfd udp session set-flags admin up interface %s local-addr %s "\
-            "peer-addr %s "\
-            % (self.pg0.name, self.pg0.local_ip4, self.pg0.remote_ip4)
+        cli_down = (
+            "bfd udp session set-flags admin down interface %s local-addr %s "
+            "peer-addr %s " % (self.pg0.name, self.pg0.local_ip4, self.pg0.remote_ip4)
+        )
+        cli_up = (
+            "bfd udp session set-flags admin up interface %s local-addr %s "
+            "peer-addr %s " % (self.pg0.name, self.pg0.local_ip4, self.pg0.remote_ip4)
+        )
         self.cli_verify_no_response(cli_down)
         verify_bfd_session_config(self, session, state=BFDState.admin_down)
         self.cli_verify_no_response(cli_up)
         verify_bfd_session_config(self, session, state=BFDState.down)
 
     def test_set_del_udp_echo_source(self):
         self.cli_verify_no_response(cli_down)
         verify_bfd_session_config(self, session, state=BFDState.admin_down)
         self.cli_verify_no_response(cli_up)
         verify_bfd_session_config(self, session, state=BFDState.down)
 
     def test_set_del_udp_echo_source(self):
-        """ set/del udp echo source """
+        """set/del udp echo source"""
         self.create_loopback_interfaces(1)
         self.loopback0 = self.lo_interfaces[0]
         self.loopback0.admin_up()
         self.create_loopback_interfaces(1)
         self.loopback0 = self.lo_interfaces[0]
         self.loopback0.admin_up()
-        self.cli_verify_response("show bfd echo-source",
-                                 "UDP echo source is not set.")
+        self.cli_verify_response("show bfd echo-source", "UDP echo source is not set.")
         cli_set = "bfd udp echo-source set interface %s" % self.loopback0.name
         self.cli_verify_no_response(cli_set)
         cli_set = "bfd udp echo-source set interface %s" % self.loopback0.name
         self.cli_verify_no_response(cli_set)
-        self.cli_verify_response("show bfd echo-source",
-                                 "UDP echo source is: %s\n"
-                                 "IPv4 address usable as echo source: none\n"
-                                 "IPv6 address usable as echo source: none" %
-                                 self.loopback0.name)
+        self.cli_verify_response(
+            "show bfd echo-source",
+            "UDP echo source is: %s\n"
+            "IPv4 address usable as echo source: none\n"
+            "IPv6 address usable as echo source: none" % self.loopback0.name,
+        )
         self.loopback0.config_ip4()
         self.loopback0.config_ip4()
-        echo_ip4 = str(ipaddress.IPv4Address(int(ipaddress.IPv4Address(
-            self.loopback0.local_ip4)) ^ 1))
-        self.cli_verify_response("show bfd echo-source",
-                                 "UDP echo source is: %s\n"
-                                 "IPv4 address usable as echo source: %s\n"
-                                 "IPv6 address usable as echo source: none" %
-                                 (self.loopback0.name, echo_ip4))
-        echo_ip6 = str(ipaddress.IPv6Address(int(ipaddress.IPv6Address(
-            self.loopback0.local_ip6)) ^ 1))
+        echo_ip4 = str(
+            ipaddress.IPv4Address(
+                int(ipaddress.IPv4Address(self.loopback0.local_ip4)) ^ 1
+            )
+        )
+        self.cli_verify_response(
+            "show bfd echo-source",
+            "UDP echo source is: %s\n"
+            "IPv4 address usable as echo source: %s\n"
+            "IPv6 address usable as echo source: none"
+            % (self.loopback0.name, echo_ip4),
+        )
+        echo_ip6 = str(
+            ipaddress.IPv6Address(
+                int(ipaddress.IPv6Address(self.loopback0.local_ip6)) ^ 1
+            )
+        )
         self.loopback0.config_ip6()
         self.loopback0.config_ip6()
-        self.cli_verify_response("show bfd echo-source",
-                                 "UDP echo source is: %s\n"
-                                 "IPv4 address usable as echo source: %s\n"
-                                 "IPv6 address usable as echo source: %s" %
-                                 (self.loopback0.name, echo_ip4, echo_ip6))
+        self.cli_verify_response(
+            "show bfd echo-source",
+            "UDP echo source is: %s\n"
+            "IPv4 address usable as echo source: %s\n"
+            "IPv6 address usable as echo source: %s"
+            % (self.loopback0.name, echo_ip4, echo_ip6),
+        )
         cli_del = "bfd udp echo-source del"
         self.cli_verify_no_response(cli_del)
         cli_del = "bfd udp echo-source del"
         self.cli_verify_no_response(cli_del)
-        self.cli_verify_response("show bfd echo-source",
-                                 "UDP echo source is not set.")
+        self.cli_verify_response("show bfd echo-source", "UDP echo source is not set.")
 
 
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index 7dd6a30..f58449e 100644 (file)
@@ -5,12 +5,27 @@ import unittest
 from config import config
 from framework import VppTestCase, VppTestRunner
 from vpp_ip import DpoProto
 from config import config
 from framework import VppTestCase, VppTestRunner
 from vpp_ip import DpoProto
-from vpp_ip_route import VppIpRoute, VppRoutePath, \
-    VppMplsTable, VppIpMRoute, VppMRoutePath, VppIpTable, \
-    MPLS_LABEL_INVALID, \
-    VppMplsLabel, FibPathProto, FibPathType
-from vpp_bier import BIER_HDR_PAYLOAD, VppBierImp, VppBierDispEntry, \
-    VppBierDispTable, VppBierTable, VppBierTableID, VppBierRoute
+from vpp_ip_route import (
+    VppIpRoute,
+    VppRoutePath,
+    VppMplsTable,
+    VppIpMRoute,
+    VppMRoutePath,
+    VppIpTable,
+    MPLS_LABEL_INVALID,
+    VppMplsLabel,
+    FibPathProto,
+    FibPathType,
+)
+from vpp_bier import (
+    BIER_HDR_PAYLOAD,
+    VppBierImp,
+    VppBierDispEntry,
+    VppBierDispTable,
+    VppBierTable,
+    VppBierTableID,
+    VppBierRoute,
+)
 from vpp_udp_encap import VppUdpEncap
 from vpp_papi import VppEnum
 
 from vpp_udp_encap import VppUdpEncap
 from vpp_papi import VppEnum
 
@@ -26,10 +41,10 @@ NUM_PKTS = 67
 
 
 class TestBFIB(VppTestCase):
 
 
 class TestBFIB(VppTestCase):
-    """ BIER FIB Test Case """
+    """BIER FIB Test Case"""
 
     def test_bfib(self):
 
     def test_bfib(self):
-        """ BFIB Unit Tests """
+        """BFIB Unit Tests"""
         error = self.vapi.cli("test bier")
 
         if error:
         error = self.vapi.cli("test bier")
 
         if error:
@@ -38,7 +53,7 @@ class TestBFIB(VppTestCase):
 
 
 class TestBier(VppTestCase):
 
 
 class TestBier(VppTestCase):
-    """ BIER Test Case """
+    """BIER Test Case"""
 
     def setUp(self):
         super(TestBier, self).setUp()
 
     def setUp(self):
         super(TestBier, self).setUp()
@@ -86,16 +101,17 @@ class TestBier(VppTestCase):
         #
         # A packet with no bits set gets dropped
         #
         #
         # A packet with no bits set gets dropped
         #
-        p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-             MPLS(label=77, ttl=255) /
-             BIER(length=hdr_len_id) /
-             IPv6(src=self.pg0.remote_ip6, dst=self.pg0.remote_ip6) /
-             UDP(sport=1234, dport=1234) /
-             Raw())
+        p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / MPLS(label=77, ttl=255)
+            / BIER(length=hdr_len_id)
+            / IPv6(src=self.pg0.remote_ip6, dst=self.pg0.remote_ip6)
+            / UDP(sport=1234, dport=1234)
+            / Raw()
+        )
         pkts = [p]
 
         pkts = [p]
 
-        self.send_and_assert_no_replies(self.pg0, pkts,
-                                        "Empty Bit-String")
+        self.send_and_assert_no_replies(self.pg0, pkts, "Empty Bit-String")
 
         #
         # Add a BIER route for each bit-position in the table via a different
 
         #
         # Add a BIER route for each bit-position in the table via a different
@@ -104,19 +120,32 @@ class TestBier(VppTestCase):
         #
         nh_routes = []
         bier_routes = []
         #
         nh_routes = []
         bier_routes = []
-        for i in range(1, max_bp+1):
+        for i in range(1, max_bp + 1):
             nh = "10.0.%d.%d" % (i / 255, i % 255)
             nh_routes.append(
             nh = "10.0.%d.%d" % (i / 255, i % 255)
             nh_routes.append(
-                VppIpRoute(self, nh, 32,
-                           [VppRoutePath(self.pg1.remote_ip4,
-                                         self.pg1.sw_if_index,
-                                         labels=[VppMplsLabel(2000+i)])]))
+                VppIpRoute(
+                    self,
+                    nh,
+                    32,
+                    [
+                        VppRoutePath(
+                            self.pg1.remote_ip4,
+                            self.pg1.sw_if_index,
+                            labels=[VppMplsLabel(2000 + i)],
+                        )
+                    ],
+                )
+            )
             nh_routes[-1].add_vpp_config()
 
             bier_routes.append(
             nh_routes[-1].add_vpp_config()
 
             bier_routes.append(
-                VppBierRoute(self, bti, i,
-                             [VppRoutePath(nh, 0xffffffff,
-                                           labels=[VppMplsLabel(100+i)])]))
+                VppBierRoute(
+                    self,
+                    bti,
+                    i,
+                    [VppRoutePath(nh, 0xFFFFFFFF, labels=[VppMplsLabel(100 + i)])],
+                )
+            )
             bier_routes[-1].add_vpp_config()
 
         #
             bier_routes[-1].add_vpp_config()
 
         #
@@ -125,13 +154,14 @@ class TestBier(VppTestCase):
         pkt_sizes = [64, 1400]
 
         for pkt_size in pkt_sizes:
         pkt_sizes = [64, 1400]
 
         for pkt_size in pkt_sizes:
-            p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-                 MPLS(label=77, ttl=255) /
-                 BIER(length=hdr_len_id,
-                      BitString=scapy.compat.chb(255)*n_bytes) /
-                 IPv6(src=self.pg0.remote_ip6, dst=self.pg0.remote_ip6) /
-                 UDP(sport=1234, dport=1234) /
-                 Raw(scapy.compat.chb(5) * pkt_size))
+            p = (
+                Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+                / MPLS(label=77, ttl=255)
+                / BIER(length=hdr_len_id, BitString=scapy.compat.chb(255) * n_bytes)
+                / IPv6(src=self.pg0.remote_ip6, dst=self.pg0.remote_ip6)
+                / UDP(sport=1234, dport=1234)
+                / Raw(scapy.compat.chb(5) * pkt_size)
+            )
             pkts = p
 
             self.pg0.add_stream(pkts)
             pkts = p
 
             self.pg0.add_stream(pkts)
@@ -150,7 +180,7 @@ class TestBier(VppTestCase):
                 bp = olabel.label - 2000
 
                 blabel = olabel[MPLS].payload
                 bp = olabel.label - 2000
 
                 blabel = olabel[MPLS].payload
-                self.assertEqual(blabel.label, 100+bp)
+                self.assertEqual(blabel.label, 100 + bp)
                 self.assertEqual(blabel.ttl, 254)
 
                 bier_hdr = blabel[MPLS].payload
                 self.assertEqual(blabel.ttl, 254)
 
                 bier_hdr = blabel[MPLS].payload
@@ -165,11 +195,11 @@ class TestBier(VppTestCase):
                 self.assertEqual(bier_hdr.Proto, 5)
 
                 # The bit-string should consist only of the BP given by i.
                 self.assertEqual(bier_hdr.Proto, 5)
 
                 # The bit-string should consist only of the BP given by i.
-                byte_array = [b'\0'] * (n_bytes)
+                byte_array = [b"\0"] * (n_bytes)
                 byte_val = scapy.compat.chb(1 << (bp - 1) % 8)
                 byte_pos = n_bytes - (((bp - 1) // 8) + 1)
                 byte_array[byte_pos] = byte_val
                 byte_val = scapy.compat.chb(1 << (bp - 1) % 8)
                 byte_pos = n_bytes - (((bp - 1) // 8) + 1)
                 byte_array[byte_pos] = byte_val
-                bitstring = b''.join(byte_array)
+                bitstring = b"".join(byte_array)
 
                 self.assertEqual(len(bitstring), len(bier_hdr.BitString))
                 self.assertEqual(bitstring, bier_hdr.BitString)
 
                 self.assertEqual(len(bitstring), len(bier_hdr.BitString))
                 self.assertEqual(bitstring, bier_hdr.BitString)
@@ -223,39 +253,55 @@ class TestBier(VppTestCase):
         #
         pkts = []
         for ii in range(257):
         #
         pkts = []
         for ii in range(257):
-            pkts.append((Ether(dst=self.pg0.local_mac,
-                               src=self.pg0.remote_mac) /
-                         MPLS(label=77, ttl=255) /
-                         BIER(length=BIERLength.BIER_LEN_64,
-                              entropy=ii,
-                              BitString=scapy.compat.chb(255)*16) /
-                         IPv6(src=self.pg0.remote_ip6,
-                              dst=self.pg0.remote_ip6) /
-                         UDP(sport=1234, dport=1234) /
-                         Raw()))
+            pkts.append(
+                (
+                    Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+                    / MPLS(label=77, ttl=255)
+                    / BIER(
+                        length=BIERLength.BIER_LEN_64,
+                        entropy=ii,
+                        BitString=scapy.compat.chb(255) * 16,
+                    )
+                    / IPv6(src=self.pg0.remote_ip6, dst=self.pg0.remote_ip6)
+                    / UDP(sport=1234, dport=1234)
+                    / Raw()
+                )
+            )
 
         #
         # 4 next hops
         #
 
         #
         # 4 next hops
         #
-        nhs = [{'ip': "10.0.0.1", 'label': 201},
-               {'ip': "10.0.0.2", 'label': 202},
-               {'ip': "10.0.0.3", 'label': 203},
-               {'ip': "10.0.0.4", 'label': 204}]
+        nhs = [
+            {"ip": "10.0.0.1", "label": 201},
+            {"ip": "10.0.0.2", "label": 202},
+            {"ip": "10.0.0.3", "label": 203},
+            {"ip": "10.0.0.4", "label": 204},
+        ]
 
         for nh in nhs:
             ipr = VppIpRoute(
 
         for nh in nhs:
             ipr = VppIpRoute(
-                self, nh['ip'], 32,
-                [VppRoutePath(self.pg1.remote_ip4,
-                              self.pg1.sw_if_index,
-                              labels=[VppMplsLabel(nh['label'])])])
+                self,
+                nh["ip"],
+                32,
+                [
+                    VppRoutePath(
+                        self.pg1.remote_ip4,
+                        self.pg1.sw_if_index,
+                        labels=[VppMplsLabel(nh["label"])],
+                    )
+                ],
+            )
             ipr.add_vpp_config()
 
         bier_route = VppBierRoute(
             ipr.add_vpp_config()
 
         bier_route = VppBierRoute(
-            self, bti, 1,
-            [VppRoutePath(nhs[0]['ip'], 0xffffffff,
-                          labels=[VppMplsLabel(101)]),
-             VppRoutePath(nhs[1]['ip'], 0xffffffff,
-                          labels=[VppMplsLabel(101)])])
+            self,
+            bti,
+            1,
+            [
+                VppRoutePath(nhs[0]["ip"], 0xFFFFFFFF, labels=[VppMplsLabel(101)]),
+                VppRoutePath(nhs[1]["ip"], 0xFFFFFFFF, labels=[VppMplsLabel(101)]),
+            ],
+        )
         bier_route.add_vpp_config()
 
         rx = self.send_and_expect(self.pg0, pkts, self.pg1)
         bier_route.add_vpp_config()
 
         rx = self.send_and_expect(self.pg0, pkts, self.pg1)
@@ -264,37 +310,38 @@ class TestBier(VppTestCase):
         # we should have recieved a packet from each neighbor
         #
         for nh in nhs[:2]:
         # we should have recieved a packet from each neighbor
         #
         for nh in nhs[:2]:
-            self.assertTrue(sum(p[MPLS].label == nh['label'] for p in rx))
+            self.assertTrue(sum(p[MPLS].label == nh["label"] for p in rx))
 
         #
         # add the other paths
         #
         bier_route.update_paths(
 
         #
         # add the other paths
         #
         bier_route.update_paths(
-            [VppRoutePath(nhs[0]['ip'], 0xffffffff,
-                          labels=[VppMplsLabel(101)]),
-             VppRoutePath(nhs[1]['ip'], 0xffffffff,
-                          labels=[VppMplsLabel(101)]),
-             VppRoutePath(nhs[2]['ip'], 0xffffffff,
-                          labels=[VppMplsLabel(101)]),
-             VppRoutePath(nhs[3]['ip'], 0xffffffff,
-                          labels=[VppMplsLabel(101)])])
+            [
+                VppRoutePath(nhs[0]["ip"], 0xFFFFFFFF, labels=[VppMplsLabel(101)]),
+                VppRoutePath(nhs[1]["ip"], 0xFFFFFFFF, labels=[VppMplsLabel(101)]),
+                VppRoutePath(nhs[2]["ip"], 0xFFFFFFFF, labels=[VppMplsLabel(101)]),
+                VppRoutePath(nhs[3]["ip"], 0xFFFFFFFF, labels=[VppMplsLabel(101)]),
+            ]
+        )
 
         rx = self.send_and_expect(self.pg0, pkts, self.pg1)
 
         for nh in nhs:
 
         rx = self.send_and_expect(self.pg0, pkts, self.pg1)
 
         for nh in nhs:
-            self.assertTrue(sum(p[MPLS].label == nh['label'] for p in rx))
+            self.assertTrue(sum(p[MPLS].label == nh["label"] for p in rx))
 
         #
         # remove first two paths
         #
 
         #
         # remove first two paths
         #
-        bier_route.remove_path(VppRoutePath(nhs[0]['ip'], 0xffffffff,
-                                            labels=[VppMplsLabel(101)]))
-        bier_route.remove_path(VppRoutePath(nhs[1]['ip'], 0xffffffff,
-                                            labels=[VppMplsLabel(101)]))
+        bier_route.remove_path(
+            VppRoutePath(nhs[0]["ip"], 0xFFFFFFFF, labels=[VppMplsLabel(101)])
+        )
+        bier_route.remove_path(
+            VppRoutePath(nhs[1]["ip"], 0xFFFFFFFF, labels=[VppMplsLabel(101)])
+        )
 
         rx = self.send_and_expect(self.pg0, pkts, self.pg1)
         for nh in nhs[2:]:
 
         rx = self.send_and_expect(self.pg0, pkts, self.pg1)
         for nh in nhs[2:]:
-            self.assertTrue(sum(p[MPLS].label == nh['label'] for p in rx))
+            self.assertTrue(sum(p[MPLS].label == nh["label"] for p in rx))
 
         #
         # remove the last of the paths, deleteing the entry
 
         #
         # remove the last of the paths, deleteing the entry
@@ -321,23 +368,39 @@ class TestBier(VppTestCase):
         #
         nh1 = "10.0.0.1"
         nh2 = "10.0.0.2"
         #
         nh1 = "10.0.0.1"
         nh2 = "10.0.0.2"
-        ip_route_1 = VppIpRoute(self, nh1, 32,
-                                [VppRoutePath(self.pg1.remote_ip4,
-                                              self.pg1.sw_if_index,
-                                              labels=[VppMplsLabel(2001)])])
-        ip_route_2 = VppIpRoute(self, nh2, 32,
-                                [VppRoutePath(self.pg1.remote_ip4,
-                                              self.pg1.sw_if_index,
-                                              labels=[VppMplsLabel(2002)])])
+        ip_route_1 = VppIpRoute(
+            self,
+            nh1,
+            32,
+            [
+                VppRoutePath(
+                    self.pg1.remote_ip4,
+                    self.pg1.sw_if_index,
+                    labels=[VppMplsLabel(2001)],
+                )
+            ],
+        )
+        ip_route_2 = VppIpRoute(
+            self,
+            nh2,
+            32,
+            [
+                VppRoutePath(
+                    self.pg1.remote_ip4,
+                    self.pg1.sw_if_index,
+                    labels=[VppMplsLabel(2002)],
+                )
+            ],
+        )
         ip_route_1.add_vpp_config()
         ip_route_2.add_vpp_config()
 
         ip_route_1.add_vpp_config()
         ip_route_2.add_vpp_config()
 
-        bier_route_1 = VppBierRoute(self, bti, 1,
-                                    [VppRoutePath(nh1, 0xffffffff,
-                                                  labels=[VppMplsLabel(101)])])
-        bier_route_2 = VppBierRoute(self, bti, 2,
-                                    [VppRoutePath(nh2, 0xffffffff,
-                                                  labels=[VppMplsLabel(102)])])
+        bier_route_1 = VppBierRoute(
+            self, bti, 1, [VppRoutePath(nh1, 0xFFFFFFFF, labels=[VppMplsLabel(101)])]
+        )
+        bier_route_2 = VppBierRoute(
+            self, bti, 2, [VppRoutePath(nh2, 0xFFFFFFFF, labels=[VppMplsLabel(102)])]
+        )
         bier_route_1.add_vpp_config()
         bier_route_2.add_vpp_config()
 
         bier_route_1.add_vpp_config()
         bier_route_2.add_vpp_config()
 
@@ -353,25 +416,33 @@ class TestBier(VppTestCase):
         route_ing_232_1_1_1 = VppIpMRoute(
             self,
             "0.0.0.0",
         route_ing_232_1_1_1 = VppIpMRoute(
             self,
             "0.0.0.0",
-            "232.1.1.1", 32,
+            "232.1.1.1",
+            32,
             MRouteEntryFlags.MFIB_API_ENTRY_FLAG_NONE,
             MRouteEntryFlags.MFIB_API_ENTRY_FLAG_NONE,
-            paths=[VppMRoutePath(self.pg0.sw_if_index,
-                                 MRouteItfFlags.MFIB_API_ITF_FLAG_ACCEPT),
-                   VppMRoutePath(0xffffffff,
-                                 MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD,
-                                 proto=FibPathProto.FIB_PATH_NH_PROTO_BIER,
-                                 type=FibPathType.FIB_PATH_TYPE_BIER_IMP,
-                                 bier_imp=bi.bi_index)])
+            paths=[
+                VppMRoutePath(
+                    self.pg0.sw_if_index, MRouteItfFlags.MFIB_API_ITF_FLAG_ACCEPT
+                ),
+                VppMRoutePath(
+                    0xFFFFFFFF,
+                    MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD,
+                    proto=FibPathProto.FIB_PATH_NH_PROTO_BIER,
+                    type=FibPathType.FIB_PATH_TYPE_BIER_IMP,
+                    bier_imp=bi.bi_index,
+                ),
+            ],
+        )
         route_ing_232_1_1_1.add_vpp_config()
 
         #
         # inject an IP packet. We expect it to be BIER encapped and
         # replicated.
         #
         route_ing_232_1_1_1.add_vpp_config()
 
         #
         # inject an IP packet. We expect it to be BIER encapped and
         # replicated.
         #
-        p = (Ether(dst=self.pg0.local_mac,
-                   src=self.pg0.remote_mac) /
-             IP(src="1.1.1.1", dst="232.1.1.1") /
-             UDP(sport=1234, dport=1234))
+        p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(src="1.1.1.1", dst="232.1.1.1")
+            / UDP(sport=1234, dport=1234)
+        )
 
         self.pg0.add_stream([p])
         self.pg_enable_capture(self.pg_interfaces)
 
         self.pg0.add_stream([p])
         self.pg_enable_capture(self.pg_interfaces)
@@ -425,20 +496,33 @@ class TestBier(VppTestCase):
         # BIER route in table that's for-us
         #
         bier_route_1 = VppBierRoute(
         # BIER route in table that's for-us
         #
         bier_route_1 = VppBierRoute(
-            self, bti, 1,
-            [VppRoutePath("0.0.0.0",
-                          0xffffffff,
-                          proto=FibPathProto.FIB_PATH_NH_PROTO_BIER,
-                          nh_table_id=8)])
+            self,
+            bti,
+            1,
+            [
+                VppRoutePath(
+                    "0.0.0.0",
+                    0xFFFFFFFF,
+                    proto=FibPathProto.FIB_PATH_NH_PROTO_BIER,
+                    nh_table_id=8,
+                )
+            ],
+        )
         bier_route_1.add_vpp_config()
 
         #
         # An entry in the disposition table
         #
         bier_route_1.add_vpp_config()
 
         #
         # An entry in the disposition table
         #
-        bier_de_1 = VppBierDispEntry(self, bdt.id, 99,
-                                     BIER_HDR_PAYLOAD.BIER_HDR_PROTO_IPV4,
-                                     FibPathProto.FIB_PATH_NH_PROTO_BIER,
-                                     "0.0.0.0", 0, rpf_id=8192)
+        bier_de_1 = VppBierDispEntry(
+            self,
+            bdt.id,
+            99,
+            BIER_HDR_PAYLOAD.BIER_HDR_PROTO_IPV4,
+            FibPathProto.FIB_PATH_NH_PROTO_BIER,
+            "0.0.0.0",
+            0,
+            rpf_id=8192,
+        )
         bier_de_1.add_vpp_config()
 
         #
         bier_de_1.add_vpp_config()
 
         #
@@ -447,48 +531,68 @@ class TestBier(VppTestCase):
         route_eg_232_1_1_1 = VppIpMRoute(
             self,
             "0.0.0.0",
         route_eg_232_1_1_1 = VppIpMRoute(
             self,
             "0.0.0.0",
-            "232.1.1.1", 32,
+            "232.1.1.1",
+            32,
             MRouteEntryFlags.MFIB_API_ENTRY_FLAG_NONE,
             MRouteEntryFlags.MFIB_API_ENTRY_FLAG_NONE,
-            paths=[VppMRoutePath(self.pg1.sw_if_index,
-                                 MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD)])
+            paths=[
+                VppMRoutePath(
+                    self.pg1.sw_if_index, MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD
+                )
+            ],
+        )
         route_eg_232_1_1_1.add_vpp_config()
         route_eg_232_1_1_1.update_rpf_id(8192)
 
         #
         # A packet with all bits set gets spat out to BP:1
         #
         route_eg_232_1_1_1.add_vpp_config()
         route_eg_232_1_1_1.update_rpf_id(8192)
 
         #
         # A packet with all bits set gets spat out to BP:1
         #
-        p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-             MPLS(label=77, ttl=255) /
-             BIER(length=BIERLength.BIER_LEN_256,
-                  BitString=scapy.compat.chb(255)*32,
-                  BFRID=99) /
-             IP(src="1.1.1.1", dst="232.1.1.1") /
-             UDP(sport=1234, dport=1234) /
-             Raw())
+        p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / MPLS(label=77, ttl=255)
+            / BIER(
+                length=BIERLength.BIER_LEN_256,
+                BitString=scapy.compat.chb(255) * 32,
+                BFRID=99,
+            )
+            / IP(src="1.1.1.1", dst="232.1.1.1")
+            / UDP(sport=1234, dport=1234)
+            / Raw()
+        )
 
         self.send_and_expect(self.pg0, [p], self.pg1)
 
         #
         # A packet that does not match the Disposition entry gets dropped
         #
 
         self.send_and_expect(self.pg0, [p], self.pg1)
 
         #
         # A packet that does not match the Disposition entry gets dropped
         #
-        p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-             MPLS(label=77, ttl=255) /
-             BIER(length=BIERLength.BIER_LEN_256,
-                  BitString=scapy.compat.chb(255)*32,
-                  BFRID=77) /
-             IP(src="1.1.1.1", dst="232.1.1.1") /
-             UDP(sport=1234, dport=1234) /
-             Raw())
-        self.send_and_assert_no_replies(self.pg0, p*2,
-                                        "no matching disposition entry")
+        p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / MPLS(label=77, ttl=255)
+            / BIER(
+                length=BIERLength.BIER_LEN_256,
+                BitString=scapy.compat.chb(255) * 32,
+                BFRID=77,
+            )
+            / IP(src="1.1.1.1", dst="232.1.1.1")
+            / UDP(sport=1234, dport=1234)
+            / Raw()
+        )
+        self.send_and_assert_no_replies(
+            self.pg0, p * 2, "no matching disposition entry"
+        )
 
         #
         # Add the default route to the disposition table
         #
 
         #
         # Add the default route to the disposition table
         #
-        bier_de_2 = VppBierDispEntry(self, bdt.id, 0,
-                                     BIER_HDR_PAYLOAD.BIER_HDR_PROTO_IPV4,
-                                     FibPathProto.FIB_PATH_NH_PROTO_BIER,
-                                     "0.0.0.0", 0, rpf_id=8192)
+        bier_de_2 = VppBierDispEntry(
+            self,
+            bdt.id,
+            0,
+            BIER_HDR_PAYLOAD.BIER_HDR_PROTO_IPV4,
+            FibPathProto.FIB_PATH_NH_PROTO_BIER,
+            "0.0.0.0",
+            0,
+            rpf_id=8192,
+        )
         bier_de_2.add_vpp_config()
 
         #
         bier_de_2.add_vpp_config()
 
         #
@@ -506,30 +610,41 @@ class TestBier(VppTestCase):
         route_eg_232_1_1_2 = VppIpMRoute(
             self,
             "0.0.0.0",
         route_eg_232_1_1_2 = VppIpMRoute(
             self,
             "0.0.0.0",
-            "232.1.1.2", 32,
+            "232.1.1.2",
+            32,
             MRouteEntryFlags.MFIB_API_ENTRY_FLAG_NONE,
             MRouteEntryFlags.MFIB_API_ENTRY_FLAG_NONE,
-            paths=[VppMRoutePath(0xffffffff,
-                                 MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD,
-                                 proto=DpoProto.DPO_PROTO_BIER,
-                                 type=FibPathType.FIB_PATH_TYPE_BIER_IMP,
-                                 bier_imp=bi.bi_index),
-                   VppMRoutePath(self.pg1.sw_if_index,
-                                 MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD)])
+            paths=[
+                VppMRoutePath(
+                    0xFFFFFFFF,
+                    MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD,
+                    proto=DpoProto.DPO_PROTO_BIER,
+                    type=FibPathType.FIB_PATH_TYPE_BIER_IMP,
+                    bier_imp=bi.bi_index,
+                ),
+                VppMRoutePath(
+                    self.pg1.sw_if_index, MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD
+                ),
+            ],
+        )
         route_eg_232_1_1_2.add_vpp_config()
         route_eg_232_1_1_2.update_rpf_id(8192)
 
         route_eg_232_1_1_2.add_vpp_config()
         route_eg_232_1_1_2.update_rpf_id(8192)
 
-        p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-             MPLS(label=77, ttl=255) /
-             BIER(length=BIERLength.BIER_LEN_256,
-                  BitString=scapy.compat.chb(255)*32,
-                  BFRID=77) /
-             IP(src="1.1.1.1", dst="232.1.1.2") /
-             UDP(sport=1234, dport=1234) /
-             Raw())
+        p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / MPLS(label=77, ttl=255)
+            / BIER(
+                length=BIERLength.BIER_LEN_256,
+                BitString=scapy.compat.chb(255) * 32,
+                BFRID=77,
+            )
+            / IP(src="1.1.1.1", dst="232.1.1.2")
+            / UDP(sport=1234, dport=1234)
+            / Raw()
+        )
         self.send_and_expect(self.pg0, [p], self.pg1)
 
     def bier_e2e(self, hdr_len_id, n_bytes, max_bp):
         self.send_and_expect(self.pg0, [p], self.pg1)
 
     def bier_e2e(self, hdr_len_id, n_bytes, max_bp):
-        """ BIER end-to-end"""
+        """BIER end-to-end"""
 
         MRouteItfFlags = VppEnum.vl_api_mfib_itf_flags_t
         MRouteEntryFlags = VppEnum.vl_api_mfib_entry_flags_t
 
         MRouteItfFlags = VppEnum.vl_api_mfib_itf_flags_t
         MRouteEntryFlags = VppEnum.vl_api_mfib_entry_flags_t
@@ -541,9 +656,9 @@ class TestBier(VppTestCase):
         bt = VppBierTable(self, bti, 77)
         bt.add_vpp_config()
 
         bt = VppBierTable(self, bti, 77)
         bt.add_vpp_config()
 
-        lowest = [b'\0'] * (n_bytes)
+        lowest = [b"\0"] * (n_bytes)
         lowest[-1] = scapy.compat.chb(1)
         lowest[-1] = scapy.compat.chb(1)
-        highest = [b'\0'] * (n_bytes)
+        highest = [b"\0"] * (n_bytes)
         highest[0] = scapy.compat.chb(128)
 
         #
         highest[0] = scapy.compat.chb(128)
 
         #
@@ -560,28 +675,42 @@ class TestBier(VppTestCase):
         route_ing_232_1_1_1 = VppIpMRoute(
             self,
             "0.0.0.0",
         route_ing_232_1_1_1 = VppIpMRoute(
             self,
             "0.0.0.0",
-            "232.1.1.1", 32,
+            "232.1.1.1",
+            32,
             MRouteEntryFlags.MFIB_API_ENTRY_FLAG_NONE,
             MRouteEntryFlags.MFIB_API_ENTRY_FLAG_NONE,
-            paths=[VppMRoutePath(self.pg0.sw_if_index,
-                                 MRouteItfFlags.MFIB_API_ITF_FLAG_ACCEPT),
-                   VppMRoutePath(0xffffffff,
-                                 MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD,
-                                 proto=FibPathProto.FIB_PATH_NH_PROTO_BIER,
-                                 type=FibPathType.FIB_PATH_TYPE_BIER_IMP,
-                                 bier_imp=bi_low.bi_index)])
+            paths=[
+                VppMRoutePath(
+                    self.pg0.sw_if_index, MRouteItfFlags.MFIB_API_ITF_FLAG_ACCEPT
+                ),
+                VppMRoutePath(
+                    0xFFFFFFFF,
+                    MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD,
+                    proto=FibPathProto.FIB_PATH_NH_PROTO_BIER,
+                    type=FibPathType.FIB_PATH_TYPE_BIER_IMP,
+                    bier_imp=bi_low.bi_index,
+                ),
+            ],
+        )
         route_ing_232_1_1_1.add_vpp_config()
         route_ing_232_1_1_2 = VppIpMRoute(
             self,
             "0.0.0.0",
         route_ing_232_1_1_1.add_vpp_config()
         route_ing_232_1_1_2 = VppIpMRoute(
             self,
             "0.0.0.0",
-            "232.1.1.2", 32,
+            "232.1.1.2",
+            32,
             MRouteEntryFlags.MFIB_API_ENTRY_FLAG_NONE,
             MRouteEntryFlags.MFIB_API_ENTRY_FLAG_NONE,
-            paths=[VppMRoutePath(self.pg0.sw_if_index,
-                                 MRouteItfFlags.MFIB_API_ITF_FLAG_ACCEPT),
-                   VppMRoutePath(0xffffffff,
-                                 MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD,
-                                 proto=FibPathProto.FIB_PATH_NH_PROTO_BIER,
-                                 type=FibPathType.FIB_PATH_TYPE_BIER_IMP,
-                                 bier_imp=bi_high.bi_index)])
+            paths=[
+                VppMRoutePath(
+                    self.pg0.sw_if_index, MRouteItfFlags.MFIB_API_ITF_FLAG_ACCEPT
+                ),
+                VppMRoutePath(
+                    0xFFFFFFFF,
+                    MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD,
+                    proto=FibPathProto.FIB_PATH_NH_PROTO_BIER,
+                    type=FibPathType.FIB_PATH_TYPE_BIER_IMP,
+                    bier_imp=bi_high.bi_index,
+                ),
+            ],
+        )
         route_ing_232_1_1_2.add_vpp_config()
 
         #
         route_ing_232_1_1_2.add_vpp_config()
 
         #
@@ -595,33 +724,59 @@ class TestBier(VppTestCase):
         # disp table 8.
         #
         bier_route_1 = VppBierRoute(
         # disp table 8.
         #
         bier_route_1 = VppBierRoute(
-            self, bti, 1,
-            [VppRoutePath("0.0.0.0",
-                          0xffffffff,
-                          proto=FibPathProto.FIB_PATH_NH_PROTO_BIER,
-                          nh_table_id=8)])
+            self,
+            bti,
+            1,
+            [
+                VppRoutePath(
+                    "0.0.0.0",
+                    0xFFFFFFFF,
+                    proto=FibPathProto.FIB_PATH_NH_PROTO_BIER,
+                    nh_table_id=8,
+                )
+            ],
+        )
         bier_route_1.add_vpp_config()
         bier_route_max = VppBierRoute(
         bier_route_1.add_vpp_config()
         bier_route_max = VppBierRoute(
-            self, bti, max_bp,
-            [VppRoutePath("0.0.0.0",
-                          0xffffffff,
-                          proto=FibPathProto.FIB_PATH_NH_PROTO_BIER,
-                          nh_table_id=8)])
+            self,
+            bti,
+            max_bp,
+            [
+                VppRoutePath(
+                    "0.0.0.0",
+                    0xFFFFFFFF,
+                    proto=FibPathProto.FIB_PATH_NH_PROTO_BIER,
+                    nh_table_id=8,
+                )
+            ],
+        )
         bier_route_max.add_vpp_config()
 
         #
         # An entry in the disposition table for sender 333
         #  lookup in VRF 10
         #
         bier_route_max.add_vpp_config()
 
         #
         # An entry in the disposition table for sender 333
         #  lookup in VRF 10
         #
-        bier_de_1 = VppBierDispEntry(self, bdt.id, 333,
-                                     BIER_HDR_PAYLOAD.BIER_HDR_PROTO_IPV4,
-                                     FibPathProto.FIB_PATH_NH_PROTO_BIER,
-                                     "0.0.0.0", 10, rpf_id=8192)
+        bier_de_1 = VppBierDispEntry(
+            self,
+            bdt.id,
+            333,
+            BIER_HDR_PAYLOAD.BIER_HDR_PROTO_IPV4,
+            FibPathProto.FIB_PATH_NH_PROTO_BIER,
+            "0.0.0.0",
+            10,
+            rpf_id=8192,
+        )
         bier_de_1.add_vpp_config()
         bier_de_1.add_vpp_config()
-        bier_de_1 = VppBierDispEntry(self, bdt.id, 334,
-                                     BIER_HDR_PAYLOAD.BIER_HDR_PROTO_IPV4,
-                                     FibPathProto.FIB_PATH_NH_PROTO_BIER,
-                                     "0.0.0.0", 10, rpf_id=8193)
+        bier_de_1 = VppBierDispEntry(
+            self,
+            bdt.id,
+            334,
+            BIER_HDR_PAYLOAD.BIER_HDR_PROTO_IPV4,
+            FibPathProto.FIB_PATH_NH_PROTO_BIER,
+            "0.0.0.0",
+            10,
+            rpf_id=8193,
+        )
         bier_de_1.add_vpp_config()
 
         #
         bier_de_1.add_vpp_config()
 
         #
@@ -631,21 +786,31 @@ class TestBier(VppTestCase):
         route_eg_232_1_1_1 = VppIpMRoute(
             self,
             "0.0.0.0",
         route_eg_232_1_1_1 = VppIpMRoute(
             self,
             "0.0.0.0",
-            "232.1.1.1", 32,
+            "232.1.1.1",
+            32,
             MRouteEntryFlags.MFIB_API_ENTRY_FLAG_NONE,
             table_id=10,
             MRouteEntryFlags.MFIB_API_ENTRY_FLAG_NONE,
             table_id=10,
-            paths=[VppMRoutePath(self.pg1.sw_if_index,
-                                 MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD)])
+            paths=[
+                VppMRoutePath(
+                    self.pg1.sw_if_index, MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD
+                )
+            ],
+        )
         route_eg_232_1_1_1.add_vpp_config()
         route_eg_232_1_1_1.update_rpf_id(8192)
         route_eg_232_1_1_2 = VppIpMRoute(
             self,
             "0.0.0.0",
         route_eg_232_1_1_1.add_vpp_config()
         route_eg_232_1_1_1.update_rpf_id(8192)
         route_eg_232_1_1_2 = VppIpMRoute(
             self,
             "0.0.0.0",
-            "232.1.1.2", 32,
+            "232.1.1.2",
+            32,
             MRouteEntryFlags.MFIB_API_ENTRY_FLAG_NONE,
             table_id=10,
             MRouteEntryFlags.MFIB_API_ENTRY_FLAG_NONE,
             table_id=10,
-            paths=[VppMRoutePath(self.pg1.sw_if_index,
-                                 MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD)])
+            paths=[
+                VppMRoutePath(
+                    self.pg1.sw_if_index, MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD
+                )
+            ],
+        )
         route_eg_232_1_1_2.add_vpp_config()
         route_eg_232_1_1_2.update_rpf_id(8193)
 
         route_eg_232_1_1_2.add_vpp_config()
         route_eg_232_1_1_2.update_rpf_id(8193)
 
@@ -654,49 +819,51 @@ class TestBier(VppTestCase):
         # replicated, then hit the disposition and be forwarded
         # out of VRF 10, i.e. on pg1
         #
         # replicated, then hit the disposition and be forwarded
         # out of VRF 10, i.e. on pg1
         #
-        p = (Ether(dst=self.pg0.local_mac,
-                   src=self.pg0.remote_mac) /
-             IP(src="1.1.1.1", dst="232.1.1.1") /
-             UDP(sport=1234, dport=1234) /
-             Raw(scapy.compat.chb(5) * 32))
+        p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(src="1.1.1.1", dst="232.1.1.1")
+            / UDP(sport=1234, dport=1234)
+            / Raw(scapy.compat.chb(5) * 32)
+        )
 
 
-        rx = self.send_and_expect(self.pg0, p*NUM_PKTS, self.pg1)
+        rx = self.send_and_expect(self.pg0, p * NUM_PKTS, self.pg1)
 
         self.assertEqual(rx[0][IP].src, "1.1.1.1")
         self.assertEqual(rx[0][IP].dst, "232.1.1.1")
 
 
         self.assertEqual(rx[0][IP].src, "1.1.1.1")
         self.assertEqual(rx[0][IP].dst, "232.1.1.1")
 
-        p = (Ether(dst=self.pg0.local_mac,
-                   src=self.pg0.remote_mac) /
-             IP(src="1.1.1.1", dst="232.1.1.2") /
-             UDP(sport=1234, dport=1234) /
-             Raw(scapy.compat.chb(5) * 512))
+        p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(src="1.1.1.1", dst="232.1.1.2")
+            / UDP(sport=1234, dport=1234)
+            / Raw(scapy.compat.chb(5) * 512)
+        )
 
 
-        rx = self.send_and_expect(self.pg0, p*NUM_PKTS, self.pg1)
+        rx = self.send_and_expect(self.pg0, p * NUM_PKTS, self.pg1)
         self.assertEqual(rx[0][IP].src, "1.1.1.1")
         self.assertEqual(rx[0][IP].dst, "232.1.1.2")
 
     @unittest.skipUnless(config.extended, "part of extended tests")
     def test_bier_e2e_1024(self):
         self.assertEqual(rx[0][IP].src, "1.1.1.1")
         self.assertEqual(rx[0][IP].dst, "232.1.1.2")
 
     @unittest.skipUnless(config.extended, "part of extended tests")
     def test_bier_e2e_1024(self):
-        """ BIER end-to-end BSL:1024"""
+        """BIER end-to-end BSL:1024"""
         self.bier_e2e(BIERLength.BIER_LEN_1024, 128, 1024)
 
     @unittest.skipUnless(config.extended, "part of extended tests")
     def test_bier_e2e_512(self):
         self.bier_e2e(BIERLength.BIER_LEN_1024, 128, 1024)
 
     @unittest.skipUnless(config.extended, "part of extended tests")
     def test_bier_e2e_512(self):
-        """ BIER end-to-end BSL:512"""
+        """BIER end-to-end BSL:512"""
         self.bier_e2e(BIERLength.BIER_LEN_512, 64, 512)
 
     @unittest.skipUnless(config.extended, "part of extended tests")
     def test_bier_e2e_256(self):
         self.bier_e2e(BIERLength.BIER_LEN_512, 64, 512)
 
     @unittest.skipUnless(config.extended, "part of extended tests")
     def test_bier_e2e_256(self):
-        """ BIER end-to-end BSL:256"""
+        """BIER end-to-end BSL:256"""
         self.bier_e2e(BIERLength.BIER_LEN_256, 32, 256)
 
     @unittest.skipUnless(config.extended, "part of extended tests")
     def test_bier_e2e_128(self):
         self.bier_e2e(BIERLength.BIER_LEN_256, 32, 256)
 
     @unittest.skipUnless(config.extended, "part of extended tests")
     def test_bier_e2e_128(self):
-        """ BIER end-to-end BSL:128"""
+        """BIER end-to-end BSL:128"""
         self.bier_e2e(BIERLength.BIER_LEN_128, 16, 128)
 
     def test_bier_e2e_64(self):
         self.bier_e2e(BIERLength.BIER_LEN_128, 16, 128)
 
     def test_bier_e2e_64(self):
-        """ BIER end-to-end BSL:64"""
+        """BIER end-to-end BSL:64"""
         self.bier_e2e(BIERLength.BIER_LEN_64, 8, 64)
 
     def test_bier_head_o_udp(self):
         self.bier_e2e(BIERLength.BIER_LEN_64, 8, 64)
 
     def test_bier_head_o_udp(self):
@@ -716,24 +883,36 @@ class TestBier(VppTestCase):
         # 1 bit positions via 1 next hops
         #
         nh1 = "10.0.0.1"
         # 1 bit positions via 1 next hops
         #
         nh1 = "10.0.0.1"
-        ip_route = VppIpRoute(self, nh1, 32,
-                              [VppRoutePath(self.pg1.remote_ip4,
-                                            self.pg1.sw_if_index,
-                                            labels=[VppMplsLabel(2001)])])
+        ip_route = VppIpRoute(
+            self,
+            nh1,
+            32,
+            [
+                VppRoutePath(
+                    self.pg1.remote_ip4,
+                    self.pg1.sw_if_index,
+                    labels=[VppMplsLabel(2001)],
+                )
+            ],
+        )
         ip_route.add_vpp_config()
 
         ip_route.add_vpp_config()
 
-        udp_encap = VppUdpEncap(self,
-                                self.pg0.local_ip4,
-                                nh1,
-                                330, 8138)
+        udp_encap = VppUdpEncap(self, self.pg0.local_ip4, nh1, 330, 8138)
         udp_encap.add_vpp_config()
 
         bier_route = VppBierRoute(
         udp_encap.add_vpp_config()
 
         bier_route = VppBierRoute(
-            self, bti, 1,
-            [VppRoutePath("0.0.0.0",
-                          0xFFFFFFFF,
-                          type=FibPathType.FIB_PATH_TYPE_UDP_ENCAP,
-                          next_hop_id=udp_encap.id)])
+            self,
+            bti,
+            1,
+            [
+                VppRoutePath(
+                    "0.0.0.0",
+                    0xFFFFFFFF,
+                    type=FibPathType.FIB_PATH_TYPE_UDP_ENCAP,
+                    next_hop_id=udp_encap.id,
+                )
+            ],
+        )
         bier_route.add_vpp_config()
 
         #
         bier_route.add_vpp_config()
 
         #
@@ -741,9 +920,9 @@ class TestBier(VppTestCase):
         # only use the second, but creating 2 tests with a non-zero
         # value index in the route add
         #
         # only use the second, but creating 2 tests with a non-zero
         # value index in the route add
         #
-        bi = VppBierImp(self, bti, 333, scapy.compat.chb(0xff) * 32)
+        bi = VppBierImp(self, bti, 333, scapy.compat.chb(0xFF) * 32)
         bi.add_vpp_config()
         bi.add_vpp_config()
-        bi2 = VppBierImp(self, bti, 334, scapy.compat.chb(0xff) * 32)
+        bi2 = VppBierImp(self, bti, 334, scapy.compat.chb(0xFF) * 32)
         bi2.add_vpp_config()
 
         #
         bi2.add_vpp_config()
 
         #
@@ -752,24 +931,32 @@ class TestBier(VppTestCase):
         route_ing_232_1_1_1 = VppIpMRoute(
             self,
             "0.0.0.0",
         route_ing_232_1_1_1 = VppIpMRoute(
             self,
             "0.0.0.0",
-            "232.1.1.1", 32,
+            "232.1.1.1",
+            32,
             MRouteEntryFlags.MFIB_API_ENTRY_FLAG_NONE,
             MRouteEntryFlags.MFIB_API_ENTRY_FLAG_NONE,
-            paths=[VppMRoutePath(self.pg0.sw_if_index,
-                                 MRouteItfFlags.MFIB_API_ITF_FLAG_ACCEPT),
-                   VppMRoutePath(0xffffffff,
-                                 MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD,
-                                 proto=FibPathProto.FIB_PATH_NH_PROTO_BIER,
-                                 type=FibPathType.FIB_PATH_TYPE_BIER_IMP,
-                                 bier_imp=bi2.bi_index)])
+            paths=[
+                VppMRoutePath(
+                    self.pg0.sw_if_index, MRouteItfFlags.MFIB_API_ITF_FLAG_ACCEPT
+                ),
+                VppMRoutePath(
+                    0xFFFFFFFF,
+                    MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD,
+                    proto=FibPathProto.FIB_PATH_NH_PROTO_BIER,
+                    type=FibPathType.FIB_PATH_TYPE_BIER_IMP,
+                    bier_imp=bi2.bi_index,
+                ),
+            ],
+        )
         route_ing_232_1_1_1.add_vpp_config()
 
         #
         # inject a packet an IP. We expect it to be BIER and UDP encapped,
         #
         route_ing_232_1_1_1.add_vpp_config()
 
         #
         # inject a packet an IP. We expect it to be BIER and UDP encapped,
         #
-        p = (Ether(dst=self.pg0.local_mac,
-                   src=self.pg0.remote_mac) /
-             IP(src="1.1.1.1", dst="232.1.1.1") /
-             UDP(sport=1234, dport=1234))
+        p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(src="1.1.1.1", dst="232.1.1.1")
+            / UDP(sport=1234, dport=1234)
+        )
 
         self.pg0.add_stream([p])
         self.pg_enable_capture(self.pg_interfaces)
 
         self.pg0.add_stream([p])
         self.pg_enable_capture(self.pg_interfaces)
@@ -813,20 +1000,33 @@ class TestBier(VppTestCase):
         # BIER route in table that's for-us
         #
         bier_route_1 = VppBierRoute(
         # BIER route in table that's for-us
         #
         bier_route_1 = VppBierRoute(
-            self, bti, 1,
-            [VppRoutePath("0.0.0.0",
-                          0xffffffff,
-                          proto=FibPathProto.FIB_PATH_NH_PROTO_BIER,
-                          nh_table_id=8)])
+            self,
+            bti,
+            1,
+            [
+                VppRoutePath(
+                    "0.0.0.0",
+                    0xFFFFFFFF,
+                    proto=FibPathProto.FIB_PATH_NH_PROTO_BIER,
+                    nh_table_id=8,
+                )
+            ],
+        )
         bier_route_1.add_vpp_config()
 
         #
         # An entry in the disposition table
         #
         bier_route_1.add_vpp_config()
 
         #
         # An entry in the disposition table
         #
-        bier_de_1 = VppBierDispEntry(self, bdt.id, 99,
-                                     BIER_HDR_PAYLOAD.BIER_HDR_PROTO_IPV4,
-                                     FibPathProto.FIB_PATH_NH_PROTO_BIER,
-                                     "0.0.0.0", 0, rpf_id=8192)
+        bier_de_1 = VppBierDispEntry(
+            self,
+            bdt.id,
+            99,
+            BIER_HDR_PAYLOAD.BIER_HDR_PROTO_IPV4,
+            FibPathProto.FIB_PATH_NH_PROTO_BIER,
+            "0.0.0.0",
+            0,
+            rpf_id=8192,
+        )
         bier_de_1.add_vpp_config()
 
         #
         bier_de_1.add_vpp_config()
 
         #
@@ -835,29 +1035,38 @@ class TestBier(VppTestCase):
         route_eg_232_1_1_1 = VppIpMRoute(
             self,
             "0.0.0.0",
         route_eg_232_1_1_1 = VppIpMRoute(
             self,
             "0.0.0.0",
-            "232.1.1.1", 32,
+            "232.1.1.1",
+            32,
             MRouteEntryFlags.MFIB_API_ENTRY_FLAG_NONE,
             MRouteEntryFlags.MFIB_API_ENTRY_FLAG_NONE,
-            paths=[VppMRoutePath(self.pg1.sw_if_index,
-                                 MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD)])
+            paths=[
+                VppMRoutePath(
+                    self.pg1.sw_if_index, MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD
+                )
+            ],
+        )
         route_eg_232_1_1_1.add_vpp_config()
         route_eg_232_1_1_1.update_rpf_id(8192)
 
         #
         # A packet with all bits set gets spat out to BP:1
         #
         route_eg_232_1_1_1.add_vpp_config()
         route_eg_232_1_1_1.update_rpf_id(8192)
 
         #
         # A packet with all bits set gets spat out to BP:1
         #
-        p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-             IP(src=self.pg0.remote_ip4, dst=self.pg0.local_ip4) /
-             UDP(sport=333, dport=8138) /
-             BIFT(sd=1, set=0, bsl=2, ttl=255) /
-             BIER(length=BIERLength.BIER_LEN_256,
-                  BitString=scapy.compat.chb(255)*32,
-                  BFRID=99) /
-             IP(src="1.1.1.1", dst="232.1.1.1") /
-             UDP(sport=1234, dport=1234) /
-             Raw())
+        p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg0.local_ip4)
+            / UDP(sport=333, dport=8138)
+            / BIFT(sd=1, set=0, bsl=2, ttl=255)
+            / BIER(
+                length=BIERLength.BIER_LEN_256,
+                BitString=scapy.compat.chb(255) * 32,
+                BFRID=99,
+            )
+            / IP(src="1.1.1.1", dst="232.1.1.1")
+            / UDP(sport=1234, dport=1234)
+            / Raw()
+        )
 
         rx = self.send_and_expect(self.pg0, [p], self.pg1)
 
 
 
         rx = self.send_and_expect(self.pg0, [p], self.pg1)
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index 32eb4ff..b57485a 100644 (file)
@@ -8,7 +8,7 @@ from vpp_ip_route import VppIpTable, VppIpRoute, VppRoutePath
 
 
 class TestBihash(VppTestCase):
 
 
 class TestBihash(VppTestCase):
-    """ Bihash Test Cases """
+    """Bihash Test Cases"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -28,48 +28,54 @@ class TestBihash(VppTestCase):
         super(TestBihash, self).tearDown()
 
     def test_bihash_unittest(self):
         super(TestBihash, self).tearDown()
 
     def test_bihash_unittest(self):
-        """ Bihash Add/Del Test """
+        """Bihash Add/Del Test"""
         error = self.vapi.cli("test bihash careful 0 verbose 0")
 
         if error:
             self.logger.critical(error)
         error = self.vapi.cli("test bihash careful 0 verbose 0")
 
         if error:
             self.logger.critical(error)
-            self.assertNotIn('failed', error)
+            self.assertNotIn("failed", error)
 
     def test_bihash_thread(self):
 
     def test_bihash_thread(self):
-        """ Bihash Thread Test """
+        """Bihash Thread Test"""
 
 
-        error = self.vapi.cli("test bihash threads 2 nbuckets" +
-                              " 64000 careful 0 verbose 0")
+        error = self.vapi.cli(
+            "test bihash threads 2 nbuckets" + " 64000 careful 0 verbose 0"
+        )
 
         if error:
             self.logger.critical(error)
 
         if error:
             self.logger.critical(error)
-            self.assertNotIn('failed', error)
+            self.assertNotIn("failed", error)
 
     def test_bihash_vec64(self):
 
     def test_bihash_vec64(self):
-        """ Bihash vec64 Test """
+        """Bihash vec64 Test"""
 
         error = self.vapi.cli("test bihash vec64")
 
         if error:
             self.logger.critical(error)
 
         error = self.vapi.cli("test bihash vec64")
 
         if error:
             self.logger.critical(error)
-            self.assertNotIn('failed', error)
+            self.assertNotIn("failed", error)
 
     @unittest.skipUnless(config.gcov, "part of code coverage tests")
     def test_bihash_coverage(self):
 
     @unittest.skipUnless(config.gcov, "part of code coverage tests")
     def test_bihash_coverage(self):
-        """ Improve Code Coverage """
+        """Improve Code Coverage"""
 
 
-        error = self.vapi.cli("test bihash nitems 10 ncycles 3" +
-                              "search 2 careful 1 verbose 2 non-random-keys")
+        error = self.vapi.cli(
+            "test bihash nitems 10 ncycles 3"
+            + "search 2 careful 1 verbose 2 non-random-keys"
+        )
 
         if error:
             self.logger.critical(error)
 
         if error:
             self.logger.critical(error)
-            self.assertNotIn('failed', error)
+            self.assertNotIn("failed", error)
 
 
-        error = self.vapi.cli("test bihash nitems 10 nbuckets 1 ncycles 3" +
-                              "search 2 careful 1 verbose 2 non-random-keys")
+        error = self.vapi.cli(
+            "test bihash nitems 10 nbuckets 1 ncycles 3"
+            + "search 2 careful 1 verbose 2 non-random-keys"
+        )
         if error:
             self.logger.critical(error)
         if error:
             self.logger.critical(error)
-            self.assertNotIn('failed', error)
+            self.assertNotIn("failed", error)
 
 
-if __name__ == '__main__':
+
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index 5df86ae..159bae5 100644 (file)
@@ -13,15 +13,13 @@ from vpp_papi import MACAddress, VppEnum
 
 
 class TestBondInterface(VppTestCase):
 
 
 class TestBondInterface(VppTestCase):
-    """Bond Test Case
-
-    """
+    """Bond Test Case"""
 
     @classmethod
     def setUpClass(cls):
         super(TestBondInterface, cls).setUpClass()
         # Test variables
 
     @classmethod
     def setUpClass(cls):
         super(TestBondInterface, cls).setUpClass()
         # Test variables
-        cls.pkts_per_burst = 257    # Number of packets per burst
+        cls.pkts_per_burst = 257  # Number of packets per burst
         # create 3 pg interfaces
         cls.create_pg_interfaces(range(4))
 
         # create 3 pg interfaces
         cls.create_pg_interfaces(range(4))
 
@@ -46,7 +44,7 @@ class TestBondInterface(VppTestCase):
         self.logger.info(self.vapi.ppcli("show interface"))
 
     def test_bond_traffic(self):
         self.logger.info(self.vapi.ppcli("show interface"))
 
     def test_bond_traffic(self):
-        """ Bond traffic test """
+        """Bond traffic test"""
 
         # topology
         #
 
         # topology
         #
@@ -69,12 +67,13 @@ class TestBondInterface(VppTestCase):
             lb=VppEnum.vl_api_bond_lb_algo_t.BOND_API_LB_ALGO_L34,
             numa_only=0,
             use_custom_mac=1,
             lb=VppEnum.vl_api_bond_lb_algo_t.BOND_API_LB_ALGO_L34,
             numa_only=0,
             use_custom_mac=1,
-            mac_address=mac)
+            mac_address=mac,
+        )
         bond0.add_vpp_config()
         bond0.admin_up()
         self.vapi.sw_interface_add_del_address(
         bond0.add_vpp_config()
         bond0.admin_up()
         self.vapi.sw_interface_add_del_address(
-            sw_if_index=bond0.sw_if_index,
-            prefix="10.10.10.1/24")
+            sw_if_index=bond0.sw_if_index, prefix="10.10.10.1/24"
+        )
 
         self.pg2.config_ip4()
         self.pg2.resolve_arp()
 
         self.pg2.config_ip4()
         self.pg2.resolve_arp()
@@ -98,29 +97,39 @@ class TestBondInterface(VppTestCase):
 
         # generate a packet from pg2 -> BondEthernet0 -> pg1
         # BondEthernet0 TX hashes this packet to pg1
 
         # generate a packet from pg2 -> BondEthernet0 -> pg1
         # BondEthernet0 TX hashes this packet to pg1
-        p2 = (Ether(src=bond0_mac, dst=self.pg2.local_mac) /
-              IP(src=self.pg2.local_ip4, dst="10.10.10.12") /
-              UDP(sport=1235, dport=1235) /
-              Raw(b'\xa5' * 100))
+        p2 = (
+            Ether(src=bond0_mac, dst=self.pg2.local_mac)
+            / IP(src=self.pg2.local_ip4, dst="10.10.10.12")
+            / UDP(sport=1235, dport=1235)
+            / Raw(b"\xa5" * 100)
+        )
         self.pg2.add_stream(p2)
 
         # generate a packet from pg3 -> BondEthernet0 -> pg0
         # BondEthernet0 TX hashes this packet to pg0
         # notice the ip address and ports are different than p2 packet
         self.pg2.add_stream(p2)
 
         # generate a packet from pg3 -> BondEthernet0 -> pg0
         # BondEthernet0 TX hashes this packet to pg0
         # notice the ip address and ports are different than p2 packet
-        p3 = (Ether(src=bond0_mac, dst=self.pg3.local_mac) /
-              IP(src=self.pg3.local_ip4, dst="10.10.10.11") /
-              UDP(sport=1234, dport=1234) /
-              Raw(b'\xa5' * 100))
+        p3 = (
+            Ether(src=bond0_mac, dst=self.pg3.local_mac)
+            / IP(src=self.pg3.local_ip4, dst="10.10.10.11")
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
         self.pg3.add_stream(p3)
 
         self.pg_enable_capture(self.pg_interfaces)
 
         # set up the static arp entries pointing to the BondEthernet0 interface
         # so that it does not try to resolve the ip address
         self.pg3.add_stream(p3)
 
         self.pg_enable_capture(self.pg_interfaces)
 
         # set up the static arp entries pointing to the BondEthernet0 interface
         # so that it does not try to resolve the ip address
-        self.logger.info(self.vapi.cli(
-            "set ip neighbor static BondEthernet0 10.10.10.12 abcd.abcd.0002"))
-        self.logger.info(self.vapi.cli(
-            "set ip neighbor static BondEthernet0 10.10.10.11 abcd.abcd.0004"))
+        self.logger.info(
+            self.vapi.cli(
+                "set ip neighbor static BondEthernet0 10.10.10.12 abcd.abcd.0002"
+            )
+        )
+        self.logger.info(
+            self.vapi.cli(
+                "set ip neighbor static BondEthernet0 10.10.10.11 abcd.abcd.0004"
+            )
+        )
 
         # clear the interface counters
         self.logger.info(self.vapi.cli("clear interfaces"))
 
         # clear the interface counters
         self.logger.info(self.vapi.cli("clear interfaces"))
@@ -166,14 +175,13 @@ class TestBondInterface(VppTestCase):
         bond0.remove_vpp_config()
 
     def test_bond_add_member(self):
         bond0.remove_vpp_config()
 
     def test_bond_add_member(self):
-        """ Bond add_member/detach member test """
+        """Bond add_member/detach member test"""
 
         # create interface (BondEthernet0) and set bond mode to LACP
         self.logger.info("create bond")
         bond0 = VppBondInterface(
 
         # create interface (BondEthernet0) and set bond mode to LACP
         self.logger.info("create bond")
         bond0 = VppBondInterface(
-            self,
-            mode=VppEnum.vl_api_bond_mode_t.BOND_API_MODE_LACP,
-            enable_gso=0)
+            self, mode=VppEnum.vl_api_bond_mode_t.BOND_API_MODE_LACP, enable_gso=0
+        )
         bond0.add_vpp_config()
         bond0.admin_up()
 
         bond0.add_vpp_config()
         bond0.admin_up()
 
@@ -187,15 +195,13 @@ class TestBondInterface(VppTestCase):
             # add_member pg0 and pg1 to BondEthernet0
             self.logger.info("bond add_member interface pg0 to BondEthernet0")
             bond0.add_member_vpp_bond_interface(
             # add_member pg0 and pg1 to BondEthernet0
             self.logger.info("bond add_member interface pg0 to BondEthernet0")
             bond0.add_member_vpp_bond_interface(
-                sw_if_index=self.pg0.sw_if_index,
-                is_passive=0,
-                is_long_timeout=0)
+                sw_if_index=self.pg0.sw_if_index, is_passive=0, is_long_timeout=0
+            )
 
             self.logger.info("bond add_member interface pg1 to BondEthernet0")
             bond0.add_member_vpp_bond_interface(
 
             self.logger.info("bond add_member interface pg1 to BondEthernet0")
             bond0.add_member_vpp_bond_interface(
-                sw_if_index=self.pg1.sw_if_index,
-                is_passive=0,
-                is_long_timeout=0)
+                sw_if_index=self.pg1.sw_if_index, is_passive=0, is_long_timeout=0
+            )
             # verify both members in BondEthernet0
             if_dump = self.vapi.sw_member_interface_dump(bond0.sw_if_index)
             self.assertTrue(self.pg0.is_interface_config_in_dump(if_dump))
             # verify both members in BondEthernet0
             if_dump = self.vapi.sw_member_interface_dump(bond0.sw_if_index)
             self.assertTrue(self.pg0.is_interface_config_in_dump(if_dump))
@@ -222,25 +228,27 @@ class TestBondInterface(VppTestCase):
         bond0.remove_vpp_config()
 
     def test_bond(self):
         bond0.remove_vpp_config()
 
     def test_bond(self):
-        """ Bond add/delete interface test """
+        """Bond add/delete interface test"""
         self.logger.info("Bond add interfaces")
 
         # create interface 1 (BondEthernet0)
         bond0 = VppBondInterface(
         self.logger.info("Bond add interfaces")
 
         # create interface 1 (BondEthernet0)
         bond0 = VppBondInterface(
-            self, mode=VppEnum.vl_api_bond_mode_t.BOND_API_MODE_LACP)
+            self, mode=VppEnum.vl_api_bond_mode_t.BOND_API_MODE_LACP
+        )
         bond0.add_vpp_config()
         bond0.admin_up()
 
         # create interface 2 (BondEthernet1)
         bond1 = VppBondInterface(
         bond0.add_vpp_config()
         bond0.admin_up()
 
         # create interface 2 (BondEthernet1)
         bond1 = VppBondInterface(
-            self, mode=VppEnum.vl_api_bond_mode_t.BOND_API_MODE_XOR)
+            self, mode=VppEnum.vl_api_bond_mode_t.BOND_API_MODE_XOR
+        )
         bond1.add_vpp_config()
         bond1.admin_up()
 
         # verify both interfaces in the show
         ifs = self.vapi.cli("show interface")
         bond1.add_vpp_config()
         bond1.admin_up()
 
         # verify both interfaces in the show
         ifs = self.vapi.cli("show interface")
-        self.assertIn('BondEthernet0', ifs)
-        self.assertIn('BondEthernet1', ifs)
+        self.assertIn("BondEthernet0", ifs)
+        self.assertIn("BondEthernet1", ifs)
 
         # verify they are in the dump also
         if_dump = self.vapi.sw_bond_interface_dump(sw_if_index=0xFFFFFFFF)
 
         # verify they are in the dump also
         if_dump = self.vapi.sw_bond_interface_dump(sw_if_index=0xFFFFFFFF)
@@ -255,10 +263,10 @@ class TestBondInterface(VppTestCase):
 
         ifs = self.vapi.cli("show interface")
         # verify BondEthernet0 still in the show
 
         ifs = self.vapi.cli("show interface")
         # verify BondEthernet0 still in the show
-        self.assertIn('BondEthernet0', ifs)
+        self.assertIn("BondEthernet0", ifs)
 
         # verify BondEthernet1 not in the show
 
         # verify BondEthernet1 not in the show
-        self.assertNotIn('BondEthernet1', ifs)
+        self.assertNotIn("BondEthernet1", ifs)
 
         # verify BondEthernet1 is not in the dump
         if_dump = self.vapi.sw_bond_interface_dump(sw_if_index=0xFFFFFFFF)
 
         # verify BondEthernet1 is not in the dump
         if_dump = self.vapi.sw_bond_interface_dump(sw_if_index=0xFFFFFFFF)
@@ -275,15 +283,14 @@ class TestBondInterface(VppTestCase):
 
         # verify BondEthernet0 not in the show
         ifs = self.vapi.cli("show interface")
 
         # verify BondEthernet0 not in the show
         ifs = self.vapi.cli("show interface")
-        self.assertNotIn('BondEthernet0', ifs)
+        self.assertNotIn("BondEthernet0", ifs)
 
         # verify BondEthernet0 is not in the dump
 
         # verify BondEthernet0 is not in the dump
-        if_dump = self.vapi.sw_bond_interface_dump(
-            sw_if_index=bond0.sw_if_index)
+        if_dump = self.vapi.sw_bond_interface_dump(sw_if_index=bond0.sw_if_index)
         self.assertFalse(bond0.is_interface_config_in_dump(if_dump))
 
     def test_bond_link(self):
         self.assertFalse(bond0.is_interface_config_in_dump(if_dump))
 
     def test_bond_link(self):
-        """ Bond hw interface link state test """
+        """Bond hw interface link state test"""
 
         # for convenience
         bond_modes = VppEnum.vl_api_bond_mode_t
 
         # for convenience
         bond_modes = VppEnum.vl_api_bond_mode_t
@@ -292,16 +299,17 @@ class TestBondInterface(VppTestCase):
         # create interface 1 (BondEthernet0)
         self.logger.info("Create bond interface")
         # use round-robin mode to avoid negotiation required by LACP
         # create interface 1 (BondEthernet0)
         self.logger.info("Create bond interface")
         # use round-robin mode to avoid negotiation required by LACP
-        bond0 = VppBondInterface(self,
-                                 mode=bond_modes.BOND_API_MODE_ROUND_ROBIN)
+        bond0 = VppBondInterface(self, mode=bond_modes.BOND_API_MODE_ROUND_ROBIN)
         bond0.add_vpp_config()
 
         # set bond admin up.
         self.logger.info("set interface BondEthernet0 admin up")
         bond0.admin_up()
         # confirm link up
         bond0.add_vpp_config()
 
         # set bond admin up.
         self.logger.info("set interface BondEthernet0 admin up")
         bond0.admin_up()
         # confirm link up
-        bond0.assert_interface_state(intf_flags.IF_STATUS_API_FLAG_ADMIN_UP,
-                                     intf_flags.IF_STATUS_API_FLAG_LINK_UP)
+        bond0.assert_interface_state(
+            intf_flags.IF_STATUS_API_FLAG_ADMIN_UP,
+            intf_flags.IF_STATUS_API_FLAG_LINK_UP,
+        )
 
         # toggle bond admin state
         self.logger.info("toggle interface BondEthernet0")
 
         # toggle bond admin state
         self.logger.info("toggle interface BondEthernet0")
@@ -309,13 +317,15 @@ class TestBondInterface(VppTestCase):
         bond0.admin_up()
 
         # confirm link is still up
         bond0.admin_up()
 
         # confirm link is still up
-        bond0.assert_interface_state(intf_flags.IF_STATUS_API_FLAG_ADMIN_UP,
-                                     intf_flags.IF_STATUS_API_FLAG_LINK_UP)
+        bond0.assert_interface_state(
+            intf_flags.IF_STATUS_API_FLAG_ADMIN_UP,
+            intf_flags.IF_STATUS_API_FLAG_LINK_UP,
+        )
 
         # delete BondEthernet0
         self.logger.info("Deleting BondEthernet0")
         bond0.remove_vpp_config()
 
 
 
         # delete BondEthernet0
         self.logger.info("Deleting BondEthernet0")
         bond0.remove_vpp_config()
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index f50f05c..0187552 100644 (file)
@@ -4,7 +4,7 @@ from framework import VppTestCase
 
 
 class TestBuffers(VppTestCase):
 
 
 class TestBuffers(VppTestCase):
-    """ Buffer C Unit Tests """
+    """Buffer C Unit Tests"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -21,9 +21,9 @@ class TestBuffers(VppTestCase):
         super(TestBuffers, self).tearDown()
 
     def test_linearize(self):
         super(TestBuffers, self).tearDown()
 
     def test_linearize(self):
-        """ Chained Buffer Linearization """
+        """Chained Buffer Linearization"""
         error = self.vapi.cli("test chained-buffer-linearization")
 
         if error:
             self.logger.critical(error)
         error = self.vapi.cli("test chained-buffer-linearization")
 
         if error:
             self.logger.critical(error)
-            self.assertNotIn('failed', error)
+            self.assertNotIn("failed", error)
index 46751e8..da378db 100644 (file)
@@ -4,8 +4,13 @@
 from scapy.packet import Packet
 from scapy.all import ShortField, StrField
 from scapy.layers.l2 import Dot3, LLC, SNAP
 from scapy.packet import Packet
 from scapy.all import ShortField, StrField
 from scapy.layers.l2 import Dot3, LLC, SNAP
-from scapy.contrib.cdp import CDPMsgDeviceID, CDPMsgSoftwareVersion, \
-        CDPMsgPlatform, CDPMsgPortID, CDPv2_HDR
+from scapy.contrib.cdp import (
+    CDPMsgDeviceID,
+    CDPMsgSoftwareVersion,
+    CDPMsgPlatform,
+    CDPMsgPortID,
+    CDPv2_HDR,
+)
 
 from framework import VppTestCase
 from scapy.all import raw
 
 from framework import VppTestCase
 from scapy.all import raw
@@ -25,18 +30,17 @@ CDP test.
 
 
 class CustomTLV(Packet):
 
 
 class CustomTLV(Packet):
-    """ Custom TLV protocol layer for scapy """
+    """Custom TLV protocol layer for scapy"""
 
     fields_desc = [
         ShortField("type", 0),
         ShortField("length", 4),
 
     fields_desc = [
         ShortField("type", 0),
         ShortField("length", 4),
-        StrField("value", "")
-
+        StrField("value", ""),
     ]
 
 
 class TestCDP(VppTestCase):
     ]
 
 
 class TestCDP(VppTestCase):
-    """ CDP Test Case """
+    """CDP Test Case"""
 
     nen_ptr = compile(r"not enabled")
     cdp_ptr = compile(r"^([-\.\w]+)\s+([-\.\w]+)\s+([-\.\w]+)\s+([-\.\w]+)$")
 
     nen_ptr = compile(r"not enabled")
     cdp_ptr = compile(r"^([-\.\w]+)\s+([-\.\w]+)\s+([-\.\w]+)\s+([-\.\w]+)$")
@@ -95,8 +99,9 @@ class TestCDP(VppTestCase):
         length = min(len(system), len(self.device_id))
 
         self.assert_equal(port, self.port_id, "CDP received invalid port id")
         length = min(len(system), len(self.device_id))
 
         self.assert_equal(port, self.port_id, "CDP received invalid port id")
-        self.assert_equal(system[:length], self.device_id[:length],
-                          "CDP received invalid device id")
+        self.assert_equal(
+            system[:length], self.device_id[:length], "CDP received invalid device id"
+        )
 
     def test_cdp_underflow_tlv(self):
         self.send_bad_packet(3, ".")
 
     def test_cdp_underflow_tlv(self):
         self.send_bad_packet(3, ".")
@@ -109,7 +114,8 @@ class TestCDP(VppTestCase):
         self.send_packet(self.create_bad_packet(l, v))
 
         err = self.statistics.get_err_counter(
         self.send_packet(self.create_bad_packet(l, v))
 
         err = self.statistics.get_err_counter(
-            '/err/cdp-input/cdp packets with bad TLVs')
+            "/err/cdp-input/cdp packets with bad TLVs"
+        )
         self.assertTrue(err >= 1, "CDP didn't drop bad packet")
 
     def send_packet(self, packet):
         self.assertTrue(err >= 1, "CDP didn't drop bad packet")
 
     def send_packet(self, packet):
@@ -118,29 +124,30 @@ class TestCDP(VppTestCase):
         self.pg_start()
 
     def create_base_packet(self):
         self.pg_start()
 
     def create_base_packet(self):
-        packet = (Dot3(src=self.interface.remote_mac,
-                       dst="01:00:0c:cc:cc:cc") /
-                  LLC(dsap=0xaa, ssap=0xaa, ctrl=0x03) /
-                  SNAP()/CDPv2_HDR())
+        packet = (
+            Dot3(src=self.interface.remote_mac, dst="01:00:0c:cc:cc:cc")
+            / LLC(dsap=0xAA, ssap=0xAA, ctrl=0x03)
+            / SNAP()
+            / CDPv2_HDR()
+        )
         return packet
 
     def create_packet(self):
         return packet
 
     def create_packet(self):
-        packet = (self.create_base_packet() /
-                  CDPMsgDeviceID(val=self.device_id) /
-                  CDPMsgSoftwareVersion(val=self.version) /
-                  CDPMsgPortID(iface=self.port_id) /
-                  CDPMsgPlatform(val=self.platform))
+        packet = (
+            self.create_base_packet()
+            / CDPMsgDeviceID(val=self.device_id)
+            / CDPMsgSoftwareVersion(val=self.version)
+            / CDPMsgPortID(iface=self.port_id)
+            / CDPMsgPlatform(val=self.platform)
+        )
         return packet
 
     def create_bad_packet(self, tl=4, tv=""):
         return packet
 
     def create_bad_packet(self, tl=4, tv=""):
-        packet = (self.create_base_packet() /
-                  CustomTLV(type=1,
-                            length=tl,
-                            value=tv))
+        packet = self.create_base_packet() / CustomTLV(type=1, length=tl, value=tv)
         return packet
 
     def process_cli(self, exp, ptr):
         return packet
 
     def process_cli(self, exp, ptr):
-        for line in self.vapi.cli(exp).split('\n')[1:]:
+        for line in self.vapi.cli(exp).split("\n")[1:]:
             m = ptr.match(line.strip())
             if m:
                 yield m.groups()
             m = ptr.match(line.strip())
             if m:
                 yield m.groups()
index 9f0fdbf..0685612 100644 (file)
@@ -19,7 +19,7 @@ from vpp_papi import VppEnum
 # Tests split to different test case classes because of issue reported in
 # ticket VPP-1336
 class TestClassifierIP(TestClassifier):
 # Tests split to different test case classes because of issue reported in
 # ticket VPP-1336
 class TestClassifierIP(TestClassifier):
-    """ Classifier IP Test Case """
+    """Classifier IP Test Case"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -30,7 +30,7 @@ class TestClassifierIP(TestClassifier):
         super(TestClassifierIP, cls).tearDownClass()
 
     def test_iacl_src_ip(self):
         super(TestClassifierIP, cls).tearDownClass()
 
     def test_iacl_src_ip(self):
-        """ Source IP iACL test
+        """Source IP iACL test
 
         Test scenario for basic IP ACL with source IP
             - Create IPv4 stream for pg0 -> pg1 interface.
 
         Test scenario for basic IP ACL with source IP
             - Create IPv4 stream for pg0 -> pg1 interface.
@@ -42,11 +42,11 @@ class TestClassifierIP(TestClassifier):
         pkts = self.create_stream(self.pg0, self.pg1, self.pg_if_packet_sizes)
         self.pg0.add_stream(pkts)
 
         pkts = self.create_stream(self.pg0, self.pg1, self.pg_if_packet_sizes)
         self.pg0.add_stream(pkts)
 
-        key = 'ip_src'
-        self.create_classify_table(key, self.build_ip_mask(src_ip='ffffffff'))
+        key = "ip_src"
+        self.create_classify_table(key, self.build_ip_mask(src_ip="ffffffff"))
         self.create_classify_session(
         self.create_classify_session(
-            self.acl_tbl_idx.get(key),
-            self.build_ip_match(src_ip=self.pg0.remote_ip4))
+            self.acl_tbl_idx.get(key), self.build_ip_match(src_ip=self.pg0.remote_ip4)
+        )
         self.input_acl_set_interface(self.pg0, self.acl_tbl_idx.get(key))
         self.acl_active_table = key
 
         self.input_acl_set_interface(self.pg0, self.acl_tbl_idx.get(key))
         self.acl_active_table = key
 
@@ -60,7 +60,7 @@ class TestClassifierIP(TestClassifier):
         self.pg3.assert_nothing_captured(remark="packets forwarded")
 
     def test_iacl_dst_ip(self):
         self.pg3.assert_nothing_captured(remark="packets forwarded")
 
     def test_iacl_dst_ip(self):
-        """ Destination IP iACL test
+        """Destination IP iACL test
 
         Test scenario for basic IP ACL with destination IP
             - Create IPv4 stream for pg0 -> pg1 interface.
 
         Test scenario for basic IP ACL with destination IP
             - Create IPv4 stream for pg0 -> pg1 interface.
@@ -72,11 +72,11 @@ class TestClassifierIP(TestClassifier):
         pkts = self.create_stream(self.pg0, self.pg1, self.pg_if_packet_sizes)
         self.pg0.add_stream(pkts)
 
         pkts = self.create_stream(self.pg0, self.pg1, self.pg_if_packet_sizes)
         self.pg0.add_stream(pkts)
 
-        key = 'ip_dst'
-        self.create_classify_table(key, self.build_ip_mask(dst_ip='ffffffff'))
+        key = "ip_dst"
+        self.create_classify_table(key, self.build_ip_mask(dst_ip="ffffffff"))
         self.create_classify_session(
         self.create_classify_session(
-            self.acl_tbl_idx.get(key),
-            self.build_ip_match(dst_ip=self.pg1.remote_ip4))
+            self.acl_tbl_idx.get(key), self.build_ip_match(dst_ip=self.pg1.remote_ip4)
+        )
         self.input_acl_set_interface(self.pg0, self.acl_tbl_idx.get(key))
         self.acl_active_table = key
 
         self.input_acl_set_interface(self.pg0, self.acl_tbl_idx.get(key))
         self.acl_active_table = key
 
@@ -90,7 +90,7 @@ class TestClassifierIP(TestClassifier):
         self.pg3.assert_nothing_captured(remark="packets forwarded")
 
     def test_iacl_src_dst_ip(self):
         self.pg3.assert_nothing_captured(remark="packets forwarded")
 
     def test_iacl_src_dst_ip(self):
-        """ Source and destination IP iACL test
+        """Source and destination IP iACL test
 
         Test scenario for basic IP ACL with source and destination IP
             - Create IPv4 stream for pg0 -> pg1 interface.
 
         Test scenario for basic IP ACL with source and destination IP
             - Create IPv4 stream for pg0 -> pg1 interface.
@@ -102,13 +102,14 @@ class TestClassifierIP(TestClassifier):
         pkts = self.create_stream(self.pg0, self.pg1, self.pg_if_packet_sizes)
         self.pg0.add_stream(pkts)
 
         pkts = self.create_stream(self.pg0, self.pg1, self.pg_if_packet_sizes)
         self.pg0.add_stream(pkts)
 
-        key = 'ip'
+        key = "ip"
         self.create_classify_table(
         self.create_classify_table(
-            key, self.build_ip_mask(src_ip='ffffffff', dst_ip='ffffffff'))
+            key, self.build_ip_mask(src_ip="ffffffff", dst_ip="ffffffff")
+        )
         self.create_classify_session(
             self.acl_tbl_idx.get(key),
         self.create_classify_session(
             self.acl_tbl_idx.get(key),
-            self.build_ip_match(src_ip=self.pg0.remote_ip4,
-                                dst_ip=self.pg1.remote_ip4))
+            self.build_ip_match(src_ip=self.pg0.remote_ip4, dst_ip=self.pg1.remote_ip4),
+        )
         self.input_acl_set_interface(self.pg0, self.acl_tbl_idx.get(key))
         self.acl_active_table = key
 
         self.input_acl_set_interface(self.pg0, self.acl_tbl_idx.get(key))
         self.acl_active_table = key
 
@@ -123,7 +124,7 @@ class TestClassifierIP(TestClassifier):
 
 
 class TestClassifierUDP(TestClassifier):
 
 
 class TestClassifierUDP(TestClassifier):
-    """ Classifier UDP proto Test Case """
+    """Classifier UDP proto Test Case"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -134,7 +135,7 @@ class TestClassifierUDP(TestClassifier):
         super(TestClassifierUDP, cls).tearDownClass()
 
     def test_iacl_proto_udp(self):
         super(TestClassifierUDP, cls).tearDownClass()
 
     def test_iacl_proto_udp(self):
-        """ UDP protocol iACL test
+        """UDP protocol iACL test
 
         Test scenario for basic protocol ACL with UDP protocol
             - Create IPv4 stream for pg0 -> pg1 interface.
 
         Test scenario for basic protocol ACL with UDP protocol
             - Create IPv4 stream for pg0 -> pg1 interface.
@@ -146,13 +147,12 @@ class TestClassifierUDP(TestClassifier):
         pkts = self.create_stream(self.pg0, self.pg1, self.pg_if_packet_sizes)
         self.pg0.add_stream(pkts)
 
         pkts = self.create_stream(self.pg0, self.pg1, self.pg_if_packet_sizes)
         self.pg0.add_stream(pkts)
 
-        key = 'proto_udp'
-        self.create_classify_table(key, self.build_ip_mask(proto='ff'))
+        key = "proto_udp"
+        self.create_classify_table(key, self.build_ip_mask(proto="ff"))
         self.create_classify_session(
         self.create_classify_session(
-            self.acl_tbl_idx.get(key),
-            self.build_ip_match(proto=socket.IPPROTO_UDP))
-        self.input_acl_set_interface(
-            self.pg0, self.acl_tbl_idx.get(key))
+            self.acl_tbl_idx.get(key), self.build_ip_match(proto=socket.IPPROTO_UDP)
+        )
+        self.input_acl_set_interface(self.pg0, self.acl_tbl_idx.get(key))
         self.acl_active_table = key
 
         self.pg_enable_capture(self.pg_interfaces)
         self.acl_active_table = key
 
         self.pg_enable_capture(self.pg_interfaces)
@@ -165,7 +165,7 @@ class TestClassifierUDP(TestClassifier):
         self.pg3.assert_nothing_captured(remark="packets forwarded")
 
     def test_iacl_proto_udp_sport(self):
         self.pg3.assert_nothing_captured(remark="packets forwarded")
 
     def test_iacl_proto_udp_sport(self):
-        """ UDP source port iACL test
+        """UDP source port iACL test
 
         Test scenario for basic protocol ACL with UDP and sport
             - Create IPv4 stream for pg0 -> pg1 interface.
 
         Test scenario for basic protocol ACL with UDP and sport
             - Create IPv4 stream for pg0 -> pg1 interface.
@@ -175,18 +175,18 @@ class TestClassifierUDP(TestClassifier):
 
         # Basic iACL testing with UDP and sport
         sport = 38
 
         # Basic iACL testing with UDP and sport
         sport = 38
-        pkts = self.create_stream(self.pg0, self.pg1, self.pg_if_packet_sizes,
-                                  UDP(sport=sport, dport=5678))
+        pkts = self.create_stream(
+            self.pg0, self.pg1, self.pg_if_packet_sizes, UDP(sport=sport, dport=5678)
+        )
         self.pg0.add_stream(pkts)
 
         self.pg0.add_stream(pkts)
 
-        key = 'proto_udp_sport'
-        self.create_classify_table(
-            key, self.build_ip_mask(proto='ff', src_port='ffff'))
+        key = "proto_udp_sport"
+        self.create_classify_table(key, self.build_ip_mask(proto="ff", src_port="ffff"))
         self.create_classify_session(
             self.acl_tbl_idx.get(key),
         self.create_classify_session(
             self.acl_tbl_idx.get(key),
-            self.build_ip_match(proto=socket.IPPROTO_UDP, src_port=sport))
-        self.input_acl_set_interface(
-            self.pg0, self.acl_tbl_idx.get(key))
+            self.build_ip_match(proto=socket.IPPROTO_UDP, src_port=sport),
+        )
+        self.input_acl_set_interface(self.pg0, self.acl_tbl_idx.get(key))
         self.acl_active_table = key
 
         self.pg_enable_capture(self.pg_interfaces)
         self.acl_active_table = key
 
         self.pg_enable_capture(self.pg_interfaces)
@@ -199,7 +199,7 @@ class TestClassifierUDP(TestClassifier):
         self.pg3.assert_nothing_captured(remark="packets forwarded")
 
     def test_iacl_proto_udp_dport(self):
         self.pg3.assert_nothing_captured(remark="packets forwarded")
 
     def test_iacl_proto_udp_dport(self):
-        """ UDP destination port iACL test
+        """UDP destination port iACL test
 
         Test scenario for basic protocol ACL with UDP and dport
             - Create IPv4 stream for pg0 -> pg1 interface.
 
         Test scenario for basic protocol ACL with UDP and dport
             - Create IPv4 stream for pg0 -> pg1 interface.
@@ -209,18 +209,18 @@ class TestClassifierUDP(TestClassifier):
 
         # Basic iACL testing with UDP and dport
         dport = 427
 
         # Basic iACL testing with UDP and dport
         dport = 427
-        pkts = self.create_stream(self.pg0, self.pg1, self.pg_if_packet_sizes,
-                                  UDP(sport=1234, dport=dport))
+        pkts = self.create_stream(
+            self.pg0, self.pg1, self.pg_if_packet_sizes, UDP(sport=1234, dport=dport)
+        )
         self.pg0.add_stream(pkts)
 
         self.pg0.add_stream(pkts)
 
-        key = 'proto_udp_dport'
-        self.create_classify_table(
-            key, self.build_ip_mask(proto='ff', dst_port='ffff'))
+        key = "proto_udp_dport"
+        self.create_classify_table(key, self.build_ip_mask(proto="ff", dst_port="ffff"))
         self.create_classify_session(
             self.acl_tbl_idx.get(key),
         self.create_classify_session(
             self.acl_tbl_idx.get(key),
-            self.build_ip_match(proto=socket.IPPROTO_UDP, dst_port=dport))
-        self.input_acl_set_interface(
-            self.pg0, self.acl_tbl_idx.get(key))
+            self.build_ip_match(proto=socket.IPPROTO_UDP, dst_port=dport),
+        )
+        self.input_acl_set_interface(self.pg0, self.acl_tbl_idx.get(key))
         self.acl_active_table = key
 
         self.pg_enable_capture(self.pg_interfaces)
         self.acl_active_table = key
 
         self.pg_enable_capture(self.pg_interfaces)
@@ -233,7 +233,7 @@ class TestClassifierUDP(TestClassifier):
         self.pg3.assert_nothing_captured(remark="packets forwarded")
 
     def test_iacl_proto_udp_sport_dport(self):
         self.pg3.assert_nothing_captured(remark="packets forwarded")
 
     def test_iacl_proto_udp_sport_dport(self):
-        """ UDP source and destination ports iACL test
+        """UDP source and destination ports iACL test
 
         Test scenario for basic protocol ACL with UDP and sport and dport
             - Create IPv4 stream for pg0 -> pg1 interface.
 
         Test scenario for basic protocol ACL with UDP and sport and dport
             - Create IPv4 stream for pg0 -> pg1 interface.
@@ -244,20 +244,22 @@ class TestClassifierUDP(TestClassifier):
         # Basic iACL testing with UDP and sport and dport
         sport = 13720
         dport = 9080
         # Basic iACL testing with UDP and sport and dport
         sport = 13720
         dport = 9080
-        pkts = self.create_stream(self.pg0, self.pg1, self.pg_if_packet_sizes,
-                                  UDP(sport=sport, dport=dport))
+        pkts = self.create_stream(
+            self.pg0, self.pg1, self.pg_if_packet_sizes, UDP(sport=sport, dport=dport)
+        )
         self.pg0.add_stream(pkts)
 
         self.pg0.add_stream(pkts)
 
-        key = 'proto_udp_ports'
+        key = "proto_udp_ports"
         self.create_classify_table(
         self.create_classify_table(
-            key,
-            self.build_ip_mask(proto='ff', src_port='ffff', dst_port='ffff'))
+            key, self.build_ip_mask(proto="ff", src_port="ffff", dst_port="ffff")
+        )
         self.create_classify_session(
             self.acl_tbl_idx.get(key),
         self.create_classify_session(
             self.acl_tbl_idx.get(key),
-            self.build_ip_match(proto=socket.IPPROTO_UDP, src_port=sport,
-                                dst_port=dport))
-        self.input_acl_set_interface(
-            self.pg0, self.acl_tbl_idx.get(key))
+            self.build_ip_match(
+                proto=socket.IPPROTO_UDP, src_port=sport, dst_port=dport
+            ),
+        )
+        self.input_acl_set_interface(self.pg0, self.acl_tbl_idx.get(key))
         self.acl_active_table = key
 
         self.pg_enable_capture(self.pg_interfaces)
         self.acl_active_table = key
 
         self.pg_enable_capture(self.pg_interfaces)
@@ -271,7 +273,7 @@ class TestClassifierUDP(TestClassifier):
 
 
 class TestClassifierTCP(TestClassifier):
 
 
 class TestClassifierTCP(TestClassifier):
-    """ Classifier TCP proto Test Case """
+    """Classifier TCP proto Test Case"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -282,7 +284,7 @@ class TestClassifierTCP(TestClassifier):
         super(TestClassifierTCP, cls).tearDownClass()
 
     def test_iacl_proto_tcp(self):
         super(TestClassifierTCP, cls).tearDownClass()
 
     def test_iacl_proto_tcp(self):
-        """ TCP protocol iACL test
+        """TCP protocol iACL test
 
         Test scenario for basic protocol ACL with TCP protocol
             - Create IPv4 stream for pg0 -> pg1 interface.
 
         Test scenario for basic protocol ACL with TCP protocol
             - Create IPv4 stream for pg0 -> pg1 interface.
@@ -291,17 +293,17 @@ class TestClassifierTCP(TestClassifier):
         """
 
         # Basic iACL testing with TCP protocol
         """
 
         # Basic iACL testing with TCP protocol
-        pkts = self.create_stream(self.pg0, self.pg1, self.pg_if_packet_sizes,
-                                  TCP(sport=1234, dport=5678))
+        pkts = self.create_stream(
+            self.pg0, self.pg1, self.pg_if_packet_sizes, TCP(sport=1234, dport=5678)
+        )
         self.pg0.add_stream(pkts)
 
         self.pg0.add_stream(pkts)
 
-        key = 'proto_tcp'
-        self.create_classify_table(key, self.build_ip_mask(proto='ff'))
+        key = "proto_tcp"
+        self.create_classify_table(key, self.build_ip_mask(proto="ff"))
         self.create_classify_session(
         self.create_classify_session(
-            self.acl_tbl_idx.get(key),
-            self.build_ip_match(proto=socket.IPPROTO_TCP))
-        self.input_acl_set_interface(
-            self.pg0, self.acl_tbl_idx.get(key))
+            self.acl_tbl_idx.get(key), self.build_ip_match(proto=socket.IPPROTO_TCP)
+        )
+        self.input_acl_set_interface(self.pg0, self.acl_tbl_idx.get(key))
         self.acl_active_table = key
 
         self.pg_enable_capture(self.pg_interfaces)
         self.acl_active_table = key
 
         self.pg_enable_capture(self.pg_interfaces)
@@ -314,7 +316,7 @@ class TestClassifierTCP(TestClassifier):
         self.pg3.assert_nothing_captured(remark="packets forwarded")
 
     def test_iacl_proto_tcp_sport(self):
         self.pg3.assert_nothing_captured(remark="packets forwarded")
 
     def test_iacl_proto_tcp_sport(self):
-        """ TCP source port iACL test
+        """TCP source port iACL test
 
         Test scenario for basic protocol ACL with TCP and sport
             - Create IPv4 stream for pg0 -> pg1 interface.
 
         Test scenario for basic protocol ACL with TCP and sport
             - Create IPv4 stream for pg0 -> pg1 interface.
@@ -324,18 +326,18 @@ class TestClassifierTCP(TestClassifier):
 
         # Basic iACL testing with TCP and sport
         sport = 38
 
         # Basic iACL testing with TCP and sport
         sport = 38
-        pkts = self.create_stream(self.pg0, self.pg1, self.pg_if_packet_sizes,
-                                  TCP(sport=sport, dport=5678))
+        pkts = self.create_stream(
+            self.pg0, self.pg1, self.pg_if_packet_sizes, TCP(sport=sport, dport=5678)
+        )
         self.pg0.add_stream(pkts)
 
         self.pg0.add_stream(pkts)
 
-        key = 'proto_tcp_sport'
-        self.create_classify_table(
-            key, self.build_ip_mask(proto='ff', src_port='ffff'))
+        key = "proto_tcp_sport"
+        self.create_classify_table(key, self.build_ip_mask(proto="ff", src_port="ffff"))
         self.create_classify_session(
             self.acl_tbl_idx.get(key),
         self.create_classify_session(
             self.acl_tbl_idx.get(key),
-            self.build_ip_match(proto=socket.IPPROTO_TCP, src_port=sport))
-        self.input_acl_set_interface(
-            self.pg0, self.acl_tbl_idx.get(key))
+            self.build_ip_match(proto=socket.IPPROTO_TCP, src_port=sport),
+        )
+        self.input_acl_set_interface(self.pg0, self.acl_tbl_idx.get(key))
         self.acl_active_table = key
 
         self.pg_enable_capture(self.pg_interfaces)
         self.acl_active_table = key
 
         self.pg_enable_capture(self.pg_interfaces)
@@ -348,7 +350,7 @@ class TestClassifierTCP(TestClassifier):
         self.pg3.assert_nothing_captured(remark="packets forwarded")
 
     def test_iacl_proto_tcp_dport(self):
         self.pg3.assert_nothing_captured(remark="packets forwarded")
 
     def test_iacl_proto_tcp_dport(self):
-        """ TCP destination port iACL test
+        """TCP destination port iACL test
 
         Test scenario for basic protocol ACL with TCP and dport
             - Create IPv4 stream for pg0 -> pg1 interface.
 
         Test scenario for basic protocol ACL with TCP and dport
             - Create IPv4 stream for pg0 -> pg1 interface.
@@ -358,18 +360,18 @@ class TestClassifierTCP(TestClassifier):
 
         # Basic iACL testing with TCP and dport
         dport = 427
 
         # Basic iACL testing with TCP and dport
         dport = 427
-        pkts = self.create_stream(self.pg0, self.pg1, self.pg_if_packet_sizes,
-                                  TCP(sport=1234, dport=dport))
+        pkts = self.create_stream(
+            self.pg0, self.pg1, self.pg_if_packet_sizes, TCP(sport=1234, dport=dport)
+        )
         self.pg0.add_stream(pkts)
 
         self.pg0.add_stream(pkts)
 
-        key = 'proto_tcp_sport'
-        self.create_classify_table(
-            key, self.build_ip_mask(proto='ff', dst_port='ffff'))
+        key = "proto_tcp_sport"
+        self.create_classify_table(key, self.build_ip_mask(proto="ff", dst_port="ffff"))
         self.create_classify_session(
             self.acl_tbl_idx.get(key),
         self.create_classify_session(
             self.acl_tbl_idx.get(key),
-            self.build_ip_match(proto=socket.IPPROTO_TCP, dst_port=dport))
-        self.input_acl_set_interface(
-            self.pg0, self.acl_tbl_idx.get(key))
+            self.build_ip_match(proto=socket.IPPROTO_TCP, dst_port=dport),
+        )
+        self.input_acl_set_interface(self.pg0, self.acl_tbl_idx.get(key))
         self.acl_active_table = key
 
         self.pg_enable_capture(self.pg_interfaces)
         self.acl_active_table = key
 
         self.pg_enable_capture(self.pg_interfaces)
@@ -382,7 +384,7 @@ class TestClassifierTCP(TestClassifier):
         self.pg3.assert_nothing_captured(remark="packets forwarded")
 
     def test_iacl_proto_tcp_sport_dport(self):
         self.pg3.assert_nothing_captured(remark="packets forwarded")
 
     def test_iacl_proto_tcp_sport_dport(self):
-        """ TCP source and destination ports iACL test
+        """TCP source and destination ports iACL test
 
         Test scenario for basic protocol ACL with TCP and sport and dport
             - Create IPv4 stream for pg0 -> pg1 interface.
 
         Test scenario for basic protocol ACL with TCP and sport and dport
             - Create IPv4 stream for pg0 -> pg1 interface.
@@ -393,20 +395,22 @@ class TestClassifierTCP(TestClassifier):
         # Basic iACL testing with TCP and sport and dport
         sport = 13720
         dport = 9080
         # Basic iACL testing with TCP and sport and dport
         sport = 13720
         dport = 9080
-        pkts = self.create_stream(self.pg0, self.pg1, self.pg_if_packet_sizes,
-                                  TCP(sport=sport, dport=dport))
+        pkts = self.create_stream(
+            self.pg0, self.pg1, self.pg_if_packet_sizes, TCP(sport=sport, dport=dport)
+        )
         self.pg0.add_stream(pkts)
 
         self.pg0.add_stream(pkts)
 
-        key = 'proto_tcp_ports'
+        key = "proto_tcp_ports"
         self.create_classify_table(
         self.create_classify_table(
-            key,
-            self.build_ip_mask(proto='ff', src_port='ffff', dst_port='ffff'))
+            key, self.build_ip_mask(proto="ff", src_port="ffff", dst_port="ffff")
+        )
         self.create_classify_session(
             self.acl_tbl_idx.get(key),
         self.create_classify_session(
             self.acl_tbl_idx.get(key),
-            self.build_ip_match(proto=socket.IPPROTO_TCP, src_port=sport,
-                                dst_port=dport))
-        self.input_acl_set_interface(
-            self.pg0, self.acl_tbl_idx.get(key))
+            self.build_ip_match(
+                proto=socket.IPPROTO_TCP, src_port=sport, dst_port=dport
+            ),
+        )
+        self.input_acl_set_interface(self.pg0, self.acl_tbl_idx.get(key))
         self.acl_active_table = key
 
         self.pg_enable_capture(self.pg_interfaces)
         self.acl_active_table = key
 
         self.pg_enable_capture(self.pg_interfaces)
@@ -420,7 +424,7 @@ class TestClassifierTCP(TestClassifier):
 
 
 class TestClassifierIPOut(TestClassifier):
 
 
 class TestClassifierIPOut(TestClassifier):
-    """ Classifier output IP Test Case """
+    """Classifier output IP Test Case"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -431,7 +435,7 @@ class TestClassifierIPOut(TestClassifier):
         super(TestClassifierIPOut, cls).tearDownClass()
 
     def test_acl_ip_out(self):
         super(TestClassifierIPOut, cls).tearDownClass()
 
     def test_acl_ip_out(self):
-        """ Output IP ACL test
+        """Output IP ACL test
 
         Test scenario for basic IP ACL with source IP
             - Create IPv4 stream for pg1 -> pg0 interface.
 
         Test scenario for basic IP ACL with source IP
             - Create IPv4 stream for pg1 -> pg0 interface.
@@ -443,12 +447,13 @@ class TestClassifierIPOut(TestClassifier):
         pkts = self.create_stream(self.pg1, self.pg0, self.pg_if_packet_sizes)
         self.pg1.add_stream(pkts)
 
         pkts = self.create_stream(self.pg1, self.pg0, self.pg_if_packet_sizes)
         self.pg1.add_stream(pkts)
 
-        key = 'ip_out'
+        key = "ip_out"
         self.create_classify_table(
         self.create_classify_table(
-            key, self.build_ip_mask(src_ip='ffffffff'), data_offset=0)
+            key, self.build_ip_mask(src_ip="ffffffff"), data_offset=0
+        )
         self.create_classify_session(
         self.create_classify_session(
-            self.acl_tbl_idx.get(key),
-            self.build_ip_match(src_ip=self.pg1.remote_ip4))
+            self.acl_tbl_idx.get(key), self.build_ip_match(src_ip=self.pg1.remote_ip4)
+        )
         self.output_acl_set_interface(self.pg0, self.acl_tbl_idx.get(key))
         self.acl_active_table = key
 
         self.output_acl_set_interface(self.pg0, self.acl_tbl_idx.get(key))
         self.acl_active_table = key
 
@@ -463,7 +468,7 @@ class TestClassifierIPOut(TestClassifier):
 
 
 class TestClassifierMAC(TestClassifier):
 
 
 class TestClassifierMAC(TestClassifier):
-    """ Classifier MAC Test Case """
+    """Classifier MAC Test Case"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -474,7 +479,7 @@ class TestClassifierMAC(TestClassifier):
         super(TestClassifierMAC, cls).tearDownClass()
 
     def test_acl_mac(self):
         super(TestClassifierMAC, cls).tearDownClass()
 
     def test_acl_mac(self):
-        """ MAC ACL test
+        """MAC ACL test
 
         Test scenario for basic MAC ACL with source MAC
             - Create IPv4 stream for pg0 -> pg2 interface.
 
         Test scenario for basic MAC ACL with source MAC
             - Create IPv4 stream for pg0 -> pg2 interface.
@@ -486,12 +491,13 @@ class TestClassifierMAC(TestClassifier):
         pkts = self.create_stream(self.pg0, self.pg2, self.pg_if_packet_sizes)
         self.pg0.add_stream(pkts)
 
         pkts = self.create_stream(self.pg0, self.pg2, self.pg_if_packet_sizes)
         self.pg0.add_stream(pkts)
 
-        key = 'mac'
+        key = "mac"
         self.create_classify_table(
         self.create_classify_table(
-            key, self.build_mac_mask(src_mac='ffffffffffff'), data_offset=-14)
+            key, self.build_mac_mask(src_mac="ffffffffffff"), data_offset=-14
+        )
         self.create_classify_session(
         self.create_classify_session(
-            self.acl_tbl_idx.get(key),
-            self.build_mac_match(src_mac=self.pg0.remote_mac))
+            self.acl_tbl_idx.get(key), self.build_mac_match(src_mac=self.pg0.remote_mac)
+        )
         self.input_acl_set_interface(self.pg0, self.acl_tbl_idx.get(key))
         self.acl_active_table = key
 
         self.input_acl_set_interface(self.pg0, self.acl_tbl_idx.get(key))
         self.acl_active_table = key
 
@@ -506,7 +512,7 @@ class TestClassifierMAC(TestClassifier):
 
 
 class TestClassifierComplex(TestClassifier):
 
 
 class TestClassifierComplex(TestClassifier):
-    """ Large & Nested Classifiers Test Cases """
+    """Large & Nested Classifiers Test Cases"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -517,7 +523,7 @@ class TestClassifierComplex(TestClassifier):
         super(TestClassifierComplex, cls).tearDownClass()
 
     def test_iacl_large(self):
         super(TestClassifierComplex, cls).tearDownClass()
 
     def test_iacl_large(self):
-        """ Large input ACL test
+        """Large input ACL test
 
         Test scenario for Large ACL matching on ethernet+ip+udp headers
             - Create IPv4 stream for pg0 -> pg1 interface.
 
         Test scenario for Large ACL matching on ethernet+ip+udp headers
             - Create IPv4 stream for pg0 -> pg1 interface.
@@ -527,7 +533,7 @@ class TestClassifierComplex(TestClassifier):
 
         # 40b offset = 80bytes - (sizeof(UDP/IP/ETH) + 4b)
         # + 4b as build_ip_ma*() func, do not match against UDP Len & Chksum
 
         # 40b offset = 80bytes - (sizeof(UDP/IP/ETH) + 4b)
         # + 4b as build_ip_ma*() func, do not match against UDP Len & Chksum
-        msk = VarMask(offset=40, spec='ffff')
+        msk = VarMask(offset=40, spec="ffff")
         mth = VarMatch(offset=40, value=0x1234, length=2)
 
         payload_msk = self.build_payload_mask([msk])
         mth = VarMatch(offset=40, value=0x1234, length=2)
 
         payload_msk = self.build_payload_mask([msk])
@@ -537,38 +543,49 @@ class TestClassifierComplex(TestClassifier):
         dport = 9080
 
         # 36b offset = 80bytes - (sizeof(UDP/IP/ETH))
         dport = 9080
 
         # 36b offset = 80bytes - (sizeof(UDP/IP/ETH))
-        packet_ex = bytes.fromhex(('0' * 36) + '1234')
-        pkts = self.create_stream(self.pg0, self.pg1, self.pg_if_packet_sizes,
-                                  UDP(sport=sport, dport=dport),
-                                  packet_ex)
+        packet_ex = bytes.fromhex(("0" * 36) + "1234")
+        pkts = self.create_stream(
+            self.pg0,
+            self.pg1,
+            self.pg_if_packet_sizes,
+            UDP(sport=sport, dport=dport),
+            packet_ex,
+        )
         self.pg0.add_stream(pkts)
 
         self.pg0.add_stream(pkts)
 
-        key = 'large_in'
+        key = "large_in"
         self.create_classify_table(
             key,
         self.create_classify_table(
             key,
-            self.build_mac_mask(src_mac='ffffffffffff',
-                                dst_mac='ffffffffffff',
-                                ether_type='ffff') +
-            self.build_ip_mask(proto='ff',
-                               src_ip='ffffffff',
-                               dst_ip='ffffffff',
-                               src_port='ffff',
-                               dst_port='ffff') +
-            payload_msk,
-            data_offset=-14)
+            self.build_mac_mask(
+                src_mac="ffffffffffff", dst_mac="ffffffffffff", ether_type="ffff"
+            )
+            + self.build_ip_mask(
+                proto="ff",
+                src_ip="ffffffff",
+                dst_ip="ffffffff",
+                src_port="ffff",
+                dst_port="ffff",
+            )
+            + payload_msk,
+            data_offset=-14,
+        )
 
         self.create_classify_session(
             self.acl_tbl_idx.get(key),
 
         self.create_classify_session(
             self.acl_tbl_idx.get(key),
-            self.build_mac_match(src_mac=self.pg0.remote_mac,
-                                 dst_mac=self.pg0.local_mac,
-                                 # ipv4 next header
-                                 ether_type='0800') +
-            self.build_ip_match(proto=socket.IPPROTO_UDP,
-                                src_ip=self.pg0.remote_ip4,
-                                dst_ip=self.pg1.remote_ip4,
-                                src_port=sport,
-                                dst_port=dport) +
-            payload_match
+            self.build_mac_match(
+                src_mac=self.pg0.remote_mac,
+                dst_mac=self.pg0.local_mac,
+                # ipv4 next header
+                ether_type="0800",
+            )
+            + self.build_ip_match(
+                proto=socket.IPPROTO_UDP,
+                src_ip=self.pg0.remote_ip4,
+                dst_ip=self.pg1.remote_ip4,
+                src_port=sport,
+                dst_port=dport,
+            )
+            + payload_match,
         )
 
         self.input_acl_set_interface(self.pg0, self.acl_tbl_idx.get(key))
         )
 
         self.input_acl_set_interface(self.pg0, self.acl_tbl_idx.get(key))
@@ -584,7 +601,7 @@ class TestClassifierComplex(TestClassifier):
         self.pg3.assert_nothing_captured(remark="packets forwarded")
 
     def test_oacl_large(self):
         self.pg3.assert_nothing_captured(remark="packets forwarded")
 
     def test_oacl_large(self):
-        """ Large output ACL test
+        """Large output ACL test
         Test scenario for Large ACL matching on ethernet+ip+udp headers
             - Create IPv4 stream for pg1 -> pg0 interface.
             - Create large acl matching on ethernet+ip+udp header fields
         Test scenario for Large ACL matching on ethernet+ip+udp headers
             - Create IPv4 stream for pg1 -> pg0 interface.
             - Create large acl matching on ethernet+ip+udp header fields
@@ -593,7 +610,7 @@ class TestClassifierComplex(TestClassifier):
 
         # 40b offset = 80bytes - (sizeof(UDP/IP/ETH) + 4b)
         # + 4b as build_ip_ma*() func, do not match against UDP Len & Chksum
 
         # 40b offset = 80bytes - (sizeof(UDP/IP/ETH) + 4b)
         # + 4b as build_ip_ma*() func, do not match against UDP Len & Chksum
-        msk = VarMask(offset=40, spec='ffff')
+        msk = VarMask(offset=40, spec="ffff")
         mth = VarMatch(offset=40, value=0x1234, length=2)
 
         payload_msk = self.build_payload_mask([msk])
         mth = VarMatch(offset=40, value=0x1234, length=2)
 
         payload_msk = self.build_payload_mask([msk])
@@ -603,38 +620,50 @@ class TestClassifierComplex(TestClassifier):
         dport = 9080
 
         # 36b offset = 80bytes - (sizeof(UDP/IP/ETH))
         dport = 9080
 
         # 36b offset = 80bytes - (sizeof(UDP/IP/ETH))
-        packet_ex = bytes.fromhex(('0' * 36) + '1234')
-        pkts = self.create_stream(self.pg1, self.pg0, self.pg_if_packet_sizes,
-                                  UDP(sport=sport, dport=dport),
-                                  packet_ex)
+        packet_ex = bytes.fromhex(("0" * 36) + "1234")
+        pkts = self.create_stream(
+            self.pg1,
+            self.pg0,
+            self.pg_if_packet_sizes,
+            UDP(sport=sport, dport=dport),
+            packet_ex,
+        )
         self.pg1.add_stream(pkts)
 
         self.pg1.add_stream(pkts)
 
-        key = 'large_out'
+        key = "large_out"
         self.create_classify_table(
             key,
         self.create_classify_table(
             key,
-            self.build_mac_mask(src_mac='ffffffffffff',
-                                dst_mac='ffffffffffff',
-                                ether_type='ffff') +
-            self.build_ip_mask(proto='ff',
-                               src_ip='ffffffff',
-                               dst_ip='ffffffff',
-                               src_port='ffff',
-                               dst_port='ffff') +
-            payload_msk,
-            data_offset=-14)
+            self.build_mac_mask(
+                src_mac="ffffffffffff", dst_mac="ffffffffffff", ether_type="ffff"
+            )
+            + self.build_ip_mask(
+                proto="ff",
+                src_ip="ffffffff",
+                dst_ip="ffffffff",
+                src_port="ffff",
+                dst_port="ffff",
+            )
+            + payload_msk,
+            data_offset=-14,
+        )
 
         self.create_classify_session(
             self.acl_tbl_idx.get(key),
 
         self.create_classify_session(
             self.acl_tbl_idx.get(key),
-            self.build_mac_match(src_mac=self.pg0.local_mac,
-                                 dst_mac=self.pg0.remote_mac,
-                                 # ipv4 next header
-                                 ether_type='0800') +
-            self.build_ip_match(proto=socket.IPPROTO_UDP,
-                                src_ip=self.pg1.remote_ip4,
-                                dst_ip=self.pg0.remote_ip4,
-                                src_port=sport,
-                                dst_port=dport) +
-            payload_match)
+            self.build_mac_match(
+                src_mac=self.pg0.local_mac,
+                dst_mac=self.pg0.remote_mac,
+                # ipv4 next header
+                ether_type="0800",
+            )
+            + self.build_ip_match(
+                proto=socket.IPPROTO_UDP,
+                src_ip=self.pg1.remote_ip4,
+                dst_ip=self.pg0.remote_ip4,
+                src_port=sport,
+                dst_port=dport,
+            )
+            + payload_match,
+        )
 
         self.output_acl_set_interface(self.pg0, self.acl_tbl_idx.get(key))
         self.acl_active_table = key
 
         self.output_acl_set_interface(self.pg0, self.acl_tbl_idx.get(key))
         self.acl_active_table = key
@@ -649,7 +678,7 @@ class TestClassifierComplex(TestClassifier):
         self.pg3.assert_nothing_captured(remark="packets forwarded")
 
     def test_iacl_nested(self):
         self.pg3.assert_nothing_captured(remark="packets forwarded")
 
     def test_iacl_nested(self):
-        """ Nested input ACL test
+        """Nested input ACL test
 
         Test scenario for Large ACL matching on ethernet+ip+udp headers
             - Create IPv4 stream for pg0 -> pg1 interface.
 
         Test scenario for Large ACL matching on ethernet+ip+udp headers
             - Create IPv4 stream for pg0 -> pg1 interface.
@@ -660,48 +689,60 @@ class TestClassifierComplex(TestClassifier):
 
         sport = 13720
         dport = 9080
 
         sport = 13720
         dport = 9080
-        pkts = self.create_stream(self.pg0, self.pg1, self.pg_if_packet_sizes,
-                                  UDP(sport=sport, dport=dport))
+        pkts = self.create_stream(
+            self.pg0, self.pg1, self.pg_if_packet_sizes, UDP(sport=sport, dport=dport)
+        )
 
         self.pg0.add_stream(pkts)
 
 
         self.pg0.add_stream(pkts)
 
-        subtable_key = 'subtable_in'
+        subtable_key = "subtable_in"
         self.create_classify_table(
             subtable_key,
         self.create_classify_table(
             subtable_key,
-            self.build_mac_mask(src_mac='ffffffffffff',
-                                dst_mac='ffffffffffff',
-                                ether_type='ffff') +
-            self.build_ip_mask(proto='ff',
-                               src_ip='ffffffff',
-                               dst_ip='ffffffff',
-                               src_port='ffff',
-                               dst_port='ffff'),
-            data_offset=-14)
-
-        key = 'nested_in'
+            self.build_mac_mask(
+                src_mac="ffffffffffff", dst_mac="ffffffffffff", ether_type="ffff"
+            )
+            + self.build_ip_mask(
+                proto="ff",
+                src_ip="ffffffff",
+                dst_ip="ffffffff",
+                src_port="ffff",
+                dst_port="ffff",
+            ),
+            data_offset=-14,
+        )
+
+        key = "nested_in"
         self.create_classify_table(
             key,
         self.create_classify_table(
             key,
-            self.build_mac_mask(src_mac='ffffffffffff',
-                                dst_mac='ffffffffffff',
-                                ether_type='ffff') +
-            self.build_ip_mask(proto='ff',
-                               src_ip='ffffffff',
-                               dst_ip='ffffffff',
-                               src_port='ffff',
-                               dst_port='ffff'),
-            next_table_index=self.acl_tbl_idx.get(subtable_key))
+            self.build_mac_mask(
+                src_mac="ffffffffffff", dst_mac="ffffffffffff", ether_type="ffff"
+            )
+            + self.build_ip_mask(
+                proto="ff",
+                src_ip="ffffffff",
+                dst_ip="ffffffff",
+                src_port="ffff",
+                dst_port="ffff",
+            ),
+            next_table_index=self.acl_tbl_idx.get(subtable_key),
+        )
 
         self.create_classify_session(
             self.acl_tbl_idx.get(subtable_key),
 
         self.create_classify_session(
             self.acl_tbl_idx.get(subtable_key),
-            self.build_mac_match(src_mac=self.pg0.remote_mac,
-                                 dst_mac=self.pg0.local_mac,
-                                 # ipv4 next header
-                                 ether_type='0800') +
-            self.build_ip_match(proto=socket.IPPROTO_UDP,
-                                src_ip=self.pg0.remote_ip4,
-                                dst_ip=self.pg1.remote_ip4,
-                                src_port=sport,
-                                dst_port=dport))
+            self.build_mac_match(
+                src_mac=self.pg0.remote_mac,
+                dst_mac=self.pg0.local_mac,
+                # ipv4 next header
+                ether_type="0800",
+            )
+            + self.build_ip_match(
+                proto=socket.IPPROTO_UDP,
+                src_ip=self.pg0.remote_ip4,
+                dst_ip=self.pg1.remote_ip4,
+                src_port=sport,
+                dst_port=dport,
+            ),
+        )
 
         self.input_acl_set_interface(self.pg0, self.acl_tbl_idx.get(key))
         self.acl_active_table = key
 
         self.input_acl_set_interface(self.pg0, self.acl_tbl_idx.get(key))
         self.acl_active_table = key
@@ -716,7 +757,7 @@ class TestClassifierComplex(TestClassifier):
         self.pg3.assert_nothing_captured(remark="packets forwarded")
 
     def test_oacl_nested(self):
         self.pg3.assert_nothing_captured(remark="packets forwarded")
 
     def test_oacl_nested(self):
-        """ Nested output ACL test
+        """Nested output ACL test
 
         Test scenario for Large ACL matching on ethernet+ip+udp headers
             - Create IPv4 stream for pg1 -> pg0 interface.
 
         Test scenario for Large ACL matching on ethernet+ip+udp headers
             - Create IPv4 stream for pg1 -> pg0 interface.
@@ -727,48 +768,60 @@ class TestClassifierComplex(TestClassifier):
 
         sport = 13720
         dport = 9080
 
         sport = 13720
         dport = 9080
-        pkts = self.create_stream(self.pg1, self.pg0, self.pg_if_packet_sizes,
-                                  UDP(sport=sport, dport=dport))
+        pkts = self.create_stream(
+            self.pg1, self.pg0, self.pg_if_packet_sizes, UDP(sport=sport, dport=dport)
+        )
         self.pg1.add_stream(pkts)
 
         self.pg1.add_stream(pkts)
 
-        subtable_key = 'subtable_out'
+        subtable_key = "subtable_out"
         self.create_classify_table(
             subtable_key,
         self.create_classify_table(
             subtable_key,
-            self.build_mac_mask(src_mac='ffffffffffff',
-                                dst_mac='ffffffffffff',
-                                ether_type='ffff') +
-            self.build_ip_mask(proto='ff',
-                               src_ip='ffffffff',
-                               dst_ip='ffffffff',
-                               src_port='ffff',
-                               dst_port='ffff'),
-            data_offset=-14)
-
-        key = 'nested_out'
+            self.build_mac_mask(
+                src_mac="ffffffffffff", dst_mac="ffffffffffff", ether_type="ffff"
+            )
+            + self.build_ip_mask(
+                proto="ff",
+                src_ip="ffffffff",
+                dst_ip="ffffffff",
+                src_port="ffff",
+                dst_port="ffff",
+            ),
+            data_offset=-14,
+        )
+
+        key = "nested_out"
         self.create_classify_table(
             key,
         self.create_classify_table(
             key,
-            self.build_mac_mask(src_mac='ffffffffffff',
-                                dst_mac='ffffffffffff',
-                                ether_type='ffff') +
-            self.build_ip_mask(proto='ff',
-                               src_ip='ffffffff',
-                               dst_ip='ffffffff',
-                               src_port='ffff',
-                               dst_port='ffff'),
+            self.build_mac_mask(
+                src_mac="ffffffffffff", dst_mac="ffffffffffff", ether_type="ffff"
+            )
+            + self.build_ip_mask(
+                proto="ff",
+                src_ip="ffffffff",
+                dst_ip="ffffffff",
+                src_port="ffff",
+                dst_port="ffff",
+            ),
             next_table_index=self.acl_tbl_idx.get(subtable_key),
             next_table_index=self.acl_tbl_idx.get(subtable_key),
-            data_offset=-14)
+            data_offset=-14,
+        )
 
         self.create_classify_session(
             self.acl_tbl_idx.get(subtable_key),
 
         self.create_classify_session(
             self.acl_tbl_idx.get(subtable_key),
-            self.build_mac_match(src_mac=self.pg0.local_mac,
-                                 dst_mac=self.pg0.remote_mac,
-                                 # ipv4 next header
-                                 ether_type='0800') +
-            self.build_ip_match(proto=socket.IPPROTO_UDP,
-                                src_ip=self.pg1.remote_ip4,
-                                dst_ip=self.pg0.remote_ip4,
-                                src_port=sport,
-                                dst_port=dport))
+            self.build_mac_match(
+                src_mac=self.pg0.local_mac,
+                dst_mac=self.pg0.remote_mac,
+                # ipv4 next header
+                ether_type="0800",
+            )
+            + self.build_ip_match(
+                proto=socket.IPPROTO_UDP,
+                src_ip=self.pg1.remote_ip4,
+                dst_ip=self.pg0.remote_ip4,
+                src_port=sport,
+                dst_port=dport,
+            ),
+        )
 
         self.output_acl_set_interface(self.pg0, self.acl_tbl_idx.get(key))
         self.acl_active_table = key
 
         self.output_acl_set_interface(self.pg0, self.acl_tbl_idx.get(key))
         self.acl_active_table = key
@@ -784,7 +837,7 @@ class TestClassifierComplex(TestClassifier):
 
 
 class TestClassifierPBR(TestClassifier):
 
 
 class TestClassifierPBR(TestClassifier):
-    """ Classifier PBR Test Case """
+    """Classifier PBR Test Case"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -795,7 +848,7 @@ class TestClassifierPBR(TestClassifier):
         super(TestClassifierPBR, cls).tearDownClass()
 
     def test_acl_pbr(self):
         super(TestClassifierPBR, cls).tearDownClass()
 
     def test_acl_pbr(self):
-        """ IP PBR test
+        """IP PBR test
 
         Test scenario for PBR with source IP
             - Create IPv4 stream for pg0 -> pg3 interface.
 
         Test scenario for PBR with source IP
             - Create IPv4 stream for pg0 -> pg3 interface.
@@ -807,19 +860,24 @@ class TestClassifierPBR(TestClassifier):
         pkts = self.create_stream(self.pg0, self.pg3, self.pg_if_packet_sizes)
         self.pg0.add_stream(pkts)
 
         pkts = self.create_stream(self.pg0, self.pg3, self.pg_if_packet_sizes)
         self.pg0.add_stream(pkts)
 
-        key = 'pbr'
-        self.create_classify_table(key, self.build_ip_mask(src_ip='ffffffff'))
+        key = "pbr"
+        self.create_classify_table(key, self.build_ip_mask(src_ip="ffffffff"))
         pbr_option = 1
         # this will create the VRF/table in which we will insert the route
         self.create_classify_session(
             self.acl_tbl_idx.get(key),
             self.build_ip_match(src_ip=self.pg0.remote_ip4),
         pbr_option = 1
         # this will create the VRF/table in which we will insert the route
         self.create_classify_session(
             self.acl_tbl_idx.get(key),
             self.build_ip_match(src_ip=self.pg0.remote_ip4),
-            pbr_option, self.pbr_vrfid)
+            pbr_option,
+            self.pbr_vrfid,
+        )
         self.assertTrue(self.verify_vrf(self.pbr_vrfid))
         self.assertTrue(self.verify_vrf(self.pbr_vrfid))
-        r = VppIpRoute(self, self.pg3.local_ip4, 24,
-                       [VppRoutePath(self.pg3.remote_ip4,
-                                     INVALID_INDEX)],
-                       table_id=self.pbr_vrfid)
+        r = VppIpRoute(
+            self,
+            self.pg3.local_ip4,
+            24,
+            [VppRoutePath(self.pg3.remote_ip4, INVALID_INDEX)],
+            table_id=self.pbr_vrfid,
+        )
         r.add_vpp_config()
 
         self.input_acl_set_interface(self.pg0, self.acl_tbl_idx.get(key))
         r.add_vpp_config()
 
         self.input_acl_set_interface(self.pg0, self.acl_tbl_idx.get(key))
@@ -839,14 +897,17 @@ class TestClassifierPBR(TestClassifier):
         self.create_classify_session(
             self.acl_tbl_idx.get(key),
             self.build_ip_match(src_ip=self.pg0.remote_ip4),
         self.create_classify_session(
             self.acl_tbl_idx.get(key),
             self.build_ip_match(src_ip=self.pg0.remote_ip4),
-            pbr_option, self.pbr_vrfid, is_add=0)
+            pbr_option,
+            self.pbr_vrfid,
+            is_add=0,
+        )
 
         # and the table should be gone.
         self.assertFalse(self.verify_vrf(self.pbr_vrfid))
 
 
 class TestClassifierPunt(TestClassifier):
 
         # and the table should be gone.
         self.assertFalse(self.verify_vrf(self.pbr_vrfid))
 
 
 class TestClassifierPunt(TestClassifier):
-    """ Classifier punt Test Case """
+    """Classifier punt Test Case"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -857,7 +918,7 @@ class TestClassifierPunt(TestClassifier):
         super(TestClassifierPunt, cls).tearDownClass()
 
     def test_punt_udp(self):
         super(TestClassifierPunt, cls).tearDownClass()
 
     def test_punt_udp(self):
-        """ IPv4/UDP protocol punt ACL test
+        """IPv4/UDP protocol punt ACL test
 
         Test scenario for basic punt ACL with UDP protocol
             - Create IPv4 stream for pg0 -> pg1 interface.
 
         Test scenario for basic punt ACL with UDP protocol
             - Create IPv4 stream for pg0 -> pg1 interface.
@@ -868,13 +929,10 @@ class TestClassifierPunt(TestClassifier):
         sport = 6754
         dport = 17923
 
         sport = 6754
         dport = 17923
 
-        key = 'ip4_udp_punt'
+        key = "ip4_udp_punt"
         self.create_classify_table(
         self.create_classify_table(
-            key,
-            self.build_ip_mask(
-                src_ip='ffffffff',
-                proto='ff',
-                src_port='ffff'))
+            key, self.build_ip_mask(src_ip="ffffffff", proto="ff", src_port="ffff")
+        )
         table_index = self.acl_tbl_idx.get(key)
         self.vapi.punt_acl_add_del(ip4_table_index=table_index)
         self.acl_active_table = key
         table_index = self.acl_tbl_idx.get(key)
         self.vapi.punt_acl_add_del(ip4_table_index=table_index)
         self.acl_active_table = key
@@ -883,52 +941,67 @@ class TestClassifierPunt(TestClassifier):
         self.vapi.set_punt(
             is_add=1,
             punt={
         self.vapi.set_punt(
             is_add=1,
             punt={
-                'type': VppEnum.vl_api_punt_type_t.PUNT_API_TYPE_L4,
-                'punt': {
-                    'l4': {
-                        'af': VppEnum.vl_api_address_family_t.ADDRESS_IP4,
-                        'protocol': VppEnum.vl_api_ip_proto_t.IP_API_PROTO_UDP,
-                        'port': dport,
-                    }}})
-        self.vapi.ip_punt_redirect(punt={
-            'rx_sw_if_index': self.pg0.sw_if_index,
-            'tx_sw_if_index': self.pg1.sw_if_index,
-            'nh': self.pg1.remote_ip4,
-        })
-
-        pkts = [(Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-                 IP(src=self.pg0.remote_ip4, dst=self.pg0.local_ip4) /
-                 UDP(sport=sport, dport=dport) /
-                 Raw('\x17' * 100))] * 2
+                "type": VppEnum.vl_api_punt_type_t.PUNT_API_TYPE_L4,
+                "punt": {
+                    "l4": {
+                        "af": VppEnum.vl_api_address_family_t.ADDRESS_IP4,
+                        "protocol": VppEnum.vl_api_ip_proto_t.IP_API_PROTO_UDP,
+                        "port": dport,
+                    }
+                },
+            },
+        )
+        self.vapi.ip_punt_redirect(
+            punt={
+                "rx_sw_if_index": self.pg0.sw_if_index,
+                "tx_sw_if_index": self.pg1.sw_if_index,
+                "nh": self.pg1.remote_ip4,
+            }
+        )
+
+        pkts = [
+            (
+                Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+                / IP(src=self.pg0.remote_ip4, dst=self.pg0.local_ip4)
+                / UDP(sport=sport, dport=dport)
+                / Raw("\x17" * 100)
+            )
+        ] * 2
 
         # allow a session but not matching the stream: expect to drop
         self.create_classify_session(
             table_index,
 
         # allow a session but not matching the stream: expect to drop
         self.create_classify_session(
             table_index,
-            self.build_ip_match(src_ip=self.pg0.remote_ip4,
-                                proto=socket.IPPROTO_UDP, src_port=sport + 10))
+            self.build_ip_match(
+                src_ip=self.pg0.remote_ip4,
+                proto=socket.IPPROTO_UDP,
+                src_port=sport + 10,
+            ),
+        )
         self.send_and_assert_no_replies(self.pg0, pkts)
 
         # allow a session matching the stream: expect to pass
         self.create_classify_session(
             table_index,
         self.send_and_assert_no_replies(self.pg0, pkts)
 
         # allow a session matching the stream: expect to pass
         self.create_classify_session(
             table_index,
-            self.build_ip_match(src_ip=self.pg0.remote_ip4,
-                                proto=socket.IPPROTO_UDP, src_port=sport))
+            self.build_ip_match(
+                src_ip=self.pg0.remote_ip4, proto=socket.IPPROTO_UDP, src_port=sport
+            ),
+        )
         self.send_and_expect_only(self.pg0, pkts, self.pg1)
 
         # test dump api: ip4 is set, ip6 is not
         r = self.vapi.punt_acl_get()
         self.assertEqual(r.ip4_table_index, table_index)
         self.send_and_expect_only(self.pg0, pkts, self.pg1)
 
         # test dump api: ip4 is set, ip6 is not
         r = self.vapi.punt_acl_get()
         self.assertEqual(r.ip4_table_index, table_index)
-        self.assertEqual(r.ip6_table_index, 0xffffffff)
+        self.assertEqual(r.ip6_table_index, 0xFFFFFFFF)
 
         # cleanup
 
         # cleanup
-        self.acl_active_table = ''
+        self.acl_active_table = ""
         self.vapi.punt_acl_add_del(ip4_table_index=table_index, is_add=0)
 
         # test dump api: nothing set
         r = self.vapi.punt_acl_get()
         self.vapi.punt_acl_add_del(ip4_table_index=table_index, is_add=0)
 
         # test dump api: nothing set
         r = self.vapi.punt_acl_get()
-        self.assertEqual(r.ip4_table_index, 0xffffffff)
-        self.assertEqual(r.ip6_table_index, 0xffffffff)
+        self.assertEqual(r.ip4_table_index, 0xFFFFFFFF)
+        self.assertEqual(r.ip6_table_index, 0xFFFFFFFF)
 
 
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index 211374b..7b5d41c 100644 (file)
@@ -14,7 +14,7 @@ from template_classifier import TestClassifier
 
 
 class TestClassifierIP6(TestClassifier):
 
 
 class TestClassifierIP6(TestClassifier):
-    """ Classifier IP6 Test Case """
+    """Classifier IP6 Test Case"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -26,7 +26,7 @@ class TestClassifierIP6(TestClassifier):
         super(TestClassifierIP6, cls).tearDownClass()
 
     def test_iacl_src_ip(self):
         super(TestClassifierIP6, cls).tearDownClass()
 
     def test_iacl_src_ip(self):
-        """ Source IP6 iACL test
+        """Source IP6 iACL test
 
         Test scenario for basic IP ACL with source IP
             - Create IPv6 stream for pg0 -> pg1 interface.
 
         Test scenario for basic IP ACL with source IP
             - Create IPv6 stream for pg0 -> pg1 interface.
@@ -38,13 +38,13 @@ class TestClassifierIP6(TestClassifier):
         pkts = self.create_stream(self.pg0, self.pg1, self.pg_if_packet_sizes)
         self.pg0.add_stream(pkts)
 
         pkts = self.create_stream(self.pg0, self.pg1, self.pg_if_packet_sizes)
         self.pg0.add_stream(pkts)
 
-        key = 'ip6_src'
+        key = "ip6_src"
         self.create_classify_table(
         self.create_classify_table(
-            key,
-            self.build_ip6_mask(src_ip='ffffffffffffffffffffffffffffffff'))
+            key, self.build_ip6_mask(src_ip="ffffffffffffffffffffffffffffffff")
+        )
         self.create_classify_session(
         self.create_classify_session(
-            self.acl_tbl_idx.get(key),
-            self.build_ip6_match(src_ip=self.pg0.remote_ip6))
+            self.acl_tbl_idx.get(key), self.build_ip6_match(src_ip=self.pg0.remote_ip6)
+        )
         self.input_acl_set_interface(self.pg0, self.acl_tbl_idx.get(key))
         self.acl_active_table = key
 
         self.input_acl_set_interface(self.pg0, self.acl_tbl_idx.get(key))
         self.acl_active_table = key
 
@@ -57,7 +57,7 @@ class TestClassifierIP6(TestClassifier):
         self.pg2.assert_nothing_captured(remark="packets forwarded")
 
     def test_iacl_dst_ip(self):
         self.pg2.assert_nothing_captured(remark="packets forwarded")
 
     def test_iacl_dst_ip(self):
-        """ Destination IP6 iACL test
+        """Destination IP6 iACL test
 
         Test scenario for basic IP ACL with destination IP
             - Create IPv6 stream for pg0 -> pg1 interface.
 
         Test scenario for basic IP ACL with destination IP
             - Create IPv6 stream for pg0 -> pg1 interface.
@@ -69,13 +69,13 @@ class TestClassifierIP6(TestClassifier):
         pkts = self.create_stream(self.pg0, self.pg1, self.pg_if_packet_sizes)
         self.pg0.add_stream(pkts)
 
         pkts = self.create_stream(self.pg0, self.pg1, self.pg_if_packet_sizes)
         self.pg0.add_stream(pkts)
 
-        key = 'ip6_dst'
+        key = "ip6_dst"
         self.create_classify_table(
         self.create_classify_table(
-            key,
-            self.build_ip6_mask(dst_ip='ffffffffffffffffffffffffffffffff'))
+            key, self.build_ip6_mask(dst_ip="ffffffffffffffffffffffffffffffff")
+        )
         self.create_classify_session(
         self.create_classify_session(
-            self.acl_tbl_idx.get(key),
-            self.build_ip6_match(dst_ip=self.pg1.remote_ip6))
+            self.acl_tbl_idx.get(key), self.build_ip6_match(dst_ip=self.pg1.remote_ip6)
+        )
         self.input_acl_set_interface(self.pg0, self.acl_tbl_idx.get(key))
         self.acl_active_table = key
 
         self.input_acl_set_interface(self.pg0, self.acl_tbl_idx.get(key))
         self.acl_active_table = key
 
@@ -88,7 +88,7 @@ class TestClassifierIP6(TestClassifier):
         self.pg2.assert_nothing_captured(remark="packets forwarded")
 
     def test_iacl_src_dst_ip(self):
         self.pg2.assert_nothing_captured(remark="packets forwarded")
 
     def test_iacl_src_dst_ip(self):
-        """ Source and destination IP6 iACL test
+        """Source and destination IP6 iACL test
 
         Test scenario for basic IP ACL with source and destination IP
             - Create IPv4 stream for pg0 -> pg1 interface.
 
         Test scenario for basic IP ACL with source and destination IP
             - Create IPv4 stream for pg0 -> pg1 interface.
@@ -100,15 +100,20 @@ class TestClassifierIP6(TestClassifier):
         pkts = self.create_stream(self.pg0, self.pg1, self.pg_if_packet_sizes)
         self.pg0.add_stream(pkts)
 
         pkts = self.create_stream(self.pg0, self.pg1, self.pg_if_packet_sizes)
         self.pg0.add_stream(pkts)
 
-        key = 'ip6'
+        key = "ip6"
         self.create_classify_table(
             key,
         self.create_classify_table(
             key,
-            self.build_ip6_mask(src_ip='ffffffffffffffffffffffffffffffff',
-                                dst_ip='ffffffffffffffffffffffffffffffff'))
+            self.build_ip6_mask(
+                src_ip="ffffffffffffffffffffffffffffffff",
+                dst_ip="ffffffffffffffffffffffffffffffff",
+            ),
+        )
         self.create_classify_session(
             self.acl_tbl_idx.get(key),
         self.create_classify_session(
             self.acl_tbl_idx.get(key),
-            self.build_ip6_match(src_ip=self.pg0.remote_ip6,
-                                 dst_ip=self.pg1.remote_ip6))
+            self.build_ip6_match(
+                src_ip=self.pg0.remote_ip6, dst_ip=self.pg1.remote_ip6
+            ),
+        )
         self.input_acl_set_interface(self.pg0, self.acl_tbl_idx.get(key))
         self.acl_active_table = key
 
         self.input_acl_set_interface(self.pg0, self.acl_tbl_idx.get(key))
         self.acl_active_table = key
 
@@ -124,7 +129,7 @@ class TestClassifierIP6(TestClassifier):
 # Tests split to different test case classes because of issue reported in
 # ticket VPP-1336
 class TestClassifierIP6UDP(TestClassifier):
 # Tests split to different test case classes because of issue reported in
 # ticket VPP-1336
 class TestClassifierIP6UDP(TestClassifier):
-    """ Classifier IP6 UDP proto Test Case """
+    """Classifier IP6 UDP proto Test Case"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -132,7 +137,7 @@ class TestClassifierIP6UDP(TestClassifier):
         cls.af = socket.AF_INET6
 
     def test_iacl_proto_udp(self):
         cls.af = socket.AF_INET6
 
     def test_iacl_proto_udp(self):
-        """ IP6 UDP protocol iACL test
+        """IP6 UDP protocol iACL test
 
         Test scenario for basic protocol ACL with UDP protocol
             - Create IPv6 stream for pg0 -> pg1 interface.
 
         Test scenario for basic protocol ACL with UDP protocol
             - Create IPv6 stream for pg0 -> pg1 interface.
@@ -144,11 +149,11 @@ class TestClassifierIP6UDP(TestClassifier):
         pkts = self.create_stream(self.pg0, self.pg1, self.pg_if_packet_sizes)
         self.pg0.add_stream(pkts)
 
         pkts = self.create_stream(self.pg0, self.pg1, self.pg_if_packet_sizes)
         self.pg0.add_stream(pkts)
 
-        key = 'nh_udp'
-        self.create_classify_table(key, self.build_ip6_mask(nh='ff'))
+        key = "nh_udp"
+        self.create_classify_table(key, self.build_ip6_mask(nh="ff"))
         self.create_classify_session(
         self.create_classify_session(
-            self.acl_tbl_idx.get(key),
-            self.build_ip6_match(nh=socket.IPPROTO_UDP))
+            self.acl_tbl_idx.get(key), self.build_ip6_match(nh=socket.IPPROTO_UDP)
+        )
         self.input_acl_set_interface(self.pg0, self.acl_tbl_idx.get(key))
         self.acl_active_table = key
 
         self.input_acl_set_interface(self.pg0, self.acl_tbl_idx.get(key))
         self.acl_active_table = key
 
@@ -161,7 +166,7 @@ class TestClassifierIP6UDP(TestClassifier):
         self.pg2.assert_nothing_captured(remark="packets forwarded")
 
     def test_iacl_proto_udp_sport(self):
         self.pg2.assert_nothing_captured(remark="packets forwarded")
 
     def test_iacl_proto_udp_sport(self):
-        """ IP6 UDP source port iACL test
+        """IP6 UDP source port iACL test
 
         Test scenario for basic protocol ACL with UDP and sport
             - Create IPv6 stream for pg0 -> pg1 interface.
 
         Test scenario for basic protocol ACL with UDP and sport
             - Create IPv6 stream for pg0 -> pg1 interface.
@@ -171,18 +176,18 @@ class TestClassifierIP6UDP(TestClassifier):
 
         # Basic iACL testing with UDP and sport
         sport = 38
 
         # Basic iACL testing with UDP and sport
         sport = 38
-        pkts = self.create_stream(self.pg0, self.pg1, self.pg_if_packet_sizes,
-                                  UDP(sport=sport, dport=5678))
+        pkts = self.create_stream(
+            self.pg0, self.pg1, self.pg_if_packet_sizes, UDP(sport=sport, dport=5678)
+        )
         self.pg0.add_stream(pkts)
 
         self.pg0.add_stream(pkts)
 
-        key = 'nh_udp_sport'
-        self.create_classify_table(
-            key, self.build_ip6_mask(nh='ff', src_port='ffff'))
+        key = "nh_udp_sport"
+        self.create_classify_table(key, self.build_ip6_mask(nh="ff", src_port="ffff"))
         self.create_classify_session(
             self.acl_tbl_idx.get(key),
         self.create_classify_session(
             self.acl_tbl_idx.get(key),
-            self.build_ip6_match(nh=socket.IPPROTO_UDP, src_port=sport))
-        self.input_acl_set_interface(
-            self.pg0, self.acl_tbl_idx.get(key))
+            self.build_ip6_match(nh=socket.IPPROTO_UDP, src_port=sport),
+        )
+        self.input_acl_set_interface(self.pg0, self.acl_tbl_idx.get(key))
         self.acl_active_table = key
 
         self.pg_enable_capture(self.pg_interfaces)
         self.acl_active_table = key
 
         self.pg_enable_capture(self.pg_interfaces)
@@ -194,7 +199,7 @@ class TestClassifierIP6UDP(TestClassifier):
         self.pg2.assert_nothing_captured(remark="packets forwarded")
 
     def test_iacl_proto_udp_dport(self):
         self.pg2.assert_nothing_captured(remark="packets forwarded")
 
     def test_iacl_proto_udp_dport(self):
-        """ IP6 UDP destination port iACL test
+        """IP6 UDP destination port iACL test
 
         Test scenario for basic protocol ACL with UDP and dport
             - Create IPv6 stream for pg0 -> pg1 interface.
 
         Test scenario for basic protocol ACL with UDP and dport
             - Create IPv6 stream for pg0 -> pg1 interface.
@@ -204,18 +209,18 @@ class TestClassifierIP6UDP(TestClassifier):
 
         # Basic iACL testing with UDP and dport
         dport = 427
 
         # Basic iACL testing with UDP and dport
         dport = 427
-        pkts = self.create_stream(self.pg0, self.pg1, self.pg_if_packet_sizes,
-                                  UDP(sport=1234, dport=dport))
+        pkts = self.create_stream(
+            self.pg0, self.pg1, self.pg_if_packet_sizes, UDP(sport=1234, dport=dport)
+        )
         self.pg0.add_stream(pkts)
 
         self.pg0.add_stream(pkts)
 
-        key = 'nh_udp_dport'
-        self.create_classify_table(
-            key, self.build_ip6_mask(nh='ff', dst_port='ffff'))
+        key = "nh_udp_dport"
+        self.create_classify_table(key, self.build_ip6_mask(nh="ff", dst_port="ffff"))
         self.create_classify_session(
             self.acl_tbl_idx.get(key),
         self.create_classify_session(
             self.acl_tbl_idx.get(key),
-            self.build_ip6_match(nh=socket.IPPROTO_UDP, dst_port=dport))
-        self.input_acl_set_interface(
-            self.pg0, self.acl_tbl_idx.get(key))
+            self.build_ip6_match(nh=socket.IPPROTO_UDP, dst_port=dport),
+        )
+        self.input_acl_set_interface(self.pg0, self.acl_tbl_idx.get(key))
         self.acl_active_table = key
 
         self.pg_enable_capture(self.pg_interfaces)
         self.acl_active_table = key
 
         self.pg_enable_capture(self.pg_interfaces)
@@ -227,7 +232,7 @@ class TestClassifierIP6UDP(TestClassifier):
         self.pg2.assert_nothing_captured(remark="packets forwarded")
 
     def test_iacl_proto_udp_sport_dport(self):
         self.pg2.assert_nothing_captured(remark="packets forwarded")
 
     def test_iacl_proto_udp_sport_dport(self):
-        """ IP6 UDP source and destination ports iACL test
+        """IP6 UDP source and destination ports iACL test
 
         Test scenario for basic protocol ACL with UDP and sport and dport
             - Create IPv6 stream for pg0 -> pg1 interface.
 
         Test scenario for basic protocol ACL with UDP and sport and dport
             - Create IPv6 stream for pg0 -> pg1 interface.
@@ -238,20 +243,20 @@ class TestClassifierIP6UDP(TestClassifier):
         # Basic iACL testing with UDP and sport and dport
         sport = 13720
         dport = 9080
         # Basic iACL testing with UDP and sport and dport
         sport = 13720
         dport = 9080
-        pkts = self.create_stream(self.pg0, self.pg1, self.pg_if_packet_sizes,
-                                  UDP(sport=sport, dport=dport))
+        pkts = self.create_stream(
+            self.pg0, self.pg1, self.pg_if_packet_sizes, UDP(sport=sport, dport=dport)
+        )
         self.pg0.add_stream(pkts)
 
         self.pg0.add_stream(pkts)
 
-        key = 'nh_udp_ports'
+        key = "nh_udp_ports"
         self.create_classify_table(
         self.create_classify_table(
-            key,
-            self.build_ip6_mask(nh='ff', src_port='ffff', dst_port='ffff'))
+            key, self.build_ip6_mask(nh="ff", src_port="ffff", dst_port="ffff")
+        )
         self.create_classify_session(
             self.acl_tbl_idx.get(key),
         self.create_classify_session(
             self.acl_tbl_idx.get(key),
-            self.build_ip6_match(nh=socket.IPPROTO_UDP, src_port=sport,
-                                 dst_port=dport))
-        self.input_acl_set_interface(
-            self.pg0, self.acl_tbl_idx.get(key))
+            self.build_ip6_match(nh=socket.IPPROTO_UDP, src_port=sport, dst_port=dport),
+        )
+        self.input_acl_set_interface(self.pg0, self.acl_tbl_idx.get(key))
         self.acl_active_table = key
 
         self.pg_enable_capture(self.pg_interfaces)
         self.acl_active_table = key
 
         self.pg_enable_capture(self.pg_interfaces)
@@ -264,7 +269,7 @@ class TestClassifierIP6UDP(TestClassifier):
 
 
 class TestClassifierIP6TCP(TestClassifier):
 
 
 class TestClassifierIP6TCP(TestClassifier):
-    """ Classifier IP6 TCP proto Test Case """
+    """Classifier IP6 TCP proto Test Case"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -272,7 +277,7 @@ class TestClassifierIP6TCP(TestClassifier):
         cls.af = socket.AF_INET6
 
     def test_iacl_proto_tcp(self):
         cls.af = socket.AF_INET6
 
     def test_iacl_proto_tcp(self):
-        """ IP6 TCP protocol iACL test
+        """IP6 TCP protocol iACL test
 
         Test scenario for basic protocol ACL with TCP protocol
             - Create IPv6 stream for pg0 -> pg1 interface.
 
         Test scenario for basic protocol ACL with TCP protocol
             - Create IPv6 stream for pg0 -> pg1 interface.
@@ -281,17 +286,17 @@ class TestClassifierIP6TCP(TestClassifier):
         """
 
         # Basic iACL testing with TCP protocol
         """
 
         # Basic iACL testing with TCP protocol
-        pkts = self.create_stream(self.pg0, self.pg1, self.pg_if_packet_sizes,
-                                  TCP(sport=1234, dport=5678))
+        pkts = self.create_stream(
+            self.pg0, self.pg1, self.pg_if_packet_sizes, TCP(sport=1234, dport=5678)
+        )
         self.pg0.add_stream(pkts)
 
         self.pg0.add_stream(pkts)
 
-        key = 'nh_tcp'
-        self.create_classify_table(key, self.build_ip6_mask(nh='ff'))
+        key = "nh_tcp"
+        self.create_classify_table(key, self.build_ip6_mask(nh="ff"))
         self.create_classify_session(
         self.create_classify_session(
-            self.acl_tbl_idx.get(key),
-            self.build_ip6_match(nh=socket.IPPROTO_TCP))
-        self.input_acl_set_interface(
-            self.pg0, self.acl_tbl_idx.get(key))
+            self.acl_tbl_idx.get(key), self.build_ip6_match(nh=socket.IPPROTO_TCP)
+        )
+        self.input_acl_set_interface(self.pg0, self.acl_tbl_idx.get(key))
         self.acl_active_table = key
 
         self.pg_enable_capture(self.pg_interfaces)
         self.acl_active_table = key
 
         self.pg_enable_capture(self.pg_interfaces)
@@ -303,7 +308,7 @@ class TestClassifierIP6TCP(TestClassifier):
         self.pg2.assert_nothing_captured(remark="packets forwarded")
 
     def test_iacl_proto_tcp_sport(self):
         self.pg2.assert_nothing_captured(remark="packets forwarded")
 
     def test_iacl_proto_tcp_sport(self):
-        """ IP6 TCP source port iACL test
+        """IP6 TCP source port iACL test
 
         Test scenario for basic protocol ACL with TCP and sport
             - Create IPv6 stream for pg0 -> pg1 interface.
 
         Test scenario for basic protocol ACL with TCP and sport
             - Create IPv6 stream for pg0 -> pg1 interface.
@@ -313,18 +318,18 @@ class TestClassifierIP6TCP(TestClassifier):
 
         # Basic iACL testing with TCP and sport
         sport = 38
 
         # Basic iACL testing with TCP and sport
         sport = 38
-        pkts = self.create_stream(self.pg0, self.pg1, self.pg_if_packet_sizes,
-                                  TCP(sport=sport, dport=5678))
+        pkts = self.create_stream(
+            self.pg0, self.pg1, self.pg_if_packet_sizes, TCP(sport=sport, dport=5678)
+        )
         self.pg0.add_stream(pkts)
 
         self.pg0.add_stream(pkts)
 
-        key = 'nh_tcp_sport'
-        self.create_classify_table(
-            key, self.build_ip6_mask(nh='ff', src_port='ffff'))
+        key = "nh_tcp_sport"
+        self.create_classify_table(key, self.build_ip6_mask(nh="ff", src_port="ffff"))
         self.create_classify_session(
             self.acl_tbl_idx.get(key),
         self.create_classify_session(
             self.acl_tbl_idx.get(key),
-            self.build_ip6_match(nh=socket.IPPROTO_TCP, src_port=sport))
-        self.input_acl_set_interface(
-            self.pg0, self.acl_tbl_idx.get(key))
+            self.build_ip6_match(nh=socket.IPPROTO_TCP, src_port=sport),
+        )
+        self.input_acl_set_interface(self.pg0, self.acl_tbl_idx.get(key))
         self.acl_active_table = key
 
         self.pg_enable_capture(self.pg_interfaces)
         self.acl_active_table = key
 
         self.pg_enable_capture(self.pg_interfaces)
@@ -336,7 +341,7 @@ class TestClassifierIP6TCP(TestClassifier):
         self.pg2.assert_nothing_captured(remark="packets forwarded")
 
     def test_iacl_proto_tcp_dport(self):
         self.pg2.assert_nothing_captured(remark="packets forwarded")
 
     def test_iacl_proto_tcp_dport(self):
-        """ IP6 TCP destination port iACL test
+        """IP6 TCP destination port iACL test
 
         Test scenario for basic protocol ACL with TCP and dport
             - Create IPv6 stream for pg0 -> pg1 interface.
 
         Test scenario for basic protocol ACL with TCP and dport
             - Create IPv6 stream for pg0 -> pg1 interface.
@@ -346,18 +351,18 @@ class TestClassifierIP6TCP(TestClassifier):
 
         # Basic iACL testing with TCP and dport
         dport = 427
 
         # Basic iACL testing with TCP and dport
         dport = 427
-        pkts = self.create_stream(self.pg0, self.pg1, self.pg_if_packet_sizes,
-                                  TCP(sport=1234, dport=dport))
+        pkts = self.create_stream(
+            self.pg0, self.pg1, self.pg_if_packet_sizes, TCP(sport=1234, dport=dport)
+        )
         self.pg0.add_stream(pkts)
 
         self.pg0.add_stream(pkts)
 
-        key = 'nh_tcp_dport'
-        self.create_classify_table(
-            key, self.build_ip6_mask(nh='ff', dst_port='ffff'))
+        key = "nh_tcp_dport"
+        self.create_classify_table(key, self.build_ip6_mask(nh="ff", dst_port="ffff"))
         self.create_classify_session(
             self.acl_tbl_idx.get(key),
         self.create_classify_session(
             self.acl_tbl_idx.get(key),
-            self.build_ip6_match(nh=socket.IPPROTO_TCP, dst_port=dport))
-        self.input_acl_set_interface(
-            self.pg0, self.acl_tbl_idx.get(key))
+            self.build_ip6_match(nh=socket.IPPROTO_TCP, dst_port=dport),
+        )
+        self.input_acl_set_interface(self.pg0, self.acl_tbl_idx.get(key))
         self.acl_active_table = key
 
         self.pg_enable_capture(self.pg_interfaces)
         self.acl_active_table = key
 
         self.pg_enable_capture(self.pg_interfaces)
@@ -369,7 +374,7 @@ class TestClassifierIP6TCP(TestClassifier):
         self.pg2.assert_nothing_captured(remark="packets forwarded")
 
     def test_iacl_proto_tcp_sport_dport(self):
         self.pg2.assert_nothing_captured(remark="packets forwarded")
 
     def test_iacl_proto_tcp_sport_dport(self):
-        """ IP6 TCP source and destination ports iACL test
+        """IP6 TCP source and destination ports iACL test
 
         Test scenario for basic protocol ACL with TCP and sport and dport
             - Create IPv6 stream for pg0 -> pg1 interface.
 
         Test scenario for basic protocol ACL with TCP and sport and dport
             - Create IPv6 stream for pg0 -> pg1 interface.
@@ -380,20 +385,20 @@ class TestClassifierIP6TCP(TestClassifier):
         # Basic iACL testing with TCP and sport and dport
         sport = 13720
         dport = 9080
         # Basic iACL testing with TCP and sport and dport
         sport = 13720
         dport = 9080
-        pkts = self.create_stream(self.pg0, self.pg1, self.pg_if_packet_sizes,
-                                  TCP(sport=sport, dport=dport))
+        pkts = self.create_stream(
+            self.pg0, self.pg1, self.pg_if_packet_sizes, TCP(sport=sport, dport=dport)
+        )
         self.pg0.add_stream(pkts)
 
         self.pg0.add_stream(pkts)
 
-        key = 'nh_tcp_ports'
+        key = "nh_tcp_ports"
         self.create_classify_table(
         self.create_classify_table(
-            key,
-            self.build_ip6_mask(nh='ff', src_port='ffff', dst_port='ffff'))
+            key, self.build_ip6_mask(nh="ff", src_port="ffff", dst_port="ffff")
+        )
         self.create_classify_session(
             self.acl_tbl_idx.get(key),
         self.create_classify_session(
             self.acl_tbl_idx.get(key),
-            self.build_ip6_match(nh=socket.IPPROTO_TCP, src_port=sport,
-                                 dst_port=dport))
-        self.input_acl_set_interface(
-            self.pg0, self.acl_tbl_idx.get(key))
+            self.build_ip6_match(nh=socket.IPPROTO_TCP, src_port=sport, dst_port=dport),
+        )
+        self.input_acl_set_interface(self.pg0, self.acl_tbl_idx.get(key))
         self.acl_active_table = key
 
         self.pg_enable_capture(self.pg_interfaces)
         self.acl_active_table = key
 
         self.pg_enable_capture(self.pg_interfaces)
@@ -406,7 +411,7 @@ class TestClassifierIP6TCP(TestClassifier):
 
 
 class TestClassifierIP6Out(TestClassifier):
 
 
 class TestClassifierIP6Out(TestClassifier):
-    """ Classifier output IP6 Test Case """
+    """Classifier output IP6 Test Case"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -414,7 +419,7 @@ class TestClassifierIP6Out(TestClassifier):
         cls.af = socket.AF_INET6
 
     def test_acl_ip_out(self):
         cls.af = socket.AF_INET6
 
     def test_acl_ip_out(self):
-        """ Output IP6 ACL test
+        """Output IP6 ACL test
 
         Test scenario for basic IP ACL with source IP
             - Create IPv6 stream for pg1 -> pg0 interface.
 
         Test scenario for basic IP ACL with source IP
             - Create IPv6 stream for pg1 -> pg0 interface.
@@ -426,16 +431,16 @@ class TestClassifierIP6Out(TestClassifier):
         pkts = self.create_stream(self.pg1, self.pg0, self.pg_if_packet_sizes)
         self.pg1.add_stream(pkts)
 
         pkts = self.create_stream(self.pg1, self.pg0, self.pg_if_packet_sizes)
         self.pg1.add_stream(pkts)
 
-        key = 'ip6_out'
+        key = "ip6_out"
         self.create_classify_table(
             key,
         self.create_classify_table(
             key,
-            self.build_ip6_mask(src_ip='ffffffffffffffffffffffffffffffff'),
-            data_offset=0)
+            self.build_ip6_mask(src_ip="ffffffffffffffffffffffffffffffff"),
+            data_offset=0,
+        )
         self.create_classify_session(
         self.create_classify_session(
-            self.acl_tbl_idx.get(key),
-            self.build_ip6_match(src_ip=self.pg1.remote_ip6))
-        self.output_acl_set_interface(
-            self.pg0, self.acl_tbl_idx.get(key))
+            self.acl_tbl_idx.get(key), self.build_ip6_match(src_ip=self.pg1.remote_ip6)
+        )
+        self.output_acl_set_interface(self.pg0, self.acl_tbl_idx.get(key))
         self.acl_active_table = key
 
         self.pg_enable_capture(self.pg_interfaces)
         self.acl_active_table = key
 
         self.pg_enable_capture(self.pg_interfaces)
@@ -448,7 +453,7 @@ class TestClassifierIP6Out(TestClassifier):
 
 
 class TestClassifierIP6MAC(TestClassifier):
 
 
 class TestClassifierIP6MAC(TestClassifier):
-    """ Classifier IP6 MAC Test Case """
+    """Classifier IP6 MAC Test Case"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -456,7 +461,7 @@ class TestClassifierIP6MAC(TestClassifier):
         cls.af = socket.AF_INET6
 
     def test_acl_mac(self):
         cls.af = socket.AF_INET6
 
     def test_acl_mac(self):
-        """ IP6 MAC iACL test
+        """IP6 MAC iACL test
 
         Test scenario for basic MAC ACL with source MAC
             - Create IPv6 stream for pg0 -> pg2 interface.
 
         Test scenario for basic MAC ACL with source MAC
             - Create IPv6 stream for pg0 -> pg2 interface.
@@ -468,12 +473,13 @@ class TestClassifierIP6MAC(TestClassifier):
         pkts = self.create_stream(self.pg0, self.pg2, self.pg_if_packet_sizes)
         self.pg0.add_stream(pkts)
 
         pkts = self.create_stream(self.pg0, self.pg2, self.pg_if_packet_sizes)
         self.pg0.add_stream(pkts)
 
-        key = 'mac'
+        key = "mac"
         self.create_classify_table(
         self.create_classify_table(
-            key, self.build_mac_mask(src_mac='ffffffffffff'), data_offset=-14)
+            key, self.build_mac_mask(src_mac="ffffffffffff"), data_offset=-14
+        )
         self.create_classify_session(
         self.create_classify_session(
-            self.acl_tbl_idx.get(key),
-            self.build_mac_match(src_mac=self.pg0.remote_mac))
+            self.acl_tbl_idx.get(key), self.build_mac_match(src_mac=self.pg0.remote_mac)
+        )
         self.input_acl_set_interface(self.pg0, self.acl_tbl_idx.get(key))
         self.acl_active_table = key
 
         self.input_acl_set_interface(self.pg0, self.acl_tbl_idx.get(key))
         self.acl_active_table = key
 
@@ -486,5 +492,5 @@ class TestClassifierIP6MAC(TestClassifier):
         self.pg1.assert_nothing_captured(remark="packets forwarded")
 
 
         self.pg1.assert_nothing_captured(remark="packets forwarded")
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index b130988..d94af3f 100644 (file)
@@ -20,7 +20,7 @@ from template_classifier import TestClassifier
 
 
 class TestClassifyAcl(TestClassifier):
 
 
 class TestClassifyAcl(TestClassifier):
-    """ Classifier-based L2 input and output ACL Test Case """
+    """Classifier-based L2 input and output ACL Test Case"""
 
     # traffic types
     IP = 0
 
     # traffic types
     IP = 0
@@ -37,7 +37,7 @@ class TestClassifyAcl(TestClassifier):
 
     # supported protocols
     proto = [[6, 17], [1, 58]]
 
     # supported protocols
     proto = [[6, 17], [1, 58]]
-    proto_map = {1: 'ICMP', 58: 'ICMPv6EchoRequest', 6: 'TCP', 17: 'UDP'}
+    proto_map = {1: "ICMP", 58: "ICMPv6EchoRequest", 6: "TCP", 17: "UDP"}
     ICMPv4 = 0
     ICMPv6 = 1
     TCP = 0
     ICMPv4 = 0
     ICMPv6 = 1
     TCP = 0
@@ -104,11 +104,11 @@ class TestClassifyAcl(TestClassifier):
 
             # Create BD with MAC learning and unknown unicast flooding disabled
             # and put interfaces to this BD
 
             # Create BD with MAC learning and unknown unicast flooding disabled
             # and put interfaces to this BD
-            cls.vapi.bridge_domain_add_del(bd_id=cls.bd_id, uu_flood=1,
-                                           learn=1)
+            cls.vapi.bridge_domain_add_del(bd_id=cls.bd_id, uu_flood=1, learn=1)
             for pg_if in cls.pg_interfaces:
                 cls.vapi.sw_interface_set_l2_bridge(
             for pg_if in cls.pg_interfaces:
                 cls.vapi.sw_interface_set_l2_bridge(
-                    rx_sw_if_index=pg_if.sw_if_index, bd_id=cls.bd_id)
+                    rx_sw_if_index=pg_if.sw_if_index, bd_id=cls.bd_id
+                )
 
             # Set up all interfaces
             for i in cls.pg_interfaces:
 
             # Set up all interfaces
             for i in cls.pg_interfaces:
@@ -128,7 +128,7 @@ class TestClassifyAcl(TestClassifier):
             # self.warmup_test()
 
             # Holder of the active classify table key
             # self.warmup_test()
 
             # Holder of the active classify table key
-            cls.acl_active_table = ''
+            cls.acl_active_table = ""
 
         except Exception:
             super(TestClassifyAcl, cls).tearDownClass()
 
         except Exception:
             super(TestClassifyAcl, cls).tearDownClass()
@@ -147,25 +147,30 @@ class TestClassifyAcl(TestClassifier):
         Show various debug prints after each test.
         """
         if not self.vpp_dead:
         Show various debug prints after each test.
         """
         if not self.vpp_dead:
-            if self.acl_active_table == 'mac_inout':
+            if self.acl_active_table == "mac_inout":
                 self.output_acl_set_interface(
                 self.output_acl_set_interface(
-                    self.pg1, self.acl_tbl_idx.get(self.acl_active_table), 0)
+                    self.pg1, self.acl_tbl_idx.get(self.acl_active_table), 0
+                )
                 self.input_acl_set_interface(
                 self.input_acl_set_interface(
-                    self.pg0, self.acl_tbl_idx.get(self.acl_active_table), 0)
-                self.acl_active_table = ''
-            elif self.acl_active_table == 'mac_out':
+                    self.pg0, self.acl_tbl_idx.get(self.acl_active_table), 0
+                )
+                self.acl_active_table = ""
+            elif self.acl_active_table == "mac_out":
                 self.output_acl_set_interface(
                 self.output_acl_set_interface(
-                    self.pg1, self.acl_tbl_idx.get(self.acl_active_table), 0)
-                self.acl_active_table = ''
-            elif self.acl_active_table == 'mac_in':
+                    self.pg1, self.acl_tbl_idx.get(self.acl_active_table), 0
+                )
+                self.acl_active_table = ""
+            elif self.acl_active_table == "mac_in":
                 self.input_acl_set_interface(
                 self.input_acl_set_interface(
-                    self.pg0, self.acl_tbl_idx.get(self.acl_active_table), 0)
-                self.acl_active_table = ''
+                    self.pg0, self.acl_tbl_idx.get(self.acl_active_table), 0
+                )
+                self.acl_active_table = ""
 
         super(TestClassifyAcl, self).tearDown()
 
 
         super(TestClassifyAcl, self).tearDown()
 
-    def create_classify_session(self, intf, table_index, match,
-                                hit_next_index=0xffffffff, is_add=1):
+    def create_classify_session(
+        self, intf, table_index, match, hit_next_index=0xFFFFFFFF, is_add=1
+    ):
         """Create Classify Session
 
         :param VppInterface intf: Interface to apply classify session.
         """Create Classify Session
 
         :param VppInterface intf: Interface to apply classify session.
@@ -180,8 +185,9 @@ class TestClassifyAcl(TestClassifier):
             table_index=table_index,
             match=mask_match,
             match_len=mask_match_len,
             table_index=table_index,
             match=mask_match,
             match_len=mask_match_len,
-            hit_next_index=hit_next_index)
-        self.assertIsNotNone(r, 'No response msg for add_del_session')
+            hit_next_index=hit_next_index,
+        )
+        self.assertIsNotNone(r, "No response msg for add_del_session")
 
     def create_hosts(self, count, start=0):
         """
 
     def create_hosts(self, count, start=0):
         """
@@ -197,39 +203,50 @@ class TestClassifyAcl(TestClassifier):
         for pg_if in self.pg_interfaces:
             i += 1
             start_nr = macs_per_if * i + start
         for pg_if in self.pg_interfaces:
             i += 1
             start_nr = macs_per_if * i + start
-            end_nr = count + start if i == (n_int - 1) \
-                else macs_per_if * (i + 1) + start
+            end_nr = (
+                count + start if i == (n_int - 1) else macs_per_if * (i + 1) + start
+            )
             hosts = self.hosts_by_pg_idx[pg_if.sw_if_index]
             for j in range(start_nr, end_nr):
                 host = Host(
                     "00:00:00:ff:%02x:%02x" % (pg_if.sw_if_index, j),
                     "172.17.1%02x.%u" % (pg_if.sw_if_index, j),
             hosts = self.hosts_by_pg_idx[pg_if.sw_if_index]
             for j in range(start_nr, end_nr):
                 host = Host(
                     "00:00:00:ff:%02x:%02x" % (pg_if.sw_if_index, j),
                     "172.17.1%02x.%u" % (pg_if.sw_if_index, j),
-                    "2017:dead:%02x::%u" % (pg_if.sw_if_index, j))
+                    "2017:dead:%02x::%u" % (pg_if.sw_if_index, j),
+                )
                 hosts.append(host)
 
     def create_upper_layer(self, packet_index, proto, ports=0):
         p = self.proto_map[proto]
                 hosts.append(host)
 
     def create_upper_layer(self, packet_index, proto, ports=0):
         p = self.proto_map[proto]
-        if p == 'UDP':
+        if p == "UDP":
             if ports == 0:
             if ports == 0:
-                return UDP(sport=random.randint(self.udp_sport_from,
-                                                self.udp_sport_to),
-                           dport=random.randint(self.udp_dport_from,
-                                                self.udp_dport_to))
+                return UDP(
+                    sport=random.randint(self.udp_sport_from, self.udp_sport_to),
+                    dport=random.randint(self.udp_dport_from, self.udp_dport_to),
+                )
             else:
                 return UDP(sport=ports, dport=ports)
             else:
                 return UDP(sport=ports, dport=ports)
-        elif p == 'TCP':
+        elif p == "TCP":
             if ports == 0:
             if ports == 0:
-                return TCP(sport=random.randint(self.tcp_sport_from,
-                                                self.tcp_sport_to),
-                           dport=random.randint(self.tcp_dport_from,
-                                                self.tcp_dport_to))
+                return TCP(
+                    sport=random.randint(self.tcp_sport_from, self.tcp_sport_to),
+                    dport=random.randint(self.tcp_dport_from, self.tcp_dport_to),
+                )
             else:
                 return TCP(sport=ports, dport=ports)
             else:
                 return TCP(sport=ports, dport=ports)
-        return ''
-
-    def create_stream(self, src_if, packet_sizes, traffic_type=0, ipv6=0,
-                      proto=-1, ports=0, fragments=False,
-                      pkt_raw=True, etype=-1):
+        return ""
+
+    def create_stream(
+        self,
+        src_if,
+        packet_sizes,
+        traffic_type=0,
+        ipv6=0,
+        proto=-1,
+        ports=0,
+        fragments=False,
+        pkt_raw=True,
+        etype=-1,
+    ):
         """
         Create input packet stream for defined interface using hosts or
         deleted_hosts list.
         """
         Create input packet stream for defined interface using hosts or
         deleted_hosts list.
@@ -262,26 +279,25 @@ class TestClassifyAcl(TestClassifier):
                     payload = self.info_to_payload(pkt_info)
                     p = Ether(dst=dst_host.mac, src=src_host.mac)
                     if etype > 0:
                     payload = self.info_to_payload(pkt_info)
                     p = Ether(dst=dst_host.mac, src=src_host.mac)
                     if etype > 0:
-                        p = Ether(dst=dst_host.mac,
-                                  src=src_host.mac,
-                                  type=etype)
+                        p = Ether(dst=dst_host.mac, src=src_host.mac, type=etype)
                     if pkt_info.ip:
                         p /= IPv6(dst=dst_host.ip6, src=src_host.ip6)
                         if fragments:
                             p /= IPv6ExtHdrFragment(offset=64, m=1)
                     else:
                         if fragments:
                     if pkt_info.ip:
                         p /= IPv6(dst=dst_host.ip6, src=src_host.ip6)
                         if fragments:
                             p /= IPv6ExtHdrFragment(offset=64, m=1)
                     else:
                         if fragments:
-                            p /= IP(src=src_host.ip4, dst=dst_host.ip4,
-                                    flags=1, frag=64)
+                            p /= IP(
+                                src=src_host.ip4, dst=dst_host.ip4, flags=1, frag=64
+                            )
                         else:
                             p /= IP(src=src_host.ip4, dst=dst_host.ip4)
                     if traffic_type == self.ICMP:
                         if pkt_info.ip:
                         else:
                             p /= IP(src=src_host.ip4, dst=dst_host.ip4)
                     if traffic_type == self.ICMP:
                         if pkt_info.ip:
-                            p /= ICMPv6EchoRequest(type=self.icmp6_type,
-                                                   code=self.icmp6_code)
+                            p /= ICMPv6EchoRequest(
+                                type=self.icmp6_type, code=self.icmp6_code
+                            )
                         else:
                         else:
-                            p /= ICMP(type=self.icmp4_type,
-                                      code=self.icmp4_code)
+                            p /= ICMP(type=self.icmp4_type, code=self.icmp4_code)
                     else:
                         p /= self.create_upper_layer(i, pkt_info.proto, ports)
                     if pkt_raw:
                     else:
                         p /= self.create_upper_layer(i, pkt_info.proto, ports)
                     if pkt_raw:
@@ -293,8 +309,7 @@ class TestClassifyAcl(TestClassifier):
                     pkts.append(p)
         return pkts
 
                     pkts.append(p)
         return pkts
 
-    def verify_capture(self, pg_if, capture,
-                       traffic_type=0, ip_type=0, etype=-1):
+    def verify_capture(self, pg_if, capture, traffic_type=0, ip_type=0, etype=-1):
         """
         Verify captured input packet stream for defined interface.
 
         """
         Verify captured input packet stream for defined interface.
 
@@ -309,22 +324,21 @@ class TestClassifyAcl(TestClassifier):
         for packet in capture:
             if etype > 0:
                 if packet[Ether].type != etype:
         for packet in capture:
             if etype > 0:
                 if packet[Ether].type != etype:
-                    self.logger.error(ppp("Unexpected ethertype in packet:",
-                                          packet))
+                    self.logger.error(ppp("Unexpected ethertype in packet:", packet))
                 else:
                     continue
             try:
                 # Raw data for ICMPv6 are stored in ICMPv6EchoRequest.data
                 if traffic_type == self.ICMP and ip_type == self.IPV6:
                 else:
                     continue
             try:
                 # Raw data for ICMPv6 are stored in ICMPv6EchoRequest.data
                 if traffic_type == self.ICMP and ip_type == self.IPV6:
-                    payload_info = self.payload_to_info(
-                        packet[ICMPv6EchoRequest].data)
+                    payload_info = self.payload_to_info(packet[ICMPv6EchoRequest].data)
                     payload = packet[ICMPv6EchoRequest]
                 else:
                     payload_info = self.payload_to_info(packet[Raw])
                     payload = packet[self.proto_map[payload_info.proto]]
             except:
                     payload = packet[ICMPv6EchoRequest]
                 else:
                     payload_info = self.payload_to_info(packet[Raw])
                     payload = packet[self.proto_map[payload_info.proto]]
             except:
-                self.logger.error(ppp("Unexpected or invalid packet "
-                                      "(outside network):", packet))
+                self.logger.error(
+                    ppp("Unexpected or invalid packet (outside network):", packet)
+                )
                 raise
 
             if ip_type != 0:
                 raise
 
             if ip_type != 0:
@@ -338,8 +352,9 @@ class TestClassifyAcl(TestClassifier):
                         self.assertEqual(payload.type, self.icmp6_type)
                         self.assertEqual(payload.code, self.icmp6_code)
                 except:
                         self.assertEqual(payload.type, self.icmp6_type)
                         self.assertEqual(payload.code, self.icmp6_code)
                 except:
-                    self.logger.error(ppp("Unexpected or invalid packet "
-                                          "(outside network):", packet))
+                    self.logger.error(
+                        ppp("Unexpected or invalid packet (outside network):", packet)
+                    )
                     raise
             else:
                 try:
                     raise
             else:
                 try:
@@ -349,12 +364,13 @@ class TestClassifyAcl(TestClassifier):
                     packet_index = payload_info.index
 
                     self.assertEqual(payload_info.dst, dst_sw_if_index)
                     packet_index = payload_info.index
 
                     self.assertEqual(payload_info.dst, dst_sw_if_index)
-                    self.logger.debug("Got packet on port %s: src=%u (id=%u)" %
-                                      (pg_if.name, payload_info.src,
-                                       packet_index))
+                    self.logger.debug(
+                        "Got packet on port %s: src=%u (id=%u)"
+                        % (pg_if.name, payload_info.src, packet_index)
+                    )
                     next_info = self.get_next_packet_info_for_interface2(
                     next_info = self.get_next_packet_info_for_interface2(
-                        payload_info.src, dst_sw_if_index,
-                        last_info[payload_info.src])
+                        payload_info.src, dst_sw_if_index, last_info[payload_info.src]
+                    )
                     last_info[payload_info.src] = next_info
                     self.assertTrue(next_info is not None)
                     self.assertEqual(packet_index, next_info.index)
                     last_info[payload_info.src] = next_info
                     self.assertTrue(next_info is not None)
                     self.assertEqual(packet_index, next_info.index)
@@ -363,29 +379,26 @@ class TestClassifyAcl(TestClassifier):
                     self.assertEqual(ip.src, saved_packet[ip_version].src)
                     self.assertEqual(ip.dst, saved_packet[ip_version].dst)
                     p = self.proto_map[payload_info.proto]
                     self.assertEqual(ip.src, saved_packet[ip_version].src)
                     self.assertEqual(ip.dst, saved_packet[ip_version].dst)
                     p = self.proto_map[payload_info.proto]
-                    if p == 'TCP':
+                    if p == "TCP":
                         tcp = packet[TCP]
                         tcp = packet[TCP]
-                        self.assertEqual(tcp.sport, saved_packet[
-                            TCP].sport)
-                        self.assertEqual(tcp.dport, saved_packet[
-                            TCP].dport)
-                    elif p == 'UDP':
+                        self.assertEqual(tcp.sport, saved_packet[TCP].sport)
+                        self.assertEqual(tcp.dport, saved_packet[TCP].dport)
+                    elif p == "UDP":
                         udp = packet[UDP]
                         udp = packet[UDP]
-                        self.assertEqual(udp.sport, saved_packet[
-                            UDP].sport)
-                        self.assertEqual(udp.dport, saved_packet[
-                            UDP].dport)
+                        self.assertEqual(udp.sport, saved_packet[UDP].sport)
+                        self.assertEqual(udp.dport, saved_packet[UDP].dport)
                 except:
                 except:
-                    self.logger.error(ppp("Unexpected or invalid packet:",
-                                          packet))
+                    self.logger.error(ppp("Unexpected or invalid packet:", packet))
                     raise
         for i in self.pg_interfaces:
             remaining_packet = self.get_next_packet_info_for_interface2(
                     raise
         for i in self.pg_interfaces:
             remaining_packet = self.get_next_packet_info_for_interface2(
-                i, dst_sw_if_index, last_info[i.sw_if_index])
+                i, dst_sw_if_index, last_info[i.sw_if_index]
+            )
             self.assertTrue(
                 remaining_packet is None,
             self.assertTrue(
                 remaining_packet is None,
-                "Port %u: Packet expected from source %u didn't arrive" %
-                (dst_sw_if_index, i.sw_if_index))
+                "Port %u: Packet expected from source %u didn't arrive"
+                % (dst_sw_if_index, i.sw_if_index),
+            )
 
     def run_traffic_no_check(self):
         # Test
 
     def run_traffic_no_check(self):
         # Test
@@ -400,16 +413,32 @@ class TestClassifyAcl(TestClassifier):
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
-    def run_verify_test(self, traffic_type=0, ip_type=0, proto=-1, ports=0,
-                        frags=False, pkt_raw=True, etype=-1):
+    def run_verify_test(
+        self,
+        traffic_type=0,
+        ip_type=0,
+        proto=-1,
+        ports=0,
+        frags=False,
+        pkt_raw=True,
+        etype=-1,
+    ):
         # Test
         # Create incoming packet streams for packet-generator interfaces
         pkts_cnt = 0
         for i in self.pg_interfaces:
             if self.flows.__contains__(i):
         # Test
         # Create incoming packet streams for packet-generator interfaces
         pkts_cnt = 0
         for i in self.pg_interfaces:
             if self.flows.__contains__(i):
-                pkts = self.create_stream(i, self.pg_if_packet_sizes,
-                                          traffic_type, ip_type, proto, ports,
-                                          frags, pkt_raw, etype)
+                pkts = self.create_stream(
+                    i,
+                    self.pg_if_packet_sizes,
+                    traffic_type,
+                    ip_type,
+                    proto,
+                    ports,
+                    frags,
+                    pkt_raw,
+                    etype,
+                )
                 if len(pkts) > 0:
                     i.add_stream(pkts)
                     pkts_cnt += len(pkts)
                 if len(pkts) > 0:
                     i.add_stream(pkts)
                     pkts_cnt += len(pkts)
@@ -424,20 +453,27 @@ class TestClassifyAcl(TestClassifier):
             if self.flows.__contains__(src_if):
                 for dst_if in self.flows[src_if]:
                     capture = dst_if.get_capture(pkts_cnt)
             if self.flows.__contains__(src_if):
                 for dst_if in self.flows[src_if]:
                     capture = dst_if.get_capture(pkts_cnt)
-                    self.logger.info("Verifying capture on interface %s" %
-                                     dst_if.name)
-                    self.verify_capture(dst_if, capture,
-                                        traffic_type, ip_type, etype)
+                    self.logger.info("Verifying capture on interface %s" % dst_if.name)
+                    self.verify_capture(dst_if, capture, traffic_type, ip_type, etype)
 
 
-    def run_verify_negat_test(self, traffic_type=0, ip_type=0, proto=-1,
-                              ports=0, frags=False, etype=-1):
+    def run_verify_negat_test(
+        self, traffic_type=0, ip_type=0, proto=-1, ports=0, frags=False, etype=-1
+    ):
         # Test
         self.reset_packet_infos()
         for i in self.pg_interfaces:
             if self.flows.__contains__(i):
         # Test
         self.reset_packet_infos()
         for i in self.pg_interfaces:
             if self.flows.__contains__(i):
-                pkts = self.create_stream(i, self.pg_if_packet_sizes,
-                                          traffic_type, ip_type, proto, ports,
-                                          frags, True, etype)
+                pkts = self.create_stream(
+                    i,
+                    self.pg_if_packet_sizes,
+                    traffic_type,
+                    ip_type,
+                    proto,
+                    ports,
+                    frags,
+                    True,
+                    etype,
+                )
                 if len(pkts) > 0:
                     i.add_stream(pkts)
 
                 if len(pkts) > 0:
                     i.add_stream(pkts)
 
@@ -450,101 +486,110 @@ class TestClassifyAcl(TestClassifier):
         for src_if in self.pg_interfaces:
             if self.flows.__contains__(src_if):
                 for dst_if in self.flows[src_if]:
         for src_if in self.pg_interfaces:
             if self.flows.__contains__(src_if):
                 for dst_if in self.flows[src_if]:
-                    self.logger.info("Verifying capture on interface %s" %
-                                     dst_if.name)
+                    self.logger.info("Verifying capture on interface %s" % dst_if.name)
                     capture = dst_if.get_capture(0)
                     self.assertEqual(len(capture), 0)
 
                     capture = dst_if.get_capture(0)
                     self.assertEqual(len(capture), 0)
 
-    def build_classify_table(self, src_mac='', dst_mac='', ether_type='',
-                             etype='', key='mac', hit_next_index=0xffffffff):
+    def build_classify_table(
+        self,
+        src_mac="",
+        dst_mac="",
+        ether_type="",
+        etype="",
+        key="mac",
+        hit_next_index=0xFFFFFFFF,
+    ):
         # Basic ACL testing
         # Basic ACL testing
-        a_mask = self.build_mac_mask(src_mac=src_mac, dst_mac=dst_mac,
-                                     ether_type=ether_type)
+        a_mask = self.build_mac_mask(
+            src_mac=src_mac, dst_mac=dst_mac, ether_type=ether_type
+        )
         self.create_classify_table(key, a_mask)
         for host in self.hosts_by_pg_idx[self.pg0.sw_if_index]:
         self.create_classify_table(key, a_mask)
         for host in self.hosts_by_pg_idx[self.pg0.sw_if_index]:
-            s_mac = host.mac if src_mac else ''
+            s_mac = host.mac if src_mac else ""
             if dst_mac:
                 for dst_if in self.flows[self.pg0]:
                     for dst_host in self.hosts_by_pg_idx[dst_if.sw_if_index]:
                         self.create_classify_session(
             if dst_mac:
                 for dst_if in self.flows[self.pg0]:
                     for dst_host in self.hosts_by_pg_idx[dst_if.sw_if_index]:
                         self.create_classify_session(
-                            self.pg0, self.acl_tbl_idx.get(key),
-                            self.build_mac_match(src_mac=s_mac,
-                                                 dst_mac=dst_host.mac,
-                                                 ether_type=etype),
-                            hit_next_index=hit_next_index)
+                            self.pg0,
+                            self.acl_tbl_idx.get(key),
+                            self.build_mac_match(
+                                src_mac=s_mac, dst_mac=dst_host.mac, ether_type=etype
+                            ),
+                            hit_next_index=hit_next_index,
+                        )
             else:
                 self.create_classify_session(
             else:
                 self.create_classify_session(
-                    self.pg0, self.acl_tbl_idx.get(key),
-                    self.build_mac_match(src_mac=s_mac, dst_mac='',
-                                         ether_type=etype),
-                    hit_next_index=hit_next_index)
+                    self.pg0,
+                    self.acl_tbl_idx.get(key),
+                    self.build_mac_match(src_mac=s_mac, dst_mac="", ether_type=etype),
+                    hit_next_index=hit_next_index,
+                )
 
     def test_0000_warmup_test(self):
 
     def test_0000_warmup_test(self):
-        """ Learn the MAC addresses
-        """
+        """Learn the MAC addresses"""
         self.create_hosts(2)
         self.run_traffic_no_check()
 
     def test_0010_inacl_permit_src_mac(self):
         self.create_hosts(2)
         self.run_traffic_no_check()
 
     def test_0010_inacl_permit_src_mac(self):
-        """ Input  L2 ACL test - permit source MAC
+        """Input  L2 ACL test - permit source MAC
 
         Test scenario for basic IP ACL with source IP
             - Create IPv4 stream for pg0 -> pg1 interface.
             - Create ACL with source MAC address.
             - Send and verify received packets on pg1 interface.
         """
 
         Test scenario for basic IP ACL with source IP
             - Create IPv4 stream for pg0 -> pg1 interface.
             - Create ACL with source MAC address.
             - Send and verify received packets on pg1 interface.
         """
-        key = 'mac_in'
-        self.build_classify_table(src_mac='ffffffffffff', key=key)
+        key = "mac_in"
+        self.build_classify_table(src_mac="ffffffffffff", key=key)
         self.input_acl_set_interface(self.pg0, self.acl_tbl_idx.get(key))
         self.acl_active_table = key
         self.run_verify_test(self.IP, self.IPV4, -1)
 
     def test_0011_inacl_permit_dst_mac(self):
         self.input_acl_set_interface(self.pg0, self.acl_tbl_idx.get(key))
         self.acl_active_table = key
         self.run_verify_test(self.IP, self.IPV4, -1)
 
     def test_0011_inacl_permit_dst_mac(self):
-        """ Input  L2 ACL test - permit destination MAC
+        """Input  L2 ACL test - permit destination MAC
 
         Test scenario for basic IP ACL with source IP
             - Create IPv4 stream for pg0 -> pg1 interface.
             - Create ACL with destination MAC address.
             - Send and verify received packets on pg1 interface.
         """
 
         Test scenario for basic IP ACL with source IP
             - Create IPv4 stream for pg0 -> pg1 interface.
             - Create ACL with destination MAC address.
             - Send and verify received packets on pg1 interface.
         """
-        key = 'mac_in'
-        self.build_classify_table(dst_mac='ffffffffffff', key=key)
+        key = "mac_in"
+        self.build_classify_table(dst_mac="ffffffffffff", key=key)
         self.input_acl_set_interface(self.pg0, self.acl_tbl_idx.get(key))
         self.acl_active_table = key
         self.run_verify_test(self.IP, self.IPV4, -1)
 
     def test_0012_inacl_permit_src_dst_mac(self):
         self.input_acl_set_interface(self.pg0, self.acl_tbl_idx.get(key))
         self.acl_active_table = key
         self.run_verify_test(self.IP, self.IPV4, -1)
 
     def test_0012_inacl_permit_src_dst_mac(self):
-        """ Input  L2 ACL test - permit source and destination MAC
+        """Input  L2 ACL test - permit source and destination MAC
 
         Test scenario for basic IP ACL with source IP
             - Create IPv4 stream for pg0 -> pg1 interface.
             - Create ACL with source and destination MAC addresses.
             - Send and verify received packets on pg1 interface.
         """
 
         Test scenario for basic IP ACL with source IP
             - Create IPv4 stream for pg0 -> pg1 interface.
             - Create ACL with source and destination MAC addresses.
             - Send and verify received packets on pg1 interface.
         """
-        key = 'mac_in'
+        key = "mac_in"
         self.build_classify_table(
         self.build_classify_table(
-            src_mac='ffffffffffff', dst_mac='ffffffffffff', key=key)
+            src_mac="ffffffffffff", dst_mac="ffffffffffff", key=key
+        )
         self.input_acl_set_interface(self.pg0, self.acl_tbl_idx.get(key))
         self.acl_active_table = key
         self.run_verify_test(self.IP, self.IPV4, -1)
 
     def test_0013_inacl_permit_ether_type(self):
         self.input_acl_set_interface(self.pg0, self.acl_tbl_idx.get(key))
         self.acl_active_table = key
         self.run_verify_test(self.IP, self.IPV4, -1)
 
     def test_0013_inacl_permit_ether_type(self):
-        """ Input  L2 ACL test - permit ether_type
+        """Input  L2 ACL test - permit ether_type
 
         Test scenario for basic IP ACL with source IP
             - Create IPv4 stream for pg0 -> pg1 interface.
             - Create ACL with destination MAC address.
             - Send and verify received packets on pg1 interface.
         """
 
         Test scenario for basic IP ACL with source IP
             - Create IPv4 stream for pg0 -> pg1 interface.
             - Create ACL with destination MAC address.
             - Send and verify received packets on pg1 interface.
         """
-        key = 'mac_in'
-        self.build_classify_table(
-            ether_type='ffff', etype=hex(ETH_P_IP)[2:], key=key)
+        key = "mac_in"
+        self.build_classify_table(ether_type="ffff", etype=hex(ETH_P_IP)[2:], key=key)
         self.input_acl_set_interface(self.pg0, self.acl_tbl_idx.get(key))
         self.acl_active_table = key
         self.run_verify_test(self.IP, self.IPV4, -1)
 
     def test_0015_inacl_deny(self):
         self.input_acl_set_interface(self.pg0, self.acl_tbl_idx.get(key))
         self.acl_active_table = key
         self.run_verify_test(self.IP, self.IPV4, -1)
 
     def test_0015_inacl_deny(self):
-        """ Input  L2 ACL test - deny
+        """Input  L2 ACL test - deny
 
         Test scenario for basic IP ACL with source IP
             - Create IPv4 stream for pg0 -> pg1 interface.
 
         Test scenario for basic IP ACL with source IP
             - Create IPv4 stream for pg0 -> pg1 interface.
@@ -552,57 +597,55 @@ class TestClassifyAcl(TestClassifier):
             - Create ACL with source MAC address.
             - Send and verify no received packets on pg1 interface.
         """
             - Create ACL with source MAC address.
             - Send and verify no received packets on pg1 interface.
         """
-        key = 'mac_in'
-        self.build_classify_table(
-            src_mac='ffffffffffff', hit_next_index=0, key=key)
+        key = "mac_in"
+        self.build_classify_table(src_mac="ffffffffffff", hit_next_index=0, key=key)
         self.input_acl_set_interface(self.pg0, self.acl_tbl_idx.get(key))
         self.acl_active_table = key
         self.run_verify_negat_test(self.IP, self.IPV4, -1)
 
     def test_0020_outacl_permit(self):
         self.input_acl_set_interface(self.pg0, self.acl_tbl_idx.get(key))
         self.acl_active_table = key
         self.run_verify_negat_test(self.IP, self.IPV4, -1)
 
     def test_0020_outacl_permit(self):
-        """ Output L2 ACL test - permit
+        """Output L2 ACL test - permit
 
         Test scenario for basic IP ACL with source IP
             - Create IPv4 stream for pg0 -> pg1 interface.
             - Create ACL with source MAC address.
             - Send and verify received packets on pg1 interface.
         """
 
         Test scenario for basic IP ACL with source IP
             - Create IPv4 stream for pg0 -> pg1 interface.
             - Create ACL with source MAC address.
             - Send and verify received packets on pg1 interface.
         """
-        key = 'mac_out'
-        self.build_classify_table(src_mac='ffffffffffff', key=key)
+        key = "mac_out"
+        self.build_classify_table(src_mac="ffffffffffff", key=key)
         self.output_acl_set_interface(self.pg1, self.acl_tbl_idx.get(key))
         self.acl_active_table = key
         self.run_verify_test(self.IP, self.IPV4, -1)
 
     def test_0025_outacl_deny(self):
         self.output_acl_set_interface(self.pg1, self.acl_tbl_idx.get(key))
         self.acl_active_table = key
         self.run_verify_test(self.IP, self.IPV4, -1)
 
     def test_0025_outacl_deny(self):
-        """ Output L2 ACL test - deny
+        """Output L2 ACL test - deny
 
         Test scenario for basic IP ACL with source IP
             - Create IPv4 stream for pg0 -> pg1 interface.
             - Create ACL with source MAC address.
             - Send and verify no received packets on pg1 interface.
         """
 
         Test scenario for basic IP ACL with source IP
             - Create IPv4 stream for pg0 -> pg1 interface.
             - Create ACL with source MAC address.
             - Send and verify no received packets on pg1 interface.
         """
-        key = 'mac_out'
-        self.build_classify_table(
-            src_mac='ffffffffffff', hit_next_index=0, key=key)
+        key = "mac_out"
+        self.build_classify_table(src_mac="ffffffffffff", hit_next_index=0, key=key)
         self.output_acl_set_interface(self.pg1, self.acl_tbl_idx.get(key))
         self.acl_active_table = key
         self.run_verify_negat_test(self.IP, self.IPV4, -1)
 
     def test_0030_inoutacl_permit(self):
         self.output_acl_set_interface(self.pg1, self.acl_tbl_idx.get(key))
         self.acl_active_table = key
         self.run_verify_negat_test(self.IP, self.IPV4, -1)
 
     def test_0030_inoutacl_permit(self):
-        """ Input+Output L2 ACL test - permit
+        """Input+Output L2 ACL test - permit
 
         Test scenario for basic IP ACL with source IP
             - Create IPv4 stream for pg0 -> pg1 interface.
             - Create ACLs with source MAC address.
             - Send and verify received packets on pg1 interface.
         """
 
         Test scenario for basic IP ACL with source IP
             - Create IPv4 stream for pg0 -> pg1 interface.
             - Create ACLs with source MAC address.
             - Send and verify received packets on pg1 interface.
         """
-        key = 'mac_inout'
-        self.build_classify_table(src_mac='ffffffffffff', key=key)
+        key = "mac_inout"
+        self.build_classify_table(src_mac="ffffffffffff", key=key)
         self.output_acl_set_interface(self.pg1, self.acl_tbl_idx.get(key))
         self.input_acl_set_interface(self.pg0, self.acl_tbl_idx.get(key))
         self.acl_active_table = key
         self.run_verify_test(self.IP, self.IPV4, -1)
 
 
         self.output_acl_set_interface(self.pg1, self.acl_tbl_idx.get(key))
         self.input_acl_set_interface(self.pg0, self.acl_tbl_idx.get(key))
         self.acl_active_table = key
         self.run_verify_test(self.IP, self.IPV4, -1)
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index 5005bf4..77dfdc0 100644 (file)
@@ -11,7 +11,8 @@ from framework import VppTestCase, VppTestRunner
 
 
 class TestCLI(VppTestCase):
 
 
 class TestCLI(VppTestCase):
-    """ CLI Test Case """
+    """CLI Test Case"""
+
     maxDiff = None
 
     @classmethod
     maxDiff = None
 
     @classmethod
@@ -31,21 +32,21 @@ class TestCLI(VppTestCase):
         super(TestCLI, self).tearDown()
 
     def test_cli_retval(self):
         super(TestCLI, self).tearDown()
 
     def test_cli_retval(self):
-        """ CLI inband retval """
-        rv = self.vapi.papi.cli_inband(cmd='this command does not exist')
+        """CLI inband retval"""
+        rv = self.vapi.papi.cli_inband(cmd="this command does not exist")
         self.assertNotEqual(rv.retval, 0)
 
         self.assertNotEqual(rv.retval, 0)
 
-        rv = self.vapi.papi.cli_inband(cmd='show version')
+        rv = self.vapi.papi.cli_inband(cmd="show version")
         self.assertEqual(rv.retval, 0)
 
     def test_long_cli_delay(self):
         self.assertEqual(rv.retval, 0)
 
     def test_long_cli_delay(self):
-        """ Test that VppApiClient raises VppIOError if timeout."""  # noqa
+        """Test that VppApiClient raises VppIOError if timeout."""  # noqa
         with self.assertRaises(VPPIOError) as ctx:
         with self.assertRaises(VPPIOError) as ctx:
-            rv = self.vapi.papi.cli_inband(cmd='wait 10')
+            rv = self.vapi.papi.cli_inband(cmd="wait 10")
 
     def test_long_cli_delay_override(self):
 
     def test_long_cli_delay_override(self):
-        """ Test per-command _timeout option."""  # noqa
-        rv = self.vapi.papi.cli_inband(cmd='wait 10', _timeout=15)
+        """Test per-command _timeout option."""  # noqa
+        rv = self.vapi.papi.cli_inband(cmd="wait 10", _timeout=15)
         self.assertEqual(rv.retval, 0)
 
 
         self.assertEqual(rv.retval, 0)
 
 
@@ -55,8 +56,10 @@ class TestCLIExtendedVapiTimeout(VppTestCase):
     @classmethod
     def setUpClass(cls):
         cls.vapi_response_timeout = 15
     @classmethod
     def setUpClass(cls):
         cls.vapi_response_timeout = 15
-        cls.__doc__ = " CLI Test Case w/ Extended (%ssec) Vapi Timeout " \
-                      % cls.vapi_response_timeout
+        cls.__doc__ = (
+            " CLI Test Case w/ Extended (%ssec) Vapi Timeout "
+            % cls.vapi_response_timeout
+        )
         super(TestCLIExtendedVapiTimeout, cls).setUpClass()
 
     @classmethod
         super(TestCLIExtendedVapiTimeout, cls).setUpClass()
 
     @classmethod
@@ -70,19 +73,21 @@ class TestCLIExtendedVapiTimeout(VppTestCase):
         super(TestCLIExtendedVapiTimeout, self).tearDown()
 
     def test_long_cli_delay(self):
         super(TestCLIExtendedVapiTimeout, self).tearDown()
 
     def test_long_cli_delay(self):
-        """ Test that delayed result returns with extended timeout."""
+        """Test that delayed result returns with extended timeout."""
         wait_secs = self.vapi_response_timeout - 1
 
         # get vpp time as float
         start = self.vapi.papi.show_vpe_system_time(
         wait_secs = self.vapi_response_timeout - 1
 
         # get vpp time as float
         start = self.vapi.papi.show_vpe_system_time(
-            _no_type_conversion=True).vpe_system_time
-        rv = self.vapi.papi.cli_inband(cmd='wait %s' % wait_secs)
+            _no_type_conversion=True
+        ).vpe_system_time
+        rv = self.vapi.papi.cli_inband(cmd="wait %s" % wait_secs)
         now = self.vapi.papi.show_vpe_system_time(
         now = self.vapi.papi.show_vpe_system_time(
-            _no_type_conversion=True).vpe_system_time
+            _no_type_conversion=True
+        ).vpe_system_time
 
         # assume that the overhead of the measurement is not more that .5 sec.
         self.assertEqual(round(now - start), wait_secs)
 
 
 
         # assume that the overhead of the measurement is not more that .5 sec.
         self.assertEqual(round(now - start), wait_secs)
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index 25c2a64..e2e7c6b 100644 (file)
@@ -15,8 +15,14 @@ from scapy.layers.inet6 import ICMPv6EchoRequest, ICMPv6EchoReply
 
 import struct
 
 
 import struct
 
-from ipaddress import ip_address, ip_network, \
-    IPv4Address, IPv6Address, IPv4Network, IPv6Network
+from ipaddress import (
+    ip_address,
+    ip_network,
+    IPv4Address,
+    IPv6Address,
+    IPv4Network,
+    IPv6Network,
+)
 
 from vpp_object import VppObject
 from vpp_papi import VppEnum
 
 from vpp_object import VppObject
 from vpp_papi import VppEnum
@@ -29,18 +35,27 @@ DST = 1
 
 
 class CnatCommonTestCase(VppTestCase):
 
 
 class CnatCommonTestCase(VppTestCase):
-    """ CNat common test class """
+    """CNat common test class"""
 
     #
     # turn the scanner off whilst testing otherwise sessions
     # will time out
     #
 
     #
     # turn the scanner off whilst testing otherwise sessions
     # will time out
     #
-    extra_vpp_punt_config = ["cnat", "{",
-                             "session-db-buckets", "64",
-                             "session-cleanup-timeout", "0.1",
-                             "session-max-age", "1",
-                             "tcp-max-age", "1",
-                             "scanner", "off", "}"]
+    extra_vpp_punt_config = [
+        "cnat",
+        "{",
+        "session-db-buckets",
+        "64",
+        "session-cleanup-timeout",
+        "0.1",
+        "session-max-age",
+        "1",
+        "tcp-max-age",
+        "1",
+        "scanner",
+        "off",
+        "}",
+    ]
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -52,7 +67,7 @@ class CnatCommonTestCase(VppTestCase):
 
 
 class Endpoint(object):
 
 
 class Endpoint(object):
-    """ CNat endpoint """
+    """CNat endpoint"""
 
     def __init__(self, pg=None, pgi=None, port=0, is_v6=False, ip=None):
         self.port = port
 
     def __init__(self, pg=None, pgi=None, port=0, is_v6=False, ip=None):
         self.port = port
@@ -83,17 +98,18 @@ class Endpoint(object):
         return VppEnum.vl_api_address_family_t.ADDRESS_IP4
 
     def encode(self):
         return VppEnum.vl_api_address_family_t.ADDRESS_IP4
 
     def encode(self):
-        return {'addr': self.ip,
-                'port': self.port,
-                'sw_if_index': self.sw_if_index,
-                'if_af': self._vpp_if_af()}
+        return {
+            "addr": self.ip,
+            "port": self.port,
+            "sw_if_index": self.sw_if_index,
+            "if_af": self._vpp_if_af(),
+        }
 
     def __str__(self):
 
     def __str__(self):
-        return ("%s:%d" % (self.ip, self.port))
+        return "%s:%d" % (self.ip, self.port)
 
 
 class Translation(VppObject):
 
 
 class Translation(VppObject):
-
     def __init__(self, test, iproto, vip, paths):
         self._test = test
         self.vip = vip
     def __init__(self, test, iproto, vip, paths):
         self._test = test
         self.vip = vip
@@ -102,7 +118,7 @@ class Translation(VppObject):
         self.id = None
 
     def __str__(self):
         self.id = None
 
     def __str__(self):
-        return ("%s %s %s" % (self.vip, self.iproto, self.paths))
+        return "%s %s %s" % (self.vip, self.iproto, self.paths)
 
     def _vl4_proto(self):
         ip_proto = VppEnum.vl_api_ip_proto_t
 
     def _vl4_proto(self):
         ip_proto = VppEnum.vl_api_ip_proto_t
@@ -112,21 +128,26 @@ class Translation(VppObject):
         }[self.iproto]
 
     def _encoded_paths(self):
         }[self.iproto]
 
     def _encoded_paths(self):
-        return [{'src_ep': src.encode(),
-                 'dst_ep': dst.encode()} for (src, dst) in self.paths]
+        return [
+            {"src_ep": src.encode(), "dst_ep": dst.encode()}
+            for (src, dst) in self.paths
+        ]
 
     def add_vpp_config(self):
         r = self._test.vapi.cnat_translation_update(
 
     def add_vpp_config(self):
         r = self._test.vapi.cnat_translation_update(
-            {'vip': self.vip.encode(),
-             'ip_proto': self._vl4_proto(),
-             'n_paths': len(self.paths),
-             'paths': self._encoded_paths()})
+            {
+                "vip": self.vip.encode(),
+                "ip_proto": self._vl4_proto(),
+                "n_paths": len(self.paths),
+                "paths": self._encoded_paths(),
+            }
+        )
         self._test.registry.register(self, self._test.logger)
         self.id = r.id
         return self
 
     def remove_vpp_config(self):
         self._test.registry.register(self, self._test.logger)
         self.id = r.id
         return self
 
     def remove_vpp_config(self):
-        assert(self.id is not None)
+        assert self.id is not None
         self._test.vapi.cnat_translation_del(id=self.id)
         return self
 
         self._test.vapi.cnat_translation_del(id=self.id)
         return self
 
@@ -172,8 +193,9 @@ class CnatTestContext(object):
     def IP46(self):
         return IPv6 if self.is_v6 else IP
 
     def IP46(self):
         return IPv6 if self.is_v6 else IP
 
-    def cnat_send(self, src_pg, src_id, src_port, dst_pg, dst_id, dst_port,
-                  no_replies=False):
+    def cnat_send(
+        self, src_pg, src_id, src_port, dst_pg, dst_id, dst_port, no_replies=False
+    ):
         if isinstance(src_id, int):
             self.src_addr = self.get_ip46(src_pg.remote_hosts[src_id])
         else:
         if isinstance(src_id, int):
             self.src_addr = self.get_ip46(src_pg.remote_hosts[src_id])
         else:
@@ -191,11 +213,12 @@ class CnatTestContext(object):
             l4 = self.L4PROTO(id=self.src_port, type=self.dst_port)
         elif self.L4PROTO in [ICMP] and self.is_v6:
             l4 = ICMPv6EchoRequest(id=self.src_port)
             l4 = self.L4PROTO(id=self.src_port, type=self.dst_port)
         elif self.L4PROTO in [ICMP] and self.is_v6:
             l4 = ICMPv6EchoRequest(id=self.src_port)
-        p1 = (Ether(src=src_pg.remote_mac,
-                    dst=src_pg.local_mac) /
-              self.IP46(src=self.src_addr, dst=self.dst_addr) /
-              l4 /
-              Raw())
+        p1 = (
+            Ether(src=src_pg.remote_mac, dst=src_pg.local_mac)
+            / self.IP46(src=self.src_addr, dst=self.dst_addr)
+            / l4
+            / Raw()
+        )
 
         if no_replies:
             self._test.send_and_assert_no_replies(src_pg, p1 * N_PKTS, dst_pg)
 
         if no_replies:
             self._test.send_and_assert_no_replies(src_pg, p1 * N_PKTS, dst_pg)
@@ -230,38 +253,35 @@ class CnatTestContext(object):
             self._test.assertEqual(rx[self.IP46].dst, self.expect_dst_addr)
             self._test.assertEqual(rx[self.IP46].src, self.expect_src_addr)
             if self.L4PROTO in [TCP, UDP]:
             self._test.assertEqual(rx[self.IP46].dst, self.expect_dst_addr)
             self._test.assertEqual(rx[self.IP46].src, self.expect_src_addr)
             if self.L4PROTO in [TCP, UDP]:
-                self._test.assertEqual(
-                    rx[self.L4PROTO].dport, self.expect_dst_port)
-                self._test.assertEqual(
-                    rx[self.L4PROTO].sport, self.expect_src_port)
+                self._test.assertEqual(rx[self.L4PROTO].dport, self.expect_dst_port)
+                self._test.assertEqual(rx[self.L4PROTO].sport, self.expect_src_port)
             elif self.L4PROTO in [ICMP] and not self.is_v6:
             elif self.L4PROTO in [ICMP] and not self.is_v6:
-                self._test.assertEqual(
-                    rx[self.L4PROTO].type, self.expect_dst_port)
-                self._test.assertEqual(
-                    rx[self.L4PROTO].id, self.expect_src_port)
+                self._test.assertEqual(rx[self.L4PROTO].type, self.expect_dst_port)
+                self._test.assertEqual(rx[self.L4PROTO].id, self.expect_src_port)
             elif self.L4PROTO in [ICMP] and self.is_v6:
             elif self.L4PROTO in [ICMP] and self.is_v6:
-                self._test.assertEqual(
-                    rx[ICMPv6EchoRequest].id, self.expect_src_port)
+                self._test.assertEqual(rx[ICMPv6EchoRequest].id, self.expect_src_port)
         return self
 
     def cnat_send_return(self):
         """This sends the return traffic"""
         if self.L4PROTO in [TCP, UDP]:
         return self
 
     def cnat_send_return(self):
         """This sends the return traffic"""
         if self.L4PROTO in [TCP, UDP]:
-            l4 = self.L4PROTO(sport=self.expect_dst_port,
-                              dport=self.expect_src_port)
+            l4 = self.L4PROTO(sport=self.expect_dst_port, dport=self.expect_src_port)
         elif self.L4PROTO in [ICMP] and not self.is_v6:
             # icmp type 0 if echo reply
             l4 = self.L4PROTO(id=self.expect_src_port, type=0)
         elif self.L4PROTO in [ICMP] and self.is_v6:
             l4 = ICMPv6EchoReply(id=self.expect_src_port)
         src_mac = self.expected_dst_pg.remote_mac
         elif self.L4PROTO in [ICMP] and not self.is_v6:
             # icmp type 0 if echo reply
             l4 = self.L4PROTO(id=self.expect_src_port, type=0)
         elif self.L4PROTO in [ICMP] and self.is_v6:
             l4 = ICMPv6EchoReply(id=self.expect_src_port)
         src_mac = self.expected_dst_pg.remote_mac
-        p1 = (Ether(src=src_mac, dst=self.expected_dst_pg.local_mac) /
-              self.IP46(src=self.expect_dst_addr, dst=self.expect_src_addr) /
-              l4 /
-              Raw())
+        p1 = (
+            Ether(src=src_mac, dst=self.expected_dst_pg.local_mac)
+            / self.IP46(src=self.expect_dst_addr, dst=self.expect_src_addr)
+            / l4
+            / Raw()
+        )
 
         self.return_rxs = self._test.send_and_expect(
 
         self.return_rxs = self._test.send_and_expect(
-            self.expected_dst_pg, p1 * N_PKTS, self.expected_src_pg)
+            self.expected_dst_pg, p1 * N_PKTS, self.expected_src_pg
+        )
         return self
 
     def cnat_expect_return(self):
         return self
 
     def cnat_expect_return(self):
@@ -288,12 +308,16 @@ class CnatTestContext(object):
         ICMPelem = ICMPv6DestUnreach(code=1) if self.is_v6 else ICMP(type=11)
         InnerIP = self.rxs[0][self.IP46]
         p1 = (
         ICMPelem = ICMPv6DestUnreach(code=1) if self.is_v6 else ICMP(type=11)
         InnerIP = self.rxs[0][self.IP46]
         p1 = (
-            Ether(src=self.expected_dst_pg.remote_mac,
-                  dst=self.expected_dst_pg.local_mac) /
-            self.IP46(src=self.expect_dst_addr, dst=self.expect_src_addr) /
-            ICMPelem / InnerIP)
+            Ether(
+                src=self.expected_dst_pg.remote_mac, dst=self.expected_dst_pg.local_mac
+            )
+            / self.IP46(src=self.expect_dst_addr, dst=self.expect_src_addr)
+            / ICMPelem
+            / InnerIP
+        )
         self.return_rxs = self._test.send_and_expect(
         self.return_rxs = self._test.send_and_expect(
-            self.expected_dst_pg, p1 * N_PKTS, self.expected_src_pg)
+            self.expected_dst_pg, p1 * N_PKTS, self.expected_src_pg
+        )
         return self
 
     def cnat_expect_icmp_error_return(self):
         return self
 
     def cnat_expect_icmp_error_return(self):
@@ -306,12 +330,11 @@ class CnatTestContext(object):
             self._test.assertEqual(rx[self.IP46].src, self.dst_addr)
             self._test.assertEqual(rx[ICMP46][IP46err].src, self.src_addr)
             self._test.assertEqual(rx[ICMP46][IP46err].dst, self.dst_addr)
             self._test.assertEqual(rx[self.IP46].src, self.dst_addr)
             self._test.assertEqual(rx[ICMP46][IP46err].src, self.src_addr)
             self._test.assertEqual(rx[ICMP46][IP46err].dst, self.dst_addr)
-            self._test.assertEqual(
-                rx[ICMP46][IP46err][L4err].sport, self.src_port)
-            self._test.assertEqual(
-                rx[ICMP46][IP46err][L4err].dport, self.dst_port)
+            self._test.assertEqual(rx[ICMP46][IP46err][L4err].sport, self.src_port)
+            self._test.assertEqual(rx[ICMP46][IP46err][L4err].dport, self.dst_port)
         return self
 
         return self
 
+
 # -------------------------------------------------------------------
 # -------------------------------------------------------------------
 # -------------------------------------------------------------------
 # -------------------------------------------------------------------
 # -------------------------------------------------------------------
 # -------------------------------------------------------------------
@@ -319,7 +342,7 @@ class CnatTestContext(object):
 
 
 class TestCNatTranslation(CnatCommonTestCase):
 
 
 class TestCNatTranslation(CnatCommonTestCase):
-    """ CNat Translation """
+    """CNat Translation"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -359,7 +382,7 @@ class TestCNatTranslation(CnatCommonTestCase):
         super(TestCNatTranslation, self).tearDown()
 
     def cnat_translation(self):
         super(TestCNatTranslation, self).tearDown()
 
     def cnat_translation(self):
-        """ CNat Translation """
+        """CNat Translation"""
         self.logger.info(self.vapi.cli("sh cnat client"))
         self.logger.info(self.vapi.cli("sh cnat translation"))
 
         self.logger.info(self.vapi.cli("sh cnat client"))
         self.logger.info(self.vapi.cli("sh cnat translation"))
 
@@ -372,11 +395,9 @@ class TestCNatTranslation(CnatCommonTestCase):
             ctx = CnatTestContext(self, translation.iproto, vip.is_v6)
             for src_pgi, sport in product(range(N_REMOTE_HOSTS), [1234, 1233]):
                 # from client to vip
             ctx = CnatTestContext(self, translation.iproto, vip.is_v6)
             for src_pgi, sport in product(range(N_REMOTE_HOSTS), [1234, 1233]):
                 # from client to vip
-                ctx.cnat_send(self.pg0, src_pgi, sport,
-                              self.pg1, vip.ip, vip.port)
+                ctx.cnat_send(self.pg0, src_pgi, sport, self.pg1, vip.ip, vip.port)
                 dst_port = translation.paths[0][DST].port
                 dst_port = translation.paths[0][DST].port
-                ctx.cnat_expect(self.pg0, src_pgi, sport,
-                                self.pg1, nbr, dst_port)
+                ctx.cnat_expect(self.pg0, src_pgi, sport, self.pg1, nbr, dst_port)
                 # from vip to client
                 ctx.cnat_send_return().cnat_expect_return()
 
                 # from vip to client
                 ctx.cnat_send_return().cnat_expect_return()
 
@@ -384,8 +405,9 @@ class TestCNatTranslation(CnatCommonTestCase):
                 # packets to the VIP that do not match a
                 # translation are dropped
                 #
                 # packets to the VIP that do not match a
                 # translation are dropped
                 #
-                ctx.cnat_send(self.pg0, src_pgi, sport, self.pg1,
-                              vip.ip, 6666, no_replies=True)
+                ctx.cnat_send(
+                    self.pg0, src_pgi, sport, self.pg1, vip.ip, 6666, no_replies=True
+                )
 
                 #
                 # packets from the VIP that do not match a
 
                 #
                 # packets from the VIP that do not match a
@@ -399,7 +421,8 @@ class TestCNatTranslation(CnatCommonTestCase):
             #
             old_dst_port = translation.paths[0][DST].port
             translation.paths[0][DST].udpate(
             #
             old_dst_port = translation.paths[0][DST].port
             translation.paths[0][DST].udpate(
-                pg=self.pg2, pgi=0, port=5000, is_v6=vip.is_v6)
+                pg=self.pg2, pgi=0, port=5000, is_v6=vip.is_v6
+            )
             translation.add_vpp_config()
 
             #
             translation.add_vpp_config()
 
             #
@@ -408,10 +431,10 @@ class TestCNatTranslation(CnatCommonTestCase):
             for src_pgi in range(N_REMOTE_HOSTS):
                 for sport in [1234, 1233]:
                     # from client to vip
             for src_pgi in range(N_REMOTE_HOSTS):
                 for sport in [1234, 1233]:
                     # from client to vip
-                    ctx.cnat_send(self.pg0, src_pgi, sport,
-                                  self.pg1, vip.ip, vip.port)
-                    ctx.cnat_expect(self.pg0, src_pgi, sport,
-                                    self.pg1, nbr, old_dst_port)
+                    ctx.cnat_send(self.pg0, src_pgi, sport, self.pg1, vip.ip, vip.port)
+                    ctx.cnat_expect(
+                        self.pg0, src_pgi, sport, self.pg1, nbr, old_dst_port
+                    )
                     # from vip to client
                     ctx.cnat_send_return().cnat_expect_return()
 
                     # from vip to client
                     ctx.cnat_send_return().cnat_expect_return()
 
@@ -419,8 +442,7 @@ class TestCNatTranslation(CnatCommonTestCase):
             # new flows go to the new backend
             #
             for src_pgi in range(N_REMOTE_HOSTS):
             # new flows go to the new backend
             #
             for src_pgi in range(N_REMOTE_HOSTS):
-                ctx.cnat_send(self.pg0, src_pgi, 9999,
-                              self.pg2, vip.ip, vip.port)
+                ctx.cnat_send(self.pg0, src_pgi, 9999, self.pg2, vip.ip, vip.port)
                 ctx.cnat_expect(self.pg0, src_pgi, 9999, self.pg2, 0, 5000)
 
             self.logger.info(self.vapi.cli("sh cnat session verbose"))
                 ctx.cnat_expect(self.pg0, src_pgi, 9999, self.pg2, 0, 5000)
 
             self.logger.info(self.vapi.cli("sh cnat session verbose"))
@@ -444,10 +466,8 @@ class TestCNatTranslation(CnatCommonTestCase):
             for src_pgi in range(N_REMOTE_HOSTS):
                 for sport in [1234, 1233]:
                     # from client to vip
             for src_pgi in range(N_REMOTE_HOSTS):
                 for sport in [1234, 1233]:
                     # from client to vip
-                    ctx.cnat_send(self.pg0, src_pgi, sport,
-                                  self.pg2, vip.ip, vip.port)
-                    ctx.cnat_expect(self.pg0, src_pgi,
-                                    sport, self.pg2, 0, 5000)
+                    ctx.cnat_send(self.pg0, src_pgi, sport, self.pg2, vip.ip, vip.port)
+                    ctx.cnat_expect(self.pg0, src_pgi, sport, self.pg2, 0, 5000)
 
     def _test_icmp(self):
 
 
     def _test_icmp(self):
 
@@ -477,51 +497,87 @@ class TestCNatTranslation(CnatCommonTestCase):
 
     def _make_translations_v4(self):
         self.translations = []
 
     def _make_translations_v4(self):
         self.translations = []
-        self.translations.append(Translation(
-            self, TCP, Endpoint(ip="30.0.0.1", port=5555, is_v6=False),
-            [(
-                Endpoint(is_v6=False),
-                Endpoint(pg=self.pg1, pgi=0, port=4001, is_v6=False),
-            )]
-        ).add_vpp_config())
-        self.translations.append(Translation(
-            self, TCP, Endpoint(ip="30.0.0.2", port=5554, is_v6=False),
-            [(
-                Endpoint(is_v6=False),
-                Endpoint(pg=self.pg1, pgi=1, port=4002, is_v6=False),
-            )]
-        ).add_vpp_config())
-        self.translations.append(Translation(
-            self, UDP, Endpoint(ip="30.0.0.2", port=5553, is_v6=False),
-            [(
-                Endpoint(is_v6=False),
-                Endpoint(pg=self.pg1, pgi=2, port=4003, is_v6=False),
-            )]
-        ).add_vpp_config())
+        self.translations.append(
+            Translation(
+                self,
+                TCP,
+                Endpoint(ip="30.0.0.1", port=5555, is_v6=False),
+                [
+                    (
+                        Endpoint(is_v6=False),
+                        Endpoint(pg=self.pg1, pgi=0, port=4001, is_v6=False),
+                    )
+                ],
+            ).add_vpp_config()
+        )
+        self.translations.append(
+            Translation(
+                self,
+                TCP,
+                Endpoint(ip="30.0.0.2", port=5554, is_v6=False),
+                [
+                    (
+                        Endpoint(is_v6=False),
+                        Endpoint(pg=self.pg1, pgi=1, port=4002, is_v6=False),
+                    )
+                ],
+            ).add_vpp_config()
+        )
+        self.translations.append(
+            Translation(
+                self,
+                UDP,
+                Endpoint(ip="30.0.0.2", port=5553, is_v6=False),
+                [
+                    (
+                        Endpoint(is_v6=False),
+                        Endpoint(pg=self.pg1, pgi=2, port=4003, is_v6=False),
+                    )
+                ],
+            ).add_vpp_config()
+        )
 
     def _make_translations_v6(self):
         self.translations = []
 
     def _make_translations_v6(self):
         self.translations = []
-        self.translations.append(Translation(
-            self, TCP, Endpoint(ip="30::1", port=5555, is_v6=True),
-            [(
-                Endpoint(is_v6=True),
-                Endpoint(pg=self.pg1, pgi=0, port=4001, is_v6=True),
-            )]
-        ).add_vpp_config())
-        self.translations.append(Translation(
-            self, TCP, Endpoint(ip="30::2", port=5554, is_v6=True),
-            [(
-                Endpoint(is_v6=True),
-                Endpoint(pg=self.pg1, pgi=1, port=4002, is_v6=True),
-            )]
-        ).add_vpp_config())
-        self.translations.append(Translation(
-            self, UDP, Endpoint(ip="30::2", port=5553, is_v6=True),
-            [(
-                Endpoint(is_v6=True),
-                Endpoint(pg=self.pg1, pgi=2, port=4003, is_v6=True),
-            )]
-        ).add_vpp_config())
+        self.translations.append(
+            Translation(
+                self,
+                TCP,
+                Endpoint(ip="30::1", port=5555, is_v6=True),
+                [
+                    (
+                        Endpoint(is_v6=True),
+                        Endpoint(pg=self.pg1, pgi=0, port=4001, is_v6=True),
+                    )
+                ],
+            ).add_vpp_config()
+        )
+        self.translations.append(
+            Translation(
+                self,
+                TCP,
+                Endpoint(ip="30::2", port=5554, is_v6=True),
+                [
+                    (
+                        Endpoint(is_v6=True),
+                        Endpoint(pg=self.pg1, pgi=1, port=4002, is_v6=True),
+                    )
+                ],
+            ).add_vpp_config()
+        )
+        self.translations.append(
+            Translation(
+                self,
+                UDP,
+                Endpoint(ip="30::2", port=5553, is_v6=True),
+                [
+                    (
+                        Endpoint(is_v6=True),
+                        Endpoint(pg=self.pg1, pgi=2, port=4003, is_v6=True),
+                    )
+                ],
+            ).add_vpp_config()
+        )
 
     def test_icmp4(self):
         # """ CNat Translation icmp v4 """
 
     def test_icmp4(self):
         # """ CNat Translation icmp v4 """
@@ -545,7 +601,7 @@ class TestCNatTranslation(CnatCommonTestCase):
 
 
 class TestCNatSourceNAT(CnatCommonTestCase):
 
 
 class TestCNatSourceNAT(CnatCommonTestCase):
-    """ CNat Source NAT """
+    """CNat Source NAT"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -559,28 +615,36 @@ class TestCNatSourceNAT(CnatCommonTestCase):
         self.vapi.cnat_set_snat_addresses(
             snat_ip4=self.pg2.remote_hosts[0].ip4,
             snat_ip6=self.pg2.remote_hosts[0].ip6,
         self.vapi.cnat_set_snat_addresses(
             snat_ip4=self.pg2.remote_hosts[0].ip4,
             snat_ip6=self.pg2.remote_hosts[0].ip6,
-            sw_if_index=INVALID_INDEX)
+            sw_if_index=INVALID_INDEX,
+        )
         self.vapi.feature_enable_disable(
             enable=1 if is_enable else 0,
             arc_name="ip6-unicast",
             feature_name="cnat-snat-ip6",
         self.vapi.feature_enable_disable(
             enable=1 if is_enable else 0,
             arc_name="ip6-unicast",
             feature_name="cnat-snat-ip6",
-            sw_if_index=self.pg0.sw_if_index)
+            sw_if_index=self.pg0.sw_if_index,
+        )
         self.vapi.feature_enable_disable(
             enable=1 if is_enable else 0,
             arc_name="ip4-unicast",
             feature_name="cnat-snat-ip4",
         self.vapi.feature_enable_disable(
             enable=1 if is_enable else 0,
             arc_name="ip4-unicast",
             feature_name="cnat-snat-ip4",
-            sw_if_index=self.pg0.sw_if_index)
+            sw_if_index=self.pg0.sw_if_index,
+        )
 
         policie_tbls = VppEnum.vl_api_cnat_snat_policy_table_t
         self.vapi.cnat_set_snat_policy(
 
         policie_tbls = VppEnum.vl_api_cnat_snat_policy_table_t
         self.vapi.cnat_set_snat_policy(
-            policy=VppEnum.vl_api_cnat_snat_policies_t.CNAT_POLICY_IF_PFX)
+            policy=VppEnum.vl_api_cnat_snat_policies_t.CNAT_POLICY_IF_PFX
+        )
         for i in self.pg_interfaces:
             self.vapi.cnat_snat_policy_add_del_if(
         for i in self.pg_interfaces:
             self.vapi.cnat_snat_policy_add_del_if(
-                sw_if_index=i.sw_if_index, is_add=1 if is_enable else 0,
-                table=policie_tbls.CNAT_POLICY_INCLUDE_V6)
+                sw_if_index=i.sw_if_index,
+                is_add=1 if is_enable else 0,
+                table=policie_tbls.CNAT_POLICY_INCLUDE_V6,
+            )
             self.vapi.cnat_snat_policy_add_del_if(
             self.vapi.cnat_snat_policy_add_del_if(
-                sw_if_index=i.sw_if_index, is_add=1 if is_enable else 0,
-                table=policie_tbls.CNAT_POLICY_INCLUDE_V4)
+                sw_if_index=i.sw_if_index,
+                is_add=1 if is_enable else 0,
+                table=policie_tbls.CNAT_POLICY_INCLUDE_V4,
+            )
 
     def setUp(self):
         super(TestCNatSourceNAT, self).setUp()
 
     def setUp(self):
         super(TestCNatSourceNAT, self).setUp()
@@ -624,7 +688,7 @@ class TestCNatSourceNAT(CnatCommonTestCase):
     def sourcenat_test_icmp_echo_conf(self, is_v6=False):
         ctx = CnatTestContext(self, ICMP, is_v6=is_v6)
         # 8 is ICMP type echo (v4 only)
     def sourcenat_test_icmp_echo_conf(self, is_v6=False):
         ctx = CnatTestContext(self, ICMP, is_v6=is_v6)
         # 8 is ICMP type echo (v4 only)
-        ctx.cnat_send(self.pg0, 0, 0xfeed, self.pg1, 0, 8)
+        ctx.cnat_send(self.pg0, 0, 0xFEED, self.pg1, 0, 8)
         ctx.cnat_expect(self.pg2, 0, None, self.pg1, 0, 8)
         ctx.cnat_send_return().cnat_expect_return()
 
         ctx.cnat_expect(self.pg2, 0, None, self.pg1, 0, 8)
         ctx.cnat_send_return().cnat_expect_return()
 
@@ -638,14 +702,15 @@ class TestCNatSourceNAT(CnatCommonTestCase):
         # exclude dst address of pg1.1 from snat
         if is_v6:
             exclude_prefix = ip_network(
         # exclude dst address of pg1.1 from snat
         if is_v6:
             exclude_prefix = ip_network(
-                "%s/100" % self.pg1.remote_hosts[1].ip6, strict=False)
+                "%s/100" % self.pg1.remote_hosts[1].ip6, strict=False
+            )
         else:
             exclude_prefix = ip_network(
         else:
             exclude_prefix = ip_network(
-                "%s/16" % self.pg1.remote_hosts[1].ip4, strict=False)
+                "%s/16" % self.pg1.remote_hosts[1].ip4, strict=False
+            )
 
         # add remote host to exclude list
 
         # add remote host to exclude list
-        self.vapi.cnat_snat_policy_add_del_exclude_pfx(
-            prefix=exclude_prefix, is_add=1)
+        self.vapi.cnat_snat_policy_add_del_exclude_pfx(prefix=exclude_prefix, is_add=1)
 
         # We should not source NAT the id=1
         ctx.cnat_send(self.pg0, 0, 1234, self.pg1, 1, 6661)
 
         # We should not source NAT the id=1
         ctx.cnat_send(self.pg0, 0, 1234, self.pg1, 1, 6661)
@@ -658,8 +723,7 @@ class TestCNatSourceNAT(CnatCommonTestCase):
         ctx.cnat_send_return().cnat_expect_return()
 
         # remove remote host from exclude list
         ctx.cnat_send_return().cnat_expect_return()
 
         # remove remote host from exclude list
-        self.vapi.cnat_snat_policy_add_del_exclude_pfx(
-            prefix=exclude_prefix, is_add=0)
+        self.vapi.cnat_snat_policy_add_del_exclude_pfx(prefix=exclude_prefix, is_add=0)
         self.vapi.cnat_session_purge()
 
         # We should source NAT again
         self.vapi.cnat_session_purge()
 
         # We should source NAT again
@@ -676,7 +740,7 @@ class TestCNatSourceNAT(CnatCommonTestCase):
 
 
 class TestCNatDHCP(CnatCommonTestCase):
 
 
 class TestCNatDHCP(CnatCommonTestCase):
-    """ CNat Translation """
+    """CNat Translation"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -703,33 +767,35 @@ class TestCNatDHCP(CnatCommonTestCase):
 
     def check_resolved(self, tr, addr_id, is_v6=False):
         qt = tr.query_vpp_config()
 
     def check_resolved(self, tr, addr_id, is_v6=False):
         qt = tr.query_vpp_config()
-        self.assertEqual(str(qt.vip.addr), self.make_addr(
-            tr.vip.sw_if_index, addr_id, is_v6))
+        self.assertEqual(
+            str(qt.vip.addr), self.make_addr(tr.vip.sw_if_index, addr_id, is_v6)
+        )
         self.assertEqual(len(qt.paths), len(tr.paths))
         for path_tr, path_qt in zip(tr.paths, qt.paths):
             src_qt = path_qt.src_ep
             dst_qt = path_qt.dst_ep
             src_tr, dst_tr = path_tr
         self.assertEqual(len(qt.paths), len(tr.paths))
         for path_tr, path_qt in zip(tr.paths, qt.paths):
             src_qt = path_qt.src_ep
             dst_qt = path_qt.dst_ep
             src_tr, dst_tr = path_tr
-            self.assertEqual(str(src_qt.addr), self.make_addr(
-                src_tr.sw_if_index, addr_id, is_v6))
-            self.assertEqual(str(dst_qt.addr), self.make_addr(
-                dst_tr.sw_if_index, addr_id, is_v6))
+            self.assertEqual(
+                str(src_qt.addr), self.make_addr(src_tr.sw_if_index, addr_id, is_v6)
+            )
+            self.assertEqual(
+                str(dst_qt.addr), self.make_addr(dst_tr.sw_if_index, addr_id, is_v6)
+            )
 
     def add_del_address(self, pg, addr_id, is_add=True, is_v6=False):
         self.vapi.sw_interface_add_del_address(
             sw_if_index=pg.sw_if_index,
             prefix=self.make_prefix(pg.sw_if_index, addr_id, is_v6),
 
     def add_del_address(self, pg, addr_id, is_add=True, is_v6=False):
         self.vapi.sw_interface_add_del_address(
             sw_if_index=pg.sw_if_index,
             prefix=self.make_prefix(pg.sw_if_index, addr_id, is_v6),
-            is_add=1 if is_add else 0)
+            is_add=1 if is_add else 0,
+        )
 
     def _test_dhcp_v46(self, is_v6):
         self.create_pg_interfaces(range(4))
         for i in self.pg_interfaces:
             i.admin_up()
         paths = [
 
     def _test_dhcp_v46(self, is_v6):
         self.create_pg_interfaces(range(4))
         for i in self.pg_interfaces:
             i.admin_up()
         paths = [
-            (Endpoint(pg=self.pg1, is_v6=is_v6),
-             Endpoint(pg=self.pg2, is_v6=is_v6)),
-            (Endpoint(pg=self.pg1, is_v6=is_v6),
-             Endpoint(pg=self.pg3, is_v6=is_v6))
+            (Endpoint(pg=self.pg1, is_v6=is_v6), Endpoint(pg=self.pg2, is_v6=is_v6)),
+            (Endpoint(pg=self.pg1, is_v6=is_v6), Endpoint(pg=self.pg3, is_v6=is_v6)),
         ]
         ep = Endpoint(pg=self.pg0, is_v6=is_v6)
         t = Translation(self, TCP, ep, paths).add_vpp_config()
         ]
         ep = Endpoint(pg=self.pg0, is_v6=is_v6)
         t = Translation(self, TCP, ep, paths).add_vpp_config()
@@ -766,10 +832,13 @@ class TestCNatDHCP(CnatCommonTestCase):
             self.add_del_address(pg, addr_id=0, is_add=True, is_v6=False)
             self.add_del_address(pg, addr_id=0, is_add=True, is_v6=True)
         r = self.vapi.cnat_get_snat_addresses()
             self.add_del_address(pg, addr_id=0, is_add=True, is_v6=False)
             self.add_del_address(pg, addr_id=0, is_add=True, is_v6=True)
         r = self.vapi.cnat_get_snat_addresses()
-        self.assertEqual(str(r.snat_ip4), self.make_addr(
-            self.pg0.sw_if_index, addr_id=0, is_v6=False))
-        self.assertEqual(str(r.snat_ip6), self.make_addr(
-            self.pg0.sw_if_index, addr_id=0, is_v6=True))
+        self.assertEqual(
+            str(r.snat_ip4),
+            self.make_addr(self.pg0.sw_if_index, addr_id=0, is_v6=False),
+        )
+        self.assertEqual(
+            str(r.snat_ip6), self.make_addr(self.pg0.sw_if_index, addr_id=0, is_v6=True)
+        )
         # Add a new address on every interface, remove the old one
         # and check it is reflected in the cnat config
         for pg in self.pg_interfaces:
         # Add a new address on every interface, remove the old one
         # and check it is reflected in the cnat config
         for pg in self.pg_interfaces:
@@ -778,10 +847,13 @@ class TestCNatDHCP(CnatCommonTestCase):
             self.add_del_address(pg, addr_id=0, is_add=False, is_v6=False)
             self.add_del_address(pg, addr_id=0, is_add=False, is_v6=True)
         r = self.vapi.cnat_get_snat_addresses()
             self.add_del_address(pg, addr_id=0, is_add=False, is_v6=False)
             self.add_del_address(pg, addr_id=0, is_add=False, is_v6=True)
         r = self.vapi.cnat_get_snat_addresses()
-        self.assertEqual(str(r.snat_ip4), self.make_addr(
-            self.pg0.sw_if_index, addr_id=1, is_v6=False))
-        self.assertEqual(str(r.snat_ip6), self.make_addr(
-            self.pg0.sw_if_index, addr_id=1, is_v6=True))
+        self.assertEqual(
+            str(r.snat_ip4),
+            self.make_addr(self.pg0.sw_if_index, addr_id=1, is_v6=False),
+        )
+        self.assertEqual(
+            str(r.snat_ip6), self.make_addr(self.pg0.sw_if_index, addr_id=1, is_v6=True)
+        )
         # remove the configuration
         for pg in self.pg_interfaces:
             self.add_del_address(pg, addr_id=1, is_add=False, is_v6=False)
         # remove the configuration
         for pg in self.pg_interfaces:
             self.add_del_address(pg, addr_id=1, is_add=False, is_v6=False)
@@ -789,5 +861,5 @@ class TestCNatDHCP(CnatCommonTestCase):
         self.vapi.cnat_set_snat_addresses(sw_if_index=INVALID_INDEX)
 
 
         self.vapi.cnat_set_snat_addresses(sw_if_index=INVALID_INDEX)
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index 739aaaf..d79e5c3 100644 (file)
@@ -24,7 +24,7 @@ class Conn(L4_Conn):
 
 @unittest.skipUnless(config.extended, "part of extended tests")
 class ContainerIntegrationTestCase(VppTestCase):
 
 @unittest.skipUnless(config.extended, "part of extended tests")
 class ContainerIntegrationTestCase(VppTestCase):
-    """ Container integration extended testcases """
+    """Container integration extended testcases"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -43,22 +43,21 @@ class ContainerIntegrationTestCase(VppTestCase):
         super(ContainerIntegrationTestCase, cls).tearDownClass()
 
     def tearDown(self):
         super(ContainerIntegrationTestCase, cls).tearDownClass()
 
     def tearDown(self):
-        """Run standard test teardown and log various show commands
-        """
+        """Run standard test teardown and log various show commands"""
         super(ContainerIntegrationTestCase, self).tearDown()
 
     def show_commands_at_teardown(self):
         self.logger.info(self.vapi.cli("show ip neighbors"))
 
     def run_basic_conn_test(self, af, acl_side):
         super(ContainerIntegrationTestCase, self).tearDown()
 
     def show_commands_at_teardown(self):
         self.logger.info(self.vapi.cli("show ip neighbors"))
 
     def run_basic_conn_test(self, af, acl_side):
-        """ Basic connectivity test """
+        """Basic connectivity test"""
         conn1 = Conn(self, self.pg0, self.pg1, af, UDP, 42001, 4242)
         conn1.send_through(0)
         # the return packets should pass
         conn1.send_through(1)
 
     def run_negative_conn_test(self, af, acl_side):
         conn1 = Conn(self, self.pg0, self.pg1, af, UDP, 42001, 4242)
         conn1.send_through(0)
         # the return packets should pass
         conn1.send_through(1)
 
     def run_negative_conn_test(self, af, acl_side):
-        """ Packets with local spoofed address """
+        """Packets with local spoofed address"""
         conn1 = Conn(self, self.pg0, self.pg1, af, UDP, 42001, 4242)
         try:
             p2 = conn1.send_through(0).command()
         conn1 = Conn(self, self.pg0, self.pg1, af, UDP, 42001, 4242)
         try:
             p2 = conn1.send_through(0).command()
@@ -69,15 +68,15 @@ class ContainerIntegrationTestCase(VppTestCase):
         self.assert_equal(p2, None, ": packet should have been dropped")
 
     def test_0010_basic_conn_test(self):
         self.assert_equal(p2, None, ": packet should have been dropped")
 
     def test_0010_basic_conn_test(self):
-        """ IPv4 basic connectivity test """
+        """IPv4 basic connectivity test"""
         self.run_basic_conn_test(AF_INET, 0)
 
     def test_0011_basic_conn_test(self):
         self.run_basic_conn_test(AF_INET, 0)
 
     def test_0011_basic_conn_test(self):
-        """ IPv6 basic connectivity test """
+        """IPv6 basic connectivity test"""
         self.run_basic_conn_test(AF_INET6, 0)
 
     def test_0050_loopback_prepare_test(self):
         self.run_basic_conn_test(AF_INET6, 0)
 
     def test_0050_loopback_prepare_test(self):
-        """ Create loopbacks overlapping with remote addresses """
+        """Create loopbacks overlapping with remote addresses"""
         self.create_loopback_interfaces(2)
         for i in range(2):
             intf = self.lo_interfaces[i]
         self.create_loopback_interfaces(2)
         for i in range(2):
             intf = self.lo_interfaces[i]
@@ -90,47 +89,60 @@ class ContainerIntegrationTestCase(VppTestCase):
             intf.config_ip6()
 
     def test_0110_basic_conn_test(self):
             intf.config_ip6()
 
     def test_0110_basic_conn_test(self):
-        """ IPv4 local-spoof connectivity test """
+        """IPv4 local-spoof connectivity test"""
         self.run_negative_conn_test(AF_INET, 0)
 
     def test_0111_basic_conn_test(self):
         self.run_negative_conn_test(AF_INET, 0)
 
     def test_0111_basic_conn_test(self):
-        """ IPv6 local-spoof connectivity test """
+        """IPv6 local-spoof connectivity test"""
         self.run_negative_conn_test(AF_INET, 1)
 
     def test_0200_basic_conn_test(self):
         self.run_negative_conn_test(AF_INET, 1)
 
     def test_0200_basic_conn_test(self):
-        """ Configure container commands """
+        """Configure container commands"""
         for i in range(2):
         for i in range(2):
-            for addr in [self.pg_interfaces[i].remote_ip4,
-                         self.pg_interfaces[i].remote_ip6]:
-                self.vapi.ppcli("ip container " + addr + " " +
-                                self.pg_interfaces[i].name)
-                self.vapi.ppcli("stn rule address " + addr +
-                                " interface " + self.pg_interfaces[i].name)
+            for addr in [
+                self.pg_interfaces[i].remote_ip4,
+                self.pg_interfaces[i].remote_ip6,
+            ]:
+                self.vapi.ppcli(
+                    "ip container " + addr + " " + self.pg_interfaces[i].name
+                )
+                self.vapi.ppcli(
+                    "stn rule address "
+                    + addr
+                    + " interface "
+                    + self.pg_interfaces[i].name
+                )
 
     def test_0210_basic_conn_test(self):
 
     def test_0210_basic_conn_test(self):
-        """ IPv4 test after configuring container """
+        """IPv4 test after configuring container"""
         self.run_basic_conn_test(AF_INET, 0)
 
     def test_0211_basic_conn_test(self):
         self.run_basic_conn_test(AF_INET, 0)
 
     def test_0211_basic_conn_test(self):
-        """ IPv6 test after configuring container """
+        """IPv6 test after configuring container"""
         self.run_basic_conn_test(AF_INET, 1)
 
     def test_0300_unconfigure_commands(self):
         self.run_basic_conn_test(AF_INET, 1)
 
     def test_0300_unconfigure_commands(self):
-        """ Unconfigure container commands """
+        """Unconfigure container commands"""
         for i in range(2):
         for i in range(2):
-            for addr in [self.pg_interfaces[i].remote_ip4,
-                         self.pg_interfaces[i].remote_ip6]:
-                self.vapi.ppcli("ip container " + addr + " " +
-                                self.pg_interfaces[i].name +
-                                " del")
-                self.vapi.ppcli("stn rule address " + addr +
-                                " interface " + self.pg_interfaces[i].name +
-                                " del")
+            for addr in [
+                self.pg_interfaces[i].remote_ip4,
+                self.pg_interfaces[i].remote_ip6,
+            ]:
+                self.vapi.ppcli(
+                    "ip container " + addr + " " + self.pg_interfaces[i].name + " del"
+                )
+                self.vapi.ppcli(
+                    "stn rule address "
+                    + addr
+                    + " interface "
+                    + self.pg_interfaces[i].name
+                    + " del"
+                )
 
     def test_0410_spoof_test(self):
 
     def test_0410_spoof_test(self):
-        """ IPv4 local-spoof after unconfig test """
+        """IPv4 local-spoof after unconfig test"""
         self.run_negative_conn_test(AF_INET, 0)
 
     def test_0411_spoof_test(self):
         self.run_negative_conn_test(AF_INET, 0)
 
     def test_0411_spoof_test(self):
-        """ IPv6 local-spoof after unconfig test """
+        """IPv6 local-spoof after unconfig test"""
         self.run_negative_conn_test(AF_INET, 1)
         self.run_negative_conn_test(AF_INET, 1)
index e4cb856..158b07e 100644 (file)
@@ -6,7 +6,7 @@ from framework import tag_fixme_vpp_workers
 
 @tag_fixme_vpp_workers
 class TestCounters(VppTestCase):
 
 @tag_fixme_vpp_workers
 class TestCounters(VppTestCase):
-    """ Counters C Unit Tests """
+    """Counters C Unit Tests"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -23,17 +23,17 @@ class TestCounters(VppTestCase):
         super(TestCounters, self).tearDown()
 
     def test_counter_simple_expand(self):
         super(TestCounters, self).tearDown()
 
     def test_counter_simple_expand(self):
-        """ Simple Counter Expand """
+        """Simple Counter Expand"""
         error = self.vapi.cli("test counter simple expand")
 
         if error:
             self.logger.critical(error)
         error = self.vapi.cli("test counter simple expand")
 
         if error:
             self.logger.critical(error)
-            self.assertNotIn('failed', error)
+            self.assertNotIn("failed", error)
 
     def test_counter_combined_expand(self):
 
     def test_counter_combined_expand(self):
-        """ Combined Counter Expand """
+        """Combined Counter Expand"""
         error = self.vapi.cli("test counter combined expand")
 
         if error:
             self.logger.critical(error)
         error = self.vapi.cli("test counter combined expand")
 
         if error:
             self.logger.critical(error)
-            self.assertNotIn('failed', error)
+            self.assertNotIn("failed", error)
index aa62dba..07ddd2c 100644 (file)
@@ -6,7 +6,7 @@ from framework import VppTestCase, VppTestRunner
 
 
 class TestCrypto(VppTestCase):
 
 
 class TestCrypto(VppTestCase):
-    """ Crypto Test Case """
+    """Crypto Test Case"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -17,12 +17,13 @@ class TestCrypto(VppTestCase):
         super(TestCrypto, cls).tearDownClass()
 
     def test_crypto(self):
         super(TestCrypto, cls).tearDownClass()
 
     def test_crypto(self):
-        """ Crypto Unit Tests """
+        """Crypto Unit Tests"""
         error = self.vapi.cli("test crypto")
 
         if error:
             self.logger.critical(error)
         self.assertNotIn("FAIL", error)
 
         error = self.vapi.cli("test crypto")
 
         if error:
             self.logger.critical(error)
         self.assertNotIn("FAIL", error)
 
-if __name__ == '__main__':
+
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index f137e76..ecd57a6 100644 (file)
@@ -15,7 +15,7 @@ from util import ppp
 
 
 class TestDET44(VppTestCase):
 
 
 class TestDET44(VppTestCase):
-    """ Deterministic NAT Test Cases """
+    """Deterministic NAT Test Cases"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -27,7 +27,7 @@ class TestDET44(VppTestCase):
         cls.udp_port_in = 6304
         cls.udp_external_port = 6304
         cls.icmp_id_in = 6305
         cls.udp_port_in = 6304
         cls.udp_external_port = 6304
         cls.icmp_id_in = 6305
-        cls.nat_addr = '10.0.0.3'
+        cls.nat_addr = "10.0.0.3"
 
         cls.create_pg_interfaces(range(3))
         cls.interfaces = list(cls.pg_interfaces)
 
         cls.create_pg_interfaces(range(3))
         cls.interfaces = list(cls.pg_interfaces)
@@ -79,8 +79,9 @@ class TestDET44(VppTestCase):
                     self.assertEqual(packet[ICMP].id, self.icmp_id_in)
             except:
                 fired = True
                     self.assertEqual(packet[ICMP].id, self.icmp_id_in)
             except:
                 fired = True
-                self.logger.error(ppp("Unexpected or invalid packet "
-                                      "(inside network):", packet))
+                self.logger.error(
+                    ppp("Unexpected or invalid packet (inside network):", packet)
+                )
         if fired:
             raise
 
         if fired:
             raise
 
@@ -112,10 +113,11 @@ class TestDET44(VppTestCase):
         """
 
         # SYN packet in->out
         """
 
         # SYN packet in->out
-        p = (Ether(src=in_if.remote_mac, dst=in_if.local_mac) /
-             IP(src=in_if.remote_ip4, dst=out_if.remote_ip4) /
-             TCP(sport=self.tcp_port_in, dport=self.tcp_external_port,
-             flags="S"))
+        p = (
+            Ether(src=in_if.remote_mac, dst=in_if.local_mac)
+            / IP(src=in_if.remote_ip4, dst=out_if.remote_ip4)
+            / TCP(sport=self.tcp_port_in, dport=self.tcp_external_port, flags="S")
+        )
         in_if.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         in_if.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -124,20 +126,22 @@ class TestDET44(VppTestCase):
         self.tcp_port_out = p[TCP].sport
 
         # SYN + ACK packet out->in
         self.tcp_port_out = p[TCP].sport
 
         # SYN + ACK packet out->in
-        p = (Ether(src=out_if.remote_mac, dst=out_if.local_mac) /
-             IP(src=out_if.remote_ip4, dst=self.nat_addr) /
-             TCP(sport=self.tcp_external_port, dport=self.tcp_port_out,
-             flags="SA"))
+        p = (
+            Ether(src=out_if.remote_mac, dst=out_if.local_mac)
+            / IP(src=out_if.remote_ip4, dst=self.nat_addr)
+            / TCP(sport=self.tcp_external_port, dport=self.tcp_port_out, flags="SA")
+        )
         out_if.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         in_if.get_capture(1)
 
         # ACK packet in->out
         out_if.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         in_if.get_capture(1)
 
         # ACK packet in->out
-        p = (Ether(src=in_if.remote_mac, dst=in_if.local_mac) /
-             IP(src=in_if.remote_ip4, dst=out_if.remote_ip4) /
-             TCP(sport=self.tcp_port_in, dport=self.tcp_external_port,
-             flags="A"))
+        p = (
+            Ether(src=in_if.remote_mac, dst=in_if.local_mac)
+            / IP(src=in_if.remote_ip4, dst=out_if.remote_ip4)
+            / TCP(sport=self.tcp_port_in, dport=self.tcp_external_port, flags="A")
+        )
         in_if.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         in_if.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -153,21 +157,27 @@ class TestDET44(VppTestCase):
         """
         pkts = []
         # TCP
         """
         pkts = []
         # TCP
-        p = (Ether(dst=in_if.local_mac, src=in_if.remote_mac) /
-             IP(src=in_if.remote_ip4, dst=out_if.remote_ip4, ttl=ttl) /
-             TCP(sport=self.tcp_port_in, dport=self.tcp_external_port))
+        p = (
+            Ether(dst=in_if.local_mac, src=in_if.remote_mac)
+            / IP(src=in_if.remote_ip4, dst=out_if.remote_ip4, ttl=ttl)
+            / TCP(sport=self.tcp_port_in, dport=self.tcp_external_port)
+        )
         pkts.append(p)
 
         # UDP
         pkts.append(p)
 
         # UDP
-        p = (Ether(dst=in_if.local_mac, src=in_if.remote_mac) /
-             IP(src=in_if.remote_ip4, dst=out_if.remote_ip4, ttl=ttl) /
-             UDP(sport=self.udp_port_in, dport=self.udp_external_port))
+        p = (
+            Ether(dst=in_if.local_mac, src=in_if.remote_mac)
+            / IP(src=in_if.remote_ip4, dst=out_if.remote_ip4, ttl=ttl)
+            / UDP(sport=self.udp_port_in, dport=self.udp_external_port)
+        )
         pkts.append(p)
 
         # ICMP
         pkts.append(p)
 
         # ICMP
-        p = (Ether(dst=in_if.local_mac, src=in_if.remote_mac) /
-             IP(src=in_if.remote_ip4, dst=out_if.remote_ip4, ttl=ttl) /
-             ICMP(id=self.icmp_id_in, type='echo-request'))
+        p = (
+            Ether(dst=in_if.local_mac, src=in_if.remote_mac)
+            / IP(src=in_if.remote_ip4, dst=out_if.remote_ip4, ttl=ttl)
+            / ICMP(id=self.icmp_id_in, type="echo-request")
+        )
         pkts.append(p)
 
         return pkts
         pkts.append(p)
 
         return pkts
@@ -184,21 +194,27 @@ class TestDET44(VppTestCase):
             dst_ip = self.nat_addr
         pkts = []
         # TCP
             dst_ip = self.nat_addr
         pkts = []
         # TCP
-        p = (Ether(dst=out_if.local_mac, src=out_if.remote_mac) /
-             IP(src=out_if.remote_ip4, dst=dst_ip, ttl=ttl) /
-             TCP(dport=self.tcp_port_out, sport=self.tcp_external_port))
+        p = (
+            Ether(dst=out_if.local_mac, src=out_if.remote_mac)
+            / IP(src=out_if.remote_ip4, dst=dst_ip, ttl=ttl)
+            / TCP(dport=self.tcp_port_out, sport=self.tcp_external_port)
+        )
         pkts.append(p)
 
         # UDP
         pkts.append(p)
 
         # UDP
-        p = (Ether(dst=out_if.local_mac, src=out_if.remote_mac) /
-             IP(src=out_if.remote_ip4, dst=dst_ip, ttl=ttl) /
-             UDP(dport=self.udp_port_out, sport=self.udp_external_port))
+        p = (
+            Ether(dst=out_if.local_mac, src=out_if.remote_mac)
+            / IP(src=out_if.remote_ip4, dst=dst_ip, ttl=ttl)
+            / UDP(dport=self.udp_port_out, sport=self.udp_external_port)
+        )
         pkts.append(p)
 
         # ICMP
         pkts.append(p)
 
         # ICMP
-        p = (Ether(dst=out_if.local_mac, src=out_if.remote_mac) /
-             IP(src=out_if.remote_ip4, dst=dst_ip, ttl=ttl) /
-             ICMP(id=self.icmp_external_id, type='echo-reply'))
+        p = (
+            Ether(dst=out_if.local_mac, src=out_if.remote_mac)
+            / IP(src=out_if.remote_ip4, dst=dst_ip, ttl=ttl)
+            / ICMP(id=self.icmp_external_id, type="echo-reply")
+        )
         pkts.append(p)
 
         return pkts
         pkts.append(p)
 
         return pkts
@@ -223,21 +239,26 @@ class TestDET44(VppTestCase):
                 else:
                     self.icmp_external_id = packet[ICMP].id
             except:
                 else:
                     self.icmp_external_id = packet[ICMP].id
             except:
-                self.logger.error(ppp("Unexpected or invalid packet "
-                                      "(outside network):", packet))
+                self.logger.error(
+                    ppp("Unexpected or invalid packet (outside network):", packet)
+                )
                 raise
 
     def test_deterministic_mode(self):
                 raise
 
     def test_deterministic_mode(self):
-        """ NAT plugin run deterministic mode """
-        in_addr = '172.16.255.0'
-        out_addr = '172.17.255.50'
-        in_addr_t = '172.16.255.20'
+        """NAT plugin run deterministic mode"""
+        in_addr = "172.16.255.0"
+        out_addr = "172.17.255.50"
+        in_addr_t = "172.16.255.20"
         in_plen = 24
         out_plen = 32
 
         in_plen = 24
         out_plen = 32
 
-        self.vapi.det44_add_del_map(is_add=1, in_addr=in_addr,
-                                    in_plen=in_plen, out_addr=out_addr,
-                                    out_plen=out_plen)
+        self.vapi.det44_add_del_map(
+            is_add=1,
+            in_addr=in_addr,
+            in_plen=in_plen,
+            out_addr=out_addr,
+            out_plen=out_plen,
+        )
 
         rep1 = self.vapi.det44_forward(in_addr_t)
         self.assertEqual(str(rep1.out_addr), out_addr)
 
         rep1 = self.vapi.det44_forward(in_addr_t)
         self.assertEqual(str(rep1.out_addr), out_addr)
@@ -254,40 +275,46 @@ class TestDET44(VppTestCase):
         self.assertEqual(out_plen, dsm.out_plen)
 
     def test_set_timeouts(self):
         self.assertEqual(out_plen, dsm.out_plen)
 
     def test_set_timeouts(self):
-        """ Set deterministic NAT timeouts """
+        """Set deterministic NAT timeouts"""
         timeouts_before = self.vapi.det44_get_timeouts()
 
         self.vapi.det44_set_timeouts(
             udp=timeouts_before.udp + 10,
             tcp_established=timeouts_before.tcp_established + 10,
             tcp_transitory=timeouts_before.tcp_transitory + 10,
         timeouts_before = self.vapi.det44_get_timeouts()
 
         self.vapi.det44_set_timeouts(
             udp=timeouts_before.udp + 10,
             tcp_established=timeouts_before.tcp_established + 10,
             tcp_transitory=timeouts_before.tcp_transitory + 10,
-            icmp=timeouts_before.icmp + 10)
+            icmp=timeouts_before.icmp + 10,
+        )
 
         timeouts_after = self.vapi.det44_get_timeouts()
 
         self.assertNotEqual(timeouts_before.udp, timeouts_after.udp)
         self.assertNotEqual(timeouts_before.icmp, timeouts_after.icmp)
 
         timeouts_after = self.vapi.det44_get_timeouts()
 
         self.assertNotEqual(timeouts_before.udp, timeouts_after.udp)
         self.assertNotEqual(timeouts_before.icmp, timeouts_after.icmp)
-        self.assertNotEqual(timeouts_before.tcp_established,
-                            timeouts_after.tcp_established)
-        self.assertNotEqual(timeouts_before.tcp_transitory,
-                            timeouts_after.tcp_transitory)
+        self.assertNotEqual(
+            timeouts_before.tcp_established, timeouts_after.tcp_established
+        )
+        self.assertNotEqual(
+            timeouts_before.tcp_transitory, timeouts_after.tcp_transitory
+        )
 
     def test_in(self):
 
     def test_in(self):
-        """ DET44 translation test (TCP, UDP, ICMP) """
+        """DET44 translation test (TCP, UDP, ICMP)"""
 
         nat_ip = "10.0.0.10"
 
 
         nat_ip = "10.0.0.10"
 
-        self.vapi.det44_add_del_map(is_add=1, in_addr=self.pg0.remote_ip4,
-                                    in_plen=32,
-                                    out_addr=socket.inet_aton(nat_ip),
-                                    out_plen=32)
+        self.vapi.det44_add_del_map(
+            is_add=1,
+            in_addr=self.pg0.remote_ip4,
+            in_plen=32,
+            out_addr=socket.inet_aton(nat_ip),
+            out_plen=32,
+        )
 
         self.vapi.det44_interface_add_del_feature(
 
         self.vapi.det44_interface_add_del_feature(
-            sw_if_index=self.pg0.sw_if_index,
-            is_add=1, is_inside=1)
+            sw_if_index=self.pg0.sw_if_index, is_add=1, is_inside=1
+        )
         self.vapi.det44_interface_add_del_feature(
         self.vapi.det44_interface_add_del_feature(
-            sw_if_index=self.pg1.sw_if_index,
-            is_add=1, is_inside=0)
+            sw_if_index=self.pg1.sw_if_index, is_add=1, is_inside=0
+        )
 
         # in2out
         pkts = self.create_stream_in(self.pg0, self.pg1)
 
         # in2out
         pkts = self.create_stream_in(self.pg0, self.pg1)
@@ -330,7 +357,7 @@ class TestDET44(VppTestCase):
         self.assertEqual(s.out_port, self.icmp_external_id)
 
     def test_multiple_users(self):
         self.assertEqual(s.out_port, self.icmp_external_id)
 
     def test_multiple_users(self):
-        """ Deterministic NAT multiple users """
+        """Deterministic NAT multiple users"""
 
         nat_ip = "10.0.0.10"
         port_in = 80
 
         nat_ip = "10.0.0.10"
         port_in = 80
@@ -339,20 +366,26 @@ class TestDET44(VppTestCase):
         host0 = self.pg0.remote_hosts[0]
         host1 = self.pg0.remote_hosts[1]
 
         host0 = self.pg0.remote_hosts[0]
         host1 = self.pg0.remote_hosts[1]
 
-        self.vapi.det44_add_del_map(is_add=1, in_addr=host0.ip4, in_plen=24,
-                                    out_addr=socket.inet_aton(nat_ip),
-                                    out_plen=32)
+        self.vapi.det44_add_del_map(
+            is_add=1,
+            in_addr=host0.ip4,
+            in_plen=24,
+            out_addr=socket.inet_aton(nat_ip),
+            out_plen=32,
+        )
         self.vapi.det44_interface_add_del_feature(
         self.vapi.det44_interface_add_del_feature(
-            sw_if_index=self.pg0.sw_if_index,
-            is_add=1, is_inside=1)
+            sw_if_index=self.pg0.sw_if_index, is_add=1, is_inside=1
+        )
         self.vapi.det44_interface_add_del_feature(
         self.vapi.det44_interface_add_del_feature(
-            sw_if_index=self.pg1.sw_if_index,
-            is_add=1, is_inside=0)
+            sw_if_index=self.pg1.sw_if_index, is_add=1, is_inside=0
+        )
 
         # host0 to out
 
         # host0 to out
-        p = (Ether(src=host0.mac, dst=self.pg0.local_mac) /
-             IP(src=host0.ip4, dst=self.pg1.remote_ip4) /
-             TCP(sport=port_in, dport=external_port))
+        p = (
+            Ether(src=host0.mac, dst=self.pg0.local_mac)
+            / IP(src=host0.ip4, dst=self.pg1.remote_ip4)
+            / TCP(sport=port_in, dport=external_port)
+        )
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -370,9 +403,11 @@ class TestDET44(VppTestCase):
             raise
 
         # host1 to out
             raise
 
         # host1 to out
-        p = (Ether(src=host1.mac, dst=self.pg0.local_mac) /
-             IP(src=host1.ip4, dst=self.pg1.remote_ip4) /
-             TCP(sport=port_in, dport=external_port))
+        p = (
+            Ether(src=host1.mac, dst=self.pg0.local_mac)
+            / IP(src=host1.ip4, dst=self.pg1.remote_ip4)
+            / TCP(sport=port_in, dport=external_port)
+        )
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -394,9 +429,11 @@ class TestDET44(VppTestCase):
         self.assertEqual(2, dms[0].ses_num)
 
         # out to host0
         self.assertEqual(2, dms[0].ses_num)
 
         # out to host0
-        p = (Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac) /
-             IP(src=self.pg1.remote_ip4, dst=nat_ip) /
-             TCP(sport=external_port, dport=port_out0))
+        p = (
+            Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
+            / IP(src=self.pg1.remote_ip4, dst=nat_ip)
+            / TCP(sport=external_port, dport=port_out0)
+        )
         self.pg1.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg1.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -414,9 +451,11 @@ class TestDET44(VppTestCase):
             raise
 
         # out to host1
             raise
 
         # out to host1
-        p = (Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac) /
-             IP(src=self.pg1.remote_ip4, dst=nat_ip) /
-             TCP(sport=external_port, dport=port_out1))
+        p = (
+            Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
+            / IP(src=self.pg1.remote_ip4, dst=nat_ip)
+            / TCP(sport=external_port, dport=port_out1)
+        )
         self.pg1.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg1.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -434,42 +473,44 @@ class TestDET44(VppTestCase):
             raise
 
         # session close api test
             raise
 
         # session close api test
-        self.vapi.det44_close_session_out(socket.inet_aton(nat_ip),
-                                          port_out1,
-                                          self.pg1.remote_ip4,
-                                          external_port)
+        self.vapi.det44_close_session_out(
+            socket.inet_aton(nat_ip), port_out1, self.pg1.remote_ip4, external_port
+        )
         dms = self.vapi.det44_map_dump()
         self.assertEqual(dms[0].ses_num, 1)
 
         dms = self.vapi.det44_map_dump()
         self.assertEqual(dms[0].ses_num, 1)
 
-        self.vapi.det44_close_session_in(host0.ip4,
-                                         port_in,
-                                         self.pg1.remote_ip4,
-                                         external_port)
+        self.vapi.det44_close_session_in(
+            host0.ip4, port_in, self.pg1.remote_ip4, external_port
+        )
         dms = self.vapi.det44_map_dump()
         self.assertEqual(dms[0].ses_num, 0)
 
     def test_tcp_session_close_detection_in(self):
         dms = self.vapi.det44_map_dump()
         self.assertEqual(dms[0].ses_num, 0)
 
     def test_tcp_session_close_detection_in(self):
-        """ DET44 TCP session close from inside network """
-        self.vapi.det44_add_del_map(is_add=1, in_addr=self.pg0.remote_ip4,
-                                    in_plen=32,
-                                    out_addr=socket.inet_aton(self.nat_addr),
-                                    out_plen=32)
+        """DET44 TCP session close from inside network"""
+        self.vapi.det44_add_del_map(
+            is_add=1,
+            in_addr=self.pg0.remote_ip4,
+            in_plen=32,
+            out_addr=socket.inet_aton(self.nat_addr),
+            out_plen=32,
+        )
         self.vapi.det44_interface_add_del_feature(
         self.vapi.det44_interface_add_del_feature(
-            sw_if_index=self.pg0.sw_if_index,
-            is_add=1, is_inside=1)
+            sw_if_index=self.pg0.sw_if_index, is_add=1, is_inside=1
+        )
         self.vapi.det44_interface_add_del_feature(
         self.vapi.det44_interface_add_del_feature(
-            sw_if_index=self.pg1.sw_if_index,
-            is_add=1, is_inside=0)
+            sw_if_index=self.pg1.sw_if_index, is_add=1, is_inside=0
+        )
 
         self.initiate_tcp_session(self.pg0, self.pg1)
 
         # close the session from inside
         try:
             # FIN packet in -> out
 
         self.initiate_tcp_session(self.pg0, self.pg1)
 
         # close the session from inside
         try:
             # FIN packet in -> out
-            p = (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-                 IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4) /
-                 TCP(sport=self.tcp_port_in, dport=self.tcp_external_port,
-                     flags="F"))
+            p = (
+                Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+                / IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4)
+                / TCP(sport=self.tcp_port_in, dport=self.tcp_external_port, flags="F")
+            )
             self.pg0.add_stream(p)
             self.pg_enable_capture(self.pg_interfaces)
             self.pg_start()
             self.pg0.add_stream(p)
             self.pg_enable_capture(self.pg_interfaces)
             self.pg_start()
@@ -478,17 +519,19 @@ class TestDET44(VppTestCase):
             pkts = []
 
             # ACK packet out -> in
             pkts = []
 
             # ACK packet out -> in
-            p = (Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac) /
-                 IP(src=self.pg1.remote_ip4, dst=self.nat_addr) /
-                 TCP(sport=self.tcp_external_port, dport=self.tcp_port_out,
-                     flags="A"))
+            p = (
+                Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
+                / IP(src=self.pg1.remote_ip4, dst=self.nat_addr)
+                / TCP(sport=self.tcp_external_port, dport=self.tcp_port_out, flags="A")
+            )
             pkts.append(p)
 
             # FIN packet out -> in
             pkts.append(p)
 
             # FIN packet out -> in
-            p = (Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac) /
-                 IP(src=self.pg1.remote_ip4, dst=self.nat_addr) /
-                 TCP(sport=self.tcp_external_port, dport=self.tcp_port_out,
-                     flags="F"))
+            p = (
+                Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
+                / IP(src=self.pg1.remote_ip4, dst=self.nat_addr)
+                / TCP(sport=self.tcp_external_port, dport=self.tcp_port_out, flags="F")
+            )
             pkts.append(p)
 
             self.pg1.add_stream(pkts)
             pkts.append(p)
 
             self.pg1.add_stream(pkts)
@@ -497,10 +540,11 @@ class TestDET44(VppTestCase):
             self.pg0.get_capture(2)
 
             # ACK packet in -> out
             self.pg0.get_capture(2)
 
             # ACK packet in -> out
-            p = (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-                 IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4) /
-                 TCP(sport=self.tcp_port_in, dport=self.tcp_external_port,
-                     flags="A"))
+            p = (
+                Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+                / IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4)
+                / TCP(sport=self.tcp_port_in, dport=self.tcp_external_port, flags="A")
+            )
             self.pg0.add_stream(p)
             self.pg_enable_capture(self.pg_interfaces)
             self.pg_start()
             self.pg0.add_stream(p)
             self.pg_enable_capture(self.pg_interfaces)
             self.pg_start()
@@ -514,27 +558,31 @@ class TestDET44(VppTestCase):
             raise
 
     def test_tcp_session_close_detection_out(self):
             raise
 
     def test_tcp_session_close_detection_out(self):
-        """ Deterministic NAT TCP session close from outside network """
-        self.vapi.det44_add_del_map(is_add=1, in_addr=self.pg0.remote_ip4,
-                                    in_plen=32,
-                                    out_addr=socket.inet_aton(self.nat_addr),
-                                    out_plen=32)
+        """Deterministic NAT TCP session close from outside network"""
+        self.vapi.det44_add_del_map(
+            is_add=1,
+            in_addr=self.pg0.remote_ip4,
+            in_plen=32,
+            out_addr=socket.inet_aton(self.nat_addr),
+            out_plen=32,
+        )
         self.vapi.det44_interface_add_del_feature(
         self.vapi.det44_interface_add_del_feature(
-            sw_if_index=self.pg0.sw_if_index,
-            is_add=1, is_inside=1)
+            sw_if_index=self.pg0.sw_if_index, is_add=1, is_inside=1
+        )
         self.vapi.det44_interface_add_del_feature(
         self.vapi.det44_interface_add_del_feature(
-            sw_if_index=self.pg1.sw_if_index,
-            is_add=1, is_inside=0)
+            sw_if_index=self.pg1.sw_if_index, is_add=1, is_inside=0
+        )
 
         self.initiate_tcp_session(self.pg0, self.pg1)
 
         # close the session from outside
         try:
             # FIN packet out -> in
 
         self.initiate_tcp_session(self.pg0, self.pg1)
 
         # close the session from outside
         try:
             # FIN packet out -> in
-            p = (Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac) /
-                 IP(src=self.pg1.remote_ip4, dst=self.nat_addr) /
-                 TCP(sport=self.tcp_external_port, dport=self.tcp_port_out,
-                     flags="F"))
+            p = (
+                Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
+                / IP(src=self.pg1.remote_ip4, dst=self.nat_addr)
+                / TCP(sport=self.tcp_external_port, dport=self.tcp_port_out, flags="F")
+            )
             self.pg1.add_stream(p)
             self.pg_enable_capture(self.pg_interfaces)
             self.pg_start()
             self.pg1.add_stream(p)
             self.pg_enable_capture(self.pg_interfaces)
             self.pg_start()
@@ -543,17 +591,19 @@ class TestDET44(VppTestCase):
             pkts = []
 
             # ACK packet in -> out
             pkts = []
 
             # ACK packet in -> out
-            p = (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-                 IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4) /
-                 TCP(sport=self.tcp_port_in, dport=self.tcp_external_port,
-                     flags="A"))
+            p = (
+                Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+                / IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4)
+                / TCP(sport=self.tcp_port_in, dport=self.tcp_external_port, flags="A")
+            )
             pkts.append(p)
 
             # ACK packet in -> out
             pkts.append(p)
 
             # ACK packet in -> out
-            p = (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-                 IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4) /
-                 TCP(sport=self.tcp_port_in, dport=self.tcp_external_port,
-                     flags="F"))
+            p = (
+                Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+                / IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4)
+                / TCP(sport=self.tcp_port_in, dport=self.tcp_external_port, flags="F")
+            )
             pkts.append(p)
 
             self.pg0.add_stream(pkts)
             pkts.append(p)
 
             self.pg0.add_stream(pkts)
@@ -562,10 +612,11 @@ class TestDET44(VppTestCase):
             self.pg1.get_capture(2)
 
             # ACK packet out -> in
             self.pg1.get_capture(2)
 
             # ACK packet out -> in
-            p = (Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac) /
-                 IP(src=self.pg1.remote_ip4, dst=self.nat_addr) /
-                 TCP(sport=self.tcp_external_port, dport=self.tcp_port_out,
-                     flags="A"))
+            p = (
+                Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
+                / IP(src=self.pg1.remote_ip4, dst=self.nat_addr)
+                / TCP(sport=self.tcp_external_port, dport=self.tcp_port_out, flags="A")
+            )
             self.pg1.add_stream(p)
             self.pg_enable_capture(self.pg_interfaces)
             self.pg_start()
             self.pg1.add_stream(p)
             self.pg_enable_capture(self.pg_interfaces)
             self.pg_start()
@@ -579,21 +630,23 @@ class TestDET44(VppTestCase):
             raise
 
     def test_session_timeout(self):
             raise
 
     def test_session_timeout(self):
-        """ Deterministic NAT session timeouts """
-        self.vapi.det44_add_del_map(is_add=1, in_addr=self.pg0.remote_ip4,
-                                    in_plen=32,
-                                    out_addr=socket.inet_aton(self.nat_addr),
-                                    out_plen=32)
+        """Deterministic NAT session timeouts"""
+        self.vapi.det44_add_del_map(
+            is_add=1,
+            in_addr=self.pg0.remote_ip4,
+            in_plen=32,
+            out_addr=socket.inet_aton(self.nat_addr),
+            out_plen=32,
+        )
         self.vapi.det44_interface_add_del_feature(
         self.vapi.det44_interface_add_del_feature(
-            sw_if_index=self.pg0.sw_if_index,
-            is_add=1, is_inside=1)
+            sw_if_index=self.pg0.sw_if_index, is_add=1, is_inside=1
+        )
         self.vapi.det44_interface_add_del_feature(
         self.vapi.det44_interface_add_del_feature(
-            sw_if_index=self.pg1.sw_if_index,
-            is_add=1, is_inside=0)
+            sw_if_index=self.pg1.sw_if_index, is_add=1, is_inside=0
+        )
 
         self.initiate_tcp_session(self.pg0, self.pg1)
 
         self.initiate_tcp_session(self.pg0, self.pg1)
-        self.vapi.det44_set_timeouts(udp=5, tcp_established=5,
-                                     tcp_transitory=5, icmp=5)
+        self.vapi.det44_set_timeouts(udp=5, tcp_established=5, tcp_transitory=5, icmp=5)
         pkts = self.create_stream_in(self.pg0, self.pg1)
         self.pg0.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
         pkts = self.create_stream_in(self.pg0, self.pg1)
         self.pg0.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
@@ -607,29 +660,35 @@ class TestDET44(VppTestCase):
     # TODO: ipfix needs to be separated from NAT base plugin
     @unittest.skipUnless(config.extended, "part of extended tests")
     def test_session_limit_per_user(self):
     # TODO: ipfix needs to be separated from NAT base plugin
     @unittest.skipUnless(config.extended, "part of extended tests")
     def test_session_limit_per_user(self):
-        """ Deterministic NAT maximum sessions per user limit """
-        self.vapi.det44_add_del_map(is_add=1, in_addr=self.pg0.remote_ip4,
-                                    in_plen=32,
-                                    out_addr=socket.inet_aton(self.nat_addr),
-                                    out_plen=32)
+        """Deterministic NAT maximum sessions per user limit"""
+        self.vapi.det44_add_del_map(
+            is_add=1,
+            in_addr=self.pg0.remote_ip4,
+            in_plen=32,
+            out_addr=socket.inet_aton(self.nat_addr),
+            out_plen=32,
+        )
         self.vapi.det44_interface_add_del_feature(
         self.vapi.det44_interface_add_del_feature(
-            sw_if_index=self.pg0.sw_if_index,
-            is_add=1, is_inside=1)
+            sw_if_index=self.pg0.sw_if_index, is_add=1, is_inside=1
+        )
         self.vapi.det44_interface_add_del_feature(
         self.vapi.det44_interface_add_del_feature(
-            sw_if_index=self.pg1.sw_if_index,
-            is_add=1, is_inside=0)
-        self.vapi.set_ipfix_exporter(collector_address=self.pg2.remote_ip4,
-                                     src_address=self.pg2.local_ip4,
-                                     path_mtu=512,
-                                     template_interval=10)
-        self.vapi.nat_ipfix_enable_disable(domain_id=1, src_port=4739,
-                                           enable=1)
+            sw_if_index=self.pg1.sw_if_index, is_add=1, is_inside=0
+        )
+        self.vapi.set_ipfix_exporter(
+            collector_address=self.pg2.remote_ip4,
+            src_address=self.pg2.local_ip4,
+            path_mtu=512,
+            template_interval=10,
+        )
+        self.vapi.nat_ipfix_enable_disable(domain_id=1, src_port=4739, enable=1)
 
         pkts = []
         for port in range(1025, 2025):
 
         pkts = []
         for port in range(1025, 2025):
-            p = (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-                 IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4) /
-                 UDP(sport=port, dport=port))
+            p = (
+                Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+                / IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4)
+                / UDP(sport=port, dport=port)
+            )
             pkts.append(p)
 
         self.pg0.add_stream(pkts)
             pkts.append(p)
 
         self.pg0.add_stream(pkts)
@@ -637,9 +696,11 @@ class TestDET44(VppTestCase):
         self.pg_start()
         self.pg1.get_capture(len(pkts))
 
         self.pg_start()
         self.pg1.get_capture(len(pkts))
 
-        p = (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-             IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4) /
-             UDP(sport=3001, dport=3002))
+        p = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4)
+            / UDP(sport=3001, dport=3002)
+        )
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -674,8 +735,5 @@ class TestDET44(VppTestCase):
         for p in capture:
             if p.haslayer(Data):
                 data = ipfix.decode_data_set(p.getlayer(Set))
         for p in capture:
             if p.haslayer(Data):
                 data = ipfix.decode_data_set(p.getlayer(Set))
-                self.verify_ipfix_max_entries_per_user(data,
-                                                       1000,
-                                                       self.pg0.remote_ip4)
-        self.vapi.nat_ipfix_enable_disable(domain_id=1, src_port=4739,
-                                           enable=0)
+                self.verify_ipfix_max_entries_per_user(data, 1000, self.pg0.remote_ip4)
+        self.vapi.nat_ipfix_enable_disable(domain_id=1, src_port=4739, enable=0)
index a3b410c..a349356 100644 (file)
@@ -16,9 +16,19 @@ from scapy.layers.inet import IP, UDP, ICMP
 from scapy.layers.inet6 import IPv6, in6_getnsmac
 from scapy.utils6 import in6_mactoifaceid
 from scapy.layers.dhcp import DHCP, BOOTP, DHCPTypes
 from scapy.layers.inet6 import IPv6, in6_getnsmac
 from scapy.utils6 import in6_mactoifaceid
 from scapy.layers.dhcp import DHCP, BOOTP, DHCPTypes
-from scapy.layers.dhcp6 import DHCP6, DHCP6_Solicit, DHCP6_RelayForward, \
-    DHCP6_RelayReply, DHCP6_Advertise, DHCP6OptRelayMsg, DHCP6OptIfaceId, \
-    DHCP6OptStatusCode, DHCP6OptVSS, DHCP6OptClientLinkLayerAddr, DHCP6_Request
+from scapy.layers.dhcp6 import (
+    DHCP6,
+    DHCP6_Solicit,
+    DHCP6_RelayForward,
+    DHCP6_RelayReply,
+    DHCP6_Advertise,
+    DHCP6OptRelayMsg,
+    DHCP6OptIfaceId,
+    DHCP6OptStatusCode,
+    DHCP6OptVSS,
+    DHCP6OptClientLinkLayerAddr,
+    DHCP6_Request,
+)
 from socket import AF_INET, AF_INET6, inet_pton, inet_ntop
 from scapy.utils6 import in6_ptop
 from vpp_papi import mac_pton, VppEnum
 from socket import AF_INET, AF_INET6, inet_pton, inet_ntop
 from scapy.utils6 import in6_ptop
 from vpp_papi import mac_pton, VppEnum
@@ -35,7 +45,7 @@ DHCP6_SERVER_PORT = 546
 
 @tag_run_solo
 class TestDHCP(VppTestCase):
 
 @tag_run_solo
 class TestDHCP(VppTestCase):
-    """ DHCP Test Case """
+    """DHCP Test Case"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -136,8 +146,7 @@ class TestDHCP(VppTestCase):
                     self.assertEqual(six.byte2int(data[2:3]), 0)
                     self.assertEqual(six.byte2int(data[3:4]), 0)
                     self.assertEqual(six.byte2int(data[4:5]), 0)
                     self.assertEqual(six.byte2int(data[2:3]), 0)
                     self.assertEqual(six.byte2int(data[3:4]), 0)
                     self.assertEqual(six.byte2int(data[4:5]), 0)
-                    self.assertEqual(six.byte2int(data[5:6]),
-                                     intf._sw_if_index)
+                    self.assertEqual(six.byte2int(data[5:6]), intf._sw_if_index)
 
                     #
                     # next sub-option is the IP address of the client side
 
                     #
                     # next sub-option is the IP address of the client side
@@ -179,16 +188,15 @@ class TestDHCP(VppTestCase):
                         self.assertEqual(six.byte2int(data[12:13]), 151)
                         self.assertEqual(six.byte2int(data[13:14]), id_len + 1)
                         self.assertEqual(six.byte2int(data[14:15]), 0)
                         self.assertEqual(six.byte2int(data[12:13]), 151)
                         self.assertEqual(six.byte2int(data[13:14]), id_len + 1)
                         self.assertEqual(six.byte2int(data[14:15]), 0)
-                        self.assertEqual(data[15:15 + id_len].decode('ascii'),
-                                         vpn_id)
+                        self.assertEqual(data[15 : 15 + id_len].decode("ascii"), vpn_id)
 
                         # VSS control sub-option
 
                         # VSS control sub-option
-                        self.assertEqual(six.byte2int(data[15 + len(vpn_id):
-                                                           16 + len(vpn_id)]),
-                                         152)
-                        self.assertEqual(six.byte2int(data[16 + len(vpn_id):
-                                                           17 + len(vpn_id)]),
-                                         0)
+                        self.assertEqual(
+                            six.byte2int(data[15 + len(vpn_id) : 16 + len(vpn_id)]), 152
+                        )
+                        self.assertEqual(
+                            six.byte2int(data[16 + len(vpn_id) : 17 + len(vpn_id)]), 0
+                        )
 
                     found = 1
         self.assertTrue(found)
 
                     found = 1
         self.assertTrue(found)
@@ -200,8 +208,7 @@ class TestDHCP(VppTestCase):
         found = False
         for o in dhcp.options:
             if isinstance(o, tuple):
         found = False
         for o in dhcp.options:
             if isinstance(o, tuple):
-                if o[0] == "message-type" \
-                   and DHCPTypes[o[1]] == name:
+                if o[0] == "message-type" and DHCPTypes[o[1]] == name:
                     found = True
         self.assertTrue(found)
 
                     found = True
         self.assertTrue(found)
 
@@ -219,8 +226,9 @@ class TestDHCP(VppTestCase):
         self.assertEqual(udp.sport, DHCP4_SERVER_PORT)
 
         self.verify_dhcp_msg_type(pkt, "offer")
         self.assertEqual(udp.sport, DHCP4_SERVER_PORT)
 
         self.verify_dhcp_msg_type(pkt, "offer")
-        data = self.validate_relay_options(pkt, intf, intf.local_ip4,
-                                           vpn_id, fib_id, oui)
+        data = self.validate_relay_options(
+            pkt, intf, intf.local_ip4, vpn_id, fib_id, oui
+        )
 
     def verify_orig_dhcp_pkt(self, pkt, intf, dscp, l2_bc=True):
         ether = pkt[Ether]
 
     def verify_orig_dhcp_pkt(self, pkt, intf, dscp, l2_bc=True):
         ether = pkt[Ether]
@@ -232,7 +240,7 @@ class TestDHCP(VppTestCase):
 
         ip = pkt[IP]
 
 
         ip = pkt[IP]
 
-        if (l2_bc):
+        if l2_bc:
             self.assertEqual(ip.dst, "255.255.255.255")
             self.assertEqual(ip.src, "0.0.0.0")
         else:
             self.assertEqual(ip.dst, "255.255.255.255")
             self.assertEqual(ip.src, "0.0.0.0")
         else:
@@ -244,17 +252,16 @@ class TestDHCP(VppTestCase):
         self.assertEqual(udp.dport, DHCP4_SERVER_PORT)
         self.assertEqual(udp.sport, DHCP4_CLIENT_PORT)
 
         self.assertEqual(udp.dport, DHCP4_SERVER_PORT)
         self.assertEqual(udp.sport, DHCP4_CLIENT_PORT)
 
-    def verify_orig_dhcp_discover(self, pkt, intf, hostname, client_id=None,
-                                  broadcast=True, dscp=0):
+    def verify_orig_dhcp_discover(
+        self, pkt, intf, hostname, client_id=None, broadcast=True, dscp=0
+    ):
         self.verify_orig_dhcp_pkt(pkt, intf, dscp)
 
         self.verify_dhcp_msg_type(pkt, "discover")
         self.verify_orig_dhcp_pkt(pkt, intf, dscp)
 
         self.verify_dhcp_msg_type(pkt, "discover")
-        self.verify_dhcp_has_option(pkt, "hostname",
-                                    hostname.encode('ascii'))
+        self.verify_dhcp_has_option(pkt, "hostname", hostname.encode("ascii"))
         if client_id:
         if client_id:
-            client_id = '\x00' + client_id
-            self.verify_dhcp_has_option(pkt, "client_id",
-                                        client_id.encode('ascii'))
+            client_id = "\x00" + client_id
+            self.verify_dhcp_has_option(pkt, "client_id", client_id.encode("ascii"))
         bootp = pkt[BOOTP]
         self.assertEqual(bootp.ciaddr, "0.0.0.0")
         self.assertEqual(bootp.giaddr, "0.0.0.0")
         bootp = pkt[BOOTP]
         self.assertEqual(bootp.ciaddr, "0.0.0.0")
         self.assertEqual(bootp.giaddr, "0.0.0.0")
@@ -263,15 +270,13 @@ class TestDHCP(VppTestCase):
         else:
             self.assertEqual(bootp.flags, 0x0000)
 
         else:
             self.assertEqual(bootp.flags, 0x0000)
 
-    def verify_orig_dhcp_request(self, pkt, intf, hostname, ip,
-                                 broadcast=True,
-                                 l2_bc=True,
-                                 dscp=0):
+    def verify_orig_dhcp_request(
+        self, pkt, intf, hostname, ip, broadcast=True, l2_bc=True, dscp=0
+    ):
         self.verify_orig_dhcp_pkt(pkt, intf, dscp, l2_bc=l2_bc)
 
         self.verify_dhcp_msg_type(pkt, "request")
         self.verify_orig_dhcp_pkt(pkt, intf, dscp, l2_bc=l2_bc)
 
         self.verify_dhcp_msg_type(pkt, "request")
-        self.verify_dhcp_has_option(pkt, "hostname",
-                                    hostname.encode('ascii'))
+        self.verify_dhcp_has_option(pkt, "hostname", hostname.encode("ascii"))
         self.verify_dhcp_has_option(pkt, "requested_addr", ip)
         bootp = pkt[BOOTP]
 
         self.verify_dhcp_has_option(pkt, "requested_addr", ip)
         bootp = pkt[BOOTP]
 
@@ -286,10 +291,17 @@ class TestDHCP(VppTestCase):
         else:
             self.assertEqual(bootp.flags, 0x0000)
 
         else:
             self.assertEqual(bootp.flags, 0x0000)
 
-    def verify_relayed_dhcp_discover(self, pkt, intf, src_intf=None,
-                                     fib_id=0, oui=0,
-                                     vpn_id="",
-                                     dst_mac=None, dst_ip=None):
+    def verify_relayed_dhcp_discover(
+        self,
+        pkt,
+        intf,
+        src_intf=None,
+        fib_id=0,
+        oui=0,
+        vpn_id="",
+        dst_mac=None,
+        dst_ip=None,
+    ):
         if not dst_mac:
             dst_mac = intf.remote_mac
         if not dst_ip:
         if not dst_mac:
             dst_mac = intf.remote_mac
         if not dst_ip:
@@ -312,24 +324,27 @@ class TestDHCP(VppTestCase):
         is_discover = False
         for o in dhcp.options:
             if isinstance(o, tuple):
         is_discover = False
         for o in dhcp.options:
             if isinstance(o, tuple):
-                if o[0] == "message-type" \
-                   and DHCPTypes[o[1]] == "discover":
+                if o[0] == "message-type" and DHCPTypes[o[1]] == "discover":
                     is_discover = True
         self.assertTrue(is_discover)
 
                     is_discover = True
         self.assertTrue(is_discover)
 
-        data = self.validate_relay_options(pkt, src_intf,
-                                           src_intf.local_ip4,
-                                           vpn_id,
-                                           fib_id, oui)
+        data = self.validate_relay_options(
+            pkt, src_intf, src_intf.local_ip4, vpn_id, fib_id, oui
+        )
         return data
 
         return data
 
-    def verify_dhcp6_solicit(self, pkt, intf,
-                             peer_ip, peer_mac,
-                             vpn_id="",
-                             fib_id=0,
-                             oui=0,
-                             dst_mac=None,
-                             dst_ip=None):
+    def verify_dhcp6_solicit(
+        self,
+        pkt,
+        intf,
+        peer_ip,
+        peer_mac,
+        vpn_id="",
+        fib_id=0,
+        oui=0,
+        dst_mac=None,
+        dst_ip=None,
+    ):
         if not dst_mac:
             dst_mac = intf.remote_mac
         if not dst_ip:
         if not dst_mac:
             dst_mac = intf.remote_mac
         if not dst_ip:
@@ -377,8 +392,7 @@ class TestDHCP(VppTestCase):
             vss = pkt[DHCP6OptVSS]
             self.assertEqual(vss.optlen, id_len + 1)
             self.assertEqual(vss.type, 0)
             vss = pkt[DHCP6OptVSS]
             self.assertEqual(vss.optlen, id_len + 1)
             self.assertEqual(vss.type, 0)
-            self.assertEqual(vss.data[0:id_len].decode('ascii'),
-                             vpn_id)
+            self.assertEqual(vss.data[0:id_len].decode("ascii"), vpn_id)
 
         # the relay message should be an encoded Solicit
         msg = pkt[DHCP6OptRelayMsg]
 
         # the relay message should be an encoded Solicit
         msg = pkt[DHCP6OptRelayMsg]
@@ -402,9 +416,8 @@ class TestDHCP(VppTestCase):
         # not sure why this is not decoding
         # adv = pkt[DHCP6_Advertise]
 
         # not sure why this is not decoding
         # adv = pkt[DHCP6_Advertise]
 
-    def wait_for_no_route(self, address, length,
-                          n_tries=50, s_time=1):
-        while (n_tries):
+    def wait_for_no_route(self, address, length, n_tries=50, s_time=1):
+        while n_tries:
             if not find_route(self, address, length):
                 return True
             n_tries = n_tries - 1
             if not find_route(self, address, length):
                 return True
             n_tries = n_tries - 1
@@ -413,42 +426,45 @@ class TestDHCP(VppTestCase):
         return False
 
     def test_dhcp_proxy(self):
         return False
 
     def test_dhcp_proxy(self):
-        """ DHCPv4 Proxy """
+        """DHCPv4 Proxy"""
 
         #
         # Verify no response to DHCP request without DHCP config
         #
 
         #
         # Verify no response to DHCP request without DHCP config
         #
-        p_disc_vrf0 = (Ether(dst="ff:ff:ff:ff:ff:ff",
-                             src=self.pg3.remote_mac) /
-                       IP(src="0.0.0.0", dst="255.255.255.255") /
-                       UDP(sport=DHCP4_CLIENT_PORT,
-                           dport=DHCP4_SERVER_PORT) /
-                       BOOTP(op=1) /
-                       DHCP(options=[('message-type', 'discover'), ('end')]))
+        p_disc_vrf0 = (
+            Ether(dst="ff:ff:ff:ff:ff:ff", src=self.pg3.remote_mac)
+            / IP(src="0.0.0.0", dst="255.255.255.255")
+            / UDP(sport=DHCP4_CLIENT_PORT, dport=DHCP4_SERVER_PORT)
+            / BOOTP(op=1)
+            / DHCP(options=[("message-type", "discover"), ("end")])
+        )
         pkts_disc_vrf0 = [p_disc_vrf0]
         pkts_disc_vrf0 = [p_disc_vrf0]
-        p_disc_vrf1 = (Ether(dst="ff:ff:ff:ff:ff:ff",
-                             src=self.pg4.remote_mac) /
-                       IP(src="0.0.0.0", dst="255.255.255.255") /
-                       UDP(sport=DHCP4_CLIENT_PORT,
-                           dport=DHCP4_SERVER_PORT) /
-                       BOOTP(op=1) /
-                       DHCP(options=[('message-type', 'discover'), ('end')]))
+        p_disc_vrf1 = (
+            Ether(dst="ff:ff:ff:ff:ff:ff", src=self.pg4.remote_mac)
+            / IP(src="0.0.0.0", dst="255.255.255.255")
+            / UDP(sport=DHCP4_CLIENT_PORT, dport=DHCP4_SERVER_PORT)
+            / BOOTP(op=1)
+            / DHCP(options=[("message-type", "discover"), ("end")])
+        )
         pkts_disc_vrf1 = [p_disc_vrf1]
         pkts_disc_vrf1 = [p_disc_vrf1]
-        p_disc_vrf2 = (Ether(dst="ff:ff:ff:ff:ff:ff",
-                             src=self.pg5.remote_mac) /
-                       IP(src="0.0.0.0", dst="255.255.255.255") /
-                       UDP(sport=DHCP4_CLIENT_PORT,
-                           dport=DHCP4_SERVER_PORT) /
-                       BOOTP(op=1) /
-                       DHCP(options=[('message-type', 'discover'), ('end')]))
+        p_disc_vrf2 = (
+            Ether(dst="ff:ff:ff:ff:ff:ff", src=self.pg5.remote_mac)
+            / IP(src="0.0.0.0", dst="255.255.255.255")
+            / UDP(sport=DHCP4_CLIENT_PORT, dport=DHCP4_SERVER_PORT)
+            / BOOTP(op=1)
+            / DHCP(options=[("message-type", "discover"), ("end")])
+        )
         pkts_disc_vrf2 = [p_disc_vrf2]
 
         pkts_disc_vrf2 = [p_disc_vrf2]
 
-        self.send_and_assert_no_replies(self.pg3, pkts_disc_vrf0,
-                                        "DHCP with no configuration")
-        self.send_and_assert_no_replies(self.pg4, pkts_disc_vrf1,
-                                        "DHCP with no configuration")
-        self.send_and_assert_no_replies(self.pg5, pkts_disc_vrf2,
-                                        "DHCP with no configuration")
+        self.send_and_assert_no_replies(
+            self.pg3, pkts_disc_vrf0, "DHCP with no configuration"
+        )
+        self.send_and_assert_no_replies(
+            self.pg4, pkts_disc_vrf1, "DHCP with no configuration"
+        )
+        self.send_and_assert_no_replies(
+            self.pg5, pkts_disc_vrf2, "DHCP with no configuration"
+        )
 
         #
         # Enable DHCP proxy in VRF 0
 
         #
         # Enable DHCP proxy in VRF 0
@@ -463,23 +479,25 @@ class TestDHCP(VppTestCase):
         # Discover packets from the client are dropped because there is no
         # IP address configured on the client facing interface
         #
         # Discover packets from the client are dropped because there is no
         # IP address configured on the client facing interface
         #
-        self.send_and_assert_no_replies(self.pg3, pkts_disc_vrf0,
-                                        "Discover DHCP no relay address")
+        self.send_and_assert_no_replies(
+            self.pg3, pkts_disc_vrf0, "Discover DHCP no relay address"
+        )
 
         #
         # Inject a response from the server
         #  dropped, because there is no IP addrees on the
         #  client interfce to fill in the option.
         #
 
         #
         # Inject a response from the server
         #  dropped, because there is no IP addrees on the
         #  client interfce to fill in the option.
         #
-        p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-             IP(src=self.pg0.remote_ip4, dst=self.pg0.local_ip4) /
-             UDP(sport=DHCP4_SERVER_PORT, dport=DHCP4_SERVER_PORT) /
-             BOOTP(op=1) /
-             DHCP(options=[('message-type', 'offer'), ('end')]))
+        p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg0.local_ip4)
+            / UDP(sport=DHCP4_SERVER_PORT, dport=DHCP4_SERVER_PORT)
+            / BOOTP(op=1)
+            / DHCP(options=[("message-type", "offer"), ("end")])
+        )
         pkts = [p]
 
         pkts = [p]
 
-        self.send_and_assert_no_replies(self.pg3, pkts,
-                                        "Offer DHCP no relay address")
+        self.send_and_assert_no_replies(self.pg3, pkts, "Offer DHCP no relay address")
 
         #
         # configure an IP address on the client facing interface
 
         #
         # configure an IP address on the client facing interface
@@ -500,21 +518,26 @@ class TestDHCP(VppTestCase):
         rx = self.pg0.get_capture(1)
         rx = rx[0]
 
         rx = self.pg0.get_capture(1)
         rx = rx[0]
 
-        option_82 = self.verify_relayed_dhcp_discover(rx, self.pg0,
-                                                      src_intf=self.pg3)
+        option_82 = self.verify_relayed_dhcp_discover(rx, self.pg0, src_intf=self.pg3)
 
         #
         # Create an DHCP offer reply from the server with a correctly formatted
         # option 82. i.e. send back what we just captured
         # The offer, sent mcast to the client, still has option 82.
         #
 
         #
         # Create an DHCP offer reply from the server with a correctly formatted
         # option 82. i.e. send back what we just captured
         # The offer, sent mcast to the client, still has option 82.
         #
-        p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-             IP(src=self.pg0.remote_ip4, dst=self.pg0.local_ip4) /
-             UDP(sport=DHCP4_SERVER_PORT, dport=DHCP4_SERVER_PORT) /
-             BOOTP(op=1) /
-             DHCP(options=[('message-type', 'offer'),
-                           ('relay_agent_Information', option_82),
-                           ('end')]))
+        p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg0.local_ip4)
+            / UDP(sport=DHCP4_SERVER_PORT, dport=DHCP4_SERVER_PORT)
+            / BOOTP(op=1)
+            / DHCP(
+                options=[
+                    ("message-type", "offer"),
+                    ("relay_agent_Information", option_82),
+                    ("end"),
+                ]
+            )
+        )
         pkts = [p]
 
         self.pg0.add_stream(pkts)
         pkts = [p]
 
         self.pg0.add_stream(pkts)
@@ -533,36 +556,51 @@ class TestDHCP(VppTestCase):
         #    to client
         bad_ip = option_82[0:8] + scapy.compat.chb(33) + option_82[9:]
 
         #    to client
         bad_ip = option_82[0:8] + scapy.compat.chb(33) + option_82[9:]
 
-        p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-             IP(src=self.pg0.remote_ip4, dst=self.pg0.local_ip4) /
-             UDP(sport=DHCP4_SERVER_PORT, dport=DHCP4_SERVER_PORT) /
-             BOOTP(op=1) /
-             DHCP(options=[('message-type', 'offer'),
-                           ('relay_agent_Information', bad_ip),
-                           ('end')]))
+        p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg0.local_ip4)
+            / UDP(sport=DHCP4_SERVER_PORT, dport=DHCP4_SERVER_PORT)
+            / BOOTP(op=1)
+            / DHCP(
+                options=[
+                    ("message-type", "offer"),
+                    ("relay_agent_Information", bad_ip),
+                    ("end"),
+                ]
+            )
+        )
         pkts = [p]
         pkts = [p]
-        self.send_and_assert_no_replies(self.pg0, pkts,
-                                        "DHCP offer option 82 bad address")
+        self.send_and_assert_no_replies(
+            self.pg0, pkts, "DHCP offer option 82 bad address"
+        )
 
         # 2. Not a sw_if_index VPP knows
         bad_if_index = option_82[0:2] + scapy.compat.chb(33) + option_82[3:]
 
 
         # 2. Not a sw_if_index VPP knows
         bad_if_index = option_82[0:2] + scapy.compat.chb(33) + option_82[3:]
 
-        p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-             IP(src=self.pg0.remote_ip4, dst=self.pg0.local_ip4) /
-             UDP(sport=DHCP4_SERVER_PORT, dport=DHCP4_SERVER_PORT) /
-             BOOTP(op=1) /
-             DHCP(options=[('message-type', 'offer'),
-                           ('relay_agent_Information', bad_if_index),
-                           ('end')]))
+        p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg0.local_ip4)
+            / UDP(sport=DHCP4_SERVER_PORT, dport=DHCP4_SERVER_PORT)
+            / BOOTP(op=1)
+            / DHCP(
+                options=[
+                    ("message-type", "offer"),
+                    ("relay_agent_Information", bad_if_index),
+                    ("end"),
+                ]
+            )
+        )
         pkts = [p]
         pkts = [p]
-        self.send_and_assert_no_replies(self.pg0, pkts,
-                                        "DHCP offer option 82 bad if index")
+        self.send_and_assert_no_replies(
+            self.pg0, pkts, "DHCP offer option 82 bad if index"
+        )
 
         #
         # Send a DHCP request in VRF 1. should be dropped.
         #
 
         #
         # Send a DHCP request in VRF 1. should be dropped.
         #
-        self.send_and_assert_no_replies(self.pg4, pkts_disc_vrf1,
-                                        "DHCP with no configuration VRF 1")
+        self.send_and_assert_no_replies(
+            self.pg4, pkts_disc_vrf1, "DHCP with no configuration VRF 1"
+        )
 
         #
         # Delete the DHCP config in VRF 0
 
         #
         # Delete the DHCP config in VRF 0
@@ -570,10 +608,12 @@ class TestDHCP(VppTestCase):
         #
         Proxy.remove_vpp_config()
 
         #
         Proxy.remove_vpp_config()
 
-        self.send_and_assert_no_replies(self.pg3, pkts_disc_vrf0,
-                                        "DHCP config removed VRF 0")
-        self.send_and_assert_no_replies(self.pg4, pkts_disc_vrf1,
-                                        "DHCP config removed VRF 1")
+        self.send_and_assert_no_replies(
+            self.pg3, pkts_disc_vrf0, "DHCP config removed VRF 0"
+        )
+        self.send_and_assert_no_replies(
+            self.pg4, pkts_disc_vrf1, "DHCP config removed VRF 1"
+        )
 
         #
         # Add DHCP config for VRF 1 & 2
 
         #
         # Add DHCP config for VRF 1 & 2
@@ -581,31 +621,27 @@ class TestDHCP(VppTestCase):
         server_addr1 = self.pg1.remote_ip4
         src_addr1 = self.pg1.local_ip4
         Proxy1 = VppDHCPProxy(
         server_addr1 = self.pg1.remote_ip4
         src_addr1 = self.pg1.local_ip4
         Proxy1 = VppDHCPProxy(
-            self,
-            server_addr1,
-            src_addr1,
-            rx_vrf_id=1,
-            server_vrf_id=1)
+            self, server_addr1, src_addr1, rx_vrf_id=1, server_vrf_id=1
+        )
         Proxy1.add_vpp_config()
 
         server_addr2 = self.pg2.remote_ip4
         src_addr2 = self.pg2.local_ip4
         Proxy2 = VppDHCPProxy(
         Proxy1.add_vpp_config()
 
         server_addr2 = self.pg2.remote_ip4
         src_addr2 = self.pg2.local_ip4
         Proxy2 = VppDHCPProxy(
-            self,
-            server_addr2,
-            src_addr2,
-            rx_vrf_id=2,
-            server_vrf_id=2)
+            self, server_addr2, src_addr2, rx_vrf_id=2, server_vrf_id=2
+        )
         Proxy2.add_vpp_config()
 
         #
         # Confim DHCP requests ok in VRF 1 & 2.
         #  - dropped on IP config on client interface
         #
         Proxy2.add_vpp_config()
 
         #
         # Confim DHCP requests ok in VRF 1 & 2.
         #  - dropped on IP config on client interface
         #
-        self.send_and_assert_no_replies(self.pg4, pkts_disc_vrf1,
-                                        "DHCP config removed VRF 1")
-        self.send_and_assert_no_replies(self.pg5, pkts_disc_vrf2,
-                                        "DHCP config removed VRF 2")
+        self.send_and_assert_no_replies(
+            self.pg4, pkts_disc_vrf1, "DHCP config removed VRF 1"
+        )
+        self.send_and_assert_no_replies(
+            self.pg5, pkts_disc_vrf2, "DHCP config removed VRF 2"
+        )
 
         #
         # configure an IP address on the client facing interface
 
         #
         # configure an IP address on the client facing interface
@@ -630,10 +666,10 @@ class TestDHCP(VppTestCase):
         # Add VSS config
         #  table=1, vss_type=1, vpn_index=1, oui=4
         #  table=2, vss_type=0, vpn_id = "ip4-table-2"
         # Add VSS config
         #  table=1, vss_type=1, vpn_index=1, oui=4
         #  table=2, vss_type=0, vpn_id = "ip4-table-2"
-        self.vapi.dhcp_proxy_set_vss(tbl_id=1, vss_type=1,
-                                     vpn_index=1, oui=4, is_add=1)
-        self.vapi.dhcp_proxy_set_vss(tbl_id=2, vss_type=0,
-                                     vpn_ascii_id="ip4-table-2", is_add=1)
+        self.vapi.dhcp_proxy_set_vss(tbl_id=1, vss_type=1, vpn_index=1, oui=4, is_add=1)
+        self.vapi.dhcp_proxy_set_vss(
+            tbl_id=2, vss_type=0, vpn_ascii_id="ip4-table-2", is_add=1
+        )
 
         self.pg4.add_stream(pkts_disc_vrf1)
         self.pg_enable_capture(self.pg_interfaces)
 
         self.pg4.add_stream(pkts_disc_vrf1)
         self.pg_enable_capture(self.pg_interfaces)
@@ -641,9 +677,9 @@ class TestDHCP(VppTestCase):
 
         rx = self.pg1.get_capture(1)
         rx = rx[0]
 
         rx = self.pg1.get_capture(1)
         rx = rx[0]
-        self.verify_relayed_dhcp_discover(rx, self.pg1,
-                                          src_intf=self.pg4,
-                                          fib_id=1, oui=4)
+        self.verify_relayed_dhcp_discover(
+            rx, self.pg1, src_intf=self.pg4, fib_id=1, oui=4
+        )
 
         self.pg5.add_stream(pkts_disc_vrf2)
         self.pg_enable_capture(self.pg_interfaces)
 
         self.pg5.add_stream(pkts_disc_vrf2)
         self.pg_enable_capture(self.pg_interfaces)
@@ -651,9 +687,9 @@ class TestDHCP(VppTestCase):
 
         rx = self.pg2.get_capture(1)
         rx = rx[0]
 
         rx = self.pg2.get_capture(1)
         rx = rx[0]
-        self.verify_relayed_dhcp_discover(rx, self.pg2,
-                                          src_intf=self.pg5,
-                                          vpn_id="ip4-table-2")
+        self.verify_relayed_dhcp_discover(
+            rx, self.pg2, src_intf=self.pg5, vpn_id="ip4-table-2"
+        )
 
         #
         # Add a second DHCP server in VRF 1
 
         #
         # Add a second DHCP server in VRF 1
@@ -663,20 +699,19 @@ class TestDHCP(VppTestCase):
         server_addr12 = self.pg1.remote_hosts[1].ip4
 
         Proxy12 = VppDHCPProxy(
         server_addr12 = self.pg1.remote_hosts[1].ip4
 
         Proxy12 = VppDHCPProxy(
-            self,
-            server_addr12,
-            src_addr,
-            rx_vrf_id=1,
-            server_vrf_id=1)
+            self, server_addr12, src_addr, rx_vrf_id=1, server_vrf_id=1
+        )
         Proxy12.add_vpp_config()
 
         #
         # We'll need an ARP entry for the server to send it packets
         #
         Proxy12.add_vpp_config()
 
         #
         # We'll need an ARP entry for the server to send it packets
         #
-        arp_entry = VppNeighbor(self,
-                                self.pg1.sw_if_index,
-                                self.pg1.remote_hosts[1].mac,
-                                self.pg1.remote_hosts[1].ip4)
+        arp_entry = VppNeighbor(
+            self,
+            self.pg1.sw_if_index,
+            self.pg1.remote_hosts[1].mac,
+            self.pg1.remote_hosts[1].ip4,
+        )
         arp_entry.add_vpp_config()
 
         #
         arp_entry.add_vpp_config()
 
         #
@@ -691,32 +726,47 @@ class TestDHCP(VppTestCase):
         rx = self.pg1.get_capture(2)
 
         option_82 = self.verify_relayed_dhcp_discover(
         rx = self.pg1.get_capture(2)
 
         option_82 = self.verify_relayed_dhcp_discover(
-            rx[0], self.pg1,
+            rx[0],
+            self.pg1,
             src_intf=self.pg4,
             dst_mac=self.pg1.remote_hosts[1].mac,
             dst_ip=self.pg1.remote_hosts[1].ip4,
             src_intf=self.pg4,
             dst_mac=self.pg1.remote_hosts[1].mac,
             dst_ip=self.pg1.remote_hosts[1].ip4,
-            fib_id=1, oui=4)
-        self.verify_relayed_dhcp_discover(rx[1], self.pg1,
-                                          src_intf=self.pg4,
-                                          fib_id=1, oui=4)
+            fib_id=1,
+            oui=4,
+        )
+        self.verify_relayed_dhcp_discover(
+            rx[1], self.pg1, src_intf=self.pg4, fib_id=1, oui=4
+        )
 
         #
         # Send both packets back. Client gets both.
         #
 
         #
         # Send both packets back. Client gets both.
         #
-        p1 = (Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac) /
-              IP(src=self.pg1.remote_ip4, dst=self.pg1.local_ip4) /
-              UDP(sport=DHCP4_SERVER_PORT, dport=DHCP4_SERVER_PORT) /
-              BOOTP(op=1) /
-              DHCP(options=[('message-type', 'offer'),
-                            ('relay_agent_Information', option_82),
-                            ('end')]))
-        p2 = (Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac) /
-              IP(src=self.pg1.remote_hosts[1].ip4, dst=self.pg1.local_ip4) /
-              UDP(sport=DHCP4_SERVER_PORT, dport=DHCP4_SERVER_PORT) /
-              BOOTP(op=1) /
-              DHCP(options=[('message-type', 'offer'),
-                            ('relay_agent_Information', option_82),
-                            ('end')]))
+        p1 = (
+            Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac)
+            / IP(src=self.pg1.remote_ip4, dst=self.pg1.local_ip4)
+            / UDP(sport=DHCP4_SERVER_PORT, dport=DHCP4_SERVER_PORT)
+            / BOOTP(op=1)
+            / DHCP(
+                options=[
+                    ("message-type", "offer"),
+                    ("relay_agent_Information", option_82),
+                    ("end"),
+                ]
+            )
+        )
+        p2 = (
+            Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac)
+            / IP(src=self.pg1.remote_hosts[1].ip4, dst=self.pg1.local_ip4)
+            / UDP(sport=DHCP4_SERVER_PORT, dport=DHCP4_SERVER_PORT)
+            / BOOTP(op=1)
+            / DHCP(
+                options=[
+                    ("message-type", "offer"),
+                    ("relay_agent_Information", option_82),
+                    ("end"),
+                ]
+            )
+        )
         pkts = [p1, p2]
 
         self.pg1.add_stream(pkts)
         pkts = [p1, p2]
 
         self.pg1.add_stream(pkts)
@@ -731,27 +781,31 @@ class TestDHCP(VppTestCase):
         #
         # Ensure offers from non-servers are dropeed
         #
         #
         # Ensure offers from non-servers are dropeed
         #
-        p2 = (Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac) /
-              IP(src="8.8.8.8", dst=self.pg1.local_ip4) /
-              UDP(sport=DHCP4_SERVER_PORT, dport=DHCP4_SERVER_PORT) /
-              BOOTP(op=1) /
-              DHCP(options=[('message-type', 'offer'),
-                            ('relay_agent_Information', option_82),
-                            ('end')]))
-        self.send_and_assert_no_replies(self.pg1, p2,
-                                        "DHCP offer from non-server")
+        p2 = (
+            Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac)
+            / IP(src="8.8.8.8", dst=self.pg1.local_ip4)
+            / UDP(sport=DHCP4_SERVER_PORT, dport=DHCP4_SERVER_PORT)
+            / BOOTP(op=1)
+            / DHCP(
+                options=[
+                    ("message-type", "offer"),
+                    ("relay_agent_Information", option_82),
+                    ("end"),
+                ]
+            )
+        )
+        self.send_and_assert_no_replies(self.pg1, p2, "DHCP offer from non-server")
 
         #
         # Ensure only the discover is sent to multiple servers
         #
 
         #
         # Ensure only the discover is sent to multiple servers
         #
-        p_req_vrf1 = (Ether(dst="ff:ff:ff:ff:ff:ff",
-                            src=self.pg4.remote_mac) /
-                      IP(src="0.0.0.0", dst="255.255.255.255") /
-                      UDP(sport=DHCP4_CLIENT_PORT,
-                          dport=DHCP4_SERVER_PORT) /
-                      BOOTP(op=1) /
-                      DHCP(options=[('message-type', 'request'),
-                                    ('end')]))
+        p_req_vrf1 = (
+            Ether(dst="ff:ff:ff:ff:ff:ff", src=self.pg4.remote_mac)
+            / IP(src="0.0.0.0", dst="255.255.255.255")
+            / UDP(sport=DHCP4_CLIENT_PORT, dport=DHCP4_SERVER_PORT)
+            / BOOTP(op=1)
+            / DHCP(options=[("message-type", "request"), ("end")])
+        )
 
         self.pg4.add_stream(p_req_vrf1)
         self.pg_enable_capture(self.pg_interfaces)
 
         self.pg4.add_stream(p_req_vrf1)
         self.pg_enable_capture(self.pg_interfaces)
@@ -773,9 +827,9 @@ class TestDHCP(VppTestCase):
 
         rx = self.pg1.get_capture(1)
         rx = rx[0]
 
         rx = self.pg1.get_capture(1)
         rx = rx[0]
-        self.verify_relayed_dhcp_discover(rx, self.pg1,
-                                          src_intf=self.pg4,
-                                          fib_id=1, oui=4)
+        self.verify_relayed_dhcp_discover(
+            rx, self.pg1, src_intf=self.pg4, fib_id=1, oui=4
+        )
 
         #
         # Remove the VSS config
 
         #
         # Remove the VSS config
@@ -798,19 +852,16 @@ class TestDHCP(VppTestCase):
         Proxy1.remove_vpp_config()
         Proxy2.remove_vpp_config()
 
         Proxy1.remove_vpp_config()
         Proxy2.remove_vpp_config()
 
-        self.send_and_assert_no_replies(self.pg3, pkts_disc_vrf0,
-                                        "DHCP cleanup VRF 0")
-        self.send_and_assert_no_replies(self.pg4, pkts_disc_vrf1,
-                                        "DHCP cleanup VRF 1")
-        self.send_and_assert_no_replies(self.pg5, pkts_disc_vrf2,
-                                        "DHCP cleanup VRF 2")
+        self.send_and_assert_no_replies(self.pg3, pkts_disc_vrf0, "DHCP cleanup VRF 0")
+        self.send_and_assert_no_replies(self.pg4, pkts_disc_vrf1, "DHCP cleanup VRF 1")
+        self.send_and_assert_no_replies(self.pg5, pkts_disc_vrf2, "DHCP cleanup VRF 2")
 
         self.pg3.unconfig_ip4()
         self.pg4.unconfig_ip4()
         self.pg5.unconfig_ip4()
 
     def test_dhcp6_proxy(self):
 
         self.pg3.unconfig_ip4()
         self.pg4.unconfig_ip4()
         self.pg5.unconfig_ip4()
 
     def test_dhcp6_proxy(self):
-        """ DHCPv6 Proxy"""
+        """DHCPv6 Proxy"""
         #
         # Verify no response to DHCP request without DHCP config
         #
         #
         # Verify no response to DHCP request without DHCP config
         #
@@ -826,31 +877,34 @@ class TestDHCP(VppTestCase):
         src_addr_vrf2 = self.pg2.local_ip6
 
         dmac = in6_getnsmac(inet_pton(socket.AF_INET6, dhcp_solicit_dst))
         src_addr_vrf2 = self.pg2.local_ip6
 
         dmac = in6_getnsmac(inet_pton(socket.AF_INET6, dhcp_solicit_dst))
-        p_solicit_vrf0 = (Ether(dst=dmac, src=self.pg3.remote_mac) /
-                          IPv6(src=dhcp_solicit_src_vrf0,
-                               dst=dhcp_solicit_dst) /
-                          UDP(sport=DHCP6_SERVER_PORT,
-                              dport=DHCP6_CLIENT_PORT) /
-                          DHCP6_Solicit())
-        p_solicit_vrf1 = (Ether(dst=dmac, src=self.pg4.remote_mac) /
-                          IPv6(src=dhcp_solicit_src_vrf1,
-                               dst=dhcp_solicit_dst) /
-                          UDP(sport=DHCP6_SERVER_PORT,
-                              dport=DHCP6_CLIENT_PORT) /
-                          DHCP6_Solicit())
-        p_solicit_vrf2 = (Ether(dst=dmac, src=self.pg5.remote_mac) /
-                          IPv6(src=dhcp_solicit_src_vrf2,
-                               dst=dhcp_solicit_dst) /
-                          UDP(sport=DHCP6_SERVER_PORT,
-                              dport=DHCP6_CLIENT_PORT) /
-                          DHCP6_Solicit())
-
-        self.send_and_assert_no_replies(self.pg3, p_solicit_vrf0,
-                                        "DHCP with no configuration")
-        self.send_and_assert_no_replies(self.pg4, p_solicit_vrf1,
-                                        "DHCP with no configuration")
-        self.send_and_assert_no_replies(self.pg5, p_solicit_vrf2,
-                                        "DHCP with no configuration")
+        p_solicit_vrf0 = (
+            Ether(dst=dmac, src=self.pg3.remote_mac)
+            / IPv6(src=dhcp_solicit_src_vrf0, dst=dhcp_solicit_dst)
+            / UDP(sport=DHCP6_SERVER_PORT, dport=DHCP6_CLIENT_PORT)
+            / DHCP6_Solicit()
+        )
+        p_solicit_vrf1 = (
+            Ether(dst=dmac, src=self.pg4.remote_mac)
+            / IPv6(src=dhcp_solicit_src_vrf1, dst=dhcp_solicit_dst)
+            / UDP(sport=DHCP6_SERVER_PORT, dport=DHCP6_CLIENT_PORT)
+            / DHCP6_Solicit()
+        )
+        p_solicit_vrf2 = (
+            Ether(dst=dmac, src=self.pg5.remote_mac)
+            / IPv6(src=dhcp_solicit_src_vrf2, dst=dhcp_solicit_dst)
+            / UDP(sport=DHCP6_SERVER_PORT, dport=DHCP6_CLIENT_PORT)
+            / DHCP6_Solicit()
+        )
+
+        self.send_and_assert_no_replies(
+            self.pg3, p_solicit_vrf0, "DHCP with no configuration"
+        )
+        self.send_and_assert_no_replies(
+            self.pg4, p_solicit_vrf1, "DHCP with no configuration"
+        )
+        self.send_and_assert_no_replies(
+            self.pg5, p_solicit_vrf2, "DHCP with no configuration"
+        )
 
         #
         # DHCPv6 config in VRF 0.
 
         #
         # DHCPv6 config in VRF 0.
@@ -858,17 +912,16 @@ class TestDHCP(VppTestCase):
         # IPv6 config
         #
         Proxy = VppDHCPProxy(
         # IPv6 config
         #
         Proxy = VppDHCPProxy(
-            self,
-            server_addr_vrf0,
-            src_addr_vrf0,
-            rx_vrf_id=0,
-            server_vrf_id=0)
+            self, server_addr_vrf0, src_addr_vrf0, rx_vrf_id=0, server_vrf_id=0
+        )
         Proxy.add_vpp_config()
 
         Proxy.add_vpp_config()
 
-        self.send_and_assert_no_replies(self.pg3, p_solicit_vrf0,
-                                        "DHCP with no configuration")
-        self.send_and_assert_no_replies(self.pg4, p_solicit_vrf1,
-                                        "DHCP with no configuration")
+        self.send_and_assert_no_replies(
+            self.pg3, p_solicit_vrf0, "DHCP with no configuration"
+        )
+        self.send_and_assert_no_replies(
+            self.pg4, p_solicit_vrf1, "DHCP with no configuration"
+        )
 
         #
         # configure an IP address on the client facing interface
 
         #
         # configure an IP address on the client facing interface
@@ -884,62 +937,70 @@ class TestDHCP(VppTestCase):
 
         rx = self.pg0.get_capture(1)
 
 
         rx = self.pg0.get_capture(1)
 
-        self.verify_dhcp6_solicit(rx[0], self.pg0,
-                                  dhcp_solicit_src_vrf0,
-                                  self.pg3.remote_mac)
+        self.verify_dhcp6_solicit(
+            rx[0], self.pg0, dhcp_solicit_src_vrf0, self.pg3.remote_mac
+        )
 
         #
         # Exception cases for rejected relay responses
         #
 
         # 1 - not a relay reply
 
         #
         # Exception cases for rejected relay responses
         #
 
         # 1 - not a relay reply
-        p_adv_vrf0 = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-                      IPv6(dst=self.pg0.local_ip6, src=self.pg0.remote_ip6) /
-                      UDP(sport=DHCP6_SERVER_PORT, dport=DHCP6_SERVER_PORT) /
-                      DHCP6_Advertise())
-        self.send_and_assert_no_replies(self.pg3, p_adv_vrf0,
-                                        "DHCP6 not a relay reply")
+        p_adv_vrf0 = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IPv6(dst=self.pg0.local_ip6, src=self.pg0.remote_ip6)
+            / UDP(sport=DHCP6_SERVER_PORT, dport=DHCP6_SERVER_PORT)
+            / DHCP6_Advertise()
+        )
+        self.send_and_assert_no_replies(self.pg3, p_adv_vrf0, "DHCP6 not a relay reply")
 
         # 2 - no relay message option
 
         # 2 - no relay message option
-        p_adv_vrf0 = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-                      IPv6(dst=self.pg0.local_ip6, src=self.pg0.remote_ip6) /
-                      UDP(sport=DHCP6_SERVER_PORT, dport=DHCP6_SERVER_PORT) /
-                      DHCP6_RelayReply() /
-                      DHCP6_Advertise())
-        self.send_and_assert_no_replies(self.pg3, p_adv_vrf0,
-                                        "DHCP not a relay message")
+        p_adv_vrf0 = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IPv6(dst=self.pg0.local_ip6, src=self.pg0.remote_ip6)
+            / UDP(sport=DHCP6_SERVER_PORT, dport=DHCP6_SERVER_PORT)
+            / DHCP6_RelayReply()
+            / DHCP6_Advertise()
+        )
+        self.send_and_assert_no_replies(
+            self.pg3, p_adv_vrf0, "DHCP not a relay message"
+        )
 
         # 3 - no circuit ID
 
         # 3 - no circuit ID
-        p_adv_vrf0 = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-                      IPv6(dst=self.pg0.local_ip6, src=self.pg0.remote_ip6) /
-                      UDP(sport=DHCP6_SERVER_PORT, dport=DHCP6_SERVER_PORT) /
-                      DHCP6_RelayReply() /
-                      DHCP6OptRelayMsg(optlen=0) /
-                      DHCP6_Advertise())
-        self.send_and_assert_no_replies(self.pg3, p_adv_vrf0,
-                                        "DHCP6 no circuit ID")
+        p_adv_vrf0 = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IPv6(dst=self.pg0.local_ip6, src=self.pg0.remote_ip6)
+            / UDP(sport=DHCP6_SERVER_PORT, dport=DHCP6_SERVER_PORT)
+            / DHCP6_RelayReply()
+            / DHCP6OptRelayMsg(optlen=0)
+            / DHCP6_Advertise()
+        )
+        self.send_and_assert_no_replies(self.pg3, p_adv_vrf0, "DHCP6 no circuit ID")
         # 4 - wrong circuit ID
         # 4 - wrong circuit ID
-        p_adv_vrf0 = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-                      IPv6(dst=self.pg0.local_ip6, src=self.pg0.remote_ip6) /
-                      UDP(sport=DHCP6_SERVER_PORT, dport=DHCP6_SERVER_PORT) /
-                      DHCP6_RelayReply() /
-                      DHCP6OptIfaceId(optlen=4, ifaceid='\x00\x00\x00\x05') /
-                      DHCP6OptRelayMsg(optlen=0) /
-                      DHCP6_Advertise())
-        self.send_and_assert_no_replies(self.pg3, p_adv_vrf0,
-                                        "DHCP6 wrong circuit ID")
+        p_adv_vrf0 = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IPv6(dst=self.pg0.local_ip6, src=self.pg0.remote_ip6)
+            / UDP(sport=DHCP6_SERVER_PORT, dport=DHCP6_SERVER_PORT)
+            / DHCP6_RelayReply()
+            / DHCP6OptIfaceId(optlen=4, ifaceid="\x00\x00\x00\x05")
+            / DHCP6OptRelayMsg(optlen=0)
+            / DHCP6_Advertise()
+        )
+        self.send_and_assert_no_replies(self.pg3, p_adv_vrf0, "DHCP6 wrong circuit ID")
 
         #
         # Send the relay response (the advertisement)
         #   - no peer address
 
         #
         # Send the relay response (the advertisement)
         #   - no peer address
-        p_adv_vrf0 = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-                      IPv6(dst=self.pg0.local_ip6, src=self.pg0.remote_ip6) /
-                      UDP(sport=DHCP6_SERVER_PORT, dport=DHCP6_SERVER_PORT) /
-                      DHCP6_RelayReply() /
-                      DHCP6OptIfaceId(optlen=4, ifaceid='\x00\x00\x00\x04') /
-                      DHCP6OptRelayMsg(optlen=0) /
-                      DHCP6_Advertise(trid=1) /
-                      DHCP6OptStatusCode(statuscode=0))
+        p_adv_vrf0 = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IPv6(dst=self.pg0.local_ip6, src=self.pg0.remote_ip6)
+            / UDP(sport=DHCP6_SERVER_PORT, dport=DHCP6_SERVER_PORT)
+            / DHCP6_RelayReply()
+            / DHCP6OptIfaceId(optlen=4, ifaceid="\x00\x00\x00\x04")
+            / DHCP6OptRelayMsg(optlen=0)
+            / DHCP6_Advertise(trid=1)
+            / DHCP6OptStatusCode(statuscode=0)
+        )
         pkts_adv_vrf0 = [p_adv_vrf0]
 
         self.pg0.add_stream(pkts_adv_vrf0)
         pkts_adv_vrf0 = [p_adv_vrf0]
 
         self.pg0.add_stream(pkts_adv_vrf0)
@@ -953,14 +1014,16 @@ class TestDHCP(VppTestCase):
         #
         # Send the relay response (the advertisement)
         #   - with peer address
         #
         # Send the relay response (the advertisement)
         #   - with peer address
-        p_adv_vrf0 = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-                      IPv6(dst=self.pg0.local_ip6, src=self.pg0.remote_ip6) /
-                      UDP(sport=DHCP6_SERVER_PORT, dport=DHCP6_SERVER_PORT) /
-                      DHCP6_RelayReply(peeraddr=dhcp_solicit_src_vrf0) /
-                      DHCP6OptIfaceId(optlen=4, ifaceid='\x00\x00\x00\x04') /
-                      DHCP6OptRelayMsg(optlen=0) /
-                      DHCP6_Advertise(trid=1) /
-                      DHCP6OptStatusCode(statuscode=0))
+        p_adv_vrf0 = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IPv6(dst=self.pg0.local_ip6, src=self.pg0.remote_ip6)
+            / UDP(sport=DHCP6_SERVER_PORT, dport=DHCP6_SERVER_PORT)
+            / DHCP6_RelayReply(peeraddr=dhcp_solicit_src_vrf0)
+            / DHCP6OptIfaceId(optlen=4, ifaceid="\x00\x00\x00\x04")
+            / DHCP6OptRelayMsg(optlen=0)
+            / DHCP6_Advertise(trid=1)
+            / DHCP6OptStatusCode(statuscode=0)
+        )
         pkts_adv_vrf0 = [p_adv_vrf0]
 
         self.pg0.add_stream(pkts_adv_vrf0)
         pkts_adv_vrf0 = [p_adv_vrf0]
 
         self.pg0.add_stream(pkts_adv_vrf0)
@@ -975,20 +1038,14 @@ class TestDHCP(VppTestCase):
         # Add all the config for VRF 1 & 2
         #
         Proxy1 = VppDHCPProxy(
         # Add all the config for VRF 1 & 2
         #
         Proxy1 = VppDHCPProxy(
-            self,
-            server_addr_vrf1,
-            src_addr_vrf1,
-            rx_vrf_id=1,
-            server_vrf_id=1)
+            self, server_addr_vrf1, src_addr_vrf1, rx_vrf_id=1, server_vrf_id=1
+        )
         Proxy1.add_vpp_config()
         self.pg4.config_ip6()
 
         Proxy2 = VppDHCPProxy(
         Proxy1.add_vpp_config()
         self.pg4.config_ip6()
 
         Proxy2 = VppDHCPProxy(
-            self,
-            server_addr_vrf2,
-            src_addr_vrf2,
-            rx_vrf_id=2,
-            server_vrf_id=2)
+            self, server_addr_vrf2, src_addr_vrf2, rx_vrf_id=2, server_vrf_id=2
+        )
         Proxy2.add_vpp_config()
         self.pg5.config_ip6()
 
         Proxy2.add_vpp_config()
         self.pg5.config_ip6()
 
@@ -1001,9 +1058,9 @@ class TestDHCP(VppTestCase):
 
         rx = self.pg1.get_capture(1)
 
 
         rx = self.pg1.get_capture(1)
 
-        self.verify_dhcp6_solicit(rx[0], self.pg1,
-                                  dhcp_solicit_src_vrf1,
-                                  self.pg4.remote_mac)
+        self.verify_dhcp6_solicit(
+            rx[0], self.pg1, dhcp_solicit_src_vrf1, self.pg4.remote_mac
+        )
 
         #
         # VRF 2 solicit
 
         #
         # VRF 2 solicit
@@ -1014,21 +1071,23 @@ class TestDHCP(VppTestCase):
 
         rx = self.pg2.get_capture(1)
 
 
         rx = self.pg2.get_capture(1)
 
-        self.verify_dhcp6_solicit(rx[0], self.pg2,
-                                  dhcp_solicit_src_vrf2,
-                                  self.pg5.remote_mac)
+        self.verify_dhcp6_solicit(
+            rx[0], self.pg2, dhcp_solicit_src_vrf2, self.pg5.remote_mac
+        )
 
         #
         # VRF 1 Advert
         #
 
         #
         # VRF 1 Advert
         #
-        p_adv_vrf1 = (Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac) /
-                      IPv6(dst=self.pg1.local_ip6, src=self.pg1.remote_ip6) /
-                      UDP(sport=DHCP6_SERVER_PORT, dport=DHCP6_SERVER_PORT) /
-                      DHCP6_RelayReply(peeraddr=dhcp_solicit_src_vrf1) /
-                      DHCP6OptIfaceId(optlen=4, ifaceid='\x00\x00\x00\x05') /
-                      DHCP6OptRelayMsg(optlen=0) /
-                      DHCP6_Advertise(trid=1) /
-                      DHCP6OptStatusCode(statuscode=0))
+        p_adv_vrf1 = (
+            Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac)
+            / IPv6(dst=self.pg1.local_ip6, src=self.pg1.remote_ip6)
+            / UDP(sport=DHCP6_SERVER_PORT, dport=DHCP6_SERVER_PORT)
+            / DHCP6_RelayReply(peeraddr=dhcp_solicit_src_vrf1)
+            / DHCP6OptIfaceId(optlen=4, ifaceid="\x00\x00\x00\x05")
+            / DHCP6OptRelayMsg(optlen=0)
+            / DHCP6_Advertise(trid=1)
+            / DHCP6OptStatusCode(statuscode=0)
+        )
         pkts_adv_vrf1 = [p_adv_vrf1]
 
         self.pg1.add_stream(pkts_adv_vrf1)
         pkts_adv_vrf1 = [p_adv_vrf1]
 
         self.pg1.add_stream(pkts_adv_vrf1)
@@ -1043,13 +1102,11 @@ class TestDHCP(VppTestCase):
         # Add VSS config
         #
         self.vapi.dhcp_proxy_set_vss(
         # Add VSS config
         #
         self.vapi.dhcp_proxy_set_vss(
-            tbl_id=1, vss_type=1, oui=4, vpn_index=1, is_ipv6=1, is_add=1)
+            tbl_id=1, vss_type=1, oui=4, vpn_index=1, is_ipv6=1, is_add=1
+        )
         self.vapi.dhcp_proxy_set_vss(
         self.vapi.dhcp_proxy_set_vss(
-            tbl_id=2,
-            vss_type=0,
-            vpn_ascii_id="IPv6-table-2",
-            is_ipv6=1,
-            is_add=1)
+            tbl_id=2, vss_type=0, vpn_ascii_id="IPv6-table-2", is_ipv6=1, is_add=1
+        )
 
         self.pg4.add_stream(p_solicit_vrf1)
         self.pg_enable_capture(self.pg_interfaces)
 
         self.pg4.add_stream(p_solicit_vrf1)
         self.pg_enable_capture(self.pg_interfaces)
@@ -1057,11 +1114,9 @@ class TestDHCP(VppTestCase):
 
         rx = self.pg1.get_capture(1)
 
 
         rx = self.pg1.get_capture(1)
 
-        self.verify_dhcp6_solicit(rx[0], self.pg1,
-                                  dhcp_solicit_src_vrf1,
-                                  self.pg4.remote_mac,
-                                  fib_id=1,
-                                  oui=4)
+        self.verify_dhcp6_solicit(
+            rx[0], self.pg1, dhcp_solicit_src_vrf1, self.pg4.remote_mac, fib_id=1, oui=4
+        )
 
         self.pg5.add_stream(p_solicit_vrf2)
         self.pg_enable_capture(self.pg_interfaces)
 
         self.pg5.add_stream(p_solicit_vrf2)
         self.pg_enable_capture(self.pg_interfaces)
@@ -1069,10 +1124,13 @@ class TestDHCP(VppTestCase):
 
         rx = self.pg2.get_capture(1)
 
 
         rx = self.pg2.get_capture(1)
 
-        self.verify_dhcp6_solicit(rx[0], self.pg2,
-                                  dhcp_solicit_src_vrf2,
-                                  self.pg5.remote_mac,
-                                  vpn_id="IPv6-table-2")
+        self.verify_dhcp6_solicit(
+            rx[0],
+            self.pg2,
+            dhcp_solicit_src_vrf2,
+            self.pg5.remote_mac,
+            vpn_id="IPv6-table-2",
+        )
 
         #
         # Remove the VSS config
 
         #
         # Remove the VSS config
@@ -1086,9 +1144,9 @@ class TestDHCP(VppTestCase):
 
         rx = self.pg1.get_capture(1)
 
 
         rx = self.pg1.get_capture(1)
 
-        self.verify_dhcp6_solicit(rx[0], self.pg1,
-                                  dhcp_solicit_src_vrf1,
-                                  self.pg4.remote_mac)
+        self.verify_dhcp6_solicit(
+            rx[0], self.pg1, dhcp_solicit_src_vrf1, self.pg4.remote_mac
+        )
 
         #
         # Add a second DHCP server in VRF 1
 
         #
         # Add a second DHCP server in VRF 1
@@ -1098,20 +1156,19 @@ class TestDHCP(VppTestCase):
         server_addr12 = self.pg1.remote_hosts[1].ip6
 
         Proxy12 = VppDHCPProxy(
         server_addr12 = self.pg1.remote_hosts[1].ip6
 
         Proxy12 = VppDHCPProxy(
-            self,
-            server_addr12,
-            src_addr_vrf1,
-            rx_vrf_id=1,
-            server_vrf_id=1)
+            self, server_addr12, src_addr_vrf1, rx_vrf_id=1, server_vrf_id=1
+        )
         Proxy12.add_vpp_config()
 
         #
         # We'll need an ND entry for the server to send it packets
         #
         Proxy12.add_vpp_config()
 
         #
         # We'll need an ND entry for the server to send it packets
         #
-        nd_entry = VppNeighbor(self,
-                               self.pg1.sw_if_index,
-                               self.pg1.remote_hosts[1].mac,
-                               self.pg1.remote_hosts[1].ip6)
+        nd_entry = VppNeighbor(
+            self,
+            self.pg1.sw_if_index,
+            self.pg1.remote_hosts[1].mac,
+            self.pg1.remote_hosts[1].ip6,
+        )
         nd_entry.add_vpp_config()
 
         #
         nd_entry.add_vpp_config()
 
         #
@@ -1125,34 +1182,41 @@ class TestDHCP(VppTestCase):
 
         rx = self.pg1.get_capture(2)
 
 
         rx = self.pg1.get_capture(2)
 
-        self.verify_dhcp6_solicit(rx[0], self.pg1,
-                                  dhcp_solicit_src_vrf1,
-                                  self.pg4.remote_mac)
-        self.verify_dhcp6_solicit(rx[1], self.pg1,
-                                  dhcp_solicit_src_vrf1,
-                                  self.pg4.remote_mac,
-                                  dst_mac=self.pg1.remote_hosts[1].mac,
-                                  dst_ip=self.pg1.remote_hosts[1].ip6)
+        self.verify_dhcp6_solicit(
+            rx[0], self.pg1, dhcp_solicit_src_vrf1, self.pg4.remote_mac
+        )
+        self.verify_dhcp6_solicit(
+            rx[1],
+            self.pg1,
+            dhcp_solicit_src_vrf1,
+            self.pg4.remote_mac,
+            dst_mac=self.pg1.remote_hosts[1].mac,
+            dst_ip=self.pg1.remote_hosts[1].ip6,
+        )
 
         #
         # Send both packets back. Client gets both.
         #
 
         #
         # Send both packets back. Client gets both.
         #
-        p1 = (Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac) /
-              IPv6(dst=self.pg1.local_ip6, src=self.pg1.remote_ip6) /
-              UDP(sport=DHCP6_SERVER_PORT, dport=DHCP6_SERVER_PORT) /
-              DHCP6_RelayReply(peeraddr=dhcp_solicit_src_vrf1) /
-              DHCP6OptIfaceId(optlen=4, ifaceid='\x00\x00\x00\x05') /
-              DHCP6OptRelayMsg(optlen=0) /
-              DHCP6_Advertise(trid=1) /
-              DHCP6OptStatusCode(statuscode=0))
-        p2 = (Ether(dst=self.pg1.local_mac, src=self.pg1.remote_hosts[1].mac) /
-              IPv6(dst=self.pg1.local_ip6, src=self.pg1._remote_hosts[1].ip6) /
-              UDP(sport=DHCP6_SERVER_PORT, dport=DHCP6_SERVER_PORT) /
-              DHCP6_RelayReply(peeraddr=dhcp_solicit_src_vrf1) /
-              DHCP6OptIfaceId(optlen=4, ifaceid='\x00\x00\x00\x05') /
-              DHCP6OptRelayMsg(optlen=0) /
-              DHCP6_Advertise(trid=1) /
-              DHCP6OptStatusCode(statuscode=0))
+        p1 = (
+            Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac)
+            / IPv6(dst=self.pg1.local_ip6, src=self.pg1.remote_ip6)
+            / UDP(sport=DHCP6_SERVER_PORT, dport=DHCP6_SERVER_PORT)
+            / DHCP6_RelayReply(peeraddr=dhcp_solicit_src_vrf1)
+            / DHCP6OptIfaceId(optlen=4, ifaceid="\x00\x00\x00\x05")
+            / DHCP6OptRelayMsg(optlen=0)
+            / DHCP6_Advertise(trid=1)
+            / DHCP6OptStatusCode(statuscode=0)
+        )
+        p2 = (
+            Ether(dst=self.pg1.local_mac, src=self.pg1.remote_hosts[1].mac)
+            / IPv6(dst=self.pg1.local_ip6, src=self.pg1._remote_hosts[1].ip6)
+            / UDP(sport=DHCP6_SERVER_PORT, dport=DHCP6_SERVER_PORT)
+            / DHCP6_RelayReply(peeraddr=dhcp_solicit_src_vrf1)
+            / DHCP6OptIfaceId(optlen=4, ifaceid="\x00\x00\x00\x05")
+            / DHCP6OptRelayMsg(optlen=0)
+            / DHCP6_Advertise(trid=1)
+            / DHCP6OptStatusCode(statuscode=0)
+        )
 
         pkts = [p1, p2]
 
 
         pkts = [p1, p2]
 
@@ -1168,12 +1232,12 @@ class TestDHCP(VppTestCase):
         #
         # Ensure only solicit messages are duplicated
         #
         #
         # Ensure only solicit messages are duplicated
         #
-        p_request_vrf1 = (Ether(dst=dmac, src=self.pg4.remote_mac) /
-                          IPv6(src=dhcp_solicit_src_vrf1,
-                               dst=dhcp_solicit_dst) /
-                          UDP(sport=DHCP6_SERVER_PORT,
-                              dport=DHCP6_CLIENT_PORT) /
-                          DHCP6_Request())
+        p_request_vrf1 = (
+            Ether(dst=dmac, src=self.pg4.remote_mac)
+            / IPv6(src=dhcp_solicit_src_vrf1, dst=dhcp_solicit_dst)
+            / UDP(sport=DHCP6_SERVER_PORT, dport=DHCP6_CLIENT_PORT)
+            / DHCP6_Request()
+        )
 
         self.pg4.add_stream(p_request_vrf1)
         self.pg_enable_capture(self.pg_interfaces)
 
         self.pg4.add_stream(p_request_vrf1)
         self.pg_enable_capture(self.pg_interfaces)
@@ -1185,16 +1249,17 @@ class TestDHCP(VppTestCase):
         # Test we drop DHCP packets from addresses that are not configured as
         # DHCP servers
         #
         # Test we drop DHCP packets from addresses that are not configured as
         # DHCP servers
         #
-        p2 = (Ether(dst=self.pg1.local_mac, src=self.pg1.remote_hosts[1].mac) /
-              IPv6(dst=self.pg1.local_ip6, src="3001::1") /
-              UDP(sport=DHCP6_SERVER_PORT, dport=DHCP6_SERVER_PORT) /
-              DHCP6_RelayReply(peeraddr=dhcp_solicit_src_vrf1) /
-              DHCP6OptIfaceId(optlen=4, ifaceid='\x00\x00\x00\x05') /
-              DHCP6OptRelayMsg(optlen=0) /
-              DHCP6_Advertise(trid=1) /
-              DHCP6OptStatusCode(statuscode=0))
-        self.send_and_assert_no_replies(self.pg1, p2,
-                                        "DHCP6 not from server")
+        p2 = (
+            Ether(dst=self.pg1.local_mac, src=self.pg1.remote_hosts[1].mac)
+            / IPv6(dst=self.pg1.local_ip6, src="3001::1")
+            / UDP(sport=DHCP6_SERVER_PORT, dport=DHCP6_SERVER_PORT)
+            / DHCP6_RelayReply(peeraddr=dhcp_solicit_src_vrf1)
+            / DHCP6OptIfaceId(optlen=4, ifaceid="\x00\x00\x00\x05")
+            / DHCP6OptRelayMsg(optlen=0)
+            / DHCP6_Advertise(trid=1)
+            / DHCP6OptStatusCode(statuscode=0)
+        )
+        self.send_and_assert_no_replies(self.pg1, p2, "DHCP6 not from server")
 
         #
         # Remove the second DHCP server
 
         #
         # Remove the second DHCP server
@@ -1210,9 +1275,9 @@ class TestDHCP(VppTestCase):
 
         rx = self.pg1.get_capture(1)
 
 
         rx = self.pg1.get_capture(1)
 
-        self.verify_dhcp6_solicit(rx[0], self.pg1,
-                                  dhcp_solicit_src_vrf1,
-                                  self.pg4.remote_mac)
+        self.verify_dhcp6_solicit(
+            rx[0], self.pg1, dhcp_solicit_src_vrf1, self.pg4.remote_mac
+        )
 
         #
         # Cleanup
 
         #
         # Cleanup
@@ -1226,10 +1291,10 @@ class TestDHCP(VppTestCase):
         self.pg5.unconfig_ip6()
 
     def test_dhcp_client(self):
         self.pg5.unconfig_ip6()
 
     def test_dhcp_client(self):
-        """ DHCP Client"""
+        """DHCP Client"""
 
         vdscp = VppEnum.vl_api_ip_dscp_t
 
         vdscp = VppEnum.vl_api_ip_dscp_t
-        hostname = 'universal-dp'
+        hostname = "universal-dp"
 
         self.pg_enable_capture(self.pg_interfaces)
 
 
         self.pg_enable_capture(self.pg_interfaces)
 
@@ -1247,38 +1312,50 @@ class TestDHCP(VppTestCase):
         #
         # Send back on offer, expect the request
         #
         #
         # Send back on offer, expect the request
         #
-        p_offer = (Ether(dst=self.pg3.local_mac, src=self.pg3.remote_mac) /
-                   IP(src=self.pg3.remote_ip4, dst="255.255.255.255") /
-                   UDP(sport=DHCP4_SERVER_PORT, dport=DHCP4_CLIENT_PORT) /
-                   BOOTP(op=1,
-                         yiaddr=self.pg3.local_ip4,
-                         chaddr=mac_pton(self.pg3.local_mac)) /
-                   DHCP(options=[('message-type', 'offer'),
-                                 ('server_id', self.pg3.remote_ip4),
-                                 'end']))
+        p_offer = (
+            Ether(dst=self.pg3.local_mac, src=self.pg3.remote_mac)
+            / IP(src=self.pg3.remote_ip4, dst="255.255.255.255")
+            / UDP(sport=DHCP4_SERVER_PORT, dport=DHCP4_CLIENT_PORT)
+            / BOOTP(
+                op=1, yiaddr=self.pg3.local_ip4, chaddr=mac_pton(self.pg3.local_mac)
+            )
+            / DHCP(
+                options=[
+                    ("message-type", "offer"),
+                    ("server_id", self.pg3.remote_ip4),
+                    "end",
+                ]
+            )
+        )
 
         self.pg3.add_stream(p_offer)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
         rx = self.pg3.get_capture(1)
 
         self.pg3.add_stream(p_offer)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
         rx = self.pg3.get_capture(1)
-        self.verify_orig_dhcp_request(rx[0], self.pg3, hostname,
-                                      self.pg3.local_ip4)
+        self.verify_orig_dhcp_request(rx[0], self.pg3, hostname, self.pg3.local_ip4)
 
         #
         # Send an acknowledgment
         #
 
         #
         # Send an acknowledgment
         #
-        p_ack = (Ether(dst=self.pg3.local_mac, src=self.pg3.remote_mac) /
-                 IP(src=self.pg3.remote_ip4, dst="255.255.255.255") /
-                 UDP(sport=DHCP4_SERVER_PORT, dport=DHCP4_CLIENT_PORT) /
-                 BOOTP(op=1, yiaddr=self.pg3.local_ip4,
-                       chaddr=mac_pton(self.pg3.local_mac)) /
-                 DHCP(options=[('message-type', 'ack'),
-                               ('subnet_mask', "255.255.255.0"),
-                               ('router', self.pg3.remote_ip4),
-                               ('server_id', self.pg3.remote_ip4),
-                               ('lease_time', 43200),
-                               'end']))
+        p_ack = (
+            Ether(dst=self.pg3.local_mac, src=self.pg3.remote_mac)
+            / IP(src=self.pg3.remote_ip4, dst="255.255.255.255")
+            / UDP(sport=DHCP4_SERVER_PORT, dport=DHCP4_CLIENT_PORT)
+            / BOOTP(
+                op=1, yiaddr=self.pg3.local_ip4, chaddr=mac_pton(self.pg3.local_mac)
+            )
+            / DHCP(
+                options=[
+                    ("message-type", "ack"),
+                    ("subnet_mask", "255.255.255.0"),
+                    ("router", self.pg3.remote_ip4),
+                    ("server_id", self.pg3.remote_ip4),
+                    ("lease_time", 43200),
+                    "end",
+                ]
+            )
+        )
 
         self.pg3.add_stream(p_ack)
         self.pg_enable_capture(self.pg_interfaces)
 
         self.pg3.add_stream(p_ack)
         self.pg_enable_capture(self.pg_interfaces)
@@ -1317,16 +1394,19 @@ class TestDHCP(VppTestCase):
         self.pg3.admin_down()
         self.sleep(1)
         self.pg3.admin_up()
         self.pg3.admin_down()
         self.sleep(1)
         self.pg3.admin_up()
-        Client.set_client(self.pg3.sw_if_index, hostname,
-                          id=self.pg3.local_mac,
-                          dscp=vdscp.IP_API_DSCP_EF)
+        Client.set_client(
+            self.pg3.sw_if_index,
+            hostname,
+            id=self.pg3.local_mac,
+            dscp=vdscp.IP_API_DSCP_EF,
+        )
         Client.add_vpp_config()
 
         rx = self.pg3.get_capture(1)
 
         Client.add_vpp_config()
 
         rx = self.pg3.get_capture(1)
 
-        self.verify_orig_dhcp_discover(rx[0], self.pg3, hostname,
-                                       self.pg3.local_mac,
-                                       dscp=vdscp.IP_API_DSCP_EF)
+        self.verify_orig_dhcp_discover(
+            rx[0], self.pg3, hostname, self.pg3.local_mac, dscp=vdscp.IP_API_DSCP_EF
+        )
 
         # TODO: VPP DHCP client should not accept DHCP OFFER message with
         # the XID (Transaction ID) not matching the XID of the most recent
 
         # TODO: VPP DHCP client should not accept DHCP OFFER message with
         # the XID (Transaction ID) not matching the XID of the most recent
@@ -1338,24 +1418,31 @@ class TestDHCP(VppTestCase):
         self.pg_start()
 
         rx = self.pg3.get_capture(1)
         self.pg_start()
 
         rx = self.pg3.get_capture(1)
-        self.verify_orig_dhcp_request(rx[0], self.pg3, hostname,
-                                      self.pg3.local_ip4,
-                                      dscp=vdscp.IP_API_DSCP_EF)
+        self.verify_orig_dhcp_request(
+            rx[0], self.pg3, hostname, self.pg3.local_ip4, dscp=vdscp.IP_API_DSCP_EF
+        )
 
         #
         # unicast the ack to the offered address
         #
 
         #
         # unicast the ack to the offered address
         #
-        p_ack = (Ether(dst=self.pg3.local_mac, src=self.pg3.remote_mac) /
-                 IP(src=self.pg3.remote_ip4, dst=self.pg3.local_ip4) /
-                 UDP(sport=DHCP4_SERVER_PORT, dport=DHCP4_CLIENT_PORT) /
-                 BOOTP(op=1, yiaddr=self.pg3.local_ip4,
-                       chaddr=mac_pton(self.pg3.local_mac)) /
-                 DHCP(options=[('message-type', 'ack'),
-                               ('subnet_mask', "255.255.255.0"),
-                               ('router', self.pg3.remote_ip4),
-                               ('server_id', self.pg3.remote_ip4),
-                               ('lease_time', 43200),
-                               'end']))
+        p_ack = (
+            Ether(dst=self.pg3.local_mac, src=self.pg3.remote_mac)
+            / IP(src=self.pg3.remote_ip4, dst=self.pg3.local_ip4)
+            / UDP(sport=DHCP4_SERVER_PORT, dport=DHCP4_CLIENT_PORT)
+            / BOOTP(
+                op=1, yiaddr=self.pg3.local_ip4, chaddr=mac_pton(self.pg3.local_mac)
+            )
+            / DHCP(
+                options=[
+                    ("message-type", "ack"),
+                    ("subnet_mask", "255.255.255.0"),
+                    ("router", self.pg3.remote_ip4),
+                    ("server_id", self.pg3.remote_ip4),
+                    ("lease_time", 43200),
+                    "end",
+                ]
+            )
+        )
 
         self.pg3.add_stream(p_ack)
         self.pg_enable_capture(self.pg_interfaces)
 
         self.pg3.add_stream(p_ack)
         self.pg_enable_capture(self.pg_interfaces)
@@ -1391,55 +1478,65 @@ class TestDHCP(VppTestCase):
         #
         # Configure DHCP client on PG3 and capture the discover sent
         #
         #
         # Configure DHCP client on PG3 and capture the discover sent
         #
-        Client.set_client(
-            self.pg3.sw_if_index,
-            hostname,
-            set_broadcast_flag=False)
+        Client.set_client(self.pg3.sw_if_index, hostname, set_broadcast_flag=False)
         Client.add_vpp_config()
 
         rx = self.pg3.get_capture(1)
 
         Client.add_vpp_config()
 
         rx = self.pg3.get_capture(1)
 
-        self.verify_orig_dhcp_discover(rx[0], self.pg3, hostname,
-                                       broadcast=False)
+        self.verify_orig_dhcp_discover(rx[0], self.pg3, hostname, broadcast=False)
 
         #
         # Send back on offer, unicasted to the offered address.
         # Expect the request.
         #
 
         #
         # Send back on offer, unicasted to the offered address.
         # Expect the request.
         #
-        p_offer = (Ether(dst=self.pg3.local_mac, src=self.pg3.remote_mac) /
-                   IP(src=self.pg3.remote_ip4, dst=self.pg3.local_ip4) /
-                   UDP(sport=DHCP4_SERVER_PORT, dport=DHCP4_CLIENT_PORT) /
-                   BOOTP(op=1, yiaddr=self.pg3.local_ip4,
-                         chaddr=mac_pton(self.pg3.local_mac)) /
-                   DHCP(options=[('message-type', 'offer'),
-                                 ('server_id', self.pg3.remote_ip4),
-                                 'end']))
+        p_offer = (
+            Ether(dst=self.pg3.local_mac, src=self.pg3.remote_mac)
+            / IP(src=self.pg3.remote_ip4, dst=self.pg3.local_ip4)
+            / UDP(sport=DHCP4_SERVER_PORT, dport=DHCP4_CLIENT_PORT)
+            / BOOTP(
+                op=1, yiaddr=self.pg3.local_ip4, chaddr=mac_pton(self.pg3.local_mac)
+            )
+            / DHCP(
+                options=[
+                    ("message-type", "offer"),
+                    ("server_id", self.pg3.remote_ip4),
+                    "end",
+                ]
+            )
+        )
 
         self.pg3.add_stream(p_offer)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
         rx = self.pg3.get_capture(1)
 
         self.pg3.add_stream(p_offer)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
         rx = self.pg3.get_capture(1)
-        self.verify_orig_dhcp_request(rx[0], self.pg3, hostname,
-                                      self.pg3.local_ip4,
-                                      broadcast=False)
+        self.verify_orig_dhcp_request(
+            rx[0], self.pg3, hostname, self.pg3.local_ip4, broadcast=False
+        )
 
         #
         # Send an acknowledgment, the lease renewal time is 2 seconds
         # so we should expect the renew straight after
         #
 
         #
         # Send an acknowledgment, the lease renewal time is 2 seconds
         # so we should expect the renew straight after
         #
-        p_ack = (Ether(dst=self.pg3.local_mac, src=self.pg3.remote_mac) /
-                 IP(src=self.pg3.remote_ip4, dst=self.pg3.local_ip4) /
-                 UDP(sport=DHCP4_SERVER_PORT, dport=DHCP4_CLIENT_PORT) /
-                 BOOTP(op=1, yiaddr=self.pg3.local_ip4,
-                       chaddr=mac_pton(self.pg3.local_mac)) /
-                 DHCP(options=[('message-type', 'ack'),
-                               ('subnet_mask', "255.255.255.0"),
-                               ('router', self.pg3.remote_ip4),
-                               ('server_id', self.pg3.remote_ip4),
-                               ('lease_time', 43200),
-                               ('renewal_time', 2),
-                               'end']))
+        p_ack = (
+            Ether(dst=self.pg3.local_mac, src=self.pg3.remote_mac)
+            / IP(src=self.pg3.remote_ip4, dst=self.pg3.local_ip4)
+            / UDP(sport=DHCP4_SERVER_PORT, dport=DHCP4_CLIENT_PORT)
+            / BOOTP(
+                op=1, yiaddr=self.pg3.local_ip4, chaddr=mac_pton(self.pg3.local_mac)
+            )
+            / DHCP(
+                options=[
+                    ("message-type", "ack"),
+                    ("subnet_mask", "255.255.255.0"),
+                    ("router", self.pg3.remote_ip4),
+                    ("server_id", self.pg3.remote_ip4),
+                    ("lease_time", 43200),
+                    ("renewal_time", 2),
+                    "end",
+                ]
+            )
+        )
 
         self.pg3.add_stream(p_ack)
         self.pg_enable_capture(self.pg_interfaces)
 
         self.pg3.add_stream(p_ack)
         self.pg_enable_capture(self.pg_interfaces)
@@ -1465,19 +1562,15 @@ class TestDHCP(VppTestCase):
         #
         clients = self.vapi.dhcp_client_dump()
 
         #
         clients = self.vapi.dhcp_client_dump()
 
-        self.assertEqual(clients[0].client.sw_if_index,
-                         self.pg3.sw_if_index)
-        self.assertEqual(clients[0].lease.sw_if_index,
-                         self.pg3.sw_if_index)
+        self.assertEqual(clients[0].client.sw_if_index, self.pg3.sw_if_index)
+        self.assertEqual(clients[0].lease.sw_if_index, self.pg3.sw_if_index)
         self.assertEqual(clients[0].client.hostname, hostname)
         self.assertEqual(clients[0].lease.hostname, hostname)
         # 0 = DISCOVER, 1 = REQUEST, 2 = BOUND
         self.assertEqual(clients[0].lease.state, 2)
         self.assertEqual(clients[0].lease.mask_width, 24)
         self.assertEqual(clients[0].client.hostname, hostname)
         self.assertEqual(clients[0].lease.hostname, hostname)
         # 0 = DISCOVER, 1 = REQUEST, 2 = BOUND
         self.assertEqual(clients[0].lease.state, 2)
         self.assertEqual(clients[0].lease.mask_width, 24)
-        self.assertEqual(str(clients[0].lease.router_address),
-                         self.pg3.remote_ip4)
-        self.assertEqual(str(clients[0].lease.host_address),
-                         self.pg3.local_ip4)
+        self.assertEqual(str(clients[0].lease.router_address), self.pg3.remote_ip4)
+        self.assertEqual(str(clients[0].lease.host_address), self.pg3.local_ip4)
 
         #
         # wait for the unicasted renewal
 
         #
         # wait for the unicasted renewal
@@ -1490,37 +1583,46 @@ class TestDHCP(VppTestCase):
         self.assertEqual(rx[0][ARP].pdst, self.pg3.remote_ip4)
 
         # respond to the arp
         self.assertEqual(rx[0][ARP].pdst, self.pg3.remote_ip4)
 
         # respond to the arp
-        p_arp = (Ether(dst=self.pg3.local_mac, src=self.pg3.remote_mac) /
-                 ARP(op="is-at",
-                     hwdst=self.pg3.local_mac,
-                     hwsrc=self.pg3.remote_mac,
-                     pdst=self.pg3.local_ip4,
-                     psrc=self.pg3.remote_ip4))
+        p_arp = Ether(dst=self.pg3.local_mac, src=self.pg3.remote_mac) / ARP(
+            op="is-at",
+            hwdst=self.pg3.local_mac,
+            hwsrc=self.pg3.remote_mac,
+            pdst=self.pg3.local_ip4,
+            psrc=self.pg3.remote_ip4,
+        )
         self.pg3.add_stream(p_arp)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
         # the next packet is the unicasted renewal
         rx = self.pg3.get_capture(1, timeout=10)
         self.pg3.add_stream(p_arp)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
         # the next packet is the unicasted renewal
         rx = self.pg3.get_capture(1, timeout=10)
-        self.verify_orig_dhcp_request(rx[0], self.pg3, hostname,
-                                      self.pg3.local_ip4,
-                                      l2_bc=False,
-                                      broadcast=False)
+        self.verify_orig_dhcp_request(
+            rx[0], self.pg3, hostname, self.pg3.local_ip4, l2_bc=False, broadcast=False
+        )
 
         # send an ACK with different data from the original offer *
         self.pg3.generate_remote_hosts(4)
 
         # send an ACK with different data from the original offer *
         self.pg3.generate_remote_hosts(4)
-        p_ack = (Ether(dst=self.pg3.local_mac, src=self.pg3.remote_mac) /
-                 IP(src=self.pg3.remote_ip4, dst=self.pg3.local_ip4) /
-                 UDP(sport=DHCP4_SERVER_PORT, dport=DHCP4_CLIENT_PORT) /
-                 BOOTP(op=1, yiaddr=self.pg3.remote_hosts[3].ip4,
-                       chaddr=mac_pton(self.pg3.local_mac)) /
-                 DHCP(options=[('message-type', 'ack'),
-                               ('subnet_mask', "255.255.255.0"),
-                               ('router', self.pg3.remote_hosts[1].ip4),
-                               ('server_id', self.pg3.remote_hosts[2].ip4),
-                               ('lease_time', 43200),
-                               ('renewal_time', 2),
-                               'end']))
+        p_ack = (
+            Ether(dst=self.pg3.local_mac, src=self.pg3.remote_mac)
+            / IP(src=self.pg3.remote_ip4, dst=self.pg3.local_ip4)
+            / UDP(sport=DHCP4_SERVER_PORT, dport=DHCP4_CLIENT_PORT)
+            / BOOTP(
+                op=1,
+                yiaddr=self.pg3.remote_hosts[3].ip4,
+                chaddr=mac_pton(self.pg3.local_mac),
+            )
+            / DHCP(
+                options=[
+                    ("message-type", "ack"),
+                    ("subnet_mask", "255.255.255.0"),
+                    ("router", self.pg3.remote_hosts[1].ip4),
+                    ("server_id", self.pg3.remote_hosts[2].ip4),
+                    ("lease_time", 43200),
+                    ("renewal_time", 2),
+                    "end",
+                ]
+            )
+        )
 
         self.pg3.add_stream(p_ack)
         self.pg_enable_capture(self.pg_interfaces)
 
         self.pg3.add_stream(p_ack)
         self.pg_enable_capture(self.pg_interfaces)
@@ -1531,19 +1633,19 @@ class TestDHCP(VppTestCase):
         #
         clients = self.vapi.dhcp_client_dump()
 
         #
         clients = self.vapi.dhcp_client_dump()
 
-        self.assertEqual(clients[0].client.sw_if_index,
-                         self.pg3.sw_if_index)
-        self.assertEqual(clients[0].lease.sw_if_index,
-                         self.pg3.sw_if_index)
+        self.assertEqual(clients[0].client.sw_if_index, self.pg3.sw_if_index)
+        self.assertEqual(clients[0].lease.sw_if_index, self.pg3.sw_if_index)
         self.assertEqual(clients[0].client.hostname, hostname)
         self.assertEqual(clients[0].lease.hostname, hostname)
         # 0 = DISCOVER, 1 = REQUEST, 2 = BOUND
         self.assertEqual(clients[0].lease.state, 2)
         self.assertEqual(clients[0].lease.mask_width, 24)
         self.assertEqual(clients[0].client.hostname, hostname)
         self.assertEqual(clients[0].lease.hostname, hostname)
         # 0 = DISCOVER, 1 = REQUEST, 2 = BOUND
         self.assertEqual(clients[0].lease.state, 2)
         self.assertEqual(clients[0].lease.mask_width, 24)
-        self.assertEqual(str(clients[0].lease.router_address),
-                         self.pg3.remote_hosts[1].ip4)
-        self.assertEqual(str(clients[0].lease.host_address),
-                         self.pg3.remote_hosts[3].ip4)
+        self.assertEqual(
+            str(clients[0].lease.router_address), self.pg3.remote_hosts[1].ip4
+        )
+        self.assertEqual(
+            str(clients[0].lease.host_address), self.pg3.remote_hosts[3].ip4
+        )
 
         #
         # remove the DHCP config
 
         #
         # remove the DHCP config
@@ -1577,39 +1679,51 @@ class TestDHCP(VppTestCase):
         # Send back on offer with requested lease time, expect the request
         #
         lease_time = 1
         # Send back on offer with requested lease time, expect the request
         #
         lease_time = 1
-        p_offer = (Ether(dst=self.pg3.local_mac, src=self.pg3.remote_mac) /
-                   IP(src=self.pg3.remote_ip4, dst='255.255.255.255') /
-                   UDP(sport=DHCP4_SERVER_PORT, dport=DHCP4_CLIENT_PORT) /
-                   BOOTP(op=1,
-                         yiaddr=self.pg3.local_ip4,
-                         chaddr=mac_pton(self.pg3.local_mac)) /
-                   DHCP(options=[('message-type', 'offer'),
-                                 ('server_id', self.pg3.remote_ip4),
-                                 ('lease_time', lease_time),
-                                 'end']))
+        p_offer = (
+            Ether(dst=self.pg3.local_mac, src=self.pg3.remote_mac)
+            / IP(src=self.pg3.remote_ip4, dst="255.255.255.255")
+            / UDP(sport=DHCP4_SERVER_PORT, dport=DHCP4_CLIENT_PORT)
+            / BOOTP(
+                op=1, yiaddr=self.pg3.local_ip4, chaddr=mac_pton(self.pg3.local_mac)
+            )
+            / DHCP(
+                options=[
+                    ("message-type", "offer"),
+                    ("server_id", self.pg3.remote_ip4),
+                    ("lease_time", lease_time),
+                    "end",
+                ]
+            )
+        )
 
         self.pg3.add_stream(p_offer)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
         rx = self.pg3.get_capture(1)
 
         self.pg3.add_stream(p_offer)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
         rx = self.pg3.get_capture(1)
-        self.verify_orig_dhcp_request(rx[0], self.pg3, hostname,
-                                      self.pg3.local_ip4)
+        self.verify_orig_dhcp_request(rx[0], self.pg3, hostname, self.pg3.local_ip4)
 
         #
         # Send an acknowledgment
         #
 
         #
         # Send an acknowledgment
         #
-        p_ack = (Ether(dst=self.pg3.local_mac, src=self.pg3.remote_mac) /
-                 IP(src=self.pg3.remote_ip4, dst='255.255.255.255') /
-                 UDP(sport=DHCP4_SERVER_PORT, dport=DHCP4_CLIENT_PORT) /
-                 BOOTP(op=1, yiaddr=self.pg3.local_ip4,
-                       chaddr=mac_pton(self.pg3.local_mac)) /
-                 DHCP(options=[('message-type', 'ack'),
-                               ('subnet_mask', '255.255.255.0'),
-                               ('router', self.pg3.remote_ip4),
-                               ('server_id', self.pg3.remote_ip4),
-                               ('lease_time', lease_time),
-                               'end']))
+        p_ack = (
+            Ether(dst=self.pg3.local_mac, src=self.pg3.remote_mac)
+            / IP(src=self.pg3.remote_ip4, dst="255.255.255.255")
+            / UDP(sport=DHCP4_SERVER_PORT, dport=DHCP4_CLIENT_PORT)
+            / BOOTP(
+                op=1, yiaddr=self.pg3.local_ip4, chaddr=mac_pton(self.pg3.local_mac)
+            )
+            / DHCP(
+                options=[
+                    ("message-type", "ack"),
+                    ("subnet_mask", "255.255.255.0"),
+                    ("router", self.pg3.remote_ip4),
+                    ("server_id", self.pg3.remote_ip4),
+                    ("lease_time", lease_time),
+                    "end",
+                ]
+            )
+        )
 
         self.pg3.add_stream(p_ack)
         self.pg_enable_capture(self.pg_interfaces)
 
         self.pg3.add_stream(p_ack)
         self.pg_enable_capture(self.pg_interfaces)
@@ -1641,11 +1755,11 @@ class TestDHCP(VppTestCase):
         Client.remove_vpp_config()
 
     def test_dhcp_client_vlan(self):
         Client.remove_vpp_config()
 
     def test_dhcp_client_vlan(self):
-        """ DHCP Client w/ VLAN"""
+        """DHCP Client w/ VLAN"""
 
         vdscp = VppEnum.vl_api_ip_dscp_t
         vqos = VppEnum.vl_api_qos_source_t
 
         vdscp = VppEnum.vl_api_ip_dscp_t
         vqos = VppEnum.vl_api_qos_source_t
-        hostname = 'universal-dp'
+        hostname = "universal-dp"
 
         self.pg_enable_capture(self.pg_interfaces)
 
 
         self.pg_enable_capture(self.pg_interfaces)
 
@@ -1653,24 +1767,20 @@ class TestDHCP(VppTestCase):
         vlan_100.admin_up()
 
         output = [scapy.compat.chb(4)] * 256
         vlan_100.admin_up()
 
         output = [scapy.compat.chb(4)] * 256
-        os = b''.join(output)
-        rows = [{'outputs': os},
-                {'outputs': os},
-                {'outputs': os},
-                {'outputs': os}]
+        os = b"".join(output)
+        rows = [{"outputs": os}, {"outputs": os}, {"outputs": os}, {"outputs": os}]
 
         qem1 = VppQosEgressMap(self, 1, rows).add_vpp_config()
 
         qem1 = VppQosEgressMap(self, 1, rows).add_vpp_config()
-        qm1 = VppQosMark(self, vlan_100, qem1,
-                         vqos.QOS_API_SOURCE_VLAN).add_vpp_config()
+        qm1 = VppQosMark(
+            self, vlan_100, qem1, vqos.QOS_API_SOURCE_VLAN
+        ).add_vpp_config()
 
         #
         # Configure DHCP client on PG3 and capture the discover sent
         #
         Client = VppDHCPClient(
 
         #
         # Configure DHCP client on PG3 and capture the discover sent
         #
         Client = VppDHCPClient(
-            self,
-            vlan_100.sw_if_index,
-            hostname,
-            dscp=vdscp.IP_API_DSCP_EF)
+            self, vlan_100.sw_if_index, hostname, dscp=vdscp.IP_API_DSCP_EF
+        )
         Client.add_vpp_config()
 
         rx = self.pg3.get_capture(1)
         Client.add_vpp_config()
 
         rx = self.pg3.get_capture(1)
@@ -1678,9 +1788,10 @@ class TestDHCP(VppTestCase):
         self.assertEqual(rx[0][Dot1Q].vlan, 100)
         self.assertEqual(rx[0][Dot1Q].prio, 2)
 
         self.assertEqual(rx[0][Dot1Q].vlan, 100)
         self.assertEqual(rx[0][Dot1Q].prio, 2)
 
-        self.verify_orig_dhcp_discover(rx[0], self.pg3, hostname,
-                                       dscp=vdscp.IP_API_DSCP_EF)
+        self.verify_orig_dhcp_discover(
+            rx[0], self.pg3, hostname, dscp=vdscp.IP_API_DSCP_EF
+        )
 
 
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index 57eb113..8a00cb8 100644 (file)
@@ -1,10 +1,24 @@
 from socket import AF_INET6, inet_ntop, inet_pton
 
 from socket import AF_INET6, inet_ntop, inet_pton
 
-from scapy.layers.dhcp6 import DHCP6_Advertise, DHCP6OptClientId, \
-    DHCP6OptStatusCode, DHCP6OptPref, DHCP6OptIA_PD, DHCP6OptIAPrefix, \
-    DHCP6OptServerId, DHCP6_Solicit, DHCP6_Reply, DHCP6_Request, DHCP6_Renew, \
-    DHCP6_Rebind, DUID_LL, DHCP6_Release, DHCP6OptElapsedTime, DHCP6OptIA_NA, \
-    DHCP6OptIAAddress
+from scapy.layers.dhcp6 import (
+    DHCP6_Advertise,
+    DHCP6OptClientId,
+    DHCP6OptStatusCode,
+    DHCP6OptPref,
+    DHCP6OptIA_PD,
+    DHCP6OptIAPrefix,
+    DHCP6OptServerId,
+    DHCP6_Solicit,
+    DHCP6_Reply,
+    DHCP6_Request,
+    DHCP6_Renew,
+    DHCP6_Rebind,
+    DUID_LL,
+    DHCP6_Release,
+    DHCP6OptElapsedTime,
+    DHCP6OptIA_NA,
+    DHCP6OptIAAddress,
+)
 from scapy.layers.inet6 import IPv6, Ether, UDP
 from scapy.utils6 import in6_mactoifaceid
 
 from scapy.layers.inet6 import IPv6, Ether, UDP
 from scapy.utils6 import in6_mactoifaceid
 
@@ -21,7 +35,7 @@ def ip6_normalize(ip6):
 
 
 class TestDHCPv6DataPlane(VppTestCase):
 
 
 class TestDHCPv6DataPlane(VppTestCase):
-    """ DHCPv6 Data Plane Test Case """
+    """DHCPv6 Data Plane Test Case"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -49,25 +63,23 @@ class TestDHCPv6DataPlane(VppTestCase):
         super(TestDHCPv6DataPlane, self).tearDown()
 
     def test_dhcp_ia_na_send_solicit_receive_advertise(self):
         super(TestDHCPv6DataPlane, self).tearDown()
 
     def test_dhcp_ia_na_send_solicit_receive_advertise(self):
-        """ Verify DHCPv6 IA NA Solicit packet and Advertise event """
+        """Verify DHCPv6 IA NA Solicit packet and Advertise event"""
 
         self.vapi.dhcp6_clients_enable_disable(enable=1)
 
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
         self.vapi.dhcp6_clients_enable_disable(enable=1)
 
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
-        address = {'address': '1:2:3::5',
-                   'preferred_time': 60,
-                   'valid_time': 120}
+        address = {"address": "1:2:3::5", "preferred_time": 60, "valid_time": 120}
         self.vapi.dhcp6_send_client_message(
         self.vapi.dhcp6_send_client_message(
-            server_index=0xffffffff,
+            server_index=0xFFFFFFFF,
             mrc=1,
             msg_type=VppEnum.vl_api_dhcpv6_msg_type_t.DHCPV6_MSG_API_SOLICIT,
             sw_if_index=self.pg0.sw_if_index,
             T1=20,
             T2=40,
             addresses=[address],
             mrc=1,
             msg_type=VppEnum.vl_api_dhcpv6_msg_type_t.DHCPV6_MSG_API_SOLICIT,
             sw_if_index=self.pg0.sw_if_index,
             T1=20,
             T2=40,
             addresses=[address],
-            n_addresses=len(
-                [address]))
+            n_addresses=len([address]),
+        )
         rx_list = self.pg0.get_capture(1)
         self.assertEqual(len(rx_list), 1)
         packet = rx_list[0]
         rx_list = self.pg0.get_capture(1)
         self.assertEqual(len(rx_list), 1)
         packet = rx_list[0]
@@ -89,27 +101,27 @@ class TestDHCPv6DataPlane(VppTestCase):
         self.assert_equal(ia_na.T2, 40)
         self.assert_equal(len(ia_na.ianaopts), 1)
         address = ia_na.ianaopts[0]
         self.assert_equal(ia_na.T2, 40)
         self.assert_equal(len(ia_na.ianaopts), 1)
         address = ia_na.ianaopts[0]
-        self.assert_equal(address.addr, '1:2:3::5')
+        self.assert_equal(address.addr, "1:2:3::5")
         self.assert_equal(address.preflft, 60)
         self.assert_equal(address.validlft, 120)
 
         self.assert_equal(address.preflft, 60)
         self.assert_equal(address.validlft, 120)
 
-        self.vapi.want_dhcp6_reply_events(enable_disable=1,
-                                          pid=os.getpid())
+        self.vapi.want_dhcp6_reply_events(enable_disable=1, pid=os.getpid())
 
         try:
 
         try:
-            ia_na_opts = DHCP6OptIAAddress(addr='7:8::2', preflft=60,
-                                           validlft=120)
-            p = (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-                 IPv6(src=util.mk_ll_addr(self.pg0.remote_mac),
-                      dst=self.pg0.local_ip6_ll) /
-                 UDP(sport=547, dport=546) /
-                 DHCP6_Advertise(trid=trid) /
-                 DHCP6OptServerId(duid=self.server_duid) /
-                 DHCP6OptClientId(duid=client_duid) /
-                 DHCP6OptPref(prefval=7) /
-                 DHCP6OptStatusCode(statuscode=1) /
-                 DHCP6OptIA_NA(iaid=1, T1=20, T2=40, ianaopts=ia_na_opts)
-                 )
+            ia_na_opts = DHCP6OptIAAddress(addr="7:8::2", preflft=60, validlft=120)
+            p = (
+                Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+                / IPv6(
+                    src=util.mk_ll_addr(self.pg0.remote_mac), dst=self.pg0.local_ip6_ll
+                )
+                / UDP(sport=547, dport=546)
+                / DHCP6_Advertise(trid=trid)
+                / DHCP6OptServerId(duid=self.server_duid)
+                / DHCP6OptClientId(duid=client_duid)
+                / DHCP6OptPref(prefval=7)
+                / DHCP6OptStatusCode(statuscode=1)
+                / DHCP6OptIA_NA(iaid=1, T1=20, T2=40, ianaopts=ia_na_opts)
+            )
             self.pg0.add_stream([p])
             self.pg_start()
 
             self.pg0.add_stream([p])
             self.pg_start()
 
@@ -123,36 +135,41 @@ class TestDHCPv6DataPlane(VppTestCase):
             reported_address = ev.addresses[0]
             address = ia_na_opts.getfieldval("addr")
             self.assert_equal(str(reported_address.address), address)
             reported_address = ev.addresses[0]
             address = ia_na_opts.getfieldval("addr")
             self.assert_equal(str(reported_address.address), address)
-            self.assert_equal(reported_address.preferred_time,
-                              ia_na_opts.getfieldval("preflft"))
-            self.assert_equal(reported_address.valid_time,
-                              ia_na_opts.getfieldval("validlft"))
+            self.assert_equal(
+                reported_address.preferred_time, ia_na_opts.getfieldval("preflft")
+            )
+            self.assert_equal(
+                reported_address.valid_time, ia_na_opts.getfieldval("validlft")
+            )
 
         finally:
             self.vapi.want_dhcp6_reply_events(enable_disable=0)
         self.vapi.dhcp6_clients_enable_disable(enable=0)
 
     def test_dhcp_pd_send_solicit_receive_advertise(self):
 
         finally:
             self.vapi.want_dhcp6_reply_events(enable_disable=0)
         self.vapi.dhcp6_clients_enable_disable(enable=0)
 
     def test_dhcp_pd_send_solicit_receive_advertise(self):
-        """ Verify DHCPv6 PD Solicit packet and Advertise event """
+        """Verify DHCPv6 PD Solicit packet and Advertise event"""
 
         self.vapi.dhcp6_clients_enable_disable(enable=1)
 
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
 
         self.vapi.dhcp6_clients_enable_disable(enable=1)
 
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
-        prefix = {'prefix': {'address': '1:2:3::', 'len': 50},
-                  'preferred_time': 60,
-                  'valid_time': 120}
+        prefix = {
+            "prefix": {"address": "1:2:3::", "len": 50},
+            "preferred_time": 60,
+            "valid_time": 120,
+        }
         prefixes = [prefix]
         self.vapi.dhcp6_pd_send_client_message(
         prefixes = [prefix]
         self.vapi.dhcp6_pd_send_client_message(
-            server_index=0xffffffff,
+            server_index=0xFFFFFFFF,
             mrc=1,
             msg_type=VppEnum.vl_api_dhcpv6_msg_type_t.DHCPV6_MSG_API_SOLICIT,
             sw_if_index=self.pg0.sw_if_index,
             T1=20,
             T2=40,
             prefixes=prefixes,
             mrc=1,
             msg_type=VppEnum.vl_api_dhcpv6_msg_type_t.DHCPV6_MSG_API_SOLICIT,
             sw_if_index=self.pg0.sw_if_index,
             T1=20,
             T2=40,
             prefixes=prefixes,
-            n_prefixes=len(prefixes))
+            n_prefixes=len(prefixes),
+        )
         rx_list = self.pg0.get_capture(1)
         self.assertEqual(len(rx_list), 1)
         packet = rx_list[0]
         rx_list = self.pg0.get_capture(1)
         self.assertEqual(len(rx_list), 1)
         packet = rx_list[0]
@@ -174,28 +191,30 @@ class TestDHCPv6DataPlane(VppTestCase):
         self.assert_equal(ia_pd.T2, 40)
         self.assert_equal(len(ia_pd.iapdopt), 1)
         prefix = ia_pd.iapdopt[0]
         self.assert_equal(ia_pd.T2, 40)
         self.assert_equal(len(ia_pd.iapdopt), 1)
         prefix = ia_pd.iapdopt[0]
-        self.assert_equal(prefix.prefix, '1:2:3::')
+        self.assert_equal(prefix.prefix, "1:2:3::")
         self.assert_equal(prefix.plen, 50)
         self.assert_equal(prefix.preflft, 60)
         self.assert_equal(prefix.validlft, 120)
 
         self.assert_equal(prefix.plen, 50)
         self.assert_equal(prefix.preflft, 60)
         self.assert_equal(prefix.validlft, 120)
 
-        self.vapi.want_dhcp6_pd_reply_events(enable_disable=1,
-                                             pid=os.getpid())
+        self.vapi.want_dhcp6_pd_reply_events(enable_disable=1, pid=os.getpid())
 
         try:
 
         try:
-            ia_pd_opts = DHCP6OptIAPrefix(prefix='7:8::', plen=56, preflft=60,
-                                          validlft=120)
-            p = (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-                 IPv6(src=util.mk_ll_addr(self.pg0.remote_mac),
-                      dst=self.pg0.local_ip6_ll) /
-                 UDP(sport=547, dport=546) /
-                 DHCP6_Advertise(trid=trid) /
-                 DHCP6OptServerId(duid=self.server_duid) /
-                 DHCP6OptClientId(duid=client_duid) /
-                 DHCP6OptPref(prefval=7) /
-                 DHCP6OptStatusCode(statuscode=1) /
-                 DHCP6OptIA_PD(iaid=1, T1=20, T2=40, iapdopt=ia_pd_opts)
-                 )
+            ia_pd_opts = DHCP6OptIAPrefix(
+                prefix="7:8::", plen=56, preflft=60, validlft=120
+            )
+            p = (
+                Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+                / IPv6(
+                    src=util.mk_ll_addr(self.pg0.remote_mac), dst=self.pg0.local_ip6_ll
+                )
+                / UDP(sport=547, dport=546)
+                / DHCP6_Advertise(trid=trid)
+                / DHCP6OptServerId(duid=self.server_duid)
+                / DHCP6OptClientId(duid=client_duid)
+                / DHCP6OptPref(prefval=7)
+                / DHCP6OptStatusCode(statuscode=1)
+                / DHCP6OptIA_PD(iaid=1, T1=20, T2=40, iapdopt=ia_pd_opts)
+            )
             self.pg0.add_stream([p])
             self.pg_start()
 
             self.pg0.add_stream([p])
             self.pg_start()
 
@@ -208,14 +227,17 @@ class TestDHCPv6DataPlane(VppTestCase):
 
             reported_prefix = ev.prefixes[0]
             prefix = ia_pd_opts.getfieldval("prefix")
 
             reported_prefix = ev.prefixes[0]
             prefix = ia_pd_opts.getfieldval("prefix")
+            self.assert_equal(str(reported_prefix.prefix).split("/")[0], prefix)
+            self.assert_equal(
+                int(str(reported_prefix.prefix).split("/")[1]),
+                ia_pd_opts.getfieldval("plen"),
+            )
             self.assert_equal(
             self.assert_equal(
-                str(reported_prefix.prefix).split('/')[0], prefix)
-            self.assert_equal(int(str(reported_prefix.prefix).split('/')[1]),
-                              ia_pd_opts.getfieldval("plen"))
-            self.assert_equal(reported_prefix.preferred_time,
-                              ia_pd_opts.getfieldval("preflft"))
-            self.assert_equal(reported_prefix.valid_time,
-                              ia_pd_opts.getfieldval("validlft"))
+                reported_prefix.preferred_time, ia_pd_opts.getfieldval("preflft")
+            )
+            self.assert_equal(
+                reported_prefix.valid_time, ia_pd_opts.getfieldval("validlft")
+            )
 
         finally:
             self.vapi.want_dhcp6_pd_reply_events(enable_disable=0)
 
         finally:
             self.vapi.want_dhcp6_pd_reply_events(enable_disable=0)
@@ -224,7 +246,7 @@ class TestDHCPv6DataPlane(VppTestCase):
 
 @tag_run_solo
 class TestDHCPv6IANAControlPlane(VppTestCase):
 
 @tag_run_solo
 class TestDHCPv6IANAControlPlane(VppTestCase):
-    """ DHCPv6 IA NA Control Plane Test Case """
+    """DHCPv6 IA NA Control Plane Test Case"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -248,18 +270,19 @@ class TestDHCPv6IANAControlPlane(VppTestCase):
         self.T2 = 2
 
         fib = self.vapi.ip_route_dump(0, True)
         self.T2 = 2
 
         fib = self.vapi.ip_route_dump(0, True)
-        self.initial_addresses = set(self.get_interface_addresses(fib,
-                                                                  self.pg0))
+        self.initial_addresses = set(self.get_interface_addresses(fib, self.pg0))
 
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
 
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
-        self.vapi.dhcp6_client_enable_disable(sw_if_index=self.pg0.sw_if_index,
-                                              enable=1)
+        self.vapi.dhcp6_client_enable_disable(
+            sw_if_index=self.pg0.sw_if_index, enable=1
+        )
 
     def tearDown(self):
 
     def tearDown(self):
-        self.vapi.dhcp6_client_enable_disable(sw_if_index=self.pg0.sw_if_index,
-                                              enable=0)
+        self.vapi.dhcp6_client_enable_disable(
+            sw_if_index=self.pg0.sw_if_index, enable=0
+        )
 
         for i in self.interfaces:
             i.admin_down()
 
         for i in self.interfaces:
             i.admin_down()
@@ -302,12 +325,12 @@ class TestDHCPv6IANAControlPlane(VppTestCase):
                 self.trid = packet[msg_type].trid
             ip = packet[IPv6]
             udp = packet[UDP]
                 self.trid = packet[msg_type].trid
             ip = packet[IPv6]
             udp = packet[UDP]
-            self.assertEqual(ip.dst, 'ff02::1:2')
+            self.assertEqual(ip.dst, "ff02::1:2")
             self.assertEqual(udp.sport, 546)
             self.assertEqual(udp.dport, 547)
             dhcpv6 = packet[msg_type]
             elapsed_time = dhcpv6[DHCP6OptElapsedTime]
             self.assertEqual(udp.sport, 546)
             self.assertEqual(udp.dport, 547)
             dhcpv6 = packet[msg_type]
             elapsed_time = dhcpv6[DHCP6OptElapsedTime]
-            if (is_resend):
+            if is_resend:
                 self.assertNotEqual(elapsed_time.elapsedtime, 0)
             else:
                 self.assertEqual(elapsed_time.elapsedtime, 0)
                 self.assertNotEqual(elapsed_time.elapsedtime, 0)
             else:
                 self.assertEqual(elapsed_time.elapsedtime, 0)
@@ -346,15 +369,15 @@ class TestDHCPv6IANAControlPlane(VppTestCase):
             opt_ia_na = DHCP6OptIA_NA(iaid=1, T1=t1, T2=t2)
         else:
             opt_ia_na = DHCP6OptIA_NA(iaid=1, T1=t1, T2=t2, ianaopts=ianaopts)
             opt_ia_na = DHCP6OptIA_NA(iaid=1, T1=t1, T2=t2)
         else:
             opt_ia_na = DHCP6OptIA_NA(iaid=1, T1=t1, T2=t2, ianaopts=ianaopts)
-        p = (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-             IPv6(src=util.mk_ll_addr(self.pg0.remote_mac),
-                  dst=self.pg0.local_ip6_ll) /
-             UDP(sport=547, dport=546) /
-             msg_type(trid=self.trid) /
-             DHCP6OptServerId(duid=self.server_duid) /
-             DHCP6OptClientId(duid=self.client_duid) /
-             opt_ia_na
-             )
+        p = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IPv6(src=util.mk_ll_addr(self.pg0.remote_mac), dst=self.pg0.local_ip6_ll)
+            / UDP(sport=547, dport=546)
+            / msg_type(trid=self.trid)
+            / DHCP6OptServerId(duid=self.server_duid)
+            / DHCP6OptClientId(duid=self.client_duid)
+            / opt_ia_na
+        )
         self.pg0.add_stream([p])
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg0.add_stream([p])
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -366,7 +389,7 @@ class TestDHCPv6IANAControlPlane(VppTestCase):
         self.send_packet(DHCP6_Reply, t1, t2, ianaopts)
 
     def test_T1_and_T2_timeouts(self):
         self.send_packet(DHCP6_Reply, t1, t2, ianaopts)
 
     def test_T1_and_T2_timeouts(self):
-        """ Test T1 and T2 timeouts """
+        """Test T1 and T2 timeouts"""
 
         self.wait_for_solicit()
         self.send_advertise()
 
         self.wait_for_solicit()
         self.send_advertise()
@@ -384,10 +407,9 @@ class TestDHCPv6IANAControlPlane(VppTestCase):
         self.wait_for_rebind()
 
     def test_addresses(self):
         self.wait_for_rebind()
 
     def test_addresses(self):
-        """ Test handling of addresses """
+        """Test handling of addresses"""
 
 
-        ia_na_opts = DHCP6OptIAAddress(addr='7:8::2', preflft=1,
-                                       validlft=2)
+        ia_na_opts = DHCP6OptIAAddress(addr="7:8::2", preflft=1, validlft=2)
 
         self.wait_for_solicit()
         self.send_advertise(t1=20, t2=40, ianaopts=ia_na_opts)
 
         self.wait_for_solicit()
         self.send_advertise(t1=20, t2=40, ianaopts=ia_na_opts)
@@ -399,7 +421,7 @@ class TestDHCPv6IANAControlPlane(VppTestCase):
         new_addresses = self.get_addresses()
         self.assertEqual(len(new_addresses), 1)
         addr = list(new_addresses)[0]
         new_addresses = self.get_addresses()
         self.assertEqual(len(new_addresses), 1)
         addr = list(new_addresses)[0]
-        self.assertEqual(addr, '7:8::2')
+        self.assertEqual(addr, "7:8::2")
 
         self.sleep(2)
 
 
         self.sleep(2)
 
@@ -410,7 +432,7 @@ class TestDHCPv6IANAControlPlane(VppTestCase):
         self.assertEqual(len(new_addresses), 0)
 
     def test_sending_client_messages_solicit(self):
         self.assertEqual(len(new_addresses), 0)
 
     def test_sending_client_messages_solicit(self):
-        """ VPP receives messages from DHCPv6 client """
+        """VPP receives messages from DHCPv6 client"""
 
         self.wait_for_solicit()
         self.send_packet(DHCP6_Solicit)
 
         self.wait_for_solicit()
         self.send_packet(DHCP6_Solicit)
@@ -421,7 +443,7 @@ class TestDHCPv6IANAControlPlane(VppTestCase):
         self.wait_for_solicit(is_resend=True)
 
     def test_sending_inappropriate_packets(self):
         self.wait_for_solicit(is_resend=True)
 
     def test_sending_inappropriate_packets(self):
-        """ Server sends messages with inappropriate message types """
+        """Server sends messages with inappropriate message types"""
 
         self.wait_for_solicit()
         self.send_reply()
 
         self.wait_for_solicit()
         self.send_reply()
@@ -434,7 +456,7 @@ class TestDHCPv6IANAControlPlane(VppTestCase):
         self.wait_for_renew()
 
     def test_no_address_available_in_advertise(self):
         self.wait_for_renew()
 
     def test_no_address_available_in_advertise(self):
-        """ Advertise message contains NoAddrsAvail status code """
+        """Advertise message contains NoAddrsAvail status code"""
 
         self.wait_for_solicit()
         noavail = DHCP6OptStatusCode(statuscode=2)  # NoAddrsAvail
 
         self.wait_for_solicit()
         noavail = DHCP6OptStatusCode(statuscode=2)  # NoAddrsAvail
@@ -442,12 +464,12 @@ class TestDHCPv6IANAControlPlane(VppTestCase):
         self.wait_for_solicit(is_resend=True)
 
     def test_preferred_greater_than_valid_lifetime(self):
         self.wait_for_solicit(is_resend=True)
 
     def test_preferred_greater_than_valid_lifetime(self):
-        """ Preferred lifetime is greater than valid lifetime """
+        """Preferred lifetime is greater than valid lifetime"""
 
         self.wait_for_solicit()
         self.send_advertise()
         self.wait_for_request()
 
         self.wait_for_solicit()
         self.send_advertise()
         self.wait_for_request()
-        ia_na_opts = DHCP6OptIAAddress(addr='7:8::2', preflft=4, validlft=3)
+        ia_na_opts = DHCP6OptIAAddress(addr="7:8::2", preflft=4, validlft=3)
         self.send_reply(ianaopts=ia_na_opts)
 
         self.sleep(0.5)
         self.send_reply(ianaopts=ia_na_opts)
 
         self.sleep(0.5)
@@ -459,12 +481,12 @@ class TestDHCPv6IANAControlPlane(VppTestCase):
         self.assertEqual(len(new_addresses), 0)
 
     def test_T1_greater_than_T2(self):
         self.assertEqual(len(new_addresses), 0)
 
     def test_T1_greater_than_T2(self):
-        """ T1 is greater than T2 """
+        """T1 is greater than T2"""
 
         self.wait_for_solicit()
         self.send_advertise()
         self.wait_for_request()
 
         self.wait_for_solicit()
         self.send_advertise()
         self.wait_for_request()
-        ia_na_opts = DHCP6OptIAAddress(addr='7:8::2', preflft=4, validlft=8)
+        ia_na_opts = DHCP6OptIAAddress(addr="7:8::2", preflft=4, validlft=8)
         self.send_reply(t1=80, t2=40, ianaopts=ia_na_opts)
 
         self.sleep(0.5)
         self.send_reply(t1=80, t2=40, ianaopts=ia_na_opts)
 
         self.sleep(0.5)
@@ -478,7 +500,7 @@ class TestDHCPv6IANAControlPlane(VppTestCase):
 
 @tag_fixme_vpp_workers
 class TestDHCPv6PDControlPlane(VppTestCase):
 
 @tag_fixme_vpp_workers
 class TestDHCPv6PDControlPlane(VppTestCase):
-    """ DHCPv6 PD Control Plane Test Case """
+    """DHCPv6 PD Control Plane Test Case"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -502,22 +524,19 @@ class TestDHCPv6PDControlPlane(VppTestCase):
         self.T2 = 2
 
         fib = self.vapi.ip_route_dump(0, True)
         self.T2 = 2
 
         fib = self.vapi.ip_route_dump(0, True)
-        self.initial_addresses = set(self.get_interface_addresses(fib,
-                                                                  self.pg1))
+        self.initial_addresses = set(self.get_interface_addresses(fib, self.pg1))
 
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
 
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
-        self.prefix_group = 'my-pd-prefix-group'
+        self.prefix_group = "my-pd-prefix-group"
 
         self.vapi.dhcp6_pd_client_enable_disable(
 
         self.vapi.dhcp6_pd_client_enable_disable(
-            enable=1,
-            sw_if_index=self.pg0.sw_if_index,
-            prefix_group=self.prefix_group)
+            enable=1, sw_if_index=self.pg0.sw_if_index, prefix_group=self.prefix_group
+        )
 
     def tearDown(self):
 
     def tearDown(self):
-        self.vapi.dhcp6_pd_client_enable_disable(self.pg0.sw_if_index,
-                                                 enable=0)
+        self.vapi.dhcp6_pd_client_enable_disable(self.pg0.sw_if_index, enable=0)
 
         for i in self.interfaces:
             i.admin_down()
 
         for i in self.interfaces:
             i.admin_down()
@@ -560,12 +579,12 @@ class TestDHCPv6PDControlPlane(VppTestCase):
                 self.trid = packet[msg_type].trid
             ip = packet[IPv6]
             udp = packet[UDP]
                 self.trid = packet[msg_type].trid
             ip = packet[IPv6]
             udp = packet[UDP]
-            self.assertEqual(ip.dst, 'ff02::1:2')
+            self.assertEqual(ip.dst, "ff02::1:2")
             self.assertEqual(udp.sport, 546)
             self.assertEqual(udp.dport, 547)
             dhcpv6 = packet[msg_type]
             elapsed_time = dhcpv6[DHCP6OptElapsedTime]
             self.assertEqual(udp.sport, 546)
             self.assertEqual(udp.dport, 547)
             dhcpv6 = packet[msg_type]
             elapsed_time = dhcpv6[DHCP6OptElapsedTime]
-            if (is_resend):
+            if is_resend:
                 self.assertNotEqual(elapsed_time.elapsedtime, 0)
             else:
                 self.assertEqual(elapsed_time.elapsedtime, 0)
                 self.assertNotEqual(elapsed_time.elapsedtime, 0)
             else:
                 self.assertEqual(elapsed_time.elapsedtime, 0)
@@ -604,15 +623,15 @@ class TestDHCPv6PDControlPlane(VppTestCase):
             opt_ia_pd = DHCP6OptIA_PD(iaid=1, T1=t1, T2=t2)
         else:
             opt_ia_pd = DHCP6OptIA_PD(iaid=1, T1=t1, T2=t2, iapdopt=iapdopt)
             opt_ia_pd = DHCP6OptIA_PD(iaid=1, T1=t1, T2=t2)
         else:
             opt_ia_pd = DHCP6OptIA_PD(iaid=1, T1=t1, T2=t2, iapdopt=iapdopt)
-        p = (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-             IPv6(src=util.mk_ll_addr(self.pg0.remote_mac),
-                  dst=self.pg0.local_ip6_ll) /
-             UDP(sport=547, dport=546) /
-             msg_type(trid=self.trid) /
-             DHCP6OptServerId(duid=self.server_duid) /
-             DHCP6OptClientId(duid=self.client_duid) /
-             opt_ia_pd
-             )
+        p = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IPv6(src=util.mk_ll_addr(self.pg0.remote_mac), dst=self.pg0.local_ip6_ll)
+            / UDP(sport=547, dport=546)
+            / msg_type(trid=self.trid)
+            / DHCP6OptServerId(duid=self.server_duid)
+            / DHCP6OptClientId(duid=self.client_duid)
+            / opt_ia_pd
+        )
         self.pg0.add_stream([p])
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg0.add_stream([p])
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -624,7 +643,7 @@ class TestDHCPv6PDControlPlane(VppTestCase):
         self.send_packet(DHCP6_Reply, t1, t2, iapdopt)
 
     def test_T1_and_T2_timeouts(self):
         self.send_packet(DHCP6_Reply, t1, t2, iapdopt)
 
     def test_T1_and_T2_timeouts(self):
-        """ Test T1 and T2 timeouts """
+        """Test T1 and T2 timeouts"""
 
         self.wait_for_solicit()
         self.send_advertise()
 
         self.wait_for_solicit()
         self.send_advertise()
@@ -642,18 +661,20 @@ class TestDHCPv6PDControlPlane(VppTestCase):
         self.wait_for_rebind()
 
     def test_prefixes(self):
         self.wait_for_rebind()
 
     def test_prefixes(self):
-        """ Test handling of prefixes """
+        """Test handling of prefixes"""
 
 
-        address1 = '::2:0:0:0:405/60'
-        address2 = '::76:0:0:0:406/62'
+        address1 = "::2:0:0:0:405/60"
+        address2 = "::76:0:0:0:406/62"
         try:
             self.vapi.ip6_add_del_address_using_prefix(
                 sw_if_index=self.pg1.sw_if_index,
                 address_with_prefix=address1,
         try:
             self.vapi.ip6_add_del_address_using_prefix(
                 sw_if_index=self.pg1.sw_if_index,
                 address_with_prefix=address1,
-                prefix_group=self.prefix_group)
+                prefix_group=self.prefix_group,
+            )
 
 
-            ia_pd_opts = DHCP6OptIAPrefix(prefix='7:8::', plen=56, preflft=2,
-                                          validlft=3)
+            ia_pd_opts = DHCP6OptIAPrefix(
+                prefix="7:8::", plen=56, preflft=2, validlft=3
+            )
 
             self.wait_for_solicit()
             self.send_advertise(t1=20, t2=40, iapdopt=ia_pd_opts)
 
             self.wait_for_solicit()
             self.send_advertise(t1=20, t2=40, iapdopt=ia_pd_opts)
@@ -665,14 +686,15 @@ class TestDHCPv6PDControlPlane(VppTestCase):
             new_addresses = self.get_addresses()
             self.assertEqual(len(new_addresses), 1)
             addr = list(new_addresses)[0]
             new_addresses = self.get_addresses()
             self.assertEqual(len(new_addresses), 1)
             addr = list(new_addresses)[0]
-            self.assertEqual(addr, '7:8:0:2::405')
+            self.assertEqual(addr, "7:8:0:2::405")
 
             self.sleep(1)
 
             self.vapi.ip6_add_del_address_using_prefix(
                 sw_if_index=self.pg1.sw_if_index,
                 address_with_prefix=address2,
 
             self.sleep(1)
 
             self.vapi.ip6_add_del_address_using_prefix(
                 sw_if_index=self.pg1.sw_if_index,
                 address_with_prefix=address2,
-                prefix_group=self.prefix_group)
+                prefix_group=self.prefix_group,
+            )
 
             self.sleep(1)
 
 
             self.sleep(1)
 
@@ -683,10 +705,10 @@ class TestDHCPv6PDControlPlane(VppTestCase):
             self.assertEqual(len(new_addresses), 2)
             addr1 = list(new_addresses)[0]
             addr2 = list(new_addresses)[1]
             self.assertEqual(len(new_addresses), 2)
             addr1 = list(new_addresses)[0]
             addr2 = list(new_addresses)[1]
-            if addr1 == '7:8:0:76::406':
+            if addr1 == "7:8:0:76::406":
                 addr1, addr2 = addr2, addr1
                 addr1, addr2 = addr2, addr1
-            self.assertEqual(addr1, '7:8:0:2::405')
-            self.assertEqual(addr2, '7:8:0:76::406')
+            self.assertEqual(addr1, "7:8:0:2::405")
+            self.assertEqual(addr2, "7:8:0:76::406")
 
             self.sleep(1)
 
 
             self.sleep(1)
 
@@ -701,15 +723,19 @@ class TestDHCPv6PDControlPlane(VppTestCase):
                 self.vapi.ip6_add_del_address_using_prefix(
                     sw_if_index=self.pg1.sw_if_index,
                     address_with_prefix=address1,
                 self.vapi.ip6_add_del_address_using_prefix(
                     sw_if_index=self.pg1.sw_if_index,
                     address_with_prefix=address1,
-                    prefix_group=self.prefix_group, is_add=0)
+                    prefix_group=self.prefix_group,
+                    is_add=0,
+                )
             if address2 is not None:
                 self.vapi.ip6_add_del_address_using_prefix(
                     sw_if_index=self.pg1.sw_if_index,
                     address_with_prefix=address2,
             if address2 is not None:
                 self.vapi.ip6_add_del_address_using_prefix(
                     sw_if_index=self.pg1.sw_if_index,
                     address_with_prefix=address2,
-                    prefix_group=self.prefix_group, is_add=0)
+                    prefix_group=self.prefix_group,
+                    is_add=0,
+                )
 
     def test_sending_client_messages_solicit(self):
 
     def test_sending_client_messages_solicit(self):
-        """ VPP receives messages from DHCPv6 client """
+        """VPP receives messages from DHCPv6 client"""
 
         self.wait_for_solicit()
         self.send_packet(DHCP6_Solicit)
 
         self.wait_for_solicit()
         self.send_packet(DHCP6_Solicit)
@@ -720,7 +746,7 @@ class TestDHCPv6PDControlPlane(VppTestCase):
         self.wait_for_solicit(is_resend=True)
 
     def test_sending_inappropriate_packets(self):
         self.wait_for_solicit(is_resend=True)
 
     def test_sending_inappropriate_packets(self):
-        """ Server sends messages with inappropriate message types """
+        """Server sends messages with inappropriate message types"""
 
         self.wait_for_solicit()
         self.send_reply()
 
         self.wait_for_solicit()
         self.send_reply()
@@ -733,7 +759,7 @@ class TestDHCPv6PDControlPlane(VppTestCase):
         self.wait_for_renew()
 
     def test_no_prefix_available_in_advertise(self):
         self.wait_for_renew()
 
     def test_no_prefix_available_in_advertise(self):
-        """ Advertise message contains NoPrefixAvail status code """
+        """Advertise message contains NoPrefixAvail status code"""
 
         self.wait_for_solicit()
         noavail = DHCP6OptStatusCode(statuscode=6)  # NoPrefixAvail
 
         self.wait_for_solicit()
         noavail = DHCP6OptStatusCode(statuscode=6)  # NoPrefixAvail
@@ -741,20 +767,22 @@ class TestDHCPv6PDControlPlane(VppTestCase):
         self.wait_for_solicit(is_resend=True)
 
     def test_preferred_greater_than_valid_lifetime(self):
         self.wait_for_solicit(is_resend=True)
 
     def test_preferred_greater_than_valid_lifetime(self):
-        """ Preferred lifetime is greater than valid lifetime """
+        """Preferred lifetime is greater than valid lifetime"""
 
 
-        address1 = '::2:0:0:0:405/60'
+        address1 = "::2:0:0:0:405/60"
         try:
             self.vapi.ip6_add_del_address_using_prefix(
                 sw_if_index=self.pg1.sw_if_index,
                 address_with_prefix=address1,
         try:
             self.vapi.ip6_add_del_address_using_prefix(
                 sw_if_index=self.pg1.sw_if_index,
                 address_with_prefix=address1,
-                prefix_group=self.prefix_group)
+                prefix_group=self.prefix_group,
+            )
 
             self.wait_for_solicit()
             self.send_advertise()
             self.wait_for_request()
 
             self.wait_for_solicit()
             self.send_advertise()
             self.wait_for_request()
-            ia_pd_opts = DHCP6OptIAPrefix(prefix='7:8::', plen=56, preflft=4,
-                                          validlft=3)
+            ia_pd_opts = DHCP6OptIAPrefix(
+                prefix="7:8::", plen=56, preflft=4, validlft=3
+            )
             self.send_reply(iapdopt=ia_pd_opts)
 
             self.sleep(0.5)
             self.send_reply(iapdopt=ia_pd_opts)
 
             self.sleep(0.5)
@@ -770,23 +798,26 @@ class TestDHCPv6PDControlPlane(VppTestCase):
                 sw_if_index=self.pg1.sw_if_index,
                 address_with_prefix=address1,
                 prefix_group=self.prefix_group,
                 sw_if_index=self.pg1.sw_if_index,
                 address_with_prefix=address1,
                 prefix_group=self.prefix_group,
-                is_add=0)
+                is_add=0,
+            )
 
     def test_T1_greater_than_T2(self):
 
     def test_T1_greater_than_T2(self):
-        """ T1 is greater than T2 """
+        """T1 is greater than T2"""
 
 
-        address1 = '::2:0:0:0:405/60'
+        address1 = "::2:0:0:0:405/60"
         try:
             self.vapi.ip6_add_del_address_using_prefix(
                 sw_if_index=self.pg1.sw_if_index,
                 address_with_prefix=address1,
         try:
             self.vapi.ip6_add_del_address_using_prefix(
                 sw_if_index=self.pg1.sw_if_index,
                 address_with_prefix=address1,
-                prefix_group=self.prefix_group)
+                prefix_group=self.prefix_group,
+            )
 
             self.wait_for_solicit()
             self.send_advertise()
             self.wait_for_request()
 
             self.wait_for_solicit()
             self.send_advertise()
             self.wait_for_request()
-            ia_pd_opts = DHCP6OptIAPrefix(prefix='7:8::', plen=56, preflft=4,
-                                          validlft=8)
+            ia_pd_opts = DHCP6OptIAPrefix(
+                prefix="7:8::", plen=56, preflft=4, validlft=8
+            )
             self.send_reply(t1=80, t2=40, iapdopt=ia_pd_opts)
 
             self.sleep(0.5)
             self.send_reply(t1=80, t2=40, iapdopt=ia_pd_opts)
 
             self.sleep(0.5)
@@ -802,4 +833,5 @@ class TestDHCPv6PDControlPlane(VppTestCase):
                 sw_if_index=self.pg1.sw_if_index,
                 prefix_group=self.prefix_group,
                 address_with_prefix=address1,
                 sw_if_index=self.pg1.sw_if_index,
                 prefix_group=self.prefix_group,
                 address_with_prefix=address1,
-                is_add=False)
+                is_add=False,
+            )
index fb8958c..acc9bfe 100644 (file)
@@ -15,7 +15,7 @@ from scapy.layers.dns import DNSRR, DNS, DNSQR
 
 
 class TestDns(VppTestCase):
 
 
 class TestDns(VppTestCase):
-    """ Dns Test Cases """
+    """Dns Test Cases"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -43,15 +43,19 @@ class TestDns(VppTestCase):
 
         :param VppInterface src_if: Interface to create packet stream for.
         """
 
         :param VppInterface src_if: Interface to create packet stream for.
         """
-        good_request = (Ether(dst=src_if.local_mac, src=src_if.remote_mac) /
-                        IP(src=src_if.remote_ip4) /
-                        UDP(sport=1234, dport=53) /
-                        DNS(rd=1, qd=DNSQR(qname="bozo.clown.org")))
-
-        bad_request = (Ether(dst=src_if.local_mac, src=src_if.remote_mac) /
-                       IP(src=src_if.remote_ip4) /
-                       UDP(sport=1234, dport=53) /
-                       DNS(rd=1, qd=DNSQR(qname="no.clown.org")))
+        good_request = (
+            Ether(dst=src_if.local_mac, src=src_if.remote_mac)
+            / IP(src=src_if.remote_ip4)
+            / UDP(sport=1234, dport=53)
+            / DNS(rd=1, qd=DNSQR(qname="bozo.clown.org"))
+        )
+
+        bad_request = (
+            Ether(dst=src_if.local_mac, src=src_if.remote_mac)
+            / IP(src=src_if.remote_ip4)
+            / UDP(sport=1234, dport=53)
+            / DNS(rd=1, qd=DNSQR(qname="no.clown.org"))
+        )
         pkts = [good_request, bad_request]
         return pkts
 
         pkts = [good_request, bad_request]
         return pkts
 
@@ -65,14 +69,15 @@ class TestDns(VppTestCase):
         self.logger.info("Verifying capture on interface %s" % dst_if.name)
         for packet in capture:
             dns = packet[DNS]
         self.logger.info("Verifying capture on interface %s" % dst_if.name)
         for packet in capture:
             dns = packet[DNS]
-            self.assertEqual(dns.an[0].rdata, '1.2.3.4')
+            self.assertEqual(dns.an[0].rdata, "1.2.3.4")
 
     def test_dns_unittest(self):
 
     def test_dns_unittest(self):
-        """ DNS Name Resolver Basic Functional Test """
+        """DNS Name Resolver Basic Functional Test"""
 
         # Set up an upstream name resolver. We won't actually go there
         self.vapi.dns_name_server_add_del(
 
         # Set up an upstream name resolver. We won't actually go there
         self.vapi.dns_name_server_add_del(
-            is_ip6=0, is_add=1, server_address=IPv4Address(u'8.8.8.8').packed)
+            is_ip6=0, is_add=1, server_address=IPv4Address("8.8.8.8").packed
+        )
 
         # Enable name resolution
         self.vapi.dns_enable_disable(enable=1)
 
         # Enable name resolution
         self.vapi.dns_enable_disable(enable=1)
@@ -81,13 +86,13 @@ class TestDns(VppTestCase):
         self.logger.info(self.vapi.cli("dns cache add bozo.clown.org 1.2.3.4"))
 
         # Test the binary API
         self.logger.info(self.vapi.cli("dns cache add bozo.clown.org 1.2.3.4"))
 
         # Test the binary API
-        rv = self.vapi.dns_resolve_name(name=b'bozo.clown.org')
-        self.assertEqual(rv.ip4_address, IPv4Address(u'1.2.3.4').packed)
+        rv = self.vapi.dns_resolve_name(name=b"bozo.clown.org")
+        self.assertEqual(rv.ip4_address, IPv4Address("1.2.3.4").packed)
 
         # Configure 127.0.0.1/8 on the pg interface
         self.vapi.sw_interface_add_del_address(
 
         # Configure 127.0.0.1/8 on the pg interface
         self.vapi.sw_interface_add_del_address(
-            sw_if_index=self.pg0.sw_if_index,
-            prefix="127.0.0.1/8")
+            sw_if_index=self.pg0.sw_if_index, prefix="127.0.0.1/8"
+        )
 
         # Send a couple of DNS request packets, one for bozo.clown.org
         # and one for no.clown.org which won't resolve
 
         # Send a couple of DNS request packets, one for bozo.clown.org
         # and one for no.clown.org which won't resolve
@@ -102,8 +107,9 @@ class TestDns(VppTestCase):
 
         # Make sure that the cache contents are correct
         str = self.vapi.cli("show dns cache verbose")
 
         # Make sure that the cache contents are correct
         str = self.vapi.cli("show dns cache verbose")
-        self.assertIn('1.2.3.4', str)
-        self.assertIn('[P] no.clown.org:', str)
+        self.assertIn("1.2.3.4", str)
+        self.assertIn("[P] no.clown.org:", str)
 
 
-if __name__ == '__main__':
+
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index 912ae17..cd3482b 100644 (file)
@@ -11,8 +11,15 @@ from framework import VppTestCase, VppTestRunner
 import scapy.compat
 from scapy.layers.inet import IP, TCP, UDP, ICMP
 from scapy.layers.inet import IPerror, TCPerror, UDPerror, ICMPerror
 import scapy.compat
 from scapy.layers.inet import IP, TCP, UDP, ICMP
 from scapy.layers.inet import IPerror, TCPerror, UDPerror, ICMPerror
-from scapy.layers.inet6 import IPv6, ICMPv6EchoRequest, ICMPv6EchoReply, \
-    ICMPv6ND_NS, ICMPv6ND_NA, ICMPv6NDOptDstLLAddr, fragment6
+from scapy.layers.inet6 import (
+    IPv6,
+    ICMPv6EchoRequest,
+    ICMPv6EchoReply,
+    ICMPv6ND_NS,
+    ICMPv6ND_NA,
+    ICMPv6NDOptDstLLAddr,
+    fragment6,
+)
 from scapy.layers.inet6 import ICMPv6DestUnreach, IPerror6, IPv6ExtHdrFragment
 from scapy.layers.l2 import Ether, ARP, GRE
 from scapy.data import IP_PROTOS
 from scapy.layers.inet6 import ICMPv6DestUnreach, IPerror6, IPv6ExtHdrFragment
 from scapy.layers.l2 import Ether, ARP, GRE
 from scapy.data import IP_PROTOS
@@ -28,22 +35,32 @@ from io import BytesIO
 from vpp_papi import VppEnum
 from vpp_ip_route import VppIpRoute, VppRoutePath, FibPathType
 from vpp_neighbor import VppNeighbor
 from vpp_papi import VppEnum
 from vpp_ip_route import VppIpRoute, VppRoutePath, FibPathType
 from vpp_neighbor import VppNeighbor
-from scapy.all import bind_layers, Packet, ByteEnumField, ShortField, \
-    IPField, IntField, LongField, XByteField, FlagsField, FieldLenField, \
-    PacketListField
+from scapy.all import (
+    bind_layers,
+    Packet,
+    ByteEnumField,
+    ShortField,
+    IPField,
+    IntField,
+    LongField,
+    XByteField,
+    FlagsField,
+    FieldLenField,
+    PacketListField,
+)
 from ipaddress import IPv6Network
 
 
 @tag_fixme_vpp_workers
 class TestDSlite(VppTestCase):
 from ipaddress import IPv6Network
 
 
 @tag_fixme_vpp_workers
 class TestDSlite(VppTestCase):
-    """ DS-Lite Test Cases """
+    """DS-Lite Test Cases"""
 
     @classmethod
     def setUpClass(cls):
         super(TestDSlite, cls).setUpClass()
 
         try:
 
     @classmethod
     def setUpClass(cls):
         super(TestDSlite, cls).setUpClass()
 
         try:
-            cls.nat_addr = '10.0.0.3'
+            cls.nat_addr = "10.0.0.3"
 
             cls.create_pg_interfaces(range(3))
             cls.pg0.admin_up()
 
             cls.create_pg_interfaces(range(3))
             cls.pg0.admin_up()
@@ -65,44 +82,45 @@ class TestDSlite(VppTestCase):
     def tearDownClass(cls):
         super(TestDSlite, cls).tearDownClass()
 
     def tearDownClass(cls):
         super(TestDSlite, cls).tearDownClass()
 
-    def verify_syslog_apmadd(self, data, isaddr, isport, xsaddr, xsport,
-                             sv6enc, proto):
-        message = data.decode('utf-8')
+    def verify_syslog_apmadd(self, data, isaddr, isport, xsaddr, xsport, sv6enc, proto):
+        message = data.decode("utf-8")
         try:
             message = SyslogMessage.parse(message)
         except ParseError as e:
             self.logger.error(e)
         else:
             self.assertEqual(message.severity, SyslogSeverity.info)
         try:
             message = SyslogMessage.parse(message)
         except ParseError as e:
             self.logger.error(e)
         else:
             self.assertEqual(message.severity, SyslogSeverity.info)
-            self.assertEqual(message.appname, 'NAT')
-            self.assertEqual(message.msgid, 'APMADD')
-            sd_params = message.sd.get('napmap')
+            self.assertEqual(message.appname, "NAT")
+            self.assertEqual(message.msgid, "APMADD")
+            sd_params = message.sd.get("napmap")
             self.assertTrue(sd_params is not None)
             self.assertTrue(sd_params is not None)
-            self.assertEqual(sd_params.get('IATYP'), 'IPv4')
-            self.assertEqual(sd_params.get('ISADDR'), isaddr)
-            self.assertEqual(sd_params.get('ISPORT'), "%d" % isport)
-            self.assertEqual(sd_params.get('XATYP'), 'IPv4')
-            self.assertEqual(sd_params.get('XSADDR'), xsaddr)
-            self.assertEqual(sd_params.get('XSPORT'), "%d" % xsport)
-            self.assertEqual(sd_params.get('PROTO'), "%d" % proto)
-            self.assertTrue(sd_params.get('SSUBIX') is not None)
-            self.assertEqual(sd_params.get('SV6ENC'), sv6enc)
+            self.assertEqual(sd_params.get("IATYP"), "IPv4")
+            self.assertEqual(sd_params.get("ISADDR"), isaddr)
+            self.assertEqual(sd_params.get("ISPORT"), "%d" % isport)
+            self.assertEqual(sd_params.get("XATYP"), "IPv4")
+            self.assertEqual(sd_params.get("XSADDR"), xsaddr)
+            self.assertEqual(sd_params.get("XSPORT"), "%d" % xsport)
+            self.assertEqual(sd_params.get("PROTO"), "%d" % proto)
+            self.assertTrue(sd_params.get("SSUBIX") is not None)
+            self.assertEqual(sd_params.get("SV6ENC"), sv6enc)
 
     def test_dslite(self):
 
     def test_dslite(self):
-        """ Test DS-Lite """
-        self.vapi.dslite_add_del_pool_addr_range(start_addr=self.nat_addr,
-                                                 end_addr=self.nat_addr,
-                                                 is_add=1)
-        aftr_ip4 = '192.0.0.1'
-        aftr_ip6 = '2001:db8:85a3::8a2e:370:1'
+        """Test DS-Lite"""
+        self.vapi.dslite_add_del_pool_addr_range(
+            start_addr=self.nat_addr, end_addr=self.nat_addr, is_add=1
+        )
+        aftr_ip4 = "192.0.0.1"
+        aftr_ip6 = "2001:db8:85a3::8a2e:370:1"
         self.vapi.dslite_set_aftr_addr(ip4_addr=aftr_ip4, ip6_addr=aftr_ip6)
         self.vapi.syslog_set_sender(self.pg2.local_ip4, self.pg2.remote_ip4)
 
         # UDP
         self.vapi.dslite_set_aftr_addr(ip4_addr=aftr_ip4, ip6_addr=aftr_ip6)
         self.vapi.syslog_set_sender(self.pg2.local_ip4, self.pg2.remote_ip4)
 
         # UDP
-        p = (Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac) /
-             IPv6(dst=aftr_ip6, src=self.pg1.remote_hosts[0].ip6) /
-             IP(dst=self.pg0.remote_ip4, src='192.168.1.1') /
-             UDP(sport=20000, dport=10000))
+        p = (
+            Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac)
+            / IPv6(dst=aftr_ip6, src=self.pg1.remote_hosts[0].ip6)
+            / IP(dst=self.pg0.remote_ip4, src="192.168.1.1")
+            / UDP(sport=20000, dport=10000)
+        )
         self.pg1.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg1.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -116,13 +134,21 @@ class TestDSlite(VppTestCase):
         self.assert_packet_checksums_valid(capture)
         out_port = capture[UDP].sport
         capture = self.pg2.get_capture(1)
         self.assert_packet_checksums_valid(capture)
         out_port = capture[UDP].sport
         capture = self.pg2.get_capture(1)
-        self.verify_syslog_apmadd(capture[0][Raw].load, '192.168.1.1',
-                                  20000, self.nat_addr, out_port,
-                                  self.pg1.remote_hosts[0].ip6, IP_PROTOS.udp)
-
-        p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-             IP(dst=self.nat_addr, src=self.pg0.remote_ip4) /
-             UDP(sport=10000, dport=out_port))
+        self.verify_syslog_apmadd(
+            capture[0][Raw].load,
+            "192.168.1.1",
+            20000,
+            self.nat_addr,
+            out_port,
+            self.pg1.remote_hosts[0].ip6,
+            IP_PROTOS.udp,
+        )
+
+        p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(dst=self.nat_addr, src=self.pg0.remote_ip4)
+            / UDP(sport=10000, dport=out_port)
+        )
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -131,16 +157,18 @@ class TestDSlite(VppTestCase):
         self.assertEqual(capture[IPv6].src, aftr_ip6)
         self.assertEqual(capture[IPv6].dst, self.pg1.remote_hosts[0].ip6)
         self.assertEqual(capture[IP].src, self.pg0.remote_ip4)
         self.assertEqual(capture[IPv6].src, aftr_ip6)
         self.assertEqual(capture[IPv6].dst, self.pg1.remote_hosts[0].ip6)
         self.assertEqual(capture[IP].src, self.pg0.remote_ip4)
-        self.assertEqual(capture[IP].dst, '192.168.1.1')
+        self.assertEqual(capture[IP].dst, "192.168.1.1")
         self.assertEqual(capture[UDP].sport, 10000)
         self.assertEqual(capture[UDP].dport, 20000)
         self.assert_packet_checksums_valid(capture)
 
         # TCP
         self.assertEqual(capture[UDP].sport, 10000)
         self.assertEqual(capture[UDP].dport, 20000)
         self.assert_packet_checksums_valid(capture)
 
         # TCP
-        p = (Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac) /
-             IPv6(dst=aftr_ip6, src=self.pg1.remote_hosts[1].ip6) /
-             IP(dst=self.pg0.remote_ip4, src='192.168.1.1') /
-             TCP(sport=20001, dport=10001))
+        p = (
+            Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac)
+            / IPv6(dst=aftr_ip6, src=self.pg1.remote_hosts[1].ip6)
+            / IP(dst=self.pg0.remote_ip4, src="192.168.1.1")
+            / TCP(sport=20001, dport=10001)
+        )
         self.pg1.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg1.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -154,9 +182,11 @@ class TestDSlite(VppTestCase):
         self.assert_packet_checksums_valid(capture)
         out_port = capture[TCP].sport
 
         self.assert_packet_checksums_valid(capture)
         out_port = capture[TCP].sport
 
-        p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-             IP(dst=self.nat_addr, src=self.pg0.remote_ip4) /
-             TCP(sport=10001, dport=out_port))
+        p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(dst=self.nat_addr, src=self.pg0.remote_ip4)
+            / TCP(sport=10001, dport=out_port)
+        )
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -165,16 +195,18 @@ class TestDSlite(VppTestCase):
         self.assertEqual(capture[IPv6].src, aftr_ip6)
         self.assertEqual(capture[IPv6].dst, self.pg1.remote_hosts[1].ip6)
         self.assertEqual(capture[IP].src, self.pg0.remote_ip4)
         self.assertEqual(capture[IPv6].src, aftr_ip6)
         self.assertEqual(capture[IPv6].dst, self.pg1.remote_hosts[1].ip6)
         self.assertEqual(capture[IP].src, self.pg0.remote_ip4)
-        self.assertEqual(capture[IP].dst, '192.168.1.1')
+        self.assertEqual(capture[IP].dst, "192.168.1.1")
         self.assertEqual(capture[TCP].sport, 10001)
         self.assertEqual(capture[TCP].dport, 20001)
         self.assert_packet_checksums_valid(capture)
 
         # ICMP
         self.assertEqual(capture[TCP].sport, 10001)
         self.assertEqual(capture[TCP].dport, 20001)
         self.assert_packet_checksums_valid(capture)
 
         # ICMP
-        p = (Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac) /
-             IPv6(dst=aftr_ip6, src=self.pg1.remote_hosts[1].ip6) /
-             IP(dst=self.pg0.remote_ip4, src='192.168.1.1') /
-             ICMP(id=4000, type='echo-request'))
+        p = (
+            Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac)
+            / IPv6(dst=aftr_ip6, src=self.pg1.remote_hosts[1].ip6)
+            / IP(dst=self.pg0.remote_ip4, src="192.168.1.1")
+            / ICMP(id=4000, type="echo-request")
+        )
         self.pg1.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg1.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -187,9 +219,11 @@ class TestDSlite(VppTestCase):
         self.assert_packet_checksums_valid(capture)
         out_id = capture[ICMP].id
 
         self.assert_packet_checksums_valid(capture)
         out_id = capture[ICMP].id
 
-        p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-             IP(dst=self.nat_addr, src=self.pg0.remote_ip4) /
-             ICMP(id=out_id, type='echo-reply'))
+        p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(dst=self.nat_addr, src=self.pg0.remote_ip4)
+            / ICMP(id=out_id, type="echo-reply")
+        )
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -198,14 +232,16 @@ class TestDSlite(VppTestCase):
         self.assertEqual(capture[IPv6].src, aftr_ip6)
         self.assertEqual(capture[IPv6].dst, self.pg1.remote_hosts[1].ip6)
         self.assertEqual(capture[IP].src, self.pg0.remote_ip4)
         self.assertEqual(capture[IPv6].src, aftr_ip6)
         self.assertEqual(capture[IPv6].dst, self.pg1.remote_hosts[1].ip6)
         self.assertEqual(capture[IP].src, self.pg0.remote_ip4)
-        self.assertEqual(capture[IP].dst, '192.168.1.1')
+        self.assertEqual(capture[IP].dst, "192.168.1.1")
         self.assertEqual(capture[ICMP].id, 4000)
         self.assert_packet_checksums_valid(capture)
 
         # ping DS-Lite AFTR tunnel endpoint address
         self.assertEqual(capture[ICMP].id, 4000)
         self.assert_packet_checksums_valid(capture)
 
         # ping DS-Lite AFTR tunnel endpoint address
-        p = (Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac) /
-             IPv6(src=self.pg1.remote_hosts[1].ip6, dst=aftr_ip6) /
-             ICMPv6EchoRequest())
+        p = (
+            Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac)
+            / IPv6(src=self.pg1.remote_hosts[1].ip6, dst=aftr_ip6)
+            / ICMPv6EchoRequest()
+        )
         self.pg1.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg1.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -215,9 +251,9 @@ class TestDSlite(VppTestCase):
         self.assertEqual(capture[IPv6].dst, self.pg1.remote_hosts[1].ip6)
         self.assertTrue(capture.haslayer(ICMPv6EchoReply))
 
         self.assertEqual(capture[IPv6].dst, self.pg1.remote_hosts[1].ip6)
         self.assertTrue(capture.haslayer(ICMPv6EchoReply))
 
-        b4s = self.statistics.get_counter('/dslite/total-b4s')
+        b4s = self.statistics.get_counter("/dslite/total-b4s")
         self.assertEqual(b4s[0][0], 2)
         self.assertEqual(b4s[0][0], 2)
-        sessions = self.statistics.get_counter('/dslite/total-sessions')
+        sessions = self.statistics.get_counter("/dslite/total-sessions")
         self.assertEqual(sessions[0][0], 3)
 
     def tearDown(self):
         self.assertEqual(sessions[0][0], 3)
 
     def tearDown(self):
@@ -225,13 +261,12 @@ class TestDSlite(VppTestCase):
 
     def show_commands_at_teardown(self):
         self.logger.info(self.vapi.cli("show dslite pool"))
 
     def show_commands_at_teardown(self):
         self.logger.info(self.vapi.cli("show dslite pool"))
-        self.logger.info(
-            self.vapi.cli("show dslite aftr-tunnel-endpoint-address"))
+        self.logger.info(self.vapi.cli("show dslite aftr-tunnel-endpoint-address"))
         self.logger.info(self.vapi.cli("show dslite sessions"))
 
 
 class TestDSliteCE(VppTestCase):
         self.logger.info(self.vapi.cli("show dslite sessions"))
 
 
 class TestDSliteCE(VppTestCase):
-    """ DS-Lite CE Test Cases """
+    """DS-Lite CE Test Cases"""
 
     @classmethod
     def setUpConstants(cls):
 
     @classmethod
     def setUpConstants(cls):
@@ -261,25 +296,30 @@ class TestDSliteCE(VppTestCase):
         super(TestDSliteCE, cls).tearDownClass()
 
     def test_dslite_ce(self):
         super(TestDSliteCE, cls).tearDownClass()
 
     def test_dslite_ce(self):
-        """ Test DS-Lite CE """
-        b4_ip4 = '192.0.0.2'
-        b4_ip6 = '2001:db8:62aa::375e:f4c1:1'
+        """Test DS-Lite CE"""
+        b4_ip4 = "192.0.0.2"
+        b4_ip6 = "2001:db8:62aa::375e:f4c1:1"
         self.vapi.dslite_set_b4_addr(ip4_addr=b4_ip4, ip6_addr=b4_ip6)
 
         self.vapi.dslite_set_b4_addr(ip4_addr=b4_ip4, ip6_addr=b4_ip6)
 
-        aftr_ip4 = '192.0.0.1'
-        aftr_ip6 = '2001:db8:85a3::8a2e:370:1'
+        aftr_ip4 = "192.0.0.1"
+        aftr_ip6 = "2001:db8:85a3::8a2e:370:1"
         aftr_ip6_n = socket.inet_pton(socket.AF_INET6, aftr_ip6)
         self.vapi.dslite_set_aftr_addr(ip4_addr=aftr_ip4, ip6_addr=aftr_ip6)
 
         aftr_ip6_n = socket.inet_pton(socket.AF_INET6, aftr_ip6)
         self.vapi.dslite_set_aftr_addr(ip4_addr=aftr_ip4, ip6_addr=aftr_ip6)
 
-        r1 = VppIpRoute(self, aftr_ip6, 128,
-                        [VppRoutePath(self.pg1.remote_ip6,
-                                      self.pg1.sw_if_index)])
+        r1 = VppIpRoute(
+            self,
+            aftr_ip6,
+            128,
+            [VppRoutePath(self.pg1.remote_ip6, self.pg1.sw_if_index)],
+        )
         r1.add_vpp_config()
 
         # UDP encapsulation
         r1.add_vpp_config()
 
         # UDP encapsulation
-        p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-             IP(dst=self.pg1.remote_ip4, src=self.pg0.remote_ip4) /
-             UDP(sport=10000, dport=20000))
+        p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(dst=self.pg1.remote_ip4, src=self.pg0.remote_ip4)
+            / UDP(sport=10000, dport=20000)
+        )
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -294,10 +334,12 @@ class TestDSliteCE(VppTestCase):
         self.assert_packet_checksums_valid(capture)
 
         # UDP decapsulation
         self.assert_packet_checksums_valid(capture)
 
         # UDP decapsulation
-        p = (Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac) /
-             IPv6(dst=b4_ip6, src=aftr_ip6) /
-             IP(dst=self.pg0.remote_ip4, src=self.pg1.remote_ip4) /
-             UDP(sport=20000, dport=10000))
+        p = (
+            Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac)
+            / IPv6(dst=b4_ip6, src=aftr_ip6)
+            / IP(dst=self.pg0.remote_ip4, src=self.pg1.remote_ip4)
+            / UDP(sport=20000, dport=10000)
+        )
         self.pg1.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg1.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -311,9 +353,11 @@ class TestDSliteCE(VppTestCase):
         self.assert_packet_checksums_valid(capture)
 
         # ping DS-Lite B4 tunnel endpoint address
         self.assert_packet_checksums_valid(capture)
 
         # ping DS-Lite B4 tunnel endpoint address
-        p = (Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac) /
-             IPv6(src=self.pg1.remote_hosts[0].ip6, dst=b4_ip6) /
-             ICMPv6EchoRequest())
+        p = (
+            Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac)
+            / IPv6(src=self.pg1.remote_hosts[0].ip6, dst=b4_ip6)
+            / ICMPv6EchoRequest()
+        )
         self.pg1.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg1.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -327,7 +371,5 @@ class TestDSliteCE(VppTestCase):
         super(TestDSliteCE, self).tearDown()
 
     def show_commands_at_teardown(self):
         super(TestDSliteCE, self).tearDown()
 
     def show_commands_at_teardown(self):
-        self.logger.info(
-            self.vapi.cli("show dslite aftr-tunnel-endpoint-address"))
-        self.logger.info(
-            self.vapi.cli("show dslite b4-tunnel-endpoint-address"))
+        self.logger.info(self.vapi.cli("show dslite aftr-tunnel-endpoint-address"))
+        self.logger.info(self.vapi.cli("show dslite b4-tunnel-endpoint-address"))
index c0424a3..cd2e09a 100644 (file)
@@ -17,7 +17,7 @@ NUM_PKTS = 67
 
 
 class TestDVR(VppTestCase):
 
 
 class TestDVR(VppTestCase):
-    """ Distributed Virtual Router """
+    """Distributed Virtual Router"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -62,7 +62,7 @@ class TestDVR(VppTestCase):
             self.assertFalse(p.haslayer(Dot1Q))
 
     def test_dvr(self):
             self.assertFalse(p.haslayer(Dot1Q))
 
     def test_dvr(self):
-        """ Distributed Virtual Router """
+        """Distributed Virtual Router"""
 
         #
         # A packet destined to an IP address that is L2 bridged via
 
         #
         # A packet destined to an IP address that is L2 bridged via
@@ -72,18 +72,18 @@ class TestDVR(VppTestCase):
         ip_tag_bridged = "10.10.10.11"
         any_src_addr = "1.1.1.1"
 
         ip_tag_bridged = "10.10.10.11"
         any_src_addr = "1.1.1.1"
 
-        pkt_no_tag = (Ether(src=self.pg0.remote_mac,
-                            dst=self.loop0.local_mac) /
-                      IP(src=any_src_addr,
-                         dst=ip_non_tag_bridged) /
-                      UDP(sport=1234, dport=1234) /
-                      Raw(b'\xa5' * 100))
-        pkt_tag = (Ether(src=self.pg0.remote_mac,
-                         dst=self.loop0.local_mac) /
-                   IP(src=any_src_addr,
-                      dst=ip_tag_bridged) /
-                   UDP(sport=1234, dport=1234) /
-                   Raw(b'\xa5' * 100))
+        pkt_no_tag = (
+            Ether(src=self.pg0.remote_mac, dst=self.loop0.local_mac)
+            / IP(src=any_src_addr, dst=ip_non_tag_bridged)
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
+        pkt_tag = (
+            Ether(src=self.pg0.remote_mac, dst=self.loop0.local_mac)
+            / IP(src=any_src_addr, dst=ip_tag_bridged)
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
 
         #
         # Two sub-interfaces so we can test VLAN tag push/pop
 
         #
         # Two sub-interfaces so we can test VLAN tag push/pop
@@ -97,32 +97,45 @@ class TestDVR(VppTestCase):
         # Put all the interfaces into a new bridge domain
         #
         self.vapi.sw_interface_set_l2_bridge(
         # Put all the interfaces into a new bridge domain
         #
         self.vapi.sw_interface_set_l2_bridge(
-            rx_sw_if_index=self.pg0.sw_if_index, bd_id=1)
+            rx_sw_if_index=self.pg0.sw_if_index, bd_id=1
+        )
         self.vapi.sw_interface_set_l2_bridge(
         self.vapi.sw_interface_set_l2_bridge(
-            rx_sw_if_index=self.pg1.sw_if_index, bd_id=1)
+            rx_sw_if_index=self.pg1.sw_if_index, bd_id=1
+        )
         self.vapi.sw_interface_set_l2_bridge(
         self.vapi.sw_interface_set_l2_bridge(
-            rx_sw_if_index=sub_if_on_pg2.sw_if_index, bd_id=1)
+            rx_sw_if_index=sub_if_on_pg2.sw_if_index, bd_id=1
+        )
         self.vapi.sw_interface_set_l2_bridge(
         self.vapi.sw_interface_set_l2_bridge(
-            rx_sw_if_index=sub_if_on_pg3.sw_if_index, bd_id=1)
+            rx_sw_if_index=sub_if_on_pg3.sw_if_index, bd_id=1
+        )
         self.vapi.sw_interface_set_l2_bridge(
         self.vapi.sw_interface_set_l2_bridge(
-            rx_sw_if_index=self.loop0.sw_if_index, bd_id=1,
-            port_type=L2_PORT_TYPE.BVI)
+            rx_sw_if_index=self.loop0.sw_if_index, bd_id=1, port_type=L2_PORT_TYPE.BVI
+        )
 
         self.vapi.l2_interface_vlan_tag_rewrite(
 
         self.vapi.l2_interface_vlan_tag_rewrite(
-            sw_if_index=sub_if_on_pg2.sw_if_index, vtr_op=L2_VTR_OP.L2_POP_1,
-            push_dot1q=92)
+            sw_if_index=sub_if_on_pg2.sw_if_index,
+            vtr_op=L2_VTR_OP.L2_POP_1,
+            push_dot1q=92,
+        )
         self.vapi.l2_interface_vlan_tag_rewrite(
         self.vapi.l2_interface_vlan_tag_rewrite(
-            sw_if_index=sub_if_on_pg3.sw_if_index, vtr_op=L2_VTR_OP.L2_POP_1,
-            push_dot1q=93)
+            sw_if_index=sub_if_on_pg3.sw_if_index,
+            vtr_op=L2_VTR_OP.L2_POP_1,
+            push_dot1q=93,
+        )
 
         #
         # Add routes to bridge the traffic via a tagged an nontagged interface
         #
         route_no_tag = VppIpRoute(
 
         #
         # Add routes to bridge the traffic via a tagged an nontagged interface
         #
         route_no_tag = VppIpRoute(
-            self, ip_non_tag_bridged, 32,
-            [VppRoutePath("0.0.0.0",
-                          self.pg1.sw_if_index,
-                          type=FibPathType.FIB_PATH_TYPE_DVR)])
+            self,
+            ip_non_tag_bridged,
+            32,
+            [
+                VppRoutePath(
+                    "0.0.0.0", self.pg1.sw_if_index, type=FibPathType.FIB_PATH_TYPE_DVR
+                )
+            ],
+        )
         route_no_tag.add_vpp_config()
 
         #
         route_no_tag.add_vpp_config()
 
         #
@@ -137,10 +150,17 @@ class TestDVR(VppTestCase):
         # Add routes to bridge the traffic via a tagged interface
         #
         route_with_tag = VppIpRoute(
         # Add routes to bridge the traffic via a tagged interface
         #
         route_with_tag = VppIpRoute(
-            self, ip_tag_bridged, 32,
-            [VppRoutePath("0.0.0.0",
-                          sub_if_on_pg3.sw_if_index,
-                          type=FibPathType.FIB_PATH_TYPE_DVR)])
+            self,
+            ip_tag_bridged,
+            32,
+            [
+                VppRoutePath(
+                    "0.0.0.0",
+                    sub_if_on_pg3.sw_if_index,
+                    type=FibPathType.FIB_PATH_TYPE_DVR,
+                )
+            ],
+        )
         route_with_tag.add_vpp_config()
 
         #
         route_with_tag.add_vpp_config()
 
         #
@@ -154,58 +174,58 @@ class TestDVR(VppTestCase):
         #
         # Tag to tag
         #
         #
         # Tag to tag
         #
-        pkt_tag_to_tag = (Ether(src=self.pg2.remote_mac,
-                                dst=self.loop0.local_mac) /
-                          Dot1Q(vlan=92) /
-                          IP(src=any_src_addr,
-                             dst=ip_tag_bridged) /
-                          UDP(sport=1234, dport=1234) /
-                          Raw(b'\xa5' * 100))
-
-        rx = self.send_and_expect(self.pg2,
-                                  pkt_tag_to_tag * NUM_PKTS,
-                                  self.pg3)
+        pkt_tag_to_tag = (
+            Ether(src=self.pg2.remote_mac, dst=self.loop0.local_mac)
+            / Dot1Q(vlan=92)
+            / IP(src=any_src_addr, dst=ip_tag_bridged)
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
+
+        rx = self.send_and_expect(self.pg2, pkt_tag_to_tag * NUM_PKTS, self.pg3)
         self.assert_same_mac_addr(pkt_tag_to_tag, rx)
         self.assert_has_vlan_tag(93, rx)
 
         #
         # Tag to non-Tag
         #
         self.assert_same_mac_addr(pkt_tag_to_tag, rx)
         self.assert_has_vlan_tag(93, rx)
 
         #
         # Tag to non-Tag
         #
-        pkt_tag_to_non_tag = (Ether(src=self.pg2.remote_mac,
-                                    dst=self.loop0.local_mac) /
-                              Dot1Q(vlan=92) /
-                              IP(src=any_src_addr,
-                                 dst=ip_non_tag_bridged) /
-                              UDP(sport=1234, dport=1234) /
-                              Raw(b'\xa5' * 100))
-
-        rx = self.send_and_expect(self.pg2,
-                                  pkt_tag_to_non_tag * NUM_PKTS,
-                                  self.pg1)
+        pkt_tag_to_non_tag = (
+            Ether(src=self.pg2.remote_mac, dst=self.loop0.local_mac)
+            / Dot1Q(vlan=92)
+            / IP(src=any_src_addr, dst=ip_non_tag_bridged)
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
+
+        rx = self.send_and_expect(self.pg2, pkt_tag_to_non_tag * NUM_PKTS, self.pg1)
         self.assert_same_mac_addr(pkt_tag_to_tag, rx)
         self.assert_has_no_tag(rx)
 
         #
         # Add an output L3 ACL that will block the traffic
         #
         self.assert_same_mac_addr(pkt_tag_to_tag, rx)
         self.assert_has_no_tag(rx)
 
         #
         # Add an output L3 ACL that will block the traffic
         #
-        rule_1 = AclRule(is_permit=0, proto=17, ports=1234,
-                         src_prefix=IPv4Network((any_src_addr, 32)),
-                         dst_prefix=IPv4Network((ip_non_tag_bridged, 32)))
+        rule_1 = AclRule(
+            is_permit=0,
+            proto=17,
+            ports=1234,
+            src_prefix=IPv4Network((any_src_addr, 32)),
+            dst_prefix=IPv4Network((ip_non_tag_bridged, 32)),
+        )
         acl = VppAcl(self, rules=[rule_1])
         acl.add_vpp_config()
 
         #
         # Apply the ACL on the output interface
         #
         acl = VppAcl(self, rules=[rule_1])
         acl.add_vpp_config()
 
         #
         # Apply the ACL on the output interface
         #
-        acl_if1 = VppAclInterface(self, sw_if_index=self.pg1.sw_if_index,
-                                  n_input=0, acls=[acl])
+        acl_if1 = VppAclInterface(
+            self, sw_if_index=self.pg1.sw_if_index, n_input=0, acls=[acl]
+        )
         acl_if1.add_vpp_config()
 
         #
         # Send packet's that should match the ACL and be dropped
         #
         acl_if1.add_vpp_config()
 
         #
         # Send packet's that should match the ACL and be dropped
         #
-        rx = self.send_and_assert_no_replies(self.pg2,
-                                             pkt_tag_to_non_tag * NUM_PKTS)
+        rx = self.send_and_assert_no_replies(self.pg2, pkt_tag_to_non_tag * NUM_PKTS)
 
         #
         # cleanup
 
         #
         # cleanup
@@ -214,16 +234,23 @@ class TestDVR(VppTestCase):
         acl.remove_vpp_config()
 
         self.vapi.sw_interface_set_l2_bridge(
         acl.remove_vpp_config()
 
         self.vapi.sw_interface_set_l2_bridge(
-            rx_sw_if_index=self.pg0.sw_if_index, bd_id=1, enable=0)
+            rx_sw_if_index=self.pg0.sw_if_index, bd_id=1, enable=0
+        )
         self.vapi.sw_interface_set_l2_bridge(
         self.vapi.sw_interface_set_l2_bridge(
-            rx_sw_if_index=self.pg1.sw_if_index, bd_id=1, enable=0)
+            rx_sw_if_index=self.pg1.sw_if_index, bd_id=1, enable=0
+        )
         self.vapi.sw_interface_set_l2_bridge(
         self.vapi.sw_interface_set_l2_bridge(
-            rx_sw_if_index=sub_if_on_pg2.sw_if_index, bd_id=1, enable=0)
+            rx_sw_if_index=sub_if_on_pg2.sw_if_index, bd_id=1, enable=0
+        )
         self.vapi.sw_interface_set_l2_bridge(
         self.vapi.sw_interface_set_l2_bridge(
-            rx_sw_if_index=sub_if_on_pg3.sw_if_index, bd_id=1, enable=0)
+            rx_sw_if_index=sub_if_on_pg3.sw_if_index, bd_id=1, enable=0
+        )
         self.vapi.sw_interface_set_l2_bridge(
         self.vapi.sw_interface_set_l2_bridge(
-            rx_sw_if_index=self.loop0.sw_if_index, bd_id=1,
-            port_type=L2_PORT_TYPE.BVI, enable=0)
+            rx_sw_if_index=self.loop0.sw_if_index,
+            bd_id=1,
+            port_type=L2_PORT_TYPE.BVI,
+            enable=0,
+        )
 
         #
         # Do a FIB dump to make sure the paths are correctly reported as DVR
 
         #
         # Do a FIB dump to make sure the paths are correctly reported as DVR
@@ -231,16 +258,14 @@ class TestDVR(VppTestCase):
         routes = self.vapi.ip_route_dump(0)
 
         for r in routes:
         routes = self.vapi.ip_route_dump(0)
 
         for r in routes:
-            if (ip_tag_bridged == str(r.route.prefix.network_address)):
-                self.assertEqual(r.route.paths[0].sw_if_index,
-                                 sub_if_on_pg3.sw_if_index)
-                self.assertEqual(r.route.paths[0].type,
-                                 FibPathType.FIB_PATH_TYPE_DVR)
-            if (ip_non_tag_bridged == str(r.route.prefix.network_address)):
-                self.assertEqual(r.route.paths[0].sw_if_index,
-                                 self.pg1.sw_if_index)
-                self.assertEqual(r.route.paths[0].type,
-                                 FibPathType.FIB_PATH_TYPE_DVR)
+            if ip_tag_bridged == str(r.route.prefix.network_address):
+                self.assertEqual(
+                    r.route.paths[0].sw_if_index, sub_if_on_pg3.sw_if_index
+                )
+                self.assertEqual(r.route.paths[0].type, FibPathType.FIB_PATH_TYPE_DVR)
+            if ip_non_tag_bridged == str(r.route.prefix.network_address):
+                self.assertEqual(r.route.paths[0].sw_if_index, self.pg1.sw_if_index)
+                self.assertEqual(r.route.paths[0].type, FibPathType.FIB_PATH_TYPE_DVR)
 
         #
         # the explicit route delete is require so it happens before
 
         #
         # the explicit route delete is require so it happens before
@@ -253,5 +278,5 @@ class TestDVR(VppTestCase):
         sub_if_on_pg2.remove_vpp_config()
 
 
         sub_if_on_pg2.remove_vpp_config()
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index 462ee2b..bb54a03 100644 (file)
@@ -24,15 +24,20 @@ class TestEndian(framework.VppTestCase):
     def test_f64_endian_value(self):
         try:
             rv = self.vapi.get_f64_endian_value(f64_one=F64_ONE)
     def test_f64_endian_value(self):
         try:
             rv = self.vapi.get_f64_endian_value(f64_one=F64_ONE)
-            self.assertEqual(rv.f64_one_result, F64_ONE,
-                             "client incorrectly deserializes f64 values.  "
-                             "Expected: %r. Received: %r." % (
-                                 F64_ONE, rv.f64_one_result))
+            self.assertEqual(
+                rv.f64_one_result,
+                F64_ONE,
+                "client incorrectly deserializes f64 values.  "
+                "Expected: %r. Received: %r." % (F64_ONE, rv.f64_one_result),
+            )
         except vpp_papi_provider.UnexpectedApiReturnValueError:
         except vpp_papi_provider.UnexpectedApiReturnValueError:
-            self.fail('client incorrectly serializes f64 values.')
+            self.fail("client incorrectly serializes f64 values.")
 
     def test_get_f64_increment_by_one(self):
         expected = 43.0
         rv = self.vapi.get_f64_increment_by_one(f64_value=42.0)
 
     def test_get_f64_increment_by_one(self):
         expected = 43.0
         rv = self.vapi.get_f64_increment_by_one(f64_value=42.0)
-        self.assertEqual(rv.f64_value, expected, 'Expected %r, received:%r.'
-                         % (expected, rv.f64_value))
+        self.assertEqual(
+            rv.f64_value,
+            expected,
+            "Expected %r, received:%r." % (expected, rv.f64_value),
+        )
index 7c08722..136918e 100644 (file)
@@ -8,7 +8,7 @@ from framework import VppTestCase, VppTestRunner
 
 @tag_fixme_vpp_workers
 class TestFIB(VppTestCase):
 
 @tag_fixme_vpp_workers
 class TestFIB(VppTestCase):
-    """ FIB Test Case """
+    """FIB Test Case"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -19,7 +19,7 @@ class TestFIB(VppTestCase):
         super(TestFIB, cls).tearDownClass()
 
     def test_fib(self):
         super(TestFIB, cls).tearDownClass()
 
     def test_fib(self):
-        """ FIB Unit Tests """
+        """FIB Unit Tests"""
         error = self.vapi.cli("test fib")
 
         # shameless test of CLIs to bump lcov results...
         error = self.vapi.cli("test fib")
 
         # shameless test of CLIs to bump lcov results...
@@ -44,5 +44,6 @@ class TestFIB(VppTestCase):
             self.logger.critical(error)
         self.assertNotIn("Failed", error)
 
             self.logger.critical(error)
         self.assertNotIn("Failed", error)
 
-if __name__ == '__main__':
+
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index 5bafd39..6b27179 100644 (file)
@@ -29,17 +29,26 @@ from vpp_papi import VppEnum
 class VppCFLOW(VppObject):
     """CFLOW object for IPFIX exporter and Flowprobe feature"""
 
 class VppCFLOW(VppObject):
     """CFLOW object for IPFIX exporter and Flowprobe feature"""
 
-    def __init__(self, test, intf='pg2', active=0, passive=0, timeout=100,
-                 mtu=1024, datapath='l2', layer='l2 l3 l4'):
+    def __init__(
+        self,
+        test,
+        intf="pg2",
+        active=0,
+        passive=0,
+        timeout=100,
+        mtu=1024,
+        datapath="l2",
+        layer="l2 l3 l4",
+    ):
         self._test = test
         self._intf = intf
         self._active = active
         if passive == 0 or passive < active:
         self._test = test
         self._intf = intf
         self._active = active
         if passive == 0 or passive < active:
-            self._passive = active+1
+            self._passive = active + 1
         else:
             self._passive = passive
         else:
             self._passive = passive
-        self._datapath = datapath           # l2 ip4 ip6
-        self._collect = layer               # l2 l3 l4
+        self._datapath = datapath  # l2 ip4 ip6
+        self._collect = layer  # l2 l3 l4
         self._timeout = timeout
         self._mtu = mtu
         self._configured = False
         self._timeout = timeout
         self._mtu = mtu
         self._configured = False
@@ -49,18 +58,17 @@ class VppCFLOW(VppObject):
         l2_flag = 0
         l3_flag = 0
         l4_flag = 0
         l2_flag = 0
         l3_flag = 0
         l4_flag = 0
-        if 'l2' in self._collect.lower():
-            l2_flag = (VppEnum.vl_api_flowprobe_record_flags_t.
-                       FLOWPROBE_RECORD_FLAG_L2)
-        if 'l3' in self._collect.lower():
-            l3_flag = (VppEnum.vl_api_flowprobe_record_flags_t.
-                       FLOWPROBE_RECORD_FLAG_L3)
-        if 'l4' in self._collect.lower():
-            l4_flag = (VppEnum.vl_api_flowprobe_record_flags_t.
-                       FLOWPROBE_RECORD_FLAG_L4)
+        if "l2" in self._collect.lower():
+            l2_flag = VppEnum.vl_api_flowprobe_record_flags_t.FLOWPROBE_RECORD_FLAG_L2
+        if "l3" in self._collect.lower():
+            l3_flag = VppEnum.vl_api_flowprobe_record_flags_t.FLOWPROBE_RECORD_FLAG_L3
+        if "l4" in self._collect.lower():
+            l4_flag = VppEnum.vl_api_flowprobe_record_flags_t.FLOWPROBE_RECORD_FLAG_L4
         self._test.vapi.flowprobe_params(
             record_flags=(l2_flag | l3_flag | l4_flag),
         self._test.vapi.flowprobe_params(
             record_flags=(l2_flag | l3_flag | l4_flag),
-            active_timer=self._active, passive_timer=self._passive)
+            active_timer=self._active,
+            passive_timer=self._passive,
+        )
         self.enable_flowprobe_feature()
         self._test.vapi.cli("ipfix flush")
         self._configured = True
         self.enable_flowprobe_feature()
         self._test.vapi.cli("ipfix flush")
         self._configured = True
@@ -76,18 +84,21 @@ class VppCFLOW(VppObject):
             collector_address=self._test.pg0.remote_ip4,
             src_address=self._test.pg0.local_ip4,
             path_mtu=self._mtu,
             collector_address=self._test.pg0.remote_ip4,
             src_address=self._test.pg0.local_ip4,
             path_mtu=self._mtu,
-            template_interval=self._timeout)
+            template_interval=self._timeout,
+        )
 
     def enable_flowprobe_feature(self):
 
     def enable_flowprobe_feature(self):
-        self._test.vapi.ppcli("flowprobe feature add-del %s %s" %
-                              (self._intf, self._datapath))
+        self._test.vapi.ppcli(
+            "flowprobe feature add-del %s %s" % (self._intf, self._datapath)
+        )
 
     def disable_exporter(self):
         self._test.vapi.cli("set ipfix exporter collector 0.0.0.0")
 
     def disable_flowprobe_feature(self):
 
     def disable_exporter(self):
         self._test.vapi.cli("set ipfix exporter collector 0.0.0.0")
 
     def disable_flowprobe_feature(self):
-        self._test.vapi.cli("flowprobe feature add-del %s %s disable" %
-                            (self._intf, self._datapath))
+        self._test.vapi.cli(
+            "flowprobe feature add-del %s %s disable" % (self._intf, self._datapath)
+        )
 
     def object_id(self):
         return "ipfix-collector-%s-%s" % (self._src, self.dst)
 
     def object_id(self):
         return "ipfix-collector-%s-%s" % (self._src, self.dst)
@@ -99,8 +110,7 @@ class VppCFLOW(VppObject):
         templates = []
         self._test.assertIn(count, (1, 2, 3))
         for _ in range(count):
         templates = []
         self._test.assertIn(count, (1, 2, 3))
         for _ in range(count):
-            p = self._test.wait_for_cflow_packet(self._test.collector, 2,
-                                                 timeout)
+            p = self._test.wait_for_cflow_packet(self._test.collector, 2, timeout)
             self._test.assertTrue(p.haslayer(IPFIX))
             if decoder is not None and p.haslayer(Template):
                 templates.append(p[Template].templateID)
             self._test.assertTrue(p.haslayer(IPFIX))
             if decoder is not None and p.haslayer(Template):
                 templates.append(p[Template].templateID)
@@ -109,7 +119,7 @@ class VppCFLOW(VppObject):
 
 
 class MethodHolder(VppTestCase):
 
 
 class MethodHolder(VppTestCase):
-    """ Flow-per-packet plugin: test L2, IP4, IP6 reporting """
+    """Flow-per-packet plugin: test L2, IP4, IP6 reporting"""
 
     # Test variables
     debug_print = False
 
     # Test variables
     debug_print = False
@@ -135,9 +145,11 @@ class MethodHolder(VppTestCase):
             # and put interfaces to this BD
             cls.vapi.bridge_domain_add_del(bd_id=1, uu_flood=1, learn=1)
             cls.vapi.sw_interface_set_l2_bridge(
             # and put interfaces to this BD
             cls.vapi.bridge_domain_add_del(bd_id=1, uu_flood=1, learn=1)
             cls.vapi.sw_interface_set_l2_bridge(
-                rx_sw_if_index=cls.pg1._sw_if_index, bd_id=1)
+                rx_sw_if_index=cls.pg1._sw_if_index, bd_id=1
+            )
             cls.vapi.sw_interface_set_l2_bridge(
             cls.vapi.sw_interface_set_l2_bridge(
-                rx_sw_if_index=cls.pg2._sw_if_index, bd_id=1)
+                rx_sw_if_index=cls.pg2._sw_if_index, bd_id=1
+            )
 
             # Set up all interfaces
             for i in cls.pg_interfaces:
 
             # Set up all interfaces
             for i in cls.pg_interfaces:
@@ -173,8 +185,9 @@ class MethodHolder(VppTestCase):
     def tearDownClass(cls):
         super(MethodHolder, cls).tearDownClass()
 
     def tearDownClass(cls):
         super(MethodHolder, cls).tearDownClass()
 
-    def create_stream(self, src_if=None, dst_if=None, packets=None,
-                      size=None, ip_ver='v4'):
+    def create_stream(
+        self, src_if=None, dst_if=None, packets=None, size=None, ip_ver="v4"
+    ):
         """Create a packet stream to tickle the plugin
 
         :param VppInterface src_if: Source interface for packet stream
         """Create a packet stream to tickle the plugin
 
         :param VppInterface src_if: Source interface for packet stream
@@ -194,7 +207,7 @@ class MethodHolder(VppTestCase):
             info = self.create_packet_info(src_if, dst_if)
             payload = self.info_to_payload(info)
             p = Ether(src=src_if.remote_mac, dst=src_if.local_mac)
             info = self.create_packet_info(src_if, dst_if)
             payload = self.info_to_payload(info)
             p = Ether(src=src_if.remote_mac, dst=src_if.local_mac)
-            if ip_ver == 'v4':
+            if ip_ver == "v4":
                 p /= IP(src=src_if.remote_ip4, dst=dst_if.remote_ip4)
             else:
                 p /= IPv6(src=src_if.remote_ip6, dst=dst_if.remote_ip6)
                 p /= IP(src=src_if.remote_ip4, dst=dst_if.remote_ip4)
             else:
                 p /= IPv6(src=src_if.remote_ip6, dst=dst_if.remote_ip6)
@@ -226,16 +239,16 @@ class MethodHolder(VppTestCase):
         self.pg_start()
         return dst_if.get_capture(len(self.pkts))
 
         self.pg_start()
         return dst_if.get_capture(len(self.pkts))
 
-    def verify_cflow_data_detail(self, decoder, capture, cflow,
-                                 data_set={1: 'octets', 2: 'packets'},
-                                 ip_ver='v4'):
+    def verify_cflow_data_detail(
+        self, decoder, capture, cflow, data_set={1: "octets", 2: "packets"}, ip_ver="v4"
+    ):
         if self.debug_print:
             print(capture[0].show())
         if cflow.haslayer(Data):
             data = decoder.decode_data_set(cflow.getlayer(Set))
             if self.debug_print:
                 print(data)
         if self.debug_print:
             print(capture[0].show())
         if cflow.haslayer(Data):
             data = decoder.decode_data_set(cflow.getlayer(Set))
             if self.debug_print:
                 print(data)
-            if ip_ver == 'v4':
+            if ip_ver == "v4":
                 ip_layer = capture[0][IP]
             else:
                 ip_layer = capture[0][IPv6]
                 ip_layer = capture[0][IP]
             else:
                 ip_layer = capture[0][IPv6]
@@ -251,35 +264,31 @@ class MethodHolder(VppTestCase):
                         if field not in record.keys():
                             continue
                         value = data_set[field]
                         if field not in record.keys():
                             continue
                         value = data_set[field]
-                        if value == 'octets':
+                        if value == "octets":
                             value = ip_layer.len
                             value = ip_layer.len
-                            if ip_ver == 'v6':
-                                value += 40        # ??? is this correct
-                        elif value == 'packets':
+                            if ip_ver == "v6":
+                                value += 40  # ??? is this correct
+                        elif value == "packets":
                             value = 1
                             value = 1
-                        elif value == 'src_ip':
-                            if ip_ver == 'v4':
-                                ip = socket.inet_pton(socket.AF_INET,
-                                                      ip_layer.src)
+                        elif value == "src_ip":
+                            if ip_ver == "v4":
+                                ip = socket.inet_pton(socket.AF_INET, ip_layer.src)
                             else:
                             else:
-                                ip = socket.inet_pton(socket.AF_INET6,
-                                                      ip_layer.src)
+                                ip = socket.inet_pton(socket.AF_INET6, ip_layer.src)
                             value = int(binascii.hexlify(ip), 16)
                             value = int(binascii.hexlify(ip), 16)
-                        elif value == 'dst_ip':
-                            if ip_ver == 'v4':
-                                ip = socket.inet_pton(socket.AF_INET,
-                                                      ip_layer.dst)
+                        elif value == "dst_ip":
+                            if ip_ver == "v4":
+                                ip = socket.inet_pton(socket.AF_INET, ip_layer.dst)
                             else:
                             else:
-                                ip = socket.inet_pton(socket.AF_INET6,
-                                                      ip_layer.dst)
+                                ip = socket.inet_pton(socket.AF_INET6, ip_layer.dst)
                             value = int(binascii.hexlify(ip), 16)
                             value = int(binascii.hexlify(ip), 16)
-                        elif value == 'sport':
+                        elif value == "sport":
                             value = int(capture[0][UDP].sport)
                             value = int(capture[0][UDP].sport)
-                        elif value == 'dport':
+                        elif value == "dport":
                             value = int(capture[0][UDP].dport)
                             value = int(capture[0][UDP].dport)
-                        self.assertEqual(int(binascii.hexlify(
-                            record[field]), 16),
-                            value)
+                        self.assertEqual(
+                            int(binascii.hexlify(record[field]), 16), value
+                        )
 
     def verify_cflow_data_notimer(self, decoder, capture, cflows):
         idx = 0
 
     def verify_cflow_data_notimer(self, decoder, capture, cflows):
         idx = 0
@@ -292,14 +301,12 @@ class MethodHolder(VppTestCase):
             for rec in data:
                 p = capture[idx]
                 idx += 1
             for rec in data:
                 p = capture[idx]
                 idx += 1
-                self.assertEqual(p[IP].len, int(
-                    binascii.hexlify(rec[1]), 16))
-                self.assertEqual(1, int(
-                    binascii.hexlify(rec[2]), 16))
+                self.assertEqual(p[IP].len, int(binascii.hexlify(rec[1]), 16))
+                self.assertEqual(1, int(binascii.hexlify(rec[2]), 16))
         self.assertEqual(len(capture), idx)
 
     def wait_for_cflow_packet(self, collector_intf, set_id=2, timeout=1):
         self.assertEqual(len(capture), idx)
 
     def wait_for_cflow_packet(self, collector_intf, set_id=2, timeout=1):
-        """ wait for CFLOW packet and verify its correctness
+        """wait for CFLOW packet and verify its correctness
 
         :param timeout: how long to wait
 
 
         :param timeout: how long to wait
 
@@ -327,7 +334,7 @@ class Flowprobe(MethodHolder):
         super(Flowprobe, cls).tearDownClass()
 
     def test_0001(self):
         super(Flowprobe, cls).tearDownClass()
 
     def test_0001(self):
-        """ timer less than template timeout"""
+        """timer less than template timeout"""
         self.logger.info("FFP_TEST_START_0001")
         self.pg_enable_capture(self.pg_interfaces)
         self.pkts = []
         self.logger.info("FFP_TEST_START_0001")
         self.pg_enable_capture(self.pg_interfaces)
         self.pkts = []
@@ -351,7 +358,7 @@ class Flowprobe(MethodHolder):
         self.logger.info("FFP_TEST_FINISH_0001")
 
     def test_0002(self):
         self.logger.info("FFP_TEST_FINISH_0001")
 
     def test_0002(self):
-        """ timer greater than template timeout"""
+        """timer greater than template timeout"""
         self.logger.info("FFP_TEST_START_0002")
         self.pg_enable_capture(self.pg_interfaces)
         self.pkts = []
         self.logger.info("FFP_TEST_START_0002")
         self.pg_enable_capture(self.pg_interfaces)
         self.pkts = []
@@ -384,26 +391,33 @@ class Flowprobe(MethodHolder):
         self.pg_enable_capture(self.pg_interfaces)
         self.pkts = []
 
         self.pg_enable_capture(self.pg_interfaces)
         self.pkts = []
 
-        ipfix = VppCFLOW(test=self, intf='pg8', datapath="ip4",
-                         layer='l2 l3 l4', active=2)
+        ipfix = VppCFLOW(
+            test=self, intf="pg8", datapath="ip4", layer="l2 l3 l4", active=2
+        )
         ipfix.add_vpp_config()
 
         ipfix.add_vpp_config()
 
-        route_9001 = VppIpRoute(self, "9.0.0.0", 24,
-                                [VppRoutePath(self.pg8._remote_hosts[0].ip4,
-                                              self.pg8.sw_if_index)])
+        route_9001 = VppIpRoute(
+            self,
+            "9.0.0.0",
+            24,
+            [VppRoutePath(self.pg8._remote_hosts[0].ip4, self.pg8.sw_if_index)],
+        )
         route_9001.add_vpp_config()
 
         ipfix_decoder = IPFIXDecoder()
         templates = ipfix.verify_templates(ipfix_decoder, count=1)
 
         route_9001.add_vpp_config()
 
         ipfix_decoder = IPFIXDecoder()
         templates = ipfix.verify_templates(ipfix_decoder, count=1)
 
-        self.pkts = [(Ether(dst=self.pg7.local_mac,
-                            src=self.pg7.remote_mac) /
-                      IP(src=self.pg7.remote_ip4, dst="9.0.0.100") /
-                      TCP(sport=1234, dport=4321, flags=80) /
-                      Raw(b'\xa5' * 100))]
+        self.pkts = [
+            (
+                Ether(dst=self.pg7.local_mac, src=self.pg7.remote_mac)
+                / IP(src=self.pg7.remote_ip4, dst="9.0.0.100")
+                / TCP(sport=1234, dport=4321, flags=80)
+                / Raw(b"\xa5" * 100)
+            )
+        ]
 
         nowUTC = int(time.time())
 
         nowUTC = int(time.time())
-        nowUNIX = nowUTC+2208988800
+        nowUNIX = nowUTC + 2208988800
         self.send_packets(src_if=self.pg7, dst_if=self.pg8)
 
         cflow = self.wait_for_cflow_packet(self.collector, templates[0], 10)
         self.send_packets(src_if=self.pg7, dst_if=self.pg8)
 
         cflow = self.wait_for_cflow_packet(self.collector, templates[0], 10)
@@ -435,11 +449,9 @@ class Flowprobe(MethodHolder):
             # ethernet type
             self.assertEqual(int(binascii.hexlify(record[256]), 16), 8)
             # src ip
             # ethernet type
             self.assertEqual(int(binascii.hexlify(record[256]), 16), 8)
             # src ip
-            self.assertEqual(inet_ntop(socket.AF_INET, record[8]),
-                             self.pg7.remote_ip4)
+            self.assertEqual(inet_ntop(socket.AF_INET, record[8]), self.pg7.remote_ip4)
             # dst ip
             # dst ip
-            self.assertEqual(inet_ntop(socket.AF_INET, record[12]),
-                             "9.0.0.100")
+            self.assertEqual(inet_ntop(socket.AF_INET, record[12]), "9.0.0.100")
             # protocol (TCP)
             self.assertEqual(int(binascii.hexlify(record[4]), 16), 6)
             # src port
             # protocol (TCP)
             self.assertEqual(int(binascii.hexlify(record[4]), 16), 6)
             # src port
@@ -466,11 +478,11 @@ class Datapath(MethodHolder):
         super(Datapath, cls).tearDownClass()
 
     def test_templatesL2(self):
         super(Datapath, cls).tearDownClass()
 
     def test_templatesL2(self):
-        """ verify template on L2 datapath"""
+        """verify template on L2 datapath"""
         self.logger.info("FFP_TEST_START_0000")
         self.pg_enable_capture(self.pg_interfaces)
 
         self.logger.info("FFP_TEST_START_0000")
         self.pg_enable_capture(self.pg_interfaces)
 
-        ipfix = VppCFLOW(test=self, layer='l2')
+        ipfix = VppCFLOW(test=self, layer="l2")
         ipfix.add_vpp_config()
 
         # template packet should arrive immediately
         ipfix.add_vpp_config()
 
         # template packet should arrive immediately
@@ -482,12 +494,12 @@ class Datapath(MethodHolder):
         self.logger.info("FFP_TEST_FINISH_0000")
 
     def test_L2onL2(self):
         self.logger.info("FFP_TEST_FINISH_0000")
 
     def test_L2onL2(self):
-        """ L2 data on L2 datapath"""
+        """L2 data on L2 datapath"""
         self.logger.info("FFP_TEST_START_0001")
         self.pg_enable_capture(self.pg_interfaces)
         self.pkts = []
 
         self.logger.info("FFP_TEST_START_0001")
         self.pg_enable_capture(self.pg_interfaces)
         self.pkts = []
 
-        ipfix = VppCFLOW(test=self, layer='l2')
+        ipfix = VppCFLOW(test=self, layer="l2")
         ipfix.add_vpp_config()
 
         ipfix_decoder = IPFIXDecoder()
         ipfix.add_vpp_config()
 
         ipfix_decoder = IPFIXDecoder()
@@ -500,20 +512,21 @@ class Datapath(MethodHolder):
         # make sure the one packet we expect actually showed up
         self.vapi.ipfix_flush()
         cflow = self.wait_for_cflow_packet(self.collector, templates[0])
         # make sure the one packet we expect actually showed up
         self.vapi.ipfix_flush()
         cflow = self.wait_for_cflow_packet(self.collector, templates[0])
-        self.verify_cflow_data_detail(ipfix_decoder, capture, cflow,
-                                      {2: 'packets', 256: 8})
+        self.verify_cflow_data_detail(
+            ipfix_decoder, capture, cflow, {2: "packets", 256: 8}
+        )
         self.collector.get_capture(2)
 
         ipfix.remove_vpp_config()
         self.logger.info("FFP_TEST_FINISH_0001")
 
     def test_L3onL2(self):
         self.collector.get_capture(2)
 
         ipfix.remove_vpp_config()
         self.logger.info("FFP_TEST_FINISH_0001")
 
     def test_L3onL2(self):
-        """ L3 data on L2 datapath"""
+        """L3 data on L2 datapath"""
         self.logger.info("FFP_TEST_START_0002")
         self.pg_enable_capture(self.pg_interfaces)
         self.pkts = []
 
         self.logger.info("FFP_TEST_START_0002")
         self.pg_enable_capture(self.pg_interfaces)
         self.pkts = []
 
-        ipfix = VppCFLOW(test=self, layer='l3')
+        ipfix = VppCFLOW(test=self, layer="l3")
         ipfix.add_vpp_config()
 
         ipfix_decoder = IPFIXDecoder()
         ipfix.add_vpp_config()
 
         ipfix_decoder = IPFIXDecoder()
@@ -526,9 +539,12 @@ class Datapath(MethodHolder):
         # make sure the one packet we expect actually showed up
         self.vapi.ipfix_flush()
         cflow = self.wait_for_cflow_packet(self.collector, templates[0])
         # make sure the one packet we expect actually showed up
         self.vapi.ipfix_flush()
         cflow = self.wait_for_cflow_packet(self.collector, templates[0])
-        self.verify_cflow_data_detail(ipfix_decoder, capture, cflow,
-                                      {2: 'packets', 4: 17,
-                                       8: 'src_ip', 12: 'dst_ip'})
+        self.verify_cflow_data_detail(
+            ipfix_decoder,
+            capture,
+            cflow,
+            {2: "packets", 4: 17, 8: "src_ip", 12: "dst_ip"},
+        )
 
         self.collector.get_capture(3)
 
 
         self.collector.get_capture(3)
 
@@ -536,12 +552,12 @@ class Datapath(MethodHolder):
         self.logger.info("FFP_TEST_FINISH_0002")
 
     def test_L4onL2(self):
         self.logger.info("FFP_TEST_FINISH_0002")
 
     def test_L4onL2(self):
-        """ L4 data on L2 datapath"""
+        """L4 data on L2 datapath"""
         self.logger.info("FFP_TEST_START_0003")
         self.pg_enable_capture(self.pg_interfaces)
         self.pkts = []
 
         self.logger.info("FFP_TEST_START_0003")
         self.pg_enable_capture(self.pg_interfaces)
         self.pkts = []
 
-        ipfix = VppCFLOW(test=self, layer='l4')
+        ipfix = VppCFLOW(test=self, layer="l4")
         ipfix.add_vpp_config()
 
         ipfix_decoder = IPFIXDecoder()
         ipfix.add_vpp_config()
 
         ipfix_decoder = IPFIXDecoder()
@@ -554,8 +570,9 @@ class Datapath(MethodHolder):
         # make sure the one packet we expect actually showed up
         self.vapi.ipfix_flush()
         cflow = self.wait_for_cflow_packet(self.collector, templates[0])
         # make sure the one packet we expect actually showed up
         self.vapi.ipfix_flush()
         cflow = self.wait_for_cflow_packet(self.collector, templates[0])
-        self.verify_cflow_data_detail(ipfix_decoder, capture, cflow,
-                                      {2: 'packets', 7: 'sport', 11: 'dport'})
+        self.verify_cflow_data_detail(
+            ipfix_decoder, capture, cflow, {2: "packets", 7: "sport", 11: "dport"}
+        )
 
         self.collector.get_capture(3)
 
 
         self.collector.get_capture(3)
 
@@ -563,12 +580,12 @@ class Datapath(MethodHolder):
         self.logger.info("FFP_TEST_FINISH_0003")
 
     def test_templatesIp4(self):
         self.logger.info("FFP_TEST_FINISH_0003")
 
     def test_templatesIp4(self):
-        """ verify templates on IP4 datapath"""
+        """verify templates on IP4 datapath"""
         self.logger.info("FFP_TEST_START_0000")
 
         self.pg_enable_capture(self.pg_interfaces)
 
         self.logger.info("FFP_TEST_START_0000")
 
         self.pg_enable_capture(self.pg_interfaces)
 
-        ipfix = VppCFLOW(test=self, datapath='ip4')
+        ipfix = VppCFLOW(test=self, datapath="ip4")
         ipfix.add_vpp_config()
 
         # template packet should arrive immediately
         ipfix.add_vpp_config()
 
         # template packet should arrive immediately
@@ -581,12 +598,12 @@ class Datapath(MethodHolder):
         self.logger.info("FFP_TEST_FINISH_0000")
 
     def test_L2onIP4(self):
         self.logger.info("FFP_TEST_FINISH_0000")
 
     def test_L2onIP4(self):
-        """ L2 data on IP4 datapath"""
+        """L2 data on IP4 datapath"""
         self.logger.info("FFP_TEST_START_0001")
         self.pg_enable_capture(self.pg_interfaces)
         self.pkts = []
 
         self.logger.info("FFP_TEST_START_0001")
         self.pg_enable_capture(self.pg_interfaces)
         self.pkts = []
 
-        ipfix = VppCFLOW(test=self, intf='pg4', layer='l2', datapath='ip4')
+        ipfix = VppCFLOW(test=self, intf="pg4", layer="l2", datapath="ip4")
         ipfix.add_vpp_config()
 
         ipfix_decoder = IPFIXDecoder()
         ipfix.add_vpp_config()
 
         ipfix_decoder = IPFIXDecoder()
@@ -599,8 +616,9 @@ class Datapath(MethodHolder):
         # make sure the one packet we expect actually showed up
         self.vapi.ipfix_flush()
         cflow = self.wait_for_cflow_packet(self.collector, templates[0])
         # make sure the one packet we expect actually showed up
         self.vapi.ipfix_flush()
         cflow = self.wait_for_cflow_packet(self.collector, templates[0])
-        self.verify_cflow_data_detail(ipfix_decoder, capture, cflow,
-                                      {2: 'packets', 256: 8})
+        self.verify_cflow_data_detail(
+            ipfix_decoder, capture, cflow, {2: "packets", 256: 8}
+        )
 
         # expected two templates and one cflow packet
         self.collector.get_capture(2)
 
         # expected two templates and one cflow packet
         self.collector.get_capture(2)
@@ -609,12 +627,12 @@ class Datapath(MethodHolder):
         self.logger.info("FFP_TEST_FINISH_0001")
 
     def test_L3onIP4(self):
         self.logger.info("FFP_TEST_FINISH_0001")
 
     def test_L3onIP4(self):
-        """ L3 data on IP4 datapath"""
+        """L3 data on IP4 datapath"""
         self.logger.info("FFP_TEST_START_0002")
         self.pg_enable_capture(self.pg_interfaces)
         self.pkts = []
 
         self.logger.info("FFP_TEST_START_0002")
         self.pg_enable_capture(self.pg_interfaces)
         self.pkts = []
 
-        ipfix = VppCFLOW(test=self, intf='pg4', layer='l3', datapath='ip4')
+        ipfix = VppCFLOW(test=self, intf="pg4", layer="l3", datapath="ip4")
         ipfix.add_vpp_config()
 
         ipfix_decoder = IPFIXDecoder()
         ipfix.add_vpp_config()
 
         ipfix_decoder = IPFIXDecoder()
@@ -627,9 +645,12 @@ class Datapath(MethodHolder):
         # make sure the one packet we expect actually showed up
         self.vapi.ipfix_flush()
         cflow = self.wait_for_cflow_packet(self.collector, templates[0])
         # make sure the one packet we expect actually showed up
         self.vapi.ipfix_flush()
         cflow = self.wait_for_cflow_packet(self.collector, templates[0])
-        self.verify_cflow_data_detail(ipfix_decoder, capture, cflow,
-                                      {1: 'octets', 2: 'packets',
-                                       8: 'src_ip', 12: 'dst_ip'})
+        self.verify_cflow_data_detail(
+            ipfix_decoder,
+            capture,
+            cflow,
+            {1: "octets", 2: "packets", 8: "src_ip", 12: "dst_ip"},
+        )
 
         # expected two templates and one cflow packet
         self.collector.get_capture(2)
 
         # expected two templates and one cflow packet
         self.collector.get_capture(2)
@@ -638,12 +659,12 @@ class Datapath(MethodHolder):
         self.logger.info("FFP_TEST_FINISH_0002")
 
     def test_L4onIP4(self):
         self.logger.info("FFP_TEST_FINISH_0002")
 
     def test_L4onIP4(self):
-        """ L4 data on IP4 datapath"""
+        """L4 data on IP4 datapath"""
         self.logger.info("FFP_TEST_START_0003")
         self.pg_enable_capture(self.pg_interfaces)
         self.pkts = []
 
         self.logger.info("FFP_TEST_START_0003")
         self.pg_enable_capture(self.pg_interfaces)
         self.pkts = []
 
-        ipfix = VppCFLOW(test=self, intf='pg4', layer='l4', datapath='ip4')
+        ipfix = VppCFLOW(test=self, intf="pg4", layer="l4", datapath="ip4")
         ipfix.add_vpp_config()
 
         ipfix_decoder = IPFIXDecoder()
         ipfix.add_vpp_config()
 
         ipfix_decoder = IPFIXDecoder()
@@ -656,8 +677,9 @@ class Datapath(MethodHolder):
         # make sure the one packet we expect actually showed up
         self.vapi.ipfix_flush()
         cflow = self.wait_for_cflow_packet(self.collector, templates[0])
         # make sure the one packet we expect actually showed up
         self.vapi.ipfix_flush()
         cflow = self.wait_for_cflow_packet(self.collector, templates[0])
-        self.verify_cflow_data_detail(ipfix_decoder, capture, cflow,
-                                      {2: 'packets', 7: 'sport', 11: 'dport'})
+        self.verify_cflow_data_detail(
+            ipfix_decoder, capture, cflow, {2: "packets", 7: "sport", 11: "dport"}
+        )
 
         # expected two templates and one cflow packet
         self.collector.get_capture(2)
 
         # expected two templates and one cflow packet
         self.collector.get_capture(2)
@@ -666,11 +688,11 @@ class Datapath(MethodHolder):
         self.logger.info("FFP_TEST_FINISH_0003")
 
     def test_templatesIP6(self):
         self.logger.info("FFP_TEST_FINISH_0003")
 
     def test_templatesIP6(self):
-        """ verify templates on IP6 datapath"""
+        """verify templates on IP6 datapath"""
         self.logger.info("FFP_TEST_START_0000")
         self.pg_enable_capture(self.pg_interfaces)
 
         self.logger.info("FFP_TEST_START_0000")
         self.pg_enable_capture(self.pg_interfaces)
 
-        ipfix = VppCFLOW(test=self, datapath='ip6')
+        ipfix = VppCFLOW(test=self, datapath="ip6")
         ipfix.add_vpp_config()
 
         # template packet should arrive immediately
         ipfix.add_vpp_config()
 
         # template packet should arrive immediately
@@ -682,28 +704,27 @@ class Datapath(MethodHolder):
         self.logger.info("FFP_TEST_FINISH_0000")
 
     def test_L2onIP6(self):
         self.logger.info("FFP_TEST_FINISH_0000")
 
     def test_L2onIP6(self):
-        """ L2 data on IP6 datapath"""
+        """L2 data on IP6 datapath"""
         self.logger.info("FFP_TEST_START_0001")
         self.pg_enable_capture(self.pg_interfaces)
         self.pkts = []
 
         self.logger.info("FFP_TEST_START_0001")
         self.pg_enable_capture(self.pg_interfaces)
         self.pkts = []
 
-        ipfix = VppCFLOW(test=self, intf='pg6', layer='l2', datapath='ip6')
+        ipfix = VppCFLOW(test=self, intf="pg6", layer="l2", datapath="ip6")
         ipfix.add_vpp_config()
 
         ipfix_decoder = IPFIXDecoder()
         # template packet should arrive immediately
         templates = ipfix.verify_templates(ipfix_decoder, count=1)
 
         ipfix.add_vpp_config()
 
         ipfix_decoder = IPFIXDecoder()
         # template packet should arrive immediately
         templates = ipfix.verify_templates(ipfix_decoder, count=1)
 
-        self.create_stream(src_if=self.pg5, dst_if=self.pg6, packets=1,
-                           ip_ver='IPv6')
+        self.create_stream(src_if=self.pg5, dst_if=self.pg6, packets=1, ip_ver="IPv6")
         capture = self.send_packets(src_if=self.pg5, dst_if=self.pg6)
 
         # make sure the one packet we expect actually showed up
         self.vapi.ipfix_flush()
         cflow = self.wait_for_cflow_packet(self.collector, templates[0])
         capture = self.send_packets(src_if=self.pg5, dst_if=self.pg6)
 
         # make sure the one packet we expect actually showed up
         self.vapi.ipfix_flush()
         cflow = self.wait_for_cflow_packet(self.collector, templates[0])
-        self.verify_cflow_data_detail(ipfix_decoder, capture, cflow,
-                                      {2: 'packets', 256: 56710},
-                                      ip_ver='v6')
+        self.verify_cflow_data_detail(
+            ipfix_decoder, capture, cflow, {2: "packets", 256: 56710}, ip_ver="v6"
+        )
 
         # expected two templates and one cflow packet
         self.collector.get_capture(2)
 
         # expected two templates and one cflow packet
         self.collector.get_capture(2)
@@ -712,29 +733,31 @@ class Datapath(MethodHolder):
         self.logger.info("FFP_TEST_FINISH_0001")
 
     def test_L3onIP6(self):
         self.logger.info("FFP_TEST_FINISH_0001")
 
     def test_L3onIP6(self):
-        """ L3 data on IP6 datapath"""
+        """L3 data on IP6 datapath"""
         self.logger.info("FFP_TEST_START_0002")
         self.pg_enable_capture(self.pg_interfaces)
         self.pkts = []
 
         self.logger.info("FFP_TEST_START_0002")
         self.pg_enable_capture(self.pg_interfaces)
         self.pkts = []
 
-        ipfix = VppCFLOW(test=self, intf='pg6', layer='l3', datapath='ip6')
+        ipfix = VppCFLOW(test=self, intf="pg6", layer="l3", datapath="ip6")
         ipfix.add_vpp_config()
 
         ipfix_decoder = IPFIXDecoder()
         # template packet should arrive immediately
         templates = ipfix.verify_templates(ipfix_decoder, count=1)
 
         ipfix.add_vpp_config()
 
         ipfix_decoder = IPFIXDecoder()
         # template packet should arrive immediately
         templates = ipfix.verify_templates(ipfix_decoder, count=1)
 
-        self.create_stream(src_if=self.pg5, dst_if=self.pg6, packets=1,
-                           ip_ver='IPv6')
+        self.create_stream(src_if=self.pg5, dst_if=self.pg6, packets=1, ip_ver="IPv6")
         capture = self.send_packets(src_if=self.pg5, dst_if=self.pg6)
 
         # make sure the one packet we expect actually showed up
         self.vapi.ipfix_flush()
         cflow = self.wait_for_cflow_packet(self.collector, templates[0])
         capture = self.send_packets(src_if=self.pg5, dst_if=self.pg6)
 
         # make sure the one packet we expect actually showed up
         self.vapi.ipfix_flush()
         cflow = self.wait_for_cflow_packet(self.collector, templates[0])
-        self.verify_cflow_data_detail(ipfix_decoder, capture, cflow,
-                                      {2: 'packets',
-                                       27: 'src_ip', 28: 'dst_ip'},
-                                      ip_ver='v6')
+        self.verify_cflow_data_detail(
+            ipfix_decoder,
+            capture,
+            cflow,
+            {2: "packets", 27: "src_ip", 28: "dst_ip"},
+            ip_ver="v6",
+        )
 
         # expected two templates and one cflow packet
         self.collector.get_capture(2)
 
         # expected two templates and one cflow packet
         self.collector.get_capture(2)
@@ -743,28 +766,31 @@ class Datapath(MethodHolder):
         self.logger.info("FFP_TEST_FINISH_0002")
 
     def test_L4onIP6(self):
         self.logger.info("FFP_TEST_FINISH_0002")
 
     def test_L4onIP6(self):
-        """ L4 data on IP6 datapath"""
+        """L4 data on IP6 datapath"""
         self.logger.info("FFP_TEST_START_0003")
         self.pg_enable_capture(self.pg_interfaces)
         self.pkts = []
 
         self.logger.info("FFP_TEST_START_0003")
         self.pg_enable_capture(self.pg_interfaces)
         self.pkts = []
 
-        ipfix = VppCFLOW(test=self, intf='pg6', layer='l4', datapath='ip6')
+        ipfix = VppCFLOW(test=self, intf="pg6", layer="l4", datapath="ip6")
         ipfix.add_vpp_config()
 
         ipfix_decoder = IPFIXDecoder()
         # template packet should arrive immediately
         templates = ipfix.verify_templates(ipfix_decoder, count=1)
 
         ipfix.add_vpp_config()
 
         ipfix_decoder = IPFIXDecoder()
         # template packet should arrive immediately
         templates = ipfix.verify_templates(ipfix_decoder, count=1)
 
-        self.create_stream(src_if=self.pg5, dst_if=self.pg6, packets=1,
-                           ip_ver='IPv6')
+        self.create_stream(src_if=self.pg5, dst_if=self.pg6, packets=1, ip_ver="IPv6")
         capture = self.send_packets(src_if=self.pg5, dst_if=self.pg6)
 
         # make sure the one packet we expect actually showed up
         self.vapi.ipfix_flush()
         cflow = self.wait_for_cflow_packet(self.collector, templates[0])
         capture = self.send_packets(src_if=self.pg5, dst_if=self.pg6)
 
         # make sure the one packet we expect actually showed up
         self.vapi.ipfix_flush()
         cflow = self.wait_for_cflow_packet(self.collector, templates[0])
-        self.verify_cflow_data_detail(ipfix_decoder, capture, cflow,
-                                      {2: 'packets', 7: 'sport', 11: 'dport'},
-                                      ip_ver='v6')
+        self.verify_cflow_data_detail(
+            ipfix_decoder,
+            capture,
+            cflow,
+            {2: "packets", 7: "sport", 11: "dport"},
+            ip_ver="v6",
+        )
 
         # expected two templates and one cflow packet
         self.collector.get_capture(2)
 
         # expected two templates and one cflow packet
         self.collector.get_capture(2)
@@ -773,7 +799,7 @@ class Datapath(MethodHolder):
         self.logger.info("FFP_TEST_FINISH_0003")
 
     def test_0001(self):
         self.logger.info("FFP_TEST_FINISH_0003")
 
     def test_0001(self):
-        """ no timers, one CFLOW packet, 9 Flows inside"""
+        """no timers, one CFLOW packet, 9 Flows inside"""
         self.logger.info("FFP_TEST_START_0001")
         self.pg_enable_capture(self.pg_interfaces)
         self.pkts = []
         self.logger.info("FFP_TEST_START_0001")
         self.pg_enable_capture(self.pg_interfaces)
         self.pkts = []
@@ -798,7 +824,7 @@ class Datapath(MethodHolder):
         self.logger.info("FFP_TEST_FINISH_0001")
 
     def test_0002(self):
         self.logger.info("FFP_TEST_FINISH_0001")
 
     def test_0002(self):
-        """ no timers, two CFLOW packets (mtu=256), 3 Flows in each"""
+        """no timers, two CFLOW packets (mtu=256), 3 Flows in each"""
         self.logger.info("FFP_TEST_START_0002")
         self.pg_enable_capture(self.pg_interfaces)
         self.pkts = []
         self.logger.info("FFP_TEST_START_0002")
         self.pg_enable_capture(self.pg_interfaces)
         self.pkts = []
@@ -817,10 +843,8 @@ class Datapath(MethodHolder):
         # make sure the one packet we expect actually showed up
         cflows = []
         self.vapi.ipfix_flush()
         # make sure the one packet we expect actually showed up
         cflows = []
         self.vapi.ipfix_flush()
-        cflows.append(self.wait_for_cflow_packet(self.collector,
-                                                 templates[1]))
-        cflows.append(self.wait_for_cflow_packet(self.collector,
-                                                 templates[1]))
+        cflows.append(self.wait_for_cflow_packet(self.collector, templates[1]))
+        cflows.append(self.wait_for_cflow_packet(self.collector, templates[1]))
         self.verify_cflow_data_notimer(ipfix_decoder, capture, cflows)
         self.collector.get_capture(5)
 
         self.verify_cflow_data_notimer(ipfix_decoder, capture, cflows)
         self.collector.get_capture(5)
 
@@ -841,7 +865,7 @@ class DisableIPFIX(MethodHolder):
         super(DisableIPFIX, cls).tearDownClass()
 
     def test_0001(self):
         super(DisableIPFIX, cls).tearDownClass()
 
     def test_0001(self):
-        """ disable IPFIX after first packets"""
+        """disable IPFIX after first packets"""
         self.logger.info("FFP_TEST_START_0001")
         self.pg_enable_capture(self.pg_interfaces)
         self.pkts = []
         self.logger.info("FFP_TEST_START_0001")
         self.pg_enable_capture(self.pg_interfaces)
         self.pkts = []
@@ -889,8 +913,7 @@ class ReenableIPFIX(MethodHolder):
         super(ReenableIPFIX, cls).tearDownClass()
 
     def test_0011(self):
         super(ReenableIPFIX, cls).tearDownClass()
 
     def test_0011(self):
-        """ disable IPFIX after first packets and re-enable after few packets
-        """
+        """disable IPFIX after first packets and re-enable after few packets"""
         self.logger.info("FFP_TEST_START_0001")
         self.pg_enable_capture(self.pg_interfaces)
         self.pkts = []
         self.logger.info("FFP_TEST_START_0001")
         self.pg_enable_capture(self.pg_interfaces)
         self.pkts = []
@@ -957,7 +980,7 @@ class DisableFP(MethodHolder):
         super(DisableFP, cls).tearDownClass()
 
     def test_0001(self):
         super(DisableFP, cls).tearDownClass()
 
     def test_0001(self):
-        """ disable flowprobe feature after first packets"""
+        """disable flowprobe feature after first packets"""
         self.logger.info("FFP_TEST_START_0001")
         self.pg_enable_capture(self.pg_interfaces)
         self.pkts = []
         self.logger.info("FFP_TEST_START_0001")
         self.pg_enable_capture(self.pg_interfaces)
         self.pkts = []
@@ -1004,8 +1027,8 @@ class ReenableFP(MethodHolder):
         super(ReenableFP, cls).tearDownClass()
 
     def test_0001(self):
         super(ReenableFP, cls).tearDownClass()
 
     def test_0001(self):
-        """ disable flowprobe feature after first packets and re-enable
-        after few packets """
+        """disable flowprobe feature after first packets and re-enable
+        after few packets"""
         self.logger.info("FFP_TEST_START_0001")
         self.pg_enable_capture(self.pg_interfaces)
         self.pkts = []
         self.logger.info("FFP_TEST_START_0001")
         self.pg_enable_capture(self.pg_interfaces)
         self.pkts = []
@@ -1054,5 +1077,5 @@ class ReenableFP(MethodHolder):
         self.logger.info("FFP_TEST_FINISH_0001")
 
 
         self.logger.info("FFP_TEST_FINISH_0001")
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index 9ce1f8f..f6886c6 100644 (file)
@@ -16,7 +16,7 @@ from vpp_ip import INVALID_INDEX
 
 
 class TestGeneve(BridgeDomain, VppTestCase):
 
 
 class TestGeneve(BridgeDomain, VppTestCase):
-    """ GENEVE Test Case """
+    """GENEVE Test Case"""
 
     def __init__(self, *args):
         BridgeDomain.__init__(self)
 
     def __init__(self, *args):
         BridgeDomain.__init__(self)
@@ -28,14 +28,16 @@ class TestGeneve(BridgeDomain, VppTestCase):
         Encapsulate the original payload frame by adding GENEVE header with its
         UDP, IP and Ethernet fields
         """
         Encapsulate the original payload frame by adding GENEVE header with its
         UDP, IP and Ethernet fields
         """
-        return (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-                IP(src=self.pg0.remote_ip4, dst=self.pg0.local_ip4) /
-                UDP(sport=self.dport, dport=self.dport, chksum=0) /
-                GENEVE(vni=vni) /
-                pkt)
+        return (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg0.local_ip4)
+            / UDP(sport=self.dport, dport=self.dport, chksum=0)
+            / GENEVE(vni=vni)
+            / pkt
+        )
 
     def ip_range(self, start, end):
 
     def ip_range(self, start, end):
-        """ range of remote ip's """
+        """range of remote ip's"""
         return ip4_range(self.pg0.remote_ip4, start, end)
 
     def encap_mcast(self, pkt, src_ip, src_mac, vni):
         return ip4_range(self.pg0.remote_ip4, start, end)
 
     def encap_mcast(self, pkt, src_ip, src_mac, vni):
@@ -43,11 +45,13 @@ class TestGeneve(BridgeDomain, VppTestCase):
         Encapsulate the original payload frame by adding GENEVE header with its
         UDP, IP and Ethernet fields
         """
         Encapsulate the original payload frame by adding GENEVE header with its
         UDP, IP and Ethernet fields
         """
-        return (Ether(src=src_mac, dst=self.mcast_mac) /
-                IP(src=src_ip, dst=self.mcast_ip4) /
-                UDP(sport=self.dport, dport=self.dport, chksum=0) /
-                GENEVE(vni=vni) /
-                pkt)
+        return (
+            Ether(src=src_mac, dst=self.mcast_mac)
+            / IP(src=src_ip, dst=self.mcast_ip4)
+            / UDP(sport=self.dport, dport=self.dport, chksum=0)
+            / GENEVE(vni=vni)
+            / pkt
+        )
 
     def decapsulate(self, pkt):
         """
 
     def decapsulate(self, pkt):
         """
@@ -89,19 +93,20 @@ class TestGeneve(BridgeDomain, VppTestCase):
         ip_range_start = 10
         ip_range_end = ip_range_start + n_ucast_tunnels
         next_hop_address = cls.pg0.remote_ip4
         ip_range_start = 10
         ip_range_end = ip_range_start + n_ucast_tunnels
         next_hop_address = cls.pg0.remote_ip4
-        for dest_ip4 in ip4_range(next_hop_address, ip_range_start,
-                                  ip_range_end):
+        for dest_ip4 in ip4_range(next_hop_address, ip_range_start, ip_range_end):
             # add host route so dest_ip4 will not be resolved
             # add host route so dest_ip4 will not be resolved
-            rip = VppIpRoute(cls, dest_ip4, 32,
-                             [VppRoutePath(next_hop_address,
-                                           INVALID_INDEX)],
-                             register=False)
+            rip = VppIpRoute(
+                cls,
+                dest_ip4,
+                32,
+                [VppRoutePath(next_hop_address, INVALID_INDEX)],
+                register=False,
+            )
             rip.add_vpp_config()
             r = cls.vapi.geneve_add_del_tunnel(
             rip.add_vpp_config()
             r = cls.vapi.geneve_add_del_tunnel(
-                local_address=cls.pg0.local_ip4, remote_address=dest_ip4,
-                vni=vni)
-            cls.vapi.sw_interface_set_l2_bridge(rx_sw_if_index=r.sw_if_index,
-                                                bd_id=vni)
+                local_address=cls.pg0.local_ip4, remote_address=dest_ip4, vni=vni
+            )
+            cls.vapi.sw_interface_set_l2_bridge(rx_sw_if_index=r.sw_if_index, bd_id=vni)
 
     @classmethod
     def add_del_shared_mcast_dst_load(cls, is_add):
 
     @classmethod
     def add_del_shared_mcast_dst_load(cls, is_add):
@@ -115,9 +120,12 @@ class TestGeneve(BridgeDomain, VppTestCase):
         for vni in range(vni_start, vni_end):
             r = cls.vapi.geneve_add_del_tunnel(
                 local_address=cls.pg0.local_ip4,
         for vni in range(vni_start, vni_end):
             r = cls.vapi.geneve_add_del_tunnel(
                 local_address=cls.pg0.local_ip4,
-                remote_address=cls.mcast_ip4, mcast_sw_if_index=1,
-                is_add=is_add, vni=vni)
-            if r.sw_if_index == 0xffffffff:
+                remote_address=cls.mcast_ip4,
+                mcast_sw_if_index=1,
+                is_add=is_add,
+                vni=vni,
+            )
+            if r.sw_if_index == 0xFFFFFFFF:
                 raise ValueError("bad sw_if_index: ~0")
 
     @classmethod
                 raise ValueError("bad sw_if_index: ~0")
 
     @classmethod
@@ -136,13 +144,15 @@ class TestGeneve(BridgeDomain, VppTestCase):
         n_distinct_dst_tunnels = 10
         ip_range_start = 10
         ip_range_end = ip_range_start + n_distinct_dst_tunnels
         n_distinct_dst_tunnels = 10
         ip_range_start = 10
         ip_range_end = ip_range_start + n_distinct_dst_tunnels
-        for dest_ip4 in ip4_range(cls.mcast_ip4, ip_range_start,
-                                  ip_range_end):
-            vni = int(dest_ip4.split('.')[3])
-            cls.vapi.geneve_add_del_tunnel(local_address=cls.pg0.local_ip4,
-                                           remote_address=dest_ip4,
-                                           mcast_sw_if_index=1, is_add=is_add,
-                                           vni=vni)
+        for dest_ip4 in ip4_range(cls.mcast_ip4, ip_range_start, ip_range_end):
+            vni = int(dest_ip4.split(".")[3])
+            cls.vapi.geneve_add_del_tunnel(
+                local_address=cls.pg0.local_ip4,
+                remote_address=dest_ip4,
+                mcast_sw_if_index=1,
+                is_add=is_add,
+                vni=vni,
+            )
 
     @classmethod
     def add_mcast_tunnels_load(cls):
 
     @classmethod
     def add_mcast_tunnels_load(cls):
@@ -176,34 +186,41 @@ class TestGeneve(BridgeDomain, VppTestCase):
             cls.pg0.resolve_arp()
 
             # Our Multicast address
             cls.pg0.resolve_arp()
 
             # Our Multicast address
-            cls.mcast_ip4 = '239.1.1.1'
+            cls.mcast_ip4 = "239.1.1.1"
             cls.mcast_mac = util.mcast_ip_to_mac(cls.mcast_ip4)
 
             # Create GENEVE VTEP on VPP pg0, and put geneve_tunnel0 and pg1
             #  into BD.
             cls.mcast_mac = util.mcast_ip_to_mac(cls.mcast_ip4)
 
             # Create GENEVE VTEP on VPP pg0, and put geneve_tunnel0 and pg1
             #  into BD.
-            cls.single_tunnel_vni = 0xabcde
+            cls.single_tunnel_vni = 0xABCDE
             cls.single_tunnel_bd = 1
             r = cls.vapi.geneve_add_del_tunnel(
                 local_address=cls.pg0.local_ip4,
             cls.single_tunnel_bd = 1
             r = cls.vapi.geneve_add_del_tunnel(
                 local_address=cls.pg0.local_ip4,
-                remote_address=cls.pg0.remote_ip4, vni=cls.single_tunnel_vni)
-            cls.vapi.sw_interface_set_l2_bridge(rx_sw_if_index=r.sw_if_index,
-                                                bd_id=cls.single_tunnel_bd)
+                remote_address=cls.pg0.remote_ip4,
+                vni=cls.single_tunnel_vni,
+            )
+            cls.vapi.sw_interface_set_l2_bridge(
+                rx_sw_if_index=r.sw_if_index, bd_id=cls.single_tunnel_bd
+            )
             cls.vapi.sw_interface_set_l2_bridge(
             cls.vapi.sw_interface_set_l2_bridge(
-                rx_sw_if_index=cls.pg1.sw_if_index, bd_id=cls.single_tunnel_bd)
+                rx_sw_if_index=cls.pg1.sw_if_index, bd_id=cls.single_tunnel_bd
+            )
 
             # Setup vni 2 to test multicast flooding
             cls.n_ucast_tunnels = 10
             cls.mcast_flood_bd = 2
 
             # Setup vni 2 to test multicast flooding
             cls.n_ucast_tunnels = 10
             cls.mcast_flood_bd = 2
-            cls.create_geneve_flood_test_bd(cls.mcast_flood_bd,
-                                            cls.n_ucast_tunnels)
+            cls.create_geneve_flood_test_bd(cls.mcast_flood_bd, cls.n_ucast_tunnels)
             r = cls.vapi.geneve_add_del_tunnel(
                 local_address=cls.pg0.local_ip4,
             r = cls.vapi.geneve_add_del_tunnel(
                 local_address=cls.pg0.local_ip4,
-                remote_address=cls.mcast_ip4, mcast_sw_if_index=1,
-                vni=cls.mcast_flood_bd)
-            cls.vapi.sw_interface_set_l2_bridge(rx_sw_if_index=r.sw_if_index,
-                                                bd_id=cls.mcast_flood_bd)
+                remote_address=cls.mcast_ip4,
+                mcast_sw_if_index=1,
+                vni=cls.mcast_flood_bd,
+            )
+            cls.vapi.sw_interface_set_l2_bridge(
+                rx_sw_if_index=r.sw_if_index, bd_id=cls.mcast_flood_bd
+            )
             cls.vapi.sw_interface_set_l2_bridge(
             cls.vapi.sw_interface_set_l2_bridge(
-                rx_sw_if_index=cls.pg2.sw_if_index, bd_id=cls.mcast_flood_bd)
+                rx_sw_if_index=cls.pg2.sw_if_index, bd_id=cls.mcast_flood_bd
+            )
 
             # Add and delete mcast tunnels to check stability
             cls.add_shared_mcast_dst_load()
 
             # Add and delete mcast tunnels to check stability
             cls.add_shared_mcast_dst_load()
@@ -213,10 +230,10 @@ class TestGeneve(BridgeDomain, VppTestCase):
 
             # Setup vni 3 to test unicast flooding
             cls.ucast_flood_bd = 3
 
             # Setup vni 3 to test unicast flooding
             cls.ucast_flood_bd = 3
-            cls.create_geneve_flood_test_bd(cls.ucast_flood_bd,
-                                            cls.n_ucast_tunnels)
+            cls.create_geneve_flood_test_bd(cls.ucast_flood_bd, cls.n_ucast_tunnels)
             cls.vapi.sw_interface_set_l2_bridge(
             cls.vapi.sw_interface_set_l2_bridge(
-                rx_sw_if_index=cls.pg3.sw_if_index, bd_id=cls.ucast_flood_bd)
+                rx_sw_if_index=cls.pg3.sw_if_index, bd_id=cls.ucast_flood_bd
+            )
         except Exception:
             super(TestGeneve, cls).tearDownClass()
             raise
         except Exception:
             super(TestGeneve, cls).tearDownClass()
             raise
@@ -235,7 +252,7 @@ class TestGeneve(BridgeDomain, VppTestCase):
 
 
 class TestGeneveL3(VppTestCase):
 
 
 class TestGeneveL3(VppTestCase):
-    """ GENEVE L3 Test Case """
+    """GENEVE L3 Test Case"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -265,43 +282,55 @@ class TestGeneveL3(VppTestCase):
 
     def test_l3_packet(self):
         vni = 1234
 
     def test_l3_packet(self):
         vni = 1234
-        r = self.vapi.add_node_next(node_name="geneve4-input",
-                                    next_name="ethernet-input")
+        r = self.vapi.add_node_next(
+            node_name="geneve4-input", next_name="ethernet-input"
+        )
         r = self.vapi.geneve_add_del_tunnel2(
             is_add=1,
             local_address=self.pg0.local_ip4,
             remote_address=self.pg0.remote_ip4,
             vni=vni,
             l3_mode=1,
         r = self.vapi.geneve_add_del_tunnel2(
             is_add=1,
             local_address=self.pg0.local_ip4,
             remote_address=self.pg0.remote_ip4,
             vni=vni,
             l3_mode=1,
-            decap_next_index=r.next_index)
+            decap_next_index=r.next_index,
+        )
 
         self.vapi.sw_interface_add_del_address(
 
         self.vapi.sw_interface_add_del_address(
-            sw_if_index=r.sw_if_index, prefix="10.0.0.1/24")
-
-        pkt = (Ether(src=self.pg0.remote_mac, dst="d0:0b:ee:d0:00:00") /
-               IP(src='10.0.0.2', dst='10.0.0.1') /
-               ICMP())
-
-        encap = (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-                 IP(src=self.pg0.remote_ip4, dst=self.pg0.local_ip4) /
-                 UDP(sport=6081, dport=6081, chksum=0) /
-                 GENEVE(vni=vni))
-
-        arp = (Ether(src=self.pg0.remote_mac, dst="d0:0b:ee:d0:00:00") /
-               ARP(op="is-at", hwsrc=self.pg0.remote_mac,
-                   hwdst="d0:0b:ee:d0:00:00", psrc="10.0.0.2",
-                   pdst="10.0.0.1"))
-
-        rx = self.send_and_expect(self.pg0, encap/pkt*1, self.pg0)
-        rx = self.send_and_assert_no_replies(self.pg0, encap/arp*1, self.pg0)
-        rx = self.send_and_expect(self.pg0, encap/pkt*1, self.pg0)
+            sw_if_index=r.sw_if_index, prefix="10.0.0.1/24"
+        )
+
+        pkt = (
+            Ether(src=self.pg0.remote_mac, dst="d0:0b:ee:d0:00:00")
+            / IP(src="10.0.0.2", dst="10.0.0.1")
+            / ICMP()
+        )
+
+        encap = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg0.local_ip4)
+            / UDP(sport=6081, dport=6081, chksum=0)
+            / GENEVE(vni=vni)
+        )
+
+        arp = Ether(src=self.pg0.remote_mac, dst="d0:0b:ee:d0:00:00") / ARP(
+            op="is-at",
+            hwsrc=self.pg0.remote_mac,
+            hwdst="d0:0b:ee:d0:00:00",
+            psrc="10.0.0.2",
+            pdst="10.0.0.1",
+        )
+
+        rx = self.send_and_expect(self.pg0, encap / pkt * 1, self.pg0)
+        rx = self.send_and_assert_no_replies(self.pg0, encap / arp * 1, self.pg0)
+        rx = self.send_and_expect(self.pg0, encap / pkt * 1, self.pg0)
         self.assertEqual(rx[0][ICMP].type, 0)  # echo reply
 
         r = self.vapi.geneve_add_del_tunnel2(
             is_add=0,
             local_address=self.pg0.local_ip4,
             remote_address=self.pg0.remote_ip4,
         self.assertEqual(rx[0][ICMP].type, 0)  # echo reply
 
         r = self.vapi.geneve_add_del_tunnel2(
             is_add=0,
             local_address=self.pg0.local_ip4,
             remote_address=self.pg0.remote_ip4,
-            vni=vni)
+            vni=vni,
+        )
+
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index ba20ba8..a79819e 100644 (file)
@@ -15,8 +15,13 @@ from vpp_sub_interface import L2_VTR_OP, VppDot1QSubint
 from vpp_gre_interface import VppGreInterface
 from vpp_teib import VppTeib
 from vpp_ip import DpoProto
 from vpp_gre_interface import VppGreInterface
 from vpp_teib import VppTeib
 from vpp_ip import DpoProto
-from vpp_ip_route import VppIpRoute, VppRoutePath, VppIpTable, FibPathProto, \
-    VppMplsLabel
+from vpp_ip_route import (
+    VppIpRoute,
+    VppRoutePath,
+    VppIpTable,
+    FibPathProto,
+    VppMplsLabel,
+)
 from vpp_mpls_tunnel_interface import VppMPLSTunnelInterface
 from util import ppp, ppc
 from vpp_papi import VppEnum
 from vpp_mpls_tunnel_interface import VppMPLSTunnelInterface
 from util import ppp, ppc
 from vpp_papi import VppEnum
@@ -24,7 +29,7 @@ from vpp_papi import VppEnum
 
 @tag_fixme_vpp_workers
 class TestGREInputNodes(VppTestCase):
 
 @tag_fixme_vpp_workers
 class TestGREInputNodes(VppTestCase):
-    """ GRE Input Nodes Test Case """
+    """GRE Input Nodes Test Case"""
 
     def setUp(self):
         super(TestGREInputNodes, self).setUp()
 
     def setUp(self):
         super(TestGREInputNodes, self).setUp()
@@ -43,16 +48,17 @@ class TestGREInputNodes(VppTestCase):
         super(TestGREInputNodes, self).tearDown()
 
     def test_gre_input_node(self):
         super(TestGREInputNodes, self).tearDown()
 
     def test_gre_input_node(self):
-        """ GRE gre input nodes not registerd unless configured """
-        pkt = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-               IP(src=self.pg0.remote_ip4, dst=self.pg0.local_ip4) /
-               GRE())
+        """GRE gre input nodes not registerd unless configured"""
+        pkt = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg0.local_ip4)
+            / GRE()
+        )
 
         self.pg0.add_stream(pkt)
         self.pg_start()
         # no tunnel created, gre-input not registered
 
         self.pg0.add_stream(pkt)
         self.pg_start()
         # no tunnel created, gre-input not registered
-        err = self.statistics.get_counter(
-            '/err/ip4-local/unknown ip protocol')[0]
+        err = self.statistics.get_counter("/err/ip4-local/unknown ip protocol")[0]
         self.assertEqual(err, 1)
         err_count = err
 
         self.assertEqual(err, 1)
         err_count = err
 
@@ -63,14 +69,13 @@ class TestGREInputNodes(VppTestCase):
         self.pg0.add_stream(pkt)
         self.pg_start()
         # tunnel created, gre-input registered
         self.pg0.add_stream(pkt)
         self.pg_start()
         # tunnel created, gre-input registered
-        err = self.statistics.get_counter(
-            '/err/ip4-local/unknown ip protocol')[0]
+        err = self.statistics.get_counter("/err/ip4-local/unknown ip protocol")[0]
         # expect no new errors
         self.assertEqual(err, err_count)
 
 
 class TestGRE(VppTestCase):
         # expect no new errors
         self.assertEqual(err, err_count)
 
 
 class TestGRE(VppTestCase):
-    """ GRE Test Case """
+    """GRE Test Case"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -118,10 +123,12 @@ class TestGRE(VppTestCase):
         for i in range(0, 257):
             info = self.create_packet_info(src_if, src_if)
             payload = self.info_to_payload(info)
         for i in range(0, 257):
             info = self.create_packet_info(src_if, src_if)
             payload = self.info_to_payload(info)
-            p = (Ether(dst=src_if.local_mac, src=src_if.remote_mac) /
-                 IP(src=src_ip, dst=dst_ip, tos=tos) /
-                 UDP(sport=1234, dport=1234) /
-                 Raw(payload))
+            p = (
+                Ether(dst=src_if.local_mac, src=src_if.remote_mac)
+                / IP(src=src_ip, dst=dst_ip, tos=tos)
+                / UDP(sport=1234, dport=1234)
+                / Raw(payload)
+            )
             info.data = p.copy()
             pkts.append(p)
         return pkts
             info.data = p.copy()
             pkts.append(p)
         return pkts
@@ -132,107 +139,107 @@ class TestGRE(VppTestCase):
         for i in range(0, 257):
             info = self.create_packet_info(src_if, src_if)
             payload = self.info_to_payload(info)
         for i in range(0, 257):
             info = self.create_packet_info(src_if, src_if)
             payload = self.info_to_payload(info)
-            p = (Ether(dst=src_if.local_mac, src=src_if.remote_mac) /
-                 IPv6(src=src_ip, dst=dst_ip, tc=tc) /
-                 UDP(sport=1234, dport=1234) /
-                 Raw(payload))
+            p = (
+                Ether(dst=src_if.local_mac, src=src_if.remote_mac)
+                / IPv6(src=src_ip, dst=dst_ip, tc=tc)
+                / UDP(sport=1234, dport=1234)
+                / Raw(payload)
+            )
             info.data = p.copy()
             pkts.append(p)
         return pkts
 
             info.data = p.copy()
             pkts.append(p)
         return pkts
 
-    def create_tunnel_stream_4o4(self, src_if,
-                                 tunnel_src, tunnel_dst,
-                                 src_ip, dst_ip):
+    def create_tunnel_stream_4o4(self, src_if, tunnel_src, tunnel_dst, src_ip, dst_ip):
         pkts = []
         for i in range(0, 257):
             info = self.create_packet_info(src_if, src_if)
             payload = self.info_to_payload(info)
         pkts = []
         for i in range(0, 257):
             info = self.create_packet_info(src_if, src_if)
             payload = self.info_to_payload(info)
-            p = (Ether(dst=src_if.local_mac, src=src_if.remote_mac) /
-                 IP(src=tunnel_src, dst=tunnel_dst) /
-                 GRE() /
-                 IP(src=src_ip, dst=dst_ip) /
-                 UDP(sport=1234, dport=1234) /
-                 Raw(payload))
+            p = (
+                Ether(dst=src_if.local_mac, src=src_if.remote_mac)
+                / IP(src=tunnel_src, dst=tunnel_dst)
+                / GRE()
+                / IP(src=src_ip, dst=dst_ip)
+                / UDP(sport=1234, dport=1234)
+                / Raw(payload)
+            )
             info.data = p.copy()
             pkts.append(p)
         return pkts
 
             info.data = p.copy()
             pkts.append(p)
         return pkts
 
-    def create_tunnel_stream_6o4(self, src_if,
-                                 tunnel_src, tunnel_dst,
-                                 src_ip, dst_ip):
+    def create_tunnel_stream_6o4(self, src_if, tunnel_src, tunnel_dst, src_ip, dst_ip):
         pkts = []
         for i in range(0, 257):
             info = self.create_packet_info(src_if, src_if)
             payload = self.info_to_payload(info)
         pkts = []
         for i in range(0, 257):
             info = self.create_packet_info(src_if, src_if)
             payload = self.info_to_payload(info)
-            p = (Ether(dst=src_if.local_mac, src=src_if.remote_mac) /
-                 IP(src=tunnel_src, dst=tunnel_dst) /
-                 GRE() /
-                 IPv6(src=src_ip, dst=dst_ip) /
-                 UDP(sport=1234, dport=1234) /
-                 Raw(payload))
+            p = (
+                Ether(dst=src_if.local_mac, src=src_if.remote_mac)
+                / IP(src=tunnel_src, dst=tunnel_dst)
+                / GRE()
+                / IPv6(src=src_ip, dst=dst_ip)
+                / UDP(sport=1234, dport=1234)
+                / Raw(payload)
+            )
             info.data = p.copy()
             pkts.append(p)
         return pkts
 
             info.data = p.copy()
             pkts.append(p)
         return pkts
 
-    def create_tunnel_stream_6o6(self, src_if,
-                                 tunnel_src, tunnel_dst,
-                                 src_ip, dst_ip):
+    def create_tunnel_stream_6o6(self, src_if, tunnel_src, tunnel_dst, src_ip, dst_ip):
         pkts = []
         for i in range(0, 257):
             info = self.create_packet_info(src_if, src_if)
             payload = self.info_to_payload(info)
         pkts = []
         for i in range(0, 257):
             info = self.create_packet_info(src_if, src_if)
             payload = self.info_to_payload(info)
-            p = (Ether(dst=src_if.local_mac, src=src_if.remote_mac) /
-                 IPv6(src=tunnel_src, dst=tunnel_dst) /
-                 GRE() /
-                 IPv6(src=src_ip, dst=dst_ip) /
-                 UDP(sport=1234, dport=1234) /
-                 Raw(payload))
+            p = (
+                Ether(dst=src_if.local_mac, src=src_if.remote_mac)
+                / IPv6(src=tunnel_src, dst=tunnel_dst)
+                / GRE()
+                / IPv6(src=src_ip, dst=dst_ip)
+                / UDP(sport=1234, dport=1234)
+                / Raw(payload)
+            )
             info.data = p.copy()
             pkts.append(p)
         return pkts
 
             info.data = p.copy()
             pkts.append(p)
         return pkts
 
-    def create_tunnel_stream_l2o4(self, src_if,
-                                  tunnel_src, tunnel_dst):
+    def create_tunnel_stream_l2o4(self, src_if, tunnel_src, tunnel_dst):
         pkts = []
         for i in range(0, 257):
             info = self.create_packet_info(src_if, src_if)
             payload = self.info_to_payload(info)
         pkts = []
         for i in range(0, 257):
             info = self.create_packet_info(src_if, src_if)
             payload = self.info_to_payload(info)
-            p = (Ether(dst=src_if.local_mac, src=src_if.remote_mac) /
-                 IP(src=tunnel_src, dst=tunnel_dst) /
-                 GRE() /
-                 Ether(dst=RandMAC('*:*:*:*:*:*'),
-                       src=RandMAC('*:*:*:*:*:*')) /
-                 IP(src=scapy.compat.raw(RandIP()),
-                    dst=scapy.compat.raw(RandIP())) /
-                 UDP(sport=1234, dport=1234) /
-                 Raw(payload))
+            p = (
+                Ether(dst=src_if.local_mac, src=src_if.remote_mac)
+                / IP(src=tunnel_src, dst=tunnel_dst)
+                / GRE()
+                / Ether(dst=RandMAC("*:*:*:*:*:*"), src=RandMAC("*:*:*:*:*:*"))
+                / IP(src=scapy.compat.raw(RandIP()), dst=scapy.compat.raw(RandIP()))
+                / UDP(sport=1234, dport=1234)
+                / Raw(payload)
+            )
             info.data = p.copy()
             pkts.append(p)
         return pkts
 
             info.data = p.copy()
             pkts.append(p)
         return pkts
 
-    def create_tunnel_stream_vlano4(self, src_if,
-                                    tunnel_src, tunnel_dst, vlan):
+    def create_tunnel_stream_vlano4(self, src_if, tunnel_src, tunnel_dst, vlan):
         pkts = []
         for i in range(0, 257):
             info = self.create_packet_info(src_if, src_if)
             payload = self.info_to_payload(info)
         pkts = []
         for i in range(0, 257):
             info = self.create_packet_info(src_if, src_if)
             payload = self.info_to_payload(info)
-            p = (Ether(dst=src_if.local_mac, src=src_if.remote_mac) /
-                 IP(src=tunnel_src, dst=tunnel_dst) /
-                 GRE() /
-                 Ether(dst=RandMAC('*:*:*:*:*:*'),
-                       src=RandMAC('*:*:*:*:*:*')) /
-                 Dot1Q(vlan=vlan) /
-                 IP(src=scapy.compat.raw(RandIP()),
-                    dst=scapy.compat.raw(RandIP())) /
-                 UDP(sport=1234, dport=1234) /
-                 Raw(payload))
+            p = (
+                Ether(dst=src_if.local_mac, src=src_if.remote_mac)
+                / IP(src=tunnel_src, dst=tunnel_dst)
+                / GRE()
+                / Ether(dst=RandMAC("*:*:*:*:*:*"), src=RandMAC("*:*:*:*:*:*"))
+                / Dot1Q(vlan=vlan)
+                / IP(src=scapy.compat.raw(RandIP()), dst=scapy.compat.raw(RandIP()))
+                / UDP(sport=1234, dport=1234)
+                / Raw(payload)
+            )
             info.data = p.copy()
             pkts.append(p)
         return pkts
 
             info.data = p.copy()
             pkts.append(p)
         return pkts
 
-    def verify_tunneled_4o4(self, src_if, capture, sent,
-                            tunnel_src, tunnel_dst,
-                            dscp=0, ecn=0):
+    def verify_tunneled_4o4(
+        self, src_if, capture, sent, tunnel_src, tunnel_dst, dscp=0, ecn=0
+    ):
 
         self.assertEqual(len(capture), len(sent))
         tos = (dscp << 2) | ecn
 
         self.assertEqual(len(capture), len(sent))
         tos = (dscp << 2) | ecn
@@ -263,9 +270,9 @@ class TestGRE(VppTestCase):
                 self.logger.error(ppp("Tx:", tx))
                 raise
 
                 self.logger.error(ppp("Tx:", tx))
                 raise
 
-    def verify_tunneled_6o6(self, src_if, capture, sent,
-                            tunnel_src, tunnel_dst,
-                            dscp=0, ecn=0):
+    def verify_tunneled_6o6(
+        self, src_if, capture, sent, tunnel_src, tunnel_dst, dscp=0, ecn=0
+    ):
 
         self.assertEqual(len(capture), len(sent))
         tc = (dscp << 2) | ecn
 
         self.assertEqual(len(capture), len(sent))
         tc = (dscp << 2) | ecn
@@ -296,8 +303,7 @@ class TestGRE(VppTestCase):
                 self.logger.error(ppp("Tx:", tx))
                 raise
 
                 self.logger.error(ppp("Tx:", tx))
                 raise
 
-    def verify_tunneled_4o6(self, src_if, capture, sent,
-                            tunnel_src, tunnel_dst):
+    def verify_tunneled_4o6(self, src_if, capture, sent, tunnel_src, tunnel_dst):
 
         self.assertEqual(len(capture), len(sent))
 
 
         self.assertEqual(len(capture), len(sent))
 
@@ -326,8 +332,7 @@ class TestGRE(VppTestCase):
                 self.logger.error(ppp("Tx:", tx))
                 raise
 
                 self.logger.error(ppp("Tx:", tx))
                 raise
 
-    def verify_tunneled_6o4(self, src_if, capture, sent,
-                            tunnel_src, tunnel_dst):
+    def verify_tunneled_6o4(self, src_if, capture, sent, tunnel_src, tunnel_dst):
 
         self.assertEqual(len(capture), len(sent))
 
 
         self.assertEqual(len(capture), len(sent))
 
@@ -354,8 +359,7 @@ class TestGRE(VppTestCase):
                 self.logger.error(ppp("Tx:", tx))
                 raise
 
                 self.logger.error(ppp("Tx:", tx))
                 raise
 
-    def verify_tunneled_l2o4(self, src_if, capture, sent,
-                             tunnel_src, tunnel_dst):
+    def verify_tunneled_l2o4(self, src_if, capture, sent, tunnel_src, tunnel_dst):
         self.assertEqual(len(capture), len(sent))
 
         for i in range(len(capture)):
         self.assertEqual(len(capture), len(sent))
 
         for i in range(len(capture)):
@@ -387,8 +391,9 @@ class TestGRE(VppTestCase):
                 self.logger.error(ppp("Tx:", tx))
                 raise
 
                 self.logger.error(ppp("Tx:", tx))
                 raise
 
-    def verify_tunneled_vlano4(self, src_if, capture, sent,
-                               tunnel_src, tunnel_dst, vlan):
+    def verify_tunneled_vlano4(
+        self, src_if, capture, sent, tunnel_src, tunnel_dst, vlan
+    ):
         try:
             self.assertEqual(len(capture), len(sent))
         except:
         try:
             self.assertEqual(len(capture), len(sent))
         except:
@@ -495,7 +500,7 @@ class TestGRE(VppTestCase):
                 raise
 
     def test_gre(self):
                 raise
 
     def test_gre(self):
-        """ GRE IPv4 tunnel Tests """
+        """GRE IPv4 tunnel Tests"""
 
         #
         # Create an L3 GRE tunnel.
 
         #
         # Create an L3 GRE tunnel.
@@ -503,9 +508,7 @@ class TestGRE(VppTestCase):
         #  - assign an IP Addres
         #  - Add a route via the tunnel
         #
         #  - assign an IP Addres
         #  - Add a route via the tunnel
         #
-        gre_if = VppGreInterface(self,
-                                 self.pg0.local_ip4,
-                                 "1.1.1.2")
+        gre_if = VppGreInterface(self, self.pg0.local_ip4, "1.1.1.2")
         gre_if.add_vpp_config()
 
         #
         gre_if.add_vpp_config()
 
         #
@@ -522,9 +525,9 @@ class TestGRE(VppTestCase):
         gre_if.admin_up()
         gre_if.config_ip4()
 
         gre_if.admin_up()
         gre_if.config_ip4()
 
-        route_via_tun = VppIpRoute(self, "4.4.4.4", 32,
-                                   [VppRoutePath("0.0.0.0",
-                                                 gre_if.sw_if_index)])
+        route_via_tun = VppIpRoute(
+            self, "4.4.4.4", 32, [VppRoutePath("0.0.0.0", gre_if.sw_if_index)]
+        )
 
         route_via_tun.add_vpp_config()
 
 
         route_via_tun.add_vpp_config()
 
@@ -541,9 +544,12 @@ class TestGRE(VppTestCase):
         #
         # Add a route that resolves the tunnel's destination
         #
         #
         # Add a route that resolves the tunnel's destination
         #
-        route_tun_dst = VppIpRoute(self, "1.1.1.2", 32,
-                                   [VppRoutePath(self.pg0.remote_ip4,
-                                                 self.pg0.sw_if_index)])
+        route_tun_dst = VppIpRoute(
+            self,
+            "1.1.1.2",
+            32,
+            [VppRoutePath(self.pg0.remote_ip4, self.pg0.sw_if_index)],
+        )
         route_tun_dst.add_vpp_config()
 
         #
         route_tun_dst.add_vpp_config()
 
         #
@@ -552,18 +558,19 @@ class TestGRE(VppTestCase):
         #
         tx = self.create_stream_ip4(self.pg0, "5.5.5.5", "4.4.4.4")
         rx = self.send_and_expect(self.pg0, tx, self.pg0)
         #
         tx = self.create_stream_ip4(self.pg0, "5.5.5.5", "4.4.4.4")
         rx = self.send_and_expect(self.pg0, tx, self.pg0)
-        self.verify_tunneled_4o4(self.pg0, rx, tx,
-                                 self.pg0.local_ip4, "1.1.1.2")
+        self.verify_tunneled_4o4(self.pg0, rx, tx, self.pg0.local_ip4, "1.1.1.2")
 
         #
         # Send tunneled packets that match the created tunnel and
         # are decapped and forwarded
         #
 
         #
         # Send tunneled packets that match the created tunnel and
         # are decapped and forwarded
         #
-        tx = self.create_tunnel_stream_4o4(self.pg0,
-                                           "1.1.1.2",
-                                           self.pg0.local_ip4,
-                                           self.pg0.local_ip4,
-                                           self.pg0.remote_ip4)
+        tx = self.create_tunnel_stream_4o4(
+            self.pg0,
+            "1.1.1.2",
+            self.pg0.local_ip4,
+            self.pg0.local_ip4,
+            self.pg0.remote_ip4,
+        )
         rx = self.send_and_expect(self.pg0, tx, self.pg0)
         self.verify_decapped_4o4(self.pg0, rx, tx)
 
         rx = self.send_and_expect(self.pg0, tx, self.pg0)
         self.verify_decapped_4o4(self.pg0, rx, tx)
 
@@ -571,14 +578,16 @@ class TestGRE(VppTestCase):
         # Send tunneled packets that do not match the tunnel's src
         #
         self.vapi.cli("clear trace")
         # Send tunneled packets that do not match the tunnel's src
         #
         self.vapi.cli("clear trace")
-        tx = self.create_tunnel_stream_4o4(self.pg0,
-                                           "1.1.1.3",
-                                           self.pg0.local_ip4,
-                                           self.pg0.local_ip4,
-                                           self.pg0.remote_ip4)
+        tx = self.create_tunnel_stream_4o4(
+            self.pg0,
+            "1.1.1.3",
+            self.pg0.local_ip4,
+            self.pg0.local_ip4,
+            self.pg0.remote_ip4,
+        )
         self.send_and_assert_no_replies(
         self.send_and_assert_no_replies(
-            self.pg0, tx,
-            remark="GRE packets forwarded despite no SRC address match")
+            self.pg0, tx, remark="GRE packets forwarded despite no SRC address match"
+        )
 
         #
         # Configure IPv6 on the PG interface so we can route IPv6
 
         #
         # Configure IPv6 on the PG interface so we can route IPv6
@@ -591,14 +600,18 @@ class TestGRE(VppTestCase):
         # Send IPv6 tunnel encapslated packets
         #  - dropped since IPv6 is not enabled on the tunnel
         #
         # Send IPv6 tunnel encapslated packets
         #  - dropped since IPv6 is not enabled on the tunnel
         #
-        tx = self.create_tunnel_stream_6o4(self.pg0,
-                                           "1.1.1.2",
-                                           self.pg0.local_ip4,
-                                           self.pg0.local_ip6,
-                                           self.pg0.remote_ip6)
-        self.send_and_assert_no_replies(self.pg0, tx,
-                                        "IPv6 GRE packets forwarded "
-                                        "despite IPv6 not enabled on tunnel")
+        tx = self.create_tunnel_stream_6o4(
+            self.pg0,
+            "1.1.1.2",
+            self.pg0.local_ip4,
+            self.pg0.local_ip6,
+            self.pg0.remote_ip6,
+        )
+        self.send_and_assert_no_replies(
+            self.pg0,
+            tx,
+            "IPv6 GRE packets forwarded despite IPv6 not enabled on tunnel",
+        )
 
         #
         # Enable IPv6 on the tunnel
 
         #
         # Enable IPv6 on the tunnel
@@ -609,11 +622,13 @@ class TestGRE(VppTestCase):
         # Send IPv6 tunnel encapslated packets
         #  - forwarded since IPv6 is enabled on the tunnel
         #
         # Send IPv6 tunnel encapslated packets
         #  - forwarded since IPv6 is enabled on the tunnel
         #
-        tx = self.create_tunnel_stream_6o4(self.pg0,
-                                           "1.1.1.2",
-                                           self.pg0.local_ip4,
-                                           self.pg0.local_ip6,
-                                           self.pg0.remote_ip6)
+        tx = self.create_tunnel_stream_6o4(
+            self.pg0,
+            "1.1.1.2",
+            self.pg0.local_ip4,
+            self.pg0.local_ip6,
+            self.pg0.remote_ip6,
+        )
         rx = self.send_and_expect(self.pg0, tx, self.pg0)
         self.verify_decapped_6o4(self.pg0, rx, tx)
 
         rx = self.send_and_expect(self.pg0, tx, self.pg0)
         self.verify_decapped_6o4(self.pg0, rx, tx)
 
@@ -621,31 +636,32 @@ class TestGRE(VppTestCase):
         # Send v6 packets for v4 encap
         #
         route6_via_tun = VppIpRoute(
         # Send v6 packets for v4 encap
         #
         route6_via_tun = VppIpRoute(
-            self, "2001::1", 128,
-            [VppRoutePath("::",
-                          gre_if.sw_if_index,
-                          proto=DpoProto.DPO_PROTO_IP6)])
+            self,
+            "2001::1",
+            128,
+            [VppRoutePath("::", gre_if.sw_if_index, proto=DpoProto.DPO_PROTO_IP6)],
+        )
         route6_via_tun.add_vpp_config()
 
         tx = self.create_stream_ip6(self.pg0, "2001::2", "2001::1")
         rx = self.send_and_expect(self.pg0, tx, self.pg0)
 
         route6_via_tun.add_vpp_config()
 
         tx = self.create_stream_ip6(self.pg0, "2001::2", "2001::1")
         rx = self.send_and_expect(self.pg0, tx, self.pg0)
 
-        self.verify_tunneled_6o4(self.pg0, rx, tx,
-                                 self.pg0.local_ip4, "1.1.1.2")
+        self.verify_tunneled_6o4(self.pg0, rx, tx, self.pg0.local_ip4, "1.1.1.2")
 
         #
         # add a labelled route through the tunnel
         #
 
         #
         # add a labelled route through the tunnel
         #
-        label_via_tun = VppIpRoute(self, "5.4.3.2", 32,
-                                   [VppRoutePath("0.0.0.0",
-                                                 gre_if.sw_if_index,
-                                                 labels=[VppMplsLabel(33)])])
+        label_via_tun = VppIpRoute(
+            self,
+            "5.4.3.2",
+            32,
+            [VppRoutePath("0.0.0.0", gre_if.sw_if_index, labels=[VppMplsLabel(33)])],
+        )
         label_via_tun.add_vpp_config()
 
         tx = self.create_stream_ip4(self.pg0, "5.5.5.5", "5.4.3.2")
         rx = self.send_and_expect(self.pg0, tx, self.pg0)
         label_via_tun.add_vpp_config()
 
         tx = self.create_stream_ip4(self.pg0, "5.5.5.5", "5.4.3.2")
         rx = self.send_and_expect(self.pg0, tx, self.pg0)
-        self.verify_tunneled_4o4(self.pg0, rx, tx,
-                                 self.pg0.local_ip4, "1.1.1.2")
+        self.verify_tunneled_4o4(self.pg0, rx, tx, self.pg0.local_ip4, "1.1.1.2")
 
         #
         # an MPLS tunnel over the GRE tunnel add a route through
 
         #
         # an MPLS tunnel over the GRE tunnel add a route through
@@ -653,31 +669,40 @@ class TestGRE(VppTestCase):
         #
         mpls_tun = VppMPLSTunnelInterface(
             self,
         #
         mpls_tun = VppMPLSTunnelInterface(
             self,
-            [VppRoutePath("0.0.0.0",
-                          gre_if.sw_if_index,
-                          labels=[VppMplsLabel(44),
-                                  VppMplsLabel(46)])])
+            [
+                VppRoutePath(
+                    "0.0.0.0",
+                    gre_if.sw_if_index,
+                    labels=[VppMplsLabel(44), VppMplsLabel(46)],
+                )
+            ],
+        )
         mpls_tun.add_vpp_config()
         mpls_tun.admin_up()
 
         mpls_tun.add_vpp_config()
         mpls_tun.admin_up()
 
-        label_via_mpls = VppIpRoute(self, "5.4.3.1", 32,
-                                    [VppRoutePath("0.0.0.0",
-                                                  mpls_tun.sw_if_index,
-                                                  labels=[VppMplsLabel(33)])])
+        label_via_mpls = VppIpRoute(
+            self,
+            "5.4.3.1",
+            32,
+            [VppRoutePath("0.0.0.0", mpls_tun.sw_if_index, labels=[VppMplsLabel(33)])],
+        )
         label_via_mpls.add_vpp_config()
 
         tx = self.create_stream_ip4(self.pg0, "5.5.5.5", "5.4.3.1")
         rx = self.send_and_expect(self.pg0, tx, self.pg0)
         label_via_mpls.add_vpp_config()
 
         tx = self.create_stream_ip4(self.pg0, "5.5.5.5", "5.4.3.1")
         rx = self.send_and_expect(self.pg0, tx, self.pg0)
-        self.verify_tunneled_4o4(self.pg0, rx, tx,
-                                 self.pg0.local_ip4, "1.1.1.2")
+        self.verify_tunneled_4o4(self.pg0, rx, tx, self.pg0.local_ip4, "1.1.1.2")
 
         mpls_tun_l2 = VppMPLSTunnelInterface(
             self,
 
         mpls_tun_l2 = VppMPLSTunnelInterface(
             self,
-            [VppRoutePath("0.0.0.0",
-                          gre_if.sw_if_index,
-                          labels=[VppMplsLabel(44),
-                                  VppMplsLabel(46)])],
-            is_l2=1)
+            [
+                VppRoutePath(
+                    "0.0.0.0",
+                    gre_if.sw_if_index,
+                    labels=[VppMplsLabel(44), VppMplsLabel(46)],
+                )
+            ],
+            is_l2=1,
+        )
         mpls_tun_l2.add_vpp_config()
         mpls_tun_l2.admin_up()
 
         mpls_tun_l2.add_vpp_config()
         mpls_tun_l2.admin_up()
 
@@ -696,7 +721,7 @@ class TestGRE(VppTestCase):
         self.pg0.unconfig_ip6()
 
     def test_gre6(self):
         self.pg0.unconfig_ip6()
 
     def test_gre6(self):
-        """ GRE IPv6 tunnel Tests """
+        """GRE IPv6 tunnel Tests"""
 
         self.pg1.config_ip6()
         self.pg1.resolve_ndp()
 
         self.pg1.config_ip6()
         self.pg1.resolve_ndp()
@@ -707,16 +732,14 @@ class TestGRE(VppTestCase):
         #  - assign an IP Address
         #  - Add a route via the tunnel
         #
         #  - assign an IP Address
         #  - Add a route via the tunnel
         #
-        gre_if = VppGreInterface(self,
-                                 self.pg2.local_ip6,
-                                 "1002::1")
+        gre_if = VppGreInterface(self, self.pg2.local_ip6, "1002::1")
         gre_if.add_vpp_config()
         gre_if.admin_up()
         gre_if.config_ip6()
 
         gre_if.add_vpp_config()
         gre_if.admin_up()
         gre_if.config_ip6()
 
-        route_via_tun = VppIpRoute(self, "4004::1", 128,
-                                   [VppRoutePath("0::0",
-                                                 gre_if.sw_if_index)])
+        route_via_tun = VppIpRoute(
+            self, "4004::1", 128, [VppRoutePath("0::0", gre_if.sw_if_index)]
+        )
 
         route_via_tun.add_vpp_config()
 
 
         route_via_tun.add_vpp_config()
 
@@ -728,15 +751,18 @@ class TestGRE(VppTestCase):
         #
         tx = self.create_stream_ip6(self.pg2, "5005::1", "4004::1")
         self.send_and_assert_no_replies(
         #
         tx = self.create_stream_ip6(self.pg2, "5005::1", "4004::1")
         self.send_and_assert_no_replies(
-            self.pg2, tx,
-            "GRE packets forwarded without DIP resolved")
+            self.pg2, tx, "GRE packets forwarded without DIP resolved"
+        )
 
         #
         # Add a route that resolves the tunnel's destination
         #
 
         #
         # Add a route that resolves the tunnel's destination
         #
-        route_tun_dst = VppIpRoute(self, "1002::1", 128,
-                                   [VppRoutePath(self.pg2.remote_ip6,
-                                                 self.pg2.sw_if_index)])
+        route_tun_dst = VppIpRoute(
+            self,
+            "1002::1",
+            128,
+            [VppRoutePath(self.pg2.remote_ip6, self.pg2.sw_if_index)],
+        )
         route_tun_dst.add_vpp_config()
 
         #
         route_tun_dst.add_vpp_config()
 
         #
@@ -745,17 +771,14 @@ class TestGRE(VppTestCase):
         #
         tx = self.create_stream_ip6(self.pg2, "5005::1", "4004::1")
         rx = self.send_and_expect(self.pg2, tx, self.pg2)
         #
         tx = self.create_stream_ip6(self.pg2, "5005::1", "4004::1")
         rx = self.send_and_expect(self.pg2, tx, self.pg2)
-        self.verify_tunneled_6o6(self.pg2, rx, tx,
-                                 self.pg2.local_ip6, "1002::1")
+        self.verify_tunneled_6o6(self.pg2, rx, tx, self.pg2.local_ip6, "1002::1")
 
         #
         # Test decap. decapped packets go out pg1
         #
 
         #
         # Test decap. decapped packets go out pg1
         #
-        tx = self.create_tunnel_stream_6o6(self.pg2,
-                                           "1002::1",
-                                           self.pg2.local_ip6,
-                                           "2001::1",
-                                           self.pg1.remote_ip6)
+        tx = self.create_tunnel_stream_6o6(
+            self.pg2, "1002::1", self.pg2.local_ip6, "2001::1", self.pg1.remote_ip6
+        )
         rx = self.send_and_expect(self.pg2, tx, self.pg1)
 
         #
         rx = self.send_and_expect(self.pg2, tx, self.pg1)
 
         #
@@ -767,16 +790,15 @@ class TestGRE(VppTestCase):
         #
         # Send v4 over v6
         #
         #
         # Send v4 over v6
         #
-        route4_via_tun = VppIpRoute(self, "1.1.1.1", 32,
-                                    [VppRoutePath("0.0.0.0",
-                                                  gre_if.sw_if_index)])
+        route4_via_tun = VppIpRoute(
+            self, "1.1.1.1", 32, [VppRoutePath("0.0.0.0", gre_if.sw_if_index)]
+        )
         route4_via_tun.add_vpp_config()
 
         tx = self.create_stream_ip4(self.pg0, "1.1.1.2", "1.1.1.1")
         rx = self.send_and_expect(self.pg0, tx, self.pg2)
 
         route4_via_tun.add_vpp_config()
 
         tx = self.create_stream_ip4(self.pg0, "1.1.1.2", "1.1.1.1")
         rx = self.send_and_expect(self.pg0, tx, self.pg2)
 
-        self.verify_tunneled_4o6(self.pg0, rx, tx,
-                                 self.pg2.local_ip6, "1002::1")
+        self.verify_tunneled_4o6(self.pg0, rx, tx, self.pg2.local_ip6, "1002::1")
 
         #
         # test case cleanup
 
         #
         # test case cleanup
@@ -790,7 +812,7 @@ class TestGRE(VppTestCase):
         self.pg1.unconfig_ip6()
 
     def test_gre_vrf(self):
         self.pg1.unconfig_ip6()
 
     def test_gre_vrf(self):
-        """ GRE tunnel VRF Tests """
+        """GRE tunnel VRF Tests"""
 
         e = VppEnum.vl_api_tunnel_encap_decap_flags_t
 
 
         e = VppEnum.vl_api_tunnel_encap_decap_flags_t
 
@@ -802,11 +824,15 @@ class TestGRE(VppTestCase):
         #  - assign an IP Addres
         #
         gre_if = VppGreInterface(
         #  - assign an IP Addres
         #
         gre_if = VppGreInterface(
-            self, self.pg1.local_ip4,
+            self,
+            self.pg1.local_ip4,
             "2.2.2.2",
             outer_table_id=1,
             "2.2.2.2",
             outer_table_id=1,
-            flags=(e.TUNNEL_API_ENCAP_DECAP_FLAG_ENCAP_COPY_DSCP |
-                   e.TUNNEL_API_ENCAP_DECAP_FLAG_ENCAP_COPY_ECN))
+            flags=(
+                e.TUNNEL_API_ENCAP_DECAP_FLAG_ENCAP_COPY_DSCP
+                | e.TUNNEL_API_ENCAP_DECAP_FLAG_ENCAP_COPY_ECN
+            ),
+        )
 
         gre_if.add_vpp_config()
         gre_if.admin_up()
 
         gre_if.add_vpp_config()
         gre_if.admin_up()
@@ -815,18 +841,22 @@ class TestGRE(VppTestCase):
         #
         # Add a route via the tunnel - in the overlay
         #
         #
         # Add a route via the tunnel - in the overlay
         #
-        route_via_tun = VppIpRoute(self, "9.9.9.9", 32,
-                                   [VppRoutePath("0.0.0.0",
-                                                 gre_if.sw_if_index)])
+        route_via_tun = VppIpRoute(
+            self, "9.9.9.9", 32, [VppRoutePath("0.0.0.0", gre_if.sw_if_index)]
+        )
         route_via_tun.add_vpp_config()
 
         #
         # Add a route that resolves the tunnel's destination - in the
         # underlay table
         #
         route_via_tun.add_vpp_config()
 
         #
         # Add a route that resolves the tunnel's destination - in the
         # underlay table
         #
-        route_tun_dst = VppIpRoute(self, "2.2.2.2", 32, table_id=1,
-                                   paths=[VppRoutePath(self.pg1.remote_ip4,
-                                                       self.pg1.sw_if_index)])
+        route_tun_dst = VppIpRoute(
+            self,
+            "2.2.2.2",
+            32,
+            table_id=1,
+            paths=[VppRoutePath(self.pg1.remote_ip4, self.pg1.sw_if_index)],
+        )
         route_tun_dst.add_vpp_config()
 
         #
         route_tun_dst.add_vpp_config()
 
         #
@@ -835,12 +865,11 @@ class TestGRE(VppTestCase):
         #  - packets are GRE encapped
         #
         self.vapi.cli("clear trace")
         #  - packets are GRE encapped
         #
         self.vapi.cli("clear trace")
-        tx = self.create_stream_ip4(self.pg0, "5.5.5.5", "9.9.9.9",
-                                    dscp=5, ecn=3)
+        tx = self.create_stream_ip4(self.pg0, "5.5.5.5", "9.9.9.9", dscp=5, ecn=3)
         rx = self.send_and_expect(self.pg0, tx, self.pg1)
         rx = self.send_and_expect(self.pg0, tx, self.pg1)
-        self.verify_tunneled_4o4(self.pg1, rx, tx,
-                                 self.pg1.local_ip4, "2.2.2.2",
-                                 dscp=5, ecn=3)
+        self.verify_tunneled_4o4(
+            self.pg1, rx, tx, self.pg1.local_ip4, "2.2.2.2", dscp=5, ecn=3
+        )
 
         #
         # Send tunneled packets that match the created tunnel and
 
         #
         # Send tunneled packets that match the created tunnel and
@@ -848,11 +877,13 @@ class TestGRE(VppTestCase):
         # does not happen in the encap table
         #
         self.vapi.cli("clear trace")
         # does not happen in the encap table
         #
         self.vapi.cli("clear trace")
-        tx = self.create_tunnel_stream_4o4(self.pg1,
-                                           "2.2.2.2",
-                                           self.pg1.local_ip4,
-                                           self.pg0.local_ip4,
-                                           self.pg0.remote_ip4)
+        tx = self.create_tunnel_stream_4o4(
+            self.pg1,
+            "2.2.2.2",
+            self.pg1.local_ip4,
+            self.pg0.local_ip4,
+            self.pg0.remote_ip4,
+        )
         rx = self.send_and_expect(self.pg1, tx, self.pg0)
         self.verify_decapped_4o4(self.pg0, rx, tx)
 
         rx = self.send_and_expect(self.pg1, tx, self.pg0)
         self.verify_decapped_4o4(self.pg0, rx, tx)
 
@@ -865,14 +896,16 @@ class TestGRE(VppTestCase):
         #
         self.pg2.config_ip4()
         self.vapi.cli("clear trace")
         #
         self.pg2.config_ip4()
         self.vapi.cli("clear trace")
-        tx = self.create_tunnel_stream_4o4(self.pg2,
-                                           "2.2.2.2",
-                                           self.pg1.local_ip4,
-                                           self.pg0.local_ip4,
-                                           self.pg0.remote_ip4)
+        tx = self.create_tunnel_stream_4o4(
+            self.pg2,
+            "2.2.2.2",
+            self.pg1.local_ip4,
+            self.pg0.local_ip4,
+            self.pg0.remote_ip4,
+        )
         rx = self.send_and_assert_no_replies(
         rx = self.send_and_assert_no_replies(
-            self.pg2, tx,
-            "GRE decap packets in wrong VRF")
+            self.pg2, tx, "GRE decap packets in wrong VRF"
+        )
 
         self.pg2.unconfig_ip4()
 
 
         self.pg2.unconfig_ip4()
 
@@ -884,17 +917,23 @@ class TestGRE(VppTestCase):
         gre_if.remove_vpp_config()
 
     def test_gre_l2(self):
         gre_if.remove_vpp_config()
 
     def test_gre_l2(self):
-        """ GRE tunnel L2 Tests """
+        """GRE tunnel L2 Tests"""
 
         #
         # Add routes to resolve the tunnel destinations
         #
 
         #
         # Add routes to resolve the tunnel destinations
         #
-        route_tun1_dst = VppIpRoute(self, "2.2.2.2", 32,
-                                    [VppRoutePath(self.pg0.remote_ip4,
-                                                  self.pg0.sw_if_index)])
-        route_tun2_dst = VppIpRoute(self, "2.2.2.3", 32,
-                                    [VppRoutePath(self.pg0.remote_ip4,
-                                                  self.pg0.sw_if_index)])
+        route_tun1_dst = VppIpRoute(
+            self,
+            "2.2.2.2",
+            32,
+            [VppRoutePath(self.pg0.remote_ip4, self.pg0.sw_if_index)],
+        )
+        route_tun2_dst = VppIpRoute(
+            self,
+            "2.2.2.3",
+            32,
+            [VppRoutePath(self.pg0.remote_ip4, self.pg0.sw_if_index)],
+        )
 
         route_tun1_dst.add_vpp_config()
         route_tun2_dst.add_vpp_config()
 
         route_tun1_dst.add_vpp_config()
         route_tun2_dst.add_vpp_config()
@@ -902,53 +941,49 @@ class TestGRE(VppTestCase):
         #
         # Create 2 L2 GRE tunnels and x-connect them
         #
         #
         # Create 2 L2 GRE tunnels and x-connect them
         #
-        gre_if1 = VppGreInterface(self, self.pg0.local_ip4,
-                                  "2.2.2.2",
-                                  type=(VppEnum.vl_api_gre_tunnel_type_t.
-                                        GRE_API_TUNNEL_TYPE_TEB))
-        gre_if2 = VppGreInterface(self, self.pg0.local_ip4,
-                                  "2.2.2.3",
-                                  type=(VppEnum.vl_api_gre_tunnel_type_t.
-                                        GRE_API_TUNNEL_TYPE_TEB))
+        gre_if1 = VppGreInterface(
+            self,
+            self.pg0.local_ip4,
+            "2.2.2.2",
+            type=(VppEnum.vl_api_gre_tunnel_type_t.GRE_API_TUNNEL_TYPE_TEB),
+        )
+        gre_if2 = VppGreInterface(
+            self,
+            self.pg0.local_ip4,
+            "2.2.2.3",
+            type=(VppEnum.vl_api_gre_tunnel_type_t.GRE_API_TUNNEL_TYPE_TEB),
+        )
         gre_if1.add_vpp_config()
         gre_if2.add_vpp_config()
 
         gre_if1.admin_up()
         gre_if2.admin_up()
 
         gre_if1.add_vpp_config()
         gre_if2.add_vpp_config()
 
         gre_if1.admin_up()
         gre_if2.admin_up()
 
-        self.vapi.sw_interface_set_l2_xconnect(gre_if1.sw_if_index,
-                                               gre_if2.sw_if_index,
-                                               enable=1)
-        self.vapi.sw_interface_set_l2_xconnect(gre_if2.sw_if_index,
-                                               gre_if1.sw_if_index,
-                                               enable=1)
+        self.vapi.sw_interface_set_l2_xconnect(
+            gre_if1.sw_if_index, gre_if2.sw_if_index, enable=1
+        )
+        self.vapi.sw_interface_set_l2_xconnect(
+            gre_if2.sw_if_index, gre_if1.sw_if_index, enable=1
+        )
 
         #
         # Send in tunnel encapped L2. expect out tunnel encapped L2
         # in both directions
         #
 
         #
         # Send in tunnel encapped L2. expect out tunnel encapped L2
         # in both directions
         #
-        tx = self.create_tunnel_stream_l2o4(self.pg0,
-                                            "2.2.2.2",
-                                            self.pg0.local_ip4)
+        tx = self.create_tunnel_stream_l2o4(self.pg0, "2.2.2.2", self.pg0.local_ip4)
         rx = self.send_and_expect(self.pg0, tx, self.pg0)
         rx = self.send_and_expect(self.pg0, tx, self.pg0)
-        self.verify_tunneled_l2o4(self.pg0, rx, tx,
-                                  self.pg0.local_ip4,
-                                  "2.2.2.3")
+        self.verify_tunneled_l2o4(self.pg0, rx, tx, self.pg0.local_ip4, "2.2.2.3")
 
 
-        tx = self.create_tunnel_stream_l2o4(self.pg0,
-                                            "2.2.2.3",
-                                            self.pg0.local_ip4)
+        tx = self.create_tunnel_stream_l2o4(self.pg0, "2.2.2.3", self.pg0.local_ip4)
         rx = self.send_and_expect(self.pg0, tx, self.pg0)
         rx = self.send_and_expect(self.pg0, tx, self.pg0)
-        self.verify_tunneled_l2o4(self.pg0, rx, tx,
-                                  self.pg0.local_ip4,
-                                  "2.2.2.2")
+        self.verify_tunneled_l2o4(self.pg0, rx, tx, self.pg0.local_ip4, "2.2.2.2")
 
 
-        self.vapi.sw_interface_set_l2_xconnect(gre_if1.sw_if_index,
-                                               gre_if2.sw_if_index,
-                                               enable=0)
-        self.vapi.sw_interface_set_l2_xconnect(gre_if2.sw_if_index,
-                                               gre_if1.sw_if_index,
-                                               enable=0)
+        self.vapi.sw_interface_set_l2_xconnect(
+            gre_if1.sw_if_index, gre_if2.sw_if_index, enable=0
+        )
+        self.vapi.sw_interface_set_l2_xconnect(
+            gre_if2.sw_if_index, gre_if1.sw_if_index, enable=0
+        )
 
         #
         # Create a VLAN sub-interfaces on the GRE TEB interfaces
 
         #
         # Create a VLAN sub-interfaces on the GRE TEB interfaces
@@ -963,47 +998,39 @@ class TestGRE(VppTestCase):
         gre_if_11.admin_up()
         gre_if_12.admin_up()
 
         gre_if_11.admin_up()
         gre_if_12.admin_up()
 
-        self.vapi.sw_interface_set_l2_xconnect(gre_if_11.sw_if_index,
-                                               gre_if_12.sw_if_index,
-                                               enable=1)
-        self.vapi.sw_interface_set_l2_xconnect(gre_if_12.sw_if_index,
-                                               gre_if_11.sw_if_index,
-                                               enable=1)
+        self.vapi.sw_interface_set_l2_xconnect(
+            gre_if_11.sw_if_index, gre_if_12.sw_if_index, enable=1
+        )
+        self.vapi.sw_interface_set_l2_xconnect(
+            gre_if_12.sw_if_index, gre_if_11.sw_if_index, enable=1
+        )
 
         #
         # Configure both to pop thier respective VLAN tags,
         # so that during the x-coonect they will subsequently push
         #
         self.vapi.l2_interface_vlan_tag_rewrite(
 
         #
         # Configure both to pop thier respective VLAN tags,
         # so that during the x-coonect they will subsequently push
         #
         self.vapi.l2_interface_vlan_tag_rewrite(
-            sw_if_index=gre_if_12.sw_if_index, vtr_op=L2_VTR_OP.L2_POP_1,
-            push_dot1q=12)
+            sw_if_index=gre_if_12.sw_if_index, vtr_op=L2_VTR_OP.L2_POP_1, push_dot1q=12
+        )
         self.vapi.l2_interface_vlan_tag_rewrite(
         self.vapi.l2_interface_vlan_tag_rewrite(
-            sw_if_index=gre_if_11.sw_if_index, vtr_op=L2_VTR_OP.L2_POP_1,
-            push_dot1q=11)
+            sw_if_index=gre_if_11.sw_if_index, vtr_op=L2_VTR_OP.L2_POP_1, push_dot1q=11
+        )
 
         #
         # Send traffic in both directiond - expect the VLAN tags to
         # be swapped.
         #
 
         #
         # Send traffic in both directiond - expect the VLAN tags to
         # be swapped.
         #
-        tx = self.create_tunnel_stream_vlano4(self.pg0,
-                                              "2.2.2.2",
-                                              self.pg0.local_ip4,
-                                              11)
+        tx = self.create_tunnel_stream_vlano4(
+            self.pg0, "2.2.2.2", self.pg0.local_ip4, 11
+        )
         rx = self.send_and_expect(self.pg0, tx, self.pg0)
         rx = self.send_and_expect(self.pg0, tx, self.pg0)
-        self.verify_tunneled_vlano4(self.pg0, rx, tx,
-                                    self.pg0.local_ip4,
-                                    "2.2.2.3",
-                                    12)
-
-        tx = self.create_tunnel_stream_vlano4(self.pg0,
-                                              "2.2.2.3",
-                                              self.pg0.local_ip4,
-                                              12)
+        self.verify_tunneled_vlano4(self.pg0, rx, tx, self.pg0.local_ip4, "2.2.2.3", 12)
+
+        tx = self.create_tunnel_stream_vlano4(
+            self.pg0, "2.2.2.3", self.pg0.local_ip4, 12
+        )
         rx = self.send_and_expect(self.pg0, tx, self.pg0)
         rx = self.send_and_expect(self.pg0, tx, self.pg0)
-        self.verify_tunneled_vlano4(self.pg0, rx, tx,
-                                    self.pg0.local_ip4,
-                                    "2.2.2.2",
-                                    11)
+        self.verify_tunneled_vlano4(self.pg0, rx, tx, self.pg0.local_ip4, "2.2.2.2", 11)
 
         #
         # Cleanup Test resources
 
         #
         # Cleanup Test resources
@@ -1016,16 +1043,14 @@ class TestGRE(VppTestCase):
         route_tun2_dst.add_vpp_config()
 
     def test_gre_loop(self):
         route_tun2_dst.add_vpp_config()
 
     def test_gre_loop(self):
-        """ GRE tunnel loop Tests """
+        """GRE tunnel loop Tests"""
 
         #
         # Create an L3 GRE tunnel.
         #  - set it admin up
         #  - assign an IP Addres
         #
 
         #
         # Create an L3 GRE tunnel.
         #  - set it admin up
         #  - assign an IP Addres
         #
-        gre_if = VppGreInterface(self,
-                                 self.pg0.local_ip4,
-                                 "1.1.1.2")
+        gre_if = VppGreInterface(self, self.pg0.local_ip4, "1.1.1.2")
         gre_if.add_vpp_config()
         gre_if.admin_up()
         gre_if.config_ip4()
         gre_if.add_vpp_config()
         gre_if.admin_up()
         gre_if.config_ip4()
@@ -1035,9 +1060,9 @@ class TestGRE(VppTestCase):
         # through the tunnel, hence forming a loop in the forwarding
         # graph
         #
         # through the tunnel, hence forming a loop in the forwarding
         # graph
         #
-        route_dst = VppIpRoute(self, "1.1.1.2", 32,
-                               [VppRoutePath("0.0.0.0",
-                                             gre_if.sw_if_index)])
+        route_dst = VppIpRoute(
+            self, "1.1.1.2", 32, [VppRoutePath("0.0.0.0", gre_if.sw_if_index)]
+        )
         route_dst.add_vpp_config()
 
         #
         route_dst.add_vpp_config()
 
         #
@@ -1051,8 +1076,7 @@ class TestGRE(VppTestCase):
         #
         # break the loop
         #
         #
         # break the loop
         #
-        route_dst.modify([VppRoutePath(self.pg1.remote_ip4,
-                                       self.pg1.sw_if_index)])
+        route_dst.modify([VppRoutePath(self.pg1.remote_ip4, self.pg1.sw_if_index)])
         route_dst.add_vpp_config()
 
         rx = self.send_and_expect(self.pg0, tx, self.pg1)
         route_dst.add_vpp_config()
 
         rx = self.send_and_expect(self.pg0, tx, self.pg1)
@@ -1060,15 +1084,14 @@ class TestGRE(VppTestCase):
         #
         # a good route throught the tunnel to check it restacked
         #
         #
         # a good route throught the tunnel to check it restacked
         #
-        route_via_tun_2 = VppIpRoute(self, "2.2.2.2", 32,
-                                     [VppRoutePath("0.0.0.0",
-                                                   gre_if.sw_if_index)])
+        route_via_tun_2 = VppIpRoute(
+            self, "2.2.2.2", 32, [VppRoutePath("0.0.0.0", gre_if.sw_if_index)]
+        )
         route_via_tun_2.add_vpp_config()
 
         tx = self.create_stream_ip4(self.pg0, "2.2.2.3", "2.2.2.2")
         rx = self.send_and_expect(self.pg0, tx, self.pg1)
         route_via_tun_2.add_vpp_config()
 
         tx = self.create_stream_ip4(self.pg0, "2.2.2.3", "2.2.2.2")
         rx = self.send_and_expect(self.pg0, tx, self.pg1)
-        self.verify_tunneled_4o4(self.pg1, rx, tx,
-                                 self.pg0.local_ip4, "1.1.1.2")
+        self.verify_tunneled_4o4(self.pg1, rx, tx, self.pg0.local_ip4, "1.1.1.2")
 
         #
         # cleanup
 
         #
         # cleanup
@@ -1077,7 +1100,7 @@ class TestGRE(VppTestCase):
         gre_if.remove_vpp_config()
 
     def test_mgre(self):
         gre_if.remove_vpp_config()
 
     def test_mgre(self):
-        """ mGRE IPv4 tunnel Tests """
+        """mGRE IPv4 tunnel Tests"""
 
         for itf in self.pg_interfaces[3:]:
             #
 
         for itf in self.pg_interfaces[3:]:
             #
@@ -1092,11 +1115,12 @@ class TestGRE(VppTestCase):
             #  - assign an IP Addres
             #  - Add a route via the tunnel
             #
             #  - assign an IP Addres
             #  - Add a route via the tunnel
             #
-            gre_if = VppGreInterface(self,
-                                     itf.local_ip4,
-                                     "0.0.0.0",
-                                     mode=(VppEnum.vl_api_tunnel_mode_t.
-                                           TUNNEL_API_MODE_MP))
+            gre_if = VppGreInterface(
+                self,
+                itf.local_ip4,
+                "0.0.0.0",
+                mode=(VppEnum.vl_api_tunnel_mode_t.TUNNEL_API_MODE_MP),
+            )
             gre_if.add_vpp_config()
             gre_if.admin_up()
             gre_if.config_ip4()
             gre_if.add_vpp_config()
             gre_if.admin_up()
             gre_if.config_ip4()
@@ -1109,11 +1133,13 @@ class TestGRE(VppTestCase):
             # ensure we don't match to the tunnel if the source address
             # is all zeros
             #
             # ensure we don't match to the tunnel if the source address
             # is all zeros
             #
-            tx = self.create_tunnel_stream_4o4(self.pg0,
-                                               "0.0.0.0",
-                                               itf.local_ip4,
-                                               self.pg0.local_ip4,
-                                               self.pg0.remote_ip4)
+            tx = self.create_tunnel_stream_4o4(
+                self.pg0,
+                "0.0.0.0",
+                itf.local_ip4,
+                self.pg0.local_ip4,
+                self.pg0.remote_ip4,
+            )
             self.send_and_assert_no_replies(self.pg0, tx)
 
             #
             self.send_and_assert_no_replies(self.pg0, tx)
 
             #
@@ -1127,9 +1153,11 @@ class TestGRE(VppTestCase):
                 # route traffic via the peer
                 #
                 route_via_tun = VppIpRoute(
                 # route traffic via the peer
                 #
                 route_via_tun = VppIpRoute(
-                    self, route_addr, 32,
-                    [VppRoutePath(gre_if._remote_hosts[ii].ip4,
-                                  gre_if.sw_if_index)])
+                    self,
+                    route_addr,
+                    32,
+                    [VppRoutePath(gre_if._remote_hosts[ii].ip4, gre_if.sw_if_index)],
+                )
                 route_via_tun.add_vpp_config()
 
                 # all packets dropped at this point
                 route_via_tun.add_vpp_config()
 
                 # all packets dropped at this point
@@ -1142,9 +1170,12 @@ class TestGRE(VppTestCase):
                 #
                 # Add a TEIB entry resolves the peer
                 #
                 #
                 # Add a TEIB entry resolves the peer
                 #
-                teib = VppTeib(self, gre_if,
-                               gre_if._remote_hosts[ii].ip4,
-                               itf._remote_hosts[ii].ip4)
+                teib = VppTeib(
+                    self,
+                    gre_if,
+                    gre_if._remote_hosts[ii].ip4,
+                    itf._remote_hosts[ii].ip4,
+                )
                 teib.add_vpp_config()
 
                 #
                 teib.add_vpp_config()
 
                 #
@@ -1152,15 +1183,17 @@ class TestGRE(VppTestCase):
                 #  - packets are GRE encapped
                 #
                 rx = self.send_and_expect(self.pg0, tx_e, itf)
                 #  - packets are GRE encapped
                 #
                 rx = self.send_and_expect(self.pg0, tx_e, itf)
-                self.verify_tunneled_4o4(self.pg0, rx, tx_e,
-                                         itf.local_ip4,
-                                         itf._remote_hosts[ii].ip4)
-
-                tx_i = self.create_tunnel_stream_4o4(self.pg0,
-                                                     itf._remote_hosts[ii].ip4,
-                                                     itf.local_ip4,
-                                                     self.pg0.local_ip4,
-                                                     self.pg0.remote_ip4)
+                self.verify_tunneled_4o4(
+                    self.pg0, rx, tx_e, itf.local_ip4, itf._remote_hosts[ii].ip4
+                )
+
+                tx_i = self.create_tunnel_stream_4o4(
+                    self.pg0,
+                    itf._remote_hosts[ii].ip4,
+                    itf.local_ip4,
+                    self.pg0.local_ip4,
+                    self.pg0.remote_ip4,
+                )
                 rx = self.send_and_expect(self.pg0, tx_i, self.pg0)
                 self.verify_decapped_4o4(self.pg0, rx, tx_i)
 
                 rx = self.send_and_expect(self.pg0, tx_i, self.pg0)
                 self.verify_decapped_4o4(self.pg0, rx, tx_i)
 
@@ -1173,9 +1206,9 @@ class TestGRE(VppTestCase):
 
                 teib.add_vpp_config()
                 rx = self.send_and_expect(self.pg0, tx_e, itf)
 
                 teib.add_vpp_config()
                 rx = self.send_and_expect(self.pg0, tx_e, itf)
-                self.verify_tunneled_4o4(self.pg0, rx, tx_e,
-                                         itf.local_ip4,
-                                         itf._remote_hosts[ii].ip4)
+                self.verify_tunneled_4o4(
+                    self.pg0, rx, tx_e, itf.local_ip4, itf._remote_hosts[ii].ip4
+                )
                 rx = self.send_and_expect(self.pg0, tx_i, self.pg0)
                 self.verify_decapped_4o4(self.pg0, rx, tx_i)
 
                 rx = self.send_and_expect(self.pg0, tx_i, self.pg0)
                 self.verify_decapped_4o4(self.pg0, rx, tx_i)
 
@@ -1185,9 +1218,9 @@ class TestGRE(VppTestCase):
                 gre_if.admin_down()
                 gre_if.admin_up()
                 rx = self.send_and_expect(self.pg0, tx_e, itf)
                 gre_if.admin_down()
                 gre_if.admin_up()
                 rx = self.send_and_expect(self.pg0, tx_e, itf)
-                self.verify_tunneled_4o4(self.pg0, rx, tx_e,
-                                         itf.local_ip4,
-                                         itf._remote_hosts[ii].ip4)
+                self.verify_tunneled_4o4(
+                    self.pg0, rx, tx_e, itf.local_ip4, itf._remote_hosts[ii].ip4
+                )
                 rx = self.send_and_expect(self.pg0, tx_i, self.pg0)
                 self.verify_decapped_4o4(self.pg0, rx, tx_i)
 
                 rx = self.send_and_expect(self.pg0, tx_i, self.pg0)
                 self.verify_decapped_4o4(self.pg0, rx, tx_i)
 
@@ -1195,7 +1228,7 @@ class TestGRE(VppTestCase):
             gre_if.unconfig_ip4()
 
     def test_mgre6(self):
             gre_if.unconfig_ip4()
 
     def test_mgre6(self):
-        """ mGRE IPv6 tunnel Tests """
+        """mGRE IPv6 tunnel Tests"""
 
         self.pg0.config_ip6()
         self.pg0.resolve_ndp()
 
         self.pg0.config_ip6()
         self.pg0.resolve_ndp()
@@ -1220,9 +1253,9 @@ class TestGRE(VppTestCase):
                 self,
                 itf.local_ip6,
                 "::",
                 self,
                 itf.local_ip6,
                 "::",
-                mode=(VppEnum.vl_api_tunnel_mode_t.
-                      TUNNEL_API_MODE_MP),
-                flags=e.TUNNEL_API_ENCAP_DECAP_FLAG_ENCAP_COPY_DSCP)
+                mode=(VppEnum.vl_api_tunnel_mode_t.TUNNEL_API_MODE_MP),
+                flags=e.TUNNEL_API_ENCAP_DECAP_FLAG_ENCAP_COPY_DSCP,
+            )
 
             gre_if.add_vpp_config()
             gre_if.admin_up()
 
             gre_if.add_vpp_config()
             gre_if.admin_up()
@@ -1238,36 +1271,43 @@ class TestGRE(VppTestCase):
                 #
                 # Add a TEIB entry resolves the peer
                 #
                 #
                 # Add a TEIB entry resolves the peer
                 #
-                teib = VppTeib(self, gre_if,
-                               gre_if._remote_hosts[ii].ip6,
-                               itf._remote_hosts[ii].ip6)
+                teib = VppTeib(
+                    self,
+                    gre_if,
+                    gre_if._remote_hosts[ii].ip6,
+                    itf._remote_hosts[ii].ip6,
+                )
                 teib.add_vpp_config()
 
                 #
                 # route traffic via the peer
                 #
                 route_via_tun = VppIpRoute(
                 teib.add_vpp_config()
 
                 #
                 # route traffic via the peer
                 #
                 route_via_tun = VppIpRoute(
-                    self, route_addr, 128,
-                    [VppRoutePath(gre_if._remote_hosts[ii].ip6,
-                                  gre_if.sw_if_index)])
+                    self,
+                    route_addr,
+                    128,
+                    [VppRoutePath(gre_if._remote_hosts[ii].ip6, gre_if.sw_if_index)],
+                )
                 route_via_tun.add_vpp_config()
 
                 #
                 # Send a packet stream that is routed into the tunnel
                 #  - packets are GRE encapped
                 #
                 route_via_tun.add_vpp_config()
 
                 #
                 # Send a packet stream that is routed into the tunnel
                 #  - packets are GRE encapped
                 #
-                tx_e = self.create_stream_ip6(self.pg0, "5::5", route_addr,
-                                              dscp=2, ecn=1)
+                tx_e = self.create_stream_ip6(
+                    self.pg0, "5::5", route_addr, dscp=2, ecn=1
+                )
                 rx = self.send_and_expect(self.pg0, tx_e, itf)
                 rx = self.send_and_expect(self.pg0, tx_e, itf)
-                self.verify_tunneled_6o6(self.pg0, rx, tx_e,
-                                         itf.local_ip6,
-                                         itf._remote_hosts[ii].ip6,
-                                         dscp=2)
-                tx_i = self.create_tunnel_stream_6o6(self.pg0,
-                                                     itf._remote_hosts[ii].ip6,
-                                                     itf.local_ip6,
-                                                     self.pg0.local_ip6,
-                                                     self.pg0.remote_ip6)
+                self.verify_tunneled_6o6(
+                    self.pg0, rx, tx_e, itf.local_ip6, itf._remote_hosts[ii].ip6, dscp=2
+                )
+                tx_i = self.create_tunnel_stream_6o6(
+                    self.pg0,
+                    itf._remote_hosts[ii].ip6,
+                    itf.local_ip6,
+                    self.pg0.local_ip6,
+                    self.pg0.remote_ip6,
+                )
                 rx = self.send_and_expect(self.pg0, tx_i, self.pg0)
                 self.verify_decapped_6o6(self.pg0, rx, tx_i)
 
                 rx = self.send_and_expect(self.pg0, tx_i, self.pg0)
                 self.verify_decapped_6o6(self.pg0, rx, tx_i)
 
@@ -1279,10 +1319,9 @@ class TestGRE(VppTestCase):
 
                 teib.add_vpp_config()
                 rx = self.send_and_expect(self.pg0, tx_e, itf)
 
                 teib.add_vpp_config()
                 rx = self.send_and_expect(self.pg0, tx_e, itf)
-                self.verify_tunneled_6o6(self.pg0, rx, tx_e,
-                                         itf.local_ip6,
-                                         itf._remote_hosts[ii].ip6,
-                                         dscp=2)
+                self.verify_tunneled_6o6(
+                    self.pg0, rx, tx_e, itf.local_ip6, itf._remote_hosts[ii].ip6, dscp=2
+                )
                 rx = self.send_and_expect(self.pg0, tx_i, self.pg0)
                 self.verify_decapped_6o6(self.pg0, rx, tx_i)
 
                 rx = self.send_and_expect(self.pg0, tx_i, self.pg0)
                 self.verify_decapped_6o6(self.pg0, rx, tx_i)
 
@@ -1292,5 +1331,5 @@ class TestGRE(VppTestCase):
         self.pg0.unconfig_ip6()
 
 
         self.pg0.unconfig_ip6()
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index 6c68299..7e6b03c 100644 (file)
@@ -26,7 +26,7 @@ from vpp_interface import VppInterface
 
 
 class TestGRO(VppTestCase):
 
 
 class TestGRO(VppTestCase):
-    """ GRO Test Case """
+    """GRO Test Case"""
 
     @classmethod
     def setUpClass(self):
 
     @classmethod
     def setUpClass(self):
@@ -63,17 +63,18 @@ class TestGRO(VppTestCase):
                 i.admin_down()
 
     def test_gro(self):
                 i.admin_down()
 
     def test_gro(self):
-        """ GRO test """
+        """GRO test"""
 
         n_packets = 124
         #
         # Send 1500 bytes frame with gro disabled
         #
 
         n_packets = 124
         #
         # Send 1500 bytes frame with gro disabled
         #
-        p4 = (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-              IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4,
-                 flags='DF') /
-              TCP(sport=1234, dport=4321) /
-              Raw(b'\xa5' * 1460))
+        p4 = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4, flags="DF")
+            / TCP(sport=1234, dport=4321)
+            / Raw(b"\xa5" * 1460)
+        )
 
         rxs = self.send_and_expect(self.pg0, n_packets * p4, self.pg1)
         for rx in rxs:
 
         rxs = self.send_and_expect(self.pg0, n_packets * p4, self.pg1)
         for rx in rxs:
@@ -91,11 +92,14 @@ class TestGRO(VppTestCase):
         p = []
         s = 0
         for n in range(0, n_packets):
         p = []
         s = 0
         for n in range(0, n_packets):
-            p.append((Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-                      IP(src=self.pg0.remote_ip4, dst=self.pg2.remote_ip4,
-                         flags='DF') /
-                      TCP(sport=1234, dport=4321, seq=s, ack=n, flags='A') /
-                      Raw(b'\xa5' * 1460)))
+            p.append(
+                (
+                    Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+                    / IP(src=self.pg0.remote_ip4, dst=self.pg2.remote_ip4, flags="DF")
+                    / TCP(sport=1234, dport=4321, seq=s, ack=n, flags="A")
+                    / Raw(b"\xa5" * 1460)
+                )
+            )
             s += 1460
 
         rxs = self.send_and_expect(self.pg0, p, self.pg2, n_rx=2)
             s += 1460
 
         rxs = self.send_and_expect(self.pg0, p, self.pg2, n_rx=2)
@@ -110,14 +114,15 @@ class TestGRO(VppTestCase):
             self.assertEqual(rx[IP].len, 64280)  # 1460 * 44 + 40 < 65536
             self.assertEqual(rx[TCP].sport, 1234)
             self.assertEqual(rx[TCP].dport, 4321)
             self.assertEqual(rx[IP].len, 64280)  # 1460 * 44 + 40 < 65536
             self.assertEqual(rx[TCP].sport, 1234)
             self.assertEqual(rx[TCP].dport, 4321)
-            self.assertEqual(rx[TCP].ack, (44*i - 1))
+            self.assertEqual(rx[TCP].ack, (44 * i - 1))
 
 
-        p4_temp = (Ether(src=self.pg2.remote_mac, dst=self.pg2.local_mac) /
-                   IP(src=self.pg2.remote_ip4, dst=self.pg0.remote_ip4,
-                      flags='DF') /
-                   TCP(sport=1234, dport=4321, flags='F'))
+        p4_temp = (
+            Ether(src=self.pg2.remote_mac, dst=self.pg2.local_mac)
+            / IP(src=self.pg2.remote_ip4, dst=self.pg0.remote_ip4, flags="DF")
+            / TCP(sport=1234, dport=4321, flags="F")
+        )
 
 
-        rxs = self.send_and_expect(self.pg2, 100*[p4_temp], self.pg0, n_rx=100)
+        rxs = self.send_and_expect(self.pg2, 100 * [p4_temp], self.pg0, n_rx=100)
         rx_coalesce = self.pg2.get_capture(1, timeout=1)
 
         rx0 = rx_coalesce[0]
         rx_coalesce = self.pg2.get_capture(1, timeout=1)
 
         rx0 = rx_coalesce[0]
@@ -144,12 +149,16 @@ class TestGRO(VppTestCase):
         p = []
         s = 0
         for n in range(0, 88):
         p = []
         s = 0
         for n in range(0, 88):
-            p.append((Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-                      IPv6(src=self.pg0.remote_ip6, dst=self.pg2.remote_ip6) /
-                      TCP(sport=1234, dport=4321, seq=s, ack=n, flags='A') /
-                      Raw(b'\xa5' * 1460)))
+            p.append(
+                (
+                    Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+                    / IPv6(src=self.pg0.remote_ip6, dst=self.pg2.remote_ip6)
+                    / TCP(sport=1234, dport=4321, seq=s, ack=n, flags="A")
+                    / Raw(b"\xa5" * 1460)
+                )
+            )
             s += 1460
             s += 1460
-        p[-1][TCP].flags = 'AP'  # push to flush second packet
+        p[-1][TCP].flags = "AP"  # push to flush second packet
 
         rxs = self.send_and_expect(self.pg0, p, self.pg2, n_rx=2)
 
 
         rxs = self.send_and_expect(self.pg0, p, self.pg2, n_rx=2)
 
@@ -163,7 +172,7 @@ class TestGRO(VppTestCase):
             self.assertEqual(rx[IPv6].plen, 64260)  # 1460 * 44 + 20 < 65536
             self.assertEqual(rx[TCP].sport, 1234)
             self.assertEqual(rx[TCP].dport, 4321)
             self.assertEqual(rx[IPv6].plen, 64260)  # 1460 * 44 + 20 < 65536
             self.assertEqual(rx[TCP].sport, 1234)
             self.assertEqual(rx[TCP].dport, 4321)
-            self.assertEqual(rx[TCP].ack, (44*i - 1))
+            self.assertEqual(rx[TCP].ack, (44 * i - 1))
 
         #
         # Send a series of 1500 bytes packets each followed by a packet with a
 
         #
         # Send a series of 1500 bytes packets each followed by a packet with a
@@ -172,18 +181,23 @@ class TestGRO(VppTestCase):
         p = []
         s = 0
         for n in range(0, n_packets):
         p = []
         s = 0
         for n in range(0, n_packets):
-            p.append((Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-                      IP(src=self.pg0.remote_ip4, dst=self.pg2.remote_ip4,
-                         flags='DF') /
-                      TCP(sport=1234, dport=4321, seq=s, ack=2*n, flags='A') /
-                      Raw(b'\xa5' * 1460)))
+            p.append(
+                (
+                    Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+                    / IP(src=self.pg0.remote_ip4, dst=self.pg2.remote_ip4, flags="DF")
+                    / TCP(sport=1234, dport=4321, seq=s, ack=2 * n, flags="A")
+                    / Raw(b"\xa5" * 1460)
+                )
+            )
             s += 1460
             s += 1460
-            p.append((Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-                      IP(src=self.pg0.remote_ip4, dst=self.pg2.remote_ip4,
-                         flags='DF') /
-                      TCP(sport=1234, dport=4321, seq=s, ack=2*n+1,
-                          flags='AP') /
-                      Raw(b'\xa5' * 1340)))
+            p.append(
+                (
+                    Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+                    / IP(src=self.pg0.remote_ip4, dst=self.pg2.remote_ip4, flags="DF")
+                    / TCP(sport=1234, dport=4321, seq=s, ack=2 * n + 1, flags="AP")
+                    / Raw(b"\xa5" * 1340)
+                )
+            )
             s += 1340
 
         rxs = self.send_and_expect(self.pg0, p, self.pg2, n_rx=n_packets)
             s += 1340
 
         rxs = self.send_and_expect(self.pg0, p, self.pg2, n_rx=n_packets)
@@ -197,7 +211,7 @@ class TestGRO(VppTestCase):
             self.assertEqual(rx[IP].len, 40 + 1460 + 1340)
             self.assertEqual(rx[TCP].sport, 1234)
             self.assertEqual(rx[TCP].dport, 4321)
             self.assertEqual(rx[IP].len, 40 + 1460 + 1340)
             self.assertEqual(rx[TCP].sport, 1234)
             self.assertEqual(rx[TCP].dport, 4321)
-            self.assertEqual(rx[TCP].ack, (2*i + 1))
+            self.assertEqual(rx[TCP].ack, (2 * i + 1))
             i += 1
 
         #
             i += 1
 
         #
@@ -209,20 +223,24 @@ class TestGRO(VppTestCase):
         s = 0
         for n in range(0, n_packets):
             i = self.pg0
         s = 0
         for n in range(0, n_packets):
             i = self.pg0
-            p.append((Ether(src=i.remote_mac, dst=i.local_mac) /
-                      IP(src=i.remote_ip4, dst=self.pg2.remote_ip4,
-                         flags='DF') /
-                      TCP(sport=1234, dport=4321, seq=s, ack=2*n, flags='A') /
-                      Raw(b'\xa5' * 1459)))
+            p.append(
+                (
+                    Ether(src=i.remote_mac, dst=i.local_mac)
+                    / IP(src=i.remote_ip4, dst=self.pg2.remote_ip4, flags="DF")
+                    / TCP(sport=1234, dport=4321, seq=s, ack=2 * n, flags="A")
+                    / Raw(b"\xa5" * 1459)
+                )
+            )
             s += 1459
             s += 1459
-            p2 = (Ether(src=i.remote_mac, dst=i.local_mac) /
-                  IP(src=i.remote_ip4, dst=self.pg2.remote_ip4,
-                     flags='DF', len=41) /
-                  TCP(sport=1234, dport=4321, seq=s, ack=2*n+1, flags='A') /
-                  Raw(b'\xa5'))
+            p2 = (
+                Ether(src=i.remote_mac, dst=i.local_mac)
+                / IP(src=i.remote_ip4, dst=self.pg2.remote_ip4, flags="DF", len=41)
+                / TCP(sport=1234, dport=4321, seq=s, ack=2 * n + 1, flags="A")
+                / Raw(b"\xa5")
+            )
             # first compute csum of pkt w/o padding to work around scapy bug
             p2 = Ether(bytes(p2))
             # first compute csum of pkt w/o padding to work around scapy bug
             p2 = Ether(bytes(p2))
-            p.append(p2 / Raw(b'\xa5' * 5))  # 1 byte data + 5 bytes padding
+            p.append(p2 / Raw(b"\xa5" * 5))  # 1 byte data + 5 bytes padding
             s += 1
 
         rxs = self.send_and_expect(self.pg0, p, self.pg2, n_rx=n_packets)
             s += 1
 
         rxs = self.send_and_expect(self.pg0, p, self.pg2, n_rx=n_packets)
@@ -236,9 +254,9 @@ class TestGRO(VppTestCase):
             self.assertEqual(rx[IP].len, 40 + 1459 + 1)
             self.assertEqual(rx[TCP].sport, 1234)
             self.assertEqual(rx[TCP].dport, 4321)
             self.assertEqual(rx[IP].len, 40 + 1459 + 1)
             self.assertEqual(rx[TCP].sport, 1234)
             self.assertEqual(rx[TCP].dport, 4321)
-            self.assertEqual(rx[TCP].ack, (2*i + 1))
+            self.assertEqual(rx[TCP].ack, (2 * i + 1))
             i += 1
 
 
             i += 1
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index ee676a4..5368531 100644 (file)
@@ -30,8 +30,12 @@ from socket import AF_INET, AF_INET6, inet_pton
 from util import reassemble4
 
 from vpp_ipsec import VppIpsecSA, VppIpsecTunProtect
 from util import reassemble4
 
 from vpp_ipsec import VppIpsecSA, VppIpsecTunProtect
-from template_ipsec import IPsecIPv4Params, IPsecIPv6Params, \
-    mk_scapy_crypt_key, config_tun_params
+from template_ipsec import (
+    IPsecIPv4Params,
+    IPsecIPv6Params,
+    mk_scapy_crypt_key,
+    config_tun_params,
+)
 
 """ Test_gso is a subclass of VPPTestCase classes.
     GSO tests.
 
 """ Test_gso is a subclass of VPPTestCase classes.
     GSO tests.
@@ -39,7 +43,7 @@ from template_ipsec import IPsecIPv4Params, IPsecIPv6Params, \
 
 
 class TestGSO(VppTestCase):
 
 
 class TestGSO(VppTestCase):
-    """ GSO Test Case """
+    """GSO Test Case"""
 
     def __init__(self, *args):
         VppTestCase.__init__(self, *args)
 
     def __init__(self, *args):
         VppTestCase.__init__(self, *args)
@@ -70,18 +74,26 @@ class TestGSO(VppTestCase):
             i.resolve_ndp()
 
         self.single_tunnel_bd = 10
             i.resolve_ndp()
 
         self.single_tunnel_bd = 10
-        self.vxlan = VppVxlanTunnel(self, src=self.pg0.local_ip4,
-                                    dst=self.pg0.remote_ip4,
-                                    vni=self.single_tunnel_bd)
-
-        self.vxlan2 = VppVxlanTunnel(self, src=self.pg0.local_ip6,
-                                     dst=self.pg0.remote_ip6,
-                                     vni=self.single_tunnel_bd)
-
-        self.ipip4 = VppIpIpTunInterface(self, self.pg0, self.pg0.local_ip4,
-                                         self.pg0.remote_ip4)
-        self.ipip6 = VppIpIpTunInterface(self, self.pg0, self.pg0.local_ip6,
-                                         self.pg0.remote_ip6)
+        self.vxlan = VppVxlanTunnel(
+            self,
+            src=self.pg0.local_ip4,
+            dst=self.pg0.remote_ip4,
+            vni=self.single_tunnel_bd,
+        )
+
+        self.vxlan2 = VppVxlanTunnel(
+            self,
+            src=self.pg0.local_ip6,
+            dst=self.pg0.remote_ip6,
+            vni=self.single_tunnel_bd,
+        )
+
+        self.ipip4 = VppIpIpTunInterface(
+            self, self.pg0, self.pg0.local_ip4, self.pg0.remote_ip4
+        )
+        self.ipip6 = VppIpIpTunInterface(
+            self, self.pg0, self.pg0.local_ip6, self.pg0.remote_ip6
+        )
 
     def tearDown(self):
         super(TestGSO, self).tearDown()
 
     def tearDown(self):
         super(TestGSO, self).tearDown()
@@ -92,15 +104,16 @@ class TestGSO(VppTestCase):
                 i.admin_down()
 
     def test_gso(self):
                 i.admin_down()
 
     def test_gso(self):
-        """ GSO test """
+        """GSO test"""
         #
         # Send jumbo frame with gso disabled and DF bit is set
         #
         #
         # Send jumbo frame with gso disabled and DF bit is set
         #
-        p4 = (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-              IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4,
-                 flags='DF') /
-              TCP(sport=1234, dport=1234) /
-              Raw(b'\xa5' * 65200))
+        p4 = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4, flags="DF")
+            / TCP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 65200)
+        )
 
         rxs = self.send_and_expect(self.pg0, [p4], self.pg0)
 
 
         rxs = self.send_and_expect(self.pg0, [p4], self.pg0)
 
@@ -115,13 +128,14 @@ class TestGSO(VppTestCase):
         #
         # Send checksum offload frames
         #
         #
         # Send checksum offload frames
         #
-        p40 = (Ether(src=self.pg2.remote_mac, dst=self.pg2.local_mac) /
-               IP(src=self.pg2.remote_ip4, dst=self.pg0.remote_ip4,
-                  flags='DF') /
-               TCP(sport=1234, dport=1234) /
-               Raw(b'\xa5' * 1460))
+        p40 = (
+            Ether(src=self.pg2.remote_mac, dst=self.pg2.local_mac)
+            / IP(src=self.pg2.remote_ip4, dst=self.pg0.remote_ip4, flags="DF")
+            / TCP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 1460)
+        )
 
 
-        rxs = self.send_and_expect(self.pg2, 100*[p40], self.pg0)
+        rxs = self.send_and_expect(self.pg2, 100 * [p40], self.pg0)
 
         for rx in rxs:
             self.assertEqual(rx[Ether].src, self.pg0.local_mac)
 
         for rx in rxs:
             self.assertEqual(rx[Ether].src, self.pg0.local_mac)
@@ -133,12 +147,14 @@ class TestGSO(VppTestCase):
             self.assert_tcp_checksum_valid(rx)
             self.assertEqual(payload_len, len(rx[Raw]))
 
             self.assert_tcp_checksum_valid(rx)
             self.assertEqual(payload_len, len(rx[Raw]))
 
-        p60 = (Ether(src=self.pg2.remote_mac, dst=self.pg2.local_mac) /
-               IPv6(src=self.pg2.remote_ip6, dst=self.pg0.remote_ip6) /
-               TCP(sport=1234, dport=1234) /
-               Raw(b'\xa5' * 1440))
+        p60 = (
+            Ether(src=self.pg2.remote_mac, dst=self.pg2.local_mac)
+            / IPv6(src=self.pg2.remote_ip6, dst=self.pg0.remote_ip6)
+            / TCP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 1440)
+        )
 
 
-        rxs = self.send_and_expect(self.pg2, 100*[p60], self.pg0)
+        rxs = self.send_and_expect(self.pg2, 100 * [p60], self.pg0)
 
         for rx in rxs:
             self.assertEqual(rx[Ether].src, self.pg0.local_mac)
 
         for rx in rxs:
             self.assertEqual(rx[Ether].src, self.pg0.local_mac)
@@ -153,15 +169,17 @@ class TestGSO(VppTestCase):
         # Send jumbo frame with gso enabled and DF bit is set
         # input and output interfaces support GSO
         #
         # Send jumbo frame with gso enabled and DF bit is set
         # input and output interfaces support GSO
         #
-        self.vapi.feature_gso_enable_disable(sw_if_index=self.pg3.sw_if_index,
-                                             enable_disable=1)
-        p41 = (Ether(src=self.pg2.remote_mac, dst=self.pg2.local_mac) /
-               IP(src=self.pg2.remote_ip4, dst=self.pg3.remote_ip4,
-                  flags='DF') /
-               TCP(sport=1234, dport=1234) /
-               Raw(b'\xa5' * 65200))
+        self.vapi.feature_gso_enable_disable(
+            sw_if_index=self.pg3.sw_if_index, enable_disable=1
+        )
+        p41 = (
+            Ether(src=self.pg2.remote_mac, dst=self.pg2.local_mac)
+            / IP(src=self.pg2.remote_ip4, dst=self.pg3.remote_ip4, flags="DF")
+            / TCP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 65200)
+        )
 
 
-        rxs = self.send_and_expect(self.pg2, 100*[p41], self.pg3, 100)
+        rxs = self.send_and_expect(self.pg2, 100 * [p41], self.pg3, 100)
 
         for rx in rxs:
             self.assertEqual(rx[Ether].src, self.pg3.local_mac)
 
         for rx in rxs:
             self.assertEqual(rx[Ether].src, self.pg3.local_mac)
@@ -175,12 +193,14 @@ class TestGSO(VppTestCase):
         #
         # ipv6
         #
         #
         # ipv6
         #
-        p61 = (Ether(src=self.pg2.remote_mac, dst=self.pg2.local_mac) /
-               IPv6(src=self.pg2.remote_ip6, dst=self.pg3.remote_ip6) /
-               TCP(sport=1234, dport=1234) /
-               Raw(b'\xa5' * 65200))
+        p61 = (
+            Ether(src=self.pg2.remote_mac, dst=self.pg2.local_mac)
+            / IPv6(src=self.pg2.remote_ip6, dst=self.pg3.remote_ip6)
+            / TCP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 65200)
+        )
 
 
-        rxs = self.send_and_expect(self.pg2, 100*[p61], self.pg3, 100)
+        rxs = self.send_and_expect(self.pg2, 100 * [p61], self.pg3, 100)
 
         for rx in rxs:
             self.assertEqual(rx[Ether].src, self.pg3.local_mac)
 
         for rx in rxs:
             self.assertEqual(rx[Ether].src, self.pg3.local_mac)
@@ -196,15 +216,17 @@ class TestGSO(VppTestCase):
         # and DF bit is set. GSO packet will be chunked into gso_size
         # data payload
         #
         # and DF bit is set. GSO packet will be chunked into gso_size
         # data payload
         #
-        self.vapi.feature_gso_enable_disable(sw_if_index=self.pg0.sw_if_index,
-                                             enable_disable=1)
-        p42 = (Ether(src=self.pg2.remote_mac, dst=self.pg2.local_mac) /
-               IP(src=self.pg2.remote_ip4, dst=self.pg0.remote_ip4,
-                  flags='DF') /
-               TCP(sport=1234, dport=1234) /
-               Raw(b'\xa5' * 65200))
-
-        rxs = self.send_and_expect(self.pg2, 5*[p42], self.pg0, 225)
+        self.vapi.feature_gso_enable_disable(
+            sw_if_index=self.pg0.sw_if_index, enable_disable=1
+        )
+        p42 = (
+            Ether(src=self.pg2.remote_mac, dst=self.pg2.local_mac)
+            / IP(src=self.pg2.remote_ip4, dst=self.pg0.remote_ip4, flags="DF")
+            / TCP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 65200)
+        )
+
+        rxs = self.send_and_expect(self.pg2, 5 * [p42], self.pg0, 225)
         size = 0
         for rx in rxs:
             self.assertEqual(rx[Ether].src, self.pg0.local_mac)
         size = 0
         for rx in rxs:
             self.assertEqual(rx[Ether].src, self.pg0.local_mac)
@@ -218,17 +240,19 @@ class TestGSO(VppTestCase):
             self.assertEqual(rx[TCP].dport, 1234)
             self.assertEqual(payload_len, len(rx[Raw]))
             size += payload_len
             self.assertEqual(rx[TCP].dport, 1234)
             self.assertEqual(payload_len, len(rx[Raw]))
             size += payload_len
-        self.assertEqual(size, 65200*5)
+        self.assertEqual(size, 65200 * 5)
 
         #
         # ipv6
         #
 
         #
         # ipv6
         #
-        p62 = (Ether(src=self.pg2.remote_mac, dst=self.pg2.local_mac) /
-               IPv6(src=self.pg2.remote_ip6, dst=self.pg0.remote_ip6) /
-               TCP(sport=1234, dport=1234) /
-               Raw(b'\xa5' * 65200))
+        p62 = (
+            Ether(src=self.pg2.remote_mac, dst=self.pg2.local_mac)
+            / IPv6(src=self.pg2.remote_ip6, dst=self.pg0.remote_ip6)
+            / TCP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 65200)
+        )
 
 
-        rxs = self.send_and_expect(self.pg2, 5*[p62], self.pg0, 225)
+        rxs = self.send_and_expect(self.pg2, 5 * [p62], self.pg0, 225)
         size = 0
         for rx in rxs:
             self.assertEqual(rx[Ether].src, self.pg0.local_mac)
         size = 0
         for rx in rxs:
             self.assertEqual(rx[Ether].src, self.pg0.local_mac)
@@ -241,22 +265,25 @@ class TestGSO(VppTestCase):
             self.assertEqual(rx[TCP].dport, 1234)
             self.assertEqual(payload_len, len(rx[Raw]))
             size += payload_len
             self.assertEqual(rx[TCP].dport, 1234)
             self.assertEqual(payload_len, len(rx[Raw]))
             size += payload_len
-        self.assertEqual(size, 65200*5)
+        self.assertEqual(size, 65200 * 5)
 
         #
         # Send jumbo frame with gso enabled only on input interface
         # and DF bit is unset. GSO packet will be fragmented.
         #
         self.vapi.sw_interface_set_mtu(self.pg1.sw_if_index, [576, 0, 0, 0])
 
         #
         # Send jumbo frame with gso enabled only on input interface
         # and DF bit is unset. GSO packet will be fragmented.
         #
         self.vapi.sw_interface_set_mtu(self.pg1.sw_if_index, [576, 0, 0, 0])
-        self.vapi.feature_gso_enable_disable(sw_if_index=self.pg1.sw_if_index,
-                                             enable_disable=1)
+        self.vapi.feature_gso_enable_disable(
+            sw_if_index=self.pg1.sw_if_index, enable_disable=1
+        )
 
 
-        p43 = (Ether(src=self.pg2.remote_mac, dst=self.pg2.local_mac) /
-               IP(src=self.pg2.remote_ip4, dst=self.pg1.remote_ip4) /
-               TCP(sport=1234, dport=1234) /
-               Raw(b'\xa5' * 65200))
+        p43 = (
+            Ether(src=self.pg2.remote_mac, dst=self.pg2.local_mac)
+            / IP(src=self.pg2.remote_ip4, dst=self.pg1.remote_ip4)
+            / TCP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 65200)
+        )
 
 
-        rxs = self.send_and_expect(self.pg2, 5*[p43], self.pg1, 5*119)
+        rxs = self.send_and_expect(self.pg2, 5 * [p43], self.pg1, 5 * 119)
         size = 0
         for rx in rxs:
             self.assertEqual(rx[Ether].src, self.pg1.local_mac)
         size = 0
         for rx in rxs:
             self.assertEqual(rx[Ether].src, self.pg1.local_mac)
@@ -265,8 +292,8 @@ class TestGSO(VppTestCase):
             self.assertEqual(rx[IP].dst, self.pg1.remote_ip4)
             self.assert_ip_checksum_valid(rx)
             size += rx[IP].len - 20
             self.assertEqual(rx[IP].dst, self.pg1.remote_ip4)
             self.assert_ip_checksum_valid(rx)
             size += rx[IP].len - 20
-        size -= 20*5  # TCP header
-        self.assertEqual(size, 65200*5)
+        size -= 20 * 5  # TCP header
+        self.assertEqual(size, 65200 * 5)
 
         #
         # IPv6
 
         #
         # IPv6
@@ -274,12 +301,14 @@ class TestGSO(VppTestCase):
         # ICMPv6 Packet Too Big will be sent back to sender.
         #
         self.vapi.sw_interface_set_mtu(self.pg1.sw_if_index, [1280, 0, 0, 0])
         # ICMPv6 Packet Too Big will be sent back to sender.
         #
         self.vapi.sw_interface_set_mtu(self.pg1.sw_if_index, [1280, 0, 0, 0])
-        p63 = (Ether(src=self.pg2.remote_mac, dst=self.pg2.local_mac) /
-               IPv6(src=self.pg2.remote_ip6, dst=self.pg1.remote_ip6) /
-               TCP(sport=1234, dport=1234) /
-               Raw(b'\xa5' * 65200))
-
-        rxs = self.send_and_expect_some(self.pg2, 5*[p63], self.pg2, 5)
+        p63 = (
+            Ether(src=self.pg2.remote_mac, dst=self.pg2.local_mac)
+            / IPv6(src=self.pg2.remote_ip6, dst=self.pg1.remote_ip6)
+            / TCP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 65200)
+        )
+
+        rxs = self.send_and_expect_some(self.pg2, 5 * [p63], self.pg2, 5)
         for rx in rxs:
             self.assertEqual(rx[Ether].src, self.pg2.local_mac)
             self.assertEqual(rx[Ether].dst, self.pg2.remote_mac)
         for rx in rxs:
             self.assertEqual(rx[Ether].src, self.pg2.local_mac)
             self.assertEqual(rx[Ether].dst, self.pg2.remote_mac)
@@ -299,12 +328,14 @@ class TestGSO(VppTestCase):
         #
         self.vapi.sw_interface_set_mtu(self.pg1.sw_if_index, [9000, 0, 0, 0])
         self.vapi.sw_interface_set_mtu(self.pg4.sw_if_index, [9000, 0, 0, 0])
         #
         self.vapi.sw_interface_set_mtu(self.pg1.sw_if_index, [9000, 0, 0, 0])
         self.vapi.sw_interface_set_mtu(self.pg4.sw_if_index, [9000, 0, 0, 0])
-        p44 = (Ether(src=self.pg4.remote_mac, dst=self.pg4.local_mac) /
-               IP(src=self.pg4.remote_ip4, dst=self.pg1.remote_ip4) /
-               TCP(sport=1234, dport=1234) /
-               Raw(b'\xa5' * 65200))
-
-        rxs = self.send_and_expect(self.pg4, 5*[p44], self.pg1, 165)
+        p44 = (
+            Ether(src=self.pg4.remote_mac, dst=self.pg4.local_mac)
+            / IP(src=self.pg4.remote_ip4, dst=self.pg1.remote_ip4)
+            / TCP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 65200)
+        )
+
+        rxs = self.send_and_expect(self.pg4, 5 * [p44], self.pg1, 165)
         size = 0
         for rx in rxs:
             self.assertEqual(rx[Ether].src, self.pg1.local_mac)
         size = 0
         for rx in rxs:
             self.assertEqual(rx[Ether].src, self.pg1.local_mac)
@@ -316,17 +347,19 @@ class TestGSO(VppTestCase):
             self.assert_tcp_checksum_valid(rx)
             self.assertEqual(payload_len, len(rx[Raw]))
             size += payload_len
             self.assert_tcp_checksum_valid(rx)
             self.assertEqual(payload_len, len(rx[Raw]))
             size += payload_len
-        self.assertEqual(size, 65200*5)
+        self.assertEqual(size, 65200 * 5)
 
         #
         # IPv6
         #
 
         #
         # IPv6
         #
-        p64 = (Ether(src=self.pg4.remote_mac, dst=self.pg4.local_mac) /
-               IPv6(src=self.pg4.remote_ip6, dst=self.pg1.remote_ip6) /
-               TCP(sport=1234, dport=1234) /
-               Raw(b'\xa5' * 65200))
+        p64 = (
+            Ether(src=self.pg4.remote_mac, dst=self.pg4.local_mac)
+            / IPv6(src=self.pg4.remote_ip6, dst=self.pg1.remote_ip6)
+            / TCP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 65200)
+        )
 
 
-        rxs = self.send_and_expect(self.pg4, 5*[p64], self.pg1, 170)
+        rxs = self.send_and_expect(self.pg4, 5 * [p64], self.pg1, 170)
         size = 0
         for rx in rxs:
             self.assertEqual(rx[Ether].src, self.pg1.local_mac)
         size = 0
         for rx in rxs:
             self.assertEqual(rx[Ether].src, self.pg1.local_mac)
@@ -337,15 +370,17 @@ class TestGSO(VppTestCase):
             self.assert_tcp_checksum_valid(rx)
             self.assertEqual(payload_len, len(rx[Raw]))
             size += payload_len
             self.assert_tcp_checksum_valid(rx)
             self.assertEqual(payload_len, len(rx[Raw]))
             size += payload_len
-        self.assertEqual(size, 65200*5)
+        self.assertEqual(size, 65200 * 5)
 
 
-        self.vapi.feature_gso_enable_disable(sw_if_index=self.pg0.sw_if_index,
-                                             enable_disable=0)
-        self.vapi.feature_gso_enable_disable(sw_if_index=self.pg1.sw_if_index,
-                                             enable_disable=0)
+        self.vapi.feature_gso_enable_disable(
+            sw_if_index=self.pg0.sw_if_index, enable_disable=0
+        )
+        self.vapi.feature_gso_enable_disable(
+            sw_if_index=self.pg1.sw_if_index, enable_disable=0
+        )
 
     def test_gso_vxlan(self):
 
     def test_gso_vxlan(self):
-        """ GSO VXLAN test """
+        """GSO VXLAN test"""
         self.logger.info(self.vapi.cli("sh int addr"))
         #
         # Send jumbo frame with gso enabled only on input interface and
         self.logger.info(self.vapi.cli("sh int addr"))
         #
         # Send jumbo frame with gso enabled only on input interface and
@@ -358,21 +393,26 @@ class TestGSO(VppTestCase):
         #
         self.vxlan.add_vpp_config()
         self.vapi.sw_interface_set_l2_bridge(
         #
         self.vxlan.add_vpp_config()
         self.vapi.sw_interface_set_l2_bridge(
-            rx_sw_if_index=self.vxlan.sw_if_index, bd_id=self.single_tunnel_bd)
+            rx_sw_if_index=self.vxlan.sw_if_index, bd_id=self.single_tunnel_bd
+        )
         self.vapi.sw_interface_set_l2_bridge(
         self.vapi.sw_interface_set_l2_bridge(
-            rx_sw_if_index=self.pg2.sw_if_index, bd_id=self.single_tunnel_bd)
-        self.vapi.feature_gso_enable_disable(sw_if_index=self.pg0.sw_if_index,
-                                             enable_disable=1)
+            rx_sw_if_index=self.pg2.sw_if_index, bd_id=self.single_tunnel_bd
+        )
+        self.vapi.feature_gso_enable_disable(
+            sw_if_index=self.pg0.sw_if_index, enable_disable=1
+        )
 
         #
         # IPv4/IPv4 - VXLAN
         #
 
         #
         # IPv4/IPv4 - VXLAN
         #
-        p45 = (Ether(src=self.pg2.remote_mac, dst="02:fe:60:1e:a2:79") /
-               IP(src=self.pg2.remote_ip4, dst="172.16.3.3", flags='DF') /
-               TCP(sport=1234, dport=1234) /
-               Raw(b'\xa5' * 65200))
+        p45 = (
+            Ether(src=self.pg2.remote_mac, dst="02:fe:60:1e:a2:79")
+            / IP(src=self.pg2.remote_ip4, dst="172.16.3.3", flags="DF")
+            / TCP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 65200)
+        )
 
 
-        rxs = self.send_and_expect(self.pg2, 5*[p45], self.pg0, 225)
+        rxs = self.send_and_expect(self.pg2, 5 * [p45], self.pg0, 225)
         size = 0
         for rx in rxs:
             self.assertEqual(rx[Ether].src, self.pg0.local_mac)
         size = 0
         for rx in rxs:
             self.assertEqual(rx[Ether].src, self.pg0.local_mac)
@@ -393,17 +433,19 @@ class TestGSO(VppTestCase):
             payload_len = inner[IP].len - 20 - 20
             self.assertEqual(payload_len, len(inner[Raw]))
             size += payload_len
             payload_len = inner[IP].len - 20 - 20
             self.assertEqual(payload_len, len(inner[Raw]))
             size += payload_len
-        self.assertEqual(size, 65200*5)
+        self.assertEqual(size, 65200 * 5)
 
         #
         # IPv4/IPv6 - VXLAN
         #
 
         #
         # IPv4/IPv6 - VXLAN
         #
-        p65 = (Ether(src=self.pg2.remote_mac, dst="02:fe:60:1e:a2:79") /
-               IPv6(src=self.pg2.remote_ip6, dst="fd01:3::3") /
-               TCP(sport=1234, dport=1234) /
-               Raw(b'\xa5' * 65200))
+        p65 = (
+            Ether(src=self.pg2.remote_mac, dst="02:fe:60:1e:a2:79")
+            / IPv6(src=self.pg2.remote_ip6, dst="fd01:3::3")
+            / TCP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 65200)
+        )
 
 
-        rxs = self.send_and_expect(self.pg2, 5*[p65], self.pg0, 225)
+        rxs = self.send_and_expect(self.pg2, 5 * [p65], self.pg0, 225)
         size = 0
         for rx in rxs:
             self.assertEqual(rx[Ether].src, self.pg0.local_mac)
         size = 0
         for rx in rxs:
             self.assertEqual(rx[Ether].src, self.pg0.local_mac)
@@ -423,7 +465,7 @@ class TestGSO(VppTestCase):
             payload_len = inner[IPv6].plen - 20
             self.assertEqual(payload_len, len(inner[Raw]))
             size += payload_len
             payload_len = inner[IPv6].plen - 20
             self.assertEqual(payload_len, len(inner[Raw]))
             size += payload_len
-        self.assertEqual(size, 65200*5)
+        self.assertEqual(size, 65200 * 5)
 
         #
         # disable ipv4/vxlan
 
         #
         # disable ipv4/vxlan
@@ -435,18 +477,20 @@ class TestGSO(VppTestCase):
         #
         self.vxlan2.add_vpp_config()
         self.vapi.sw_interface_set_l2_bridge(
         #
         self.vxlan2.add_vpp_config()
         self.vapi.sw_interface_set_l2_bridge(
-            rx_sw_if_index=self.vxlan2.sw_if_index,
-            bd_id=self.single_tunnel_bd)
+            rx_sw_if_index=self.vxlan2.sw_if_index, bd_id=self.single_tunnel_bd
+        )
 
         #
         # IPv6/IPv4 - VXLAN
         #
 
         #
         # IPv6/IPv4 - VXLAN
         #
-        p46 = (Ether(src=self.pg2.remote_mac, dst="02:fe:60:1e:a2:79") /
-               IP(src=self.pg2.remote_ip4, dst="172.16.3.3", flags='DF') /
-               TCP(sport=1234, dport=1234) /
-               Raw(b'\xa5' * 65200))
+        p46 = (
+            Ether(src=self.pg2.remote_mac, dst="02:fe:60:1e:a2:79")
+            / IP(src=self.pg2.remote_ip4, dst="172.16.3.3", flags="DF")
+            / TCP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 65200)
+        )
 
 
-        rxs = self.send_and_expect(self.pg2, 5*[p46], self.pg0, 225)
+        rxs = self.send_and_expect(self.pg2, 5 * [p46], self.pg0, 225)
         size = 0
         for rx in rxs:
             self.assertEqual(rx[Ether].src, self.pg0.local_mac)
         size = 0
         for rx in rxs:
             self.assertEqual(rx[Ether].src, self.pg0.local_mac)
@@ -466,17 +510,19 @@ class TestGSO(VppTestCase):
             payload_len = inner[IP].len - 20 - 20
             self.assertEqual(payload_len, len(inner[Raw]))
             size += payload_len
             payload_len = inner[IP].len - 20 - 20
             self.assertEqual(payload_len, len(inner[Raw]))
             size += payload_len
-        self.assertEqual(size, 65200*5)
+        self.assertEqual(size, 65200 * 5)
 
         #
         # IPv6/IPv6 - VXLAN
         #
 
         #
         # IPv6/IPv6 - VXLAN
         #
-        p66 = (Ether(src=self.pg2.remote_mac, dst="02:fe:60:1e:a2:79") /
-               IPv6(src=self.pg2.remote_ip6, dst="fd01:3::3") /
-               TCP(sport=1234, dport=1234) /
-               Raw(b'\xa5' * 65200))
+        p66 = (
+            Ether(src=self.pg2.remote_mac, dst="02:fe:60:1e:a2:79")
+            / IPv6(src=self.pg2.remote_ip6, dst="fd01:3::3")
+            / TCP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 65200)
+        )
 
 
-        rxs = self.send_and_expect(self.pg2, 5*[p66], self.pg0, 225)
+        rxs = self.send_and_expect(self.pg2, 5 * [p66], self.pg0, 225)
         size = 0
         for rx in rxs:
             self.assertEqual(rx[Ether].src, self.pg0.local_mac)
         size = 0
         for rx in rxs:
             self.assertEqual(rx[Ether].src, self.pg0.local_mac)
@@ -495,25 +541,27 @@ class TestGSO(VppTestCase):
             payload_len = inner[IPv6].plen - 20
             self.assertEqual(payload_len, len(inner[Raw]))
             size += payload_len
             payload_len = inner[IPv6].plen - 20
             self.assertEqual(payload_len, len(inner[Raw]))
             size += payload_len
-        self.assertEqual(size, 65200*5)
+        self.assertEqual(size, 65200 * 5)
 
         #
         # disable ipv4/vxlan
         #
         self.vxlan2.remove_vpp_config()
 
 
         #
         # disable ipv4/vxlan
         #
         self.vxlan2.remove_vpp_config()
 
-        self.vapi.feature_gso_enable_disable(sw_if_index=self.pg0.sw_if_index,
-                                             enable_disable=0)
+        self.vapi.feature_gso_enable_disable(
+            sw_if_index=self.pg0.sw_if_index, enable_disable=0
+        )
 
     def test_gso_ipip(self):
 
     def test_gso_ipip(self):
-        """ GSO IPIP test """
+        """GSO IPIP test"""
         self.logger.info(self.vapi.cli("sh int addr"))
         #
         # Send jumbo frame with gso enabled only on input interface and
         # create IPIP tunnel on VPP pg0.
         #
         self.logger.info(self.vapi.cli("sh int addr"))
         #
         # Send jumbo frame with gso enabled only on input interface and
         # create IPIP tunnel on VPP pg0.
         #
-        self.vapi.feature_gso_enable_disable(sw_if_index=self.pg0.sw_if_index,
-                                             enable_disable=1)
+        self.vapi.feature_gso_enable_disable(
+            sw_if_index=self.pg0.sw_if_index, enable_disable=1
+        )
 
         #
         # enable ipip4
 
         #
         # enable ipip4
@@ -526,21 +574,30 @@ class TestGSO(VppTestCase):
 
         # Add IPv4 routes via tunnel interface
         self.ip4_via_ip4_tunnel = VppIpRoute(
 
         # Add IPv4 routes via tunnel interface
         self.ip4_via_ip4_tunnel = VppIpRoute(
-                self, "172.16.10.0", 24,
-                [VppRoutePath("0.0.0.0",
-                              self.ipip4.sw_if_index,
-                              proto=FibPathProto.FIB_PATH_NH_PROTO_IP4)])
+            self,
+            "172.16.10.0",
+            24,
+            [
+                VppRoutePath(
+                    "0.0.0.0",
+                    self.ipip4.sw_if_index,
+                    proto=FibPathProto.FIB_PATH_NH_PROTO_IP4,
+                )
+            ],
+        )
         self.ip4_via_ip4_tunnel.add_vpp_config()
 
         #
         # IPv4/IPv4 - IPIP
         #
         self.ip4_via_ip4_tunnel.add_vpp_config()
 
         #
         # IPv4/IPv4 - IPIP
         #
-        p47 = (Ether(src=self.pg2.remote_mac, dst="02:fe:60:1e:a2:79") /
-               IP(src=self.pg2.remote_ip4, dst="172.16.10.3", flags='DF') /
-               TCP(sport=1234, dport=1234) /
-               Raw(b'\xa5' * 65200))
+        p47 = (
+            Ether(src=self.pg2.remote_mac, dst="02:fe:60:1e:a2:79")
+            / IP(src=self.pg2.remote_ip4, dst="172.16.10.3", flags="DF")
+            / TCP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 65200)
+        )
 
 
-        rxs = self.send_and_expect(self.pg2, 5*[p47], self.pg0, 225)
+        rxs = self.send_and_expect(self.pg2, 5 * [p47], self.pg0, 225)
         size = 0
         for rx in rxs:
             self.assertEqual(rx[Ether].src, self.pg0.local_mac)
         size = 0
         for rx in rxs:
             self.assertEqual(rx[Ether].src, self.pg0.local_mac)
@@ -558,23 +615,32 @@ class TestGSO(VppTestCase):
             payload_len = inner[IP].len - 20 - 20
             self.assertEqual(payload_len, len(inner[Raw]))
             size += payload_len
             payload_len = inner[IP].len - 20 - 20
             self.assertEqual(payload_len, len(inner[Raw]))
             size += payload_len
-        self.assertEqual(size, 65200*5)
+        self.assertEqual(size, 65200 * 5)
 
         self.ip6_via_ip4_tunnel = VppIpRoute(
 
         self.ip6_via_ip4_tunnel = VppIpRoute(
-                self, "fd01:10::", 64,
-                [VppRoutePath("::",
-                              self.ipip4.sw_if_index,
-                              proto=FibPathProto.FIB_PATH_NH_PROTO_IP6)])
+            self,
+            "fd01:10::",
+            64,
+            [
+                VppRoutePath(
+                    "::",
+                    self.ipip4.sw_if_index,
+                    proto=FibPathProto.FIB_PATH_NH_PROTO_IP6,
+                )
+            ],
+        )
         self.ip6_via_ip4_tunnel.add_vpp_config()
         #
         # IPv4/IPv6 - IPIP
         #
         self.ip6_via_ip4_tunnel.add_vpp_config()
         #
         # IPv4/IPv6 - IPIP
         #
-        p67 = (Ether(src=self.pg2.remote_mac, dst="02:fe:60:1e:a2:79") /
-               IPv6(src=self.pg2.remote_ip6, dst="fd01:10::3") /
-               TCP(sport=1234, dport=1234) /
-               Raw(b'\xa5' * 65200))
+        p67 = (
+            Ether(src=self.pg2.remote_mac, dst="02:fe:60:1e:a2:79")
+            / IPv6(src=self.pg2.remote_ip6, dst="fd01:10::3")
+            / TCP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 65200)
+        )
 
 
-        rxs = self.send_and_expect(self.pg2, 5*[p67], self.pg0, 225)
+        rxs = self.send_and_expect(self.pg2, 5 * [p67], self.pg0, 225)
         size = 0
         for rx in rxs:
             self.assertEqual(rx[Ether].src, self.pg0.local_mac)
         size = 0
         for rx in rxs:
             self.assertEqual(rx[Ether].src, self.pg0.local_mac)
@@ -591,20 +657,21 @@ class TestGSO(VppTestCase):
             payload_len = inner[IPv6].plen - 20
             self.assertEqual(payload_len, len(inner[Raw]))
             size += payload_len
             payload_len = inner[IPv6].plen - 20
             self.assertEqual(payload_len, len(inner[Raw]))
             size += payload_len
-        self.assertEqual(size, 65200*5)
+        self.assertEqual(size, 65200 * 5)
 
         #
         # Send jumbo frame with gso enabled only on input interface and
         # create IPIP tunnel on VPP pg0. Enable gso feature node on ipip
         # tunnel - IPSec use case
         #
 
         #
         # Send jumbo frame with gso enabled only on input interface and
         # create IPIP tunnel on VPP pg0. Enable gso feature node on ipip
         # tunnel - IPSec use case
         #
-        self.vapi.feature_gso_enable_disable(sw_if_index=self.pg0.sw_if_index,
-                                             enable_disable=0)
         self.vapi.feature_gso_enable_disable(
         self.vapi.feature_gso_enable_disable(
-            sw_if_index=self.ipip4.sw_if_index,
-            enable_disable=1)
+            sw_if_index=self.pg0.sw_if_index, enable_disable=0
+        )
+        self.vapi.feature_gso_enable_disable(
+            sw_if_index=self.ipip4.sw_if_index, enable_disable=1
+        )
 
 
-        rxs = self.send_and_expect(self.pg2, 5*[p47], self.pg0, 225)
+        rxs = self.send_and_expect(self.pg2, 5 * [p47], self.pg0, 225)
         size = 0
         for rx in rxs:
             self.assertEqual(rx[Ether].src, self.pg0.local_mac)
         size = 0
         for rx in rxs:
             self.assertEqual(rx[Ether].src, self.pg0.local_mac)
@@ -622,14 +689,14 @@ class TestGSO(VppTestCase):
             payload_len = inner[IP].len - 20 - 20
             self.assertEqual(payload_len, len(inner[Raw]))
             size += payload_len
             payload_len = inner[IP].len - 20 - 20
             self.assertEqual(payload_len, len(inner[Raw]))
             size += payload_len
-        self.assertEqual(size, 65200*5)
+        self.assertEqual(size, 65200 * 5)
 
         #
         # disable ipip4
         #
         self.vapi.feature_gso_enable_disable(
 
         #
         # disable ipip4
         #
         self.vapi.feature_gso_enable_disable(
-            sw_if_index=self.ipip4.sw_if_index,
-            enable_disable=0)
+            sw_if_index=self.ipip4.sw_if_index, enable_disable=0
+        )
         self.ip4_via_ip4_tunnel.remove_vpp_config()
         self.ip6_via_ip4_tunnel.remove_vpp_config()
         self.ipip4.remove_vpp_config()
         self.ip4_via_ip4_tunnel.remove_vpp_config()
         self.ip6_via_ip4_tunnel.remove_vpp_config()
         self.ipip4.remove_vpp_config()
@@ -637,8 +704,9 @@ class TestGSO(VppTestCase):
         #
         # enable ipip6
         #
         #
         # enable ipip6
         #
-        self.vapi.feature_gso_enable_disable(sw_if_index=self.pg0.sw_if_index,
-                                             enable_disable=1)
+        self.vapi.feature_gso_enable_disable(
+            sw_if_index=self.pg0.sw_if_index, enable_disable=1
+        )
         self.ipip6.add_vpp_config()
 
         # Set interface up and enable IP on it
         self.ipip6.add_vpp_config()
 
         # Set interface up and enable IP on it
@@ -647,21 +715,30 @@ class TestGSO(VppTestCase):
 
         # Add IPv4 routes via tunnel interface
         self.ip4_via_ip6_tunnel = VppIpRoute(
 
         # Add IPv4 routes via tunnel interface
         self.ip4_via_ip6_tunnel = VppIpRoute(
-                self, "172.16.10.0", 24,
-                [VppRoutePath("0.0.0.0",
-                              self.ipip6.sw_if_index,
-                              proto=FibPathProto.FIB_PATH_NH_PROTO_IP4)])
+            self,
+            "172.16.10.0",
+            24,
+            [
+                VppRoutePath(
+                    "0.0.0.0",
+                    self.ipip6.sw_if_index,
+                    proto=FibPathProto.FIB_PATH_NH_PROTO_IP4,
+                )
+            ],
+        )
         self.ip4_via_ip6_tunnel.add_vpp_config()
 
         #
         # IPv6/IPv4 - IPIP
         #
         self.ip4_via_ip6_tunnel.add_vpp_config()
 
         #
         # IPv6/IPv4 - IPIP
         #
-        p48 = (Ether(src=self.pg2.remote_mac, dst="02:fe:60:1e:a2:79") /
-               IP(src=self.pg2.remote_ip4, dst="172.16.10.3", flags='DF') /
-               TCP(sport=1234, dport=1234) /
-               Raw(b'\xa5' * 65200))
+        p48 = (
+            Ether(src=self.pg2.remote_mac, dst="02:fe:60:1e:a2:79")
+            / IP(src=self.pg2.remote_ip4, dst="172.16.10.3", flags="DF")
+            / TCP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 65200)
+        )
 
 
-        rxs = self.send_and_expect(self.pg2, 5*[p48], self.pg0, 225)
+        rxs = self.send_and_expect(self.pg2, 5 * [p48], self.pg0, 225)
         size = 0
         for rx in rxs:
             self.assertEqual(rx[Ether].src, self.pg0.local_mac)
         size = 0
         for rx in rxs:
             self.assertEqual(rx[Ether].src, self.pg0.local_mac)
@@ -678,24 +755,33 @@ class TestGSO(VppTestCase):
             payload_len = inner[IP].len - 20 - 20
             self.assertEqual(payload_len, len(inner[Raw]))
             size += payload_len
             payload_len = inner[IP].len - 20 - 20
             self.assertEqual(payload_len, len(inner[Raw]))
             size += payload_len
-        self.assertEqual(size, 65200*5)
+        self.assertEqual(size, 65200 * 5)
 
         self.ip6_via_ip6_tunnel = VppIpRoute(
 
         self.ip6_via_ip6_tunnel = VppIpRoute(
-                self, "fd01:10::", 64,
-                [VppRoutePath("::",
-                              self.ipip6.sw_if_index,
-                              proto=FibPathProto.FIB_PATH_NH_PROTO_IP6)])
+            self,
+            "fd01:10::",
+            64,
+            [
+                VppRoutePath(
+                    "::",
+                    self.ipip6.sw_if_index,
+                    proto=FibPathProto.FIB_PATH_NH_PROTO_IP6,
+                )
+            ],
+        )
         self.ip6_via_ip6_tunnel.add_vpp_config()
 
         #
         # IPv6/IPv6 - IPIP
         #
         self.ip6_via_ip6_tunnel.add_vpp_config()
 
         #
         # IPv6/IPv6 - IPIP
         #
-        p68 = (Ether(src=self.pg2.remote_mac, dst="02:fe:60:1e:a2:79") /
-               IPv6(src=self.pg2.remote_ip6, dst="fd01:10::3") /
-               TCP(sport=1234, dport=1234) /
-               Raw(b'\xa5' * 65200))
+        p68 = (
+            Ether(src=self.pg2.remote_mac, dst="02:fe:60:1e:a2:79")
+            / IPv6(src=self.pg2.remote_ip6, dst="fd01:10::3")
+            / TCP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 65200)
+        )
 
 
-        rxs = self.send_and_expect(self.pg2, 5*[p68], self.pg0, 225)
+        rxs = self.send_and_expect(self.pg2, 5 * [p68], self.pg0, 225)
         size = 0
         for rx in rxs:
             self.assertEqual(rx[Ether].src, self.pg0.local_mac)
         size = 0
         for rx in rxs:
             self.assertEqual(rx[Ether].src, self.pg0.local_mac)
@@ -711,7 +797,7 @@ class TestGSO(VppTestCase):
             payload_len = inner[IPv6].plen - 20
             self.assertEqual(payload_len, len(inner[Raw]))
             size += payload_len
             payload_len = inner[IPv6].plen - 20
             self.assertEqual(payload_len, len(inner[Raw]))
             size += payload_len
-        self.assertEqual(size, 65200*5)
+        self.assertEqual(size, 65200 * 5)
 
         #
         # disable ipip6
 
         #
         # disable ipip6
@@ -720,11 +806,12 @@ class TestGSO(VppTestCase):
         self.ip6_via_ip6_tunnel.remove_vpp_config()
         self.ipip6.remove_vpp_config()
 
         self.ip6_via_ip6_tunnel.remove_vpp_config()
         self.ipip6.remove_vpp_config()
 
-        self.vapi.feature_gso_enable_disable(sw_if_index=self.pg0.sw_if_index,
-                                             enable_disable=0)
+        self.vapi.feature_gso_enable_disable(
+            sw_if_index=self.pg0.sw_if_index, enable_disable=0
+        )
 
     def test_gso_ipsec(self):
 
     def test_gso_ipsec(self):
-        """ GSO IPSEC test """
+        """GSO IPSEC test"""
         #
         # Send jumbo frame with gso enabled only on input interface and
         # create IPIP tunnel on VPP pg0.
         #
         # Send jumbo frame with gso enabled only on input interface and
         # create IPIP tunnel on VPP pg0.
@@ -735,14 +822,22 @@ class TestGSO(VppTestCase):
         #
         self.ipip4.add_vpp_config()
         self.vapi.feature_gso_enable_disable(
         #
         self.ipip4.add_vpp_config()
         self.vapi.feature_gso_enable_disable(
-            sw_if_index=self.ipip4.sw_if_index, enable_disable=1)
+            sw_if_index=self.ipip4.sw_if_index, enable_disable=1
+        )
 
         # Add IPv4 routes via tunnel interface
         self.ip4_via_ip4_tunnel = VppIpRoute(
 
         # Add IPv4 routes via tunnel interface
         self.ip4_via_ip4_tunnel = VppIpRoute(
-                self, "172.16.10.0", 24,
-                [VppRoutePath("0.0.0.0",
-                              self.ipip4.sw_if_index,
-                              proto=FibPathProto.FIB_PATH_NH_PROTO_IP4)])
+            self,
+            "172.16.10.0",
+            24,
+            [
+                VppRoutePath(
+                    "0.0.0.0",
+                    self.ipip4.sw_if_index,
+                    proto=FibPathProto.FIB_PATH_NH_PROTO_IP4,
+                )
+            ],
+        )
         self.ip4_via_ip4_tunnel.add_vpp_config()
 
         # IPSec config
         self.ip4_via_ip4_tunnel.add_vpp_config()
 
         # IPSec config
@@ -750,30 +845,33 @@ class TestGSO(VppTestCase):
         self.encryption_type = ESP
         config_tun_params(self.ipv4_params, self.encryption_type, self.ipip4)
 
         self.encryption_type = ESP
         config_tun_params(self.ipv4_params, self.encryption_type, self.ipip4)
 
-        self.tun_sa_in_v4 = VppIpsecSA(self, self.ipv4_params.vpp_tun_sa_id,
-                                       self.ipv4_params.vpp_tun_spi,
-                                       self.ipv4_params.auth_algo_vpp_id,
-                                       self.ipv4_params.auth_key,
-                                       self.ipv4_params.crypt_algo_vpp_id,
-                                       self.ipv4_params.crypt_key,
-                                       VppEnum.vl_api_ipsec_proto_t.
-                                       IPSEC_API_PROTO_ESP)
+        self.tun_sa_in_v4 = VppIpsecSA(
+            self,
+            self.ipv4_params.vpp_tun_sa_id,
+            self.ipv4_params.vpp_tun_spi,
+            self.ipv4_params.auth_algo_vpp_id,
+            self.ipv4_params.auth_key,
+            self.ipv4_params.crypt_algo_vpp_id,
+            self.ipv4_params.crypt_key,
+            VppEnum.vl_api_ipsec_proto_t.IPSEC_API_PROTO_ESP,
+        )
         self.tun_sa_in_v4.add_vpp_config()
 
         self.tun_sa_in_v4.add_vpp_config()
 
-        self.tun_sa_out_v4 = VppIpsecSA(self, self.ipv4_params.scapy_tun_sa_id,
-                                        self.ipv4_params.scapy_tun_spi,
-                                        self.ipv4_params.auth_algo_vpp_id,
-                                        self.ipv4_params.auth_key,
-                                        self.ipv4_params.crypt_algo_vpp_id,
-                                        self.ipv4_params.crypt_key,
-                                        VppEnum.vl_api_ipsec_proto_t.
-                                        IPSEC_API_PROTO_ESP)
+        self.tun_sa_out_v4 = VppIpsecSA(
+            self,
+            self.ipv4_params.scapy_tun_sa_id,
+            self.ipv4_params.scapy_tun_spi,
+            self.ipv4_params.auth_algo_vpp_id,
+            self.ipv4_params.auth_key,
+            self.ipv4_params.crypt_algo_vpp_id,
+            self.ipv4_params.crypt_key,
+            VppEnum.vl_api_ipsec_proto_t.IPSEC_API_PROTO_ESP,
+        )
         self.tun_sa_out_v4.add_vpp_config()
 
         self.tun_sa_out_v4.add_vpp_config()
 
-        self.tun_protect_v4 = VppIpsecTunProtect(self,
-                                                 self.ipip4,
-                                                 self.tun_sa_out_v4,
-                                                 [self.tun_sa_in_v4])
+        self.tun_protect_v4 = VppIpsecTunProtect(
+            self, self.ipip4, self.tun_sa_out_v4, [self.tun_sa_in_v4]
+        )
 
         self.tun_protect_v4.add_vpp_config()
 
 
         self.tun_protect_v4.add_vpp_config()
 
@@ -784,10 +882,12 @@ class TestGSO(VppTestCase):
         #
         # IPv4/IPv4 - IPSEC
         #
         #
         # IPv4/IPv4 - IPSEC
         #
-        ipsec44 = (Ether(src=self.pg2.remote_mac, dst="02:fe:60:1e:a2:79") /
-                   IP(src=self.pg2.remote_ip4, dst="172.16.10.3", flags='DF') /
-                   TCP(sport=1234, dport=1234) /
-                   Raw(b'\xa5' * 65200))
+        ipsec44 = (
+            Ether(src=self.pg2.remote_mac, dst="02:fe:60:1e:a2:79")
+            / IP(src=self.pg2.remote_ip4, dst="172.16.10.3", flags="DF")
+            / TCP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 65200)
+        )
 
         rxs = self.send_and_expect(self.pg2, [ipsec44], self.pg0, 45)
         size = 0
 
         rxs = self.send_and_expect(self.pg2, [ipsec44], self.pg0, 45)
         size = 0
@@ -805,18 +905,27 @@ class TestGSO(VppTestCase):
         self.assertEqual(size, 65200)
 
         self.ip6_via_ip4_tunnel = VppIpRoute(
         self.assertEqual(size, 65200)
 
         self.ip6_via_ip4_tunnel = VppIpRoute(
-                self, "fd01:10::", 64,
-                [VppRoutePath("::",
-                              self.ipip4.sw_if_index,
-                              proto=FibPathProto.FIB_PATH_NH_PROTO_IP6)])
+            self,
+            "fd01:10::",
+            64,
+            [
+                VppRoutePath(
+                    "::",
+                    self.ipip4.sw_if_index,
+                    proto=FibPathProto.FIB_PATH_NH_PROTO_IP6,
+                )
+            ],
+        )
         self.ip6_via_ip4_tunnel.add_vpp_config()
         #
         # IPv4/IPv6 - IPSEC
         #
         self.ip6_via_ip4_tunnel.add_vpp_config()
         #
         # IPv4/IPv6 - IPSEC
         #
-        ipsec46 = (Ether(src=self.pg2.remote_mac, dst="02:fe:60:1e:a2:79") /
-                   IPv6(src=self.pg2.remote_ip6, dst="fd01:10::3") /
-                   TCP(sport=1234, dport=1234) /
-                   Raw(b'\xa5' * 65200))
+        ipsec46 = (
+            Ether(src=self.pg2.remote_mac, dst="02:fe:60:1e:a2:79")
+            / IPv6(src=self.pg2.remote_ip6, dst="fd01:10::3")
+            / TCP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 65200)
+        )
 
         rxs = self.send_and_expect(self.pg2, [ipsec46], self.pg0, 45)
         size = 0
 
         rxs = self.send_and_expect(self.pg2, [ipsec46], self.pg0, 45)
         size = 0
@@ -841,8 +950,7 @@ class TestGSO(VppTestCase):
         #
         # disable ipip4
         #
         #
         # disable ipip4
         #
-        self.vapi.feature_gso_enable_disable(self.ipip4.sw_if_index,
-                                             enable_disable=0)
+        self.vapi.feature_gso_enable_disable(self.ipip4.sw_if_index, enable_disable=0)
         self.ip4_via_ip4_tunnel.remove_vpp_config()
         self.ip6_via_ip4_tunnel.remove_vpp_config()
         self.ipip4.remove_vpp_config()
         self.ip4_via_ip4_tunnel.remove_vpp_config()
         self.ip6_via_ip4_tunnel.remove_vpp_config()
         self.ipip4.remove_vpp_config()
@@ -851,8 +959,7 @@ class TestGSO(VppTestCase):
         # enable ipip6
         #
         self.ipip6.add_vpp_config()
         # enable ipip6
         #
         self.ipip6.add_vpp_config()
-        self.vapi.feature_gso_enable_disable(self.ipip6.sw_if_index,
-                                             enable_disable=1)
+        self.vapi.feature_gso_enable_disable(self.ipip6.sw_if_index, enable_disable=1)
 
         # Set interface up and enable IP on it
         self.ipip6.admin_up()
 
         # Set interface up and enable IP on it
         self.ipip6.admin_up()
@@ -860,50 +967,62 @@ class TestGSO(VppTestCase):
 
         # Add IPv4 routes via tunnel interface
         self.ip4_via_ip6_tunnel = VppIpRoute(
 
         # Add IPv4 routes via tunnel interface
         self.ip4_via_ip6_tunnel = VppIpRoute(
-                self, "172.16.10.0", 24,
-                [VppRoutePath("0.0.0.0",
-                              self.ipip6.sw_if_index,
-                              proto=FibPathProto.FIB_PATH_NH_PROTO_IP4)])
+            self,
+            "172.16.10.0",
+            24,
+            [
+                VppRoutePath(
+                    "0.0.0.0",
+                    self.ipip6.sw_if_index,
+                    proto=FibPathProto.FIB_PATH_NH_PROTO_IP4,
+                )
+            ],
+        )
         self.ip4_via_ip6_tunnel.add_vpp_config()
 
         # IPSec config
         self.ipv6_params = IPsecIPv6Params()
         self.encryption_type = ESP
         config_tun_params(self.ipv6_params, self.encryption_type, self.ipip6)
         self.ip4_via_ip6_tunnel.add_vpp_config()
 
         # IPSec config
         self.ipv6_params = IPsecIPv6Params()
         self.encryption_type = ESP
         config_tun_params(self.ipv6_params, self.encryption_type, self.ipip6)
-        self.tun_sa_in_v6 = VppIpsecSA(self, self.ipv6_params.vpp_tun_sa_id,
-                                       self.ipv6_params.vpp_tun_spi,
-                                       self.ipv6_params.auth_algo_vpp_id,
-                                       self.ipv6_params.auth_key,
-                                       self.ipv6_params.crypt_algo_vpp_id,
-                                       self.ipv6_params.crypt_key,
-                                       VppEnum.vl_api_ipsec_proto_t.
-                                       IPSEC_API_PROTO_ESP)
+        self.tun_sa_in_v6 = VppIpsecSA(
+            self,
+            self.ipv6_params.vpp_tun_sa_id,
+            self.ipv6_params.vpp_tun_spi,
+            self.ipv6_params.auth_algo_vpp_id,
+            self.ipv6_params.auth_key,
+            self.ipv6_params.crypt_algo_vpp_id,
+            self.ipv6_params.crypt_key,
+            VppEnum.vl_api_ipsec_proto_t.IPSEC_API_PROTO_ESP,
+        )
         self.tun_sa_in_v6.add_vpp_config()
 
         self.tun_sa_in_v6.add_vpp_config()
 
-        self.tun_sa_out_v6 = VppIpsecSA(self, self.ipv6_params.scapy_tun_sa_id,
-                                        self.ipv6_params.scapy_tun_spi,
-                                        self.ipv6_params.auth_algo_vpp_id,
-                                        self.ipv6_params.auth_key,
-                                        self.ipv6_params.crypt_algo_vpp_id,
-                                        self.ipv6_params.crypt_key,
-                                        VppEnum.vl_api_ipsec_proto_t.
-                                        IPSEC_API_PROTO_ESP)
+        self.tun_sa_out_v6 = VppIpsecSA(
+            self,
+            self.ipv6_params.scapy_tun_sa_id,
+            self.ipv6_params.scapy_tun_spi,
+            self.ipv6_params.auth_algo_vpp_id,
+            self.ipv6_params.auth_key,
+            self.ipv6_params.crypt_algo_vpp_id,
+            self.ipv6_params.crypt_key,
+            VppEnum.vl_api_ipsec_proto_t.IPSEC_API_PROTO_ESP,
+        )
         self.tun_sa_out_v6.add_vpp_config()
 
         self.tun_sa_out_v6.add_vpp_config()
 
-        self.tun_protect_v6 = VppIpsecTunProtect(self,
-                                                 self.ipip6,
-                                                 self.tun_sa_out_v6,
-                                                 [self.tun_sa_in_v6])
+        self.tun_protect_v6 = VppIpsecTunProtect(
+            self, self.ipip6, self.tun_sa_out_v6, [self.tun_sa_in_v6]
+        )
 
         self.tun_protect_v6.add_vpp_config()
 
         #
         # IPv6/IPv4 - IPSEC
         #
 
         self.tun_protect_v6.add_vpp_config()
 
         #
         # IPv6/IPv4 - IPSEC
         #
-        ipsec64 = (Ether(src=self.pg2.remote_mac, dst="02:fe:60:1e:a2:79") /
-                   IP(src=self.pg2.remote_ip4, dst="172.16.10.3", flags='DF') /
-                   TCP(sport=1234, dport=1234) /
-                   Raw(b'\xa5' * 65200))
+        ipsec64 = (
+            Ether(src=self.pg2.remote_mac, dst="02:fe:60:1e:a2:79")
+            / IP(src=self.pg2.remote_ip4, dst="172.16.10.3", flags="DF")
+            / TCP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 65200)
+        )
 
         rxs = self.send_and_expect(self.pg2, [ipsec64], self.pg0, 45)
         size = 0
 
         rxs = self.send_and_expect(self.pg2, [ipsec64], self.pg0, 45)
         size = 0
@@ -921,19 +1040,28 @@ class TestGSO(VppTestCase):
         self.assertEqual(size, 65200)
 
         self.ip6_via_ip6_tunnel = VppIpRoute(
         self.assertEqual(size, 65200)
 
         self.ip6_via_ip6_tunnel = VppIpRoute(
-                self, "fd01:10::", 64,
-                [VppRoutePath("::",
-                              self.ipip6.sw_if_index,
-                              proto=FibPathProto.FIB_PATH_NH_PROTO_IP6)])
+            self,
+            "fd01:10::",
+            64,
+            [
+                VppRoutePath(
+                    "::",
+                    self.ipip6.sw_if_index,
+                    proto=FibPathProto.FIB_PATH_NH_PROTO_IP6,
+                )
+            ],
+        )
         self.ip6_via_ip6_tunnel.add_vpp_config()
 
         #
         # IPv6/IPv6 - IPSEC
         #
         self.ip6_via_ip6_tunnel.add_vpp_config()
 
         #
         # IPv6/IPv6 - IPSEC
         #
-        ipsec66 = (Ether(src=self.pg2.remote_mac, dst="02:fe:60:1e:a2:79") /
-                   IPv6(src=self.pg2.remote_ip6, dst="fd01:10::3") /
-                   TCP(sport=1234, dport=1234) /
-                   Raw(b'\xa5' * 65200))
+        ipsec66 = (
+            Ether(src=self.pg2.remote_mac, dst="02:fe:60:1e:a2:79")
+            / IPv6(src=self.pg2.remote_ip6, dst="fd01:10::3")
+            / TCP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 65200)
+        )
 
         rxs = self.send_and_expect(self.pg2, [ipsec66], self.pg0, 45)
         size = 0
 
         rxs = self.send_and_expect(self.pg2, [ipsec66], self.pg0, 45)
         size = 0
@@ -962,8 +1090,8 @@ class TestGSO(VppTestCase):
         self.ip6_via_ip6_tunnel.remove_vpp_config()
         self.ipip6.remove_vpp_config()
 
         self.ip6_via_ip6_tunnel.remove_vpp_config()
         self.ipip6.remove_vpp_config()
 
-        self.vapi.feature_gso_enable_disable(self.pg0.sw_if_index,
-                                             enable_disable=0)
+        self.vapi.feature_gso_enable_disable(self.pg0.sw_if_index, enable_disable=0)
+
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index e4a2bfa..a6d54f5 100644 (file)
@@ -21,7 +21,7 @@ from vpp_ip import INVALID_INDEX
 
 @tag_fixme_vpp_workers
 class TestGtpuUDP(VppTestCase):
 
 @tag_fixme_vpp_workers
 class TestGtpuUDP(VppTestCase):
-    """ GTPU UDP ports Test Case """
+    """GTPU UDP ports Test Case"""
 
     def setUp(self):
         super(TestGtpuUDP, self).setUp()
 
     def setUp(self):
         super(TestGtpuUDP, self).setUp()
@@ -39,15 +39,16 @@ class TestGtpuUDP(VppTestCase):
 
     def _check_udp_port_ip4(self, enabled=True):
 
 
     def _check_udp_port_ip4(self, enabled=True):
 
-        pkt = (Ether(src=self.pg0.local_mac, dst=self.pg0.remote_mac) /
-               IP(src=self.pg0.remote_ip4, dst=self.pg0.local_ip4) /
-               UDP(sport=self.dport, dport=self.dport, chksum=0))
+        pkt = (
+            Ether(src=self.pg0.local_mac, dst=self.pg0.remote_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg0.local_ip4)
+            / UDP(sport=self.dport, dport=self.dport, chksum=0)
+        )
 
         self.pg0.add_stream(pkt)
         self.pg_start()
 
 
         self.pg0.add_stream(pkt)
         self.pg_start()
 
-        err = self.statistics.get_counter(
-            '/err/ip4-udp-lookup/no_listener')[0]
+        err = self.statistics.get_counter("/err/ip4-udp-lookup/no_listener")[0]
 
         if enabled:
             self.assertEqual(err, self.ip4_err)
 
         if enabled:
             self.assertEqual(err, self.ip4_err)
@@ -58,15 +59,16 @@ class TestGtpuUDP(VppTestCase):
 
     def _check_udp_port_ip6(self, enabled=True):
 
 
     def _check_udp_port_ip6(self, enabled=True):
 
-        pkt = (Ether(src=self.pg0.local_mac, dst=self.pg0.remote_mac) /
-               IPv6(src=self.pg0.remote_ip6, dst=self.pg0.local_ip6) /
-               UDP(sport=self.dport, dport=self.dport, chksum=0))
+        pkt = (
+            Ether(src=self.pg0.local_mac, dst=self.pg0.remote_mac)
+            / IPv6(src=self.pg0.remote_ip6, dst=self.pg0.local_ip6)
+            / UDP(sport=self.dport, dport=self.dport, chksum=0)
+        )
 
         self.pg0.add_stream(pkt)
         self.pg_start()
 
 
         self.pg0.add_stream(pkt)
         self.pg_start()
 
-        err = self.statistics.get_counter(
-            '/err/ip6-udp-lookup/no_listener')[0]
+        err = self.statistics.get_counter("/err/ip6-udp-lookup/no_listener")[0]
 
         if enabled:
             self.assertEqual(err, self.ip6_err)
 
         if enabled:
             self.assertEqual(err, self.ip6_err)
@@ -76,46 +78,54 @@ class TestGtpuUDP(VppTestCase):
         self.ip6_err = err
 
     def test_udp_port(self):
         self.ip6_err = err
 
     def test_udp_port(self):
-        """ test UDP ports
+        """test UDP ports
         Check if there are no udp listeners before gtpu is enabled
         """
         # UDP ports should be disabled unless a tunnel is configured
         self._check_udp_port_ip4(False)
         self._check_udp_port_ip6(False)
 
         Check if there are no udp listeners before gtpu is enabled
         """
         # UDP ports should be disabled unless a tunnel is configured
         self._check_udp_port_ip4(False)
         self._check_udp_port_ip6(False)
 
-        r = self.vapi.gtpu_add_del_tunnel(is_add=True,
-                                          mcast_sw_if_index=0xFFFFFFFF,
-                                          decap_next_index=0xFFFFFFFF,
-                                          src_address=self.pg0.local_ip4,
-                                          dst_address=self.pg0.remote_ip4)
+        r = self.vapi.gtpu_add_del_tunnel(
+            is_add=True,
+            mcast_sw_if_index=0xFFFFFFFF,
+            decap_next_index=0xFFFFFFFF,
+            src_address=self.pg0.local_ip4,
+            dst_address=self.pg0.remote_ip4,
+        )
 
         # UDP port 2152 enabled for ip4
         self._check_udp_port_ip4()
 
 
         # UDP port 2152 enabled for ip4
         self._check_udp_port_ip4()
 
-        r = self.vapi.gtpu_add_del_tunnel(is_add=True,
-                                          mcast_sw_if_index=0xFFFFFFFF,
-                                          decap_next_index=0xFFFFFFFF,
-                                          src_address=self.pg0.local_ip6,
-                                          dst_address=self.pg0.remote_ip6)
+        r = self.vapi.gtpu_add_del_tunnel(
+            is_add=True,
+            mcast_sw_if_index=0xFFFFFFFF,
+            decap_next_index=0xFFFFFFFF,
+            src_address=self.pg0.local_ip6,
+            dst_address=self.pg0.remote_ip6,
+        )
 
         # UDP port 2152 enabled for ip6
         self._check_udp_port_ip6()
 
 
         # UDP port 2152 enabled for ip6
         self._check_udp_port_ip6()
 
-        r = self.vapi.gtpu_add_del_tunnel(is_add=False,
-                                          mcast_sw_if_index=0xFFFFFFFF,
-                                          decap_next_index=0xFFFFFFFF,
-                                          src_address=self.pg0.local_ip4,
-                                          dst_address=self.pg0.remote_ip4)
+        r = self.vapi.gtpu_add_del_tunnel(
+            is_add=False,
+            mcast_sw_if_index=0xFFFFFFFF,
+            decap_next_index=0xFFFFFFFF,
+            src_address=self.pg0.local_ip4,
+            dst_address=self.pg0.remote_ip4,
+        )
 
 
-        r = self.vapi.gtpu_add_del_tunnel(is_add=False,
-                                          mcast_sw_if_index=0xFFFFFFFF,
-                                          decap_next_index=0xFFFFFFFF,
-                                          src_address=self.pg0.local_ip6,
-                                          dst_address=self.pg0.remote_ip6)
+        r = self.vapi.gtpu_add_del_tunnel(
+            is_add=False,
+            mcast_sw_if_index=0xFFFFFFFF,
+            decap_next_index=0xFFFFFFFF,
+            src_address=self.pg0.local_ip6,
+            dst_address=self.pg0.remote_ip6,
+        )
 
 
 class TestGtpu(BridgeDomain, VppTestCase):
 
 
 class TestGtpu(BridgeDomain, VppTestCase):
-    """ GTPU Test Case """
+    """GTPU Test Case"""
 
     def __init__(self, *args):
         BridgeDomain.__init__(self)
 
     def __init__(self, *args):
         BridgeDomain.__init__(self)
@@ -126,14 +136,16 @@ class TestGtpu(BridgeDomain, VppTestCase):
         Encapsulate the original payload frame by adding GTPU header with its
         UDP, IP and Ethernet fields
         """
         Encapsulate the original payload frame by adding GTPU header with its
         UDP, IP and Ethernet fields
         """
-        return (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-                IP(src=self.pg0.remote_ip4, dst=self.pg0.local_ip4) /
-                UDP(sport=self.dport, dport=self.dport, chksum=0) /
-                GTP_U_Header(teid=vni, gtp_type=self.gtp_type, length=150) /
-                pkt)
+        return (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg0.local_ip4)
+            / UDP(sport=self.dport, dport=self.dport, chksum=0)
+            / GTP_U_Header(teid=vni, gtp_type=self.gtp_type, length=150)
+            / pkt
+        )
 
     def ip_range(self, start, end):
 
     def ip_range(self, start, end):
-        """ range of remote ip's """
+        """range of remote ip's"""
         return ip4_range(self.pg0.remote_ip4, start, end)
 
     def encap_mcast(self, pkt, src_ip, src_mac, vni):
         return ip4_range(self.pg0.remote_ip4, start, end)
 
     def encap_mcast(self, pkt, src_ip, src_mac, vni):
@@ -141,11 +153,13 @@ class TestGtpu(BridgeDomain, VppTestCase):
         Encapsulate the original payload frame by adding GTPU header with its
         UDP, IP and Ethernet fields
         """
         Encapsulate the original payload frame by adding GTPU header with its
         UDP, IP and Ethernet fields
         """
-        return (Ether(src=src_mac, dst=self.mcast_mac) /
-                IP(src=src_ip, dst=self.mcast_ip4) /
-                UDP(sport=self.dport, dport=self.dport, chksum=0) /
-                GTP_U_Header(teid=vni, gtp_type=self.gtp_type, length=150) /
-                pkt)
+        return (
+            Ether(src=src_mac, dst=self.mcast_mac)
+            / IP(src=src_ip, dst=self.mcast_ip4)
+            / UDP(sport=self.dport, dport=self.dport, chksum=0)
+            / GTP_U_Header(teid=vni, gtp_type=self.gtp_type, length=150)
+            / pkt
+        )
 
     def decapsulate(self, pkt):
         """
 
     def decapsulate(self, pkt):
         """
@@ -178,7 +192,7 @@ class TestGtpu(BridgeDomain, VppTestCase):
         self.assertEqual(pkt[GTP_U_Header].teid, vni)
 
     def test_encap(self):
         self.assertEqual(pkt[GTP_U_Header].teid, vni)
 
     def test_encap(self):
-        """ Encapsulation test
+        """Encapsulation test
         Send frames from pg1
         Verify receipt of encapsulated frames on pg0
         """
         Send frames from pg1
         Verify receipt of encapsulated frames on pg0
         """
@@ -197,7 +211,7 @@ class TestGtpu(BridgeDomain, VppTestCase):
         # self.assert_eq_pkts(payload, self.frame_reply)
 
     def test_ucast_flood(self):
         # self.assert_eq_pkts(payload, self.frame_reply)
 
     def test_ucast_flood(self):
-        """ Unicast flood test
+        """Unicast flood test
         Send frames from pg3
         Verify receipt of encapsulated frames on pg0
         """
         Send frames from pg3
         Verify receipt of encapsulated frames on pg0
         """
@@ -215,7 +229,7 @@ class TestGtpu(BridgeDomain, VppTestCase):
             # self.assert_eq_pkts(payload, self.frame_reply)
 
     def test_mcast_flood(self):
             # self.assert_eq_pkts(payload, self.frame_reply)
 
     def test_mcast_flood(self):
-        """ Multicast flood test
+        """Multicast flood test
         Send frames from pg2
         Verify receipt of encapsulated frames on pg0
         """
         Send frames from pg2
         Verify receipt of encapsulated frames on pg0
         """
@@ -228,8 +242,9 @@ class TestGtpu(BridgeDomain, VppTestCase):
         # Pick first received frame and check if it's correctly encapsulated.
         out = self.pg0.get_capture(1)
         pkt = out[0]
         # Pick first received frame and check if it's correctly encapsulated.
         out = self.pg0.get_capture(1)
         pkt = out[0]
-        self.check_encapsulation(pkt, self.mcast_flood_bd,
-                                 local_only=False, mcast_pkt=True)
+        self.check_encapsulation(
+            pkt, self.mcast_flood_bd, local_only=False, mcast_pkt=True
+        )
 
         # payload = self.decapsulate(pkt)
         # self.assert_eq_pkts(payload, self.frame_reply)
 
         # payload = self.decapsulate(pkt)
         # self.assert_eq_pkts(payload, self.frame_reply)
@@ -240,13 +255,15 @@ class TestGtpu(BridgeDomain, VppTestCase):
         ip_range_start = 10
         ip_range_end = ip_range_start + n_ucast_tunnels
         next_hop_address = cls.pg0.remote_ip4
         ip_range_start = 10
         ip_range_end = ip_range_start + n_ucast_tunnels
         next_hop_address = cls.pg0.remote_ip4
-        for dest_ip4 in ip4_range(next_hop_address, ip_range_start,
-                                  ip_range_end):
+        for dest_ip4 in ip4_range(next_hop_address, ip_range_start, ip_range_end):
             # add host route so dest_ip4 will not be resolved
             # add host route so dest_ip4 will not be resolved
-            rip = VppIpRoute(cls, dest_ip4, 32,
-                             [VppRoutePath(next_hop_address,
-                                           INVALID_INDEX)],
-                             register=False)
+            rip = VppIpRoute(
+                cls,
+                dest_ip4,
+                32,
+                [VppRoutePath(next_hop_address, INVALID_INDEX)],
+                register=False,
+            )
             rip.add_vpp_config()
             r = cls.vapi.gtpu_add_del_tunnel(
                 is_add=True,
             rip.add_vpp_config()
             r = cls.vapi.gtpu_add_del_tunnel(
                 is_add=True,
@@ -254,9 +271,11 @@ class TestGtpu(BridgeDomain, VppTestCase):
                 decap_next_index=0xFFFFFFFF,
                 src_address=cls.pg0.local_ip4,
                 dst_address=dest_ip4,
                 decap_next_index=0xFFFFFFFF,
                 src_address=cls.pg0.local_ip4,
                 dst_address=dest_ip4,
-                teid=teid)
-            cls.vapi.sw_interface_set_l2_bridge(rx_sw_if_index=r.sw_if_index,
-                                                bd_id=teid)
+                teid=teid,
+            )
+            cls.vapi.sw_interface_set_l2_bridge(
+                rx_sw_if_index=r.sw_if_index, bd_id=teid
+            )
 
     @classmethod
     def add_del_shared_mcast_dst_load(cls, is_add):
 
     @classmethod
     def add_del_shared_mcast_dst_load(cls, is_add):
@@ -274,8 +293,9 @@ class TestGtpu(BridgeDomain, VppTestCase):
                 dst_address=cls.mcast_ip4,
                 mcast_sw_if_index=1,
                 teid=teid,
                 dst_address=cls.mcast_ip4,
                 mcast_sw_if_index=1,
                 teid=teid,
-                is_add=is_add)
-            if r.sw_if_index == 0xffffffff:
+                is_add=is_add,
+            )
+            if r.sw_if_index == 0xFFFFFFFF:
                 raise ValueError("bad sw_if_index: ~0")
 
     @classmethod
                 raise ValueError("bad sw_if_index: ~0")
 
     @classmethod
@@ -294,16 +314,16 @@ class TestGtpu(BridgeDomain, VppTestCase):
         n_distinct_dst_tunnels = 20
         ip_range_start = 10
         ip_range_end = ip_range_start + n_distinct_dst_tunnels
         n_distinct_dst_tunnels = 20
         ip_range_start = 10
         ip_range_end = ip_range_start + n_distinct_dst_tunnels
-        for dest_ip4 in ip4_range(cls.mcast_ip4, ip_range_start,
-                                  ip_range_end):
-            teid = int(dest_ip4.split('.')[3])
+        for dest_ip4 in ip4_range(cls.mcast_ip4, ip_range_start, ip_range_end):
+            teid = int(dest_ip4.split(".")[3])
             cls.vapi.gtpu_add_del_tunnel(
                 decap_next_index=0xFFFFFFFF,
                 src_address=cls.pg0.local_ip4,
                 dst_address=dest_ip4,
                 mcast_sw_if_index=1,
                 teid=teid,
             cls.vapi.gtpu_add_del_tunnel(
                 decap_next_index=0xFFFFFFFF,
                 src_address=cls.pg0.local_ip4,
                 dst_address=dest_ip4,
                 mcast_sw_if_index=1,
                 teid=teid,
-                is_add=is_add)
+                is_add=is_add,
+            )
 
     @classmethod
     def add_mcast_tunnels_load(cls):
 
     @classmethod
     def add_mcast_tunnels_load(cls):
@@ -324,7 +344,7 @@ class TestGtpu(BridgeDomain, VppTestCase):
 
         try:
             cls.dport = 2152
 
         try:
             cls.dport = 2152
-            cls.gtp_type = 0xff
+            cls.gtp_type = 0xFF
 
             # Create 2 pg interfaces.
             cls.create_pg_interfaces(range(4))
 
             # Create 2 pg interfaces.
             cls.create_pg_interfaces(range(4))
@@ -338,7 +358,7 @@ class TestGtpu(BridgeDomain, VppTestCase):
             cls.pg0.resolve_arp()
 
             # Our Multicast address
             cls.pg0.resolve_arp()
 
             # Our Multicast address
-            cls.mcast_ip4 = '239.1.1.1'
+            cls.mcast_ip4 = "239.1.1.1"
             cls.mcast_mac = util.mcast_ip_to_mac(cls.mcast_ip4)
 
             # Create GTPU VTEP on VPP pg0, and put gtpu_tunnel0 and pg1
             cls.mcast_mac = util.mcast_ip_to_mac(cls.mcast_ip4)
 
             # Create GTPU VTEP on VPP pg0, and put gtpu_tunnel0 and pg1
@@ -351,28 +371,33 @@ class TestGtpu(BridgeDomain, VppTestCase):
                 decap_next_index=0xFFFFFFFF,
                 src_address=cls.pg0.local_ip4,
                 dst_address=cls.pg0.remote_ip4,
                 decap_next_index=0xFFFFFFFF,
                 src_address=cls.pg0.local_ip4,
                 dst_address=cls.pg0.remote_ip4,
-                teid=cls.single_tunnel_vni)
-            cls.vapi.sw_interface_set_l2_bridge(rx_sw_if_index=r.sw_if_index,
-                                                bd_id=cls.single_tunnel_bd)
+                teid=cls.single_tunnel_vni,
+            )
             cls.vapi.sw_interface_set_l2_bridge(
             cls.vapi.sw_interface_set_l2_bridge(
-                rx_sw_if_index=cls.pg1.sw_if_index, bd_id=cls.single_tunnel_bd)
+                rx_sw_if_index=r.sw_if_index, bd_id=cls.single_tunnel_bd
+            )
+            cls.vapi.sw_interface_set_l2_bridge(
+                rx_sw_if_index=cls.pg1.sw_if_index, bd_id=cls.single_tunnel_bd
+            )
 
             # Setup teid 2 to test multicast flooding
             cls.n_ucast_tunnels = 10
             cls.mcast_flood_bd = 12
 
             # Setup teid 2 to test multicast flooding
             cls.n_ucast_tunnels = 10
             cls.mcast_flood_bd = 12
-            cls.create_gtpu_flood_test_bd(cls.mcast_flood_bd,
-                                          cls.n_ucast_tunnels)
+            cls.create_gtpu_flood_test_bd(cls.mcast_flood_bd, cls.n_ucast_tunnels)
             r = cls.vapi.gtpu_add_del_tunnel(
                 is_add=True,
                 src_address=cls.pg0.local_ip4,
                 dst_address=cls.mcast_ip4,
                 mcast_sw_if_index=1,
                 decap_next_index=0xFFFFFFFF,
             r = cls.vapi.gtpu_add_del_tunnel(
                 is_add=True,
                 src_address=cls.pg0.local_ip4,
                 dst_address=cls.mcast_ip4,
                 mcast_sw_if_index=1,
                 decap_next_index=0xFFFFFFFF,
-                teid=cls.mcast_flood_bd)
-            cls.vapi.sw_interface_set_l2_bridge(rx_sw_if_index=r.sw_if_index,
-                                                bd_id=cls.mcast_flood_bd)
+                teid=cls.mcast_flood_bd,
+            )
+            cls.vapi.sw_interface_set_l2_bridge(
+                rx_sw_if_index=r.sw_if_index, bd_id=cls.mcast_flood_bd
+            )
             cls.vapi.sw_interface_set_l2_bridge(
             cls.vapi.sw_interface_set_l2_bridge(
-                rx_sw_if_index=cls.pg2.sw_if_index, bd_id=cls.mcast_flood_bd)
+                rx_sw_if_index=cls.pg2.sw_if_index, bd_id=cls.mcast_flood_bd
+            )
 
             # Add and delete mcast tunnels to check stability
             cls.add_shared_mcast_dst_load()
 
             # Add and delete mcast tunnels to check stability
             cls.add_shared_mcast_dst_load()
@@ -382,10 +407,10 @@ class TestGtpu(BridgeDomain, VppTestCase):
 
             # Setup teid 3 to test unicast flooding
             cls.ucast_flood_bd = 13
 
             # Setup teid 3 to test unicast flooding
             cls.ucast_flood_bd = 13
-            cls.create_gtpu_flood_test_bd(cls.ucast_flood_bd,
-                                          cls.n_ucast_tunnels)
+            cls.create_gtpu_flood_test_bd(cls.ucast_flood_bd, cls.n_ucast_tunnels)
             cls.vapi.sw_interface_set_l2_bridge(
             cls.vapi.sw_interface_set_l2_bridge(
-                rx_sw_if_index=cls.pg3.sw_if_index, bd_id=cls.ucast_flood_bd)
+                rx_sw_if_index=cls.pg3.sw_if_index, bd_id=cls.ucast_flood_bd
+            )
         except Exception:
             super(TestGtpu, cls).tearDownClass()
             raise
         except Exception:
             super(TestGtpu, cls).tearDownClass()
             raise
@@ -409,5 +434,5 @@ class TestGtpu(BridgeDomain, VppTestCase):
         self.logger.info(self.vapi.cli("show trace"))
 
 
         self.logger.info(self.vapi.cli("show trace"))
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index 193eb01..30fee5b 100644 (file)
@@ -11,7 +11,7 @@ from vpp_devices import VppTAPInterface
 
 @unittest.skip("Requires root")
 class TestHttpTps(VppTestCase):
 
 @unittest.skip("Requires root")
 class TestHttpTps(VppTestCase):
-    """ HTTP test class """
+    """HTTP test class"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -22,21 +22,21 @@ class TestHttpTps(VppTestCase):
         super(TestHttpTps, cls).tearDownClass()
 
     def setUp(self):
         super(TestHttpTps, cls).tearDownClass()
 
     def setUp(self):
-        self.client_ip4 = '172.0.0.2'
-        self.server_ip4 = '172.0.0.1'
-        self.vapi.cli(f'create tap id 0 host-ip4-addr {self.client_ip4}/24')
-        self.vapi.cli(f'set int ip addr tap0 {self.server_ip4}/24')
-        self.vapi.cli('set int state tap0 up')
+        self.client_ip4 = "172.0.0.2"
+        self.server_ip4 = "172.0.0.1"
+        self.vapi.cli(f"create tap id 0 host-ip4-addr {self.client_ip4}/24")
+        self.vapi.cli(f"set int ip addr tap0 {self.server_ip4}/24")
+        self.vapi.cli("set int state tap0 up")
         self.vapi.session_enable_disable(is_enable=1)
 
     def test_http_tps(self):
         self.vapi.session_enable_disable(is_enable=1)
 
     def test_http_tps(self):
-        fname = 'test_file_1M'
-        self.vapi.cli('http tps uri tcp://0.0.0.0/8080')
+        fname = "test_file_1M"
+        self.vapi.cli("http tps uri tcp://0.0.0.0/8080")
         con = http.client.HTTPConnection(f"{self.server_ip4}", 8080)
         con = http.client.HTTPConnection(f"{self.server_ip4}", 8080)
-        con.request('GET', f'/{fname}')
+        con.request("GET", f"/{fname}")
         r = con.getresponse()
         self.assertEqual(len(r.read()), 1 << 20)
 
 
         r = con.getresponse()
         self.assertEqual(len(r.read()), 1 << 20)
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index f99bdb2..6e9defd 100644 (file)
@@ -9,8 +9,15 @@ from scapy.contrib.igmpv3 import IGMPv3, IGMPv3gr, IGMPv3mq, IGMPv3mr
 
 from framework import tag_fixme_vpp_workers
 from framework import VppTestCase, VppTestRunner
 
 from framework import tag_fixme_vpp_workers
 from framework import VppTestCase, VppTestRunner
-from vpp_igmp import find_igmp_state, IGMP_FILTER, IgmpRecord, IGMP_MODE, \
-    IgmpSG, VppHostState, wait_for_igmp_event
+from vpp_igmp import (
+    find_igmp_state,
+    IGMP_FILTER,
+    IgmpRecord,
+    IGMP_MODE,
+    IgmpSG,
+    VppHostState,
+    wait_for_igmp_event,
+)
 from vpp_ip_route import find_mroute, VppIpTable
 
 
 from vpp_ip_route import find_mroute, VppIpTable
 
 
@@ -21,7 +28,7 @@ class IgmpMode:
 
 @tag_fixme_vpp_workers
 class TestIgmp(VppTestCase):
 
 @tag_fixme_vpp_workers
 class TestIgmp(VppTestCase):
-    """ IGMP Test Case """
+    """IGMP Test Case"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -63,16 +70,16 @@ class TestIgmp(VppTestCase):
         self.pg_start()
 
     def test_igmp_flush(self):
         self.pg_start()
 
     def test_igmp_flush(self):
-        """ IGMP Link Up/down and Flush """
+        """IGMP Link Up/down and Flush"""
 
         #
         # FIX THIS. Link down.
         #
 
     def test_igmp_enable(self):
 
         #
         # FIX THIS. Link down.
         #
 
     def test_igmp_enable(self):
-        """ IGMP enable/disable on an interface
+        """IGMP enable/disable on an interface
 
 
-        check for the addition/removal of the IGMP mroutes """
+        check for the addition/removal of the IGMP mroutes"""
 
         self.vapi.igmp_enable_disable(self.pg0.sw_if_index, 1, IGMP_MODE.HOST)
         self.vapi.igmp_enable_disable(self.pg1.sw_if_index, 1, IGMP_MODE.HOST)
 
         self.vapi.igmp_enable_disable(self.pg0.sw_if_index, 1, IGMP_MODE.HOST)
         self.vapi.igmp_enable_disable(self.pg1.sw_if_index, 1, IGMP_MODE.HOST)
@@ -83,10 +90,8 @@ class TestIgmp(VppTestCase):
         self.vapi.igmp_enable_disable(self.pg2.sw_if_index, 1, IGMP_MODE.HOST)
         self.vapi.igmp_enable_disable(self.pg3.sw_if_index, 1, IGMP_MODE.HOST)
 
         self.vapi.igmp_enable_disable(self.pg2.sw_if_index, 1, IGMP_MODE.HOST)
         self.vapi.igmp_enable_disable(self.pg3.sw_if_index, 1, IGMP_MODE.HOST)
 
-        self.assertTrue(find_mroute(self, "224.0.0.1", "0.0.0.0", 32,
-                                    table_id=1))
-        self.assertTrue(find_mroute(self, "224.0.0.22", "0.0.0.0", 32,
-                                    table_id=1))
+        self.assertTrue(find_mroute(self, "224.0.0.1", "0.0.0.0", 32, table_id=1))
+        self.assertTrue(find_mroute(self, "224.0.0.22", "0.0.0.0", 32, table_id=1))
         self.vapi.igmp_enable_disable(self.pg0.sw_if_index, 0, IGMP_MODE.HOST)
         self.vapi.igmp_enable_disable(self.pg1.sw_if_index, 0, IGMP_MODE.HOST)
         self.vapi.igmp_enable_disable(self.pg2.sw_if_index, 0, IGMP_MODE.HOST)
         self.vapi.igmp_enable_disable(self.pg0.sw_if_index, 0, IGMP_MODE.HOST)
         self.vapi.igmp_enable_disable(self.pg1.sw_if_index, 0, IGMP_MODE.HOST)
         self.vapi.igmp_enable_disable(self.pg2.sw_if_index, 0, IGMP_MODE.HOST)
@@ -94,10 +99,8 @@ class TestIgmp(VppTestCase):
 
         self.assertTrue(find_mroute(self, "224.0.0.1", "0.0.0.0", 32))
         self.assertFalse(find_mroute(self, "224.0.0.22", "0.0.0.0", 32))
 
         self.assertTrue(find_mroute(self, "224.0.0.1", "0.0.0.0", 32))
         self.assertFalse(find_mroute(self, "224.0.0.22", "0.0.0.0", 32))
-        self.assertTrue(find_mroute(self, "224.0.0.1", "0.0.0.0", 32,
-                                    table_id=1))
-        self.assertFalse(find_mroute(self, "224.0.0.22", "0.0.0.0", 32,
-                                     table_id=1))
+        self.assertTrue(find_mroute(self, "224.0.0.1", "0.0.0.0", 32, table_id=1))
+        self.assertFalse(find_mroute(self, "224.0.0.22", "0.0.0.0", 32, table_id=1))
 
     def verify_general_query(self, p):
         ip = p[IP]
 
     def verify_general_query(self, p):
         ip = p[IP]
@@ -126,8 +129,9 @@ class TestIgmp(VppTestCase):
         self.assertEqual(len(ip.options), 1)
         self.assertEqual(ip.options[0].option, 20)
         self.assertEqual(ip.proto, 2)
         self.assertEqual(len(ip.options), 1)
         self.assertEqual(ip.options[0].option, 20)
         self.assertEqual(ip.proto, 2)
-        self.assertEqual(IGMPv3.igmpv3types[rx[IGMPv3].type],
-                         "Version 3 Membership Report")
+        self.assertEqual(
+            IGMPv3.igmpv3types[rx[IGMPv3].type], "Version 3 Membership Report"
+        )
         self.assertEqual(rx[IGMPv3mr].numgrp, len(records))
 
         received = rx[IGMPv3mr].records
         self.assertEqual(rx[IGMPv3mr].numgrp, len(records))
 
         received = rx[IGMPv3mr].records
@@ -140,26 +144,20 @@ class TestIgmp(VppTestCase):
             self.assertEqual(gr.maddr, r.sg.gaddr)
             self.assertEqual(len(gr.srcaddrs), len(r.sg.saddrs))
 
             self.assertEqual(gr.maddr, r.sg.gaddr)
             self.assertEqual(len(gr.srcaddrs), len(r.sg.saddrs))
 
-            self.assertEqual(sorted(gr.srcaddrs),
-                             sorted(r.sg.saddrs))
+            self.assertEqual(sorted(gr.srcaddrs), sorted(r.sg.saddrs))
 
     def add_group(self, itf, sg, n_pkts=2):
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
 
     def add_group(self, itf, sg, n_pkts=2):
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
-        hs = VppHostState(self,
-                          IGMP_FILTER.INCLUDE,
-                          itf.sw_if_index,
-                          sg)
+        hs = VppHostState(self, IGMP_FILTER.INCLUDE, itf.sw_if_index, sg)
         hs.add_vpp_config()
 
         capture = itf.get_capture(n_pkts, timeout=10)
 
         # reports are transmitted twice due to default rebostness value=2
         hs.add_vpp_config()
 
         capture = itf.get_capture(n_pkts, timeout=10)
 
         # reports are transmitted twice due to default rebostness value=2
-        self.verify_report(capture[0],
-                           [IgmpRecord(sg, "Allow New Sources")]),
-        self.verify_report(capture[1],
-                           [IgmpRecord(sg, "Allow New Sources")]),
+        self.verify_report(capture[0], [IgmpRecord(sg, "Allow New Sources")]),
+        self.verify_report(capture[1], [IgmpRecord(sg, "Allow New Sources")]),
 
         return hs
 
 
         return hs
 
@@ -170,18 +168,15 @@ class TestIgmp(VppTestCase):
 
         capture = self.pg0.get_capture(1, timeout=10)
 
 
         capture = self.pg0.get_capture(1, timeout=10)
 
-        self.verify_report(capture[0],
-                           [IgmpRecord(hs.sg, "Block Old Sources")])
+        self.verify_report(capture[0], [IgmpRecord(hs.sg, "Block Old Sources")])
 
     def test_igmp_host(self):
 
     def test_igmp_host(self):
-        """ IGMP Host functions """
+        """IGMP Host functions"""
 
         #
         # Enable interface for host functions
         #
 
         #
         # Enable interface for host functions
         #
-        self.vapi.igmp_enable_disable(self.pg0.sw_if_index,
-                                      1,
-                                      IGMP_MODE.HOST)
+        self.vapi.igmp_enable_disable(self.pg0.sw_if_index, 1, IGMP_MODE.HOST)
 
         #
         # Add one S,G of state and expect a state-change event report
 
         #
         # Add one S,G of state and expect a state-change event report
@@ -192,8 +187,7 @@ class TestIgmp(VppTestCase):
         # search for the corresponding state created in VPP
         dump = self.vapi.igmp_dump(self.pg0.sw_if_index)
         self.assertEqual(len(dump), 1)
         # search for the corresponding state created in VPP
         dump = self.vapi.igmp_dump(self.pg0.sw_if_index)
         self.assertEqual(len(dump), 1)
-        self.assertTrue(find_igmp_state(dump, self.pg0,
-                                        "239.1.1.1", "1.1.1.1"))
+        self.assertTrue(find_igmp_state(dump, self.pg0, "239.1.1.1", "1.1.1.1"))
 
         #
         # Send a general query (to the all router's address)
 
         #
         # Send a general query (to the all router's address)
@@ -201,61 +195,81 @@ class TestIgmp(VppTestCase):
         # Pad the query with 0 - some devices in the big wild
         # internet are prone to this.
         #
         # Pad the query with 0 - some devices in the big wild
         # internet are prone to this.
         #
-        p_g = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-               IP(src=self.pg0.remote_ip4, dst='224.0.0.1', tos=0xc0) /
-               IGMPv3(type="Membership Query", mrcode=100) /
-               IGMPv3mq(gaddr="0.0.0.0") /
-               Raw(b'\x00' * 10))
+        p_g = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(src=self.pg0.remote_ip4, dst="224.0.0.1", tos=0xC0)
+            / IGMPv3(type="Membership Query", mrcode=100)
+            / IGMPv3mq(gaddr="0.0.0.0")
+            / Raw(b"\x00" * 10)
+        )
 
         self.send(self.pg0, p_g)
 
         capture = self.pg0.get_capture(1, timeout=10)
 
         self.send(self.pg0, p_g)
 
         capture = self.pg0.get_capture(1, timeout=10)
-        self.verify_report(capture[0],
-                           [IgmpRecord(h1.sg, "Mode Is Include")])
+        self.verify_report(capture[0], [IgmpRecord(h1.sg, "Mode Is Include")])
 
         #
         # Group specific query
         #
 
         #
         # Group specific query
         #
-        p_gs = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-                IP(src=self.pg0.remote_ip4, dst='239.1.1.1', tos=0xc0,
-                   options=[IPOption(copy_flag=1, optclass="control",
-                                     option="router_alert")]) /
-                IGMPv3(type="Membership Query", mrcode=100) /
-                IGMPv3mq(gaddr="239.1.1.1"))
+        p_gs = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(
+                src=self.pg0.remote_ip4,
+                dst="239.1.1.1",
+                tos=0xC0,
+                options=[
+                    IPOption(copy_flag=1, optclass="control", option="router_alert")
+                ],
+            )
+            / IGMPv3(type="Membership Query", mrcode=100)
+            / IGMPv3mq(gaddr="239.1.1.1")
+        )
 
         self.send(self.pg0, p_gs)
 
         capture = self.pg0.get_capture(1, timeout=10)
 
         self.send(self.pg0, p_gs)
 
         capture = self.pg0.get_capture(1, timeout=10)
-        self.verify_report(capture[0],
-                           [IgmpRecord(h1.sg, "Mode Is Include")])
+        self.verify_report(capture[0], [IgmpRecord(h1.sg, "Mode Is Include")])
 
         #
         # A group and source specific query, with the source matching
         # the source VPP has
         #
 
         #
         # A group and source specific query, with the source matching
         # the source VPP has
         #
-        p_gs1 = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-                 IP(src=self.pg0.remote_ip4, dst='239.1.1.1', tos=0xc0,
-                    options=[IPOption(copy_flag=1, optclass="control",
-                                      option="router_alert")]) /
-                 IGMPv3(type="Membership Query", mrcode=100) /
-                 IGMPv3mq(gaddr="239.1.1.1", srcaddrs=["1.1.1.1"]))
+        p_gs1 = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(
+                src=self.pg0.remote_ip4,
+                dst="239.1.1.1",
+                tos=0xC0,
+                options=[
+                    IPOption(copy_flag=1, optclass="control", option="router_alert")
+                ],
+            )
+            / IGMPv3(type="Membership Query", mrcode=100)
+            / IGMPv3mq(gaddr="239.1.1.1", srcaddrs=["1.1.1.1"])
+        )
 
         self.send(self.pg0, p_gs1)
 
         capture = self.pg0.get_capture(1, timeout=10)
 
         self.send(self.pg0, p_gs1)
 
         capture = self.pg0.get_capture(1, timeout=10)
-        self.verify_report(capture[0],
-                           [IgmpRecord(h1.sg, "Mode Is Include")])
+        self.verify_report(capture[0], [IgmpRecord(h1.sg, "Mode Is Include")])
 
         #
         # A group and source specific query that reports more sources
         # than the packet actually has.
         #
 
         #
         # A group and source specific query that reports more sources
         # than the packet actually has.
         #
-        p_gs2 = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-                 IP(src=self.pg0.remote_ip4, dst='239.1.1.1', tos=0xc0,
-                    options=[IPOption(copy_flag=1, optclass="control",
-                                      option="router_alert")]) /
-                 IGMPv3(type="Membership Query", mrcode=100) /
-                 IGMPv3mq(gaddr="239.1.1.1", numsrc=4, srcaddrs=["1.1.1.1"]))
+        p_gs2 = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(
+                src=self.pg0.remote_ip4,
+                dst="239.1.1.1",
+                tos=0xC0,
+                options=[
+                    IPOption(copy_flag=1, optclass="control", option="router_alert")
+                ],
+            )
+            / IGMPv3(type="Membership Query", mrcode=100)
+            / IGMPv3mq(gaddr="239.1.1.1", numsrc=4, srcaddrs=["1.1.1.1"])
+        )
 
         self.send_and_assert_no_replies(self.pg0, p_gs2, timeout=10)
 
 
         self.send_and_assert_no_replies(self.pg0, p_gs2, timeout=10)
 
@@ -263,12 +277,19 @@ class TestIgmp(VppTestCase):
         # A group and source specific query, with the source NOT matching
         # the source VPP has. There should be no response.
         #
         # A group and source specific query, with the source NOT matching
         # the source VPP has. There should be no response.
         #
-        p_gs2 = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-                 IP(src=self.pg0.remote_ip4, dst='239.1.1.1', tos=0xc0,
-                    options=[IPOption(copy_flag=1, optclass="control",
-                                      option="router_alert")]) /
-                 IGMPv3(type="Membership Query", mrcode=100) /
-                 IGMPv3mq(gaddr="239.1.1.1", srcaddrs=["1.1.1.2"]))
+        p_gs2 = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(
+                src=self.pg0.remote_ip4,
+                dst="239.1.1.1",
+                tos=0xC0,
+                options=[
+                    IPOption(copy_flag=1, optclass="control", option="router_alert")
+                ],
+            )
+            / IGMPv3(type="Membership Query", mrcode=100)
+            / IGMPv3mq(gaddr="239.1.1.1", srcaddrs=["1.1.1.2"])
+        )
 
         self.send_and_assert_no_replies(self.pg0, p_gs2, timeout=10)
 
 
         self.send_and_assert_no_replies(self.pg0, p_gs2, timeout=10)
 
@@ -277,19 +298,24 @@ class TestIgmp(VppTestCase):
         # one of which matches the source VPP has.
         # The report should contain only the source VPP has.
         #
         # one of which matches the source VPP has.
         # The report should contain only the source VPP has.
         #
-        p_gs3 = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-                 IP(src=self.pg0.remote_ip4, dst='239.1.1.1', tos=0xc0,
-                    options=[IPOption(copy_flag=1, optclass="control",
-                                      option="router_alert")]) /
-                 IGMPv3(type="Membership Query", mrcode=100) /
-                 IGMPv3mq(gaddr="239.1.1.1",
-                          srcaddrs=["1.1.1.1", "1.1.1.2", "1.1.1.3"]))
+        p_gs3 = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(
+                src=self.pg0.remote_ip4,
+                dst="239.1.1.1",
+                tos=0xC0,
+                options=[
+                    IPOption(copy_flag=1, optclass="control", option="router_alert")
+                ],
+            )
+            / IGMPv3(type="Membership Query", mrcode=100)
+            / IGMPv3mq(gaddr="239.1.1.1", srcaddrs=["1.1.1.1", "1.1.1.2", "1.1.1.3"])
+        )
 
         self.send(self.pg0, p_gs3)
 
         capture = self.pg0.get_capture(1, timeout=10)
 
         self.send(self.pg0, p_gs3)
 
         capture = self.pg0.get_capture(1, timeout=10)
-        self.verify_report(capture[0],
-                           [IgmpRecord(h1.sg, "Mode Is Include")])
+        self.verify_report(capture[0], [IgmpRecord(h1.sg, "Mode Is Include")])
 
         #
         # Two source and group specific queries in quick succession, the
 
         #
         # Two source and group specific queries in quick succession, the
@@ -297,13 +323,11 @@ class TestIgmp(VppTestCase):
         #
         self.send(self.pg0, [p_gs2, p_gs1])
         capture = self.pg0.get_capture(1, timeout=10)
         #
         self.send(self.pg0, [p_gs2, p_gs1])
         capture = self.pg0.get_capture(1, timeout=10)
-        self.verify_report(capture[0],
-                           [IgmpRecord(h1.sg, "Mode Is Include")])
+        self.verify_report(capture[0], [IgmpRecord(h1.sg, "Mode Is Include")])
 
         self.send(self.pg0, [p_gs1, p_gs2])
         capture = self.pg0.get_capture(1, timeout=10)
 
         self.send(self.pg0, [p_gs1, p_gs2])
         capture = self.pg0.get_capture(1, timeout=10)
-        self.verify_report(capture[0],
-                           [IgmpRecord(h1.sg, "Mode Is Include")])
+        self.verify_report(capture[0], [IgmpRecord(h1.sg, "Mode Is Include")])
 
         #
         # remove state, expect the report for the removal
 
         #
         # remove state, expect the report for the removal
@@ -316,16 +340,15 @@ class TestIgmp(VppTestCase):
         #
         # A group with multiple sources
         #
         #
         # A group with multiple sources
         #
-        h2 = self.add_group(self.pg0,
-                            IgmpSG("239.1.1.1",
-                                   ["1.1.1.1", "1.1.1.2", "1.1.1.3"]))
+        h2 = self.add_group(
+            self.pg0, IgmpSG("239.1.1.1", ["1.1.1.1", "1.1.1.2", "1.1.1.3"])
+        )
 
         # search for the corresponding state created in VPP
         dump = self.vapi.igmp_dump(self.pg0.sw_if_index)
         self.assertEqual(len(dump), 3)
         for s in h2.sg.saddrs:
 
         # search for the corresponding state created in VPP
         dump = self.vapi.igmp_dump(self.pg0.sw_if_index)
         self.assertEqual(len(dump), 3)
         for s in h2.sg.saddrs:
-            self.assertTrue(find_igmp_state(dump, self.pg0,
-                                            "239.1.1.1", s))
+            self.assertTrue(find_igmp_state(dump, self.pg0, "239.1.1.1", s))
         #
         # Send a general query (to the all router's address)
         # expect VPP to respond with a membership report will all sources
         #
         # Send a general query (to the all router's address)
         # expect VPP to respond with a membership report will all sources
@@ -333,53 +356,76 @@ class TestIgmp(VppTestCase):
         self.send(self.pg0, p_g)
 
         capture = self.pg0.get_capture(1, timeout=10)
         self.send(self.pg0, p_g)
 
         capture = self.pg0.get_capture(1, timeout=10)
-        self.verify_report(capture[0],
-                           [IgmpRecord(h2.sg, "Mode Is Include")])
+        self.verify_report(capture[0], [IgmpRecord(h2.sg, "Mode Is Include")])
 
         #
         # Group and source specific query; some present some not
         #
 
         #
         # Group and source specific query; some present some not
         #
-        p_gs = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-                IP(src=self.pg0.remote_ip4, dst='239.1.1.1', tos=0xc0,
-                   options=[IPOption(copy_flag=1, optclass="control",
-                                     option="router_alert")]) /
-                IGMPv3(type="Membership Query", mrcode=100) /
-                IGMPv3mq(gaddr="239.1.1.1",
-                         srcaddrs=["1.1.1.1", "1.1.1.2", "1.1.1.4"]))
+        p_gs = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(
+                src=self.pg0.remote_ip4,
+                dst="239.1.1.1",
+                tos=0xC0,
+                options=[
+                    IPOption(copy_flag=1, optclass="control", option="router_alert")
+                ],
+            )
+            / IGMPv3(type="Membership Query", mrcode=100)
+            / IGMPv3mq(gaddr="239.1.1.1", srcaddrs=["1.1.1.1", "1.1.1.2", "1.1.1.4"])
+        )
 
         self.send(self.pg0, p_gs)
 
         capture = self.pg0.get_capture(1, timeout=10)
 
         self.send(self.pg0, p_gs)
 
         capture = self.pg0.get_capture(1, timeout=10)
-        self.verify_report(capture[0],
-                           [IgmpRecord(
-                               IgmpSG('239.1.1.1', ["1.1.1.1", "1.1.1.2"]),
-                               "Mode Is Include")])
+        self.verify_report(
+            capture[0],
+            [
+                IgmpRecord(
+                    IgmpSG("239.1.1.1", ["1.1.1.1", "1.1.1.2"]), "Mode Is Include"
+                )
+            ],
+        )
 
         #
         # add loads more groups
         #
 
         #
         # add loads more groups
         #
-        h3 = self.add_group(self.pg0,
-                            IgmpSG("239.1.1.2",
-                                   ["2.1.1.1", "2.1.1.2", "2.1.1.3"]))
-        h4 = self.add_group(self.pg0,
-                            IgmpSG("239.1.1.3",
-                                   ["3.1.1.1", "3.1.1.2", "3.1.1.3"]))
-        h5 = self.add_group(self.pg0,
-                            IgmpSG("239.1.1.4",
-                                   ["4.1.1.1", "4.1.1.2", "4.1.1.3"]))
-        h6 = self.add_group(self.pg0,
-                            IgmpSG("239.1.1.5",
-                                   ["5.1.1.1", "5.1.1.2", "5.1.1.3"]))
-        h7 = self.add_group(self.pg0,
-                            IgmpSG("239.1.1.6",
-                                   ["6.1.1.1", "6.1.1.2",
-                                    "6.1.1.3", "6.1.1.4",
-                                    "6.1.1.5", "6.1.1.6",
-                                    "6.1.1.7", "6.1.1.8",
-                                    "6.1.1.9", "6.1.1.10",
-                                    "6.1.1.11", "6.1.1.12",
-                                    "6.1.1.13", "6.1.1.14",
-                                    "6.1.1.15", "6.1.1.16"]))
+        h3 = self.add_group(
+            self.pg0, IgmpSG("239.1.1.2", ["2.1.1.1", "2.1.1.2", "2.1.1.3"])
+        )
+        h4 = self.add_group(
+            self.pg0, IgmpSG("239.1.1.3", ["3.1.1.1", "3.1.1.2", "3.1.1.3"])
+        )
+        h5 = self.add_group(
+            self.pg0, IgmpSG("239.1.1.4", ["4.1.1.1", "4.1.1.2", "4.1.1.3"])
+        )
+        h6 = self.add_group(
+            self.pg0, IgmpSG("239.1.1.5", ["5.1.1.1", "5.1.1.2", "5.1.1.3"])
+        )
+        h7 = self.add_group(
+            self.pg0,
+            IgmpSG(
+                "239.1.1.6",
+                [
+                    "6.1.1.1",
+                    "6.1.1.2",
+                    "6.1.1.3",
+                    "6.1.1.4",
+                    "6.1.1.5",
+                    "6.1.1.6",
+                    "6.1.1.7",
+                    "6.1.1.8",
+                    "6.1.1.9",
+                    "6.1.1.10",
+                    "6.1.1.11",
+                    "6.1.1.12",
+                    "6.1.1.13",
+                    "6.1.1.14",
+                    "6.1.1.15",
+                    "6.1.1.16",
+                ],
+            ),
+        )
 
         #
         # general query.
 
         #
         # general query.
@@ -390,39 +436,59 @@ class TestIgmp(VppTestCase):
 
         capture = self.pg0.get_capture(1, timeout=10)
 
 
         capture = self.pg0.get_capture(1, timeout=10)
 
-        self.verify_report(capture[0],
-                           [IgmpRecord(h3.sg, "Mode Is Include"),
-                            IgmpRecord(h2.sg, "Mode Is Include"),
-                            IgmpRecord(h6.sg, "Mode Is Include"),
-                            IgmpRecord(h4.sg, "Mode Is Include"),
-                            IgmpRecord(h5.sg, "Mode Is Include"),
-                            IgmpRecord(h7.sg, "Mode Is Include")])
+        self.verify_report(
+            capture[0],
+            [
+                IgmpRecord(h3.sg, "Mode Is Include"),
+                IgmpRecord(h2.sg, "Mode Is Include"),
+                IgmpRecord(h6.sg, "Mode Is Include"),
+                IgmpRecord(h4.sg, "Mode Is Include"),
+                IgmpRecord(h5.sg, "Mode Is Include"),
+                IgmpRecord(h7.sg, "Mode Is Include"),
+            ],
+        )
 
         #
         # modify a group to add and remove some sources
         #
 
         #
         # modify a group to add and remove some sources
         #
-        h7.sg = IgmpSG("239.1.1.6",
-                       ["6.1.1.1", "6.1.1.2",
-                        "6.1.1.5", "6.1.1.6",
-                        "6.1.1.7", "6.1.1.8",
-                        "6.1.1.9", "6.1.1.10",
-                        "6.1.1.11", "6.1.1.12",
-                        "6.1.1.13", "6.1.1.14",
-                        "6.1.1.15", "6.1.1.16",
-                        "6.1.1.17", "6.1.1.18"])
+        h7.sg = IgmpSG(
+            "239.1.1.6",
+            [
+                "6.1.1.1",
+                "6.1.1.2",
+                "6.1.1.5",
+                "6.1.1.6",
+                "6.1.1.7",
+                "6.1.1.8",
+                "6.1.1.9",
+                "6.1.1.10",
+                "6.1.1.11",
+                "6.1.1.12",
+                "6.1.1.13",
+                "6.1.1.14",
+                "6.1.1.15",
+                "6.1.1.16",
+                "6.1.1.17",
+                "6.1.1.18",
+            ],
+        )
 
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         h7.add_vpp_config()
 
         capture = self.pg0.get_capture(1, timeout=10)
 
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         h7.add_vpp_config()
 
         capture = self.pg0.get_capture(1, timeout=10)
-        self.verify_report(capture[0],
-                           [IgmpRecord(IgmpSG("239.1.1.6",
-                                              ["6.1.1.17", "6.1.1.18"]),
-                                       "Allow New Sources"),
-                            IgmpRecord(IgmpSG("239.1.1.6",
-                                              ["6.1.1.3", "6.1.1.4"]),
-                                       "Block Old Sources")])
+        self.verify_report(
+            capture[0],
+            [
+                IgmpRecord(
+                    IgmpSG("239.1.1.6", ["6.1.1.17", "6.1.1.18"]), "Allow New Sources"
+                ),
+                IgmpRecord(
+                    IgmpSG("239.1.1.6", ["6.1.1.3", "6.1.1.4"]), "Block Old Sources"
+                ),
+            ],
+        )
 
         #
         # add an additional groups with many sources so that each group
 
         #
         # add an additional groups with many sources so that each group
@@ -435,27 +501,26 @@ class TestIgmp(VppTestCase):
         for i in range(128):
             src_list.append("10.1.1.%d" % i)
 
         for i in range(128):
             src_list.append("10.1.1.%d" % i)
 
-        h8 = self.add_group(self.pg0,
-                            IgmpSG("238.1.1.1", src_list))
-        h9 = self.add_group(self.pg0,
-                            IgmpSG("238.1.1.2", src_list))
+        h8 = self.add_group(self.pg0, IgmpSG("238.1.1.1", src_list))
+        h9 = self.add_group(self.pg0, IgmpSG("238.1.1.2", src_list))
 
         self.send(self.pg0, p_g)
 
         capture = self.pg0.get_capture(4, timeout=10)
 
 
         self.send(self.pg0, p_g)
 
         capture = self.pg0.get_capture(4, timeout=10)
 
-        self.verify_report(capture[0],
-                           [IgmpRecord(h3.sg, "Mode Is Include"),
-                            IgmpRecord(h2.sg, "Mode Is Include"),
-                            IgmpRecord(h6.sg, "Mode Is Include"),
-                            IgmpRecord(h4.sg, "Mode Is Include"),
-                            IgmpRecord(h5.sg, "Mode Is Include")])
-        self.verify_report(capture[1],
-                           [IgmpRecord(h8.sg, "Mode Is Include")])
-        self.verify_report(capture[2],
-                           [IgmpRecord(h7.sg, "Mode Is Include")])
-        self.verify_report(capture[3],
-                           [IgmpRecord(h9.sg, "Mode Is Include")])
+        self.verify_report(
+            capture[0],
+            [
+                IgmpRecord(h3.sg, "Mode Is Include"),
+                IgmpRecord(h2.sg, "Mode Is Include"),
+                IgmpRecord(h6.sg, "Mode Is Include"),
+                IgmpRecord(h4.sg, "Mode Is Include"),
+                IgmpRecord(h5.sg, "Mode Is Include"),
+            ],
+        )
+        self.verify_report(capture[1], [IgmpRecord(h8.sg, "Mode Is Include")])
+        self.verify_report(capture[2], [IgmpRecord(h7.sg, "Mode Is Include")])
+        self.verify_report(capture[3], [IgmpRecord(h9.sg, "Mode Is Include")])
 
         #
         # drop the MTU further (so a 128 sized group won't fit)
 
         #
         # drop the MTU further (so a 128 sized group won't fit)
@@ -465,10 +530,12 @@ class TestIgmp(VppTestCase):
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
-        h10 = VppHostState(self,
-                           IGMP_FILTER.INCLUDE,
-                           self.pg0.sw_if_index,
-                           IgmpSG("238.1.1.3", src_list))
+        h10 = VppHostState(
+            self,
+            IGMP_FILTER.INCLUDE,
+            self.pg0.sw_if_index,
+            IgmpSG("238.1.1.3", src_list),
+        )
         h10.add_vpp_config()
 
         capture = self.pg0.get_capture(2, timeout=10)
         h10.add_vpp_config()
 
         capture = self.pg0.get_capture(2, timeout=10)
@@ -498,32 +565,51 @@ class TestIgmp(VppTestCase):
         #  ADD STATE ON MORE INTERFACES
         #
 
         #  ADD STATE ON MORE INTERFACES
         #
 
-        self.vapi.igmp_enable_disable(self.pg0.sw_if_index,
-                                      0,
-                                      IGMP_MODE.HOST)
+        self.vapi.igmp_enable_disable(self.pg0.sw_if_index, 0, IGMP_MODE.HOST)
 
     def test_igmp_router(self):
 
     def test_igmp_router(self):
-        """ IGMP Router Functions """
+        """IGMP Router Functions"""
 
         #
         # Drop reports when not enabled
         #
 
         #
         # Drop reports when not enabled
         #
-        p_j = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-               IP(src=self.pg0.remote_ip4, dst="224.0.0.22", tos=0xc0, ttl=1,
-                  options=[IPOption(copy_flag=1, optclass="control",
-                                    option="router_alert")]) /
-               IGMPv3(type="Version 3 Membership Report") /
-               IGMPv3mr(numgrp=1) /
-               IGMPv3gr(rtype="Allow New Sources",
-                        maddr="239.1.1.1", srcaddrs=["10.1.1.1", "10.1.1.2"]))
-        p_l = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-               IP(src=self.pg0.remote_ip4, dst="224.0.0.22", tos=0xc0,
-                  options=[IPOption(copy_flag=1, optclass="control",
-                                    option="router_alert")]) /
-               IGMPv3(type="Version 3 Membership Report") /
-               IGMPv3mr(numgrp=1) /
-               IGMPv3gr(rtype="Block Old Sources",
-                        maddr="239.1.1.1", srcaddrs=["10.1.1.1", "10.1.1.2"]))
+        p_j = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(
+                src=self.pg0.remote_ip4,
+                dst="224.0.0.22",
+                tos=0xC0,
+                ttl=1,
+                options=[
+                    IPOption(copy_flag=1, optclass="control", option="router_alert")
+                ],
+            )
+            / IGMPv3(type="Version 3 Membership Report")
+            / IGMPv3mr(numgrp=1)
+            / IGMPv3gr(
+                rtype="Allow New Sources",
+                maddr="239.1.1.1",
+                srcaddrs=["10.1.1.1", "10.1.1.2"],
+            )
+        )
+        p_l = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(
+                src=self.pg0.remote_ip4,
+                dst="224.0.0.22",
+                tos=0xC0,
+                options=[
+                    IPOption(copy_flag=1, optclass="control", option="router_alert")
+                ],
+            )
+            / IGMPv3(type="Version 3 Membership Report")
+            / IGMPv3mr(numgrp=1)
+            / IGMPv3gr(
+                rtype="Block Old Sources",
+                maddr="239.1.1.1",
+                srcaddrs=["10.1.1.1", "10.1.1.2"],
+            )
+        )
 
         self.send(self.pg0, p_j)
         self.assertFalse(self.vapi.igmp_dump())
 
         self.send(self.pg0, p_j)
         self.assertFalse(self.vapi.igmp_dump())
@@ -539,9 +625,7 @@ class TestIgmp(VppTestCase):
         #
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         #
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
-        self.vapi.igmp_enable_disable(self.pg0.sw_if_index,
-                                      1,
-                                      IGMP_MODE.ROUTER)
+        self.vapi.igmp_enable_disable(self.pg0.sw_if_index, 1, IGMP_MODE.ROUTER)
         self.vapi.want_igmp_events(1)
 
         #
         self.vapi.want_igmp_events(1)
 
         #
@@ -559,26 +643,28 @@ class TestIgmp(VppTestCase):
         #
         self.send(self.pg0, p_j)
 
         #
         self.send(self.pg0, p_j)
 
-        self.assertTrue(wait_for_igmp_event(self, 1, self.pg0,
-                                            "239.1.1.1", "10.1.1.1", 1))
-        self.assertTrue(wait_for_igmp_event(self, 1, self.pg0,
-                                            "239.1.1.1", "10.1.1.2", 1))
+        self.assertTrue(
+            wait_for_igmp_event(self, 1, self.pg0, "239.1.1.1", "10.1.1.1", 1)
+        )
+        self.assertTrue(
+            wait_for_igmp_event(self, 1, self.pg0, "239.1.1.1", "10.1.1.2", 1)
+        )
         dump = self.vapi.igmp_dump(self.pg0.sw_if_index)
         self.assertEqual(len(dump), 2)
         dump = self.vapi.igmp_dump(self.pg0.sw_if_index)
         self.assertEqual(len(dump), 2)
-        self.assertTrue(find_igmp_state(dump, self.pg0,
-                                        "239.1.1.1", "10.1.1.1"))
-        self.assertTrue(find_igmp_state(dump, self.pg0,
-                                        "239.1.1.1", "10.1.1.2"))
+        self.assertTrue(find_igmp_state(dump, self.pg0, "239.1.1.1", "10.1.1.1"))
+        self.assertTrue(find_igmp_state(dump, self.pg0, "239.1.1.1", "10.1.1.2"))
 
         #
         # wait for the per-source timer to expire
         # the state should be reaped
         # VPP sends a notification that the group has been left
         #
 
         #
         # wait for the per-source timer to expire
         # the state should be reaped
         # VPP sends a notification that the group has been left
         #
-        self.assertTrue(wait_for_igmp_event(self, 4, self.pg0,
-                                            "239.1.1.1", "10.1.1.1", 0))
-        self.assertTrue(wait_for_igmp_event(self, 1, self.pg0,
-                                            "239.1.1.1", "10.1.1.2", 0))
+        self.assertTrue(
+            wait_for_igmp_event(self, 4, self.pg0, "239.1.1.1", "10.1.1.1", 0)
+        )
+        self.assertTrue(
+            wait_for_igmp_event(self, 1, self.pg0, "239.1.1.1", "10.1.1.2", 0)
+        )
         self.assertFalse(self.vapi.igmp_dump())
 
         #
         self.assertFalse(self.vapi.igmp_dump())
 
         #
@@ -589,10 +675,12 @@ class TestIgmp(VppTestCase):
         # expired in 3 seconds.
         #
         self.send(self.pg0, p_j)
         # expired in 3 seconds.
         #
         self.send(self.pg0, p_j)
-        self.assertTrue(wait_for_igmp_event(self, 1, self.pg0,
-                                            "239.1.1.1", "10.1.1.1", 1))
-        self.assertTrue(wait_for_igmp_event(self, 1, self.pg0,
-                                            "239.1.1.1", "10.1.1.2", 1))
+        self.assertTrue(
+            wait_for_igmp_event(self, 1, self.pg0, "239.1.1.1", "10.1.1.1", 1)
+        )
+        self.assertTrue(
+            wait_for_igmp_event(self, 1, self.pg0, "239.1.1.1", "10.1.1.2", 1)
+        )
         dump = self.vapi.igmp_dump(self.pg0.sw_if_index)
         self.assertEqual(len(dump), 2)
 
         dump = self.vapi.igmp_dump(self.pg0.sw_if_index)
         self.assertEqual(len(dump), 2)
 
@@ -600,33 +688,43 @@ class TestIgmp(VppTestCase):
         self.verify_general_query(capture[0])
         self.verify_general_query(capture[1])
 
         self.verify_general_query(capture[0])
         self.verify_general_query(capture[1])
 
-        p_cs = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-                IP(src=self.pg0.remote_ip4, dst="224.0.0.22", tos=0xc0,
-                   options=[IPOption(copy_flag=1, optclass="control",
-                                     option="router_alert")]) /
-                IGMPv3(type="Version 3 Membership Report") /
-                IGMPv3mr(numgrp=1) /
-                IGMPv3gr(rtype="Mode Is Include",
-                         maddr="239.1.1.1", srcaddrs=["10.1.1.1", "10.1.1.2"]))
+        p_cs = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(
+                src=self.pg0.remote_ip4,
+                dst="224.0.0.22",
+                tos=0xC0,
+                options=[
+                    IPOption(copy_flag=1, optclass="control", option="router_alert")
+                ],
+            )
+            / IGMPv3(type="Version 3 Membership Report")
+            / IGMPv3mr(numgrp=1)
+            / IGMPv3gr(
+                rtype="Mode Is Include",
+                maddr="239.1.1.1",
+                srcaddrs=["10.1.1.1", "10.1.1.2"],
+            )
+        )
 
         self.send(self.pg0, p_cs)
 
         self.sleep(2)
         dump = self.vapi.igmp_dump(self.pg0.sw_if_index)
         self.assertEqual(len(dump), 2)
 
         self.send(self.pg0, p_cs)
 
         self.sleep(2)
         dump = self.vapi.igmp_dump(self.pg0.sw_if_index)
         self.assertEqual(len(dump), 2)
-        self.assertTrue(find_igmp_state(dump, self.pg0,
-                                        "239.1.1.1", "10.1.1.1"))
-        self.assertTrue(find_igmp_state(dump, self.pg0,
-                                        "239.1.1.1", "10.1.1.2"))
+        self.assertTrue(find_igmp_state(dump, self.pg0, "239.1.1.1", "10.1.1.1"))
+        self.assertTrue(find_igmp_state(dump, self.pg0, "239.1.1.1", "10.1.1.2"))
 
         #
         # wait for the per-source timer to expire
         # the state should be reaped
         #
 
         #
         # wait for the per-source timer to expire
         # the state should be reaped
         #
-        self.assertTrue(wait_for_igmp_event(self, 4, self.pg0,
-                                            "239.1.1.1", "10.1.1.1", 0))
-        self.assertTrue(wait_for_igmp_event(self, 1, self.pg0,
-                                            "239.1.1.1", "10.1.1.2", 0))
+        self.assertTrue(
+            wait_for_igmp_event(self, 4, self.pg0, "239.1.1.1", "10.1.1.1", 0)
+        )
+        self.assertTrue(
+            wait_for_igmp_event(self, 1, self.pg0, "239.1.1.1", "10.1.1.2", 0)
+        )
         self.assertFalse(self.vapi.igmp_dump())
 
         #
         self.assertFalse(self.vapi.igmp_dump())
 
         #
@@ -635,203 +733,261 @@ class TestIgmp(VppTestCase):
         #
         self.send(self.pg0, p_j)
 
         #
         self.send(self.pg0, p_j)
 
-        self.assertTrue(wait_for_igmp_event(self, 1, self.pg0,
-                                            "239.1.1.1", "10.1.1.1", 1))
-        self.assertTrue(wait_for_igmp_event(self, 1, self.pg0,
-                                            "239.1.1.1", "10.1.1.2", 1))
+        self.assertTrue(
+            wait_for_igmp_event(self, 1, self.pg0, "239.1.1.1", "10.1.1.1", 1)
+        )
+        self.assertTrue(
+            wait_for_igmp_event(self, 1, self.pg0, "239.1.1.1", "10.1.1.2", 1)
+        )
         dump = self.vapi.igmp_dump(self.pg0.sw_if_index)
         self.assertEqual(len(dump), 2)
 
         self.send(self.pg0, p_l)
         capture = self.pg0.get_capture(1, timeout=3)
         dump = self.vapi.igmp_dump(self.pg0.sw_if_index)
         self.assertEqual(len(dump), 2)
 
         self.send(self.pg0, p_l)
         capture = self.pg0.get_capture(1, timeout=3)
-        self.verify_group_query(capture[0], "239.1.1.1",
-                                ["10.1.1.1", "10.1.1.2"])
+        self.verify_group_query(capture[0], "239.1.1.1", ["10.1.1.1", "10.1.1.2"])
 
         #
         # the group specific query drops the timeout to leave (=1) seconds
         #
 
         #
         # the group specific query drops the timeout to leave (=1) seconds
         #
-        self.assertTrue(wait_for_igmp_event(self, 2, self.pg0,
-                                            "239.1.1.1", "10.1.1.1", 0))
-        self.assertTrue(wait_for_igmp_event(self, 1, self.pg0,
-                                            "239.1.1.1", "10.1.1.2", 0))
+        self.assertTrue(
+            wait_for_igmp_event(self, 2, self.pg0, "239.1.1.1", "10.1.1.1", 0)
+        )
+        self.assertTrue(
+            wait_for_igmp_event(self, 1, self.pg0, "239.1.1.1", "10.1.1.2", 0)
+        )
         self.assertFalse(self.vapi.igmp_dump())
         self.assertFalse(self.vapi.igmp_dump())
 
         #
         # a TO_EX({}) / IN_EX({}) is treated like a (*,G) join
         #
         self.assertFalse(self.vapi.igmp_dump())
         self.assertFalse(self.vapi.igmp_dump())
 
         #
         # a TO_EX({}) / IN_EX({}) is treated like a (*,G) join
         #
-        p_j = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-               IP(src=self.pg0.remote_ip4, dst="224.0.0.22", tos=0xc0, ttl=1,
-                  options=[IPOption(copy_flag=1, optclass="control",
-                                    option="router_alert")]) /
-               IGMPv3(type="Version 3 Membership Report") /
-               IGMPv3mr(numgrp=1) /
-               IGMPv3gr(rtype="Change To Exclude Mode", maddr="239.1.1.2"))
+        p_j = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(
+                src=self.pg0.remote_ip4,
+                dst="224.0.0.22",
+                tos=0xC0,
+                ttl=1,
+                options=[
+                    IPOption(copy_flag=1, optclass="control", option="router_alert")
+                ],
+            )
+            / IGMPv3(type="Version 3 Membership Report")
+            / IGMPv3mr(numgrp=1)
+            / IGMPv3gr(rtype="Change To Exclude Mode", maddr="239.1.1.2")
+        )
 
         self.send(self.pg0, p_j)
 
 
         self.send(self.pg0, p_j)
 
-        self.assertTrue(wait_for_igmp_event(self, 1, self.pg0,
-                                            "239.1.1.2", "0.0.0.0", 1))
-
-        p_j = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-               IP(src=self.pg0.remote_ip4, dst="224.0.0.22", tos=0xc0, ttl=1,
-                  options=[IPOption(copy_flag=1, optclass="control",
-                                    option="router_alert")]) /
-               IGMPv3(type="Version 3 Membership Report") /
-               IGMPv3mr(numgrp=1) /
-               IGMPv3gr(rtype="Mode Is Exclude", maddr="239.1.1.3"))
+        self.assertTrue(
+            wait_for_igmp_event(self, 1, self.pg0, "239.1.1.2", "0.0.0.0", 1)
+        )
+
+        p_j = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(
+                src=self.pg0.remote_ip4,
+                dst="224.0.0.22",
+                tos=0xC0,
+                ttl=1,
+                options=[
+                    IPOption(copy_flag=1, optclass="control", option="router_alert")
+                ],
+            )
+            / IGMPv3(type="Version 3 Membership Report")
+            / IGMPv3mr(numgrp=1)
+            / IGMPv3gr(rtype="Mode Is Exclude", maddr="239.1.1.3")
+        )
 
         self.send(self.pg0, p_j)
 
 
         self.send(self.pg0, p_j)
 
-        self.assertTrue(wait_for_igmp_event(self, 1, self.pg0,
-                                            "239.1.1.3", "0.0.0.0", 1))
+        self.assertTrue(
+            wait_for_igmp_event(self, 1, self.pg0, "239.1.1.3", "0.0.0.0", 1)
+        )
 
         #
         # A 'allow sources' for {} should be ignored as it should
         # never be sent.
         #
 
         #
         # A 'allow sources' for {} should be ignored as it should
         # never be sent.
         #
-        p_j = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-               IP(src=self.pg0.remote_ip4, dst="224.0.0.22", tos=0xc0, ttl=1,
-                  options=[IPOption(copy_flag=1, optclass="control",
-                                    option="router_alert")]) /
-               IGMPv3(type="Version 3 Membership Report") /
-               IGMPv3mr(numgrp=1) /
-               IGMPv3gr(rtype="Allow New Sources", maddr="239.1.1.4"))
+        p_j = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(
+                src=self.pg0.remote_ip4,
+                dst="224.0.0.22",
+                tos=0xC0,
+                ttl=1,
+                options=[
+                    IPOption(copy_flag=1, optclass="control", option="router_alert")
+                ],
+            )
+            / IGMPv3(type="Version 3 Membership Report")
+            / IGMPv3mr(numgrp=1)
+            / IGMPv3gr(rtype="Allow New Sources", maddr="239.1.1.4")
+        )
 
         self.send(self.pg0, p_j)
 
         dump = self.vapi.igmp_dump(self.pg0.sw_if_index)
 
         self.send(self.pg0, p_j)
 
         dump = self.vapi.igmp_dump(self.pg0.sw_if_index)
-        self.assertTrue(find_igmp_state(dump, self.pg0,
-                                        "239.1.1.2", "0.0.0.0"))
-        self.assertTrue(find_igmp_state(dump, self.pg0,
-                                        "239.1.1.3", "0.0.0.0"))
-        self.assertFalse(find_igmp_state(dump, self.pg0,
-                                         "239.1.1.4", "0.0.0.0"))
+        self.assertTrue(find_igmp_state(dump, self.pg0, "239.1.1.2", "0.0.0.0"))
+        self.assertTrue(find_igmp_state(dump, self.pg0, "239.1.1.3", "0.0.0.0"))
+        self.assertFalse(find_igmp_state(dump, self.pg0, "239.1.1.4", "0.0.0.0"))
 
         #
         # a TO_IN({}) and IS_IN({}) are treated like a (*,G) leave
         #
         self.vapi.cli("set logging class igmp level debug")
 
         #
         # a TO_IN({}) and IS_IN({}) are treated like a (*,G) leave
         #
         self.vapi.cli("set logging class igmp level debug")
-        p_l = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-               IP(src=self.pg0.remote_ip4, dst="224.0.0.22", tos=0xc0, ttl=1,
-                  options=[IPOption(copy_flag=1, optclass="control",
-                                    option="router_alert")]) /
-               IGMPv3(type="Version 3 Membership Report") /
-               IGMPv3mr(numgrp=1) /
-               IGMPv3gr(rtype="Change To Include Mode", maddr="239.1.1.2"))
+        p_l = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(
+                src=self.pg0.remote_ip4,
+                dst="224.0.0.22",
+                tos=0xC0,
+                ttl=1,
+                options=[
+                    IPOption(copy_flag=1, optclass="control", option="router_alert")
+                ],
+            )
+            / IGMPv3(type="Version 3 Membership Report")
+            / IGMPv3mr(numgrp=1)
+            / IGMPv3gr(rtype="Change To Include Mode", maddr="239.1.1.2")
+        )
 
         self.send(self.pg0, p_l)
 
         self.send(self.pg0, p_l)
-        self.assertTrue(wait_for_igmp_event(self, 2, self.pg0,
-                                            "239.1.1.2", "0.0.0.0", 0))
-
-        p_l = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-               IP(src=self.pg0.remote_ip4, dst="224.0.0.22", tos=0xc0, ttl=1,
-                  options=[IPOption(copy_flag=1, optclass="control",
-                                    option="router_alert")]) /
-               IGMPv3(type="Version 3 Membership Report") /
-               IGMPv3mr(numgrp=1) /
-               IGMPv3gr(rtype="Mode Is Include", maddr="239.1.1.3"))
+        self.assertTrue(
+            wait_for_igmp_event(self, 2, self.pg0, "239.1.1.2", "0.0.0.0", 0)
+        )
+
+        p_l = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(
+                src=self.pg0.remote_ip4,
+                dst="224.0.0.22",
+                tos=0xC0,
+                ttl=1,
+                options=[
+                    IPOption(copy_flag=1, optclass="control", option="router_alert")
+                ],
+            )
+            / IGMPv3(type="Version 3 Membership Report")
+            / IGMPv3mr(numgrp=1)
+            / IGMPv3gr(rtype="Mode Is Include", maddr="239.1.1.3")
+        )
 
         self.send(self.pg0, p_l)
 
 
         self.send(self.pg0, p_l)
 
-        self.assertTrue(wait_for_igmp_event(self, 2, self.pg0,
-                                            "239.1.1.3", "0.0.0.0", 0))
+        self.assertTrue(
+            wait_for_igmp_event(self, 2, self.pg0, "239.1.1.3", "0.0.0.0", 0)
+        )
         self.assertFalse(self.vapi.igmp_dump(self.pg0.sw_if_index))
 
         #
         # disable router config
         #
         self.assertFalse(self.vapi.igmp_dump(self.pg0.sw_if_index))
 
         #
         # disable router config
         #
-        self.vapi.igmp_enable_disable(self.pg0.sw_if_index,
-                                      0,
-                                      IGMP_MODE.ROUTER)
+        self.vapi.igmp_enable_disable(self.pg0.sw_if_index, 0, IGMP_MODE.ROUTER)
 
     def _create_igmpv3_pck(self, itf, rtype, maddr, srcaddrs):
 
     def _create_igmpv3_pck(self, itf, rtype, maddr, srcaddrs):
-        p = (Ether(dst=itf.local_mac, src=itf.remote_mac) /
-             IP(src=itf.remote_ip4, dst="224.0.0.22", tos=0xc0, ttl=1,
-                options=[IPOption(copy_flag=1, optclass="control",
-                                  option="router_alert")]) /
-             IGMPv3(type="Version 3 Membership Report") /
-             IGMPv3mr(numgrp=1) /
-             IGMPv3gr(rtype=rtype,
-                      maddr=maddr, srcaddrs=srcaddrs))
+        p = (
+            Ether(dst=itf.local_mac, src=itf.remote_mac)
+            / IP(
+                src=itf.remote_ip4,
+                dst="224.0.0.22",
+                tos=0xC0,
+                ttl=1,
+                options=[
+                    IPOption(copy_flag=1, optclass="control", option="router_alert")
+                ],
+            )
+            / IGMPv3(type="Version 3 Membership Report")
+            / IGMPv3mr(numgrp=1)
+            / IGMPv3gr(rtype=rtype, maddr=maddr, srcaddrs=srcaddrs)
+        )
         return p
 
     def test_igmp_proxy_device(self):
         return p
 
     def test_igmp_proxy_device(self):
-        """ IGMP proxy device """
+        """IGMP proxy device"""
         self.pg2.admin_down()
         self.pg2.unconfig_ip4()
         self.pg2.set_table_ip4(0)
         self.pg2.config_ip4()
         self.pg2.admin_up()
 
         self.pg2.admin_down()
         self.pg2.unconfig_ip4()
         self.pg2.set_table_ip4(0)
         self.pg2.config_ip4()
         self.pg2.admin_up()
 
-        self.vapi.cli('test igmp timers query 10 src 3 leave 1')
+        self.vapi.cli("test igmp timers query 10 src 3 leave 1")
 
         # enable IGMP
         self.vapi.igmp_enable_disable(self.pg0.sw_if_index, 1, IGMP_MODE.HOST)
 
         # enable IGMP
         self.vapi.igmp_enable_disable(self.pg0.sw_if_index, 1, IGMP_MODE.HOST)
-        self.vapi.igmp_enable_disable(self.pg1.sw_if_index, 1,
-                                      IGMP_MODE.ROUTER)
-        self.vapi.igmp_enable_disable(self.pg2.sw_if_index, 1,
-                                      IGMP_MODE.ROUTER)
+        self.vapi.igmp_enable_disable(self.pg1.sw_if_index, 1, IGMP_MODE.ROUTER)
+        self.vapi.igmp_enable_disable(self.pg2.sw_if_index, 1, IGMP_MODE.ROUTER)
 
         # create IGMP proxy device
         self.vapi.igmp_proxy_device_add_del(0, self.pg0.sw_if_index, 1)
 
         # create IGMP proxy device
         self.vapi.igmp_proxy_device_add_del(0, self.pg0.sw_if_index, 1)
-        self.vapi.igmp_proxy_device_add_del_interface(0,
-                                                      self.pg1.sw_if_index, 1)
-        self.vapi.igmp_proxy_device_add_del_interface(0,
-                                                      self.pg2.sw_if_index, 1)
+        self.vapi.igmp_proxy_device_add_del_interface(0, self.pg1.sw_if_index, 1)
+        self.vapi.igmp_proxy_device_add_del_interface(0, self.pg2.sw_if_index, 1)
 
         # send join on pg1. join should be proxied by pg0
 
         # send join on pg1. join should be proxied by pg0
-        p_j = self._create_igmpv3_pck(self.pg1, "Allow New Sources",
-                                      "239.1.1.1", ["10.1.1.1", "10.1.1.2"])
+        p_j = self._create_igmpv3_pck(
+            self.pg1, "Allow New Sources", "239.1.1.1", ["10.1.1.1", "10.1.1.2"]
+        )
         self.send(self.pg1, p_j)
 
         capture = self.pg0.get_capture(1, timeout=1)
         self.send(self.pg1, p_j)
 
         capture = self.pg0.get_capture(1, timeout=1)
-        self.verify_report(capture[0], [IgmpRecord(IgmpSG("239.1.1.1",
-                           ["10.1.1.1", "10.1.1.2"]), "Allow New Sources")])
+        self.verify_report(
+            capture[0],
+            [
+                IgmpRecord(
+                    IgmpSG("239.1.1.1", ["10.1.1.1", "10.1.1.2"]), "Allow New Sources"
+                )
+            ],
+        )
         self.assertTrue(find_mroute(self, "239.1.1.1", "0.0.0.0", 32))
 
         # send join on pg2. join should be proxied by pg0.
         # the group should contain only 10.1.1.3 as
         # 10.1.1.1 was already reported
         self.assertTrue(find_mroute(self, "239.1.1.1", "0.0.0.0", 32))
 
         # send join on pg2. join should be proxied by pg0.
         # the group should contain only 10.1.1.3 as
         # 10.1.1.1 was already reported
-        p_j = self._create_igmpv3_pck(self.pg2, "Allow New Sources",
-                                      "239.1.1.1", ["10.1.1.1", "10.1.1.3"])
+        p_j = self._create_igmpv3_pck(
+            self.pg2, "Allow New Sources", "239.1.1.1", ["10.1.1.1", "10.1.1.3"]
+        )
         self.send(self.pg2, p_j)
 
         capture = self.pg0.get_capture(1, timeout=1)
         self.send(self.pg2, p_j)
 
         capture = self.pg0.get_capture(1, timeout=1)
-        self.verify_report(capture[0], [IgmpRecord(IgmpSG("239.1.1.1",
-                           ["10.1.1.3"]), "Allow New Sources")])
+        self.verify_report(
+            capture[0],
+            [IgmpRecord(IgmpSG("239.1.1.1", ["10.1.1.3"]), "Allow New Sources")],
+        )
         self.assertTrue(find_mroute(self, "239.1.1.1", "0.0.0.0", 32))
 
         # send leave on pg2. leave for 10.1.1.3 should be proxyed
         # as pg2 was the only interface interested in 10.1.1.3
         self.assertTrue(find_mroute(self, "239.1.1.1", "0.0.0.0", 32))
 
         # send leave on pg2. leave for 10.1.1.3 should be proxyed
         # as pg2 was the only interface interested in 10.1.1.3
-        p_l = self._create_igmpv3_pck(self.pg2, "Block Old Sources",
-                                      "239.1.1.1", ["10.1.1.3"])
+        p_l = self._create_igmpv3_pck(
+            self.pg2, "Block Old Sources", "239.1.1.1", ["10.1.1.3"]
+        )
         self.send(self.pg2, p_l)
 
         capture = self.pg0.get_capture(1, timeout=2)
         self.send(self.pg2, p_l)
 
         capture = self.pg0.get_capture(1, timeout=2)
-        self.verify_report(capture[0], [IgmpRecord(IgmpSG("239.1.1.1",
-                           ["10.1.1.3"]), "Block Old Sources")])
+        self.verify_report(
+            capture[0],
+            [IgmpRecord(IgmpSG("239.1.1.1", ["10.1.1.3"]), "Block Old Sources")],
+        )
         self.assertTrue(find_mroute(self, "239.1.1.1", "0.0.0.0", 32))
 
         # disable igmp on pg1 (also removes interface from proxy device)
         # proxy leave for 10.1.1.2. pg2 is still interested in 10.1.1.1
         self.pg_enable_capture(self.pg_interfaces)
         self.assertTrue(find_mroute(self, "239.1.1.1", "0.0.0.0", 32))
 
         # disable igmp on pg1 (also removes interface from proxy device)
         # proxy leave for 10.1.1.2. pg2 is still interested in 10.1.1.1
         self.pg_enable_capture(self.pg_interfaces)
-        self.vapi.igmp_enable_disable(self.pg1.sw_if_index, 0,
-                                      IGMP_MODE.ROUTER)
+        self.vapi.igmp_enable_disable(self.pg1.sw_if_index, 0, IGMP_MODE.ROUTER)
 
         capture = self.pg0.get_capture(1, timeout=1)
 
         capture = self.pg0.get_capture(1, timeout=1)
-        self.verify_report(capture[0], [IgmpRecord(IgmpSG("239.1.1.1",
-                           ["10.1.1.2"]), "Block Old Sources")])
+        self.verify_report(
+            capture[0],
+            [IgmpRecord(IgmpSG("239.1.1.1", ["10.1.1.2"]), "Block Old Sources")],
+        )
         self.assertTrue(find_mroute(self, "239.1.1.1", "0.0.0.0", 32))
 
         # disable IGMP on pg0 and pg1.
         #   disabling IGMP on pg0 (proxy device upstream interface)
         #   removes this proxy device
         self.vapi.igmp_enable_disable(self.pg0.sw_if_index, 0, IGMP_MODE.HOST)
         self.assertTrue(find_mroute(self, "239.1.1.1", "0.0.0.0", 32))
 
         # disable IGMP on pg0 and pg1.
         #   disabling IGMP on pg0 (proxy device upstream interface)
         #   removes this proxy device
         self.vapi.igmp_enable_disable(self.pg0.sw_if_index, 0, IGMP_MODE.HOST)
-        self.vapi.igmp_enable_disable(self.pg2.sw_if_index, 0,
-                                      IGMP_MODE.ROUTER)
+        self.vapi.igmp_enable_disable(self.pg2.sw_if_index, 0, IGMP_MODE.ROUTER)
         self.assertFalse(find_mroute(self, "239.1.1.1", "0.0.0.0", 32))
 
 
         self.assertFalse(find_mroute(self, "239.1.1.1", "0.0.0.0", 32))
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index 58a7ec3..5b699dd 100644 (file)
@@ -38,7 +38,9 @@ GCM_IV_SIZE = 8
 # defined in rfc3526
 # tuple structure is (p, g, key_len)
 DH = {
 # defined in rfc3526
 # tuple structure is (p, g, key_len)
 DH = {
-    '2048MODPgr': (long_converter("""
+    "2048MODPgr": (
+        long_converter(
+            """
     FFFFFFFF FFFFFFFF C90FDAA2 2168C234 C4C6628B 80DC1CD1
     29024E08 8A67CC74 020BBEA6 3B139B22 514A0879 8E3404DD
     EF9519B3 CD3A431B 302B0A6D F25F1437 4FE1356D 6D51C245
     FFFFFFFF FFFFFFFF C90FDAA2 2168C234 C4C6628B 80DC1CD1
     29024E08 8A67CC74 020BBEA6 3B139B22 514A0879 8E3404DD
     EF9519B3 CD3A431B 302B0A6D F25F1437 4FE1356D 6D51C245
@@ -49,9 +51,14 @@ DH = {
     670C354E 4ABC9804 F1746C08 CA18217C 32905E46 2E36CE3B
     E39E772C 180E8603 9B2783A2 EC07A28F B5C55DF0 6F4C52C9
     DE2BCBF6 95581718 3995497C EA956AE5 15D22618 98FA0510
     670C354E 4ABC9804 F1746C08 CA18217C 32905E46 2E36CE3B
     E39E772C 180E8603 9B2783A2 EC07A28F B5C55DF0 6F4C52C9
     DE2BCBF6 95581718 3995497C EA956AE5 15D22618 98FA0510
-    15728E5A 8AACAA68 FFFFFFFF FFFFFFFF"""), 2, 256),
-
-    '3072MODPgr': (long_converter("""
+    15728E5A 8AACAA68 FFFFFFFF FFFFFFFF"""
+        ),
+        2,
+        256,
+    ),
+    "3072MODPgr": (
+        long_converter(
+            """
     FFFFFFFF FFFFFFFF C90FDAA2 2168C234 C4C6628B 80DC1CD1
     29024E08 8A67CC74 020BBEA6 3B139B22 514A0879 8E3404DD
     EF9519B3 CD3A431B 302B0A6D F25F1437 4FE1356D 6D51C245
     FFFFFFFF FFFFFFFF C90FDAA2 2168C234 C4C6628B 80DC1CD1
     29024E08 8A67CC74 020BBEA6 3B139B22 514A0879 8E3404DD
     EF9519B3 CD3A431B 302B0A6D F25F1437 4FE1356D 6D51C245
@@ -67,7 +74,11 @@ DH = {
     ABF5AE8C DB0933D7 1E8C94E0 4A25619D CEE3D226 1AD2EE6B
     F12FFA06 D98A0864 D8760273 3EC86A64 521F2B18 177B200C
     BBE11757 7A615D6C 770988C0 BAD946E2 08E24FA0 74E5AB31
     ABF5AE8C DB0933D7 1E8C94E0 4A25619D CEE3D226 1AD2EE6B
     F12FFA06 D98A0864 D8760273 3EC86A64 521F2B18 177B200C
     BBE11757 7A615D6C 770988C0 BAD946E2 08E24FA0 74E5AB31
-    43DB5BFC E0FD108E 4B82D120 A93AD2CA FFFFFFFF FFFFFFFF"""), 2, 384)
+    43DB5BFC E0FD108E 4B82D120 A93AD2CA FFFFFFFF FFFFFFFF"""
+        ),
+        2,
+        384,
+    ),
 }
 
 
 }
 
 
@@ -79,7 +90,7 @@ class CryptoAlgo(object):
         if self.cipher is not None:
             self.bs = self.cipher.block_size // 8
 
         if self.cipher is not None:
             self.bs = self.cipher.block_size // 8
 
-            if self.name == 'AES-GCM-16ICV':
+            if self.name == "AES-GCM-16ICV":
                 self.iv_len = GCM_IV_SIZE
             else:
                 self.iv_len = self.bs
                 self.iv_len = GCM_IV_SIZE
             else:
                 self.iv_len = self.bs
@@ -87,14 +98,16 @@ class CryptoAlgo(object):
     def encrypt(self, data, key, aad=None):
         iv = os.urandom(self.iv_len)
         if aad is None:
     def encrypt(self, data, key, aad=None):
         iv = os.urandom(self.iv_len)
         if aad is None:
-            encryptor = Cipher(self.cipher(key), self.mode(iv),
-                               default_backend()).encryptor()
+            encryptor = Cipher(
+                self.cipher(key), self.mode(iv), default_backend()
+            ).encryptor()
             return iv + encryptor.update(data) + encryptor.finalize()
         else:
             salt = key[-SALT_SIZE:]
             nonce = salt + iv
             return iv + encryptor.update(data) + encryptor.finalize()
         else:
             salt = key[-SALT_SIZE:]
             nonce = salt + iv
-            encryptor = Cipher(self.cipher(key[:-SALT_SIZE]), self.mode(nonce),
-                               default_backend()).encryptor()
+            encryptor = Cipher(
+                self.cipher(key[:-SALT_SIZE]), self.mode(nonce), default_backend()
+            ).encryptor()
             encryptor.authenticate_additional_data(aad)
             data = encryptor.update(data) + encryptor.finalize()
             data += encryptor.tag[:GCM_ICV_SIZE]
             encryptor.authenticate_additional_data(aad)
             data = encryptor.update(data) + encryptor.finalize()
             data += encryptor.tag[:GCM_ICV_SIZE]
@@ -102,26 +115,26 @@ class CryptoAlgo(object):
 
     def decrypt(self, data, key, aad=None, icv=None):
         if aad is None:
 
     def decrypt(self, data, key, aad=None, icv=None):
         if aad is None:
-            iv = data[:self.iv_len]
-            ct = data[self.iv_len:]
-            decryptor = Cipher(algorithms.AES(key),
-                               self.mode(iv),
-                               default_backend()).decryptor()
+            iv = data[: self.iv_len]
+            ct = data[self.iv_len :]
+            decryptor = Cipher(
+                algorithms.AES(key), self.mode(iv), default_backend()
+            ).decryptor()
             return decryptor.update(ct) + decryptor.finalize()
         else:
             salt = key[-SALT_SIZE:]
             nonce = salt + data[:GCM_IV_SIZE]
             ct = data[GCM_IV_SIZE:]
             key = key[:-SALT_SIZE]
             return decryptor.update(ct) + decryptor.finalize()
         else:
             salt = key[-SALT_SIZE:]
             nonce = salt + data[:GCM_IV_SIZE]
             ct = data[GCM_IV_SIZE:]
             key = key[:-SALT_SIZE]
-            decryptor = Cipher(algorithms.AES(key),
-                               self.mode(nonce, icv, len(icv)),
-                               default_backend()).decryptor()
+            decryptor = Cipher(
+                algorithms.AES(key), self.mode(nonce, icv, len(icv)), default_backend()
+            ).decryptor()
             decryptor.authenticate_additional_data(aad)
             return decryptor.update(ct) + decryptor.finalize()
 
     def pad(self, data):
         pad_len = (len(data) // self.bs + 1) * self.bs - len(data)
             decryptor.authenticate_additional_data(aad)
             return decryptor.update(ct) + decryptor.finalize()
 
     def pad(self, data):
         pad_len = (len(data) // self.bs + 1) * self.bs - len(data)
-        data = data + b'\x00' * (pad_len - 1)
+        data = data + b"\x00" * (pad_len - 1)
         return data + bytes([pad_len - 1])
 
 
         return data + bytes([pad_len - 1])
 
 
@@ -135,36 +148,34 @@ class AuthAlgo(object):
 
 
 CRYPTO_ALGOS = {
 
 
 CRYPTO_ALGOS = {
-    'NULL': CryptoAlgo('NULL', cipher=None, mode=None),
-    'AES-CBC': CryptoAlgo('AES-CBC', cipher=algorithms.AES, mode=modes.CBC),
-    'AES-GCM-16ICV': CryptoAlgo('AES-GCM-16ICV', cipher=algorithms.AES,
-                                mode=modes.GCM),
+    "NULL": CryptoAlgo("NULL", cipher=None, mode=None),
+    "AES-CBC": CryptoAlgo("AES-CBC", cipher=algorithms.AES, mode=modes.CBC),
+    "AES-GCM-16ICV": CryptoAlgo("AES-GCM-16ICV", cipher=algorithms.AES, mode=modes.GCM),
 }
 
 AUTH_ALGOS = {
 }
 
 AUTH_ALGOS = {
-    'NULL': AuthAlgo('NULL', mac=None, mod=None, key_len=0, trunc_len=0),
-    'HMAC-SHA1-96': AuthAlgo('HMAC-SHA1-96', hmac.HMAC, hashes.SHA1, 20, 12),
-    'SHA2-256-128': AuthAlgo('SHA2-256-128', hmac.HMAC, hashes.SHA256, 32, 16),
-    'SHA2-384-192': AuthAlgo('SHA2-384-192', hmac.HMAC, hashes.SHA256, 48, 24),
-    'SHA2-512-256': AuthAlgo('SHA2-512-256', hmac.HMAC, hashes.SHA256, 64, 32),
+    "NULL": AuthAlgo("NULL", mac=None, mod=None, key_len=0, trunc_len=0),
+    "HMAC-SHA1-96": AuthAlgo("HMAC-SHA1-96", hmac.HMAC, hashes.SHA1, 20, 12),
+    "SHA2-256-128": AuthAlgo("SHA2-256-128", hmac.HMAC, hashes.SHA256, 32, 16),
+    "SHA2-384-192": AuthAlgo("SHA2-384-192", hmac.HMAC, hashes.SHA256, 48, 24),
+    "SHA2-512-256": AuthAlgo("SHA2-512-256", hmac.HMAC, hashes.SHA256, 64, 32),
 }
 
 PRF_ALGOS = {
 }
 
 PRF_ALGOS = {
-    'NULL': AuthAlgo('NULL', mac=None, mod=None, key_len=0, trunc_len=0),
-    'PRF_HMAC_SHA2_256': AuthAlgo('PRF_HMAC_SHA2_256', hmac.HMAC,
-                                  hashes.SHA256, 32),
+    "NULL": AuthAlgo("NULL", mac=None, mod=None, key_len=0, trunc_len=0),
+    "PRF_HMAC_SHA2_256": AuthAlgo("PRF_HMAC_SHA2_256", hmac.HMAC, hashes.SHA256, 32),
 }
 
 CRYPTO_IDS = {
 }
 
 CRYPTO_IDS = {
-    12: 'AES-CBC',
-    20: 'AES-GCM-16ICV',
+    12: "AES-CBC",
+    20: "AES-GCM-16ICV",
 }
 
 INTEG_IDS = {
 }
 
 INTEG_IDS = {
-    2: 'HMAC-SHA1-96',
-    12: 'SHA2-256-128',
-    13: 'SHA2-384-192',
-    14: 'SHA2-512-256',
+    2: "HMAC-SHA1-96",
+    12: "SHA2-256-128",
+    13: "SHA2-384-192",
+    14: "SHA2-512-256",
 }
 
 
 }
 
 
@@ -182,11 +193,24 @@ class IKEv2ChildSA(object):
 
 
 class IKEv2SA(object):
 
 
 class IKEv2SA(object):
-    def __init__(self, test, is_initiator=True, i_id=None, r_id=None,
-                 spi=b'\x01\x02\x03\x04\x05\x06\x07\x08', id_type='fqdn',
-                 nonce=None, auth_data=None, local_ts=None, remote_ts=None,
-                 auth_method='shared-key', priv_key=None, i_natt=False,
-                 r_natt=False, udp_encap=False):
+    def __init__(
+        self,
+        test,
+        is_initiator=True,
+        i_id=None,
+        r_id=None,
+        spi=b"\x01\x02\x03\x04\x05\x06\x07\x08",
+        id_type="fqdn",
+        nonce=None,
+        auth_data=None,
+        local_ts=None,
+        remote_ts=None,
+        auth_method="shared-key",
+        priv_key=None,
+        i_natt=False,
+        r_natt=False,
+        udp_encap=False,
+    ):
         self.udp_encap = udp_encap
         self.i_natt = i_natt
         self.r_natt = r_natt
         self.udp_encap = udp_encap
         self.i_natt = i_natt
         self.r_natt = r_natt
@@ -211,15 +235,14 @@ class IKEv2SA(object):
             self.id_type = id_type
         self.auth_method = auth_method
         if self.is_initiator:
             self.id_type = id_type
         self.auth_method = auth_method
         if self.is_initiator:
-            self.rspi = 8 * b'\x00'
+            self.rspi = 8 * b"\x00"
             self.ispi = spi
             self.i_nonce = nonce
         else:
             self.rspi = spi
             self.ispi = spi
             self.i_nonce = nonce
         else:
             self.rspi = spi
-            self.ispi = 8 * b'\x00'
+            self.ispi = 8 * b"\x00"
             self.r_nonce = nonce
             self.r_nonce = nonce
-        self.child_sas = [IKEv2ChildSA(local_ts, remote_ts,
-                          self.is_initiator)]
+        self.child_sas = [IKEv2ChildSA(local_ts, remote_ts, self.is_initiator)]
 
     def new_msg_id(self):
         self.msg_id += 1
 
     def new_msg_id(self):
         self.msg_id += 1
@@ -245,13 +268,14 @@ class IKEv2SA(object):
         priv = self.dh_private_key
         peer = self.peer_dh_pub_key
         p, g, l = self.ike_group
         priv = self.dh_private_key
         peer = self.peer_dh_pub_key
         p, g, l = self.ike_group
-        return pow(int.from_bytes(peer, 'big'),
-                   int.from_bytes(priv, 'big'), p).to_bytes(l, 'big')
+        return pow(
+            int.from_bytes(peer, "big"), int.from_bytes(priv, "big"), p
+        ).to_bytes(l, "big")
 
     def generate_dh_data(self):
         # generate DH keys
         if self.ike_dh not in DH:
 
     def generate_dh_data(self):
         # generate DH keys
         if self.ike_dh not in DH:
-            raise NotImplementedError('%s not in DH group' % self.ike_dh)
+            raise NotImplementedError("%s not in DH group" % self.ike_dh)
 
         if self.dh_params is None:
             dhg = DH[self.ike_dh]
 
         if self.dh_params is None:
             dhg = DH[self.ike_dh]
@@ -261,13 +285,13 @@ class IKEv2SA(object):
         priv = self.dh_params.generate_private_key()
         pub = priv.public_key()
         x = priv.private_numbers().x
         priv = self.dh_params.generate_private_key()
         pub = priv.public_key()
         x = priv.private_numbers().x
-        self.dh_private_key = x.to_bytes(priv.key_size // 8, 'big')
+        self.dh_private_key = x.to_bytes(priv.key_size // 8, "big")
         y = pub.public_numbers().y
 
         if self.is_initiator:
         y = pub.public_numbers().y
 
         if self.is_initiator:
-            self.i_dh_data = y.to_bytes(pub.key_size // 8, 'big')
+            self.i_dh_data = y.to_bytes(pub.key_size // 8, "big")
         else:
         else:
-            self.r_dh_data = y.to_bytes(pub.key_size // 8, 'big')
+            self.r_dh_data = y.to_bytes(pub.key_size // 8, "big")
 
     def complete_dh_data(self):
         self.dh_shared_secret = self.compute_secret()
 
     def complete_dh_data(self):
         self.dh_shared_secret = self.compute_secret()
@@ -281,41 +305,39 @@ class IKEv2SA(object):
         integ_key_len = self.esp_integ_alg.key_len
         salt_len = 0 if integ_key_len else 4
 
         integ_key_len = self.esp_integ_alg.key_len
         salt_len = 0 if integ_key_len else 4
 
-        l = (integ_key_len * 2 +
-             encr_key_len * 2 +
-             salt_len * 2)
+        l = integ_key_len * 2 + encr_key_len * 2 + salt_len * 2
         keymat = self.calc_prfplus(prf, self.sk_d, s, l)
 
         pos = 0
         keymat = self.calc_prfplus(prf, self.sk_d, s, l)
 
         pos = 0
-        c.sk_ei = keymat[pos:pos+encr_key_len]
+        c.sk_ei = keymat[pos : pos + encr_key_len]
         pos += encr_key_len
 
         if integ_key_len:
         pos += encr_key_len
 
         if integ_key_len:
-            c.sk_ai = keymat[pos:pos+integ_key_len]
+            c.sk_ai = keymat[pos : pos + integ_key_len]
             pos += integ_key_len
         else:
             pos += integ_key_len
         else:
-            c.salt_ei = keymat[pos:pos+salt_len]
+            c.salt_ei = keymat[pos : pos + salt_len]
             pos += salt_len
 
             pos += salt_len
 
-        c.sk_er = keymat[pos:pos+encr_key_len]
+        c.sk_er = keymat[pos : pos + encr_key_len]
         pos += encr_key_len
 
         if integ_key_len:
         pos += encr_key_len
 
         if integ_key_len:
-            c.sk_ar = keymat[pos:pos+integ_key_len]
+            c.sk_ar = keymat[pos : pos + integ_key_len]
             pos += integ_key_len
         else:
             pos += integ_key_len
         else:
-            c.salt_er = keymat[pos:pos+salt_len]
+            c.salt_er = keymat[pos : pos + salt_len]
             pos += salt_len
 
     def calc_prfplus(self, prf, key, seed, length):
             pos += salt_len
 
     def calc_prfplus(self, prf, key, seed, length):
-        r = b''
+        r = b""
         t = None
         x = 1
         while len(r) < length and x < 255:
             if t is not None:
                 s = t
             else:
         t = None
         x = 1
         while len(r) < length and x < 255:
             if t is not None:
                 s = t
             else:
-                s = b''
+                s = b""
             s = s + seed + bytes([x])
             t = self.calc_prf(prf, key, s)
             r = r + t
             s = s + seed + bytes([x])
             t = self.calc_prf(prf, key, s)
             r = r + t
@@ -348,30 +370,32 @@ class IKEv2SA(object):
         else:
             salt_size = 0
 
         else:
             salt_size = 0
 
-        l = (prf_key_trunc +
-             integ_key_len * 2 +
-             encr_key_len * 2 +
-             tr_prf_key_len * 2 +
-             salt_size * 2)
+        l = (
+            prf_key_trunc
+            + integ_key_len * 2
+            + encr_key_len * 2
+            + tr_prf_key_len * 2
+            + salt_size * 2
+        )
         keymat = self.calc_prfplus(prf, self.skeyseed, s, l)
 
         pos = 0
         keymat = self.calc_prfplus(prf, self.skeyseed, s, l)
 
         pos = 0
-        self.sk_d = keymat[:pos+prf_key_trunc]
+        self.sk_d = keymat[: pos + prf_key_trunc]
         pos += prf_key_trunc
 
         pos += prf_key_trunc
 
-        self.sk_ai = keymat[pos:pos+integ_key_len]
+        self.sk_ai = keymat[pos : pos + integ_key_len]
         pos += integ_key_len
         pos += integ_key_len
-        self.sk_ar = keymat[pos:pos+integ_key_len]
+        self.sk_ar = keymat[pos : pos + integ_key_len]
         pos += integ_key_len
 
         pos += integ_key_len
 
-        self.sk_ei = keymat[pos:pos+encr_key_len + salt_size]
+        self.sk_ei = keymat[pos : pos + encr_key_len + salt_size]
         pos += encr_key_len + salt_size
         pos += encr_key_len + salt_size
-        self.sk_er = keymat[pos:pos+encr_key_len + salt_size]
+        self.sk_er = keymat[pos : pos + encr_key_len + salt_size]
         pos += encr_key_len + salt_size
 
         pos += encr_key_len + salt_size
 
-        self.sk_pi = keymat[pos:pos+tr_prf_key_len]
+        self.sk_pi = keymat[pos : pos + tr_prf_key_len]
         pos += tr_prf_key_len
         pos += tr_prf_key_len
-        self.sk_pr = keymat[pos:pos+tr_prf_key_len]
+        self.sk_pr = keymat[pos : pos + tr_prf_key_len]
 
     def generate_authmsg(self, prf, packet):
         if self.is_initiator:
 
     def generate_authmsg(self, prf, packet):
         if self.is_initiator:
@@ -393,14 +417,15 @@ class IKEv2SA(object):
         else:
             packet = self.init_resp_packet
         authmsg = self.generate_authmsg(prf, raw(packet))
         else:
             packet = self.init_resp_packet
         authmsg = self.generate_authmsg(prf, raw(packet))
-        if self.auth_method == 'shared-key':
+        if self.auth_method == "shared-key":
             psk = self.calc_prf(prf, self.auth_data, KEY_PAD)
             self.auth_data = self.calc_prf(prf, psk, authmsg)
             psk = self.calc_prf(prf, self.auth_data, KEY_PAD)
             self.auth_data = self.calc_prf(prf, psk, authmsg)
-        elif self.auth_method == 'rsa-sig':
-            self.auth_data = self.priv_key.sign(authmsg, padding.PKCS1v15(),
-                                                hashes.SHA1())
+        elif self.auth_method == "rsa-sig":
+            self.auth_data = self.priv_key.sign(
+                authmsg, padding.PKCS1v15(), hashes.SHA1()
+            )
         else:
         else:
-            raise TypeError('unknown auth method type!')
+            raise TypeError("unknown auth method type!")
 
     def encrypt(self, data, aad=None):
         data = self.ike_crypto_alg.pad(data)
 
     def encrypt(self, data, aad=None):
         data = self.ike_crypto_alg.pad(data)
@@ -431,7 +456,7 @@ class IKEv2SA(object):
         return self.sk_ei
 
     def concat(self, alg, key_len):
         return self.sk_ei
 
     def concat(self, alg, key_len):
-        return alg + '-' + str(key_len * 8)
+        return alg + "-" + str(key_len * 8)
 
     @property
     def vpp_ike_cypto_alg(self):
 
     @property
     def vpp_ike_cypto_alg(self):
@@ -445,8 +470,9 @@ class IKEv2SA(object):
         integ_trunc = self.ike_integ_alg.trunc_len
         exp_hmac = ikemsg[-integ_trunc:]
         data = ikemsg[:-integ_trunc]
         integ_trunc = self.ike_integ_alg.trunc_len
         exp_hmac = ikemsg[-integ_trunc:]
         data = ikemsg[:-integ_trunc]
-        computed_hmac = self.compute_hmac(self.ike_integ_alg.mod(),
-                                          self.peer_authkey, data)
+        computed_hmac = self.compute_hmac(
+            self.ike_integ_alg.mod(), self.peer_authkey, data
+        )
         self.test.assertEqual(computed_hmac[:integ_trunc], exp_hmac)
 
     def compute_hmac(self, integ, key, data):
         self.test.assertEqual(computed_hmac[:integ_trunc], exp_hmac)
 
     def compute_hmac(self, integ, key, data):
@@ -459,7 +485,7 @@ class IKEv2SA(object):
 
     def hmac_and_decrypt(self, ike):
         ep = ike[ikev2.IKEv2_payload_Encrypted]
 
     def hmac_and_decrypt(self, ike):
         ep = ike[ikev2.IKEv2_payload_Encrypted]
-        if self.ike_crypto == 'AES-GCM-16ICV':
+        if self.ike_crypto == "AES-GCM-16ICV":
             aad_len = len(ikev2.IKEv2_payload_Encrypted()) + len(ikev2.IKEv2())
             ct = ep.load[:-GCM_ICV_SIZE]
             tag = ep.load[-GCM_ICV_SIZE:]
             aad_len = len(ikev2.IKEv2_payload_Encrypted()) + len(ikev2.IKEv2())
             ct = ep.load[:-GCM_ICV_SIZE]
             tag = ep.load[-GCM_ICV_SIZE:]
@@ -473,26 +499,26 @@ class IKEv2SA(object):
             plain = self.decrypt(ct)
         # remove padding
         pad_len = plain[-1]
             plain = self.decrypt(ct)
         # remove padding
         pad_len = plain[-1]
-        return plain[:-pad_len - 1]
+        return plain[: -pad_len - 1]
 
     def build_ts_addr(self, ts, version):
 
     def build_ts_addr(self, ts, version):
-        return {'starting_address_v' + version: ts['start_addr'],
-                'ending_address_v' + version: ts['end_addr']}
+        return {
+            "starting_address_v" + version: ts["start_addr"],
+            "ending_address_v" + version: ts["end_addr"],
+        }
 
     def generate_ts(self, is_ip4):
         c = self.child_sas[0]
 
     def generate_ts(self, is_ip4):
         c = self.child_sas[0]
-        ts_data = {'IP_protocol_ID': 0,
-                   'start_port': 0,
-                   'end_port': 0xffff}
+        ts_data = {"IP_protocol_ID": 0, "start_port": 0, "end_port": 0xFFFF}
         if is_ip4:
         if is_ip4:
-            ts_data.update(self.build_ts_addr(c.local_ts, '4'))
+            ts_data.update(self.build_ts_addr(c.local_ts, "4"))
             ts1 = ikev2.IPv4TrafficSelector(**ts_data)
             ts1 = ikev2.IPv4TrafficSelector(**ts_data)
-            ts_data.update(self.build_ts_addr(c.remote_ts, '4'))
+            ts_data.update(self.build_ts_addr(c.remote_ts, "4"))
             ts2 = ikev2.IPv4TrafficSelector(**ts_data)
         else:
             ts2 = ikev2.IPv4TrafficSelector(**ts_data)
         else:
-            ts_data.update(self.build_ts_addr(c.local_ts, '6'))
+            ts_data.update(self.build_ts_addr(c.local_ts, "6"))
             ts1 = ikev2.IPv6TrafficSelector(**ts_data)
             ts1 = ikev2.IPv6TrafficSelector(**ts_data)
-            ts_data.update(self.build_ts_addr(c.remote_ts, '6'))
+            ts_data.update(self.build_ts_addr(c.remote_ts, "6"))
             ts2 = ikev2.IPv6TrafficSelector(**ts_data)
 
         if self.is_initiator:
             ts2 = ikev2.IPv6TrafficSelector(**ts_data)
 
         if self.is_initiator:
@@ -501,18 +527,18 @@ class IKEv2SA(object):
 
     def set_ike_props(self, crypto, crypto_key_len, integ, prf, dh):
         if crypto not in CRYPTO_ALGOS:
 
     def set_ike_props(self, crypto, crypto_key_len, integ, prf, dh):
         if crypto not in CRYPTO_ALGOS:
-            raise TypeError('unsupported encryption algo %r' % crypto)
+            raise TypeError("unsupported encryption algo %r" % crypto)
         self.ike_crypto = crypto
         self.ike_crypto_alg = CRYPTO_ALGOS[crypto]
         self.ike_crypto_key_len = crypto_key_len
 
         if integ not in AUTH_ALGOS:
         self.ike_crypto = crypto
         self.ike_crypto_alg = CRYPTO_ALGOS[crypto]
         self.ike_crypto_key_len = crypto_key_len
 
         if integ not in AUTH_ALGOS:
-            raise TypeError('unsupported auth algo %r' % integ)
-        self.ike_integ = None if integ == 'NULL' else integ
+            raise TypeError("unsupported auth algo %r" % integ)
+        self.ike_integ = None if integ == "NULL" else integ
         self.ike_integ_alg = AUTH_ALGOS[integ]
 
         if prf not in PRF_ALGOS:
         self.ike_integ_alg = AUTH_ALGOS[integ]
 
         if prf not in PRF_ALGOS:
-            raise TypeError('unsupported prf algo %r' % prf)
+            raise TypeError("unsupported prf algo %r" % prf)
         self.ike_prf = prf
         self.ike_prf_alg = PRF_ALGOS[prf]
         self.ike_dh = dh
         self.ike_prf = prf
         self.ike_prf_alg = PRF_ALGOS[prf]
         self.ike_dh = dh
@@ -521,20 +547,20 @@ class IKEv2SA(object):
     def set_esp_props(self, crypto, crypto_key_len, integ):
         self.esp_crypto_key_len = crypto_key_len
         if crypto not in CRYPTO_ALGOS:
     def set_esp_props(self, crypto, crypto_key_len, integ):
         self.esp_crypto_key_len = crypto_key_len
         if crypto not in CRYPTO_ALGOS:
-            raise TypeError('unsupported encryption algo %r' % crypto)
+            raise TypeError("unsupported encryption algo %r" % crypto)
         self.esp_crypto = crypto
         self.esp_crypto_alg = CRYPTO_ALGOS[crypto]
 
         if integ not in AUTH_ALGOS:
         self.esp_crypto = crypto
         self.esp_crypto_alg = CRYPTO_ALGOS[crypto]
 
         if integ not in AUTH_ALGOS:
-            raise TypeError('unsupported auth algo %r' % integ)
-        self.esp_integ = None if integ == 'NULL' else integ
+            raise TypeError("unsupported auth algo %r" % integ)
+        self.esp_integ = None if integ == "NULL" else integ
         self.esp_integ_alg = AUTH_ALGOS[integ]
 
     def crypto_attr(self, key_len):
         self.esp_integ_alg = AUTH_ALGOS[integ]
 
     def crypto_attr(self, key_len):
-        if self.ike_crypto in ['AES-CBC', 'AES-GCM-16ICV']:
-            return (0x800e << 16 | key_len << 3, 12)
+        if self.ike_crypto in ["AES-CBC", "AES-GCM-16ICV"]:
+            return (0x800E << 16 | key_len << 3, 12)
         else:
         else:
-            raise Exception('unsupported attribute type')
+            raise Exception("unsupported attribute type")
 
     def ike_crypto_attr(self):
         return self.crypto_attr(self.ike_crypto_key_len)
 
     def ike_crypto_attr(self):
         return self.crypto_attr(self.ike_crypto_key_len)
@@ -545,19 +571,20 @@ class IKEv2SA(object):
     def compute_nat_sha1(self, ip, port, rspi=None):
         if rspi is None:
             rspi = self.rspi
     def compute_nat_sha1(self, ip, port, rspi=None):
         if rspi is None:
             rspi = self.rspi
-        data = self.ispi + rspi + ip + (port).to_bytes(2, 'big')
+        data = self.ispi + rspi + ip + (port).to_bytes(2, "big")
         digest = hashes.Hash(hashes.SHA1(), backend=default_backend())
         digest.update(data)
         return digest.finalize()
 
 
 class IkePeer(VppTestCase):
         digest = hashes.Hash(hashes.SHA1(), backend=default_backend())
         digest.update(data)
         return digest.finalize()
 
 
 class IkePeer(VppTestCase):
-    """ common class for initiator and responder """
+    """common class for initiator and responder"""
 
     @classmethod
     def setUpClass(cls):
         import scapy.contrib.ikev2 as _ikev2
 
     @classmethod
     def setUpClass(cls):
         import scapy.contrib.ikev2 as _ikev2
-        globals()['ikev2'] = _ikev2
+
+        globals()["ikev2"] = _ikev2
         super(IkePeer, cls).setUpClass()
         cls.create_pg_interfaces(range(2))
         for i in cls.pg_interfaces:
         super(IkePeer, cls).setUpClass()
         cls.create_pg_interfaces(range(2))
         for i in cls.pg_interfaces:
@@ -591,36 +618,46 @@ class IkePeer(VppTestCase):
         self.assertIsNotNone(self.p.query_vpp_config())
         if self.sa.is_initiator:
             self.sa.generate_dh_data()
         self.assertIsNotNone(self.p.query_vpp_config())
         if self.sa.is_initiator:
             self.sa.generate_dh_data()
-        self.vapi.cli('ikev2 set logging level 4')
-        self.vapi.cli('event-lo clear')
+        self.vapi.cli("ikev2 set logging level 4")
+        self.vapi.cli("event-lo clear")
 
 
-    def assert_counter(self, count, name, version='ip4'):
-        node_name = '/err/ikev2-%s/' % version + name
+    def assert_counter(self, count, name, version="ip4"):
+        node_name = "/err/ikev2-%s/" % version + name
         self.assertEqual(count, self.statistics.get_err_counter(node_name))
 
     def create_rekey_request(self):
         sa, first_payload = self.generate_auth_payload(is_rekey=True)
         header = ikev2.IKEv2(
         self.assertEqual(count, self.statistics.get_err_counter(node_name))
 
     def create_rekey_request(self):
         sa, first_payload = self.generate_auth_payload(is_rekey=True)
         header = ikev2.IKEv2(
-                init_SPI=self.sa.ispi,
-                resp_SPI=self.sa.rspi, id=self.sa.new_msg_id(),
-                flags='Initiator', exch_type='CREATE_CHILD_SA')
+            init_SPI=self.sa.ispi,
+            resp_SPI=self.sa.rspi,
+            id=self.sa.new_msg_id(),
+            flags="Initiator",
+            exch_type="CREATE_CHILD_SA",
+        )
 
         ike_msg = self.encrypt_ike_msg(header, sa, first_payload)
 
         ike_msg = self.encrypt_ike_msg(header, sa, first_payload)
-        return self.create_packet(self.pg0, ike_msg, self.sa.sport,
-                                  self.sa.dport, self.sa.natt, self.ip6)
+        return self.create_packet(
+            self.pg0, ike_msg, self.sa.sport, self.sa.dport, self.sa.natt, self.ip6
+        )
 
     def create_empty_request(self):
 
     def create_empty_request(self):
-        header = ikev2.IKEv2(init_SPI=self.sa.ispi, resp_SPI=self.sa.rspi,
-                             id=self.sa.new_msg_id(), flags='Initiator',
-                             exch_type='INFORMATIONAL',
-                             next_payload='Encrypted')
-
-        msg = self.encrypt_ike_msg(header, b'', None)
-        return self.create_packet(self.pg0, msg, self.sa.sport,
-                                  self.sa.dport, self.sa.natt, self.ip6)
-
-    def create_packet(self, src_if, msg, sport=500, dport=500, natt=False,
-                      use_ip6=False):
+        header = ikev2.IKEv2(
+            init_SPI=self.sa.ispi,
+            resp_SPI=self.sa.rspi,
+            id=self.sa.new_msg_id(),
+            flags="Initiator",
+            exch_type="INFORMATIONAL",
+            next_payload="Encrypted",
+        )
+
+        msg = self.encrypt_ike_msg(header, b"", None)
+        return self.create_packet(
+            self.pg0, msg, self.sa.sport, self.sa.dport, self.sa.natt, self.ip6
+        )
+
+    def create_packet(
+        self, src_if, msg, sport=500, dport=500, natt=False, use_ip6=False
+    ):
         if use_ip6:
             src_ip = src_if.remote_ip6
             dst_ip = src_if.local_ip6
         if use_ip6:
             src_ip = src_if.remote_ip6
             dst_ip = src_if.local_ip6
@@ -629,12 +666,14 @@ class IkePeer(VppTestCase):
             src_ip = src_if.remote_ip4
             dst_ip = src_if.local_ip4
             ip_layer = IP
             src_ip = src_if.remote_ip4
             dst_ip = src_if.local_ip4
             ip_layer = IP
-        res = (Ether(dst=src_if.local_mac, src=src_if.remote_mac) /
-               ip_layer(src=src_ip, dst=dst_ip) /
-               UDP(sport=sport, dport=dport))
+        res = (
+            Ether(dst=src_if.local_mac, src=src_if.remote_mac)
+            / ip_layer(src=src_ip, dst=dst_ip)
+            / UDP(sport=sport, dport=dport)
+        )
         if natt:
             # insert non ESP marker
         if natt:
             # insert non ESP marker
-            res = res / Raw(b'\x00' * 4)
+            res = res / Raw(b"\x00" * 4)
         return res / msg
 
     def verify_udp(self, udp):
         return res / msg
 
     def verify_udp(self, udp):
@@ -651,7 +690,7 @@ class IkePeer(VppTestCase):
             esp = packet[ESP]
             ih = self.verify_and_remove_non_esp_marker(esp)
         self.assertEqual(ih.version, 0x20)
             esp = packet[ESP]
             ih = self.verify_and_remove_non_esp_marker(esp)
         self.assertEqual(ih.version, 0x20)
-        self.assertNotIn('Version', ih.flags)
+        self.assertNotIn("Version", ih.flags)
         return ih
 
     def verify_and_remove_non_esp_marker(self, packet):
         return ih
 
     def verify_and_remove_non_esp_marker(self, packet):
@@ -659,26 +698,32 @@ class IkePeer(VppTestCase):
             # if we are in nat traversal mode check for non esp marker
             # and remove it
             data = raw(packet)
             # if we are in nat traversal mode check for non esp marker
             # and remove it
             data = raw(packet)
-            self.assertEqual(data[:4], b'\x00' * 4)
+            self.assertEqual(data[:4], b"\x00" * 4)
             return ikev2.IKEv2(data[4:])
         else:
             return packet
 
     def encrypt_ike_msg(self, header, plain, first_payload):
             return ikev2.IKEv2(data[4:])
         else:
             return packet
 
     def encrypt_ike_msg(self, header, plain, first_payload):
-        if self.sa.ike_crypto == 'AES-GCM-16ICV':
+        if self.sa.ike_crypto == "AES-GCM-16ICV":
             data = self.sa.ike_crypto_alg.pad(raw(plain))
             data = self.sa.ike_crypto_alg.pad(raw(plain))
-            plen = len(data) + GCM_IV_SIZE + GCM_ICV_SIZE +\
-                len(ikev2.IKEv2_payload_Encrypted())
+            plen = (
+                len(data)
+                + GCM_IV_SIZE
+                + GCM_ICV_SIZE
+                + len(ikev2.IKEv2_payload_Encrypted())
+            )
             tlen = plen + len(ikev2.IKEv2())
 
             # prepare aad data
             tlen = plen + len(ikev2.IKEv2())
 
             # prepare aad data
-            sk_p = ikev2.IKEv2_payload_Encrypted(next_payload=first_payload,
-                                                 length=plen)
+            sk_p = ikev2.IKEv2_payload_Encrypted(
+                next_payload=first_payload, length=plen
+            )
             header.length = tlen
             res = header / sk_p
             encr = self.sa.encrypt(raw(plain), raw(res))
             header.length = tlen
             res = header / sk_p
             encr = self.sa.encrypt(raw(plain), raw(res))
-            sk_p = ikev2.IKEv2_payload_Encrypted(next_payload=first_payload,
-                                                 length=plen, load=encr)
+            sk_p = ikev2.IKEv2_payload_Encrypted(
+                next_payload=first_payload, length=plen, load=encr
+            )
             res = header / sk_p
         else:
             encr = self.sa.encrypt(raw(plain))
             res = header / sk_p
         else:
             encr = self.sa.encrypt(raw(plain))
@@ -686,16 +731,18 @@ class IkePeer(VppTestCase):
             plen = len(encr) + len(ikev2.IKEv2_payload_Encrypted()) + trunc_len
             tlen = plen + len(ikev2.IKEv2())
 
             plen = len(encr) + len(ikev2.IKEv2_payload_Encrypted()) + trunc_len
             tlen = plen + len(ikev2.IKEv2())
 
-            sk_p = ikev2.IKEv2_payload_Encrypted(next_payload=first_payload,
-                                                 length=plen, load=encr)
+            sk_p = ikev2.IKEv2_payload_Encrypted(
+                next_payload=first_payload, length=plen, load=encr
+            )
             header.length = tlen
             res = header / sk_p
 
             integ_data = raw(res)
             header.length = tlen
             res = header / sk_p
 
             integ_data = raw(res)
-            hmac_data = self.sa.compute_hmac(self.sa.ike_integ_alg.mod(),
-                                             self.sa.my_authkey, integ_data)
+            hmac_data = self.sa.compute_hmac(
+                self.sa.ike_integ_alg.mod(), self.sa.my_authkey, integ_data
+            )
             res = res / Raw(hmac_data[:trunc_len])
             res = res / Raw(hmac_data[:trunc_len])
-        assert(len(res) == tlen)
+        assert len(res) == tlen
         return res
 
     def verify_udp_encap(self, ipsec_sa):
         return res
 
     def verify_udp_encap(self, ipsec_sa):
@@ -747,37 +794,37 @@ class IkePeer(VppTestCase):
         # verify crypto keys
         self.assertEqual(sa0.crypto_key.length, len(c.sk_er))
         self.assertEqual(sa1.crypto_key.length, len(c.sk_ei))
         # verify crypto keys
         self.assertEqual(sa0.crypto_key.length, len(c.sk_er))
         self.assertEqual(sa1.crypto_key.length, len(c.sk_ei))
-        self.assertEqual(sa0.crypto_key.data[:len(c.sk_er)], c.sk_er)
-        self.assertEqual(sa1.crypto_key.data[:len(c.sk_ei)], c.sk_ei)
+        self.assertEqual(sa0.crypto_key.data[: len(c.sk_er)], c.sk_er)
+        self.assertEqual(sa1.crypto_key.data[: len(c.sk_ei)], c.sk_ei)
 
         # verify integ keys
         if vpp_integ_alg:
             self.assertEqual(sa0.integrity_key.length, len(c.sk_ar))
             self.assertEqual(sa1.integrity_key.length, len(c.sk_ai))
 
         # verify integ keys
         if vpp_integ_alg:
             self.assertEqual(sa0.integrity_key.length, len(c.sk_ar))
             self.assertEqual(sa1.integrity_key.length, len(c.sk_ai))
-            self.assertEqual(sa0.integrity_key.data[:len(c.sk_ar)], c.sk_ar)
-            self.assertEqual(sa1.integrity_key.data[:len(c.sk_ai)], c.sk_ai)
+            self.assertEqual(sa0.integrity_key.data[: len(c.sk_ar)], c.sk_ar)
+            self.assertEqual(sa1.integrity_key.data[: len(c.sk_ai)], c.sk_ai)
         else:
         else:
-            self.assertEqual(sa0.salt.to_bytes(4, 'little'), c.salt_er)
-            self.assertEqual(sa1.salt.to_bytes(4, 'little'), c.salt_ei)
+            self.assertEqual(sa0.salt.to_bytes(4, "little"), c.salt_er)
+            self.assertEqual(sa1.salt.to_bytes(4, "little"), c.salt_ei)
 
     def verify_keymat(self, api_keys, keys, name):
         km = getattr(keys, name)
         api_km = getattr(api_keys, name)
 
     def verify_keymat(self, api_keys, keys, name):
         km = getattr(keys, name)
         api_km = getattr(api_keys, name)
-        api_km_len = getattr(api_keys, name + '_len')
+        api_km_len = getattr(api_keys, name + "_len")
         self.assertEqual(len(km), api_km_len)
         self.assertEqual(km, api_km[:api_km_len])
 
     def verify_id(self, api_id, exp_id):
         self.assertEqual(api_id.type, IDType.value(exp_id.type))
         self.assertEqual(api_id.data_len, exp_id.data_len)
         self.assertEqual(len(km), api_km_len)
         self.assertEqual(km, api_km[:api_km_len])
 
     def verify_id(self, api_id, exp_id):
         self.assertEqual(api_id.type, IDType.value(exp_id.type))
         self.assertEqual(api_id.data_len, exp_id.data_len)
-        self.assertEqual(bytes(api_id.data, 'ascii'), exp_id.type)
+        self.assertEqual(bytes(api_id.data, "ascii"), exp_id.type)
 
     def verify_ike_sas(self):
         r = self.vapi.ikev2_sa_dump()
         self.assertEqual(len(r), 1)
         sa = r[0].sa
 
     def verify_ike_sas(self):
         r = self.vapi.ikev2_sa_dump()
         self.assertEqual(len(r), 1)
         sa = r[0].sa
-        self.assertEqual(self.sa.ispi, (sa.ispi).to_bytes(8, 'big'))
-        self.assertEqual(self.sa.rspi, (sa.rspi).to_bytes(8, 'big'))
+        self.assertEqual(self.sa.ispi, (sa.ispi).to_bytes(8, "big"))
+        self.assertEqual(self.sa.rspi, (sa.rspi).to_bytes(8, "big"))
         if self.ip6:
             if self.sa.is_initiator:
                 self.assertEqual(sa.iaddr, IPv6Address(self.pg0.remote_ip6))
         if self.ip6:
             if self.sa.is_initiator:
                 self.assertEqual(sa.iaddr, IPv6Address(self.pg0.remote_ip6))
@@ -792,55 +839,53 @@ class IkePeer(VppTestCase):
             else:
                 self.assertEqual(sa.iaddr, IPv4Address(self.pg0.local_ip4))
                 self.assertEqual(sa.raddr, IPv4Address(self.pg0.remote_ip4))
             else:
                 self.assertEqual(sa.iaddr, IPv4Address(self.pg0.local_ip4))
                 self.assertEqual(sa.raddr, IPv4Address(self.pg0.remote_ip4))
-        self.verify_keymat(sa.keys, self.sa, 'sk_d')
-        self.verify_keymat(sa.keys, self.sa, 'sk_ai')
-        self.verify_keymat(sa.keys, self.sa, 'sk_ar')
-        self.verify_keymat(sa.keys, self.sa, 'sk_ei')
-        self.verify_keymat(sa.keys, self.sa, 'sk_er')
-        self.verify_keymat(sa.keys, self.sa, 'sk_pi')
-        self.verify_keymat(sa.keys, self.sa, 'sk_pr')
+        self.verify_keymat(sa.keys, self.sa, "sk_d")
+        self.verify_keymat(sa.keys, self.sa, "sk_ai")
+        self.verify_keymat(sa.keys, self.sa, "sk_ar")
+        self.verify_keymat(sa.keys, self.sa, "sk_ei")
+        self.verify_keymat(sa.keys, self.sa, "sk_er")
+        self.verify_keymat(sa.keys, self.sa, "sk_pi")
+        self.verify_keymat(sa.keys, self.sa, "sk_pr")
 
         self.assertEqual(sa.i_id.type, self.sa.id_type)
         self.assertEqual(sa.r_id.type, self.sa.id_type)
         self.assertEqual(sa.i_id.data_len, len(self.sa.i_id))
         self.assertEqual(sa.r_id.data_len, len(self.idr))
 
         self.assertEqual(sa.i_id.type, self.sa.id_type)
         self.assertEqual(sa.r_id.type, self.sa.id_type)
         self.assertEqual(sa.i_id.data_len, len(self.sa.i_id))
         self.assertEqual(sa.r_id.data_len, len(self.idr))
-        self.assertEqual(bytes(sa.i_id.data, 'ascii'), self.sa.i_id)
-        self.assertEqual(bytes(sa.r_id.data, 'ascii'), self.idr)
+        self.assertEqual(bytes(sa.i_id.data, "ascii"), self.sa.i_id)
+        self.assertEqual(bytes(sa.r_id.data, "ascii"), self.idr)
 
         r = self.vapi.ikev2_child_sa_dump(sa_index=sa.sa_index)
         self.assertEqual(len(r), 1)
         csa = r[0].child_sa
         self.assertEqual(csa.sa_index, sa.sa_index)
         c = self.sa.child_sas[0]
 
         r = self.vapi.ikev2_child_sa_dump(sa_index=sa.sa_index)
         self.assertEqual(len(r), 1)
         csa = r[0].child_sa
         self.assertEqual(csa.sa_index, sa.sa_index)
         c = self.sa.child_sas[0]
-        if hasattr(c, 'sk_ai'):
-            self.verify_keymat(csa.keys, c, 'sk_ai')
-            self.verify_keymat(csa.keys, c, 'sk_ar')
-        self.verify_keymat(csa.keys, c, 'sk_ei')
-        self.verify_keymat(csa.keys, c, 'sk_er')
-        self.assertEqual(csa.i_spi.to_bytes(4, 'big'), c.ispi)
-        self.assertEqual(csa.r_spi.to_bytes(4, 'big'), c.rspi)
+        if hasattr(c, "sk_ai"):
+            self.verify_keymat(csa.keys, c, "sk_ai")
+            self.verify_keymat(csa.keys, c, "sk_ar")
+        self.verify_keymat(csa.keys, c, "sk_ei")
+        self.verify_keymat(csa.keys, c, "sk_er")
+        self.assertEqual(csa.i_spi.to_bytes(4, "big"), c.ispi)
+        self.assertEqual(csa.r_spi.to_bytes(4, "big"), c.rspi)
 
         tsi, tsr = self.sa.generate_ts(self.p.ts_is_ip4)
         tsi = tsi[0]
         tsr = tsr[0]
         r = self.vapi.ikev2_traffic_selector_dump(
 
         tsi, tsr = self.sa.generate_ts(self.p.ts_is_ip4)
         tsi = tsi[0]
         tsr = tsr[0]
         r = self.vapi.ikev2_traffic_selector_dump(
-                is_initiator=True, sa_index=sa.sa_index,
-                child_sa_index=csa.child_sa_index)
+            is_initiator=True, sa_index=sa.sa_index, child_sa_index=csa.child_sa_index
+        )
         self.assertEqual(len(r), 1)
         ts = r[0].ts
         self.verify_ts(r[0].ts, tsi[0], True)
 
         r = self.vapi.ikev2_traffic_selector_dump(
         self.assertEqual(len(r), 1)
         ts = r[0].ts
         self.verify_ts(r[0].ts, tsi[0], True)
 
         r = self.vapi.ikev2_traffic_selector_dump(
-                is_initiator=False, sa_index=sa.sa_index,
-                child_sa_index=csa.child_sa_index)
+            is_initiator=False, sa_index=sa.sa_index, child_sa_index=csa.child_sa_index
+        )
         self.assertEqual(len(r), 1)
         self.verify_ts(r[0].ts, tsr[0], False)
 
         self.assertEqual(len(r), 1)
         self.verify_ts(r[0].ts, tsr[0], False)
 
-        n = self.vapi.ikev2_nonce_get(is_initiator=True,
-                                      sa_index=sa.sa_index)
+        n = self.vapi.ikev2_nonce_get(is_initiator=True, sa_index=sa.sa_index)
         self.verify_nonce(n, self.sa.i_nonce)
         self.verify_nonce(n, self.sa.i_nonce)
-        n = self.vapi.ikev2_nonce_get(is_initiator=False,
-                                      sa_index=sa.sa_index)
+        n = self.vapi.ikev2_nonce_get(is_initiator=False, sa_index=sa.sa_index)
         self.verify_nonce(n, self.sa.r_nonce)
 
     def verify_nonce(self, api_nonce, nonce):
         self.verify_nonce(n, self.sa.r_nonce)
 
     def verify_nonce(self, api_nonce, nonce):
@@ -854,61 +899,65 @@ class IkePeer(VppTestCase):
             self.assertFalse(api_ts.is_local)
 
         if self.p.ts_is_ip4:
             self.assertFalse(api_ts.is_local)
 
         if self.p.ts_is_ip4:
-            self.assertEqual(api_ts.start_addr,
-                             IPv4Address(ts.starting_address_v4))
-            self.assertEqual(api_ts.end_addr,
-                             IPv4Address(ts.ending_address_v4))
+            self.assertEqual(api_ts.start_addr, IPv4Address(ts.starting_address_v4))
+            self.assertEqual(api_ts.end_addr, IPv4Address(ts.ending_address_v4))
         else:
         else:
-            self.assertEqual(api_ts.start_addr,
-                             IPv6Address(ts.starting_address_v6))
-            self.assertEqual(api_ts.end_addr,
-                             IPv6Address(ts.ending_address_v6))
+            self.assertEqual(api_ts.start_addr, IPv6Address(ts.starting_address_v6))
+            self.assertEqual(api_ts.end_addr, IPv6Address(ts.ending_address_v6))
         self.assertEqual(api_ts.start_port, ts.start_port)
         self.assertEqual(api_ts.end_port, ts.end_port)
         self.assertEqual(api_ts.protocol_id, ts.IP_protocol_ID)
 
 
 class TemplateInitiator(IkePeer):
         self.assertEqual(api_ts.start_port, ts.start_port)
         self.assertEqual(api_ts.end_port, ts.end_port)
         self.assertEqual(api_ts.protocol_id, ts.IP_protocol_ID)
 
 
 class TemplateInitiator(IkePeer):
-    """ initiator test template """
+    """initiator test template"""
 
     def initiate_del_sa_from_initiator(self):
 
     def initiate_del_sa_from_initiator(self):
-        ispi = int.from_bytes(self.sa.ispi, 'little')
+        ispi = int.from_bytes(self.sa.ispi, "little")
         self.pg0.enable_capture()
         self.pg_start()
         self.vapi.ikev2_initiate_del_ike_sa(ispi=ispi)
         capture = self.pg0.get_capture(1)
         ih = self.get_ike_header(capture[0])
         self.pg0.enable_capture()
         self.pg_start()
         self.vapi.ikev2_initiate_del_ike_sa(ispi=ispi)
         capture = self.pg0.get_capture(1)
         ih = self.get_ike_header(capture[0])
-        self.assertNotIn('Response', ih.flags)
-        self.assertIn('Initiator', ih.flags)
+        self.assertNotIn("Response", ih.flags)
+        self.assertIn("Initiator", ih.flags)
         self.assertEqual(ih.init_SPI, self.sa.ispi)
         self.assertEqual(ih.resp_SPI, self.sa.rspi)
         plain = self.sa.hmac_and_decrypt(ih)
         d = ikev2.IKEv2_payload_Delete(plain)
         self.assertEqual(d.proto, 1)  # proto=IKEv2
         self.assertEqual(ih.init_SPI, self.sa.ispi)
         self.assertEqual(ih.resp_SPI, self.sa.rspi)
         plain = self.sa.hmac_and_decrypt(ih)
         d = ikev2.IKEv2_payload_Delete(plain)
         self.assertEqual(d.proto, 1)  # proto=IKEv2
-        header = ikev2.IKEv2(init_SPI=self.sa.ispi, resp_SPI=self.sa.rspi,
-                             flags='Response', exch_type='INFORMATIONAL',
-                             id=ih.id, next_payload='Encrypted')
-        resp = self.encrypt_ike_msg(header, b'', None)
+        header = ikev2.IKEv2(
+            init_SPI=self.sa.ispi,
+            resp_SPI=self.sa.rspi,
+            flags="Response",
+            exch_type="INFORMATIONAL",
+            id=ih.id,
+            next_payload="Encrypted",
+        )
+        resp = self.encrypt_ike_msg(header, b"", None)
         self.send_and_assert_no_replies(self.pg0, resp)
 
     def verify_del_sa(self, packet):
         ih = self.get_ike_header(packet)
         self.assertEqual(ih.id, self.sa.msg_id)
         self.assertEqual(ih.exch_type, 37)  # exchange informational
         self.send_and_assert_no_replies(self.pg0, resp)
 
     def verify_del_sa(self, packet):
         ih = self.get_ike_header(packet)
         self.assertEqual(ih.id, self.sa.msg_id)
         self.assertEqual(ih.exch_type, 37)  # exchange informational
-        self.assertIn('Response', ih.flags)
-        self.assertIn('Initiator', ih.flags)
+        self.assertIn("Response", ih.flags)
+        self.assertIn("Initiator", ih.flags)
         plain = self.sa.hmac_and_decrypt(ih)
         plain = self.sa.hmac_and_decrypt(ih)
-        self.assertEqual(plain, b'')
+        self.assertEqual(plain, b"")
 
     def initiate_del_sa_from_responder(self):
 
     def initiate_del_sa_from_responder(self):
-        header = ikev2.IKEv2(init_SPI=self.sa.ispi, resp_SPI=self.sa.rspi,
-                             exch_type='INFORMATIONAL',
-                             id=self.sa.new_msg_id())
-        del_sa = ikev2.IKEv2_payload_Delete(proto='IKEv2')
-        ike_msg = self.encrypt_ike_msg(header, del_sa, 'Delete')
-        packet = self.create_packet(self.pg0, ike_msg,
-                                    self.sa.sport, self.sa.dport,
-                                    self.sa.natt, self.ip6)
+        header = ikev2.IKEv2(
+            init_SPI=self.sa.ispi,
+            resp_SPI=self.sa.rspi,
+            exch_type="INFORMATIONAL",
+            id=self.sa.new_msg_id(),
+        )
+        del_sa = ikev2.IKEv2_payload_Delete(proto="IKEv2")
+        ike_msg = self.encrypt_ike_msg(header, del_sa, "Delete")
+        packet = self.create_packet(
+            self.pg0, ike_msg, self.sa.sport, self.sa.dport, self.sa.natt, self.ip6
+        )
         self.pg0.add_stream(packet)
         self.pg0.enable_capture()
         self.pg_start()
         self.pg0.add_stream(packet)
         self.pg0.enable_capture()
         self.pg_start()
@@ -935,26 +984,28 @@ class TemplateInitiator(IkePeer):
         s = self.find_notify_payload(packet, 16388)
         self.assertIsNotNone(s)
         src_sha = self.sa.compute_nat_sha1(
         s = self.find_notify_payload(packet, 16388)
         self.assertIsNotNone(s)
         src_sha = self.sa.compute_nat_sha1(
-                inet_pton(socket.AF_INET, iph.src), udp.sport, b'\x00' * 8)
+            inet_pton(socket.AF_INET, iph.src), udp.sport, b"\x00" * 8
+        )
         self.assertEqual(s.load, src_sha)
 
         # NAT_DETECTION_DESTINATION_IP
         s = self.find_notify_payload(packet, 16389)
         self.assertIsNotNone(s)
         dst_sha = self.sa.compute_nat_sha1(
         self.assertEqual(s.load, src_sha)
 
         # NAT_DETECTION_DESTINATION_IP
         s = self.find_notify_payload(packet, 16389)
         self.assertIsNotNone(s)
         dst_sha = self.sa.compute_nat_sha1(
-                inet_pton(socket.AF_INET, iph.dst), udp.dport, b'\x00' * 8)
+            inet_pton(socket.AF_INET, iph.dst), udp.dport, b"\x00" * 8
+        )
         self.assertEqual(s.load, dst_sha)
 
     def verify_sa_init_request(self, packet):
         udp = packet[UDP]
         self.sa.dport = udp.sport
         ih = packet[ikev2.IKEv2]
         self.assertEqual(s.load, dst_sha)
 
     def verify_sa_init_request(self, packet):
         udp = packet[UDP]
         self.sa.dport = udp.sport
         ih = packet[ikev2.IKEv2]
-        self.assertNotEqual(ih.init_SPI, 8 * b'\x00')
+        self.assertNotEqual(ih.init_SPI, 8 * b"\x00")
         self.assertEqual(ih.exch_type, 34)  # SA_INIT
         self.sa.ispi = ih.init_SPI
         self.assertEqual(ih.exch_type, 34)  # SA_INIT
         self.sa.ispi = ih.init_SPI
-        self.assertEqual(ih.resp_SPI, 8 * b'\x00')
-        self.assertIn('Initiator', ih.flags)
-        self.assertNotIn('Response', ih.flags)
+        self.assertEqual(ih.resp_SPI, 8 * b"\x00")
+        self.assertIn("Initiator", ih.flags)
+        self.assertNotIn("Response", ih.flags)
         self.sa.i_nonce = ih[ikev2.IKEv2_payload_Nonce].load
         self.sa.i_dh_data = ih[ikev2.IKEv2_payload_KE].load
 
         self.sa.i_nonce = ih[ikev2.IKEv2_payload_Nonce].load
         self.sa.i_dh_data = ih[ikev2.IKEv2_payload_KE].load
 
@@ -962,20 +1013,23 @@ class TemplateInitiator(IkePeer):
         self.assertEqual(prop.proto, 1)  # proto = ikev2
         self.assertEqual(prop.proposal, 1)
         self.assertEqual(prop.trans[0].transform_type, 1)  # encryption
         self.assertEqual(prop.proto, 1)  # proto = ikev2
         self.assertEqual(prop.proposal, 1)
         self.assertEqual(prop.trans[0].transform_type, 1)  # encryption
-        self.assertEqual(prop.trans[0].transform_id,
-                         self.p.ike_transforms['crypto_alg'])
+        self.assertEqual(
+            prop.trans[0].transform_id, self.p.ike_transforms["crypto_alg"]
+        )
         self.assertEqual(prop.trans[1].transform_type, 2)  # prf
         self.assertEqual(prop.trans[1].transform_id, 5)  # "hmac-sha2-256"
         self.assertEqual(prop.trans[2].transform_type, 4)  # dh
         self.assertEqual(prop.trans[1].transform_type, 2)  # prf
         self.assertEqual(prop.trans[1].transform_id, 5)  # "hmac-sha2-256"
         self.assertEqual(prop.trans[2].transform_type, 4)  # dh
-        self.assertEqual(prop.trans[2].transform_id,
-                         self.p.ike_transforms['dh_group'])
+        self.assertEqual(prop.trans[2].transform_id, self.p.ike_transforms["dh_group"])
 
         self.verify_nat_detection(packet)
         self.sa.set_ike_props(
 
         self.verify_nat_detection(packet)
         self.sa.set_ike_props(
-                    crypto='AES-GCM-16ICV', crypto_key_len=32,
-                    integ='NULL', prf='PRF_HMAC_SHA2_256', dh='3072MODPgr')
-        self.sa.set_esp_props(crypto='AES-CBC', crypto_key_len=32,
-                              integ='SHA2-256-128')
+            crypto="AES-GCM-16ICV",
+            crypto_key_len=32,
+            integ="NULL",
+            prf="PRF_HMAC_SHA2_256",
+            dh="3072MODPgr",
+        )
+        self.sa.set_esp_props(crypto="AES-CBC", crypto_key_len=32, integ="SHA2-256-128")
         self.sa.generate_dh_data()
         self.sa.complete_dh_data()
         self.sa.calc_keys()
         self.sa.generate_dh_data()
         self.sa.complete_dh_data()
         self.sa.calc_keys()
@@ -995,8 +1049,8 @@ class TemplateInitiator(IkePeer):
         self.assertEqual(ih.resp_SPI, self.sa.rspi)
         self.assertEqual(ih.init_SPI, self.sa.ispi)
         self.assertEqual(ih.exch_type, 35)  # IKE_AUTH
         self.assertEqual(ih.resp_SPI, self.sa.rspi)
         self.assertEqual(ih.init_SPI, self.sa.ispi)
         self.assertEqual(ih.exch_type, 35)  # IKE_AUTH
-        self.assertIn('Initiator', ih.flags)
-        self.assertNotIn('Response', ih.flags)
+        self.assertIn("Initiator", ih.flags)
+        self.assertNotIn("Response", ih.flags)
 
         udp = packet[UDP]
         self.verify_udp(udp)
 
         udp = packet[UDP]
         self.verify_udp(udp)
@@ -1013,48 +1067,67 @@ class TemplateInitiator(IkePeer):
         prop = idi[ikev2.IKEv2_payload_Proposal]
         c = self.sa.child_sas[0]
         c.ispi = prop.SPI
         prop = idi[ikev2.IKEv2_payload_Proposal]
         c = self.sa.child_sas[0]
         c.ispi = prop.SPI
-        self.update_esp_transforms(
-                prop[ikev2.IKEv2_payload_Transform], self.sa)
+        self.update_esp_transforms(prop[ikev2.IKEv2_payload_Transform], self.sa)
 
     def send_init_response(self):
         tr_attr = self.sa.ike_crypto_attr()
 
     def send_init_response(self):
         tr_attr = self.sa.ike_crypto_attr()
-        trans = (ikev2.IKEv2_payload_Transform(transform_type='Encryption',
-                 transform_id=self.sa.ike_crypto, length=tr_attr[1],
-                 key_length=tr_attr[0]) /
-                 ikev2.IKEv2_payload_Transform(transform_type='Integrity',
-                 transform_id=self.sa.ike_integ) /
-                 ikev2.IKEv2_payload_Transform(transform_type='PRF',
-                 transform_id=self.sa.ike_prf_alg.name) /
-                 ikev2.IKEv2_payload_Transform(transform_type='GroupDesc',
-                 transform_id=self.sa.ike_dh))
-        props = (ikev2.IKEv2_payload_Proposal(proposal=1, proto='IKEv2',
-                 trans_nb=4, trans=trans))
+        trans = (
+            ikev2.IKEv2_payload_Transform(
+                transform_type="Encryption",
+                transform_id=self.sa.ike_crypto,
+                length=tr_attr[1],
+                key_length=tr_attr[0],
+            )
+            / ikev2.IKEv2_payload_Transform(
+                transform_type="Integrity", transform_id=self.sa.ike_integ
+            )
+            / ikev2.IKEv2_payload_Transform(
+                transform_type="PRF", transform_id=self.sa.ike_prf_alg.name
+            )
+            / ikev2.IKEv2_payload_Transform(
+                transform_type="GroupDesc", transform_id=self.sa.ike_dh
+            )
+        )
+        props = ikev2.IKEv2_payload_Proposal(
+            proposal=1, proto="IKEv2", trans_nb=4, trans=trans
+        )
 
         src_address = inet_pton(socket.AF_INET, self.pg0.remote_ip4)
         if self.sa.natt:
 
         src_address = inet_pton(socket.AF_INET, self.pg0.remote_ip4)
         if self.sa.natt:
-            dst_address = b'\x0a\x0a\x0a\x0a'
+            dst_address = b"\x0a\x0a\x0a\x0a"
         else:
             dst_address = inet_pton(socket.AF_INET, self.pg0.local_ip4)
         src_nat = self.sa.compute_nat_sha1(src_address, self.sa.sport)
         dst_nat = self.sa.compute_nat_sha1(dst_address, self.sa.dport)
 
         self.sa.init_resp_packet = (
         else:
             dst_address = inet_pton(socket.AF_INET, self.pg0.local_ip4)
         src_nat = self.sa.compute_nat_sha1(src_address, self.sa.sport)
         dst_nat = self.sa.compute_nat_sha1(dst_address, self.sa.dport)
 
         self.sa.init_resp_packet = (
-            ikev2.IKEv2(init_SPI=self.sa.ispi, resp_SPI=self.sa.rspi,
-                        exch_type='IKE_SA_INIT', flags='Response') /
-            ikev2.IKEv2_payload_SA(next_payload='KE', prop=props) /
-            ikev2.IKEv2_payload_KE(next_payload='Nonce',
-                                   group=self.sa.ike_dh,
-                                   load=self.sa.my_dh_pub_key) /
-            ikev2.IKEv2_payload_Nonce(load=self.sa.r_nonce,
-                                      next_payload='Notify') /
-            ikev2.IKEv2_payload_Notify(
-                    type='NAT_DETECTION_SOURCE_IP', load=src_nat,
-                    next_payload='Notify') / ikev2.IKEv2_payload_Notify(
-                    type='NAT_DETECTION_DESTINATION_IP', load=dst_nat))
-
-        ike_msg = self.create_packet(self.pg0, self.sa.init_resp_packet,
-                                     self.sa.sport, self.sa.dport,
-                                     False, self.ip6)
+            ikev2.IKEv2(
+                init_SPI=self.sa.ispi,
+                resp_SPI=self.sa.rspi,
+                exch_type="IKE_SA_INIT",
+                flags="Response",
+            )
+            / ikev2.IKEv2_payload_SA(next_payload="KE", prop=props)
+            / ikev2.IKEv2_payload_KE(
+                next_payload="Nonce", group=self.sa.ike_dh, load=self.sa.my_dh_pub_key
+            )
+            / ikev2.IKEv2_payload_Nonce(load=self.sa.r_nonce, next_payload="Notify")
+            / ikev2.IKEv2_payload_Notify(
+                type="NAT_DETECTION_SOURCE_IP", load=src_nat, next_payload="Notify"
+            )
+            / ikev2.IKEv2_payload_Notify(
+                type="NAT_DETECTION_DESTINATION_IP", load=dst_nat
+            )
+        )
+
+        ike_msg = self.create_packet(
+            self.pg0,
+            self.sa.init_resp_packet,
+            self.sa.sport,
+            self.sa.dport,
+            False,
+            self.ip6,
+        )
         self.pg_send(self.pg0, ike_msg)
         capture = self.pg0.get_capture(1)
         self.verify_sa_auth_req(capture[0])
         self.pg_send(self.pg0, ike_msg)
         capture = self.pg0.get_capture(1)
         self.verify_sa_auth_req(capture[0])
@@ -1070,47 +1143,64 @@ class TemplateInitiator(IkePeer):
 
     def send_auth_response(self):
         tr_attr = self.sa.esp_crypto_attr()
 
     def send_auth_response(self):
         tr_attr = self.sa.esp_crypto_attr()
-        trans = (ikev2.IKEv2_payload_Transform(transform_type='Encryption',
-                 transform_id=self.sa.esp_crypto, length=tr_attr[1],
-                 key_length=tr_attr[0]) /
-                 ikev2.IKEv2_payload_Transform(transform_type='Integrity',
-                 transform_id=self.sa.esp_integ) /
-                 ikev2.IKEv2_payload_Transform(
-                 transform_type='Extended Sequence Number',
-                 transform_id='No ESN') /
-                 ikev2.IKEv2_payload_Transform(
-                 transform_type='Extended Sequence Number',
-                 transform_id='ESN'))
+        trans = (
+            ikev2.IKEv2_payload_Transform(
+                transform_type="Encryption",
+                transform_id=self.sa.esp_crypto,
+                length=tr_attr[1],
+                key_length=tr_attr[0],
+            )
+            / ikev2.IKEv2_payload_Transform(
+                transform_type="Integrity", transform_id=self.sa.esp_integ
+            )
+            / ikev2.IKEv2_payload_Transform(
+                transform_type="Extended Sequence Number", transform_id="No ESN"
+            )
+            / ikev2.IKEv2_payload_Transform(
+                transform_type="Extended Sequence Number", transform_id="ESN"
+            )
+        )
 
         c = self.sa.child_sas[0]
 
         c = self.sa.child_sas[0]
-        props = (ikev2.IKEv2_payload_Proposal(proposal=1, proto='ESP',
-                 SPIsize=4, SPI=c.rspi, trans_nb=4, trans=trans))
+        props = ikev2.IKEv2_payload_Proposal(
+            proposal=1, proto="ESP", SPIsize=4, SPI=c.rspi, trans_nb=4, trans=trans
+        )
 
         tsi, tsr = self.sa.generate_ts(self.p.ts_is_ip4)
 
         tsi, tsr = self.sa.generate_ts(self.p.ts_is_ip4)
-        plain = (ikev2.IKEv2_payload_IDi(next_payload='IDr',
-                 IDtype=self.sa.id_type, load=self.sa.i_id) /
-                 ikev2.IKEv2_payload_IDr(next_payload='AUTH',
-                 IDtype=self.sa.id_type, load=self.sa.r_id) /
-                 ikev2.IKEv2_payload_AUTH(next_payload='SA',
-                 auth_type=AuthMethod.value(self.sa.auth_method),
-                 load=self.sa.auth_data) /
-                 ikev2.IKEv2_payload_SA(next_payload='TSi', prop=props) /
-                 ikev2.IKEv2_payload_TSi(next_payload='TSr',
-                 number_of_TSs=len(tsi),
-                 traffic_selector=tsi) /
-                 ikev2.IKEv2_payload_TSr(next_payload='Notify',
-                 number_of_TSs=len(tsr),
-                 traffic_selector=tsr) /
-                 ikev2.IKEv2_payload_Notify(type='INITIAL_CONTACT'))
+        plain = (
+            ikev2.IKEv2_payload_IDi(
+                next_payload="IDr", IDtype=self.sa.id_type, load=self.sa.i_id
+            )
+            / ikev2.IKEv2_payload_IDr(
+                next_payload="AUTH", IDtype=self.sa.id_type, load=self.sa.r_id
+            )
+            / ikev2.IKEv2_payload_AUTH(
+                next_payload="SA",
+                auth_type=AuthMethod.value(self.sa.auth_method),
+                load=self.sa.auth_data,
+            )
+            / ikev2.IKEv2_payload_SA(next_payload="TSi", prop=props)
+            / ikev2.IKEv2_payload_TSi(
+                next_payload="TSr", number_of_TSs=len(tsi), traffic_selector=tsi
+            )
+            / ikev2.IKEv2_payload_TSr(
+                next_payload="Notify", number_of_TSs=len(tsr), traffic_selector=tsr
+            )
+            / ikev2.IKEv2_payload_Notify(type="INITIAL_CONTACT")
+        )
 
         header = ikev2.IKEv2(
 
         header = ikev2.IKEv2(
-                init_SPI=self.sa.ispi,
-                resp_SPI=self.sa.rspi, id=self.sa.new_msg_id(),
-                flags='Response', exch_type='IKE_AUTH')
-
-        ike_msg = self.encrypt_ike_msg(header, plain, 'IDi')
-        packet = self.create_packet(self.pg0, ike_msg, self.sa.sport,
-                                    self.sa.dport, self.sa.natt, self.ip6)
+            init_SPI=self.sa.ispi,
+            resp_SPI=self.sa.rspi,
+            id=self.sa.new_msg_id(),
+            flags="Response",
+            exch_type="IKE_AUTH",
+        )
+
+        ike_msg = self.encrypt_ike_msg(header, plain, "IDi")
+        packet = self.create_packet(
+            self.pg0, ike_msg, self.sa.sport, self.sa.dport, self.sa.natt, self.ip6
+        )
         self.pg_send(self.pg0, packet)
 
     def test_initiator(self):
         self.pg_send(self.pg0, packet)
 
     def test_initiator(self):
@@ -1122,51 +1212,58 @@ class TemplateInitiator(IkePeer):
 
 
 class TemplateResponder(IkePeer):
 
 
 class TemplateResponder(IkePeer):
-    """ responder test template """
+    """responder test template"""
 
     def initiate_del_sa_from_responder(self):
         self.pg0.enable_capture()
         self.pg_start()
 
     def initiate_del_sa_from_responder(self):
         self.pg0.enable_capture()
         self.pg_start()
-        self.vapi.ikev2_initiate_del_ike_sa(
-                ispi=int.from_bytes(self.sa.ispi, 'little'))
+        self.vapi.ikev2_initiate_del_ike_sa(ispi=int.from_bytes(self.sa.ispi, "little"))
         capture = self.pg0.get_capture(1)
         ih = self.get_ike_header(capture[0])
         capture = self.pg0.get_capture(1)
         ih = self.get_ike_header(capture[0])
-        self.assertNotIn('Response', ih.flags)
-        self.assertNotIn('Initiator', ih.flags)
+        self.assertNotIn("Response", ih.flags)
+        self.assertNotIn("Initiator", ih.flags)
         self.assertEqual(ih.exch_type, 37)  # INFORMATIONAL
         plain = self.sa.hmac_and_decrypt(ih)
         d = ikev2.IKEv2_payload_Delete(plain)
         self.assertEqual(d.proto, 1)  # proto=IKEv2
         self.assertEqual(ih.init_SPI, self.sa.ispi)
         self.assertEqual(ih.resp_SPI, self.sa.rspi)
         self.assertEqual(ih.exch_type, 37)  # INFORMATIONAL
         plain = self.sa.hmac_and_decrypt(ih)
         d = ikev2.IKEv2_payload_Delete(plain)
         self.assertEqual(d.proto, 1)  # proto=IKEv2
         self.assertEqual(ih.init_SPI, self.sa.ispi)
         self.assertEqual(ih.resp_SPI, self.sa.rspi)
-        header = ikev2.IKEv2(init_SPI=self.sa.ispi, resp_SPI=self.sa.rspi,
-                             flags='Initiator+Response',
-                             exch_type='INFORMATIONAL',
-                             id=ih.id, next_payload='Encrypted')
-        resp = self.encrypt_ike_msg(header, b'', None)
+        header = ikev2.IKEv2(
+            init_SPI=self.sa.ispi,
+            resp_SPI=self.sa.rspi,
+            flags="Initiator+Response",
+            exch_type="INFORMATIONAL",
+            id=ih.id,
+            next_payload="Encrypted",
+        )
+        resp = self.encrypt_ike_msg(header, b"", None)
         self.send_and_assert_no_replies(self.pg0, resp)
 
     def verify_del_sa(self, packet):
         ih = self.get_ike_header(packet)
         self.assertEqual(ih.id, self.sa.msg_id)
         self.assertEqual(ih.exch_type, 37)  # exchange informational
         self.send_and_assert_no_replies(self.pg0, resp)
 
     def verify_del_sa(self, packet):
         ih = self.get_ike_header(packet)
         self.assertEqual(ih.id, self.sa.msg_id)
         self.assertEqual(ih.exch_type, 37)  # exchange informational
-        self.assertIn('Response', ih.flags)
-        self.assertNotIn('Initiator', ih.flags)
+        self.assertIn("Response", ih.flags)
+        self.assertNotIn("Initiator", ih.flags)
         self.assertEqual(ih.next_payload, 46)  # Encrypted
         self.assertEqual(ih.init_SPI, self.sa.ispi)
         self.assertEqual(ih.resp_SPI, self.sa.rspi)
         plain = self.sa.hmac_and_decrypt(ih)
         self.assertEqual(ih.next_payload, 46)  # Encrypted
         self.assertEqual(ih.init_SPI, self.sa.ispi)
         self.assertEqual(ih.resp_SPI, self.sa.rspi)
         plain = self.sa.hmac_and_decrypt(ih)
-        self.assertEqual(plain, b'')
+        self.assertEqual(plain, b"")
 
     def initiate_del_sa_from_initiator(self):
 
     def initiate_del_sa_from_initiator(self):
-        header = ikev2.IKEv2(init_SPI=self.sa.ispi, resp_SPI=self.sa.rspi,
-                             flags='Initiator', exch_type='INFORMATIONAL',
-                             id=self.sa.new_msg_id())
-        del_sa = ikev2.IKEv2_payload_Delete(proto='IKEv2')
-        ike_msg = self.encrypt_ike_msg(header, del_sa, 'Delete')
-        packet = self.create_packet(self.pg0, ike_msg,
-                                    self.sa.sport, self.sa.dport,
-                                    self.sa.natt, self.ip6)
+        header = ikev2.IKEv2(
+            init_SPI=self.sa.ispi,
+            resp_SPI=self.sa.rspi,
+            flags="Initiator",
+            exch_type="INFORMATIONAL",
+            id=self.sa.new_msg_id(),
+        )
+        del_sa = ikev2.IKEv2_payload_Delete(proto="IKEv2")
+        ike_msg = self.encrypt_ike_msg(header, del_sa, "Delete")
+        packet = self.create_packet(
+            self.pg0, ike_msg, self.sa.sport, self.sa.dport, self.sa.natt, self.ip6
+        )
         self.pg0.add_stream(packet)
         self.pg0.enable_capture()
         self.pg_start()
         self.pg0.add_stream(packet)
         self.pg0.enable_capture()
         self.pg_start()
@@ -1175,56 +1272,72 @@ class TemplateResponder(IkePeer):
 
     def send_sa_init_req(self):
         tr_attr = self.sa.ike_crypto_attr()
 
     def send_sa_init_req(self):
         tr_attr = self.sa.ike_crypto_attr()
-        trans = (ikev2.IKEv2_payload_Transform(transform_type='Encryption',
-                 transform_id=self.sa.ike_crypto, length=tr_attr[1],
-                 key_length=tr_attr[0]) /
-                 ikev2.IKEv2_payload_Transform(transform_type='Integrity',
-                 transform_id=self.sa.ike_integ) /
-                 ikev2.IKEv2_payload_Transform(transform_type='PRF',
-                 transform_id=self.sa.ike_prf_alg.name) /
-                 ikev2.IKEv2_payload_Transform(transform_type='GroupDesc',
-                 transform_id=self.sa.ike_dh))
-
-        props = (ikev2.IKEv2_payload_Proposal(proposal=1, proto='IKEv2',
-                 trans_nb=4, trans=trans))
-
-        next_payload = None if self.ip6 else 'Notify'
+        trans = (
+            ikev2.IKEv2_payload_Transform(
+                transform_type="Encryption",
+                transform_id=self.sa.ike_crypto,
+                length=tr_attr[1],
+                key_length=tr_attr[0],
+            )
+            / ikev2.IKEv2_payload_Transform(
+                transform_type="Integrity", transform_id=self.sa.ike_integ
+            )
+            / ikev2.IKEv2_payload_Transform(
+                transform_type="PRF", transform_id=self.sa.ike_prf_alg.name
+            )
+            / ikev2.IKEv2_payload_Transform(
+                transform_type="GroupDesc", transform_id=self.sa.ike_dh
+            )
+        )
+
+        props = ikev2.IKEv2_payload_Proposal(
+            proposal=1, proto="IKEv2", trans_nb=4, trans=trans
+        )
+
+        next_payload = None if self.ip6 else "Notify"
 
         self.sa.init_req_packet = (
 
         self.sa.init_req_packet = (
-                ikev2.IKEv2(init_SPI=self.sa.ispi,
-                            flags='Initiator', exch_type='IKE_SA_INIT') /
-                ikev2.IKEv2_payload_SA(next_payload='KE', prop=props) /
-                ikev2.IKEv2_payload_KE(next_payload='Nonce',
-                                       group=self.sa.ike_dh,
-                                       load=self.sa.my_dh_pub_key) /
-                ikev2.IKEv2_payload_Nonce(next_payload=next_payload,
-                                          load=self.sa.i_nonce))
+            ikev2.IKEv2(
+                init_SPI=self.sa.ispi, flags="Initiator", exch_type="IKE_SA_INIT"
+            )
+            / ikev2.IKEv2_payload_SA(next_payload="KE", prop=props)
+            / ikev2.IKEv2_payload_KE(
+                next_payload="Nonce", group=self.sa.ike_dh, load=self.sa.my_dh_pub_key
+            )
+            / ikev2.IKEv2_payload_Nonce(next_payload=next_payload, load=self.sa.i_nonce)
+        )
 
         if not self.ip6:
             if self.sa.i_natt:
 
         if not self.ip6:
             if self.sa.i_natt:
-                src_address = b'\x0a\x0a\x0a\x01'
+                src_address = b"\x0a\x0a\x0a\x01"
             else:
                 src_address = inet_pton(socket.AF_INET, self.pg0.remote_ip4)
 
             if self.sa.r_natt:
             else:
                 src_address = inet_pton(socket.AF_INET, self.pg0.remote_ip4)
 
             if self.sa.r_natt:
-                dst_address = b'\x0a\x0a\x0a\x0a'
+                dst_address = b"\x0a\x0a\x0a\x0a"
             else:
                 dst_address = inet_pton(socket.AF_INET, self.pg0.local_ip4)
 
             src_nat = self.sa.compute_nat_sha1(src_address, self.sa.sport)
             dst_nat = self.sa.compute_nat_sha1(dst_address, self.sa.dport)
             nat_src_detection = ikev2.IKEv2_payload_Notify(
             else:
                 dst_address = inet_pton(socket.AF_INET, self.pg0.local_ip4)
 
             src_nat = self.sa.compute_nat_sha1(src_address, self.sa.sport)
             dst_nat = self.sa.compute_nat_sha1(dst_address, self.sa.dport)
             nat_src_detection = ikev2.IKEv2_payload_Notify(
-                    type='NAT_DETECTION_SOURCE_IP', load=src_nat,
-                    next_payload='Notify')
+                type="NAT_DETECTION_SOURCE_IP", load=src_nat, next_payload="Notify"
+            )
             nat_dst_detection = ikev2.IKEv2_payload_Notify(
             nat_dst_detection = ikev2.IKEv2_payload_Notify(
-                    type='NAT_DETECTION_DESTINATION_IP', load=dst_nat)
-            self.sa.init_req_packet = (self.sa.init_req_packet /
-                                       nat_src_detection /
-                                       nat_dst_detection)
-
-        ike_msg = self.create_packet(self.pg0, self.sa.init_req_packet,
-                                     self.sa.sport, self.sa.dport,
-                                     self.sa.natt, self.ip6)
+                type="NAT_DETECTION_DESTINATION_IP", load=dst_nat
+            )
+            self.sa.init_req_packet = (
+                self.sa.init_req_packet / nat_src_detection / nat_dst_detection
+            )
+
+        ike_msg = self.create_packet(
+            self.pg0,
+            self.sa.init_req_packet,
+            self.sa.sport,
+            self.sa.dport,
+            self.sa.natt,
+            self.ip6,
+        )
         self.pg0.add_stream(ike_msg)
         self.pg0.enable_capture()
         self.pg_start()
         self.pg0.add_stream(ike_msg)
         self.pg0.enable_capture()
         self.pg_start()
@@ -1233,65 +1346,83 @@ class TemplateResponder(IkePeer):
 
     def generate_auth_payload(self, last_payload=None, is_rekey=False):
         tr_attr = self.sa.esp_crypto_attr()
 
     def generate_auth_payload(self, last_payload=None, is_rekey=False):
         tr_attr = self.sa.esp_crypto_attr()
-        last_payload = last_payload or 'Notify'
-        trans = (ikev2.IKEv2_payload_Transform(transform_type='Encryption',
-                 transform_id=self.sa.esp_crypto, length=tr_attr[1],
-                 key_length=tr_attr[0]) /
-                 ikev2.IKEv2_payload_Transform(transform_type='Integrity',
-                 transform_id=self.sa.esp_integ) /
-                 ikev2.IKEv2_payload_Transform(
-                 transform_type='Extended Sequence Number',
-                 transform_id='No ESN') /
-                 ikev2.IKEv2_payload_Transform(
-                 transform_type='Extended Sequence Number',
-                 transform_id='ESN'))
+        last_payload = last_payload or "Notify"
+        trans = (
+            ikev2.IKEv2_payload_Transform(
+                transform_type="Encryption",
+                transform_id=self.sa.esp_crypto,
+                length=tr_attr[1],
+                key_length=tr_attr[0],
+            )
+            / ikev2.IKEv2_payload_Transform(
+                transform_type="Integrity", transform_id=self.sa.esp_integ
+            )
+            / ikev2.IKEv2_payload_Transform(
+                transform_type="Extended Sequence Number", transform_id="No ESN"
+            )
+            / ikev2.IKEv2_payload_Transform(
+                transform_type="Extended Sequence Number", transform_id="ESN"
+            )
+        )
 
         c = self.sa.child_sas[0]
 
         c = self.sa.child_sas[0]
-        props = (ikev2.IKEv2_payload_Proposal(proposal=1, proto='ESP',
-                 SPIsize=4, SPI=c.ispi, trans_nb=4, trans=trans))
+        props = ikev2.IKEv2_payload_Proposal(
+            proposal=1, proto="ESP", SPIsize=4, SPI=c.ispi, trans_nb=4, trans=trans
+        )
 
         tsi, tsr = self.sa.generate_ts(self.p.ts_is_ip4)
 
         tsi, tsr = self.sa.generate_ts(self.p.ts_is_ip4)
-        plain = (ikev2.IKEv2_payload_AUTH(next_payload='SA',
-                 auth_type=AuthMethod.value(self.sa.auth_method),
-                 load=self.sa.auth_data) /
-                 ikev2.IKEv2_payload_SA(next_payload='TSi', prop=props) /
-                 ikev2.IKEv2_payload_TSi(next_payload='TSr',
-                 number_of_TSs=len(tsi), traffic_selector=tsi) /
-                 ikev2.IKEv2_payload_TSr(next_payload=last_payload,
-                 number_of_TSs=len(tsr), traffic_selector=tsr))
+        plain = (
+            ikev2.IKEv2_payload_AUTH(
+                next_payload="SA",
+                auth_type=AuthMethod.value(self.sa.auth_method),
+                load=self.sa.auth_data,
+            )
+            / ikev2.IKEv2_payload_SA(next_payload="TSi", prop=props)
+            / ikev2.IKEv2_payload_TSi(
+                next_payload="TSr", number_of_TSs=len(tsi), traffic_selector=tsi
+            )
+            / ikev2.IKEv2_payload_TSr(
+                next_payload=last_payload, number_of_TSs=len(tsr), traffic_selector=tsr
+            )
+        )
 
         if is_rekey:
 
         if is_rekey:
-            first_payload = 'Nonce'
-            plain = (ikev2.IKEv2_payload_Nonce(load=self.sa.i_nonce,
-                     next_payload='SA') / plain /
-                     ikev2.IKEv2_payload_Notify(type='REKEY_SA',
-                     proto='ESP', SPI=c.ispi))
+            first_payload = "Nonce"
+            plain = (
+                ikev2.IKEv2_payload_Nonce(load=self.sa.i_nonce, next_payload="SA")
+                / plain
+                / ikev2.IKEv2_payload_Notify(type="REKEY_SA", proto="ESP", SPI=c.ispi)
+            )
         else:
         else:
-            first_payload = 'IDi'
+            first_payload = "IDi"
             if self.no_idr_auth:
             if self.no_idr_auth:
-                ids = ikev2.IKEv2_payload_IDi(next_payload='AUTH',
-                                              IDtype=self.sa.id_type,
-                                              load=self.sa.i_id)
+                ids = ikev2.IKEv2_payload_IDi(
+                    next_payload="AUTH", IDtype=self.sa.id_type, load=self.sa.i_id
+                )
             else:
             else:
-                ids = (ikev2.IKEv2_payload_IDi(next_payload='IDr',
-                       IDtype=self.sa.id_type, load=self.sa.i_id) /
-                       ikev2.IKEv2_payload_IDr(next_payload='AUTH',
-                       IDtype=self.sa.id_type, load=self.sa.r_id))
+                ids = ikev2.IKEv2_payload_IDi(
+                    next_payload="IDr", IDtype=self.sa.id_type, load=self.sa.i_id
+                ) / ikev2.IKEv2_payload_IDr(
+                    next_payload="AUTH", IDtype=self.sa.id_type, load=self.sa.r_id
+                )
             plain = ids / plain
         return plain, first_payload
 
     def send_sa_auth(self):
             plain = ids / plain
         return plain, first_payload
 
     def send_sa_auth(self):
-        plain, first_payload = self.generate_auth_payload(
-                    last_payload='Notify')
-        plain = plain / ikev2.IKEv2_payload_Notify(type='INITIAL_CONTACT')
+        plain, first_payload = self.generate_auth_payload(last_payload="Notify")
+        plain = plain / ikev2.IKEv2_payload_Notify(type="INITIAL_CONTACT")
         header = ikev2.IKEv2(
         header = ikev2.IKEv2(
-                init_SPI=self.sa.ispi,
-                resp_SPI=self.sa.rspi, id=self.sa.new_msg_id(),
-                flags='Initiator', exch_type='IKE_AUTH')
+            init_SPI=self.sa.ispi,
+            resp_SPI=self.sa.rspi,
+            id=self.sa.new_msg_id(),
+            flags="Initiator",
+            exch_type="IKE_AUTH",
+        )
 
         ike_msg = self.encrypt_ike_msg(header, plain, first_payload)
 
         ike_msg = self.encrypt_ike_msg(header, plain, first_payload)
-        packet = self.create_packet(self.pg0, ike_msg, self.sa.sport,
-                                    self.sa.dport, self.sa.natt, self.ip6)
+        packet = self.create_packet(
+            self.pg0, ike_msg, self.sa.sport, self.sa.dport, self.sa.natt, self.ip6
+        )
         self.pg0.add_stream(packet)
         self.pg0.enable_capture()
         self.pg_start()
         self.pg0.add_stream(packet)
         self.pg0.enable_capture()
         self.pg_start()
@@ -1303,7 +1434,7 @@ class TemplateResponder(IkePeer):
 
         self.assertEqual(ih.id, self.sa.msg_id)
         self.assertEqual(ih.exch_type, 34)
 
         self.assertEqual(ih.id, self.sa.msg_id)
         self.assertEqual(ih.exch_type, 34)
-        self.assertIn('Response', ih.flags)
+        self.assertIn("Response", ih.flags)
         self.assertEqual(ih.init_SPI, self.sa.ispi)
         self.assertNotEqual(ih.resp_SPI, 0)
         self.sa.rspi = ih.resp_SPI
         self.assertEqual(ih.init_SPI, self.sa.ispi)
         self.assertNotEqual(ih.resp_SPI, 0)
         self.sa.rspi = ih.resp_SPI
@@ -1331,12 +1462,12 @@ class TemplateResponder(IkePeer):
         self.sa.child_sas[0].rspi = prop.SPI
         self.sa.calc_child_keys()
 
         self.sa.child_sas[0].rspi = prop.SPI
         self.sa.calc_child_keys()
 
-    IKE_NODE_SUFFIX = 'ip4'
+    IKE_NODE_SUFFIX = "ip4"
 
     def verify_counters(self):
 
     def verify_counters(self):
-        self.assert_counter(2, 'processed', self.IKE_NODE_SUFFIX)
-        self.assert_counter(1, 'init_sa_req', self.IKE_NODE_SUFFIX)
-        self.assert_counter(1, 'ike_auth_req', self.IKE_NODE_SUFFIX)
+        self.assert_counter(2, "processed", self.IKE_NODE_SUFFIX)
+        self.assert_counter(1, "init_sa_req", self.IKE_NODE_SUFFIX)
+        self.assert_counter(1, "ike_auth_req", self.IKE_NODE_SUFFIX)
 
         r = self.vapi.ikev2_sa_dump()
         s = r[0].sa.stats
 
         r = self.vapi.ikev2_sa_dump()
         s = r[0].sa.stats
@@ -1356,59 +1487,60 @@ class Ikev2Params(object):
         ec = VppEnum.vl_api_ipsec_crypto_alg_t
         ei = VppEnum.vl_api_ipsec_integ_alg_t
         self.vpp_enums = {
         ec = VppEnum.vl_api_ipsec_crypto_alg_t
         ei = VppEnum.vl_api_ipsec_integ_alg_t
         self.vpp_enums = {
-                'AES-CBC-128': ec.IPSEC_API_CRYPTO_ALG_AES_CBC_128,
-                'AES-CBC-192': ec.IPSEC_API_CRYPTO_ALG_AES_CBC_192,
-                'AES-CBC-256': ec.IPSEC_API_CRYPTO_ALG_AES_CBC_256,
-                'AES-GCM-16ICV-128':  ec.IPSEC_API_CRYPTO_ALG_AES_GCM_128,
-                'AES-GCM-16ICV-192':  ec.IPSEC_API_CRYPTO_ALG_AES_GCM_192,
-                'AES-GCM-16ICV-256':  ec.IPSEC_API_CRYPTO_ALG_AES_GCM_256,
-
-                'HMAC-SHA1-96': ei.IPSEC_API_INTEG_ALG_SHA1_96,
-                'SHA2-256-128': ei.IPSEC_API_INTEG_ALG_SHA_256_128,
-                'SHA2-384-192': ei.IPSEC_API_INTEG_ALG_SHA_384_192,
-                'SHA2-512-256': ei.IPSEC_API_INTEG_ALG_SHA_512_256}
-
-        dpd_disabled = True if 'dpd_disabled' not in params else\
-            params['dpd_disabled']
+            "AES-CBC-128": ec.IPSEC_API_CRYPTO_ALG_AES_CBC_128,
+            "AES-CBC-192": ec.IPSEC_API_CRYPTO_ALG_AES_CBC_192,
+            "AES-CBC-256": ec.IPSEC_API_CRYPTO_ALG_AES_CBC_256,
+            "AES-GCM-16ICV-128": ec.IPSEC_API_CRYPTO_ALG_AES_GCM_128,
+            "AES-GCM-16ICV-192": ec.IPSEC_API_CRYPTO_ALG_AES_GCM_192,
+            "AES-GCM-16ICV-256": ec.IPSEC_API_CRYPTO_ALG_AES_GCM_256,
+            "HMAC-SHA1-96": ei.IPSEC_API_INTEG_ALG_SHA1_96,
+            "SHA2-256-128": ei.IPSEC_API_INTEG_ALG_SHA_256_128,
+            "SHA2-384-192": ei.IPSEC_API_INTEG_ALG_SHA_384_192,
+            "SHA2-512-256": ei.IPSEC_API_INTEG_ALG_SHA_512_256,
+        }
+
+        dpd_disabled = True if "dpd_disabled" not in params else params["dpd_disabled"]
         if dpd_disabled:
         if dpd_disabled:
-            self.vapi.cli('ikev2 dpd disable')
-        self.del_sa_from_responder = False if 'del_sa_from_responder'\
-            not in params else params['del_sa_from_responder']
-        i_natt = False if 'i_natt' not in params else params['i_natt']
-        r_natt = False if 'r_natt' not in params else params['r_natt']
-        self.p = Profile(self, 'pr1')
-        self.ip6 = False if 'ip6' not in params else params['ip6']
-
-        if 'auth' in params and params['auth'] == 'rsa-sig':
-            auth_method = 'rsa-sig'
+            self.vapi.cli("ikev2 dpd disable")
+        self.del_sa_from_responder = (
+            False
+            if "del_sa_from_responder" not in params
+            else params["del_sa_from_responder"]
+        )
+        i_natt = False if "i_natt" not in params else params["i_natt"]
+        r_natt = False if "r_natt" not in params else params["r_natt"]
+        self.p = Profile(self, "pr1")
+        self.ip6 = False if "ip6" not in params else params["ip6"]
+
+        if "auth" in params and params["auth"] == "rsa-sig":
+            auth_method = "rsa-sig"
             work_dir = f"{config.vpp_ws_dir}/src/plugins/ikev2/test/certs/"
             work_dir = f"{config.vpp_ws_dir}/src/plugins/ikev2/test/certs/"
-            self.vapi.ikev2_set_local_key(
-                    key_file=work_dir + params['server-key'])
-
-            client_file = work_dir + params['client-cert']
-            server_pem = open(work_dir + params['server-cert']).read()
-            client_priv = open(work_dir + params['client-key']).read()
-            client_priv = load_pem_private_key(str.encode(client_priv), None,
-                                               default_backend())
+            self.vapi.ikev2_set_local_key(key_file=work_dir + params["server-key"])
+
+            client_file = work_dir + params["client-cert"]
+            server_pem = open(work_dir + params["server-cert"]).read()
+            client_priv = open(work_dir + params["client-key"]).read()
+            client_priv = load_pem_private_key(
+                str.encode(client_priv), None, default_backend()
+            )
             self.peer_cert = x509.load_pem_x509_certificate(
             self.peer_cert = x509.load_pem_x509_certificate(
-                    str.encode(server_pem),
-                    default_backend())
-            self.p.add_auth(method='rsa-sig', data=str.encode(client_file))
+                str.encode(server_pem), default_backend()
+            )
+            self.p.add_auth(method="rsa-sig", data=str.encode(client_file))
             auth_data = None
         else:
             auth_data = None
         else:
-            auth_data = b'$3cr3tpa$$w0rd'
-            self.p.add_auth(method='shared-key', data=auth_data)
-            auth_method = 'shared-key'
+            auth_data = b"$3cr3tpa$$w0rd"
+            self.p.add_auth(method="shared-key", data=auth_data)
+            auth_method = "shared-key"
             client_priv = None
 
             client_priv = None
 
-        is_init = True if 'is_initiator' not in params else\
-            params['is_initiator']
-        self.no_idr_auth = params.get('no_idr_in_auth', False)
+        is_init = True if "is_initiator" not in params else params["is_initiator"]
+        self.no_idr_auth = params.get("no_idr_in_auth", False)
 
 
-        idr = {'id_type': 'fqdn', 'data': b'vpp.home'}
-        idi = {'id_type': 'fqdn', 'data': b'roadwarrior.example.com'}
-        r_id = self.idr = idr['data']
-        i_id = self.idi = idi['data']
+        idr = {"id_type": "fqdn", "data": b"vpp.home"}
+        idi = {"id_type": "fqdn", "data": b"roadwarrior.example.com"}
+        r_id = self.idr = idr["data"]
+        i_id = self.idi = idi["data"]
         if is_init:
             # scapy is initiator, VPP is responder
             self.p.add_local_id(**idr)
         if is_init:
             # scapy is initiator, VPP is responder
             self.p.add_local_id(**idr)
@@ -1421,70 +1553,90 @@ class Ikev2Params(object):
             if not self.no_idr_auth:
                 self.p.add_remote_id(**idr)
 
             if not self.no_idr_auth:
                 self.p.add_remote_id(**idr)
 
-        loc_ts = {'start_addr': '10.10.10.0', 'end_addr': '10.10.10.255'} if\
-            'loc_ts' not in params else params['loc_ts']
-        rem_ts = {'start_addr': '10.0.0.0', 'end_addr': '10.0.0.255'} if\
-            'rem_ts' not in params else params['rem_ts']
+        loc_ts = (
+            {"start_addr": "10.10.10.0", "end_addr": "10.10.10.255"}
+            if "loc_ts" not in params
+            else params["loc_ts"]
+        )
+        rem_ts = (
+            {"start_addr": "10.0.0.0", "end_addr": "10.0.0.255"}
+            if "rem_ts" not in params
+            else params["rem_ts"]
+        )
         self.p.add_local_ts(**loc_ts)
         self.p.add_remote_ts(**rem_ts)
         self.p.add_local_ts(**loc_ts)
         self.p.add_remote_ts(**rem_ts)
-        if 'responder' in params:
-            self.p.add_responder(params['responder'])
-        if 'ike_transforms' in params:
-            self.p.add_ike_transforms(params['ike_transforms'])
-        if 'esp_transforms' in params:
-            self.p.add_esp_transforms(params['esp_transforms'])
-
-        udp_encap = False if 'udp_encap' not in params else\
-            params['udp_encap']
+        if "responder" in params:
+            self.p.add_responder(params["responder"])
+        if "ike_transforms" in params:
+            self.p.add_ike_transforms(params["ike_transforms"])
+        if "esp_transforms" in params:
+            self.p.add_esp_transforms(params["esp_transforms"])
+
+        udp_encap = False if "udp_encap" not in params else params["udp_encap"]
         if udp_encap:
             self.p.set_udp_encap(True)
 
         if udp_encap:
             self.p.set_udp_encap(True)
 
-        if 'responder_hostname' in params:
-            hn = params['responder_hostname']
+        if "responder_hostname" in params:
+            hn = params["responder_hostname"]
             self.p.add_responder_hostname(hn)
 
             # configure static dns record
             self.vapi.dns_name_server_add_del(
             self.p.add_responder_hostname(hn)
 
             # configure static dns record
             self.vapi.dns_name_server_add_del(
-                is_ip6=0, is_add=1,
-                server_address=IPv4Address(u'8.8.8.8').packed)
+                is_ip6=0, is_add=1, server_address=IPv4Address("8.8.8.8").packed
+            )
             self.vapi.dns_enable_disable(enable=1)
 
             self.vapi.dns_enable_disable(enable=1)
 
-            cmd = "dns cache add {} {}".format(hn['hostname'],
-                                               self.pg0.remote_ip4)
+            cmd = "dns cache add {} {}".format(hn["hostname"], self.pg0.remote_ip4)
             self.vapi.cli(cmd)
 
             self.vapi.cli(cmd)
 
-        self.sa = IKEv2SA(self, i_id=i_id, r_id=r_id,
-                          is_initiator=is_init,
-                          id_type=self.p.local_id['id_type'],
-                          i_natt=i_natt, r_natt=r_natt,
-                          priv_key=client_priv, auth_method=auth_method,
-                          nonce=params.get('nonce'),
-                          auth_data=auth_data, udp_encap=udp_encap,
-                          local_ts=self.p.remote_ts, remote_ts=self.p.local_ts)
+        self.sa = IKEv2SA(
+            self,
+            i_id=i_id,
+            r_id=r_id,
+            is_initiator=is_init,
+            id_type=self.p.local_id["id_type"],
+            i_natt=i_natt,
+            r_natt=r_natt,
+            priv_key=client_priv,
+            auth_method=auth_method,
+            nonce=params.get("nonce"),
+            auth_data=auth_data,
+            udp_encap=udp_encap,
+            local_ts=self.p.remote_ts,
+            remote_ts=self.p.local_ts,
+        )
 
         if is_init:
 
         if is_init:
-            ike_crypto = ('AES-CBC', 32) if 'ike-crypto' not in params else\
-                params['ike-crypto']
-            ike_integ = 'HMAC-SHA1-96' if 'ike-integ' not in params else\
-                params['ike-integ']
-            ike_dh = '2048MODPgr' if 'ike-dh' not in params else\
-                params['ike-dh']
-
-            esp_crypto = ('AES-CBC', 32) if 'esp-crypto' not in params else\
-                params['esp-crypto']
-            esp_integ = 'HMAC-SHA1-96' if 'esp-integ' not in params else\
-                params['esp-integ']
+            ike_crypto = (
+                ("AES-CBC", 32) if "ike-crypto" not in params else params["ike-crypto"]
+            )
+            ike_integ = (
+                "HMAC-SHA1-96" if "ike-integ" not in params else params["ike-integ"]
+            )
+            ike_dh = "2048MODPgr" if "ike-dh" not in params else params["ike-dh"]
+
+            esp_crypto = (
+                ("AES-CBC", 32) if "esp-crypto" not in params else params["esp-crypto"]
+            )
+            esp_integ = (
+                "HMAC-SHA1-96" if "esp-integ" not in params else params["esp-integ"]
+            )
 
             self.sa.set_ike_props(
 
             self.sa.set_ike_props(
-                    crypto=ike_crypto[0], crypto_key_len=ike_crypto[1],
-                    integ=ike_integ, prf='PRF_HMAC_SHA2_256', dh=ike_dh)
+                crypto=ike_crypto[0],
+                crypto_key_len=ike_crypto[1],
+                integ=ike_integ,
+                prf="PRF_HMAC_SHA2_256",
+                dh=ike_dh,
+            )
             self.sa.set_esp_props(
             self.sa.set_esp_props(
-                    crypto=esp_crypto[0], crypto_key_len=esp_crypto[1],
-                    integ=esp_integ)
+                crypto=esp_crypto[0], crypto_key_len=esp_crypto[1], integ=esp_integ
+            )
 
 
 class TestApi(VppTestCase):
 
 
 class TestApi(VppTestCase):
-    """ Test IKEV2 API """
+    """Test IKEV2 API"""
+
     @classmethod
     def setUpClass(cls):
         super(TestApi, cls).setUpClass()
     @classmethod
     def setUpClass(cls):
         super(TestApi, cls).setUpClass()
@@ -1501,241 +1653,249 @@ class TestApi(VppTestCase):
         self.assertEqual(len(r), 0)
 
     def configure_profile(self, cfg):
         self.assertEqual(len(r), 0)
 
     def configure_profile(self, cfg):
-        p = Profile(self, cfg['name'])
-        p.add_local_id(id_type=cfg['loc_id'][0], data=cfg['loc_id'][1])
-        p.add_remote_id(id_type=cfg['rem_id'][0], data=cfg['rem_id'][1])
-        p.add_local_ts(**cfg['loc_ts'])
-        p.add_remote_ts(**cfg['rem_ts'])
-        p.add_responder(cfg['responder'])
-        p.add_ike_transforms(cfg['ike_ts'])
-        p.add_esp_transforms(cfg['esp_ts'])
-        p.add_auth(**cfg['auth'])
-        p.set_udp_encap(cfg['udp_encap'])
-        p.set_ipsec_over_udp_port(cfg['ipsec_over_udp_port'])
-        if 'lifetime_data' in cfg:
-            p.set_lifetime_data(cfg['lifetime_data'])
-        if 'tun_itf' in cfg:
-            p.set_tunnel_interface(cfg['tun_itf'])
-        if 'natt_disabled' in cfg and cfg['natt_disabled']:
+        p = Profile(self, cfg["name"])
+        p.add_local_id(id_type=cfg["loc_id"][0], data=cfg["loc_id"][1])
+        p.add_remote_id(id_type=cfg["rem_id"][0], data=cfg["rem_id"][1])
+        p.add_local_ts(**cfg["loc_ts"])
+        p.add_remote_ts(**cfg["rem_ts"])
+        p.add_responder(cfg["responder"])
+        p.add_ike_transforms(cfg["ike_ts"])
+        p.add_esp_transforms(cfg["esp_ts"])
+        p.add_auth(**cfg["auth"])
+        p.set_udp_encap(cfg["udp_encap"])
+        p.set_ipsec_over_udp_port(cfg["ipsec_over_udp_port"])
+        if "lifetime_data" in cfg:
+            p.set_lifetime_data(cfg["lifetime_data"])
+        if "tun_itf" in cfg:
+            p.set_tunnel_interface(cfg["tun_itf"])
+        if "natt_disabled" in cfg and cfg["natt_disabled"]:
             p.disable_natt()
         p.add_vpp_config()
         return p
 
     def test_profile_api(self):
             p.disable_natt()
         p.add_vpp_config()
         return p
 
     def test_profile_api(self):
-        """ test profile dump API """
+        """test profile dump API"""
         loc_ts4 = {
         loc_ts4 = {
-                    'proto': 8,
-                    'start_port': 1,
-                    'end_port': 19,
-                    'start_addr': '3.3.3.2',
-                    'end_addr': '3.3.3.3',
-                }
+            "proto": 8,
+            "start_port": 1,
+            "end_port": 19,
+            "start_addr": "3.3.3.2",
+            "end_addr": "3.3.3.3",
+        }
         rem_ts4 = {
         rem_ts4 = {
-                    'proto': 9,
-                    'start_port': 10,
-                    'end_port': 119,
-                    'start_addr': '4.5.76.80',
-                    'end_addr': '2.3.4.6',
-                }
+            "proto": 9,
+            "start_port": 10,
+            "end_port": 119,
+            "start_addr": "4.5.76.80",
+            "end_addr": "2.3.4.6",
+        }
 
         loc_ts6 = {
 
         loc_ts6 = {
-                    'proto': 8,
-                    'start_port': 1,
-                    'end_port': 19,
-                    'start_addr': 'ab::1',
-                    'end_addr': 'ab::4',
-                }
+            "proto": 8,
+            "start_port": 1,
+            "end_port": 19,
+            "start_addr": "ab::1",
+            "end_addr": "ab::4",
+        }
         rem_ts6 = {
         rem_ts6 = {
-                    'proto': 9,
-                    'start_port': 10,
-                    'end_port': 119,
-                    'start_addr': 'cd::12',
-                    'end_addr': 'cd::13',
-                }
+            "proto": 9,
+            "start_port": 10,
+            "end_port": 119,
+            "start_addr": "cd::12",
+            "end_addr": "cd::13",
+        }
 
         conf = {
 
         conf = {
-            'p1': {
-                'name': 'p1',
-                'natt_disabled': True,
-                'loc_id': ('fqdn', b'vpp.home'),
-                'rem_id': ('fqdn', b'roadwarrior.example.com'),
-                'loc_ts': loc_ts4,
-                'rem_ts': rem_ts4,
-                'responder': {'sw_if_index': 0, 'addr': '5.6.7.8'},
-                'ike_ts': {
-                        'crypto_alg': 20,
-                        'crypto_key_size': 32,
-                        'integ_alg': 0,
-                        'dh_group': 1},
-                'esp_ts': {
-                        'crypto_alg': 13,
-                        'crypto_key_size': 24,
-                        'integ_alg': 2},
-                'auth': {'method': 'shared-key', 'data': b'sharedkeydata'},
-                'udp_encap': True,
-                'ipsec_over_udp_port': 4501,
-                'lifetime_data': {
-                    'lifetime': 123,
-                    'lifetime_maxdata': 20192,
-                    'lifetime_jitter': 9,
-                    'handover': 132},
+            "p1": {
+                "name": "p1",
+                "natt_disabled": True,
+                "loc_id": ("fqdn", b"vpp.home"),
+                "rem_id": ("fqdn", b"roadwarrior.example.com"),
+                "loc_ts": loc_ts4,
+                "rem_ts": rem_ts4,
+                "responder": {"sw_if_index": 0, "addr": "5.6.7.8"},
+                "ike_ts": {
+                    "crypto_alg": 20,
+                    "crypto_key_size": 32,
+                    "integ_alg": 0,
+                    "dh_group": 1,
+                },
+                "esp_ts": {"crypto_alg": 13, "crypto_key_size": 24, "integ_alg": 2},
+                "auth": {"method": "shared-key", "data": b"sharedkeydata"},
+                "udp_encap": True,
+                "ipsec_over_udp_port": 4501,
+                "lifetime_data": {
+                    "lifetime": 123,
+                    "lifetime_maxdata": 20192,
+                    "lifetime_jitter": 9,
+                    "handover": 132,
+                },
+            },
+            "p2": {
+                "name": "p2",
+                "loc_id": ("ip4-addr", b"192.168.2.1"),
+                "rem_id": ("ip6-addr", b"abcd::1"),
+                "loc_ts": loc_ts6,
+                "rem_ts": rem_ts6,
+                "responder": {"sw_if_index": 4, "addr": "def::10"},
+                "ike_ts": {
+                    "crypto_alg": 12,
+                    "crypto_key_size": 16,
+                    "integ_alg": 3,
+                    "dh_group": 3,
+                },
+                "esp_ts": {"crypto_alg": 9, "crypto_key_size": 24, "integ_alg": 4},
+                "auth": {"method": "shared-key", "data": b"sharedkeydata"},
+                "udp_encap": False,
+                "ipsec_over_udp_port": 4600,
+                "tun_itf": 0,
             },
             },
-            'p2': {
-                'name': 'p2',
-                'loc_id': ('ip4-addr', b'192.168.2.1'),
-                'rem_id': ('ip6-addr', b'abcd::1'),
-                'loc_ts': loc_ts6,
-                'rem_ts': rem_ts6,
-                'responder': {'sw_if_index': 4, 'addr': 'def::10'},
-                'ike_ts': {
-                        'crypto_alg': 12,
-                        'crypto_key_size': 16,
-                        'integ_alg': 3,
-                        'dh_group': 3},
-                'esp_ts': {
-                        'crypto_alg': 9,
-                        'crypto_key_size': 24,
-                        'integ_alg': 4},
-                'auth': {'method': 'shared-key', 'data': b'sharedkeydata'},
-                'udp_encap': False,
-                'ipsec_over_udp_port': 4600,
-                'tun_itf': 0}
         }
         }
-        self.p1 = self.configure_profile(conf['p1'])
-        self.p2 = self.configure_profile(conf['p2'])
+        self.p1 = self.configure_profile(conf["p1"])
+        self.p2 = self.configure_profile(conf["p2"])
 
         r = self.vapi.ikev2_profile_dump()
         self.assertEqual(len(r), 2)
 
         r = self.vapi.ikev2_profile_dump()
         self.assertEqual(len(r), 2)
-        self.verify_profile(r[0].profile, conf['p1'])
-        self.verify_profile(r[1].profile, conf['p2'])
+        self.verify_profile(r[0].profile, conf["p1"])
+        self.verify_profile(r[1].profile, conf["p2"])
 
     def verify_id(self, api_id, cfg_id):
         self.assertEqual(api_id.type, IDType.value(cfg_id[0]))
 
     def verify_id(self, api_id, cfg_id):
         self.assertEqual(api_id.type, IDType.value(cfg_id[0]))
-        self.assertEqual(bytes(api_id.data, 'ascii'), cfg_id[1])
+        self.assertEqual(bytes(api_id.data, "ascii"), cfg_id[1])
 
     def verify_ts(self, api_ts, cfg_ts):
 
     def verify_ts(self, api_ts, cfg_ts):
-        self.assertEqual(api_ts.protocol_id, cfg_ts['proto'])
-        self.assertEqual(api_ts.start_port, cfg_ts['start_port'])
-        self.assertEqual(api_ts.end_port, cfg_ts['end_port'])
-        self.assertEqual(api_ts.start_addr,
-                         ip_address(text_type(cfg_ts['start_addr'])))
-        self.assertEqual(api_ts.end_addr,
-                         ip_address(text_type(cfg_ts['end_addr'])))
+        self.assertEqual(api_ts.protocol_id, cfg_ts["proto"])
+        self.assertEqual(api_ts.start_port, cfg_ts["start_port"])
+        self.assertEqual(api_ts.end_port, cfg_ts["end_port"])
+        self.assertEqual(api_ts.start_addr, ip_address(text_type(cfg_ts["start_addr"])))
+        self.assertEqual(api_ts.end_addr, ip_address(text_type(cfg_ts["end_addr"])))
 
     def verify_responder(self, api_r, cfg_r):
 
     def verify_responder(self, api_r, cfg_r):
-        self.assertEqual(api_r.sw_if_index, cfg_r['sw_if_index'])
-        self.assertEqual(api_r.addr, ip_address(cfg_r['addr']))
+        self.assertEqual(api_r.sw_if_index, cfg_r["sw_if_index"])
+        self.assertEqual(api_r.addr, ip_address(cfg_r["addr"]))
 
     def verify_transforms(self, api_ts, cfg_ts):
 
     def verify_transforms(self, api_ts, cfg_ts):
-        self.assertEqual(api_ts.crypto_alg, cfg_ts['crypto_alg'])
-        self.assertEqual(api_ts.crypto_key_size, cfg_ts['crypto_key_size'])
-        self.assertEqual(api_ts.integ_alg, cfg_ts['integ_alg'])
+        self.assertEqual(api_ts.crypto_alg, cfg_ts["crypto_alg"])
+        self.assertEqual(api_ts.crypto_key_size, cfg_ts["crypto_key_size"])
+        self.assertEqual(api_ts.integ_alg, cfg_ts["integ_alg"])
 
     def verify_ike_transforms(self, api_ts, cfg_ts):
         self.verify_transforms(api_ts, cfg_ts)
 
     def verify_ike_transforms(self, api_ts, cfg_ts):
         self.verify_transforms(api_ts, cfg_ts)
-        self.assertEqual(api_ts.dh_group, cfg_ts['dh_group'])
+        self.assertEqual(api_ts.dh_group, cfg_ts["dh_group"])
 
     def verify_esp_transforms(self, api_ts, cfg_ts):
         self.verify_transforms(api_ts, cfg_ts)
 
     def verify_auth(self, api_auth, cfg_auth):
 
     def verify_esp_transforms(self, api_ts, cfg_ts):
         self.verify_transforms(api_ts, cfg_ts)
 
     def verify_auth(self, api_auth, cfg_auth):
-        self.assertEqual(api_auth.method, AuthMethod.value(cfg_auth['method']))
-        self.assertEqual(api_auth.data, cfg_auth['data'])
-        self.assertEqual(api_auth.data_len, len(cfg_auth['data']))
+        self.assertEqual(api_auth.method, AuthMethod.value(cfg_auth["method"]))
+        self.assertEqual(api_auth.data, cfg_auth["data"])
+        self.assertEqual(api_auth.data_len, len(cfg_auth["data"]))
 
     def verify_lifetime_data(self, p, ld):
 
     def verify_lifetime_data(self, p, ld):
-        self.assertEqual(p.lifetime, ld['lifetime'])
-        self.assertEqual(p.lifetime_maxdata, ld['lifetime_maxdata'])
-        self.assertEqual(p.lifetime_jitter, ld['lifetime_jitter'])
-        self.assertEqual(p.handover, ld['handover'])
+        self.assertEqual(p.lifetime, ld["lifetime"])
+        self.assertEqual(p.lifetime_maxdata, ld["lifetime_maxdata"])
+        self.assertEqual(p.lifetime_jitter, ld["lifetime_jitter"])
+        self.assertEqual(p.handover, ld["handover"])
 
     def verify_profile(self, ap, cp):
 
     def verify_profile(self, ap, cp):
-        self.assertEqual(ap.name, cp['name'])
-        self.assertEqual(ap.udp_encap, cp['udp_encap'])
-        self.verify_id(ap.loc_id, cp['loc_id'])
-        self.verify_id(ap.rem_id, cp['rem_id'])
-        self.verify_ts(ap.loc_ts, cp['loc_ts'])
-        self.verify_ts(ap.rem_ts, cp['rem_ts'])
-        self.verify_responder(ap.responder, cp['responder'])
-        self.verify_ike_transforms(ap.ike_ts, cp['ike_ts'])
-        self.verify_esp_transforms(ap.esp_ts, cp['esp_ts'])
-        self.verify_auth(ap.auth, cp['auth'])
-        natt_dis = False if 'natt_disabled' not in cp else cp['natt_disabled']
+        self.assertEqual(ap.name, cp["name"])
+        self.assertEqual(ap.udp_encap, cp["udp_encap"])
+        self.verify_id(ap.loc_id, cp["loc_id"])
+        self.verify_id(ap.rem_id, cp["rem_id"])
+        self.verify_ts(ap.loc_ts, cp["loc_ts"])
+        self.verify_ts(ap.rem_ts, cp["rem_ts"])
+        self.verify_responder(ap.responder, cp["responder"])
+        self.verify_ike_transforms(ap.ike_ts, cp["ike_ts"])
+        self.verify_esp_transforms(ap.esp_ts, cp["esp_ts"])
+        self.verify_auth(ap.auth, cp["auth"])
+        natt_dis = False if "natt_disabled" not in cp else cp["natt_disabled"]
         self.assertTrue(natt_dis == ap.natt_disabled)
 
         self.assertTrue(natt_dis == ap.natt_disabled)
 
-        if 'lifetime_data' in cp:
-            self.verify_lifetime_data(ap, cp['lifetime_data'])
-        self.assertEqual(ap.ipsec_over_udp_port, cp['ipsec_over_udp_port'])
-        if 'tun_itf' in cp:
-            self.assertEqual(ap.tun_itf, cp['tun_itf'])
+        if "lifetime_data" in cp:
+            self.verify_lifetime_data(ap, cp["lifetime_data"])
+        self.assertEqual(ap.ipsec_over_udp_port, cp["ipsec_over_udp_port"])
+        if "tun_itf" in cp:
+            self.assertEqual(ap.tun_itf, cp["tun_itf"])
         else:
         else:
-            self.assertEqual(ap.tun_itf, 0xffffffff)
+            self.assertEqual(ap.tun_itf, 0xFFFFFFFF)
 
 
 @tag_fixme_vpp_workers
 class TestResponderBehindNAT(TemplateResponder, Ikev2Params):
 
 
 @tag_fixme_vpp_workers
 class TestResponderBehindNAT(TemplateResponder, Ikev2Params):
-    """ test responder - responder behind NAT """
+    """test responder - responder behind NAT"""
 
 
-    IKE_NODE_SUFFIX = 'ip4-natt'
+    IKE_NODE_SUFFIX = "ip4-natt"
 
     def config_tc(self):
 
     def config_tc(self):
-        self.config_params({'r_natt': True})
+        self.config_params({"r_natt": True})
 
 
 @tag_fixme_vpp_workers
 class TestInitiatorNATT(TemplateInitiator, Ikev2Params):
 
 
 @tag_fixme_vpp_workers
 class TestInitiatorNATT(TemplateInitiator, Ikev2Params):
-    """ test ikev2 initiator - NAT traversal (intitiator behind NAT) """
+    """test ikev2 initiator - NAT traversal (intitiator behind NAT)"""
 
     def config_tc(self):
 
     def config_tc(self):
-        self.config_params({
-            'i_natt': True,
-            'is_initiator': False,  # seen from test case perspective
-                                    # thus vpp is initiator
-            'responder': {'sw_if_index': self.pg0.sw_if_index,
-                           'addr': self.pg0.remote_ip4},
-            'ike-crypto': ('AES-GCM-16ICV', 32),
-            'ike-integ': 'NULL',
-            'ike-dh': '3072MODPgr',
-            'ike_transforms': {
-                'crypto_alg': 20,  # "aes-gcm-16"
-                'crypto_key_size': 256,
-                'dh_group': 15,  # "modp-3072"
-            },
-            'esp_transforms': {
-                'crypto_alg': 12,  # "aes-cbc"
-                'crypto_key_size': 256,
-                # "hmac-sha2-256-128"
-                'integ_alg': 12}})
+        self.config_params(
+            {
+                "i_natt": True,
+                "is_initiator": False,  # seen from test case perspective
+                # thus vpp is initiator
+                "responder": {
+                    "sw_if_index": self.pg0.sw_if_index,
+                    "addr": self.pg0.remote_ip4,
+                },
+                "ike-crypto": ("AES-GCM-16ICV", 32),
+                "ike-integ": "NULL",
+                "ike-dh": "3072MODPgr",
+                "ike_transforms": {
+                    "crypto_alg": 20,  # "aes-gcm-16"
+                    "crypto_key_size": 256,
+                    "dh_group": 15,  # "modp-3072"
+                },
+                "esp_transforms": {
+                    "crypto_alg": 12,  # "aes-cbc"
+                    "crypto_key_size": 256,
+                    # "hmac-sha2-256-128"
+                    "integ_alg": 12,
+                },
+            }
+        )
 
 
 @tag_fixme_vpp_workers
 class TestInitiatorPsk(TemplateInitiator, Ikev2Params):
 
 
 @tag_fixme_vpp_workers
 class TestInitiatorPsk(TemplateInitiator, Ikev2Params):
-    """ test ikev2 initiator - pre shared key auth """
+    """test ikev2 initiator - pre shared key auth"""
 
     def config_tc(self):
 
     def config_tc(self):
-        self.config_params({
-            'is_initiator': False,  # seen from test case perspective
-                                    # thus vpp is initiator
-            'ike-crypto': ('AES-GCM-16ICV', 32),
-            'ike-integ': 'NULL',
-            'ike-dh': '3072MODPgr',
-            'ike_transforms': {
-                'crypto_alg': 20,  # "aes-gcm-16"
-                'crypto_key_size': 256,
-                'dh_group': 15,  # "modp-3072"
-            },
-            'esp_transforms': {
-                'crypto_alg': 12,  # "aes-cbc"
-                'crypto_key_size': 256,
-                # "hmac-sha2-256-128"
-                'integ_alg': 12},
-            'responder_hostname': {'hostname': 'vpp.responder.org',
-                                   'sw_if_index': self.pg0.sw_if_index}})
+        self.config_params(
+            {
+                "is_initiator": False,  # seen from test case perspective
+                # thus vpp is initiator
+                "ike-crypto": ("AES-GCM-16ICV", 32),
+                "ike-integ": "NULL",
+                "ike-dh": "3072MODPgr",
+                "ike_transforms": {
+                    "crypto_alg": 20,  # "aes-gcm-16"
+                    "crypto_key_size": 256,
+                    "dh_group": 15,  # "modp-3072"
+                },
+                "esp_transforms": {
+                    "crypto_alg": 12,  # "aes-cbc"
+                    "crypto_key_size": 256,
+                    # "hmac-sha2-256-128"
+                    "integ_alg": 12,
+                },
+                "responder_hostname": {
+                    "hostname": "vpp.responder.org",
+                    "sw_if_index": self.pg0.sw_if_index,
+                },
+            }
+        )
 
 
 @tag_fixme_vpp_workers
 class TestInitiatorRequestWindowSize(TestInitiatorPsk):
 
 
 @tag_fixme_vpp_workers
 class TestInitiatorRequestWindowSize(TestInitiatorPsk):
-    """ test initiator - request window size (1) """
+    """test initiator - request window size (1)"""
 
     def rekey_respond(self, req, update_child_sa_data):
         ih = self.get_ike_header(req)
 
     def rekey_respond(self, req, update_child_sa_data):
         ih = self.get_ike_header(req)
@@ -1749,19 +1909,25 @@ class TestInitiatorRequestWindowSize(TestInitiatorPsk):
             self.sa.child_sas[0].rspi = prop.SPI
             self.sa.calc_child_keys()
 
             self.sa.child_sas[0].rspi = prop.SPI
             self.sa.calc_child_keys()
 
-        header = ikev2.IKEv2(init_SPI=self.sa.ispi, resp_SPI=self.sa.rspi,
-                             flags='Response', exch_type=36,
-                             id=ih.id, next_payload='Encrypted')
-        resp = self.encrypt_ike_msg(header, sa, 'SA')
-        packet = self.create_packet(self.pg0, resp, self.sa.sport,
-                                    self.sa.dport, self.sa.natt, self.ip6)
+        header = ikev2.IKEv2(
+            init_SPI=self.sa.ispi,
+            resp_SPI=self.sa.rspi,
+            flags="Response",
+            exch_type=36,
+            id=ih.id,
+            next_payload="Encrypted",
+        )
+        resp = self.encrypt_ike_msg(header, sa, "SA")
+        packet = self.create_packet(
+            self.pg0, resp, self.sa.sport, self.sa.dport, self.sa.natt, self.ip6
+        )
         self.send_and_assert_no_replies(self.pg0, packet)
 
     def test_initiator(self):
         super(TestInitiatorRequestWindowSize, self).test_initiator()
         self.pg0.enable_capture()
         self.pg_start()
         self.send_and_assert_no_replies(self.pg0, packet)
 
     def test_initiator(self):
         super(TestInitiatorRequestWindowSize, self).test_initiator()
         self.pg0.enable_capture()
         self.pg_start()
-        ispi = int.from_bytes(self.sa.child_sas[0].ispi, 'little')
+        ispi = int.from_bytes(self.sa.child_sas[0].ispi, "little")
         self.vapi.ikev2_initiate_rekey_child_sa(ispi=ispi)
         self.vapi.ikev2_initiate_rekey_child_sa(ispi=ispi)
         capture = self.pg0.get_capture(2)
         self.vapi.ikev2_initiate_rekey_child_sa(ispi=ispi)
         self.vapi.ikev2_initiate_rekey_child_sa(ispi=ispi)
         capture = self.pg0.get_capture(2)
@@ -1777,18 +1943,18 @@ class TestInitiatorRequestWindowSize(TestInitiatorPsk):
 
 @tag_fixme_vpp_workers
 class TestInitiatorRekey(TestInitiatorPsk):
 
 @tag_fixme_vpp_workers
 class TestInitiatorRekey(TestInitiatorPsk):
-    """ test ikev2 initiator - rekey """
+    """test ikev2 initiator - rekey"""
 
     def rekey_from_initiator(self):
 
     def rekey_from_initiator(self):
-        ispi = int.from_bytes(self.sa.child_sas[0].ispi, 'little')
+        ispi = int.from_bytes(self.sa.child_sas[0].ispi, "little")
         self.pg0.enable_capture()
         self.pg_start()
         self.vapi.ikev2_initiate_rekey_child_sa(ispi=ispi)
         capture = self.pg0.get_capture(1)
         ih = self.get_ike_header(capture[0])
         self.assertEqual(ih.exch_type, 36)  # CHILD_SA
         self.pg0.enable_capture()
         self.pg_start()
         self.vapi.ikev2_initiate_rekey_child_sa(ispi=ispi)
         capture = self.pg0.get_capture(1)
         ih = self.get_ike_header(capture[0])
         self.assertEqual(ih.exch_type, 36)  # CHILD_SA
-        self.assertNotIn('Response', ih.flags)
-        self.assertIn('Initiator', ih.flags)
+        self.assertNotIn("Response", ih.flags)
+        self.assertIn("Initiator", ih.flags)
         plain = self.sa.hmac_and_decrypt(ih)
         sa = ikev2.IKEv2_payload_SA(plain)
         prop = sa[ikev2.IKEv2_payload_Proposal]
         plain = self.sa.hmac_and_decrypt(ih)
         sa = ikev2.IKEv2_payload_SA(plain)
         prop = sa[ikev2.IKEv2_payload_Proposal]
@@ -1798,12 +1964,18 @@ class TestInitiatorRekey(TestInitiatorPsk):
         self.sa.child_sas[0].ispi = prop.SPI
         self.sa.child_sas[0].rspi = prop.SPI
         self.sa.calc_child_keys()
         self.sa.child_sas[0].ispi = prop.SPI
         self.sa.child_sas[0].rspi = prop.SPI
         self.sa.calc_child_keys()
-        header = ikev2.IKEv2(init_SPI=self.sa.ispi, resp_SPI=self.sa.rspi,
-                             flags='Response', exch_type=36,
-                             id=ih.id, next_payload='Encrypted')
-        resp = self.encrypt_ike_msg(header, sa, 'SA')
-        packet = self.create_packet(self.pg0, resp, self.sa.sport,
-                                    self.sa.dport, self.sa.natt, self.ip6)
+        header = ikev2.IKEv2(
+            init_SPI=self.sa.ispi,
+            resp_SPI=self.sa.rspi,
+            flags="Response",
+            exch_type=36,
+            id=ih.id,
+            next_payload="Encrypted",
+        )
+        resp = self.encrypt_ike_msg(header, sa, "SA")
+        packet = self.create_packet(
+            self.pg0, resp, self.sa.sport, self.sa.dport, self.sa.natt, self.ip6
+        )
         self.send_and_assert_no_replies(self.pg0, packet)
 
     def test_initiator(self):
         self.send_and_assert_no_replies(self.pg0, packet)
 
     def test_initiator(self):
@@ -1815,45 +1987,51 @@ class TestInitiatorRekey(TestInitiatorPsk):
 
 @tag_fixme_vpp_workers
 class TestInitiatorDelSAFromResponder(TemplateInitiator, Ikev2Params):
 
 @tag_fixme_vpp_workers
 class TestInitiatorDelSAFromResponder(TemplateInitiator, Ikev2Params):
-    """ test ikev2 initiator - delete IKE SA from responder """
+    """test ikev2 initiator - delete IKE SA from responder"""
 
     def config_tc(self):
 
     def config_tc(self):
-        self.config_params({
-            'del_sa_from_responder': True,
-            'is_initiator': False,  # seen from test case perspective
-                                    # thus vpp is initiator
-            'responder': {'sw_if_index': self.pg0.sw_if_index,
-                           'addr': self.pg0.remote_ip4},
-            'ike-crypto': ('AES-GCM-16ICV', 32),
-            'ike-integ': 'NULL',
-            'ike-dh': '3072MODPgr',
-            'ike_transforms': {
-                'crypto_alg': 20,  # "aes-gcm-16"
-                'crypto_key_size': 256,
-                'dh_group': 15,  # "modp-3072"
-            },
-            'esp_transforms': {
-                'crypto_alg': 12,  # "aes-cbc"
-                'crypto_key_size': 256,
-                # "hmac-sha2-256-128"
-                'integ_alg': 12},
-            'no_idr_in_auth': True})
+        self.config_params(
+            {
+                "del_sa_from_responder": True,
+                "is_initiator": False,  # seen from test case perspective
+                # thus vpp is initiator
+                "responder": {
+                    "sw_if_index": self.pg0.sw_if_index,
+                    "addr": self.pg0.remote_ip4,
+                },
+                "ike-crypto": ("AES-GCM-16ICV", 32),
+                "ike-integ": "NULL",
+                "ike-dh": "3072MODPgr",
+                "ike_transforms": {
+                    "crypto_alg": 20,  # "aes-gcm-16"
+                    "crypto_key_size": 256,
+                    "dh_group": 15,  # "modp-3072"
+                },
+                "esp_transforms": {
+                    "crypto_alg": 12,  # "aes-cbc"
+                    "crypto_key_size": 256,
+                    # "hmac-sha2-256-128"
+                    "integ_alg": 12,
+                },
+                "no_idr_in_auth": True,
+            }
+        )
 
 
 @tag_fixme_vpp_workers
 class TestResponderInitBehindNATT(TemplateResponder, Ikev2Params):
 
 
 @tag_fixme_vpp_workers
 class TestResponderInitBehindNATT(TemplateResponder, Ikev2Params):
-    """ test ikev2 responder - initiator behind NAT """
+    """test ikev2 responder - initiator behind NAT"""
 
 
-    IKE_NODE_SUFFIX = 'ip4-natt'
+    IKE_NODE_SUFFIX = "ip4-natt"
 
     def config_tc(self):
 
     def config_tc(self):
-        self.config_params(
-                {'i_natt': True})
+        self.config_params({"i_natt": True})
 
 
 @tag_fixme_vpp_workers
 class TestResponderPsk(TemplateResponder, Ikev2Params):
 
 
 @tag_fixme_vpp_workers
 class TestResponderPsk(TemplateResponder, Ikev2Params):
-    """ test ikev2 responder - pre shared key auth """
+    """test ikev2 responder - pre shared key auth"""
+
     def config_tc(self):
         self.config_params()
 
     def config_tc(self):
         self.config_params()
 
@@ -1863,8 +2041,9 @@ class TestResponderDpd(TestResponderPsk):
     """
     Dead peer detection test
     """
     """
     Dead peer detection test
     """
+
     def config_tc(self):
     def config_tc(self):
-        self.config_params({'dpd_disabled': False})
+        self.config_params({"dpd_disabled": False})
 
     def tearDown(self):
         pass
 
     def tearDown(self):
         pass
@@ -1879,7 +2058,7 @@ class TestResponderDpd(TestResponderPsk):
         ih = self.get_ike_header(capture[0])
         self.assertEqual(ih.exch_type, 37)  # INFORMATIONAL
         plain = self.sa.hmac_and_decrypt(ih)
         ih = self.get_ike_header(capture[0])
         self.assertEqual(ih.exch_type, 37)  # INFORMATIONAL
         plain = self.sa.hmac_and_decrypt(ih)
-        self.assertEqual(plain, b'')
+        self.assertEqual(plain, b"")
         # wait for SA expiration
         time.sleep(3)
         ike_sas = self.vapi.ikev2_sa_dump()
         # wait for SA expiration
         time.sleep(3)
         ike_sas = self.vapi.ikev2_sa_dump()
@@ -1890,7 +2069,7 @@ class TestResponderDpd(TestResponderPsk):
 
 @tag_fixme_vpp_workers
 class TestResponderRekey(TestResponderPsk):
 
 @tag_fixme_vpp_workers
 class TestResponderRekey(TestResponderPsk):
-    """ test ikev2 responder - rekey """
+    """test ikev2 responder - rekey"""
 
     def rekey_from_initiator(self):
         packet = self.create_rekey_request()
 
     def rekey_from_initiator(self):
         packet = self.create_rekey_request()
@@ -1912,18 +2091,19 @@ class TestResponderRekey(TestResponderPsk):
         self.sa.calc_child_keys()
         self.verify_ike_sas()
         self.verify_ipsec_sas(is_rekey=True)
         self.sa.calc_child_keys()
         self.verify_ike_sas()
         self.verify_ipsec_sas(is_rekey=True)
-        self.assert_counter(1, 'rekey_req', 'ip4')
+        self.assert_counter(1, "rekey_req", "ip4")
         r = self.vapi.ikev2_sa_dump()
         self.assertEqual(r[0].sa.stats.n_rekey_req, 1)
 
 
 class TestResponderVrf(TestResponderPsk, Ikev2Params):
         r = self.vapi.ikev2_sa_dump()
         self.assertEqual(r[0].sa.stats.n_rekey_req, 1)
 
 
 class TestResponderVrf(TestResponderPsk, Ikev2Params):
-    """ test ikev2 responder - non-default table id """
+    """test ikev2 responder - non-default table id"""
 
     @classmethod
     def setUpClass(cls):
         import scapy.contrib.ikev2 as _ikev2
 
     @classmethod
     def setUpClass(cls):
         import scapy.contrib.ikev2 as _ikev2
-        globals()['ikev2'] = _ikev2
+
+        globals()["ikev2"] = _ikev2
         super(IkePeer, cls).setUpClass()
         cls.create_pg_interfaces(range(1))
         cls.vapi.cli("ip table add 1")
         super(IkePeer, cls).setUpClass()
         cls.create_pg_interfaces(range(1))
         cls.vapi.cli("ip table add 1")
@@ -1936,7 +2116,7 @@ class TestResponderVrf(TestResponderPsk, Ikev2Params):
             i.resolve_ndp()
 
     def config_tc(self):
             i.resolve_ndp()
 
     def config_tc(self):
-        self.config_params({'dpd_disabled': False})
+        self.config_params({"dpd_disabled": False})
 
     def test_responder(self):
         self.vapi.ikev2_profile_set_liveness(period=2, max_retries=1)
 
     def test_responder(self):
         self.vapi.ikev2_profile_set_liveness(period=2, max_retries=1)
@@ -1947,53 +2127,67 @@ class TestResponderVrf(TestResponderPsk, Ikev2Params):
         ih = self.get_ike_header(capture[0])
         self.assertEqual(ih.exch_type, 37)  # INFORMATIONAL
         plain = self.sa.hmac_and_decrypt(ih)
         ih = self.get_ike_header(capture[0])
         self.assertEqual(ih.exch_type, 37)  # INFORMATIONAL
         plain = self.sa.hmac_and_decrypt(ih)
-        self.assertEqual(plain, b'')
+        self.assertEqual(plain, b"")
 
 
 @tag_fixme_vpp_workers
 class TestResponderRsaSign(TemplateResponder, Ikev2Params):
 
 
 @tag_fixme_vpp_workers
 class TestResponderRsaSign(TemplateResponder, Ikev2Params):
-    """ test ikev2 responder - cert based auth """
+    """test ikev2 responder - cert based auth"""
+
     def config_tc(self):
     def config_tc(self):
-        self.config_params({
-            'udp_encap': True,
-            'auth': 'rsa-sig',
-            'server-key': 'server-key.pem',
-            'client-key': 'client-key.pem',
-            'client-cert': 'client-cert.pem',
-            'server-cert': 'server-cert.pem'})
+        self.config_params(
+            {
+                "udp_encap": True,
+                "auth": "rsa-sig",
+                "server-key": "server-key.pem",
+                "client-key": "client-key.pem",
+                "client-cert": "client-cert.pem",
+                "server-cert": "server-cert.pem",
+            }
+        )
 
 
 @tag_fixme_vpp_workers
 
 
 @tag_fixme_vpp_workers
-class Test_IKE_AES_CBC_128_SHA256_128_MODP2048_ESP_AES_CBC_192_SHA_384_192\
-        (TemplateResponder, Ikev2Params):
+class Test_IKE_AES_CBC_128_SHA256_128_MODP2048_ESP_AES_CBC_192_SHA_384_192(
+    TemplateResponder, Ikev2Params
+):
     """
     IKE:AES_CBC_128_SHA256_128,DH=modp2048 ESP:AES_CBC_192_SHA_384_192
     """
     """
     IKE:AES_CBC_128_SHA256_128,DH=modp2048 ESP:AES_CBC_192_SHA_384_192
     """
+
     def config_tc(self):
     def config_tc(self):
-        self.config_params({
-            'ike-crypto': ('AES-CBC', 16),
-            'ike-integ': 'SHA2-256-128',
-            'esp-crypto': ('AES-CBC', 24),
-            'esp-integ': 'SHA2-384-192',
-            'ike-dh': '2048MODPgr',
-            'nonce': os.urandom(256),
-            'no_idr_in_auth': True})
+        self.config_params(
+            {
+                "ike-crypto": ("AES-CBC", 16),
+                "ike-integ": "SHA2-256-128",
+                "esp-crypto": ("AES-CBC", 24),
+                "esp-integ": "SHA2-384-192",
+                "ike-dh": "2048MODPgr",
+                "nonce": os.urandom(256),
+                "no_idr_in_auth": True,
+            }
+        )
 
 
 @tag_fixme_vpp_workers
 
 
 @tag_fixme_vpp_workers
-class TestAES_CBC_128_SHA256_128_MODP3072_ESP_AES_GCM_16\
-        (TemplateResponder, Ikev2Params):
+class TestAES_CBC_128_SHA256_128_MODP3072_ESP_AES_GCM_16(
+    TemplateResponder, Ikev2Params
+):
 
     """
     IKE:AES_CBC_128_SHA256_128,DH=modp3072 ESP:AES_GCM_16
     """
 
     """
     IKE:AES_CBC_128_SHA256_128,DH=modp3072 ESP:AES_GCM_16
     """
+
     def config_tc(self):
     def config_tc(self):
-        self.config_params({
-            'ike-crypto': ('AES-CBC', 32),
-            'ike-integ': 'SHA2-256-128',
-            'esp-crypto': ('AES-GCM-16ICV', 32),
-            'esp-integ': 'NULL',
-            'ike-dh': '3072MODPgr'})
+        self.config_params(
+            {
+                "ike-crypto": ("AES-CBC", 32),
+                "ike-integ": "SHA2-256-128",
+                "esp-crypto": ("AES-GCM-16ICV", 32),
+                "esp-integ": "NULL",
+                "ike-dh": "3072MODPgr",
+            }
+        )
 
 
 @tag_fixme_vpp_workers
 
 
 @tag_fixme_vpp_workers
@@ -2002,20 +2196,21 @@ class Test_IKE_AES_GCM_16_256(TemplateResponder, Ikev2Params):
     IKE:AES_GCM_16_256
     """
 
     IKE:AES_GCM_16_256
     """
 
-    IKE_NODE_SUFFIX = 'ip6'
+    IKE_NODE_SUFFIX = "ip6"
 
     def config_tc(self):
 
     def config_tc(self):
-        self.config_params({
-            'del_sa_from_responder': True,
-            'ip6': True,
-            'natt': True,
-            'ike-crypto': ('AES-GCM-16ICV', 32),
-            'ike-integ': 'NULL',
-            'ike-dh': '2048MODPgr',
-            'loc_ts': {'start_addr': 'ab:cd::0',
-                       'end_addr': 'ab:cd::10'},
-            'rem_ts': {'start_addr': '11::0',
-                       'end_addr': '11::100'}})
+        self.config_params(
+            {
+                "del_sa_from_responder": True,
+                "ip6": True,
+                "natt": True,
+                "ike-crypto": ("AES-GCM-16ICV", 32),
+                "ike-integ": "NULL",
+                "ike-dh": "2048MODPgr",
+                "loc_ts": {"start_addr": "ab:cd::0", "end_addr": "ab:cd::10"},
+                "rem_ts": {"start_addr": "11::0", "end_addr": "11::100"},
+            }
+        )
 
 
 @tag_fixme_vpp_workers
 
 
 @tag_fixme_vpp_workers
@@ -2033,8 +2228,8 @@ class TestInitiatorKeepaliveMsg(TestInitiatorPsk):
         ih = self.get_ike_header(capture[0])
         self.assertEqual(ih.id, self.sa.msg_id)
         plain = self.sa.hmac_and_decrypt(ih)
         ih = self.get_ike_header(capture[0])
         self.assertEqual(ih.id, self.sa.msg_id)
         plain = self.sa.hmac_and_decrypt(ih)
-        self.assertEqual(plain, b'')
-        self.assert_counter(1, 'keepalive', 'ip4')
+        self.assertEqual(plain, b"")
+        self.assert_counter(1, "keepalive", "ip4")
         r = self.vapi.ikev2_sa_dump()
         self.assertEqual(1, r[0].sa.stats.n_keepalives)
 
         r = self.vapi.ikev2_sa_dump()
         self.assertEqual(1, r[0].sa.stats.n_keepalives)
 
@@ -2044,7 +2239,7 @@ class TestInitiatorKeepaliveMsg(TestInitiatorPsk):
 
 
 class TestMalformedMessages(TemplateResponder, Ikev2Params):
 
 
 class TestMalformedMessages(TemplateResponder, Ikev2Params):
-    """ malformed packet test """
+    """malformed packet test"""
 
     def tearDown(self):
         pass
 
     def tearDown(self):
         pass
@@ -2053,23 +2248,26 @@ class TestMalformedMessages(TemplateResponder, Ikev2Params):
         self.config_params()
 
     def create_ike_init_msg(self, length=None, payload=None):
         self.config_params()
 
     def create_ike_init_msg(self, length=None, payload=None):
-        msg = ikev2.IKEv2(length=length, init_SPI='\x11' * 8,
-                          flags='Initiator', exch_type='IKE_SA_INIT')
+        msg = ikev2.IKEv2(
+            length=length,
+            init_SPI="\x11" * 8,
+            flags="Initiator",
+            exch_type="IKE_SA_INIT",
+        )
         if payload is not None:
             msg /= payload
         if payload is not None:
             msg /= payload
-        return self.create_packet(self.pg0, msg, self.sa.sport,
-                                  self.sa.dport)
+        return self.create_packet(self.pg0, msg, self.sa.sport, self.sa.dport)
 
     def verify_bad_packet_length(self):
 
     def verify_bad_packet_length(self):
-        ike_msg = self.create_ike_init_msg(length=0xdead)
+        ike_msg = self.create_ike_init_msg(length=0xDEAD)
         self.send_and_assert_no_replies(self.pg0, ike_msg * self.pkt_count)
         self.send_and_assert_no_replies(self.pg0, ike_msg * self.pkt_count)
-        self.assert_counter(self.pkt_count, 'bad_length')
+        self.assert_counter(self.pkt_count, "bad_length")
 
     def verify_bad_sa_payload_length(self):
 
     def verify_bad_sa_payload_length(self):
-        p = ikev2.IKEv2_payload_SA(length=0xdead)
+        p = ikev2.IKEv2_payload_SA(length=0xDEAD)
         ike_msg = self.create_ike_init_msg(payload=p)
         self.send_and_assert_no_replies(self.pg0, ike_msg * self.pkt_count)
         ike_msg = self.create_ike_init_msg(payload=p)
         self.send_and_assert_no_replies(self.pg0, ike_msg * self.pkt_count)
-        self.assert_counter(self.pkt_count, 'malformed_packet')
+        self.assert_counter(self.pkt_count, "malformed_packet")
 
     def test_responder(self):
         self.pkt_count = 254
 
     def test_responder(self):
         self.pkt_count = 254
@@ -2077,5 +2275,5 @@ class TestMalformedMessages(TemplateResponder, Ikev2Params):
         self.verify_bad_sa_payload_length()
 
 
         self.verify_bad_sa_payload_length()
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index 2f08f33..c79999b 100644 (file)
@@ -20,9 +20,7 @@ from framework import VppTestCase, VppTestRunner
 
 
 class TestLoopbackInterfaceCRUD(VppTestCase):
 
 
 class TestLoopbackInterfaceCRUD(VppTestCase):
-    """CRUD Loopback
-
-    """
+    """CRUD Loopback"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -51,9 +49,11 @@ class TestLoopbackInterfaceCRUD(VppTestCase):
         """
         pkts = []
         for i in dst_ifs:
         """
         pkts = []
         for i in dst_ifs:
-            p = (Ether(dst=src_if.local_mac, src=src_if.remote_mac) /
-                 IP(src=src_if.remote_ip4, dst=i.local_ip4) /
-                 ICMP(id=i.sw_if_index, type='echo-request'))
+            p = (
+                Ether(dst=src_if.local_mac, src=src_if.remote_mac)
+                / IP(src=src_if.remote_ip4, dst=i.local_ip4)
+                / ICMP(id=i.sw_if_index, type="echo-request")
+            )
             pkts.append(p)
         return pkts
 
             pkts.append(p)
         return pkts
 
@@ -88,15 +88,17 @@ class TestLoopbackInterfaceCRUD(VppTestCase):
             i.config_ip4().admin_up()
 
         # read (check sw if dump, ip4 fib, ip6 fib)
             i.config_ip4().admin_up()
 
         # read (check sw if dump, ip4 fib, ip6 fib)
-        if_dump = self.vapi.sw_interface_dump(name_filter_valid=True,
-                                              name_filter='loop')
+        if_dump = self.vapi.sw_interface_dump(
+            name_filter_valid=True, name_filter="loop"
+        )
         fib4_dump = self.vapi.ip_route_dump(0)
         for i in loopbacks:
             self.assertTrue(i.is_interface_config_in_dump(if_dump))
             self.assertTrue(i.is_ip4_entry_in_fib_dump(fib4_dump))
 
         fib4_dump = self.vapi.ip_route_dump(0)
         for i in loopbacks:
             self.assertTrue(i.is_interface_config_in_dump(if_dump))
             self.assertTrue(i.is_ip4_entry_in_fib_dump(fib4_dump))
 
-        if_dump = self.vapi.sw_interface_dump(name_filter_valid=True,
-                                              name_filter='loopXYZ')
+        if_dump = self.vapi.sw_interface_dump(
+            name_filter_valid=True, name_filter="loopXYZ"
+        )
         self.assertEqual(len(if_dump), 0)
 
         # check ping
         self.assertEqual(len(if_dump), 0)
 
         # check ping
@@ -160,31 +162,29 @@ class TestInterfaceDumpApiLocalOnly(VppTestCase):
         self.assertEqual(rv[0].sw_if_index, 0)
 
     def test_sw_if_index_twiddle0(self):
         self.assertEqual(rv[0].sw_if_index, 0)
 
     def test_sw_if_index_twiddle0(self):
-        rv = self.vapi.sw_interface_dump(sw_if_index=0xffffffff)
+        rv = self.vapi.sw_interface_dump(sw_if_index=0xFFFFFFFF)
         self.assertEqual(rv[0].sw_if_index, 0)
 
     def test_sw_if_index_1_not_existing(self):
         rv = self.vapi.sw_interface_dump(sw_if_index=1)
         self.assertEqual(rv[0].sw_if_index, 0)
 
     def test_sw_if_index_1_not_existing(self):
         rv = self.vapi.sw_interface_dump(sw_if_index=1)
-        self.assertEqual(len(rv), 0, 'expected no records.')
+        self.assertEqual(len(rv), 0, "expected no records.")
 
 
 class TestInterfaceDumpApi(VppTestCase):
     """test_interface_crud.TestInterfaceDumpApi"""
 
     def test_sw_if_index_1(self):
 
 
 class TestInterfaceDumpApi(VppTestCase):
     """test_interface_crud.TestInterfaceDumpApi"""
 
     def test_sw_if_index_1(self):
-        self.vapi.create_loopback_instance(is_specified=1,
-                                           user_instance=10)
-        self.vapi.create_loopback_instance(is_specified=1,
-                                           user_instance=5)
+        self.vapi.create_loopback_instance(is_specified=1, user_instance=10)
+        self.vapi.create_loopback_instance(is_specified=1, user_instance=5)
 
         # Can I get back the specified record?
         rv = self.vapi.sw_interface_dump(sw_if_index=1)
         self.assertEqual(rv[0].sw_if_index, 1, rv)
 
         # verify 3 interfaces
 
         # Can I get back the specified record?
         rv = self.vapi.sw_interface_dump(sw_if_index=1)
         self.assertEqual(rv[0].sw_if_index, 1, rv)
 
         # verify 3 interfaces
-        rv = self.vapi.sw_interface_dump(sw_if_index=0xffffffff)
-        self.assertEqual(len(rv), 3, 'Expected 3 interfaces.')
+        rv = self.vapi.sw_interface_dump(sw_if_index=0xFFFFFFFF)
+        self.assertEqual(len(rv), 3, "Expected 3 interfaces.")
 
 
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index 3a48274..9079e54 100644 (file)
@@ -15,10 +15,20 @@ from six import moves
 from framework import tag_fixme_vpp_workers
 from framework import VppTestCase, VppTestRunner
 from util import ppp
 from framework import tag_fixme_vpp_workers
 from framework import VppTestCase, VppTestRunner
 from util import ppp
-from vpp_ip_route import VppIpRoute, VppRoutePath, VppIpMRoute, \
-    VppMRoutePath, VppMplsIpBind, \
-    VppMplsTable, VppIpTable, FibPathType, find_route, \
-    VppIpInterfaceAddress, find_route_in_dump, find_mroute_in_dump
+from vpp_ip_route import (
+    VppIpRoute,
+    VppRoutePath,
+    VppIpMRoute,
+    VppMRoutePath,
+    VppMplsIpBind,
+    VppMplsTable,
+    VppIpTable,
+    FibPathType,
+    find_route,
+    VppIpInterfaceAddress,
+    find_route_in_dump,
+    find_mroute_in_dump,
+)
 from vpp_ip import VppIpPuntPolicer, VppIpPuntRedirect, VppIpPathMtu
 from vpp_sub_interface import VppSubInterface, VppDot1QSubint, VppDot1ADSubint
 from vpp_papi import vpp_papi, VppEnum
 from vpp_ip import VppIpPuntPolicer, VppIpPuntRedirect, VppIpPathMtu
 from vpp_sub_interface import VppSubInterface, VppDot1QSubint, VppDot1ADSubint
 from vpp_papi import vpp_papi, VppEnum
@@ -30,7 +40,7 @@ NUM_PKTS = 67
 
 
 class TestIPv4(VppTestCase):
 
 
 class TestIPv4(VppTestCase):
-    """ IPv4 Test Case """
+    """IPv4 Test Case"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -66,7 +76,8 @@ class TestIPv4(VppTestCase):
         # create 2 subinterfaces for pg1 and pg2
         self.sub_interfaces = [
             VppDot1QSubint(self, self.pg1, 100),
         # create 2 subinterfaces for pg1 and pg2
         self.sub_interfaces = [
             VppDot1QSubint(self, self.pg1, 100),
-            VppDot1ADSubint(self, self.pg2, 200, 300, 400)]
+            VppDot1ADSubint(self, self.pg2, 200, 300, 400),
+        ]
 
         # packet flows mapping pg0 -> pg1.sub, pg2.sub, etc.
         self.flows = dict()
 
         # packet flows mapping pg0 -> pg1.sub, pg2.sub, etc.
         self.flows = dict()
@@ -108,7 +119,7 @@ class TestIPv4(VppTestCase):
         dst_if = self.flows[src_if][dst_if_idx]
         info = self.create_packet_info(src_if, dst_if)
         payload = self.info_to_payload(info)
         dst_if = self.flows[src_if][dst_if_idx]
         info = self.create_packet_info(src_if, dst_if)
         payload = self.info_to_payload(info)
-        p = pkt/Raw(payload)
+        p = pkt / Raw(payload)
         p[IP].dst = dst_if.remote_ip4
         info.data = p.copy()
         if isinstance(src_if, VppSubInterface):
         p[IP].dst = dst_if.remote_ip4
         info.data = p.copy()
         if isinstance(src_if, VppSubInterface):
@@ -123,17 +134,26 @@ class TestIPv4(VppTestCase):
         :param VppInterface src_if: Interface to create packet stream for.
         """
         hdr_ext = 4 if isinstance(src_if, VppSubInterface) else 0
         :param VppInterface src_if: Interface to create packet stream for.
         """
         hdr_ext = 4 if isinstance(src_if, VppSubInterface) else 0
-        pkt_tmpl = (Ether(dst=src_if.local_mac, src=src_if.remote_mac) /
-                    IP(src=src_if.remote_ip4) /
-                    UDP(sport=1234, dport=1234))
-
-        pkts = [self.modify_packet(src_if, i, pkt_tmpl)
-                for i in moves.range(self.pg_if_packet_sizes[0],
-                                     self.pg_if_packet_sizes[1], 10)]
-        pkts_b = [self.modify_packet(src_if, i, pkt_tmpl)
-                  for i in moves.range(self.pg_if_packet_sizes[1] + hdr_ext,
-                                       self.pg_if_packet_sizes[2] + hdr_ext,
-                                       50)]
+        pkt_tmpl = (
+            Ether(dst=src_if.local_mac, src=src_if.remote_mac)
+            / IP(src=src_if.remote_ip4)
+            / UDP(sport=1234, dport=1234)
+        )
+
+        pkts = [
+            self.modify_packet(src_if, i, pkt_tmpl)
+            for i in moves.range(
+                self.pg_if_packet_sizes[0], self.pg_if_packet_sizes[1], 10
+            )
+        ]
+        pkts_b = [
+            self.modify_packet(src_if, i, pkt_tmpl)
+            for i in moves.range(
+                self.pg_if_packet_sizes[1] + hdr_ext,
+                self.pg_if_packet_sizes[2] + hdr_ext,
+                50,
+            )
+        ]
         pkts.extend(pkts_b)
 
         return pkts
         pkts.extend(pkts_b)
 
         return pkts
@@ -151,7 +171,7 @@ class TestIPv4(VppTestCase):
             last_info[i.sw_if_index] = None
         is_sub_if = False
         dst_sw_if_index = dst_if.sw_if_index
             last_info[i.sw_if_index] = None
         is_sub_if = False
         dst_sw_if_index = dst_if.sw_if_index
-        if hasattr(dst_if, 'parent'):
+        if hasattr(dst_if, "parent"):
             is_sub_if = True
         for packet in capture:
             if is_sub_if:
             is_sub_if = True
         for packet in capture:
             if is_sub_if:
@@ -165,11 +185,12 @@ class TestIPv4(VppTestCase):
                 packet_index = payload_info.index
                 self.assertEqual(payload_info.dst, dst_sw_if_index)
                 self.logger.debug(
                 packet_index = payload_info.index
                 self.assertEqual(payload_info.dst, dst_sw_if_index)
                 self.logger.debug(
-                    "Got packet on port %s: src=%u (id=%u)" %
-                    (dst_if.name, payload_info.src, packet_index))
+                    "Got packet on port %s: src=%u (id=%u)"
+                    % (dst_if.name, payload_info.src, packet_index)
+                )
                 next_info = self.get_next_packet_info_for_interface2(
                 next_info = self.get_next_packet_info_for_interface2(
-                    payload_info.src, dst_sw_if_index,
-                    last_info[payload_info.src])
+                    payload_info.src, dst_sw_if_index, last_info[payload_info.src]
+                )
                 last_info[payload_info.src] = next_info
                 self.assertTrue(next_info is not None)
                 self.assertEqual(packet_index, next_info.index)
                 last_info[payload_info.src] = next_info
                 self.assertTrue(next_info is not None)
                 self.assertEqual(packet_index, next_info.index)
@@ -184,13 +205,16 @@ class TestIPv4(VppTestCase):
                 raise
         for i in self.interfaces:
             remaining_packet = self.get_next_packet_info_for_interface2(
                 raise
         for i in self.interfaces:
             remaining_packet = self.get_next_packet_info_for_interface2(
-                i.sw_if_index, dst_sw_if_index, last_info[i.sw_if_index])
-            self.assertTrue(remaining_packet is None,
-                            "Interface %s: Packet expected from interface %s "
-                            "didn't arrive" % (dst_if.name, i.name))
+                i.sw_if_index, dst_sw_if_index, last_info[i.sw_if_index]
+            )
+            self.assertTrue(
+                remaining_packet is None,
+                "Interface %s: Packet expected from interface %s "
+                "didn't arrive" % (dst_if.name, i.name),
+            )
 
     def test_fib(self):
 
     def test_fib(self):
-        """ IPv4 FIB test
+        """IPv4 FIB test
 
         Test scenario:
 
 
         Test scenario:
 
@@ -218,16 +242,19 @@ class TestIPv4(VppTestCase):
 
 
 class TestIPv4RouteLookup(VppTestCase):
 
 
 class TestIPv4RouteLookup(VppTestCase):
-    """ IPv4 Route Lookup Test Case """
+    """IPv4 Route Lookup Test Case"""
+
     routes = []
 
     def route_lookup(self, prefix, exact):
     routes = []
 
     def route_lookup(self, prefix, exact):
-        return self.vapi.api(self.vapi.papi.ip_route_lookup,
-                             {
-                                 'table_id': 0,
-                                 'exact': exact,
-                                 'prefix': prefix,
-                             })
+        return self.vapi.api(
+            self.vapi.papi.ip_route_lookup,
+            {
+                "table_id": 0,
+                "exact": exact,
+                "prefix": prefix,
+            },
+        )
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -240,8 +267,9 @@ class TestIPv4RouteLookup(VppTestCase):
     def setUp(self):
         super(TestIPv4RouteLookup, self).setUp()
 
     def setUp(self):
         super(TestIPv4RouteLookup, self).setUp()
 
-        drop_nh = VppRoutePath("127.0.0.1", 0xffffffff,
-                               type=FibPathType.FIB_PATH_TYPE_DROP)
+        drop_nh = VppRoutePath(
+            "127.0.0.1", 0xFFFFFFFF, type=FibPathType.FIB_PATH_TYPE_DROP
+        )
 
         # Add 3 routes
         r = VppIpRoute(self, "1.1.0.0", 16, [drop_nh])
 
         # Add 3 routes
         r = VppIpRoute(self, "1.1.0.0", 16, [drop_nh])
@@ -267,12 +295,12 @@ class TestIPv4RouteLookup(VppTestCase):
         # Verify we find the host route
         prefix = "1.1.1.1/32"
         result = self.route_lookup(prefix, True)
         # Verify we find the host route
         prefix = "1.1.1.1/32"
         result = self.route_lookup(prefix, True)
-        assert (prefix == str(result.route.prefix))
+        assert prefix == str(result.route.prefix)
 
         # Verify we find a middle prefix route
         prefix = "1.1.1.0/24"
         result = self.route_lookup(prefix, True)
 
         # Verify we find a middle prefix route
         prefix = "1.1.1.0/24"
         result = self.route_lookup(prefix, True)
-        assert (prefix == str(result.route.prefix))
+        assert prefix == str(result.route.prefix)
 
         # Verify we do not find an available LPM.
         with self.vapi.assert_negative_api_retval():
 
         # Verify we do not find an available LPM.
         with self.vapi.assert_negative_api_retval():
@@ -282,17 +310,17 @@ class TestIPv4RouteLookup(VppTestCase):
         # verify we find lpm
         lpm_prefix = "1.1.1.0/24"
         result = self.route_lookup("1.1.1.2/32", False)
         # verify we find lpm
         lpm_prefix = "1.1.1.0/24"
         result = self.route_lookup("1.1.1.2/32", False)
-        assert (lpm_prefix == str(result.route.prefix))
+        assert lpm_prefix == str(result.route.prefix)
 
         # Verify we find the exact when not requested
         result = self.route_lookup(lpm_prefix, False)
 
         # Verify we find the exact when not requested
         result = self.route_lookup(lpm_prefix, False)
-        assert (lpm_prefix == str(result.route.prefix))
+        assert lpm_prefix == str(result.route.prefix)
 
         # Can't seem to delete the default route so no negative LPM test.
 
 
 class TestIPv4IfAddrRoute(VppTestCase):
 
         # Can't seem to delete the default route so no negative LPM test.
 
 
 class TestIPv4IfAddrRoute(VppTestCase):
-    """ IPv4 Interface Addr Route Test Case """
+    """IPv4 Interface Addr Route Test Case"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -320,7 +348,7 @@ class TestIPv4IfAddrRoute(VppTestCase):
             i.admin_down()
 
     def test_ipv4_ifaddrs_same_prefix(self):
             i.admin_down()
 
     def test_ipv4_ifaddrs_same_prefix(self):
-        """ IPv4 Interface Addresses Same Prefix test
+        """IPv4 Interface Addresses Same Prefix test
 
         Test scenario:
 
 
         Test scenario:
 
@@ -370,7 +398,7 @@ class TestIPv4IfAddrRoute(VppTestCase):
         self.assertFalse(find_route(self, "10.10.10.0", 32))
 
     def test_ipv4_ifaddr_route(self):
         self.assertFalse(find_route(self, "10.10.10.0", 32))
 
     def test_ipv4_ifaddr_route(self):
-        """ IPv4 Interface Address Route test
+        """IPv4 Interface Address Route test
 
         Test scenario:
 
 
         Test scenario:
 
@@ -415,7 +443,7 @@ class TestIPv4IfAddrRoute(VppTestCase):
         self.assertTrue(lo_if.is_ip4_entry_in_fib_dump(fib4_dump))
 
     def test_ipv4_ifaddr_del(self):
         self.assertTrue(lo_if.is_ip4_entry_in_fib_dump(fib4_dump))
 
     def test_ipv4_ifaddr_del(self):
-        """ Delete an interface address that does not exist """
+        """Delete an interface address that does not exist"""
 
         loopbacks = self.create_loopback_interfaces(1)
         lo = self.lo_interfaces[0]
 
         loopbacks = self.create_loopback_interfaces(1)
         lo = self.lo_interfaces[0]
@@ -428,13 +456,12 @@ class TestIPv4IfAddrRoute(VppTestCase):
         #
         with self.vapi.assert_negative_api_retval():
             self.vapi.sw_interface_add_del_address(
         #
         with self.vapi.assert_negative_api_retval():
             self.vapi.sw_interface_add_del_address(
-                sw_if_index=lo.sw_if_index,
-                prefix=self.pg0.local_ip4_prefix,
-                is_add=0)
+                sw_if_index=lo.sw_if_index, prefix=self.pg0.local_ip4_prefix, is_add=0
+            )
 
 
 class TestICMPEcho(VppTestCase):
 
 
 class TestICMPEcho(VppTestCase):
-    """ ICMP Echo Test Case """
+    """ICMP Echo Test Case"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -462,7 +489,7 @@ class TestICMPEcho(VppTestCase):
             i.admin_down()
 
     def test_icmp_echo(self):
             i.admin_down()
 
     def test_icmp_echo(self):
-        """ VPP replies to ICMP Echo Request
+        """VPP replies to ICMP Echo Request
 
         Test scenario:
 
 
         Test scenario:
 
@@ -470,14 +497,15 @@ class TestICMPEcho(VppTestCase):
             - Check outgoing ICMP Echo Reply message on pg0 interface.
         """
 
             - Check outgoing ICMP Echo Reply message on pg0 interface.
         """
 
-        icmp_id = 0xb
+        icmp_id = 0xB
         icmp_seq = 5
         icmp_seq = 5
-        icmp_load = b'\x0a' * 18
-        p_echo_request = (Ether(src=self.pg0.remote_mac,
-                                dst=self.pg0.local_mac) /
-                          IP(src=self.pg0.remote_ip4, dst=self.pg0.local_ip4) /
-                          ICMP(id=icmp_id, seq=icmp_seq) /
-                          Raw(load=icmp_load))
+        icmp_load = b"\x0a" * 18
+        p_echo_request = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg0.local_ip4)
+            / ICMP(id=icmp_id, seq=icmp_seq)
+            / Raw(load=icmp_load)
+        )
 
         self.pg0.add_stream(p_echo_request)
         self.pg_enable_capture(self.pg_interfaces)
 
         self.pg0.add_stream(p_echo_request)
         self.pg_enable_capture(self.pg_interfaces)
@@ -502,7 +530,7 @@ class TestICMPEcho(VppTestCase):
 
 
 class TestIPv4FibCrud(VppTestCase):
 
 
 class TestIPv4FibCrud(VppTestCase):
-    """ FIB - add/update/delete - ip4 routes
+    """FIB - add/update/delete - ip4 routes
 
     Test scenario:
         - add 1k,
 
     Test scenario:
         - add 1k,
@@ -513,8 +541,7 @@ class TestIPv4FibCrud(VppTestCase):
     ..note:: Python API is too slow to add many routes, needs replacement.
     """
 
     ..note:: Python API is too slow to add many routes, needs replacement.
     """
 
-    def config_fib_many_to_one(self, start_dest_addr, next_hop_addr,
-                               count, start=0):
+    def config_fib_many_to_one(self, start_dest_addr, next_hop_addr, count, start=0):
         """
 
         :param start_dest_addr:
         """
 
         :param start_dest_addr:
@@ -524,19 +551,26 @@ class TestIPv4FibCrud(VppTestCase):
         """
         routes = []
         for i in range(count):
         """
         routes = []
         for i in range(count):
-            r = VppIpRoute(self, start_dest_addr % (i + start), 32,
-                           [VppRoutePath(next_hop_addr, 0xffffffff)])
+            r = VppIpRoute(
+                self,
+                start_dest_addr % (i + start),
+                32,
+                [VppRoutePath(next_hop_addr, 0xFFFFFFFF)],
+            )
             r.add_vpp_config()
             routes.append(r)
         return routes
 
             r.add_vpp_config()
             routes.append(r)
         return routes
 
-    def unconfig_fib_many_to_one(self, start_dest_addr, next_hop_addr,
-                                 count, start=0):
+    def unconfig_fib_many_to_one(self, start_dest_addr, next_hop_addr, count, start=0):
 
         routes = []
         for i in range(count):
 
         routes = []
         for i in range(count):
-            r = VppIpRoute(self, start_dest_addr % (i + start), 32,
-                           [VppRoutePath(next_hop_addr, 0xffffffff)])
+            r = VppIpRoute(
+                self,
+                start_dest_addr % (i + start),
+                32,
+                [VppRoutePath(next_hop_addr, 0xFFFFFFFF)],
+            )
             r.remove_vpp_config()
             routes.append(r)
         return routes
             r.remove_vpp_config()
             routes.append(r)
         return routes
@@ -548,10 +582,12 @@ class TestIPv4FibCrud(VppTestCase):
             dst_addr = random.choice(routes).prefix.network_address
             info = self.create_packet_info(src_if, dst_if)
             payload = self.info_to_payload(info)
             dst_addr = random.choice(routes).prefix.network_address
             info = self.create_packet_info(src_if, dst_if)
             payload = self.info_to_payload(info)
-            p = (Ether(dst=src_if.local_mac, src=src_if.remote_mac) /
-                 IP(src=src_if.remote_ip4, dst=str(dst_addr)) /
-                 UDP(sport=1234, dport=1234) /
-                 Raw(payload))
+            p = (
+                Ether(dst=src_if.local_mac, src=src_if.remote_mac)
+                / IP(src=src_if.remote_ip4, dst=str(dst_addr))
+                / UDP(sport=1234, dport=1234)
+                / Raw(payload)
+            )
             info.data = p.copy()
             self.extend_packet(p, random.choice(self.pg_if_packet_sizes))
             pkts.append(p)
             info.data = p.copy()
             self.extend_packet(p, random.choice(self.pg_if_packet_sizes))
             pkts.append(p)
@@ -560,8 +596,7 @@ class TestIPv4FibCrud(VppTestCase):
 
     def _find_ip_match(self, find_in, pkt):
         for p in find_in:
 
     def _find_ip_match(self, find_in, pkt):
         for p in find_in:
-            if self.payload_to_info(p[Raw]) == \
-                    self.payload_to_info(pkt[Raw]):
+            if self.payload_to_info(p[Raw]) == self.payload_to_info(pkt[Raw]):
                 if p[IP].src != pkt[IP].src:
                     break
                 if p[IP].dst != pkt[IP].dst:
                 if p[IP].src != pkt[IP].src:
                     break
                 if p[IP].dst != pkt[IP].dst:
@@ -585,15 +620,15 @@ class TestIPv4FibCrud(VppTestCase):
 
     def verify_route_dump(self, routes):
         for r in routes:
 
     def verify_route_dump(self, routes):
         for r in routes:
-            self.assertTrue(find_route(self,
-                                       r.prefix.network_address,
-                                       r.prefix.prefixlen))
+            self.assertTrue(
+                find_route(self, r.prefix.network_address, r.prefix.prefixlen)
+            )
 
     def verify_not_in_route_dump(self, routes):
         for r in routes:
 
     def verify_not_in_route_dump(self, routes):
         for r in routes:
-            self.assertFalse(find_route(self,
-                                        r.prefix.network_address,
-                                        r.prefix.prefixlen))
+            self.assertFalse(
+                find_route(self, r.prefix.network_address, r.prefix.prefixlen)
+            )
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -636,18 +671,21 @@ class TestIPv4FibCrud(VppTestCase):
         self.deleted_routes = []
 
     def test_1_add_routes(self):
         self.deleted_routes = []
 
     def test_1_add_routes(self):
-        """ Add 1k routes """
+        """Add 1k routes"""
 
         # add 100 routes check with traffic script.
 
         # add 100 routes check with traffic script.
-        self.configured_routes.extend(self.config_fib_many_to_one(
-            "10.0.0.%d", self.pg0.remote_ip4, 100))
+        self.configured_routes.extend(
+            self.config_fib_many_to_one("10.0.0.%d", self.pg0.remote_ip4, 100)
+        )
 
         self.verify_route_dump(self.configured_routes)
 
         self.stream_1 = self.create_stream(
 
         self.verify_route_dump(self.configured_routes)
 
         self.stream_1 = self.create_stream(
-            self.pg1, self.pg0, self.configured_routes, 100)
+            self.pg1, self.pg0, self.configured_routes, 100
+        )
         self.stream_2 = self.create_stream(
         self.stream_2 = self.create_stream(
-            self.pg2, self.pg0, self.configured_routes, 100)
+            self.pg2, self.pg0, self.configured_routes, 100
+        )
         self.pg1.add_stream(self.stream_1)
         self.pg2.add_stream(self.stream_2)
 
         self.pg1.add_stream(self.stream_1)
         self.pg2.add_stream(self.stream_2)
 
@@ -658,28 +696,32 @@ class TestIPv4FibCrud(VppTestCase):
         self.verify_capture(self.pg0, pkts, self.stream_1 + self.stream_2)
 
     def test_2_del_routes(self):
         self.verify_capture(self.pg0, pkts, self.stream_1 + self.stream_2)
 
     def test_2_del_routes(self):
-        """ Delete 100 routes
+        """Delete 100 routes
 
         - delete 10 routes check with traffic script.
         """
         # config 1M FIB entries
 
         - delete 10 routes check with traffic script.
         """
         # config 1M FIB entries
-        self.configured_routes.extend(self.config_fib_many_to_one(
-            "10.0.0.%d", self.pg0.remote_ip4, 100))
-        self.deleted_routes.extend(self.unconfig_fib_many_to_one(
-            "10.0.0.%d", self.pg0.remote_ip4, 10, start=10))
+        self.configured_routes.extend(
+            self.config_fib_many_to_one("10.0.0.%d", self.pg0.remote_ip4, 100)
+        )
+        self.deleted_routes.extend(
+            self.unconfig_fib_many_to_one(
+                "10.0.0.%d", self.pg0.remote_ip4, 10, start=10
+            )
+        )
         for x in self.deleted_routes:
             self.configured_routes.remove(x)
 
         self.verify_route_dump(self.configured_routes)
 
         self.stream_1 = self.create_stream(
         for x in self.deleted_routes:
             self.configured_routes.remove(x)
 
         self.verify_route_dump(self.configured_routes)
 
         self.stream_1 = self.create_stream(
-            self.pg1, self.pg0, self.configured_routes, 100)
+            self.pg1, self.pg0, self.configured_routes, 100
+        )
         self.stream_2 = self.create_stream(
         self.stream_2 = self.create_stream(
-            self.pg2, self.pg0, self.configured_routes, 100)
-        self.stream_3 = self.create_stream(
-            self.pg1, self.pg0, self.deleted_routes, 100)
-        self.stream_4 = self.create_stream(
-            self.pg2, self.pg0, self.deleted_routes, 100)
+            self.pg2, self.pg0, self.configured_routes, 100
+        )
+        self.stream_3 = self.create_stream(self.pg1, self.pg0, self.deleted_routes, 100)
+        self.stream_4 = self.create_stream(self.pg2, self.pg0, self.deleted_routes, 100)
         self.pg1.add_stream(self.stream_1 + self.stream_3)
         self.pg2.add_stream(self.stream_2 + self.stream_4)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg1.add_stream(self.stream_1 + self.stream_3)
         self.pg2.add_stream(self.stream_2 + self.stream_4)
         self.pg_enable_capture(self.pg_interfaces)
@@ -689,38 +731,42 @@ class TestIPv4FibCrud(VppTestCase):
         self.verify_capture(self.pg0, pkts, self.stream_1 + self.stream_2)
 
     def test_3_add_new_routes(self):
         self.verify_capture(self.pg0, pkts, self.stream_1 + self.stream_2)
 
     def test_3_add_new_routes(self):
-        """ Add 1k routes
+        """Add 1k routes
 
         - re-add 5 routes check with traffic script.
         - add 100 routes check with traffic script.
         """
         # config 1M FIB entries
 
         - re-add 5 routes check with traffic script.
         - add 100 routes check with traffic script.
         """
         # config 1M FIB entries
-        self.configured_routes.extend(self.config_fib_many_to_one(
-            "10.0.0.%d", self.pg0.remote_ip4, 100))
-        self.deleted_routes.extend(self.unconfig_fib_many_to_one(
-            "10.0.0.%d", self.pg0.remote_ip4, 10, start=10))
+        self.configured_routes.extend(
+            self.config_fib_many_to_one("10.0.0.%d", self.pg0.remote_ip4, 100)
+        )
+        self.deleted_routes.extend(
+            self.unconfig_fib_many_to_one(
+                "10.0.0.%d", self.pg0.remote_ip4, 10, start=10
+            )
+        )
         for x in self.deleted_routes:
             self.configured_routes.remove(x)
 
         for x in self.deleted_routes:
             self.configured_routes.remove(x)
 
-        tmp = self.config_fib_many_to_one(
-            "10.0.0.%d", self.pg0.remote_ip4, 5, start=10)
+        tmp = self.config_fib_many_to_one("10.0.0.%d", self.pg0.remote_ip4, 5, start=10)
         self.configured_routes.extend(tmp)
         for x in tmp:
             self.deleted_routes.remove(x)
 
         self.configured_routes.extend(tmp)
         for x in tmp:
             self.deleted_routes.remove(x)
 
-        self.configured_routes.extend(self.config_fib_many_to_one(
-            "10.0.1.%d", self.pg0.remote_ip4, 100))
+        self.configured_routes.extend(
+            self.config_fib_many_to_one("10.0.1.%d", self.pg0.remote_ip4, 100)
+        )
 
         self.verify_route_dump(self.configured_routes)
 
         self.stream_1 = self.create_stream(
 
         self.verify_route_dump(self.configured_routes)
 
         self.stream_1 = self.create_stream(
-            self.pg1, self.pg0, self.configured_routes, 300)
+            self.pg1, self.pg0, self.configured_routes, 300
+        )
         self.stream_2 = self.create_stream(
         self.stream_2 = self.create_stream(
-            self.pg2, self.pg0, self.configured_routes, 300)
-        self.stream_3 = self.create_stream(
-            self.pg1, self.pg0, self.deleted_routes, 100)
-        self.stream_4 = self.create_stream(
-            self.pg2, self.pg0, self.deleted_routes, 100)
+            self.pg2, self.pg0, self.configured_routes, 300
+        )
+        self.stream_3 = self.create_stream(self.pg1, self.pg0, self.deleted_routes, 100)
+        self.stream_4 = self.create_stream(self.pg2, self.pg0, self.deleted_routes, 100)
 
         self.pg1.add_stream(self.stream_1 + self.stream_3)
         self.pg2.add_stream(self.stream_2 + self.stream_4)
 
         self.pg1.add_stream(self.stream_1 + self.stream_3)
         self.pg2.add_stream(self.stream_2 + self.stream_4)
@@ -732,17 +778,20 @@ class TestIPv4FibCrud(VppTestCase):
 
         # delete 5 routes check with traffic script.
         # add 100 routes check with traffic script.
 
         # delete 5 routes check with traffic script.
         # add 100 routes check with traffic script.
-        self.deleted_routes.extend(self.unconfig_fib_many_to_one(
-            "10.0.0.%d", self.pg0.remote_ip4, 15))
-        self.deleted_routes.extend(self.unconfig_fib_many_to_one(
-            "10.0.0.%d", self.pg0.remote_ip4, 85))
-        self.deleted_routes.extend(self.unconfig_fib_many_to_one(
-            "10.0.1.%d", self.pg0.remote_ip4, 100))
+        self.deleted_routes.extend(
+            self.unconfig_fib_many_to_one("10.0.0.%d", self.pg0.remote_ip4, 15)
+        )
+        self.deleted_routes.extend(
+            self.unconfig_fib_many_to_one("10.0.0.%d", self.pg0.remote_ip4, 85)
+        )
+        self.deleted_routes.extend(
+            self.unconfig_fib_many_to_one("10.0.1.%d", self.pg0.remote_ip4, 100)
+        )
         self.verify_not_in_route_dump(self.deleted_routes)
 
 
 class TestIPNull(VppTestCase):
         self.verify_not_in_route_dump(self.deleted_routes)
 
 
 class TestIPNull(VppTestCase):
-    """ IPv4 routes via NULL """
+    """IPv4 routes via NULL"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -770,23 +819,29 @@ class TestIPNull(VppTestCase):
             i.admin_down()
 
     def test_ip_null(self):
             i.admin_down()
 
     def test_ip_null(self):
-        """ IP NULL route """
+        """IP NULL route"""
 
         #
         # A route via IP NULL that will reply with ICMP unreachables
         #
         ip_unreach = VppIpRoute(
 
         #
         # A route via IP NULL that will reply with ICMP unreachables
         #
         ip_unreach = VppIpRoute(
-            self, "10.0.0.1", 32,
-            [VppRoutePath("0.0.0.0",
-                          0xffffffff,
-                          type=FibPathType.FIB_PATH_TYPE_ICMP_UNREACH)])
+            self,
+            "10.0.0.1",
+            32,
+            [
+                VppRoutePath(
+                    "0.0.0.0", 0xFFFFFFFF, type=FibPathType.FIB_PATH_TYPE_ICMP_UNREACH
+                )
+            ],
+        )
         ip_unreach.add_vpp_config()
 
         ip_unreach.add_vpp_config()
 
-        p_unreach = (Ether(src=self.pg0.remote_mac,
-                           dst=self.pg0.local_mac) /
-                     IP(src=self.pg0.remote_ip4, dst="10.0.0.1") /
-                     UDP(sport=1234, dport=1234) /
-                     Raw(b'\xa5' * 100))
+        p_unreach = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg0.remote_ip4, dst="10.0.0.1")
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
         self.pg0.add_stream(p_unreach)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg0.add_stream(p_unreach)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -809,17 +864,23 @@ class TestIPNull(VppTestCase):
         # A route via IP NULL that will reply with ICMP prohibited
         #
         ip_prohibit = VppIpRoute(
         # A route via IP NULL that will reply with ICMP prohibited
         #
         ip_prohibit = VppIpRoute(
-            self, "10.0.0.2", 32,
-            [VppRoutePath("0.0.0.0",
-                          0xffffffff,
-                          type=FibPathType.FIB_PATH_TYPE_ICMP_PROHIBIT)])
+            self,
+            "10.0.0.2",
+            32,
+            [
+                VppRoutePath(
+                    "0.0.0.0", 0xFFFFFFFF, type=FibPathType.FIB_PATH_TYPE_ICMP_PROHIBIT
+                )
+            ],
+        )
         ip_prohibit.add_vpp_config()
 
         ip_prohibit.add_vpp_config()
 
-        p_prohibit = (Ether(src=self.pg0.remote_mac,
-                            dst=self.pg0.local_mac) /
-                      IP(src=self.pg0.remote_ip4, dst="10.0.0.2") /
-                      UDP(sport=1234, dport=1234) /
-                      Raw(b'\xa5' * 100))
+        p_prohibit = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg0.remote_ip4, dst="10.0.0.2")
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
 
         self.pg0.add_stream(p_prohibit)
         self.pg_enable_capture(self.pg_interfaces)
 
         self.pg0.add_stream(p_prohibit)
         self.pg_enable_capture(self.pg_interfaces)
@@ -836,17 +897,21 @@ class TestIPNull(VppTestCase):
         self.assertEqual(icmp.dst, "10.0.0.2")
 
     def test_ip_drop(self):
         self.assertEqual(icmp.dst, "10.0.0.2")
 
     def test_ip_drop(self):
-        """ IP Drop Routes """
+        """IP Drop Routes"""
 
 
-        p = (Ether(src=self.pg0.remote_mac,
-                   dst=self.pg0.local_mac) /
-             IP(src=self.pg0.remote_ip4, dst="1.1.1.1") /
-             UDP(sport=1234, dport=1234) /
-             Raw(b'\xa5' * 100))
+        p = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg0.remote_ip4, dst="1.1.1.1")
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
 
 
-        r1 = VppIpRoute(self, "1.1.1.0", 24,
-                        [VppRoutePath(self.pg1.remote_ip4,
-                                      self.pg1.sw_if_index)])
+        r1 = VppIpRoute(
+            self,
+            "1.1.1.0",
+            24,
+            [VppRoutePath(self.pg1.remote_ip4, self.pg1.sw_if_index)],
+        )
         r1.add_vpp_config()
 
         rx = self.send_and_expect(self.pg0, p * NUM_PKTS, self.pg1)
         r1.add_vpp_config()
 
         rx = self.send_and_expect(self.pg0, p * NUM_PKTS, self.pg1)
@@ -854,10 +919,12 @@ class TestIPNull(VppTestCase):
         #
         # insert a more specific as a drop
         #
         #
         # insert a more specific as a drop
         #
-        r2 = VppIpRoute(self, "1.1.1.1", 32,
-                        [VppRoutePath("0.0.0.0",
-                                      0xffffffff,
-                                      type=FibPathType.FIB_PATH_TYPE_DROP)])
+        r2 = VppIpRoute(
+            self,
+            "1.1.1.1",
+            32,
+            [VppRoutePath("0.0.0.0", 0xFFFFFFFF, type=FibPathType.FIB_PATH_TYPE_DROP)],
+        )
         r2.add_vpp_config()
 
         self.send_and_assert_no_replies(self.pg0, p * NUM_PKTS, "Drop Route")
         r2.add_vpp_config()
 
         self.send_and_assert_no_replies(self.pg0, p * NUM_PKTS, "Drop Route")
@@ -866,7 +933,7 @@ class TestIPNull(VppTestCase):
 
 
 class TestIPDisabled(VppTestCase):
 
 
 class TestIPDisabled(VppTestCase):
-    """ IPv4 disabled """
+    """IPv4 disabled"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -897,7 +964,7 @@ class TestIPDisabled(VppTestCase):
             i.admin_down()
 
     def test_ip_disabled(self):
             i.admin_down()
 
     def test_ip_disabled(self):
-        """ IP Disabled """
+        """IP Disabled"""
 
         MRouteItfFlags = VppEnum.vl_api_mfib_itf_flags_t
         MRouteEntryFlags = VppEnum.vl_api_mfib_entry_flags_t
 
         MRouteItfFlags = VppEnum.vl_api_mfib_itf_flags_t
         MRouteEntryFlags = VppEnum.vl_api_mfib_entry_flags_t
@@ -909,24 +976,32 @@ class TestIPDisabled(VppTestCase):
         route_232_1_1_1 = VppIpMRoute(
             self,
             "0.0.0.0",
         route_232_1_1_1 = VppIpMRoute(
             self,
             "0.0.0.0",
-            "232.1.1.1", 32,
+            "232.1.1.1",
+            32,
             MRouteEntryFlags.MFIB_API_ENTRY_FLAG_NONE,
             MRouteEntryFlags.MFIB_API_ENTRY_FLAG_NONE,
-            [VppMRoutePath(self.pg1.sw_if_index,
-                           MRouteItfFlags.MFIB_API_ITF_FLAG_ACCEPT),
-             VppMRoutePath(self.pg0.sw_if_index,
-                           MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD)])
+            [
+                VppMRoutePath(
+                    self.pg1.sw_if_index, MRouteItfFlags.MFIB_API_ITF_FLAG_ACCEPT
+                ),
+                VppMRoutePath(
+                    self.pg0.sw_if_index, MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD
+                ),
+            ],
+        )
         route_232_1_1_1.add_vpp_config()
 
         route_232_1_1_1.add_vpp_config()
 
-        pu = (Ether(src=self.pg1.remote_mac,
-                    dst=self.pg1.local_mac) /
-              IP(src="10.10.10.10", dst=self.pg0.remote_ip4) /
-              UDP(sport=1234, dport=1234) /
-              Raw(b'\xa5' * 100))
-        pm = (Ether(src=self.pg1.remote_mac,
-                    dst=self.pg1.local_mac) /
-              IP(src="10.10.10.10", dst="232.1.1.1") /
-              UDP(sport=1234, dport=1234) /
-              Raw(b'\xa5' * 100))
+        pu = (
+            Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
+            / IP(src="10.10.10.10", dst=self.pg0.remote_ip4)
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
+        pm = (
+            Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
+            / IP(src="10.10.10.10", dst="232.1.1.1")
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
 
         #
         # PG1 does not forward IP traffic
 
         #
         # PG1 does not forward IP traffic
@@ -965,7 +1040,7 @@ class TestIPDisabled(VppTestCase):
 
 
 class TestIPSubNets(VppTestCase):
 
 
 class TestIPSubNets(VppTestCase):
-    """ IPv4 Subnets """
+    """IPv4 Subnets"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -995,22 +1070,26 @@ class TestIPSubNets(VppTestCase):
             i.admin_down()
 
     def test_ip_sub_nets(self):
             i.admin_down()
 
     def test_ip_sub_nets(self):
-        """ IP Sub Nets """
+        """IP Sub Nets"""
 
         #
         # Configure a covering route to forward so we know
         # when we are dropping
         #
 
         #
         # Configure a covering route to forward so we know
         # when we are dropping
         #
-        cover_route = VppIpRoute(self, "10.0.0.0", 8,
-                                 [VppRoutePath(self.pg1.remote_ip4,
-                                               self.pg1.sw_if_index)])
+        cover_route = VppIpRoute(
+            self,
+            "10.0.0.0",
+            8,
+            [VppRoutePath(self.pg1.remote_ip4, self.pg1.sw_if_index)],
+        )
         cover_route.add_vpp_config()
 
         cover_route.add_vpp_config()
 
-        p = (Ether(src=self.pg1.remote_mac,
-                   dst=self.pg1.local_mac) /
-             IP(dst="10.10.10.10", src=self.pg0.local_ip4) /
-             UDP(sport=1234, dport=1234) /
-             Raw(b'\xa5' * 100))
+        p = (
+            Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
+            / IP(dst="10.10.10.10", src=self.pg0.local_ip4)
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
 
         self.pg1.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
 
         self.pg1.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
@@ -1023,28 +1102,29 @@ class TestIPSubNets(VppTestCase):
         ip_addr_n = socket.inet_pton(socket.AF_INET, "10.10.10.10")
 
         self.vapi.sw_interface_add_del_address(
         ip_addr_n = socket.inet_pton(socket.AF_INET, "10.10.10.10")
 
         self.vapi.sw_interface_add_del_address(
-            sw_if_index=self.pg0.sw_if_index,
-            prefix="10.10.10.10/16")
-
-        pn = (Ether(src=self.pg1.remote_mac,
-                    dst=self.pg1.local_mac) /
-              IP(dst="10.10.0.0", src=self.pg0.local_ip4) /
-              UDP(sport=1234, dport=1234) /
-              Raw(b'\xa5' * 100))
-        pb = (Ether(src=self.pg1.remote_mac,
-                    dst=self.pg1.local_mac) /
-              IP(dst="10.10.255.255", src=self.pg0.local_ip4) /
-              UDP(sport=1234, dport=1234) /
-              Raw(b'\xa5' * 100))
+            sw_if_index=self.pg0.sw_if_index, prefix="10.10.10.10/16"
+        )
+
+        pn = (
+            Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
+            / IP(dst="10.10.0.0", src=self.pg0.local_ip4)
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
+        pb = (
+            Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
+            / IP(dst="10.10.255.255", src=self.pg0.local_ip4)
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
 
         self.send_and_assert_no_replies(self.pg1, pn, "IP Network address")
         self.send_and_assert_no_replies(self.pg1, pb, "IP Broadcast address")
 
         # remove the sub-net and we are forwarding via the cover again
         self.vapi.sw_interface_add_del_address(
 
         self.send_and_assert_no_replies(self.pg1, pn, "IP Network address")
         self.send_and_assert_no_replies(self.pg1, pb, "IP Broadcast address")
 
         # remove the sub-net and we are forwarding via the cover again
         self.vapi.sw_interface_add_del_address(
-            sw_if_index=self.pg0.sw_if_index,
-            prefix="10.10.10.10/16",
-            is_add=0)
+            sw_if_index=self.pg0.sw_if_index, prefix="10.10.10.10/16", is_add=0
+        )
 
         self.pg1.add_stream(pn)
         self.pg_enable_capture(self.pg_interfaces)
 
         self.pg1.add_stream(pn)
         self.pg_enable_capture(self.pg_interfaces)
@@ -1062,14 +1142,15 @@ class TestIPSubNets(VppTestCase):
         ip_addr_n = socket.inet_pton(socket.AF_INET, "10.10.10.10")
 
         self.vapi.sw_interface_add_del_address(
         ip_addr_n = socket.inet_pton(socket.AF_INET, "10.10.10.10")
 
         self.vapi.sw_interface_add_del_address(
-            sw_if_index=self.pg0.sw_if_index,
-            prefix="10.10.10.10/31")
+            sw_if_index=self.pg0.sw_if_index, prefix="10.10.10.10/31"
+        )
 
 
-        pn = (Ether(src=self.pg1.remote_mac,
-                    dst=self.pg1.local_mac) /
-              IP(dst="10.10.10.11", src=self.pg0.local_ip4) /
-              UDP(sport=1234, dport=1234) /
-              Raw(b'\xa5' * 100))
+        pn = (
+            Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
+            / IP(dst="10.10.10.11", src=self.pg0.local_ip4)
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
 
         self.pg1.add_stream(pn)
         self.pg_enable_capture(self.pg_interfaces)
 
         self.pg1.add_stream(pn)
         self.pg_enable_capture(self.pg_interfaces)
@@ -1079,8 +1160,8 @@ class TestIPSubNets(VppTestCase):
 
         # remove the sub-net and we are forwarding via the cover again
         self.vapi.sw_interface_add_del_address(
 
         # remove the sub-net and we are forwarding via the cover again
         self.vapi.sw_interface_add_del_address(
-            sw_if_index=self.pg0.sw_if_index,
-            prefix="10.10.10.10/31", is_add=0)
+            sw_if_index=self.pg0.sw_if_index, prefix="10.10.10.10/31", is_add=0
+        )
 
         self.pg1.add_stream(pn)
         self.pg_enable_capture(self.pg_interfaces)
 
         self.pg1.add_stream(pn)
         self.pg_enable_capture(self.pg_interfaces)
@@ -1089,7 +1170,7 @@ class TestIPSubNets(VppTestCase):
 
 
 class TestIPLoadBalance(VppTestCase):
 
 
 class TestIPLoadBalance(VppTestCase):
-    """ IPv4 Load-Balancing """
+    """IPv4 Load-Balancing"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -1126,7 +1207,7 @@ class TestIPLoadBalance(VppTestCase):
         return n
 
     def test_ip_load_balance(self):
         return n
 
     def test_ip_load_balance(self):
-        """ IP Load-Balancing """
+        """IP Load-Balancing"""
 
         fhc = VppEnum.vl_api_ip_flow_hash_config_t
         af = VppEnum.vl_api_address_family_t
 
         fhc = VppEnum.vl_api_ip_flow_hash_config_t
         af = VppEnum.vl_api_address_family_t
@@ -1144,33 +1225,47 @@ class TestIPLoadBalance(VppTestCase):
         src_mpls_pkts = []
 
         for ii in range(NUM_PKTS):
         src_mpls_pkts = []
 
         for ii in range(NUM_PKTS):
-            port_ip_hdr = (IP(dst="10.0.0.1", src="20.0.0.1") /
-                           UDP(sport=1234, dport=1234 + ii) /
-                           Raw(b'\xa5' * 100))
-            port_ip_pkts.append((Ether(src=self.pg0.remote_mac,
-                                       dst=self.pg0.local_mac) /
-                                 port_ip_hdr))
-            port_mpls_pkts.append((Ether(src=self.pg0.remote_mac,
-                                         dst=self.pg0.local_mac) /
-                                   MPLS(label=66, ttl=2) /
-                                   port_ip_hdr))
-
-            src_ip_hdr = (IP(dst="10.0.0.1", src="20.0.0.%d" % ii) /
-                          UDP(sport=1234, dport=1234) /
-                          Raw(b'\xa5' * 100))
-            src_ip_pkts.append((Ether(src=self.pg0.remote_mac,
-                                      dst=self.pg0.local_mac) /
-                                src_ip_hdr))
-            src_mpls_pkts.append((Ether(src=self.pg0.remote_mac,
-                                        dst=self.pg0.local_mac) /
-                                  MPLS(label=66, ttl=2) /
-                                  src_ip_hdr))
-
-        route_10_0_0_1 = VppIpRoute(self, "10.0.0.1", 32,
-                                    [VppRoutePath(self.pg1.remote_ip4,
-                                                  self.pg1.sw_if_index),
-                                     VppRoutePath(self.pg2.remote_ip4,
-                                                  self.pg2.sw_if_index)])
+            port_ip_hdr = (
+                IP(dst="10.0.0.1", src="20.0.0.1")
+                / UDP(sport=1234, dport=1234 + ii)
+                / Raw(b"\xa5" * 100)
+            )
+            port_ip_pkts.append(
+                (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) / port_ip_hdr)
+            )
+            port_mpls_pkts.append(
+                (
+                    Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+                    / MPLS(label=66, ttl=2)
+                    / port_ip_hdr
+                )
+            )
+
+            src_ip_hdr = (
+                IP(dst="10.0.0.1", src="20.0.0.%d" % ii)
+                / UDP(sport=1234, dport=1234)
+                / Raw(b"\xa5" * 100)
+            )
+            src_ip_pkts.append(
+                (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) / src_ip_hdr)
+            )
+            src_mpls_pkts.append(
+                (
+                    Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+                    / MPLS(label=66, ttl=2)
+                    / src_ip_hdr
+                )
+            )
+
+        route_10_0_0_1 = VppIpRoute(
+            self,
+            "10.0.0.1",
+            32,
+            [
+                VppRoutePath(self.pg1.remote_ip4, self.pg1.sw_if_index),
+                VppRoutePath(self.pg2.remote_ip4, self.pg2.sw_if_index),
+            ],
+        )
         route_10_0_0_1.add_vpp_config()
 
         binding = VppMplsIpBind(self, 66, "10.0.0.1", 32)
         route_10_0_0_1.add_vpp_config()
 
         binding = VppMplsIpBind(self, 66, "10.0.0.1", 32)
@@ -1185,15 +1280,17 @@ class TestIPLoadBalance(VppTestCase):
         # be guaranteed. But with 64 different packets we do expect some
         # balancing. So instead just ensure there is traffic on each link.
         #
         # be guaranteed. But with 64 different packets we do expect some
         # balancing. So instead just ensure there is traffic on each link.
         #
-        rx = self.send_and_expect_load_balancing(self.pg0, port_ip_pkts,
-                                                 [self.pg1, self.pg2])
+        rx = self.send_and_expect_load_balancing(
+            self.pg0, port_ip_pkts, [self.pg1, self.pg2]
+        )
         n_ip_pg0 = len(rx[0])
         n_ip_pg0 = len(rx[0])
-        self.send_and_expect_load_balancing(self.pg0, src_ip_pkts,
-                                            [self.pg1, self.pg2])
-        self.send_and_expect_load_balancing(self.pg0, port_mpls_pkts,
-                                            [self.pg1, self.pg2])
-        rx = self.send_and_expect_load_balancing(self.pg0, src_mpls_pkts,
-                                                 [self.pg1, self.pg2])
+        self.send_and_expect_load_balancing(self.pg0, src_ip_pkts, [self.pg1, self.pg2])
+        self.send_and_expect_load_balancing(
+            self.pg0, port_mpls_pkts, [self.pg1, self.pg2]
+        )
+        rx = self.send_and_expect_load_balancing(
+            self.pg0, src_mpls_pkts, [self.pg1, self.pg2]
+        )
         n_mpls_pg0 = len(rx[0])
 
         #
         n_mpls_pg0 = len(rx[0])
 
         #
@@ -1201,12 +1298,14 @@ class TestIPLoadBalance(VppTestCase):
         #
         self.vapi.set_ip_flow_hash_router_id(router_id=0x11111111)
 
         #
         self.vapi.set_ip_flow_hash_router_id(router_id=0x11111111)
 
-        rx = self.send_and_expect_load_balancing(self.pg0, port_ip_pkts,
-                                                 [self.pg1, self.pg2])
+        rx = self.send_and_expect_load_balancing(
+            self.pg0, port_ip_pkts, [self.pg1, self.pg2]
+        )
         self.assertNotEqual(n_ip_pg0, len(rx[0]))
 
         self.assertNotEqual(n_ip_pg0, len(rx[0]))
 
-        rx = self.send_and_expect_load_balancing(self.pg0, src_mpls_pkts,
-                                                 [self.pg1, self.pg2])
+        rx = self.send_and_expect_load_balancing(
+            self.pg0, src_mpls_pkts, [self.pg1, self.pg2]
+        )
         self.assertNotEqual(n_mpls_pg0, len(rx[0]))
 
         #
         self.assertNotEqual(n_mpls_pg0, len(rx[0]))
 
         #
@@ -1217,22 +1316,24 @@ class TestIPLoadBalance(VppTestCase):
         self.vapi.set_ip_flow_hash_v2(
             af=af.ADDRESS_IP4,
             table_id=0,
         self.vapi.set_ip_flow_hash_v2(
             af=af.ADDRESS_IP4,
             table_id=0,
-            flow_hash_config=(fhc.IP_API_FLOW_HASH_SRC_IP |
-                              fhc.IP_API_FLOW_HASH_DST_IP |
-                              fhc.IP_API_FLOW_HASH_PROTO))
-
-        self.send_and_expect_load_balancing(self.pg0, src_ip_pkts,
-                                            [self.pg1, self.pg2])
-        self.send_and_expect_load_balancing(self.pg0, src_mpls_pkts,
-                                            [self.pg1, self.pg2])
+            flow_hash_config=(
+                fhc.IP_API_FLOW_HASH_SRC_IP
+                | fhc.IP_API_FLOW_HASH_DST_IP
+                | fhc.IP_API_FLOW_HASH_PROTO
+            ),
+        )
+
+        self.send_and_expect_load_balancing(self.pg0, src_ip_pkts, [self.pg1, self.pg2])
+        self.send_and_expect_load_balancing(
+            self.pg0, src_mpls_pkts, [self.pg1, self.pg2]
+        )
 
         self.send_and_expect_only(self.pg0, port_ip_pkts, self.pg2)
 
         #
         # change the flow hash config back to defaults
         #
 
         self.send_and_expect_only(self.pg0, port_ip_pkts, self.pg2)
 
         #
         # change the flow hash config back to defaults
         #
-        self.vapi.set_ip_flow_hash(vrf_id=0, src=1, dst=1,
-                                   proto=1, sport=1, dport=1)
+        self.vapi.set_ip_flow_hash(vrf_id=0, src=1, dst=1, proto=1, sport=1, dport=1)
 
         #
         # Recursive prefixes
 
         #
         # Recursive prefixes
@@ -1243,48 +1344,64 @@ class TestIPLoadBalance(VppTestCase):
         src_pkts = []
 
         for ii in range(257):
         src_pkts = []
 
         for ii in range(257):
-            port_pkts.append((Ether(src=self.pg0.remote_mac,
-                                    dst=self.pg0.local_mac) /
-                              IP(dst="1.1.1.1", src="20.0.0.1") /
-                              UDP(sport=1234, dport=1234 + ii) /
-                              Raw(b'\xa5' * 100)))
-            src_pkts.append((Ether(src=self.pg0.remote_mac,
-                                   dst=self.pg0.local_mac) /
-                             IP(dst="1.1.1.1", src="20.0.0.%d" % ii) /
-                             UDP(sport=1234, dport=1234) /
-                             Raw(b'\xa5' * 100)))
-
-        route_10_0_0_2 = VppIpRoute(self, "10.0.0.2", 32,
-                                    [VppRoutePath(self.pg3.remote_ip4,
-                                                  self.pg3.sw_if_index),
-                                     VppRoutePath(self.pg4.remote_ip4,
-                                                  self.pg4.sw_if_index)])
+            port_pkts.append(
+                (
+                    Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+                    / IP(dst="1.1.1.1", src="20.0.0.1")
+                    / UDP(sport=1234, dport=1234 + ii)
+                    / Raw(b"\xa5" * 100)
+                )
+            )
+            src_pkts.append(
+                (
+                    Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+                    / IP(dst="1.1.1.1", src="20.0.0.%d" % ii)
+                    / UDP(sport=1234, dport=1234)
+                    / Raw(b"\xa5" * 100)
+                )
+            )
+
+        route_10_0_0_2 = VppIpRoute(
+            self,
+            "10.0.0.2",
+            32,
+            [
+                VppRoutePath(self.pg3.remote_ip4, self.pg3.sw_if_index),
+                VppRoutePath(self.pg4.remote_ip4, self.pg4.sw_if_index),
+            ],
+        )
         route_10_0_0_2.add_vpp_config()
 
         route_10_0_0_2.add_vpp_config()
 
-        route_1_1_1_1 = VppIpRoute(self, "1.1.1.1", 32,
-                                   [VppRoutePath("10.0.0.2", 0xffffffff),
-                                    VppRoutePath("10.0.0.1", 0xffffffff)])
+        route_1_1_1_1 = VppIpRoute(
+            self,
+            "1.1.1.1",
+            32,
+            [
+                VppRoutePath("10.0.0.2", 0xFFFFFFFF),
+                VppRoutePath("10.0.0.1", 0xFFFFFFFF),
+            ],
+        )
         route_1_1_1_1.add_vpp_config()
 
         #
         # inject the packet on pg0 - expect load-balancing across all 4 paths
         #
         self.vapi.cli("clear trace")
         route_1_1_1_1.add_vpp_config()
 
         #
         # inject the packet on pg0 - expect load-balancing across all 4 paths
         #
         self.vapi.cli("clear trace")
-        self.send_and_expect_load_balancing(self.pg0, port_pkts,
-                                            [self.pg1, self.pg2,
-                                             self.pg3, self.pg4])
-        self.send_and_expect_load_balancing(self.pg0, src_pkts,
-                                            [self.pg1, self.pg2,
-                                             self.pg3, self.pg4])
+        self.send_and_expect_load_balancing(
+            self.pg0, port_pkts, [self.pg1, self.pg2, self.pg3, self.pg4]
+        )
+        self.send_and_expect_load_balancing(
+            self.pg0, src_pkts, [self.pg1, self.pg2, self.pg3, self.pg4]
+        )
 
         #
         # bring down pg1 expect LB to adjust to use only those that are up
         #
         self.pg1.link_down()
 
 
         #
         # bring down pg1 expect LB to adjust to use only those that are up
         #
         self.pg1.link_down()
 
-        rx = self.send_and_expect_load_balancing(self.pg0, src_pkts,
-                                                 [self.pg2, self.pg3,
-                                                  self.pg4])
+        rx = self.send_and_expect_load_balancing(
+            self.pg0, src_pkts, [self.pg2, self.pg3, self.pg4]
+        )
         self.assertEqual(len(src_pkts), self.total_len(rx))
 
         #
         self.assertEqual(len(src_pkts), self.total_len(rx))
 
         #
@@ -1292,8 +1409,9 @@ class TestIPLoadBalance(VppTestCase):
         #
         self.pg2.link_down()
 
         #
         self.pg2.link_down()
 
-        rx = self.send_and_expect_load_balancing(self.pg0, src_pkts,
-                                                 [self.pg3, self.pg4])
+        rx = self.send_and_expect_load_balancing(
+            self.pg0, src_pkts, [self.pg3, self.pg4]
+        )
         self.assertEqual(len(src_pkts), self.total_len(rx))
 
         #
         self.assertEqual(len(src_pkts), self.total_len(rx))
 
         #
@@ -1302,9 +1420,9 @@ class TestIPLoadBalance(VppTestCase):
         self.pg1.link_up()
         self.pg2.link_up()
 
         self.pg1.link_up()
         self.pg2.link_up()
 
-        rx = self.send_and_expect_load_balancing(self.pg0, src_pkts,
-                                                 [self.pg1, self.pg2,
-                                                  self.pg3, self.pg4])
+        rx = self.send_and_expect_load_balancing(
+            self.pg0, src_pkts, [self.pg1, self.pg2, self.pg3, self.pg4]
+        )
         self.assertEqual(len(src_pkts), self.total_len(rx))
 
         #
         self.assertEqual(len(src_pkts), self.total_len(rx))
 
         #
@@ -1312,16 +1430,17 @@ class TestIPLoadBalance(VppTestCase):
         #
         self.pg1.admin_down()
         self.pg2.admin_down()
         #
         self.pg1.admin_down()
         self.pg2.admin_down()
-        rx = self.send_and_expect_load_balancing(self.pg0, src_pkts,
-                                                 [self.pg3, self.pg4])
+        rx = self.send_and_expect_load_balancing(
+            self.pg0, src_pkts, [self.pg3, self.pg4]
+        )
         self.assertEqual(len(src_pkts), self.total_len(rx))
         self.pg1.admin_up()
         self.pg2.admin_up()
         self.pg1.resolve_arp()
         self.pg2.resolve_arp()
         self.assertEqual(len(src_pkts), self.total_len(rx))
         self.pg1.admin_up()
         self.pg2.admin_up()
         self.pg1.resolve_arp()
         self.pg2.resolve_arp()
-        rx = self.send_and_expect_load_balancing(self.pg0, src_pkts,
-                                                 [self.pg1, self.pg2,
-                                                  self.pg3, self.pg4])
+        rx = self.send_and_expect_load_balancing(
+            self.pg0, src_pkts, [self.pg1, self.pg2, self.pg3, self.pg4]
+        )
         self.assertEqual(len(src_pkts), self.total_len(rx))
 
         #
         self.assertEqual(len(src_pkts), self.total_len(rx))
 
         #
@@ -1331,19 +1450,26 @@ class TestIPLoadBalance(VppTestCase):
         port_pkts = []
 
         for ii in range(257):
         port_pkts = []
 
         for ii in range(257):
-            port_pkts.append((Ether(src=self.pg0.remote_mac,
-                                    dst=self.pg0.local_mac) /
-                              IP(dst="1.1.1.2", src="20.0.0.2") /
-                              UDP(sport=1234, dport=1234 + ii) /
-                              Raw(b'\xa5' * 100)))
-
-        route_10_0_0_3 = VppIpRoute(self, "10.0.0.3", 32,
-                                    [VppRoutePath(self.pg3.remote_ip4,
-                                                  self.pg3.sw_if_index)])
+            port_pkts.append(
+                (
+                    Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+                    / IP(dst="1.1.1.2", src="20.0.0.2")
+                    / UDP(sport=1234, dport=1234 + ii)
+                    / Raw(b"\xa5" * 100)
+                )
+            )
+
+        route_10_0_0_3 = VppIpRoute(
+            self,
+            "10.0.0.3",
+            32,
+            [VppRoutePath(self.pg3.remote_ip4, self.pg3.sw_if_index)],
+        )
         route_10_0_0_3.add_vpp_config()
 
         route_10_0_0_3.add_vpp_config()
 
-        route_1_1_1_2 = VppIpRoute(self, "1.1.1.2", 32,
-                                   [VppRoutePath("10.0.0.3", 0xffffffff)])
+        route_1_1_1_2 = VppIpRoute(
+            self, "1.1.1.2", 32, [VppRoutePath("10.0.0.3", 0xFFFFFFFF)]
+        )
         route_1_1_1_2.add_vpp_config()
 
         #
         route_1_1_1_2.add_vpp_config()
 
         #
@@ -1358,33 +1484,39 @@ class TestIPLoadBalance(VppTestCase):
         #
         self.pg3.link_down()
 
         #
         self.pg3.link_down()
 
-        route_10_0_0_3 = VppIpRoute(self, "10.0.0.3", 32,
-                                    [VppRoutePath(self.pg3.remote_ip4,
-                                                  self.pg3.sw_if_index),
-                                     VppRoutePath(self.pg4.remote_ip4,
-                                                  self.pg4.sw_if_index)])
+        route_10_0_0_3 = VppIpRoute(
+            self,
+            "10.0.0.3",
+            32,
+            [
+                VppRoutePath(self.pg3.remote_ip4, self.pg3.sw_if_index),
+                VppRoutePath(self.pg4.remote_ip4, self.pg4.sw_if_index),
+            ],
+        )
         route_10_0_0_3.add_vpp_config()
 
         port_pkts = []
         for ii in range(257):
         route_10_0_0_3.add_vpp_config()
 
         port_pkts = []
         for ii in range(257):
-            port_pkts.append(Ether(src=self.pg0.remote_mac,
-                                   dst=self.pg0.local_mac) /
-                             IP(dst="10.0.0.3", src="20.0.0.2") /
-                             UDP(sport=1234, dport=1234 + ii) /
-                             Raw(b'\xa5' * 100))
+            port_pkts.append(
+                Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+                / IP(dst="10.0.0.3", src="20.0.0.2")
+                / UDP(sport=1234, dport=1234 + ii)
+                / Raw(b"\xa5" * 100)
+            )
 
         self.send_and_expect_only(self.pg0, port_pkts, self.pg4)
 
         # bring the link back up
         self.pg3.link_up()
 
 
         self.send_and_expect_only(self.pg0, port_pkts, self.pg4)
 
         # bring the link back up
         self.pg3.link_up()
 
-        rx = self.send_and_expect_load_balancing(self.pg0, port_pkts,
-                                                 [self.pg3, self.pg4])
+        rx = self.send_and_expect_load_balancing(
+            self.pg0, port_pkts, [self.pg3, self.pg4]
+        )
         self.assertEqual(len(src_pkts), self.total_len(rx))
 
 
 class TestIPVlan0(VppTestCase):
         self.assertEqual(len(src_pkts), self.total_len(rx))
 
 
 class TestIPVlan0(VppTestCase):
-    """ IPv4 VLAN-0 """
+    """IPv4 VLAN-0"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -1415,15 +1547,15 @@ class TestIPVlan0(VppTestCase):
         super(TestIPVlan0, self).tearDown()
 
     def test_ip_vlan_0(self):
         super(TestIPVlan0, self).tearDown()
 
     def test_ip_vlan_0(self):
-        """ IP VLAN-0 """
+        """IP VLAN-0"""
 
 
-        pkts = (Ether(src=self.pg0.remote_mac,
-                      dst=self.pg0.local_mac) /
-                Dot1Q(vlan=0) /
-                IP(dst=self.pg1.remote_ip4,
-                   src=self.pg0.remote_ip4) /
-                UDP(sport=1234, dport=1234) /
-                Raw(b'\xa5' * 100)) * NUM_PKTS
+        pkts = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / Dot1Q(vlan=0)
+            / IP(dst=self.pg1.remote_ip4, src=self.pg0.remote_ip4)
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        ) * NUM_PKTS
 
         #
         # Expect that packets sent on VLAN-0 are forwarded on the
 
         #
         # Expect that packets sent on VLAN-0 are forwarded on the
@@ -1433,7 +1565,7 @@ class TestIPVlan0(VppTestCase):
 
 
 class IPPuntSetup(object):
 
 
 class IPPuntSetup(object):
-    """ Setup for IPv4 Punt Police/Redirect """
+    """Setup for IPv4 Punt Police/Redirect"""
 
     def punt_setup(self):
         self.create_pg_interfaces(range(4))
 
     def punt_setup(self):
         self.create_pg_interfaces(range(4))
@@ -1449,37 +1581,38 @@ class IPPuntSetup(object):
         af_ip4 = VppEnum.vl_api_address_family_t.ADDRESS_IP4
         udp_proto = VppEnum.vl_api_ip_proto_t.IP_API_PROTO_UDP
         punt_udp = {
         af_ip4 = VppEnum.vl_api_address_family_t.ADDRESS_IP4
         udp_proto = VppEnum.vl_api_ip_proto_t.IP_API_PROTO_UDP
         punt_udp = {
-            'type': pt_l4,
-            'punt': {
-                'l4': {
-                    'af': af_ip4,
-                    'protocol': udp_proto,
-                    'port': 1234,
+            "type": pt_l4,
+            "punt": {
+                "l4": {
+                    "af": af_ip4,
+                    "protocol": udp_proto,
+                    "port": 1234,
                 }
                 }
-            }
+            },
         }
 
         self.vapi.set_punt(is_add=1, punt=punt_udp)
 
         af_ip6 = VppEnum.vl_api_address_family_t.ADDRESS_IP6
         punt_udp = {
         }
 
         self.vapi.set_punt(is_add=1, punt=punt_udp)
 
         af_ip6 = VppEnum.vl_api_address_family_t.ADDRESS_IP6
         punt_udp = {
-            'type': pt_l4,
-            'punt': {
-                'l4': {
-                    'af': af_ip6,
-                    'protocol': udp_proto,
-                    'port': 1236,
+            "type": pt_l4,
+            "punt": {
+                "l4": {
+                    "af": af_ip6,
+                    "protocol": udp_proto,
+                    "port": 1236,
                 }
                 }
-            }
+            },
         }
 
         self.vapi.set_punt(is_add=1, punt=punt_udp)
 
         }
 
         self.vapi.set_punt(is_add=1, punt=punt_udp)
 
-        self.pkt = (Ether(src=self.pg0.remote_mac,
-                          dst=self.pg0.local_mac) /
-                    IP(src=self.pg0.remote_ip4, dst=self.pg0.local_ip4) /
-                    UDP(sport=1234, dport=1234) /
-                    Raw(b'\xa5' * 100))
+        self.pkt = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg0.local_ip4)
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
 
     def punt_teardown(self):
         for i in self.pg_interfaces:
 
     def punt_teardown(self):
         for i in self.pg_interfaces:
@@ -1488,7 +1621,7 @@ class IPPuntSetup(object):
 
 
 class TestIPPunt(IPPuntSetup, VppTestCase):
 
 
 class TestIPPunt(IPPuntSetup, VppTestCase):
-    """ IPv4 Punt Police/Redirect """
+    """IPv4 Punt Police/Redirect"""
 
     def setUp(self):
         super().setUp()
 
     def setUp(self):
         super().setUp()
@@ -1499,26 +1632,30 @@ class TestIPPunt(IPPuntSetup, VppTestCase):
         super().tearDown()
 
     def test_ip_punt_api_validation(self):
         super().tearDown()
 
     def test_ip_punt_api_validation(self):
-        """ IP punt API parameter validation """
+        """IP punt API parameter validation"""
 
         nh_addr = self.pg1.remote_ip4
 
         nh_addr = self.pg1.remote_ip4
-        punt = {"rx_sw_if_index": self.pg0.sw_if_index,
-                "af": VppEnum.vl_api_address_family_t.ADDRESS_IP4,
-                "n_paths": 1000000,
-                "paths": []}
+        punt = {
+            "rx_sw_if_index": self.pg0.sw_if_index,
+            "af": VppEnum.vl_api_address_family_t.ADDRESS_IP4,
+            "n_paths": 1000000,
+            "paths": [],
+        }
 
         with self.assertRaises(vpp_papi.VPPIOError):
             self.vapi.add_del_ip_punt_redirect_v2(punt=punt, is_add=True)
 
 
         with self.assertRaises(vpp_papi.VPPIOError):
             self.vapi.add_del_ip_punt_redirect_v2(punt=punt, is_add=True)
 
-        punt = {"rx_sw_if_index": self.pg0.sw_if_index,
-                "af": VppEnum.vl_api_address_family_t.ADDRESS_IP4,
-                "n_paths": 0,
-                "paths": []}
+        punt = {
+            "rx_sw_if_index": self.pg0.sw_if_index,
+            "af": VppEnum.vl_api_address_family_t.ADDRESS_IP4,
+            "n_paths": 0,
+            "paths": [],
+        }
 
         self.vapi.add_del_ip_punt_redirect_v2(punt=punt, is_add=True)
 
     def test_ip_punt(self):
 
         self.vapi.add_del_ip_punt_redirect_v2(punt=punt, is_add=True)
 
     def test_ip_punt(self):
-        """ IP punt police and redirect """
+        """IP punt police and redirect"""
 
         pkts = self.pkt * 1025
 
 
         pkts = self.pkt * 1025
 
@@ -1526,8 +1663,9 @@ class TestIPPunt(IPPuntSetup, VppTestCase):
         # Configure a punt redirect via pg1.
         #
         nh_addr = self.pg1.remote_ip4
         # Configure a punt redirect via pg1.
         #
         nh_addr = self.pg1.remote_ip4
-        ip_punt_redirect = VppIpPuntRedirect(self, self.pg0.sw_if_index,
-                                             self.pg1.sw_if_index, nh_addr)
+        ip_punt_redirect = VppIpPuntRedirect(
+            self, self.pg0.sw_if_index, self.pg1.sw_if_index, nh_addr
+        )
         ip_punt_redirect.add_vpp_config()
 
         self.send_and_expect(self.pg0, pkts, self.pg1)
         ip_punt_redirect.add_vpp_config()
 
         self.send_and_expect(self.pg0, pkts, self.pg1)
@@ -1554,9 +1692,9 @@ class TestIPPunt(IPPuntSetup, VppTestCase):
         stats = policer.get_stats()
 
         # Single rate policer - expect conform, violate but no exceed
         stats = policer.get_stats()
 
         # Single rate policer - expect conform, violate but no exceed
-        self.assertGreater(stats['conform_packets'], 0)
-        self.assertEqual(stats['exceed_packets'], 0)
-        self.assertGreater(stats['violate_packets'], 0)
+        self.assertGreater(stats["conform_packets"], 0)
+        self.assertEqual(stats["exceed_packets"], 0)
+        self.assertGreater(stats["violate_packets"], 0)
 
         self.assertGreater(len(rx), 0)
         self.assertLess(len(rx), len(pkts))
 
         self.assertGreater(len(rx), 0)
         self.assertLess(len(rx), len(pkts))
@@ -1572,32 +1710,28 @@ class TestIPPunt(IPPuntSetup, VppTestCase):
         # remove the redirect. expect full drop.
         #
         ip_punt_redirect.remove_vpp_config()
         # remove the redirect. expect full drop.
         #
         ip_punt_redirect.remove_vpp_config()
-        self.send_and_assert_no_replies(self.pg0, pkts,
-                                        "IP no punt config")
+        self.send_and_assert_no_replies(self.pg0, pkts, "IP no punt config")
 
         #
         # Add a redirect that is not input port selective
         #
 
         #
         # Add a redirect that is not input port selective
         #
-        ip_punt_redirect = VppIpPuntRedirect(self, 0xffffffff,
-                                             self.pg1.sw_if_index, nh_addr)
+        ip_punt_redirect = VppIpPuntRedirect(
+            self, 0xFFFFFFFF, self.pg1.sw_if_index, nh_addr
+        )
         ip_punt_redirect.add_vpp_config()
         self.send_and_expect(self.pg0, pkts, self.pg1)
         ip_punt_redirect.remove_vpp_config()
 
     def test_ip_punt_vrf(self):
         ip_punt_redirect.add_vpp_config()
         self.send_and_expect(self.pg0, pkts, self.pg1)
         ip_punt_redirect.remove_vpp_config()
 
     def test_ip_punt_vrf(self):
-        """ IP punt/local with VRFs """
+        """IP punt/local with VRFs"""
 
         # use a punt redirect to test if for-us  packets are accepted
         pkts = self.pkt * 1025
 
 
         # use a punt redirect to test if for-us  packets are accepted
         pkts = self.pkt * 1025
 
-        vlans_pg0 = [VppDot1QSubint(self, self.pg0, v)
-                     for v in range(100, 104)]
-        vlans_pg1 = [VppDot1QSubint(self, self.pg1, v)
-                     for v in range(100, 104)]
-        tbl4 = [VppIpTable(self, v).add_vpp_config()
-                for v in range(100, 104)]
-        tbl6 = [VppIpTable(self, v, True).add_vpp_config()
-                for v in range(100, 104)]
+        vlans_pg0 = [VppDot1QSubint(self, self.pg0, v) for v in range(100, 104)]
+        vlans_pg1 = [VppDot1QSubint(self, self.pg1, v) for v in range(100, 104)]
+        tbl4 = [VppIpTable(self, v).add_vpp_config() for v in range(100, 104)]
+        tbl6 = [VppIpTable(self, v, True).add_vpp_config() for v in range(100, 104)]
 
         for v in vlans_pg0 + vlans_pg1:
             v.admin_up()
 
         for v in vlans_pg0 + vlans_pg1:
             v.admin_up()
@@ -1608,27 +1742,35 @@ class TestIPPunt(IPPuntSetup, VppTestCase):
             v.resolve_arp()
             v.resolve_ndp()
 
             v.resolve_arp()
             v.resolve_ndp()
 
-        [VppIpPuntRedirect
-         (self,
-          vlans_pg0[i].sw_if_index,
-          vlans_pg1[i].sw_if_index,
-          vlans_pg1[i].remote_ip4).add_vpp_config()
-         for i in range(4)]
-        [VppIpPuntRedirect
-         (self,
-          vlans_pg0[i].sw_if_index,
-          vlans_pg1[i].sw_if_index,
-          vlans_pg1[i].remote_ip6).add_vpp_config()
-         for i in range(4)]
-
-        pkts = [(Ether(src=self.pg0.remote_mac,
-                       dst=self.pg0.local_mac) /
-                 Dot1Q(vlan=i.vlan) /
-                 IP(src=i.remote_ip4,
-                    dst=i.local_ip4) /
-                 UDP(sport=1234, dport=1234) /
-                 Raw(b'\xa5' * 100))
-                for i in vlans_pg0]
+        [
+            VppIpPuntRedirect(
+                self,
+                vlans_pg0[i].sw_if_index,
+                vlans_pg1[i].sw_if_index,
+                vlans_pg1[i].remote_ip4,
+            ).add_vpp_config()
+            for i in range(4)
+        ]
+        [
+            VppIpPuntRedirect(
+                self,
+                vlans_pg0[i].sw_if_index,
+                vlans_pg1[i].sw_if_index,
+                vlans_pg1[i].remote_ip6,
+            ).add_vpp_config()
+            for i in range(4)
+        ]
+
+        pkts = [
+            (
+                Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+                / Dot1Q(vlan=i.vlan)
+                / IP(src=i.remote_ip4, dst=i.local_ip4)
+                / UDP(sport=1234, dport=1234)
+                / Raw(b"\xa5" * 100)
+            )
+            for i in vlans_pg0
+        ]
 
         self.send_and_expect(self.pg0, pkts, self.pg1)
 
 
         self.send_and_expect(self.pg0, pkts, self.pg1)
 
@@ -1637,33 +1779,37 @@ class TestIPPunt(IPPuntSetup, VppTestCase):
         #
 
         # we reject packets for source addresses in the wrong vlan/VRF
         #
 
         # we reject packets for source addresses in the wrong vlan/VRF
-        pkts = [(Ether(src=self.pg0.remote_mac,
-                       dst=self.pg0.local_mac) /
-                 Dot1Q(vlan=i.vlan) /
-                 IP(src="1.1.1.1",
-                    dst=i.local_ip4) /
-                 UDP(sport=1234, dport=1234) /
-                 Raw(b'\xa5' * 100))
-                for i in vlans_pg0]
+        pkts = [
+            (
+                Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+                / Dot1Q(vlan=i.vlan)
+                / IP(src="1.1.1.1", dst=i.local_ip4)
+                / UDP(sport=1234, dport=1234)
+                / Raw(b"\xa5" * 100)
+            )
+            for i in vlans_pg0
+        ]
         # single and dual loop
         self.send_and_assert_no_replies(self.pg0, [pkts[0]])
         self.send_and_assert_no_replies(self.pg0, pkts)
 
         self.assert_error_counter_equal(
         # single and dual loop
         self.send_and_assert_no_replies(self.pg0, [pkts[0]])
         self.send_and_assert_no_replies(self.pg0, pkts)
 
         self.assert_error_counter_equal(
-            "/err/ip4-local/ip4 source lookup miss",
-            len(pkts) + 1)
+            "/err/ip4-local/ip4 source lookup miss", len(pkts) + 1
+        )
 
         # using the same source in different tables, should reject
         # for the table that the source is not present in
         # the first packet in the stream is drop
 
         # using the same source in different tables, should reject
         # for the table that the source is not present in
         # the first packet in the stream is drop
-        pkts = [(Ether(src=self.pg0.remote_mac,
-                       dst=self.pg0.local_mac) /
-                 Dot1Q(vlan=i.vlan) /
-                 IP(src=vlans_pg0[0].remote_ip4,
-                    dst=i.local_ip4) /
-                 UDP(sport=1234, dport=1234) /
-                 Raw(b'\xa5' * 100))
-                for i in vlans_pg0]
+        pkts = [
+            (
+                Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+                / Dot1Q(vlan=i.vlan)
+                / IP(src=vlans_pg0[0].remote_ip4, dst=i.local_ip4)
+                / UDP(sport=1234, dport=1234)
+                / Raw(b"\xa5" * 100)
+            )
+            for i in vlans_pg0
+        ]
         # single loop accept and drop
         # followed by both in the same frame/loop
         self.send_and_expect(self.pg0, [pkts[0]], self.pg1)
         # single loop accept and drop
         # followed by both in the same frame/loop
         self.send_and_expect(self.pg0, [pkts[0]], self.pg1)
@@ -1673,14 +1819,16 @@ class TestIPPunt(IPPuntSetup, VppTestCase):
         # using the same source in different tables, should reject
         # for the table that the source is not present in
         # the first packet in the stream is accept
         # using the same source in different tables, should reject
         # for the table that the source is not present in
         # the first packet in the stream is accept
-        pkts = [(Ether(src=self.pg0.remote_mac,
-                       dst=self.pg0.local_mac) /
-                 Dot1Q(vlan=i.vlan) /
-                 IP(src=vlans_pg0[3].remote_ip4,
-                    dst=i.local_ip4) /
-                 UDP(sport=1234, dport=1234) /
-                 Raw(b'\xa5' * 100))
-                for i in vlans_pg0]
+        pkts = [
+            (
+                Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+                / Dot1Q(vlan=i.vlan)
+                / IP(src=vlans_pg0[3].remote_ip4, dst=i.local_ip4)
+                / UDP(sport=1234, dport=1234)
+                / Raw(b"\xa5" * 100)
+            )
+            for i in vlans_pg0
+        ]
 
         # single loop accept and drop
         # followed by both in the same frame/loop
 
         # single loop accept and drop
         # followed by both in the same frame/loop
@@ -1693,33 +1841,37 @@ class TestIPPunt(IPPuntSetup, VppTestCase):
         #
 
         # we reject packets for source addresses in the wrong vlan/VRF
         #
 
         # we reject packets for source addresses in the wrong vlan/VRF
-        pkts = [(Ether(src=self.pg0.remote_mac,
-                       dst=self.pg0.local_mac) /
-                 Dot1Q(vlan=i.vlan) /
-                 IPv6(src="1::1",
-                      dst=i.local_ip6) /
-                 UDP(sport=1236, dport=1236) /
-                 Raw(b'\xa5' * 100))
-                for i in vlans_pg0]
+        pkts = [
+            (
+                Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+                / Dot1Q(vlan=i.vlan)
+                / IPv6(src="1::1", dst=i.local_ip6)
+                / UDP(sport=1236, dport=1236)
+                / Raw(b"\xa5" * 100)
+            )
+            for i in vlans_pg0
+        ]
         # single and dual loop
         self.send_and_assert_no_replies(self.pg0, [pkts[0]])
         self.send_and_assert_no_replies(self.pg0, pkts)
 
         self.assert_error_counter_equal(
         # single and dual loop
         self.send_and_assert_no_replies(self.pg0, [pkts[0]])
         self.send_and_assert_no_replies(self.pg0, pkts)
 
         self.assert_error_counter_equal(
-            "/err/ip6-input/ip6 source lookup miss",
-            len(pkts) + 1)
+            "/err/ip6-input/ip6 source lookup miss", len(pkts) + 1
+        )
 
         # using the same source in different tables, should reject
         # for the table that the source is not present in
         # the first packet in the stream is drop
 
         # using the same source in different tables, should reject
         # for the table that the source is not present in
         # the first packet in the stream is drop
-        pkts = [(Ether(src=self.pg0.remote_mac,
-                       dst=self.pg0.local_mac) /
-                 Dot1Q(vlan=i.vlan) /
-                 IPv6(src=vlans_pg0[0].remote_ip6,
-                      dst=i.local_ip6) /
-                 UDP(sport=1236, dport=1236) /
-                 Raw(b'\xa5' * 100))
-                for i in vlans_pg0]
+        pkts = [
+            (
+                Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+                / Dot1Q(vlan=i.vlan)
+                / IPv6(src=vlans_pg0[0].remote_ip6, dst=i.local_ip6)
+                / UDP(sport=1236, dport=1236)
+                / Raw(b"\xa5" * 100)
+            )
+            for i in vlans_pg0
+        ]
         # single loop accept and drop
         # followed by both in the same frame/loop
         self.send_and_expect(self.pg0, [pkts[0]], self.pg1)
         # single loop accept and drop
         # followed by both in the same frame/loop
         self.send_and_expect(self.pg0, [pkts[0]], self.pg1)
@@ -1729,14 +1881,16 @@ class TestIPPunt(IPPuntSetup, VppTestCase):
         # using the same source in different tables, should reject
         # for the table that the source is not present in
         # the first packet in the stream is accept
         # using the same source in different tables, should reject
         # for the table that the source is not present in
         # the first packet in the stream is accept
-        pkts = [(Ether(src=self.pg0.remote_mac,
-                       dst=self.pg0.local_mac) /
-                 Dot1Q(vlan=i.vlan) /
-                 IPv6(src=vlans_pg0[3].remote_ip6,
-                      dst=i.local_ip6) /
-                 UDP(sport=1236, dport=1236) /
-                 Raw(b'\xa5' * 100))
-                for i in vlans_pg0]
+        pkts = [
+            (
+                Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+                / Dot1Q(vlan=i.vlan)
+                / IPv6(src=vlans_pg0[3].remote_ip6, dst=i.local_ip6)
+                / UDP(sport=1236, dport=1236)
+                / Raw(b"\xa5" * 100)
+            )
+            for i in vlans_pg0
+        ]
 
         # single loop accept and drop
         # followed by both in the same frame/loop
 
         # single loop accept and drop
         # followed by both in the same frame/loop
@@ -1751,18 +1905,21 @@ class TestIPPunt(IPPuntSetup, VppTestCase):
             v.set_table_ip6(0)
 
     def test_ip_punt_dump(self):
             v.set_table_ip6(0)
 
     def test_ip_punt_dump(self):
-        """ IP4 punt redirect dump"""
+        """IP4 punt redirect dump"""
 
         #
         # Configure a punt redirects
         #
         nh_address = self.pg3.remote_ip4
 
         #
         # Configure a punt redirects
         #
         nh_address = self.pg3.remote_ip4
-        ipr_03 = VppIpPuntRedirect(self, self.pg0.sw_if_index,
-                                   self.pg3.sw_if_index, nh_address)
-        ipr_13 = VppIpPuntRedirect(self, self.pg1.sw_if_index,
-                                   self.pg3.sw_if_index, nh_address)
-        ipr_23 = VppIpPuntRedirect(self, self.pg2.sw_if_index,
-                                   self.pg3.sw_if_index, "0.0.0.0")
+        ipr_03 = VppIpPuntRedirect(
+            self, self.pg0.sw_if_index, self.pg3.sw_if_index, nh_address
+        )
+        ipr_13 = VppIpPuntRedirect(
+            self, self.pg1.sw_if_index, self.pg3.sw_if_index, nh_address
+        )
+        ipr_23 = VppIpPuntRedirect(
+            self, self.pg2.sw_if_index, self.pg3.sw_if_index, "0.0.0.0"
+        )
         ipr_03.add_vpp_config()
         ipr_13.add_vpp_config()
         ipr_23.add_vpp_config()
         ipr_03.add_vpp_config()
         ipr_13.add_vpp_config()
         ipr_23.add_vpp_config()
@@ -1777,16 +1934,17 @@ class TestIPPunt(IPPuntSetup, VppTestCase):
         #
         # Dump punt redirects for all interfaces
         #
         #
         # Dump punt redirects for all interfaces
         #
-        punts = self.vapi.ip_punt_redirect_dump(0xffffffff)
+        punts = self.vapi.ip_punt_redirect_dump(0xFFFFFFFF)
         self.assertEqual(len(punts), 3)
         for p in punts:
             self.assertEqual(p.punt.tx_sw_if_index, self.pg3.sw_if_index)
         self.assertNotEqual(punts[1].punt.nh, self.pg3.remote_ip4)
         self.assertEqual(len(punts), 3)
         for p in punts:
             self.assertEqual(p.punt.tx_sw_if_index, self.pg3.sw_if_index)
         self.assertNotEqual(punts[1].punt.nh, self.pg3.remote_ip4)
-        self.assertEqual(str(punts[2].punt.nh), '0.0.0.0')
+        self.assertEqual(str(punts[2].punt.nh), "0.0.0.0")
 
 
 class TestIPPuntHandoff(IPPuntSetup, VppTestCase):
 
 
 class TestIPPuntHandoff(IPPuntSetup, VppTestCase):
-    """ IPv4 Punt Policer thread handoff """
+    """IPv4 Punt Policer thread handoff"""
+
     vpp_worker_count = 2
 
     def setUp(self):
     vpp_worker_count = 2
 
     def setUp(self):
@@ -1798,26 +1956,40 @@ class TestIPPuntHandoff(IPPuntSetup, VppTestCase):
         super(TestIPPuntHandoff, self).tearDown()
 
     def test_ip_punt_policer_handoff(self):
         super(TestIPPuntHandoff, self).tearDown()
 
     def test_ip_punt_policer_handoff(self):
-        """ IP4 punt policer thread handoff """
+        """IP4 punt policer thread handoff"""
         pkts = self.pkt * NUM_PKTS
 
         #
         # Configure a punt redirect via pg1.
         #
         nh_addr = self.pg1.remote_ip4
         pkts = self.pkt * NUM_PKTS
 
         #
         # Configure a punt redirect via pg1.
         #
         nh_addr = self.pg1.remote_ip4
-        ip_punt_redirect = VppIpPuntRedirect(self, self.pg0.sw_if_index,
-                                             self.pg1.sw_if_index, nh_addr)
+        ip_punt_redirect = VppIpPuntRedirect(
+            self, self.pg0.sw_if_index, self.pg1.sw_if_index, nh_addr
+        )
         ip_punt_redirect.add_vpp_config()
 
         action_tx = PolicerAction(
         ip_punt_redirect.add_vpp_config()
 
         action_tx = PolicerAction(
-            VppEnum.vl_api_sse2_qos_action_type_t.SSE2_QOS_ACTION_API_TRANSMIT,
-            0)
+            VppEnum.vl_api_sse2_qos_action_type_t.SSE2_QOS_ACTION_API_TRANSMIT, 0
+        )
         #
         # This policer drops no packets, we are just
         # testing that they get to the right thread.
         #
         #
         # This policer drops no packets, we are just
         # testing that they get to the right thread.
         #
-        policer = VppPolicer(self, "ip4-punt", 400, 0, 10, 0, 1,
-                             0, 0, False, action_tx, action_tx, action_tx)
+        policer = VppPolicer(
+            self,
+            "ip4-punt",
+            400,
+            0,
+            10,
+            0,
+            1,
+            0,
+            0,
+            False,
+            action_tx,
+            action_tx,
+            action_tx,
+        )
         policer.add_vpp_config()
         ip_punt_policer = VppIpPuntPolicer(self, policer.policer_index)
         ip_punt_policer.add_vpp_config()
         policer.add_vpp_config()
         ip_punt_policer = VppIpPuntPolicer(self, policer.policer_index)
         ip_punt_policer.add_vpp_config()
@@ -1830,9 +2002,9 @@ class TestIPPuntHandoff(IPPuntSetup, VppTestCase):
         stats = policer.get_stats()
 
         # Single rate policer - expect conform, violate but no exceed
         stats = policer.get_stats()
 
         # Single rate policer - expect conform, violate but no exceed
-        self.assertGreater(stats['conform_packets'], 0)
-        self.assertEqual(stats['exceed_packets'], 0)
-        self.assertGreater(stats['violate_packets'], 0)
+        self.assertGreater(stats["conform_packets"], 0)
+        self.assertEqual(stats["exceed_packets"], 0)
+        self.assertGreater(stats["violate_packets"], 0)
 
         # Worker 0, should have done all the policing
         stats0 = policer.get_stats(worker=0)
 
         # Worker 0, should have done all the policing
         stats0 = policer.get_stats(worker=0)
@@ -1840,9 +2012,9 @@ class TestIPPuntHandoff(IPPuntSetup, VppTestCase):
 
         # Worker 1, should have handed everything off
         stats1 = policer.get_stats(worker=1)
 
         # Worker 1, should have handed everything off
         stats1 = policer.get_stats(worker=1)
-        self.assertEqual(stats1['conform_packets'], 0)
-        self.assertEqual(stats1['exceed_packets'], 0)
-        self.assertEqual(stats1['violate_packets'], 0)
+        self.assertEqual(stats1["conform_packets"], 0)
+        self.assertEqual(stats1["exceed_packets"], 0)
+        self.assertEqual(stats1["violate_packets"], 0)
 
         # Bind the policer to worker 1 and repeat
         policer.bind_vpp_config(1, True)
 
         # Bind the policer to worker 1 and repeat
         policer.bind_vpp_config(1, True)
@@ -1855,19 +2027,23 @@ class TestIPPuntHandoff(IPPuntSetup, VppTestCase):
         stats0 = policer.get_stats(worker=0)
         stats1 = policer.get_stats(worker=1)
 
         stats0 = policer.get_stats(worker=0)
         stats1 = policer.get_stats(worker=1)
 
-        self.assertGreater(stats0['conform_packets'], 0)
-        self.assertEqual(stats0['exceed_packets'], 0)
-        self.assertGreater(stats0['violate_packets'], 0)
+        self.assertGreater(stats0["conform_packets"], 0)
+        self.assertEqual(stats0["exceed_packets"], 0)
+        self.assertGreater(stats0["violate_packets"], 0)
 
 
-        self.assertGreater(stats1['conform_packets'], 0)
-        self.assertEqual(stats1['exceed_packets'], 0)
-        self.assertGreater(stats1['violate_packets'], 0)
+        self.assertGreater(stats1["conform_packets"], 0)
+        self.assertEqual(stats1["exceed_packets"], 0)
+        self.assertGreater(stats1["violate_packets"], 0)
 
 
-        self.assertEqual(stats0['conform_packets'] + stats1['conform_packets'],
-                         stats['conform_packets'])
+        self.assertEqual(
+            stats0["conform_packets"] + stats1["conform_packets"],
+            stats["conform_packets"],
+        )
 
 
-        self.assertEqual(stats0['violate_packets'] + stats1['violate_packets'],
-                         stats['violate_packets'])
+        self.assertEqual(
+            stats0["violate_packets"] + stats1["violate_packets"],
+            stats["violate_packets"],
+        )
 
         # Unbind the policer and repeat
         policer.bind_vpp_config(1, False)
 
         # Unbind the policer and repeat
         policer.bind_vpp_config(1, False)
@@ -1880,11 +2056,9 @@ class TestIPPuntHandoff(IPPuntSetup, VppTestCase):
         stats0new = policer.get_stats(worker=0)
         stats1new = policer.get_stats(worker=1)
 
         stats0new = policer.get_stats(worker=0)
         stats1new = policer.get_stats(worker=1)
 
-        self.assertGreater(stats0new['conform_packets'],
-                           stats0['conform_packets'])
-        self.assertEqual(stats0new['exceed_packets'], 0)
-        self.assertGreater(stats0new['violate_packets'],
-                           stats0['violate_packets'])
+        self.assertGreater(stats0new["conform_packets"], stats0["conform_packets"])
+        self.assertEqual(stats0new["exceed_packets"], 0)
+        self.assertGreater(stats0new["violate_packets"], stats0["violate_packets"])
 
         self.assertEqual(stats1, stats1new)
 
 
         self.assertEqual(stats1, stats1new)
 
@@ -1897,7 +2071,7 @@ class TestIPPuntHandoff(IPPuntSetup, VppTestCase):
 
 
 class TestIPDeag(VppTestCase):
 
 
 class TestIPDeag(VppTestCase):
-    """ IPv4 Deaggregate Routes """
+    """IPv4 Deaggregate Routes"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -1924,7 +2098,7 @@ class TestIPDeag(VppTestCase):
             i.admin_down()
 
     def test_ip_deag(self):
             i.admin_down()
 
     def test_ip_deag(self):
-        """ IP Deag Routes """
+        """IP Deag Routes"""
 
         #
         # Create a table to be used for:
 
         #
         # Create a table to be used for:
@@ -1940,16 +2114,22 @@ class TestIPDeag(VppTestCase):
         # Add a route in the default table to point to a deag/
         # second lookup in each of these tables
         #
         # Add a route in the default table to point to a deag/
         # second lookup in each of these tables
         #
-        route_to_dst = VppIpRoute(self, "1.1.1.1", 32,
-                                  [VppRoutePath("0.0.0.0",
-                                                0xffffffff,
-                                                nh_table_id=1)])
+        route_to_dst = VppIpRoute(
+            self, "1.1.1.1", 32, [VppRoutePath("0.0.0.0", 0xFFFFFFFF, nh_table_id=1)]
+        )
         route_to_src = VppIpRoute(
         route_to_src = VppIpRoute(
-            self, "1.1.1.2", 32,
-            [VppRoutePath("0.0.0.0",
-                          0xffffffff,
-                          nh_table_id=2,
-                          type=FibPathType.FIB_PATH_TYPE_SOURCE_LOOKUP)])
+            self,
+            "1.1.1.2",
+            32,
+            [
+                VppRoutePath(
+                    "0.0.0.0",
+                    0xFFFFFFFF,
+                    nh_table_id=2,
+                    type=FibPathType.FIB_PATH_TYPE_SOURCE_LOOKUP,
+                )
+            ],
+        )
         route_to_dst.add_vpp_config()
         route_to_src.add_vpp_config()
 
         route_to_dst.add_vpp_config()
         route_to_src.add_vpp_config()
 
@@ -1957,31 +2137,34 @@ class TestIPDeag(VppTestCase):
         # packets to these destination are dropped, since they'll
         # hit the respective default routes in the second table
         #
         # packets to these destination are dropped, since they'll
         # hit the respective default routes in the second table
         #
-        p_dst = (Ether(src=self.pg0.remote_mac,
-                       dst=self.pg0.local_mac) /
-                 IP(src="5.5.5.5", dst="1.1.1.1") /
-                 TCP(sport=1234, dport=1234) /
-                 Raw(b'\xa5' * 100))
-        p_src = (Ether(src=self.pg0.remote_mac,
-                       dst=self.pg0.local_mac) /
-                 IP(src="2.2.2.2", dst="1.1.1.2") /
-                 TCP(sport=1234, dport=1234) /
-                 Raw(b'\xa5' * 100))
+        p_dst = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src="5.5.5.5", dst="1.1.1.1")
+            / TCP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
+        p_src = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src="2.2.2.2", dst="1.1.1.2")
+            / TCP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
         pkts_dst = p_dst * 257
         pkts_src = p_src * 257
 
         pkts_dst = p_dst * 257
         pkts_src = p_src * 257
 
-        self.send_and_assert_no_replies(self.pg0, pkts_dst,
-                                        "IP in dst table")
-        self.send_and_assert_no_replies(self.pg0, pkts_src,
-                                        "IP in src table")
+        self.send_and_assert_no_replies(self.pg0, pkts_dst, "IP in dst table")
+        self.send_and_assert_no_replies(self.pg0, pkts_src, "IP in src table")
 
         #
         # add a route in the dst table to forward via pg1
         #
 
         #
         # add a route in the dst table to forward via pg1
         #
-        route_in_dst = VppIpRoute(self, "1.1.1.1", 32,
-                                  [VppRoutePath(self.pg1.remote_ip4,
-                                                self.pg1.sw_if_index)],
-                                  table_id=1)
+        route_in_dst = VppIpRoute(
+            self,
+            "1.1.1.1",
+            32,
+            [VppRoutePath(self.pg1.remote_ip4, self.pg1.sw_if_index)],
+            table_id=1,
+        )
         route_in_dst.add_vpp_config()
 
         self.send_and_expect(self.pg0, pkts_dst, self.pg1)
         route_in_dst.add_vpp_config()
 
         self.send_and_expect(self.pg0, pkts_dst, self.pg1)
@@ -1989,34 +2172,36 @@ class TestIPDeag(VppTestCase):
         #
         # add a route in the src table to forward via pg2
         #
         #
         # add a route in the src table to forward via pg2
         #
-        route_in_src = VppIpRoute(self, "2.2.2.2", 32,
-                                  [VppRoutePath(self.pg2.remote_ip4,
-                                                self.pg2.sw_if_index)],
-                                  table_id=2)
+        route_in_src = VppIpRoute(
+            self,
+            "2.2.2.2",
+            32,
+            [VppRoutePath(self.pg2.remote_ip4, self.pg2.sw_if_index)],
+            table_id=2,
+        )
         route_in_src.add_vpp_config()
         self.send_and_expect(self.pg0, pkts_src, self.pg2)
 
         #
         # loop in the lookup DP
         #
         route_in_src.add_vpp_config()
         self.send_and_expect(self.pg0, pkts_src, self.pg2)
 
         #
         # loop in the lookup DP
         #
-        route_loop = VppIpRoute(self, "2.2.2.3", 32,
-                                [VppRoutePath("0.0.0.0",
-                                              0xffffffff,
-                                              nh_table_id=0)])
+        route_loop = VppIpRoute(
+            self, "2.2.2.3", 32, [VppRoutePath("0.0.0.0", 0xFFFFFFFF, nh_table_id=0)]
+        )
         route_loop.add_vpp_config()
 
         route_loop.add_vpp_config()
 
-        p_l = (Ether(src=self.pg0.remote_mac,
-                     dst=self.pg0.local_mac) /
-               IP(src="2.2.2.4", dst="2.2.2.3") /
-               TCP(sport=1234, dport=1234) /
-               Raw(b'\xa5' * 100))
+        p_l = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src="2.2.2.4", dst="2.2.2.3")
+            / TCP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
 
 
-        self.send_and_assert_no_replies(self.pg0, p_l * 257,
-                                        "IP lookup loop")
+        self.send_and_assert_no_replies(self.pg0, p_l * 257, "IP lookup loop")
 
 
 class TestIPInput(VppTestCase):
 
 
 class TestIPInput(VppTestCase):
-    """ IPv4 Input Exceptions """
+    """IPv4 Input Exceptions"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -2043,7 +2228,7 @@ class TestIPInput(VppTestCase):
             i.admin_down()
 
     def test_ip_input(self):
             i.admin_down()
 
     def test_ip_input(self):
-        """ IP Input Exceptions """
+        """IP Input Exceptions"""
 
         # i can't find a way in scapy to construct an IP packet
         # with a length less than the IP header length
 
         # i can't find a way in scapy to construct an IP packet
         # with a length less than the IP header length
@@ -2051,103 +2236,95 @@ class TestIPInput(VppTestCase):
         #
         # Packet too short - this is forwarded
         #
         #
         # Packet too short - this is forwarded
         #
-        p_short = (Ether(src=self.pg0.remote_mac,
-                         dst=self.pg0.local_mac) /
-                   IP(src=self.pg0.remote_ip4,
-                      dst=self.pg1.remote_ip4,
-                      len=40) /
-                   UDP(sport=1234, dport=1234) /
-                   Raw(b'\xa5' * 100))
+        p_short = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4, len=40)
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
 
         rx = self.send_and_expect(self.pg0, p_short * NUM_PKTS, self.pg1)
 
         #
         # Packet too long - this is dropped
         #
 
         rx = self.send_and_expect(self.pg0, p_short * NUM_PKTS, self.pg1)
 
         #
         # Packet too long - this is dropped
         #
-        p_long = (Ether(src=self.pg0.remote_mac,
-                        dst=self.pg0.local_mac) /
-                  IP(src=self.pg0.remote_ip4,
-                     dst=self.pg1.remote_ip4,
-                     len=400) /
-                  UDP(sport=1234, dport=1234) /
-                  Raw(b'\xa5' * 100))
+        p_long = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4, len=400)
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
 
 
-        rx = self.send_and_assert_no_replies(self.pg0, p_long * NUM_PKTS,
-                                             "too long")
+        rx = self.send_and_assert_no_replies(self.pg0, p_long * NUM_PKTS, "too long")
 
         #
         # bad chksum - this is dropped
         #
 
         #
         # bad chksum - this is dropped
         #
-        p_chksum = (Ether(src=self.pg0.remote_mac,
-                          dst=self.pg0.local_mac) /
-                    IP(src=self.pg0.remote_ip4,
-                       dst=self.pg1.remote_ip4,
-                       chksum=400) /
-                    UDP(sport=1234, dport=1234) /
-                    Raw(b'\xa5' * 100))
+        p_chksum = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4, chksum=400)
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
 
 
-        rx = self.send_and_assert_no_replies(self.pg0, p_chksum * NUM_PKTS,
-                                             "bad checksum")
+        rx = self.send_and_assert_no_replies(
+            self.pg0, p_chksum * NUM_PKTS, "bad checksum"
+        )
 
         #
         # bad version - this is dropped
         #
 
         #
         # bad version - this is dropped
         #
-        p_ver = (Ether(src=self.pg0.remote_mac,
-                       dst=self.pg0.local_mac) /
-                 IP(src=self.pg0.remote_ip4,
-                    dst=self.pg1.remote_ip4,
-                    version=3) /
-                 UDP(sport=1234, dport=1234) /
-                 Raw(b'\xa5' * 100))
+        p_ver = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4, version=3)
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
 
 
-        rx = self.send_and_assert_no_replies(self.pg0, p_ver * NUM_PKTS,
-                                             "funky version")
+        rx = self.send_and_assert_no_replies(
+            self.pg0, p_ver * NUM_PKTS, "funky version"
+        )
 
         #
         # fragment offset 1 - this is dropped
         #
 
         #
         # fragment offset 1 - this is dropped
         #
-        p_frag = (Ether(src=self.pg0.remote_mac,
-                        dst=self.pg0.local_mac) /
-                  IP(src=self.pg0.remote_ip4,
-                     dst=self.pg1.remote_ip4,
-                     frag=1) /
-                  UDP(sport=1234, dport=1234) /
-                  Raw(b'\xa5' * 100))
+        p_frag = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4, frag=1)
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
 
 
-        rx = self.send_and_assert_no_replies(self.pg0, p_frag * NUM_PKTS,
-                                             "frag offset")
+        rx = self.send_and_assert_no_replies(self.pg0, p_frag * NUM_PKTS, "frag offset")
 
         #
         # TTL expired packet
         #
 
         #
         # TTL expired packet
         #
-        p_ttl = (Ether(src=self.pg0.remote_mac,
-                       dst=self.pg0.local_mac) /
-                 IP(src=self.pg0.remote_ip4,
-                    dst=self.pg1.remote_ip4,
-                    ttl=1) /
-                 UDP(sport=1234, dport=1234) /
-                 Raw(b'\xa5' * 100))
+        p_ttl = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4, ttl=1)
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
 
         rxs = self.send_and_expect_some(self.pg0, p_ttl * NUM_PKTS, self.pg0)
 
         for rx in rxs:
             icmp = rx[ICMP]
             self.assertEqual(icmptypes[icmp.type], "time-exceeded")
 
         rxs = self.send_and_expect_some(self.pg0, p_ttl * NUM_PKTS, self.pg0)
 
         for rx in rxs:
             icmp = rx[ICMP]
             self.assertEqual(icmptypes[icmp.type], "time-exceeded")
-            self.assertEqual(icmpcodes[icmp.type][icmp.code],
-                             "ttl-zero-during-transit")
+            self.assertEqual(icmpcodes[icmp.type][icmp.code], "ttl-zero-during-transit")
             self.assertEqual(icmp.src, self.pg0.remote_ip4)
             self.assertEqual(icmp.dst, self.pg1.remote_ip4)
 
         #
         # MTU exceeded
         #
             self.assertEqual(icmp.src, self.pg0.remote_ip4)
             self.assertEqual(icmp.dst, self.pg1.remote_ip4)
 
         #
         # MTU exceeded
         #
-        p_mtu = (Ether(src=self.pg0.remote_mac,
-                       dst=self.pg0.local_mac) /
-                 IP(src=self.pg0.remote_ip4,
-                    dst=self.pg1.remote_ip4,
-                    ttl=10, flags='DF') /
-                 UDP(sport=1234, dport=1234) /
-                 Raw(b'\xa5' * 2000))
+        p_mtu = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4, ttl=10, flags="DF")
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 2000)
+        )
 
         self.vapi.sw_interface_set_mtu(self.pg1.sw_if_index, [1500, 0, 0, 0])
 
 
         self.vapi.sw_interface_set_mtu(self.pg1.sw_if_index, [1500, 0, 0, 0])
 
@@ -2156,8 +2333,7 @@ class TestIPInput(VppTestCase):
         for rx in rxs:
             icmp = rx[ICMP]
             self.assertEqual(icmptypes[icmp.type], "dest-unreach")
         for rx in rxs:
             icmp = rx[ICMP]
             self.assertEqual(icmptypes[icmp.type], "dest-unreach")
-            self.assertEqual(icmpcodes[icmp.type][icmp.code],
-                             "fragmentation-needed")
+            self.assertEqual(icmpcodes[icmp.type][icmp.code], "fragmentation-needed")
             self.assertEqual(icmp.nexthopmtu, 1500)
             self.assertEqual(icmp.src, self.pg0.remote_ip4)
             self.assertEqual(icmp.dst, self.pg1.remote_ip4)
             self.assertEqual(icmp.nexthopmtu, 1500)
             self.assertEqual(icmp.src, self.pg0.remote_ip4)
             self.assertEqual(icmp.dst, self.pg1.remote_ip4)
@@ -2171,25 +2347,25 @@ class TestIPInput(VppTestCase):
         #
         # source address 0.0.0.0 and 25.255.255.255 and for-us
         #
         #
         # source address 0.0.0.0 and 25.255.255.255 and for-us
         #
-        p_s0 = (Ether(src=self.pg0.remote_mac,
-                      dst=self.pg0.local_mac) /
-                IP(src="0.0.0.0",
-                   dst=self.pg0.local_ip4) /
-                ICMP(id=4, seq=4) /
-                Raw(load=b'\x0a' * 18))
+        p_s0 = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src="0.0.0.0", dst=self.pg0.local_ip4)
+            / ICMP(id=4, seq=4)
+            / Raw(load=b"\x0a" * 18)
+        )
         rx = self.send_and_assert_no_replies(self.pg0, p_s0 * 17)
 
         rx = self.send_and_assert_no_replies(self.pg0, p_s0 * 17)
 
-        p_s0 = (Ether(src=self.pg0.remote_mac,
-                      dst=self.pg0.local_mac) /
-                IP(src="255.255.255.255",
-                   dst=self.pg0.local_ip4) /
-                ICMP(id=4, seq=4) /
-                Raw(load=b'\x0a' * 18))
+        p_s0 = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src="255.255.255.255", dst=self.pg0.local_ip4)
+            / ICMP(id=4, seq=4)
+            / Raw(load=b"\x0a" * 18)
+        )
         rx = self.send_and_assert_no_replies(self.pg0, p_s0 * 17)
 
 
 class TestIPDirectedBroadcast(VppTestCase):
         rx = self.send_and_assert_no_replies(self.pg0, p_s0 * 17)
 
 
 class TestIPDirectedBroadcast(VppTestCase):
-    """ IPv4 Directed Broadcast """
+    """IPv4 Directed Broadcast"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -2213,26 +2389,25 @@ class TestIPDirectedBroadcast(VppTestCase):
             i.admin_down()
 
     def test_ip_input(self):
             i.admin_down()
 
     def test_ip_input(self):
-        """ IP Directed Broadcast """
+        """IP Directed Broadcast"""
 
         #
         # set the directed broadcast on pg0 first, then config IP4 addresses
         # for pg1 directed broadcast is always disabled
 
         #
         # set the directed broadcast on pg0 first, then config IP4 addresses
         # for pg1 directed broadcast is always disabled
-        self.vapi.sw_interface_set_ip_directed_broadcast(
-            self.pg0.sw_if_index, 1)
-
-        p0 = (Ether(src=self.pg1.remote_mac,
-                    dst=self.pg1.local_mac) /
-              IP(src="1.1.1.1",
-                 dst=self.pg0._local_ip4_bcast) /
-              UDP(sport=1234, dport=1234) /
-              Raw(b'\xa5' * 2000))
-        p1 = (Ether(src=self.pg0.remote_mac,
-                    dst=self.pg0.local_mac) /
-              IP(src="1.1.1.1",
-                 dst=self.pg1._local_ip4_bcast) /
-              UDP(sport=1234, dport=1234) /
-              Raw(b'\xa5' * 2000))
+        self.vapi.sw_interface_set_ip_directed_broadcast(self.pg0.sw_if_index, 1)
+
+        p0 = (
+            Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
+            / IP(src="1.1.1.1", dst=self.pg0._local_ip4_bcast)
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 2000)
+        )
+        p1 = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src="1.1.1.1", dst=self.pg1._local_ip4_bcast)
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 2000)
+        )
 
         self.pg0.config_ip4()
         self.pg0.resolve_arp()
 
         self.pg0.config_ip4()
         self.pg0.resolve_arp()
@@ -2245,19 +2420,19 @@ class TestIPDirectedBroadcast(VppTestCase):
         rx = self.send_and_expect(self.pg1, p0 * NUM_PKTS, self.pg0)
         self.assertTrue(rx[0][Ether].dst, "ff:ff:ff:ff:ff:ff")
 
         rx = self.send_and_expect(self.pg1, p0 * NUM_PKTS, self.pg0)
         self.assertTrue(rx[0][Ether].dst, "ff:ff:ff:ff:ff:ff")
 
-        self.send_and_assert_no_replies(self.pg0, p1 * NUM_PKTS,
-                                        "directed broadcast disabled")
+        self.send_and_assert_no_replies(
+            self.pg0, p1 * NUM_PKTS, "directed broadcast disabled"
+        )
 
         #
         # toggle directed broadcast on pg0
         #
 
         #
         # toggle directed broadcast on pg0
         #
-        self.vapi.sw_interface_set_ip_directed_broadcast(
-            self.pg0.sw_if_index, 0)
-        self.send_and_assert_no_replies(self.pg1, p0 * NUM_PKTS,
-                                        "directed broadcast disabled")
+        self.vapi.sw_interface_set_ip_directed_broadcast(self.pg0.sw_if_index, 0)
+        self.send_and_assert_no_replies(
+            self.pg1, p0 * NUM_PKTS, "directed broadcast disabled"
+        )
 
 
-        self.vapi.sw_interface_set_ip_directed_broadcast(
-            self.pg0.sw_if_index, 1)
+        self.vapi.sw_interface_set_ip_directed_broadcast(self.pg0.sw_if_index, 1)
         rx = self.send_and_expect(self.pg1, p0 * NUM_PKTS, self.pg0)
 
         self.pg0.unconfig_ip4()
         rx = self.send_and_expect(self.pg1, p0 * NUM_PKTS, self.pg0)
 
         self.pg0.unconfig_ip4()
@@ -2265,7 +2440,7 @@ class TestIPDirectedBroadcast(VppTestCase):
 
 
 class TestIPLPM(VppTestCase):
 
 
 class TestIPLPM(VppTestCase):
-    """ IPv4 longest Prefix Match """
+    """IPv4 longest Prefix Match"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -2292,29 +2467,35 @@ class TestIPLPM(VppTestCase):
             i.unconfig_ip4()
 
     def test_ip_lpm(self):
             i.unconfig_ip4()
 
     def test_ip_lpm(self):
-        """ IP longest Prefix Match """
+        """IP longest Prefix Match"""
 
 
-        s_24 = VppIpRoute(self, "10.1.2.0", 24,
-                          [VppRoutePath(self.pg1.remote_ip4,
-                                        self.pg1.sw_if_index)])
+        s_24 = VppIpRoute(
+            self,
+            "10.1.2.0",
+            24,
+            [VppRoutePath(self.pg1.remote_ip4, self.pg1.sw_if_index)],
+        )
         s_24.add_vpp_config()
         s_24.add_vpp_config()
-        s_8 = VppIpRoute(self, "10.0.0.0", 8,
-                         [VppRoutePath(self.pg2.remote_ip4,
-                                       self.pg2.sw_if_index)])
+        s_8 = VppIpRoute(
+            self,
+            "10.0.0.0",
+            8,
+            [VppRoutePath(self.pg2.remote_ip4, self.pg2.sw_if_index)],
+        )
         s_8.add_vpp_config()
 
         s_8.add_vpp_config()
 
-        p_8 = (Ether(src=self.pg0.remote_mac,
-                     dst=self.pg0.local_mac) /
-               IP(src="1.1.1.1",
-                  dst="10.1.1.1") /
-               UDP(sport=1234, dport=1234) /
-               Raw(b'\xa5' * 2000))
-        p_24 = (Ether(src=self.pg0.remote_mac,
-                      dst=self.pg0.local_mac) /
-                IP(src="1.1.1.1",
-                   dst="10.1.2.1") /
-                UDP(sport=1234, dport=1234) /
-                Raw(b'\xa5' * 2000))
+        p_8 = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src="1.1.1.1", dst="10.1.1.1")
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 2000)
+        )
+        p_24 = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src="1.1.1.1", dst="10.1.2.1")
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 2000)
+        )
 
         self.logger.info(self.vapi.cli("sh ip fib mtrie"))
         rx = self.send_and_expect(self.pg0, p_8 * NUM_PKTS, self.pg2)
 
         self.logger.info(self.vapi.cli("sh ip fib mtrie"))
         rx = self.send_and_expect(self.pg0, p_8 * NUM_PKTS, self.pg2)
@@ -2323,7 +2504,7 @@ class TestIPLPM(VppTestCase):
 
 @tag_fixme_vpp_workers
 class TestIPv4Frag(VppTestCase):
 
 @tag_fixme_vpp_workers
 class TestIPv4Frag(VppTestCase):
-    """ IPv4 fragmentation """
+    """IPv4 fragmentation"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -2344,25 +2525,29 @@ class TestIPv4Frag(VppTestCase):
         super(TestIPv4Frag, cls).tearDownClass()
 
     def test_frag_large_packets(self):
         super(TestIPv4Frag, cls).tearDownClass()
 
     def test_frag_large_packets(self):
-        """ Fragmentation of large packets """
+        """Fragmentation of large packets"""
 
         self.vapi.cli("adjacency counters enable")
 
 
         self.vapi.cli("adjacency counters enable")
 
-        p = (Ether(dst=self.src_if.local_mac, src=self.src_if.remote_mac) /
-             IP(src=self.src_if.remote_ip4, dst=self.dst_if.remote_ip4) /
-             UDP(sport=1234, dport=5678) / Raw())
+        p = (
+            Ether(dst=self.src_if.local_mac, src=self.src_if.remote_mac)
+            / IP(src=self.src_if.remote_ip4, dst=self.dst_if.remote_ip4)
+            / UDP(sport=1234, dport=5678)
+            / Raw()
+        )
         self.extend_packet(p, 6000, "abcde")
         saved_payload = p[Raw].load
 
         self.extend_packet(p, 6000, "abcde")
         saved_payload = p[Raw].load
 
-        nbr = VppNeighbor(self,
-                          self.dst_if.sw_if_index,
-                          self.dst_if.remote_mac,
-                          self.dst_if.remote_ip4).add_vpp_config()
+        nbr = VppNeighbor(
+            self,
+            self.dst_if.sw_if_index,
+            self.dst_if.remote_mac,
+            self.dst_if.remote_ip4,
+        ).add_vpp_config()
 
         # Force fragmentation by setting MTU of output interface
         # lower than packet size
 
         # Force fragmentation by setting MTU of output interface
         # lower than packet size
-        self.vapi.sw_interface_set_mtu(self.dst_if.sw_if_index,
-                                       [5000, 0, 0, 0])
+        self.vapi.sw_interface_set_mtu(self.dst_if.sw_if_index, [5000, 0, 0, 0])
 
         self.pg_enable_capture()
         self.src_if.add_stream(p)
 
         self.pg_enable_capture()
         self.src_if.add_stream(p)
@@ -2373,10 +2558,10 @@ class TestIPv4Frag(VppTestCase):
         packets = self.dst_if.get_capture(3)
 
         # we should show 3 packets thru the neighbor
         packets = self.dst_if.get_capture(3)
 
         # we should show 3 packets thru the neighbor
-        self.assertEqual(3, nbr.get_stats()['packets'])
+        self.assertEqual(3, nbr.get_stats()["packets"])
 
         # Assume VPP sends the fragments in order
 
         # Assume VPP sends the fragments in order
-        payload = b''
+        payload = b""
         for p in packets:
             payload_offset = p.frag * 8
             if payload_offset > 0:
         for p in packets:
             payload_offset = p.frag * 8
             if payload_offset > 0:
@@ -2387,7 +2572,7 @@ class TestIPv4Frag(VppTestCase):
 
 
 class TestIPReplace(VppTestCase):
 
 
 class TestIPReplace(VppTestCase):
-    """ IPv4 Table Replace """
+    """IPv4 Table Replace"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -2420,7 +2605,7 @@ class TestIPReplace(VppTestCase):
             i.unconfig_ip4()
 
     def test_replace(self):
             i.unconfig_ip4()
 
     def test_replace(self):
-        """ IP Table Replace """
+        """IP Table Replace"""
 
         MRouteItfFlags = VppEnum.vl_api_mfib_itf_flags_t
         MRouteEntryFlags = VppEnum.vl_api_mfib_entry_flags_t
 
         MRouteItfFlags = VppEnum.vl_api_mfib_itf_flags_t
         MRouteEntryFlags = VppEnum.vl_api_mfib_entry_flags_t
@@ -2432,27 +2617,46 @@ class TestIPReplace(VppTestCase):
         for ii, t in enumerate(self.tables):
             for jj in range(N_ROUTES):
                 uni = VppIpRoute(
         for ii, t in enumerate(self.tables):
             for jj in range(N_ROUTES):
                 uni = VppIpRoute(
-                    self, "10.0.0.%d" % jj, 32,
-                    [VppRoutePath(links[ii].remote_hosts[0].ip4,
-                                  links[ii].sw_if_index),
-                     VppRoutePath(links[ii].remote_hosts[1].ip4,
-                                  links[ii].sw_if_index)],
-                    table_id=t.table_id).add_vpp_config()
+                    self,
+                    "10.0.0.%d" % jj,
+                    32,
+                    [
+                        VppRoutePath(
+                            links[ii].remote_hosts[0].ip4, links[ii].sw_if_index
+                        ),
+                        VppRoutePath(
+                            links[ii].remote_hosts[1].ip4, links[ii].sw_if_index
+                        ),
+                    ],
+                    table_id=t.table_id,
+                ).add_vpp_config()
                 multi = VppIpMRoute(
                 multi = VppIpMRoute(
-                    self, "0.0.0.0",
-                    "239.0.0.%d" % jj, 32,
+                    self,
+                    "0.0.0.0",
+                    "239.0.0.%d" % jj,
+                    32,
                     MRouteEntryFlags.MFIB_API_ENTRY_FLAG_NONE,
                     MRouteEntryFlags.MFIB_API_ENTRY_FLAG_NONE,
-                    [VppMRoutePath(self.pg0.sw_if_index,
-                                   MRouteItfFlags.MFIB_API_ITF_FLAG_ACCEPT),
-                     VppMRoutePath(self.pg1.sw_if_index,
-                                   MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD),
-                     VppMRoutePath(self.pg2.sw_if_index,
-                                   MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD),
-                     VppMRoutePath(self.pg3.sw_if_index,
-                                   MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD)],
-                    table_id=t.table_id).add_vpp_config()
-                routes[ii].append({'uni': uni,
-                                   'multi': multi})
+                    [
+                        VppMRoutePath(
+                            self.pg0.sw_if_index,
+                            MRouteItfFlags.MFIB_API_ITF_FLAG_ACCEPT,
+                        ),
+                        VppMRoutePath(
+                            self.pg1.sw_if_index,
+                            MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD,
+                        ),
+                        VppMRoutePath(
+                            self.pg2.sw_if_index,
+                            MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD,
+                        ),
+                        VppMRoutePath(
+                            self.pg3.sw_if_index,
+                            MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD,
+                        ),
+                    ],
+                    table_id=t.table_id,
+                ).add_vpp_config()
+                routes[ii].append({"uni": uni, "multi": multi})
 
         #
         # replace the tables a few times
 
         #
         # replace the tables a few times
@@ -2467,14 +2671,14 @@ class TestIPReplace(VppTestCase):
                 dump = t.dump()
                 mdump = t.mdump()
                 for r in routes[ii]:
                 dump = t.dump()
                 mdump = t.mdump()
                 for r in routes[ii]:
-                    self.assertTrue(find_route_in_dump(dump, r['uni'], t))
-                    self.assertTrue(find_mroute_in_dump(mdump, r['multi'], t))
+                    self.assertTrue(find_route_in_dump(dump, r["uni"], t))
+                    self.assertTrue(find_mroute_in_dump(mdump, r["multi"], t))
 
             # redownload the even numbered routes
             for ii, t in enumerate(self.tables):
                 for jj in range(0, N_ROUTES, 2):
 
             # redownload the even numbered routes
             for ii, t in enumerate(self.tables):
                 for jj in range(0, N_ROUTES, 2):
-                    routes[ii][jj]['uni'].add_vpp_config()
-                    routes[ii][jj]['multi'].add_vpp_config()
+                    routes[ii][jj]["uni"].add_vpp_config()
+                    routes[ii][jj]["multi"].add_vpp_config()
 
             # signal each table replace_end
             for t in self.tables:
 
             # signal each table replace_end
             for t in self.tables:
@@ -2485,29 +2689,29 @@ class TestIPReplace(VppTestCase):
                 dump = t.dump()
                 mdump = t.mdump()
                 for jj in range(0, N_ROUTES, 2):
                 dump = t.dump()
                 mdump = t.mdump()
                 for jj in range(0, N_ROUTES, 2):
-                    self.assertTrue(find_route_in_dump(
-                        dump, routes[ii][jj]['uni'], t))
-                    self.assertTrue(find_mroute_in_dump(
-                        mdump, routes[ii][jj]['multi'], t))
+                    self.assertTrue(find_route_in_dump(dump, routes[ii][jj]["uni"], t))
+                    self.assertTrue(
+                        find_mroute_in_dump(mdump, routes[ii][jj]["multi"], t)
+                    )
                 for jj in range(1, N_ROUTES - 1, 2):
                 for jj in range(1, N_ROUTES - 1, 2):
-                    self.assertFalse(find_route_in_dump(
-                        dump, routes[ii][jj]['uni'], t))
-                    self.assertFalse(find_mroute_in_dump(
-                        mdump, routes[ii][jj]['multi'], t))
+                    self.assertFalse(find_route_in_dump(dump, routes[ii][jj]["uni"], t))
+                    self.assertFalse(
+                        find_mroute_in_dump(mdump, routes[ii][jj]["multi"], t)
+                    )
 
             # reload all the routes
             for ii, t in enumerate(self.tables):
                 for r in routes[ii]:
 
             # reload all the routes
             for ii, t in enumerate(self.tables):
                 for r in routes[ii]:
-                    r['uni'].add_vpp_config()
-                    r['multi'].add_vpp_config()
+                    r["uni"].add_vpp_config()
+                    r["multi"].add_vpp_config()
 
             # all the routes are still there
             for ii, t in enumerate(self.tables):
                 dump = t.dump()
                 mdump = t.mdump()
                 for r in routes[ii]:
 
             # all the routes are still there
             for ii, t in enumerate(self.tables):
                 dump = t.dump()
                 mdump = t.mdump()
                 for r in routes[ii]:
-                    self.assertTrue(find_route_in_dump(dump, r['uni'], t))
-                    self.assertTrue(find_mroute_in_dump(mdump, r['multi'], t))
+                    self.assertTrue(find_route_in_dump(dump, r["uni"], t))
+                    self.assertTrue(find_mroute_in_dump(mdump, r["multi"], t))
 
         #
         # finally flush the tables for good measure
 
         #
         # finally flush the tables for good measure
@@ -2519,7 +2723,7 @@ class TestIPReplace(VppTestCase):
 
 
 class TestIPCover(VppTestCase):
 
 
 class TestIPCover(VppTestCase):
-    """ IPv4 Table Cover """
+    """IPv4 Table Cover"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -2552,7 +2756,7 @@ class TestIPCover(VppTestCase):
             i.unconfig_ip4()
 
     def test_cover(self):
             i.unconfig_ip4()
 
     def test_cover(self):
-        """ IP Table Cover """
+        """IP Table Cover"""
 
         # add a loop back with a /32 prefix
         lo = VppLoInterface(self)
 
         # add a loop back with a /32 prefix
         lo = VppLoInterface(self)
@@ -2560,21 +2764,23 @@ class TestIPCover(VppTestCase):
         a = VppIpInterfaceAddress(self, lo, "127.0.0.1", 32).add_vpp_config()
 
         # add a neighbour that matches the loopback's /32
         a = VppIpInterfaceAddress(self, lo, "127.0.0.1", 32).add_vpp_config()
 
         # add a neighbour that matches the loopback's /32
-        nbr = VppNeighbor(self,
-                          lo.sw_if_index,
-                          lo.remote_mac,
-                          "127.0.0.1").add_vpp_config()
+        nbr = VppNeighbor(
+            self, lo.sw_if_index, lo.remote_mac, "127.0.0.1"
+        ).add_vpp_config()
 
         # add the default route which will be the cover for /32
 
         # add the default route which will be the cover for /32
-        r = VppIpRoute(self, "0.0.0.0", 0,
-                       [VppRoutePath("127.0.0.1",
-                                     lo.sw_if_index)],
-                       register=False).add_vpp_config()
+        r = VppIpRoute(
+            self,
+            "0.0.0.0",
+            0,
+            [VppRoutePath("127.0.0.1", lo.sw_if_index)],
+            register=False,
+        ).add_vpp_config()
 
         # add/remove/add a longer mask cover
 
         # add/remove/add a longer mask cover
-        r8 = VppIpRoute(self, "127.0.0.0", 8,
-                        [VppRoutePath("127.0.0.1",
-                                      lo.sw_if_index)]).add_vpp_config()
+        r8 = VppIpRoute(
+            self, "127.0.0.0", 8, [VppRoutePath("127.0.0.1", lo.sw_if_index)]
+        ).add_vpp_config()
         r8.remove_vpp_config()
         r8.add_vpp_config()
         r8.remove_vpp_config()
         r8.remove_vpp_config()
         r8.add_vpp_config()
         r8.remove_vpp_config()
@@ -2587,7 +2793,7 @@ class TestIPCover(VppTestCase):
 
 
 class TestIP4Replace(VppTestCase):
 
 
 class TestIP4Replace(VppTestCase):
-    """ IPv4 Interface Address Replace """
+    """IPv4 Interface Address Replace"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -2614,7 +2820,7 @@ class TestIP4Replace(VppTestCase):
         return len(self.vapi.ip_address_dump(intf.sw_if_index))
 
     def test_replace(self):
         return len(self.vapi.ip_address_dump(intf.sw_if_index))
 
     def test_replace(self):
-        """ IP interface address replace """
+        """IP interface address replace"""
 
         intf_pfxs = [[], [], [], []]
 
 
         intf_pfxs = [[], [], [], []]
 
@@ -2698,8 +2904,7 @@ class TestIP4Replace(VppTestCase):
         for intf in self.pg_interfaces:
             # 172.18.x.1/24
             addr = "172.18.%d.1" % intf.sw_if_index
         for intf in self.pg_interfaces:
             # 172.18.x.1/24
             addr = "172.18.%d.1" % intf.sw_if_index
-            pfxs.append(VppIpInterfaceAddress(self, intf, addr,
-                                              24).add_vpp_config())
+            pfxs.append(VppIpInterfaceAddress(self, intf, addr, 24).add_vpp_config())
 
         self.vapi.sw_interface_address_replace_end()
 
 
         self.vapi.sw_interface_address_replace_end()
 
@@ -2734,8 +2939,7 @@ class TestIP4Replace(VppTestCase):
         for intf in self.pg_interfaces:
             # 172.18.x.1/24
             addr = "172.18.%d.1" % (intf.sw_if_index + 1)
         for intf in self.pg_interfaces:
             # 172.18.x.1/24
             addr = "172.18.%d.1" % (intf.sw_if_index + 1)
-            pfxs.append(VppIpInterfaceAddress(self, intf,
-                                              addr, 24).add_vpp_config())
+            pfxs.append(VppIpInterfaceAddress(self, intf, addr, 24).add_vpp_config())
 
         self.vapi.sw_interface_address_replace_end()
 
 
         self.vapi.sw_interface_address_replace_end()
 
@@ -2748,7 +2952,7 @@ class TestIP4Replace(VppTestCase):
 
 
 class TestIPv4PathMTU(VppTestCase):
 
 
 class TestIPv4PathMTU(VppTestCase):
-    """ IPv4 Path MTU """
+    """IPv4 Path MTU"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -2767,7 +2971,7 @@ class TestIPv4PathMTU(VppTestCase):
         super(TestIPv4PathMTU, cls).tearDownClass()
 
     def test_path_mtu(self):
         super(TestIPv4PathMTU, cls).tearDownClass()
 
     def test_path_mtu(self):
-        """ Path MTU """
+        """Path MTU"""
 
         #
         # The goal here is not to test that fragmentation works correctly,
 
         #
         # The goal here is not to test that fragmentation works correctly,
@@ -2777,28 +2981,26 @@ class TestIPv4PathMTU(VppTestCase):
         self.vapi.cli("adjacency counters enable")
 
         # set the interface MTU to a reasonable value
         self.vapi.cli("adjacency counters enable")
 
         # set the interface MTU to a reasonable value
-        self.vapi.sw_interface_set_mtu(self.pg1.sw_if_index,
-                                       [1800, 0, 0, 0])
+        self.vapi.sw_interface_set_mtu(self.pg1.sw_if_index, [1800, 0, 0, 0])
 
         self.pg1.generate_remote_hosts(4)
 
 
         self.pg1.generate_remote_hosts(4)
 
-        p_2k = (Ether(dst=self.pg0.local_mac,
-                      src=self.pg0.remote_mac) /
-                IP(src=self.pg0.remote_ip4,
-                   dst=self.pg1.remote_ip4) /
-                UDP(sport=1234, dport=5678) /
-                Raw(b'0xa' * 640))
-        p_1k = (Ether(dst=self.pg0.local_mac,
-                      src=self.pg0.remote_mac) /
-                IP(src=self.pg0.remote_ip4,
-                   dst=self.pg1.remote_ip4) /
-                UDP(sport=1234, dport=5678) /
-                Raw(b'0xa' * 320))
-
-        nbr = VppNeighbor(self,
-                          self.pg1.sw_if_index,
-                          self.pg1.remote_mac,
-                          self.pg1.remote_ip4).add_vpp_config()
+        p_2k = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4)
+            / UDP(sport=1234, dport=5678)
+            / Raw(b"0xa" * 640)
+        )
+        p_1k = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4)
+            / UDP(sport=1234, dport=5678)
+            / Raw(b"0xa" * 320)
+        )
+
+        nbr = VppNeighbor(
+            self, self.pg1.sw_if_index, self.pg1.remote_mac, self.pg1.remote_ip4
+        ).add_vpp_config()
 
         # this is now the interface MTU frags
         self.send_and_expect(self.pg0, [p_2k], self.pg1, n_rx=2)
 
         # this is now the interface MTU frags
         self.send_and_expect(self.pg0, [p_2k], self.pg1, n_rx=2)
@@ -2832,21 +3034,18 @@ class TestIPv4PathMTU(VppTestCase):
 
         # raise the interface's MTU
         # should still use that of the path
 
         # raise the interface's MTU
         # should still use that of the path
-        self.vapi.sw_interface_set_mtu(self.pg1.sw_if_index,
-                                       [2000, 0, 0, 0])
+        self.vapi.sw_interface_set_mtu(self.pg1.sw_if_index, [2000, 0, 0, 0])
         self.send_and_expect(self.pg0, [p_2k], self.pg1, n_rx=3)
         self.send_and_expect(self.pg0, [p_1k], self.pg1, n_rx=2)
 
         # set path high and interface low
         pmtu.modify(2000)
         self.send_and_expect(self.pg0, [p_2k], self.pg1, n_rx=3)
         self.send_and_expect(self.pg0, [p_1k], self.pg1, n_rx=2)
 
         # set path high and interface low
         pmtu.modify(2000)
-        self.vapi.sw_interface_set_mtu(self.pg1.sw_if_index,
-                                       [900, 0, 0, 0])
+        self.vapi.sw_interface_set_mtu(self.pg1.sw_if_index, [900, 0, 0, 0])
         self.send_and_expect(self.pg0, [p_2k], self.pg1, n_rx=3)
         self.send_and_expect(self.pg0, [p_1k], self.pg1, n_rx=2)
 
         # remove the path MTU using the mark-n-sweep semantics
         self.send_and_expect(self.pg0, [p_2k], self.pg1, n_rx=3)
         self.send_and_expect(self.pg0, [p_1k], self.pg1, n_rx=2)
 
         # remove the path MTU using the mark-n-sweep semantics
-        self.vapi.sw_interface_set_mtu(self.pg1.sw_if_index,
-                                       [1800, 0, 0, 0])
+        self.vapi.sw_interface_set_mtu(self.pg1.sw_if_index, [1800, 0, 0, 0])
         self.vapi.ip_path_mtu_replace_begin()
         self.vapi.ip_path_mtu_replace_end()
 
         self.vapi.ip_path_mtu_replace_begin()
         self.vapi.ip_path_mtu_replace_end()
 
@@ -2856,27 +3055,27 @@ class TestIPv4PathMTU(VppTestCase):
         #
         # set path MTU for a neighbour that doesn't exist, yet
         #
         #
         # set path MTU for a neighbour that doesn't exist, yet
         #
-        pmtu2 = VppIpPathMtu(self,
-                             self.pg1.remote_hosts[2].ip4,
-                             900).add_vpp_config()
-
-        p_2k = (Ether(dst=self.pg0.local_mac,
-                      src=self.pg0.remote_mac) /
-                IP(src=self.pg0.remote_ip4,
-                   dst=self.pg1.remote_hosts[2].ip4) /
-                UDP(sport=1234, dport=5678) /
-                Raw(b'0xa' * 640))
-        p_1k = (Ether(dst=self.pg0.local_mac,
-                      src=self.pg0.remote_mac) /
-                IP(src=self.pg0.remote_ip4,
-                   dst=self.pg1.remote_hosts[2].ip4) /
-                UDP(sport=1234, dport=5678) /
-                Raw(b'0xa' * 320))
-
-        nbr2 = VppNeighbor(self,
-                           self.pg1.sw_if_index,
-                           self.pg1.remote_hosts[2].mac,
-                           self.pg1.remote_hosts[2].ip4).add_vpp_config()
+        pmtu2 = VppIpPathMtu(self, self.pg1.remote_hosts[2].ip4, 900).add_vpp_config()
+
+        p_2k = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_hosts[2].ip4)
+            / UDP(sport=1234, dport=5678)
+            / Raw(b"0xa" * 640)
+        )
+        p_1k = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_hosts[2].ip4)
+            / UDP(sport=1234, dport=5678)
+            / Raw(b"0xa" * 320)
+        )
+
+        nbr2 = VppNeighbor(
+            self,
+            self.pg1.sw_if_index,
+            self.pg1.remote_hosts[2].mac,
+            self.pg1.remote_hosts[2].ip4,
+        ).add_vpp_config()
 
         # should frag to the path MTU
         self.send_and_expect(self.pg0, [p_2k], self.pg1, n_rx=3)
 
         # should frag to the path MTU
         self.send_and_expect(self.pg0, [p_2k], self.pg1, n_rx=3)
@@ -2916,7 +3115,7 @@ class TestIPv4PathMTU(VppTestCase):
 
 
 class TestIPv4ItfRebind(VppTestCase):
 
 
 class TestIPv4ItfRebind(VppTestCase):
-    """ IPv4 Interface Bind w/ attached routes """
+    """IPv4 Interface Bind w/ attached routes"""
 
     def setUp(self):
         super(TestIPv4ItfRebind, self).setUp()
 
     def setUp(self):
         super(TestIPv4ItfRebind, self).setUp()
@@ -2927,7 +3126,7 @@ class TestIPv4ItfRebind(VppTestCase):
         super(TestIPv4ItfRebind, self).tearDown()
 
     def test_rebind(self):
         super(TestIPv4ItfRebind, self).tearDown()
 
     def test_rebind(self):
-        """ Import to no import """
+        """Import to no import"""
 
         TABLE_ID = 1
         tbl = VppIpTable(self, TABLE_ID).add_vpp_config()
 
         TABLE_ID = 1
         tbl = VppIpTable(self, TABLE_ID).add_vpp_config()
@@ -2940,17 +3139,20 @@ class TestIPv4ItfRebind(VppTestCase):
 
         # add an attached route via an pg0
         # in a different table. this prefix should import
 
         # add an attached route via an pg0
         # in a different table. this prefix should import
-        rt = VppIpRoute(self, self.pg0.local_ip4, 24,
-                        [VppRoutePath("0.0.0.0",
-                                      self.pg0.sw_if_index)],
-                        table_id=TABLE_ID).add_vpp_config()
-
-        p = (Ether(dst=self.pg1.local_mac,
-                   src=self.pg1.remote_mac) /
-             IP(src=self.pg1.remote_ip4,
-                dst=self.pg0.remote_ip4) /
-             UDP(sport=1234, dport=5678) /
-             Raw(b'0xa' * 640))
+        rt = VppIpRoute(
+            self,
+            self.pg0.local_ip4,
+            24,
+            [VppRoutePath("0.0.0.0", self.pg0.sw_if_index)],
+            table_id=TABLE_ID,
+        ).add_vpp_config()
+
+        p = (
+            Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac)
+            / IP(src=self.pg1.remote_ip4, dst=self.pg0.remote_ip4)
+            / UDP(sport=1234, dport=5678)
+            / Raw(b"0xa" * 640)
+        )
 
         rx = self.send_and_expect(self.pg1, [p], self.pg0)
         self.assertFalse(rx[0].haslayer(ARP))
 
         rx = self.send_and_expect(self.pg1, [p], self.pg0)
         self.assertFalse(rx[0].haslayer(ARP))
@@ -2984,7 +3186,7 @@ class TestIPv4ItfRebind(VppTestCase):
         tbl.remove_vpp_config()
 
     def test_delete(self):
         tbl.remove_vpp_config()
 
     def test_delete(self):
-        """ Swap import tables """
+        """Swap import tables"""
 
         TABLE_ID1 = 1
         tbl1_4 = VppIpTable(self, TABLE_ID1).add_vpp_config()
 
         TABLE_ID1 = 1
         tbl1_4 = VppIpTable(self, TABLE_ID1).add_vpp_config()
@@ -3006,19 +3208,25 @@ class TestIPv4ItfRebind(VppTestCase):
 
         # add an attached route in the default table via pg0
         # this should import to table 1
 
         # add an attached route in the default table via pg0
         # this should import to table 1
-        rt4 = VppIpRoute(self, self.pg1.local_ip4, 24,
-                         [VppRoutePath("0.0.0.0",
-                                       self.pg1.sw_if_index)]).add_vpp_config()
-        rt6 = VppIpRoute(self, self.pg1.local_ip6, 64,
-                         [VppRoutePath("0.0.0.0",
-                                       self.pg1.sw_if_index)]).add_vpp_config()
-
-        p1 = (Ether(dst=self.pg0.local_mac,
-                    src=self.pg0.remote_mac) /
-              IP(src=self.pg1.remote_ip4,
-                 dst=self.pg1.remote_ip4) /
-              UDP(sport=1234, dport=5678) /
-              Raw(b'0xa' * 640))
+        rt4 = VppIpRoute(
+            self,
+            self.pg1.local_ip4,
+            24,
+            [VppRoutePath("0.0.0.0", self.pg1.sw_if_index)],
+        ).add_vpp_config()
+        rt6 = VppIpRoute(
+            self,
+            self.pg1.local_ip6,
+            64,
+            [VppRoutePath("0.0.0.0", self.pg1.sw_if_index)],
+        ).add_vpp_config()
+
+        p1 = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(src=self.pg1.remote_ip4, dst=self.pg1.remote_ip4)
+            / UDP(sport=1234, dport=5678)
+            / Raw(b"0xa" * 640)
+        )
 
         # inject into table 0
         rx = self.send_and_expect(self.pg0, [p1], self.pg1)
 
         # inject into table 0
         rx = self.send_and_expect(self.pg0, [p1], self.pg1)
@@ -3050,5 +3258,5 @@ class TestIPv4ItfRebind(VppTestCase):
             i.admin_down()
 
 
             i.admin_down()
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index de5231c..ac3b30b 100644 (file)
@@ -66,12 +66,16 @@ class TestIpIrb(VppTestCase):
 
         # Create BD with MAC learning enabled and put interfaces to this BD
         cls.vapi.sw_interface_set_l2_bridge(
 
         # Create BD with MAC learning enabled and put interfaces to this BD
         cls.vapi.sw_interface_set_l2_bridge(
-            rx_sw_if_index=cls.bvi0.sw_if_index, bd_id=cls.bd_id,
-            port_type=L2_PORT_TYPE.BVI)
-        cls.vapi.sw_interface_set_l2_bridge(rx_sw_if_index=cls.pg0.sw_if_index,
-                                            bd_id=cls.bd_id)
-        cls.vapi.sw_interface_set_l2_bridge(rx_sw_if_index=cls.pg1.sw_if_index,
-                                            bd_id=cls.bd_id)
+            rx_sw_if_index=cls.bvi0.sw_if_index,
+            bd_id=cls.bd_id,
+            port_type=L2_PORT_TYPE.BVI,
+        )
+        cls.vapi.sw_interface_set_l2_bridge(
+            rx_sw_if_index=cls.pg0.sw_if_index, bd_id=cls.bd_id
+        )
+        cls.vapi.sw_interface_set_l2_bridge(
+            rx_sw_if_index=cls.pg1.sw_if_index, bd_id=cls.bd_id
+        )
 
         # Configure IPv4 addresses on BVI interface and routed interface
         cls.bvi0.config_ip4()
 
         # Configure IPv4 addresses on BVI interface and routed interface
         cls.bvi0.config_ip4()
@@ -103,8 +107,7 @@ class TestIpIrb(VppTestCase):
     def show_commands_at_teardown(self):
         self.logger.info(self.vapi.cli("show l2patch"))
         self.logger.info(self.vapi.cli("show l2fib verbose"))
     def show_commands_at_teardown(self):
         self.logger.info(self.vapi.cli("show l2patch"))
         self.logger.info(self.vapi.cli("show l2fib verbose"))
-        self.logger.info(self.vapi.cli("show bridge-domain %s detail" %
-                                       self.bd_id))
+        self.logger.info(self.vapi.cli("show bridge-domain %s detail" % self.bd_id))
         self.logger.info(self.vapi.cli("show ip neighbors"))
 
     def create_stream(self, src_ip_if, dst_ip_if, packet_sizes):
         self.logger.info(self.vapi.cli("show ip neighbors"))
 
     def create_stream(self, src_ip_if, dst_ip_if, packet_sizes):
@@ -113,19 +116,19 @@ class TestIpIrb(VppTestCase):
             remote_dst_host = choice(dst_ip_if.remote_hosts)
             info = self.create_packet_info(src_ip_if, dst_ip_if)
             payload = self.info_to_payload(info)
             remote_dst_host = choice(dst_ip_if.remote_hosts)
             info = self.create_packet_info(src_ip_if, dst_ip_if)
             payload = self.info_to_payload(info)
-            p = (Ether(dst=src_ip_if.local_mac, src=src_ip_if.remote_mac) /
-                 IP(src=src_ip_if.remote_ip4,
-                    dst=remote_dst_host.ip4) /
-                 UDP(sport=1234, dport=1234) /
-                 Raw(payload))
+            p = (
+                Ether(dst=src_ip_if.local_mac, src=src_ip_if.remote_mac)
+                / IP(src=src_ip_if.remote_ip4, dst=remote_dst_host.ip4)
+                / UDP(sport=1234, dport=1234)
+                / Raw(payload)
+            )
             info.data = p.copy()
             size = packet_sizes[(i // 2) % len(packet_sizes)]
             self.extend_packet(p, size)
             pkts.append(p)
         return pkts
 
             info.data = p.copy()
             size = packet_sizes[(i // 2) % len(packet_sizes)]
             self.extend_packet(p, size)
             pkts.append(p)
         return pkts
 
-    def create_stream_l2_to_ip(self, src_l2_if, src_ip_if, dst_ip_if,
-                               packet_sizes):
+    def create_stream_l2_to_ip(self, src_l2_if, src_ip_if, dst_ip_if, packet_sizes):
         pkts = []
         for i in range(0, 257):
             info = self.create_packet_info(src_ip_if, dst_ip_if)
         pkts = []
         for i in range(0, 257):
             info = self.create_packet_info(src_ip_if, dst_ip_if)
@@ -133,12 +136,12 @@ class TestIpIrb(VppTestCase):
 
             host = choice(src_l2_if.remote_hosts)
 
 
             host = choice(src_l2_if.remote_hosts)
 
-            p = (Ether(src=host.mac,
-                       dst=src_ip_if.local_mac) /
-                 IP(src=host.ip4,
-                    dst=dst_ip_if.remote_ip4) /
-                 UDP(sport=1234, dport=1234) /
-                 Raw(payload))
+            p = (
+                Ether(src=host.mac, dst=src_ip_if.local_mac)
+                / IP(src=host.ip4, dst=dst_ip_if.remote_ip4)
+                / UDP(sport=1234, dport=1234)
+                / Raw(payload)
+            )
 
             info.data = p.copy()
             size = packet_sizes[(i // 2) % len(packet_sizes)]
 
             info.data = p.copy()
             size = packet_sizes[(i // 2) % len(packet_sizes)]
@@ -162,8 +165,8 @@ class TestIpIrb(VppTestCase):
             self.assertEqual(payload_info.dst, dst_ip_sw_if_index)
 
             next_info = self.get_next_packet_info_for_interface2(
             self.assertEqual(payload_info.dst, dst_ip_sw_if_index)
 
             next_info = self.get_next_packet_info_for_interface2(
-                payload_info.src, dst_ip_sw_if_index,
-                last_info[payload_info.src])
+                payload_info.src, dst_ip_sw_if_index, last_info[payload_info.src]
+            )
             last_info[payload_info.src] = next_info
             self.assertTrue(next_info is not None)
             saved_packet = next_info.data
             last_info[payload_info.src] = next_info
             self.assertTrue(next_info is not None)
             saved_packet = next_info.data
@@ -199,8 +202,8 @@ class TestIpIrb(VppTestCase):
             self.assertEqual(payload_info.dst, dst_ip_sw_if_index)
 
             next_info = self.get_next_packet_info_for_interface2(
             self.assertEqual(payload_info.dst, dst_ip_sw_if_index)
 
             next_info = self.get_next_packet_info_for_interface2(
-                payload_info.src, dst_ip_sw_if_index,
-                last_info[payload_info.src])
+                payload_info.src, dst_ip_sw_if_index, last_info[payload_info.src]
+            )
             last_info[payload_info.src] = next_info
             self.assertTrue(next_info is not None)
             self.assertEqual(packet_index, next_info.index)
             last_info[payload_info.src] = next_info
             self.assertTrue(next_info is not None)
             self.assertEqual(packet_index, next_info.index)
@@ -221,7 +224,7 @@ class TestIpIrb(VppTestCase):
             self.assertEqual(udp.dport, saved_packet[UDP].dport)
 
     def test_ip4_irb_1(self):
             self.assertEqual(udp.dport, saved_packet[UDP].dport)
 
     def test_ip4_irb_1(self):
-        """ IPv4 IRB test 1
+        """IPv4 IRB test 1
 
         Test scenario:
             - ip traffic from pg2 interface must ends in both pg0 and pg1
 
         Test scenario:
             - ip traffic from pg2 interface must ends in both pg0 and pg1
@@ -229,8 +232,7 @@ class TestIpIrb(VppTestCase):
             - no l2 entry configured, pg0 and pg1 are same
         """
 
             - no l2 entry configured, pg0 and pg1 are same
         """
 
-        stream = self.create_stream(
-            self.pg2, self.bvi0, self.pg_if_packet_sizes)
+        stream = self.create_stream(self.pg2, self.bvi0, self.pg_if_packet_sizes)
         self.pg2.add_stream(stream)
 
         self.pg_enable_capture(self.pg_interfaces)
         self.pg2.add_stream(stream)
 
         self.pg_enable_capture(self.pg_interfaces)
@@ -248,9 +250,11 @@ class TestIpIrb(VppTestCase):
 
     def send_and_verify_l2_to_ip(self):
         stream1 = self.create_stream_l2_to_ip(
 
     def send_and_verify_l2_to_ip(self):
         stream1 = self.create_stream_l2_to_ip(
-            self.pg0, self.bvi0, self.pg2, self.pg_if_packet_sizes)
+            self.pg0, self.bvi0, self.pg2, self.pg_if_packet_sizes
+        )
         stream2 = self.create_stream_l2_to_ip(
         stream2 = self.create_stream_l2_to_ip(
-            self.pg1, self.bvi0, self.pg2, self.pg_if_packet_sizes)
+            self.pg1, self.bvi0, self.pg2, self.pg_if_packet_sizes
+        )
         self.vapi.cli("clear trace")
         self.pg0.add_stream(stream1)
         self.pg1.add_stream(stream2)
         self.vapi.cli("clear trace")
         self.pg0.add_stream(stream1)
         self.pg1.add_stream(stream2)
@@ -262,7 +266,7 @@ class TestIpIrb(VppTestCase):
         self.verify_capture_l2_to_ip(self.pg2, self.bvi0, rcvd)
 
     def test_ip4_irb_2(self):
         self.verify_capture_l2_to_ip(self.pg2, self.bvi0, rcvd)
 
     def test_ip4_irb_2(self):
-        """ IPv4 IRB test 2
+        """IPv4 IRB test 2
 
         Test scenario:
             - ip traffic from pg0 and pg1 ends on pg2
 
         Test scenario:
             - ip traffic from pg0 and pg1 ends on pg2
@@ -277,5 +281,5 @@ class TestIpIrb(VppTestCase):
         self.pg1.assert_nothing_captured(remark="UU Flood")
 
 
         self.pg1.assert_nothing_captured(remark="UU Flood")
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index acef6c4..48c04f7 100644 (file)
@@ -77,14 +77,14 @@ from vrf import VRFState
 
 
 def is_ipv4_misc(p):
 
 
 def is_ipv4_misc(p):
-    """ Is packet one of uninteresting IPv4 broadcasts? """
+    """Is packet one of uninteresting IPv4 broadcasts?"""
     if p.haslayer(ARP):
         return True
     return False
 
 
 class TestIp4VrfMultiInst(VppTestCase):
     if p.haslayer(ARP):
         return True
     return False
 
 
 class TestIp4VrfMultiInst(VppTestCase):
-    """ IP4 VRF  Multi-instance Test Case """
+    """IP4 VRF  Multi-instance Test Case"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -102,8 +102,7 @@ class TestIp4VrfMultiInst(VppTestCase):
 
         try:
             # Create pg interfaces
 
         try:
             # Create pg interfaces
-            cls.create_pg_interfaces(
-                range(cls.nr_of_vrfs * cls.pg_ifs_per_vrf))
+            cls.create_pg_interfaces(range(cls.nr_of_vrfs * cls.pg_ifs_per_vrf))
 
             # Packet flows mapping pg0 -> pg1, pg2 etc.
             cls.flows = dict()
 
             # Packet flows mapping pg0 -> pg1, pg2 etc.
             cls.flows = dict()
@@ -112,7 +111,8 @@ class TestIp4VrfMultiInst(VppTestCase):
                 pg_list = [
                     cls.pg_interfaces[multiplicand * cls.pg_ifs_per_vrf + j]
                     for j in range(cls.pg_ifs_per_vrf)
                 pg_list = [
                     cls.pg_interfaces[multiplicand * cls.pg_ifs_per_vrf + j]
                     for j in range(cls.pg_ifs_per_vrf)
-                    if (multiplicand * cls.pg_ifs_per_vrf + j) != i]
+                    if (multiplicand * cls.pg_ifs_per_vrf + j) != i
+                ]
                 cls.flows[cls.pg_interfaces[i]] = pg_list
 
             # Packet sizes - jumbo packet (9018 bytes) skipped
                 cls.flows[cls.pg_interfaces[i]] = pg_list
 
             # Packet sizes - jumbo packet (9018 bytes) skipped
@@ -141,7 +141,8 @@ class TestIp4VrfMultiInst(VppTestCase):
                 set_id = i + 1
                 pg_list = [
                     cls.pg_interfaces[i * cls.pg_ifs_per_vrf + j]
                 set_id = i + 1
                 pg_list = [
                     cls.pg_interfaces[i * cls.pg_ifs_per_vrf + j]
-                    for j in range(cls.pg_ifs_per_vrf)]
+                    for j in range(cls.pg_ifs_per_vrf)
+                ]
                 cls.pg_if_sets[set_id] = pg_list
 
         except Exception:
                 cls.pg_if_sets[set_id] = pg_list
 
         except Exception:
@@ -173,8 +174,9 @@ class TestIp4VrfMultiInst(VppTestCase):
         for i in range(self.pg_ifs_per_vrf):
             pg_if = self.pg_if_sets[if_set_id][i]
             pg_if.set_table_ip4(vrf_id)
         for i in range(self.pg_ifs_per_vrf):
             pg_if = self.pg_if_sets[if_set_id][i]
             pg_if.set_table_ip4(vrf_id)
-            self.logger.info("pg-interface %s added to IPv4 VRF ID %d"
-                             % (pg_if.name, vrf_id))
+            self.logger.info(
+                "pg-interface %s added to IPv4 VRF ID %d" % (pg_if.name, vrf_id)
+            )
             if pg_if not in self.pg_in_vrf:
                 self.pg_in_vrf.append(pg_if)
             if pg_if in self.pg_not_in_vrf:
             if pg_if not in self.pg_in_vrf:
                 self.pg_in_vrf.append(pg_if)
             if pg_if in self.pg_not_in_vrf:
@@ -194,7 +196,7 @@ class TestIp4VrfMultiInst(VppTestCase):
 
         for i in range(count):
             vrf_id = i + start
 
         for i in range(count):
             vrf_id = i + start
-            self.vapi.ip_table_add_del(is_add=1, table={'table_id': vrf_id})
+            self.vapi.ip_table_add_del(is_add=1, table={"table_id": vrf_id})
             self.logger.info("IPv4 VRF ID %d created" % vrf_id)
             if vrf_id not in self.vrf_list:
                 self.vrf_list.append(vrf_id)
             self.logger.info("IPv4 VRF ID %d created" % vrf_id)
             if vrf_id not in self.vrf_list:
                 self.vrf_list.append(vrf_id)
@@ -204,8 +206,7 @@ class TestIp4VrfMultiInst(VppTestCase):
         self.logger.debug(self.vapi.ppcli("show ip fib"))
         self.logger.debug(self.vapi.ppcli("show ip4 neighbors"))
 
         self.logger.debug(self.vapi.ppcli("show ip fib"))
         self.logger.debug(self.vapi.ppcli("show ip4 neighbors"))
 
-    def create_vrf_by_id_and_assign_interfaces(self, set_id,
-                                               vrf_id=0xffffffff):
+    def create_vrf_by_id_and_assign_interfaces(self, set_id, vrf_id=0xFFFFFFFF):
         """
         Create a FIB table / VRF by vrf_id, put 3 pg-ip4 interfaces
         to FIB table / VRF.
         """
         Create a FIB table / VRF by vrf_id, put 3 pg-ip4 interfaces
         to FIB table / VRF.
@@ -213,7 +214,7 @@ class TestIp4VrfMultiInst(VppTestCase):
         :param int vrf_id: Required table ID / VRF ID. \
         (Default value = 0xffffffff, ID will be selected automatically)
         """
         :param int vrf_id: Required table ID / VRF ID. \
         (Default value = 0xffffffff, ID will be selected automatically)
         """
-        ret = self.vapi.ip_table_allocate(table={'table_id': vrf_id})
+        ret = self.vapi.ip_table_allocate(table={"table_id": vrf_id})
         vrf_id = ret.table.table_id
         self.logger.info("IPv4 VRF ID %d created" % vrf_id)
         if vrf_id not in self.vrf_list:
         vrf_id = ret.table.table_id
         self.logger.info("IPv4 VRF ID %d created" % vrf_id)
         if vrf_id not in self.vrf_list:
@@ -234,7 +235,7 @@ class TestIp4VrfMultiInst(VppTestCase):
         """
         if if_set_id is None:
             if_set_id = vrf_id
         """
         if if_set_id is None:
             if_set_id = vrf_id
-        self.vapi.ip_table_flush(table={'table_id': vrf_id})
+        self.vapi.ip_table_flush(table={"table_id": vrf_id})
         if vrf_id in self.vrf_list:
             self.vrf_list.remove(vrf_id)
         if vrf_id not in self.vrf_reset_list:
         if vrf_id in self.vrf_list:
             self.vrf_list.remove(vrf_id)
         if vrf_id not in self.vrf_reset_list:
@@ -249,7 +250,7 @@ class TestIp4VrfMultiInst(VppTestCase):
         self.logger.info("IPv4 VRF ID %d reset finished" % vrf_id)
         self.logger.debug(self.vapi.ppcli("show ip fib"))
         self.logger.debug(self.vapi.ppcli("show ip neighbors"))
         self.logger.info("IPv4 VRF ID %d reset finished" % vrf_id)
         self.logger.debug(self.vapi.ppcli("show ip fib"))
         self.logger.debug(self.vapi.ppcli("show ip neighbors"))
-        self.vapi.ip_table_add_del(is_add=0, table={'table_id': vrf_id})
+        self.vapi.ip_table_add_del(is_add=0, table={"table_id": vrf_id})
 
     def create_stream(self, src_if, packet_sizes):
         """
 
     def create_stream(self, src_if, packet_sizes):
         """
@@ -266,16 +267,20 @@ class TestIp4VrfMultiInst(VppTestCase):
                 src_host = random.choice(src_hosts)
                 pkt_info = self.create_packet_info(src_if, dst_if)
                 payload = self.info_to_payload(pkt_info)
                 src_host = random.choice(src_hosts)
                 pkt_info = self.create_packet_info(src_if, dst_if)
                 payload = self.info_to_payload(pkt_info)
-                p = (Ether(dst=src_if.local_mac, src=src_host.mac) /
-                     IP(src=src_host.ip4, dst=dst_host.ip4) /
-                     UDP(sport=1234, dport=1234) /
-                     Raw(payload))
+                p = (
+                    Ether(dst=src_if.local_mac, src=src_host.mac)
+                    / IP(src=src_host.ip4, dst=dst_host.ip4)
+                    / UDP(sport=1234, dport=1234)
+                    / Raw(payload)
+                )
                 pkt_info.data = p.copy()
                 size = random.choice(packet_sizes)
                 self.extend_packet(p, size)
                 pkts.append(p)
                 pkt_info.data = p.copy()
                 size = random.choice(packet_sizes)
                 self.extend_packet(p, size)
                 pkts.append(p)
-        self.logger.debug("Input stream created for port %s. Length: %u pkt(s)"
-                          % (src_if.name, len(pkts)))
+        self.logger.debug(
+            "Input stream created for port %s. Length: %u pkt(s)"
+            % (src_if.name, len(pkts))
+        )
         return pkts
 
     def create_stream_crosswise_vrf(self, src_if, vrf_id, packet_sizes):
         return pkts
 
     def create_stream_crosswise_vrf(self, src_if, vrf_id, packet_sizes):
@@ -298,16 +303,20 @@ class TestIp4VrfMultiInst(VppTestCase):
                     src_host = random.choice(src_hosts)
                     pkt_info = self.create_packet_info(src_if, dst_if)
                     payload = self.info_to_payload(pkt_info)
                     src_host = random.choice(src_hosts)
                     pkt_info = self.create_packet_info(src_if, dst_if)
                     payload = self.info_to_payload(pkt_info)
-                    p = (Ether(dst=src_if.local_mac, src=src_host.mac) /
-                         IP(src=src_host.ip4, dst=dst_host.ip4) /
-                         UDP(sport=1234, dport=1234) /
-                         Raw(payload))
+                    p = (
+                        Ether(dst=src_if.local_mac, src=src_host.mac)
+                        / IP(src=src_host.ip4, dst=dst_host.ip4)
+                        / UDP(sport=1234, dport=1234)
+                        / Raw(payload)
+                    )
                     pkt_info.data = p.copy()
                     size = random.choice(packet_sizes)
                     self.extend_packet(p, size)
                     pkts.append(p)
                     pkt_info.data = p.copy()
                     size = random.choice(packet_sizes)
                     self.extend_packet(p, size)
                     pkts.append(p)
-        self.logger.debug("Input stream created for port %s. Length: %u pkt(s)"
-                          % (src_if.name, len(pkts)))
+        self.logger.debug(
+            "Input stream created for port %s. Length: %u pkt(s)"
+            % (src_if.name, len(pkts))
+        )
         return pkts
 
     def verify_capture(self, pg_if, capture):
         return pkts
 
     def verify_capture(self, pg_if, capture):
@@ -328,11 +337,13 @@ class TestIp4VrfMultiInst(VppTestCase):
                 payload_info = self.payload_to_info(packet[Raw])
                 packet_index = payload_info.index
                 self.assertEqual(payload_info.dst, dst_sw_if_index)
                 payload_info = self.payload_to_info(packet[Raw])
                 packet_index = payload_info.index
                 self.assertEqual(payload_info.dst, dst_sw_if_index)
-                self.logger.debug("Got packet on port %s: src=%u (id=%u)" %
-                                  (pg_if.name, payload_info.src, packet_index))
+                self.logger.debug(
+                    "Got packet on port %s: src=%u (id=%u)"
+                    % (pg_if.name, payload_info.src, packet_index)
+                )
                 next_info = self.get_next_packet_info_for_interface2(
                 next_info = self.get_next_packet_info_for_interface2(
-                    payload_info.src, dst_sw_if_index,
-                    last_info[payload_info.src])
+                    payload_info.src, dst_sw_if_index, last_info[payload_info.src]
+                )
                 last_info[payload_info.src] = next_info
                 self.assertIsNotNone(next_info)
                 self.assertEqual(packet_index, next_info.index)
                 last_info[payload_info.src] = next_info
                 self.assertIsNotNone(next_info)
                 self.assertEqual(packet_index, next_info.index)
@@ -347,11 +358,13 @@ class TestIp4VrfMultiInst(VppTestCase):
                 raise
         for i in self.pg_interfaces:
             remaining_packet = self.get_next_packet_info_for_interface2(
                 raise
         for i in self.pg_interfaces:
             remaining_packet = self.get_next_packet_info_for_interface2(
-                i, dst_sw_if_index, last_info[i.sw_if_index])
+                i, dst_sw_if_index, last_info[i.sw_if_index]
+            )
             self.assertIsNone(
                 remaining_packet,
             self.assertIsNone(
                 remaining_packet,
-                "Port %u: Packet expected from source %u didn't arrive" %
-                (dst_sw_if_index, i.sw_if_index))
+                "Port %u: Packet expected from source %u didn't arrive"
+                % (dst_sw_if_index, i.sw_if_index),
+            )
 
     def verify_vrf(self, vrf_id, if_set_id=None):
         """
 
     def verify_vrf(self, vrf_id, if_set_id=None):
         """
@@ -415,8 +428,9 @@ class TestIp4VrfMultiInst(VppTestCase):
                 capture = pg_if.get_capture(remark="interface is in VRF")
                 self.verify_capture(pg_if, capture)
             elif pg_if in self.pg_not_in_vrf:
                 capture = pg_if.get_capture(remark="interface is in VRF")
                 self.verify_capture(pg_if, capture)
             elif pg_if in self.pg_not_in_vrf:
-                pg_if.assert_nothing_captured(remark="interface is not in VRF",
-                                              filter_out_fn=is_ipv4_misc)
+                pg_if.assert_nothing_captured(
+                    remark="interface is not in VRF", filter_out_fn=is_ipv4_misc
+                )
                 self.logger.debug("No capture for interface %s" % pg_if.name)
             else:
                 raise Exception("Unknown interface: %s" % pg_if.name)
                 self.logger.debug("No capture for interface %s" % pg_if.name)
             else:
                 raise Exception("Unknown interface: %s" % pg_if.name)
@@ -436,7 +450,8 @@ class TestIp4VrfMultiInst(VppTestCase):
         for vrf_id in self.vrf_list:
             for pg_if in self.pg_if_sets[vrf_id]:
                 pkts = self.create_stream_crosswise_vrf(
         for vrf_id in self.vrf_list:
             for pg_if in self.pg_if_sets[vrf_id]:
                 pkts = self.create_stream_crosswise_vrf(
-                    pg_if, vrf_id, self.pg_if_packet_sizes)
+                    pg_if, vrf_id, self.pg_if_packet_sizes
+                )
                 pg_if.add_stream(pkts)
 
         # Enable packet capture and start packet sending
                 pg_if.add_stream(pkts)
 
         # Enable packet capture and start packet sending
@@ -446,29 +461,27 @@ class TestIp4VrfMultiInst(VppTestCase):
         # Verify
         # Verify outgoing packet streams per packet-generator interface
         for pg_if in self.pg_interfaces:
         # Verify
         # Verify outgoing packet streams per packet-generator interface
         for pg_if in self.pg_interfaces:
-            pg_if.assert_nothing_captured(remark="interface is in other VRF",
-                                          filter_out_fn=is_ipv4_misc)
+            pg_if.assert_nothing_captured(
+                remark="interface is in other VRF", filter_out_fn=is_ipv4_misc
+            )
             self.logger.debug("No capture for interface %s" % pg_if.name)
 
     def test_ip4_vrf_01(self):
             self.logger.debug("No capture for interface %s" % pg_if.name)
 
     def test_ip4_vrf_01(self):
-        """ IP4 VRF  Multi-instance test 1 - create 4 VRFs
-        """
+        """IP4 VRF  Multi-instance test 1 - create 4 VRFs"""
         # Config 1
         # Create 4 VRFs
         self.create_vrf_and_assign_interfaces(4)
 
         # Verify 1
         for vrf_id in self.vrf_list:
         # Config 1
         # Create 4 VRFs
         self.create_vrf_and_assign_interfaces(4)
 
         # Verify 1
         for vrf_id in self.vrf_list:
-            self.assert_equal(self.verify_vrf(vrf_id),
-                              VRFState.configured, VRFState)
+            self.assert_equal(self.verify_vrf(vrf_id), VRFState.configured, VRFState)
 
         # Test 1
         self.run_verify_test()
         self.run_crosswise_vrf_test()
 
     def test_ip4_vrf_02(self):
 
         # Test 1
         self.run_verify_test()
         self.run_crosswise_vrf_test()
 
     def test_ip4_vrf_02(self):
-        """ IP4 VRF  Multi-instance test 2 - reset 2 VRFs
-        """
+        """IP4 VRF  Multi-instance test 2 - reset 2 VRFs"""
         # Config 2
         # Reset 2 VRFs
         self.reset_vrf_and_remove_from_vrf_list(1)
         # Config 2
         # Reset 2 VRFs
         self.reset_vrf_and_remove_from_vrf_list(1)
@@ -476,19 +489,16 @@ class TestIp4VrfMultiInst(VppTestCase):
 
         # Verify 2
         for vrf_id in self.vrf_reset_list:
 
         # Verify 2
         for vrf_id in self.vrf_reset_list:
-            self.assert_equal(self.verify_vrf(vrf_id),
-                              VRFState.reset, VRFState)
+            self.assert_equal(self.verify_vrf(vrf_id), VRFState.reset, VRFState)
         for vrf_id in self.vrf_list:
         for vrf_id in self.vrf_list:
-            self.assert_equal(self.verify_vrf(vrf_id),
-                              VRFState.configured, VRFState)
+            self.assert_equal(self.verify_vrf(vrf_id), VRFState.configured, VRFState)
 
         # Test 2
         self.run_verify_test()
         self.run_crosswise_vrf_test()
 
     def test_ip4_vrf_03(self):
 
         # Test 2
         self.run_verify_test()
         self.run_crosswise_vrf_test()
 
     def test_ip4_vrf_03(self):
-        """ IP4 VRF  Multi-instance 3 - add 2 VRFs
-        """
+        """IP4 VRF  Multi-instance 3 - add 2 VRFs"""
         # Config 3
         # Add 1 of reset VRFs and 1 new VRF
         self.create_vrf_and_assign_interfaces(1)
         # Config 3
         # Add 1 of reset VRFs and 1 new VRF
         self.create_vrf_and_assign_interfaces(1)
@@ -496,19 +506,16 @@ class TestIp4VrfMultiInst(VppTestCase):
 
         # Verify 3
         for vrf_id in self.vrf_reset_list:
 
         # Verify 3
         for vrf_id in self.vrf_reset_list:
-            self.assert_equal(self.verify_vrf(vrf_id),
-                              VRFState.reset, VRFState)
+            self.assert_equal(self.verify_vrf(vrf_id), VRFState.reset, VRFState)
         for vrf_id in self.vrf_list:
         for vrf_id in self.vrf_list:
-            self.assert_equal(self.verify_vrf(vrf_id),
-                              VRFState.configured, VRFState)
+            self.assert_equal(self.verify_vrf(vrf_id), VRFState.configured, VRFState)
 
         # Test 3
         self.run_verify_test()
         self.run_crosswise_vrf_test()
 
     def test_ip4_vrf_04(self):
 
         # Test 3
         self.run_verify_test()
         self.run_crosswise_vrf_test()
 
     def test_ip4_vrf_04(self):
-        """ IP4 VRF  Multi-instance test 4 - reset 4 VRFs
-        """
+        """IP4 VRF  Multi-instance test 4 - reset 4 VRFs"""
         # Config 4
         # Reset all VRFs (i.e. no VRF except VRF=0 configured)
         for i in range(len(self.vrf_list)):
         # Config 4
         # Reset all VRFs (i.e. no VRF except VRF=0 configured)
         for i in range(len(self.vrf_list)):
@@ -516,20 +523,20 @@ class TestIp4VrfMultiInst(VppTestCase):
 
         # Verify 4
         for vrf_id in self.vrf_reset_list:
 
         # Verify 4
         for vrf_id in self.vrf_reset_list:
-            self.assert_equal(self.verify_vrf(vrf_id),
-                              VRFState.reset, VRFState)
+            self.assert_equal(self.verify_vrf(vrf_id), VRFState.reset, VRFState)
         vrf_list_length = len(self.vrf_list)
         self.assertEqual(
         vrf_list_length = len(self.vrf_list)
         self.assertEqual(
-            vrf_list_length, 0,
-            "List of configured VRFs is not empty: %s != 0" % vrf_list_length)
+            vrf_list_length,
+            0,
+            "List of configured VRFs is not empty: %s != 0" % vrf_list_length,
+        )
 
         # Test 4
         self.run_verify_test()
         self.run_crosswise_vrf_test()
 
     def test_ip4_vrf_05(self):
 
         # Test 4
         self.run_verify_test()
         self.run_crosswise_vrf_test()
 
     def test_ip4_vrf_05(self):
-        """ IP4 VRF  Multi-instance test 5 - id allocation
-        """
+        """IP4 VRF  Multi-instance test 5 - id allocation"""
         # Config 5
         # Create several VRFs
         # Set vrf_id manually first
         # Config 5
         # Create several VRFs
         # Set vrf_id manually first
@@ -542,8 +549,9 @@ class TestIp4VrfMultiInst(VppTestCase):
         # Verify 5
         self.assert_equal(self.verify_vrf(1, 1), VRFState.configured, VRFState)
         for i, vrf in enumerate(auto_vrf_id):
         # Verify 5
         self.assert_equal(self.verify_vrf(1, 1), VRFState.configured, VRFState)
         for i, vrf in enumerate(auto_vrf_id):
-            self.assert_equal(self.verify_vrf(vrf, i+2),
-                              VRFState.configured, VRFState)
+            self.assert_equal(
+                self.verify_vrf(vrf, i + 2), VRFState.configured, VRFState
+            )
 
         # Test 5
         self.run_verify_test()
 
         # Test 5
         self.run_verify_test()
@@ -552,18 +560,20 @@ class TestIp4VrfMultiInst(VppTestCase):
         # Reset VRFs
         self.reset_vrf_and_remove_from_vrf_list(1)
         for i, vrf in enumerate(auto_vrf_id):
         # Reset VRFs
         self.reset_vrf_and_remove_from_vrf_list(1)
         for i, vrf in enumerate(auto_vrf_id):
-            self.reset_vrf_and_remove_from_vrf_list(vrf, i+2)
+            self.reset_vrf_and_remove_from_vrf_list(vrf, i + 2)
 
         # Verify 5.1
         self.assert_equal(self.verify_vrf(1, 1), VRFState.reset, VRFState)
         for i, vrf in enumerate(auto_vrf_id):
 
         # Verify 5.1
         self.assert_equal(self.verify_vrf(1, 1), VRFState.reset, VRFState)
         for i, vrf in enumerate(auto_vrf_id):
-            self.assert_equal(self.verify_vrf(vrf, i+2),
-                              VRFState.reset, VRFState)
+            self.assert_equal(self.verify_vrf(vrf, i + 2), VRFState.reset, VRFState)
 
         vrf_list_length = len(self.vrf_list)
         self.assertEqual(
 
         vrf_list_length = len(self.vrf_list)
         self.assertEqual(
-            vrf_list_length, 0,
-            "List of configured VRFs is not empty: %s != 0" % vrf_list_length)
+            vrf_list_length,
+            0,
+            "List of configured VRFs is not empty: %s != 0" % vrf_list_length,
+        )
+
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index c86cb77..ca153db 100644 (file)
@@ -9,26 +9,58 @@ import scapy.compat
 import scapy.layers.inet6 as inet6
 from scapy.layers.inet import UDP, IP
 from scapy.contrib.mpls import MPLS
 import scapy.layers.inet6 as inet6
 from scapy.layers.inet import UDP, IP
 from scapy.contrib.mpls import MPLS
-from scapy.layers.inet6 import IPv6, ICMPv6ND_NS, ICMPv6ND_RS, \
-    ICMPv6ND_RA, ICMPv6NDOptMTU, ICMPv6NDOptSrcLLAddr, ICMPv6NDOptPrefixInfo, \
-    ICMPv6ND_NA, ICMPv6NDOptDstLLAddr, ICMPv6DestUnreach, icmp6types, \
-    ICMPv6TimeExceeded, ICMPv6EchoRequest, ICMPv6EchoReply, \
-    IPv6ExtHdrHopByHop, ICMPv6MLReport2, ICMPv6MLDMultAddrRec
+from scapy.layers.inet6 import (
+    IPv6,
+    ICMPv6ND_NS,
+    ICMPv6ND_RS,
+    ICMPv6ND_RA,
+    ICMPv6NDOptMTU,
+    ICMPv6NDOptSrcLLAddr,
+    ICMPv6NDOptPrefixInfo,
+    ICMPv6ND_NA,
+    ICMPv6NDOptDstLLAddr,
+    ICMPv6DestUnreach,
+    icmp6types,
+    ICMPv6TimeExceeded,
+    ICMPv6EchoRequest,
+    ICMPv6EchoReply,
+    IPv6ExtHdrHopByHop,
+    ICMPv6MLReport2,
+    ICMPv6MLDMultAddrRec,
+)
 from scapy.layers.l2 import Ether, Dot1Q, GRE
 from scapy.packet import Raw
 from scapy.layers.l2 import Ether, Dot1Q, GRE
 from scapy.packet import Raw
-from scapy.utils6 import in6_getnsma, in6_getnsmac, in6_ptop, in6_islladdr, \
-    in6_mactoifaceid
+from scapy.utils6 import (
+    in6_getnsma,
+    in6_getnsmac,
+    in6_ptop,
+    in6_islladdr,
+    in6_mactoifaceid,
+)
 from six import moves
 
 from framework import VppTestCase, VppTestRunner, tag_run_solo
 from util import ppp, ip6_normalize, mk_ll_addr
 from vpp_papi import VppEnum
 from vpp_ip import DpoProto, VppIpPuntPolicer, VppIpPuntRedirect, VppIpPathMtu
 from six import moves
 
 from framework import VppTestCase, VppTestRunner, tag_run_solo
 from util import ppp, ip6_normalize, mk_ll_addr
 from vpp_papi import VppEnum
 from vpp_ip import DpoProto, VppIpPuntPolicer, VppIpPuntRedirect, VppIpPathMtu
-from vpp_ip_route import VppIpRoute, VppRoutePath, find_route, VppIpMRoute, \
-    VppMRoutePath, VppMplsIpBind, \
-    VppMplsRoute, VppMplsTable, VppIpTable, FibPathType, FibPathProto, \
-    VppIpInterfaceAddress, find_route_in_dump, find_mroute_in_dump, \
-    VppIp6LinkLocalAddress, VppIpRouteV2
+from vpp_ip_route import (
+    VppIpRoute,
+    VppRoutePath,
+    find_route,
+    VppIpMRoute,
+    VppMRoutePath,
+    VppMplsIpBind,
+    VppMplsRoute,
+    VppMplsTable,
+    VppIpTable,
+    FibPathType,
+    FibPathProto,
+    VppIpInterfaceAddress,
+    find_route_in_dump,
+    find_mroute_in_dump,
+    VppIp6LinkLocalAddress,
+    VppIpRouteV2,
+)
 from vpp_neighbor import find_nbr, VppNeighbor
 from vpp_ipip_tun_interface import VppIpIpTunInterface
 from vpp_pg_interface import is_ipv6_misc
 from vpp_neighbor import find_nbr, VppNeighbor
 from vpp_ipip_tun_interface import VppIpIpTunInterface
 from vpp_pg_interface import is_ipv6_misc
@@ -61,13 +93,11 @@ class TestIPv6ND(VppTestCase):
 
         # the rx'd RA should be addressed to the sender's source
         self.assertTrue(rx.haslayer(ICMPv6ND_RA))
 
         # the rx'd RA should be addressed to the sender's source
         self.assertTrue(rx.haslayer(ICMPv6ND_RA))
-        self.assertEqual(in6_ptop(rx[IPv6].dst),
-                         in6_ptop(dst_ip))
+        self.assertEqual(in6_ptop(rx[IPv6].dst), in6_ptop(dst_ip))
 
         # and come from the router's link local
         self.assertTrue(in6_islladdr(rx[IPv6].src))
 
         # and come from the router's link local
         self.assertTrue(in6_islladdr(rx[IPv6].src))
-        self.assertEqual(in6_ptop(rx[IPv6].src),
-                         in6_ptop(mk_ll_addr(intf.local_mac)))
+        self.assertEqual(in6_ptop(rx[IPv6].src), in6_ptop(mk_ll_addr(intf.local_mac)))
 
     def validate_na(self, intf, rx, dst_ip=None, tgt_ip=None):
         if not dst_ip:
 
     def validate_na(self, intf, rx, dst_ip=None, tgt_ip=None):
         if not dst_ip:
@@ -83,12 +113,10 @@ class TestIPv6ND(VppTestCase):
 
         # the rx'd NA should be addressed to the sender's source
         self.assertTrue(rx.haslayer(ICMPv6ND_NA))
 
         # the rx'd NA should be addressed to the sender's source
         self.assertTrue(rx.haslayer(ICMPv6ND_NA))
-        self.assertEqual(in6_ptop(rx[IPv6].dst),
-                         in6_ptop(dst_ip))
+        self.assertEqual(in6_ptop(rx[IPv6].dst), in6_ptop(dst_ip))
 
         # and come from the target address
 
         # and come from the target address
-        self.assertEqual(
-            in6_ptop(rx[IPv6].src), in6_ptop(tgt_ip))
+        self.assertEqual(in6_ptop(rx[IPv6].src), in6_ptop(tgt_ip))
 
         # Dest link-layer options should have the router's MAC
         dll = rx[ICMPv6NDOptDstLLAddr]
 
         # Dest link-layer options should have the router's MAC
         dll = rx[ICMPv6NDOptDstLLAddr]
@@ -106,23 +134,22 @@ class TestIPv6ND(VppTestCase):
 
         # the rx'd NS should be addressed to an mcast address
         # derived from the target address
 
         # the rx'd NS should be addressed to an mcast address
         # derived from the target address
-        self.assertEqual(
-            in6_ptop(rx[IPv6].dst), in6_ptop(dst_ip))
+        self.assertEqual(in6_ptop(rx[IPv6].dst), in6_ptop(dst_ip))
 
         # expect the tgt IP in the NS header
         ns = rx[ICMPv6ND_NS]
         self.assertEqual(in6_ptop(ns.tgt), in6_ptop(tgt_ip))
 
         # packet is from the router's local address
 
         # expect the tgt IP in the NS header
         ns = rx[ICMPv6ND_NS]
         self.assertEqual(in6_ptop(ns.tgt), in6_ptop(tgt_ip))
 
         # packet is from the router's local address
-        self.assertEqual(
-            in6_ptop(rx[IPv6].src), intf.local_ip6)
+        self.assertEqual(in6_ptop(rx[IPv6].src), intf.local_ip6)
 
         # Src link-layer options should have the router's MAC
         sll = rx[ICMPv6NDOptSrcLLAddr]
         self.assertEqual(sll.lladdr, intf.local_mac)
 
 
         # Src link-layer options should have the router's MAC
         sll = rx[ICMPv6NDOptSrcLLAddr]
         self.assertEqual(sll.lladdr, intf.local_mac)
 
-    def send_and_expect_ra(self, intf, pkts, remark, dst_ip=None,
-                           filter_out_fn=is_ipv6_misc):
+    def send_and_expect_ra(
+        self, intf, pkts, remark, dst_ip=None, filter_out_fn=is_ipv6_misc
+    ):
         intf.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         intf.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -132,9 +159,9 @@ class TestIPv6ND(VppTestCase):
         rx = rx[0]
         self.validate_ra(intf, rx, dst_ip)
 
         rx = rx[0]
         self.validate_ra(intf, rx, dst_ip)
 
-    def send_and_expect_na(self, intf, pkts, remark, dst_ip=None,
-                           tgt_ip=None,
-                           filter_out_fn=is_ipv6_misc):
+    def send_and_expect_na(
+        self, intf, pkts, remark, dst_ip=None, tgt_ip=None, filter_out_fn=is_ipv6_misc
+    ):
         intf.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         intf.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -144,8 +171,9 @@ class TestIPv6ND(VppTestCase):
         rx = rx[0]
         self.validate_na(intf, rx, dst_ip, tgt_ip)
 
         rx = rx[0]
         self.validate_na(intf, rx, dst_ip, tgt_ip)
 
-    def send_and_expect_ns(self, tx_intf, rx_intf, pkts, tgt_ip,
-                           filter_out_fn=is_ipv6_misc):
+    def send_and_expect_ns(
+        self, tx_intf, rx_intf, pkts, tgt_ip, filter_out_fn=is_ipv6_misc
+    ):
         self.vapi.cli("clear trace")
         tx_intf.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
         self.vapi.cli("clear trace")
         tx_intf.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
@@ -168,7 +196,7 @@ class TestIPv6ND(VppTestCase):
 
 @tag_run_solo
 class TestIPv6(TestIPv6ND):
 
 @tag_run_solo
 class TestIPv6(TestIPv6ND):
-    """ IPv6 Test Case """
+    """IPv6 Test Case"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -268,17 +296,26 @@ class TestIPv6(TestIPv6ND):
         :param VppInterface src_if: Interface to create packet stream for.
         """
         hdr_ext = 4 if isinstance(src_if, VppSubInterface) else 0
         :param VppInterface src_if: Interface to create packet stream for.
         """
         hdr_ext = 4 if isinstance(src_if, VppSubInterface) else 0
-        pkt_tmpl = (Ether(dst=src_if.local_mac, src=src_if.remote_mac) /
-                    IPv6(src=src_if.remote_ip6) /
-                    inet6.UDP(sport=1234, dport=1234))
-
-        pkts = [self.modify_packet(src_if, i, pkt_tmpl)
-                for i in moves.range(self.pg_if_packet_sizes[0],
-                                     self.pg_if_packet_sizes[1], 10)]
-        pkts_b = [self.modify_packet(src_if, i, pkt_tmpl)
-                  for i in moves.range(self.pg_if_packet_sizes[1] + hdr_ext,
-                                       self.pg_if_packet_sizes[2] + hdr_ext,
-                                       50)]
+        pkt_tmpl = (
+            Ether(dst=src_if.local_mac, src=src_if.remote_mac)
+            / IPv6(src=src_if.remote_ip6)
+            / inet6.UDP(sport=1234, dport=1234)
+        )
+
+        pkts = [
+            self.modify_packet(src_if, i, pkt_tmpl)
+            for i in moves.range(
+                self.pg_if_packet_sizes[0], self.pg_if_packet_sizes[1], 10
+            )
+        ]
+        pkts_b = [
+            self.modify_packet(src_if, i, pkt_tmpl)
+            for i in moves.range(
+                self.pg_if_packet_sizes[1] + hdr_ext,
+                self.pg_if_packet_sizes[2] + hdr_ext,
+                50,
+            )
+        ]
         pkts.extend(pkts_b)
 
         return pkts
         pkts.extend(pkts_b)
 
         return pkts
@@ -296,7 +333,7 @@ class TestIPv6(TestIPv6ND):
             last_info[i.sw_if_index] = None
         is_sub_if = False
         dst_sw_if_index = dst_if.sw_if_index
             last_info[i.sw_if_index] = None
         is_sub_if = False
         dst_sw_if_index = dst_if.sw_if_index
-        if hasattr(dst_if, 'parent'):
+        if hasattr(dst_if, "parent"):
             is_sub_if = True
         for packet in capture:
             if is_sub_if:
             is_sub_if = True
         for packet in capture:
             if is_sub_if:
@@ -310,45 +347,47 @@ class TestIPv6(TestIPv6ND):
                 packet_index = payload_info.index
                 self.assertEqual(payload_info.dst, dst_sw_if_index)
                 self.logger.debug(
                 packet_index = payload_info.index
                 self.assertEqual(payload_info.dst, dst_sw_if_index)
                 self.logger.debug(
-                    "Got packet on port %s: src=%u (id=%u)" %
-                    (dst_if.name, payload_info.src, packet_index))
+                    "Got packet on port %s: src=%u (id=%u)"
+                    % (dst_if.name, payload_info.src, packet_index)
+                )
                 next_info = self.get_next_packet_info_for_interface2(
                 next_info = self.get_next_packet_info_for_interface2(
-                    payload_info.src, dst_sw_if_index,
-                    last_info[payload_info.src])
+                    payload_info.src, dst_sw_if_index, last_info[payload_info.src]
+                )
                 last_info[payload_info.src] = next_info
                 self.assertTrue(next_info is not None)
                 self.assertEqual(packet_index, next_info.index)
                 saved_packet = next_info.data
                 # Check standard fields
                 last_info[payload_info.src] = next_info
                 self.assertTrue(next_info is not None)
                 self.assertEqual(packet_index, next_info.index)
                 saved_packet = next_info.data
                 # Check standard fields
-                self.assertEqual(
-                    ip.src, saved_packet[IPv6].src)
-                self.assertEqual(
-                    ip.dst, saved_packet[IPv6].dst)
-                self.assertEqual(
-                    udp.sport, saved_packet[inet6.UDP].sport)
-                self.assertEqual(
-                    udp.dport, saved_packet[inet6.UDP].dport)
+                self.assertEqual(ip.src, saved_packet[IPv6].src)
+                self.assertEqual(ip.dst, saved_packet[IPv6].dst)
+                self.assertEqual(udp.sport, saved_packet[inet6.UDP].sport)
+                self.assertEqual(udp.dport, saved_packet[inet6.UDP].dport)
             except:
                 self.logger.error(ppp("Unexpected or invalid packet:", packet))
                 raise
         for i in self.interfaces:
             remaining_packet = self.get_next_packet_info_for_interface2(
             except:
                 self.logger.error(ppp("Unexpected or invalid packet:", packet))
                 raise
         for i in self.interfaces:
             remaining_packet = self.get_next_packet_info_for_interface2(
-                i.sw_if_index, dst_sw_if_index, last_info[i.sw_if_index])
-            self.assertTrue(remaining_packet is None,
-                            "Interface %s: Packet expected from interface %s "
-                            "didn't arrive" % (dst_if.name, i.name))
+                i.sw_if_index, dst_sw_if_index, last_info[i.sw_if_index]
+            )
+            self.assertTrue(
+                remaining_packet is None,
+                "Interface %s: Packet expected from interface %s "
+                "didn't arrive" % (dst_if.name, i.name),
+            )
 
     def test_next_header_anomaly(self):
 
     def test_next_header_anomaly(self):
-        """ IPv6 next header anomaly test
+        """IPv6 next header anomaly test
 
         Test scenario:
             - ipv6 next header field = Fragment Header (44)
             - next header is ICMPv6 Echo Request
             - wait for reassembly
         """
 
         Test scenario:
             - ipv6 next header field = Fragment Header (44)
             - next header is ICMPv6 Echo Request
             - wait for reassembly
         """
-        pkt = (Ether(src=self.pg0.local_mac, dst=self.pg0.remote_mac) /
-               IPv6(src=self.pg0.remote_ip6, dst=self.pg0.local_ip6, nh=44) /
-               ICMPv6EchoRequest())
+        pkt = (
+            Ether(src=self.pg0.local_mac, dst=self.pg0.remote_mac)
+            / IPv6(src=self.pg0.remote_ip6, dst=self.pg0.local_ip6, nh=44)
+            / ICMPv6EchoRequest()
+        )
 
         self.pg0.add_stream(pkt)
         self.pg_start()
 
         self.pg0.add_stream(pkt)
         self.pg_start()
@@ -357,7 +396,7 @@ class TestIPv6(TestIPv6ND):
         self.sleep(10)
 
     def test_fib(self):
         self.sleep(10)
 
     def test_fib(self):
-        """ IPv6 FIB test
+        """IPv6 FIB test
 
         Test scenario:
             - Create IPv6 stream for pg0 interface
 
         Test scenario:
             - Create IPv6 stream for pg0 interface
@@ -383,7 +422,7 @@ class TestIPv6(TestIPv6ND):
             self.verify_capture(i, pkts)
 
     def test_ns(self):
             self.verify_capture(i, pkts)
 
     def test_ns(self):
-        """ IPv6 Neighbour Solicitation Exceptions
+        """IPv6 Neighbour Solicitation Exceptions
 
         Test scenario:
            - Send an NS Sourced from an address not covered by the link sub-net
 
         Test scenario:
            - Send an NS Sourced from an address not covered by the link sub-net
@@ -397,16 +436,17 @@ class TestIPv6(TestIPv6ND):
         nsma = in6_getnsma(inet_pton(AF_INET6, self.pg0.local_ip6))
         d = inet_ntop(AF_INET6, nsma)
 
         nsma = in6_getnsma(inet_pton(AF_INET6, self.pg0.local_ip6))
         d = inet_ntop(AF_INET6, nsma)
 
-        p = (Ether(dst=in6_getnsmac(nsma)) /
-             IPv6(dst=d, src="2002::2") /
-             ICMPv6ND_NS(tgt=self.pg0.local_ip6) /
-             ICMPv6NDOptSrcLLAddr(
-                 lladdr=self.pg0.remote_mac))
+        p = (
+            Ether(dst=in6_getnsmac(nsma))
+            / IPv6(dst=d, src="2002::2")
+            / ICMPv6ND_NS(tgt=self.pg0.local_ip6)
+            / ICMPv6NDOptSrcLLAddr(lladdr=self.pg0.remote_mac)
+        )
         pkts = [p]
 
         self.send_and_assert_no_replies(
         pkts = [p]
 
         self.send_and_assert_no_replies(
-            self.pg0, pkts,
-            "No response to NS source by address not on sub-net")
+            self.pg0, pkts, "No response to NS source by address not on sub-net"
+        )
 
         #
         # An NS for sent to a solicited mcast group the router is
 
         #
         # An NS for sent to a solicited mcast group the router is
@@ -416,16 +456,17 @@ class TestIPv6(TestIPv6ND):
             nsma = in6_getnsma(inet_pton(AF_INET6, "fd::ffff"))
             d = inet_ntop(AF_INET6, nsma)
 
             nsma = in6_getnsma(inet_pton(AF_INET6, "fd::ffff"))
             d = inet_ntop(AF_INET6, nsma)
 
-            p = (Ether(dst=in6_getnsmac(nsma)) /
-                 IPv6(dst=d, src=self.pg0.remote_ip6) /
-                 ICMPv6ND_NS(tgt=self.pg0.local_ip6) /
-                 ICMPv6NDOptSrcLLAddr(
-                     lladdr=self.pg0.remote_mac))
+            p = (
+                Ether(dst=in6_getnsmac(nsma))
+                / IPv6(dst=d, src=self.pg0.remote_ip6)
+                / ICMPv6ND_NS(tgt=self.pg0.local_ip6)
+                / ICMPv6NDOptSrcLLAddr(lladdr=self.pg0.remote_mac)
+            )
             pkts = [p]
 
             self.send_and_assert_no_replies(
             pkts = [p]
 
             self.send_and_assert_no_replies(
-                self.pg0, pkts,
-                "No response to NS sent to unjoined mcast address")
+                self.pg0, pkts, "No response to NS sent to unjoined mcast address"
+            )
 
         #
         # An NS whose target address is one the router does not own
 
         #
         # An NS whose target address is one the router does not own
@@ -433,88 +474,94 @@ class TestIPv6(TestIPv6ND):
         nsma = in6_getnsma(inet_pton(AF_INET6, self.pg0.local_ip6))
         d = inet_ntop(AF_INET6, nsma)
 
         nsma = in6_getnsma(inet_pton(AF_INET6, self.pg0.local_ip6))
         d = inet_ntop(AF_INET6, nsma)
 
-        p = (Ether(dst=in6_getnsmac(nsma)) /
-             IPv6(dst=d, src=self.pg0.remote_ip6) /
-             ICMPv6ND_NS(tgt="fd::ffff") /
-             ICMPv6NDOptSrcLLAddr(
-                 lladdr=self.pg0.remote_mac))
+        p = (
+            Ether(dst=in6_getnsmac(nsma))
+            / IPv6(dst=d, src=self.pg0.remote_ip6)
+            / ICMPv6ND_NS(tgt="fd::ffff")
+            / ICMPv6NDOptSrcLLAddr(lladdr=self.pg0.remote_mac)
+        )
         pkts = [p]
 
         pkts = [p]
 
-        self.send_and_assert_no_replies(self.pg0, pkts,
-                                        "No response to NS for unknown target")
+        self.send_and_assert_no_replies(
+            self.pg0, pkts, "No response to NS for unknown target"
+        )
 
         #
         # A neighbor entry that has no associated FIB-entry
         #
         self.pg0.generate_remote_hosts(4)
 
         #
         # A neighbor entry that has no associated FIB-entry
         #
         self.pg0.generate_remote_hosts(4)
-        nd_entry = VppNeighbor(self,
-                               self.pg0.sw_if_index,
-                               self.pg0.remote_hosts[2].mac,
-                               self.pg0.remote_hosts[2].ip6,
-                               is_no_fib_entry=1)
+        nd_entry = VppNeighbor(
+            self,
+            self.pg0.sw_if_index,
+            self.pg0.remote_hosts[2].mac,
+            self.pg0.remote_hosts[2].ip6,
+            is_no_fib_entry=1,
+        )
         nd_entry.add_vpp_config()
 
         #
         # check we have the neighbor, but no route
         #
         nd_entry.add_vpp_config()
 
         #
         # check we have the neighbor, but no route
         #
-        self.assertTrue(find_nbr(self,
-                                 self.pg0.sw_if_index,
-                                 self.pg0._remote_hosts[2].ip6))
-        self.assertFalse(find_route(self,
-                                    self.pg0._remote_hosts[2].ip6,
-                                    128))
+        self.assertTrue(
+            find_nbr(self, self.pg0.sw_if_index, self.pg0._remote_hosts[2].ip6)
+        )
+        self.assertFalse(find_route(self, self.pg0._remote_hosts[2].ip6, 128))
 
         #
         # send an NS from a link local address to the interface's global
         # address
         #
 
         #
         # send an NS from a link local address to the interface's global
         # address
         #
-        p = (Ether(dst=in6_getnsmac(nsma), src=self.pg0.remote_mac) /
-             IPv6(
-                 dst=d, src=self.pg0._remote_hosts[2].ip6_ll) /
-             ICMPv6ND_NS(tgt=self.pg0.local_ip6) /
-             ICMPv6NDOptSrcLLAddr(
-                 lladdr=self.pg0.remote_mac))
+        p = (
+            Ether(dst=in6_getnsmac(nsma), src=self.pg0.remote_mac)
+            / IPv6(dst=d, src=self.pg0._remote_hosts[2].ip6_ll)
+            / ICMPv6ND_NS(tgt=self.pg0.local_ip6)
+            / ICMPv6NDOptSrcLLAddr(lladdr=self.pg0.remote_mac)
+        )
 
 
-        self.send_and_expect_na(self.pg0, p,
-                                "NS from link-local",
-                                dst_ip=self.pg0._remote_hosts[2].ip6_ll,
-                                tgt_ip=self.pg0.local_ip6)
+        self.send_and_expect_na(
+            self.pg0,
+            p,
+            "NS from link-local",
+            dst_ip=self.pg0._remote_hosts[2].ip6_ll,
+            tgt_ip=self.pg0.local_ip6,
+        )
 
         #
         # we should have learned an ND entry for the peer's link-local
         # but not inserted a route to it in the FIB
         #
 
         #
         # we should have learned an ND entry for the peer's link-local
         # but not inserted a route to it in the FIB
         #
-        self.assertTrue(find_nbr(self,
-                                 self.pg0.sw_if_index,
-                                 self.pg0._remote_hosts[2].ip6_ll))
-        self.assertFalse(find_route(self,
-                                    self.pg0._remote_hosts[2].ip6_ll,
-                                    128))
+        self.assertTrue(
+            find_nbr(self, self.pg0.sw_if_index, self.pg0._remote_hosts[2].ip6_ll)
+        )
+        self.assertFalse(find_route(self, self.pg0._remote_hosts[2].ip6_ll, 128))
 
         #
         # An NS to the router's own Link-local
         #
 
         #
         # An NS to the router's own Link-local
         #
-        p = (Ether(dst=in6_getnsmac(nsma), src=self.pg0.remote_mac) /
-             IPv6(
-                 dst=d, src=self.pg0._remote_hosts[3].ip6_ll) /
-             ICMPv6ND_NS(tgt=self.pg0.local_ip6_ll) /
-             ICMPv6NDOptSrcLLAddr(
-                 lladdr=self.pg0.remote_mac))
+        p = (
+            Ether(dst=in6_getnsmac(nsma), src=self.pg0.remote_mac)
+            / IPv6(dst=d, src=self.pg0._remote_hosts[3].ip6_ll)
+            / ICMPv6ND_NS(tgt=self.pg0.local_ip6_ll)
+            / ICMPv6NDOptSrcLLAddr(lladdr=self.pg0.remote_mac)
+        )
 
 
-        self.send_and_expect_na(self.pg0, p,
-                                "NS to/from link-local",
-                                dst_ip=self.pg0._remote_hosts[3].ip6_ll,
-                                tgt_ip=self.pg0.local_ip6_ll)
+        self.send_and_expect_na(
+            self.pg0,
+            p,
+            "NS to/from link-local",
+            dst_ip=self.pg0._remote_hosts[3].ip6_ll,
+            tgt_ip=self.pg0.local_ip6_ll,
+        )
 
         #
         # do not respond to a NS for the peer's address
         #
 
         #
         # do not respond to a NS for the peer's address
         #
-        p = (Ether(dst=in6_getnsmac(nsma), src=self.pg0.remote_mac) /
-             IPv6(dst=d,
-                  src=self.pg0._remote_hosts[3].ip6_ll) /
-             ICMPv6ND_NS(tgt=self.pg0._remote_hosts[3].ip6_ll) /
-             ICMPv6NDOptSrcLLAddr(
-                 lladdr=self.pg0.remote_mac))
+        p = (
+            Ether(dst=in6_getnsmac(nsma), src=self.pg0.remote_mac)
+            / IPv6(dst=d, src=self.pg0._remote_hosts[3].ip6_ll)
+            / ICMPv6ND_NS(tgt=self.pg0._remote_hosts[3].ip6_ll)
+            / ICMPv6NDOptSrcLLAddr(lladdr=self.pg0.remote_mac)
+        )
 
         self.send_and_assert_no_replies(self.pg0, p)
 
 
         self.send_and_assert_no_replies(self.pg0, p)
 
@@ -522,15 +569,13 @@ class TestIPv6(TestIPv6ND):
         # we should have learned an ND entry for the peer's link-local
         # but not inserted a route to it in the FIB
         #
         # we should have learned an ND entry for the peer's link-local
         # but not inserted a route to it in the FIB
         #
-        self.assertTrue(find_nbr(self,
-                                 self.pg0.sw_if_index,
-                                 self.pg0._remote_hosts[3].ip6_ll))
-        self.assertFalse(find_route(self,
-                                    self.pg0._remote_hosts[3].ip6_ll,
-                                    128))
+        self.assertTrue(
+            find_nbr(self, self.pg0.sw_if_index, self.pg0._remote_hosts[3].ip6_ll)
+        )
+        self.assertFalse(find_route(self, self.pg0._remote_hosts[3].ip6_ll, 128))
 
     def test_ns_duplicates(self):
 
     def test_ns_duplicates(self):
-        """ ND Duplicates"""
+        """ND Duplicates"""
 
         #
         # Generate some hosts on the LAN
 
         #
         # Generate some hosts on the LAN
@@ -540,26 +585,30 @@ class TestIPv6(TestIPv6ND):
         #
         # Add host 1 on pg1 and pg2
         #
         #
         # Add host 1 on pg1 and pg2
         #
-        ns_pg1 = VppNeighbor(self,
-                             self.pg1.sw_if_index,
-                             self.pg1.remote_hosts[1].mac,
-                             self.pg1.remote_hosts[1].ip6)
+        ns_pg1 = VppNeighbor(
+            self,
+            self.pg1.sw_if_index,
+            self.pg1.remote_hosts[1].mac,
+            self.pg1.remote_hosts[1].ip6,
+        )
         ns_pg1.add_vpp_config()
         ns_pg1.add_vpp_config()
-        ns_pg2 = VppNeighbor(self,
-                             self.pg2.sw_if_index,
-                             self.pg2.remote_mac,
-                             self.pg1.remote_hosts[1].ip6)
+        ns_pg2 = VppNeighbor(
+            self,
+            self.pg2.sw_if_index,
+            self.pg2.remote_mac,
+            self.pg1.remote_hosts[1].ip6,
+        )
         ns_pg2.add_vpp_config()
 
         #
         # IP packet destined for pg1 remote host arrives on pg1 again.
         #
         ns_pg2.add_vpp_config()
 
         #
         # IP packet destined for pg1 remote host arrives on pg1 again.
         #
-        p = (Ether(dst=self.pg0.local_mac,
-                   src=self.pg0.remote_mac) /
-             IPv6(src=self.pg0.remote_ip6,
-                  dst=self.pg1.remote_hosts[1].ip6) /
-             inet6.UDP(sport=1234, dport=1234) /
-             Raw())
+        p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IPv6(src=self.pg0.remote_ip6, dst=self.pg1.remote_hosts[1].ip6)
+            / inet6.UDP(sport=1234, dport=1234)
+            / Raw()
+        )
 
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
 
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
@@ -567,11 +616,13 @@ class TestIPv6(TestIPv6ND):
 
         rx1 = self.pg1.get_capture(1)
 
 
         rx1 = self.pg1.get_capture(1)
 
-        self.verify_ip(rx1[0],
-                       self.pg1.local_mac,
-                       self.pg1.remote_hosts[1].mac,
-                       self.pg0.remote_ip6,
-                       self.pg1.remote_hosts[1].ip6)
+        self.verify_ip(
+            rx1[0],
+            self.pg1.local_mac,
+            self.pg1.remote_hosts[1].mac,
+            self.pg0.remote_ip6,
+            self.pg1.remote_hosts[1].ip6,
+        )
 
         #
         # remove the duplicate on pg1
 
         #
         # remove the duplicate on pg1
@@ -579,8 +630,7 @@ class TestIPv6(TestIPv6ND):
         #
         ns_pg1.remove_vpp_config()
 
         #
         ns_pg1.remove_vpp_config()
 
-        self.send_and_expect_ns(self.pg0, self.pg1,
-                                p, self.pg1.remote_hosts[1].ip6)
+        self.send_and_expect_ns(self.pg0, self.pg1, p, self.pg1.remote_hosts[1].ip6)
 
         #
         # Add it back
 
         #
         # Add it back
@@ -593,14 +643,15 @@ class TestIPv6(TestIPv6ND):
 
         rx1 = self.pg1.get_capture(1)
 
 
         rx1 = self.pg1.get_capture(1)
 
-        self.verify_ip(rx1[0],
-                       self.pg1.local_mac,
-                       self.pg1.remote_hosts[1].mac,
-                       self.pg0.remote_ip6,
-                       self.pg1.remote_hosts[1].ip6)
+        self.verify_ip(
+            rx1[0],
+            self.pg1.local_mac,
+            self.pg1.remote_hosts[1].mac,
+            self.pg0.remote_ip6,
+            self.pg1.remote_hosts[1].ip6,
+        )
 
 
-    def validate_ra(self, intf, rx, dst_ip=None, src_ip=None,
-                    mtu=9000, pi_opt=None):
+    def validate_ra(self, intf, rx, dst_ip=None, src_ip=None, mtu=9000, pi_opt=None):
         if not dst_ip:
             dst_ip = intf.remote_ip6
         if not src_ip:
         if not dst_ip:
             dst_ip = intf.remote_ip6
         if not src_ip:
@@ -614,8 +665,7 @@ class TestIPv6(TestIPv6ND):
 
         # the rx'd RA should be addressed to the sender's source
         self.assertTrue(rx.haslayer(ICMPv6ND_RA))
 
         # the rx'd RA should be addressed to the sender's source
         self.assertTrue(rx.haslayer(ICMPv6ND_RA))
-        self.assertEqual(in6_ptop(rx[IPv6].dst),
-                         in6_ptop(dst_ip))
+        self.assertEqual(in6_ptop(rx[IPv6].dst), in6_ptop(dst_ip))
 
         # and come from the router's link local
         self.assertTrue(in6_islladdr(rx[IPv6].src))
 
         # and come from the router's link local
         self.assertTrue(in6_islladdr(rx[IPv6].src))
@@ -631,8 +681,7 @@ class TestIPv6(TestIPv6ND):
 
         if not pi_opt:
             # the RA should not contain prefix information
 
         if not pi_opt:
             # the RA should not contain prefix information
-            self.assertFalse(ra.haslayer(
-                ICMPv6NDOptPrefixInfo))
+            self.assertFalse(ra.haslayer(ICMPv6NDOptPrefixInfo))
         else:
             raos = rx.getlayer(ICMPv6NDOptPrefixInfo, 1)
 
         else:
             raos = rx.getlayer(ICMPv6NDOptPrefixInfo, 1)
 
@@ -642,24 +691,30 @@ class TestIPv6(TestIPv6ND):
             # however, the getlayer(.., 2) does give one instance.
             # so we cheat here and construct a new opt instance for comparison
             rd = ICMPv6NDOptPrefixInfo(
             # however, the getlayer(.., 2) does give one instance.
             # so we cheat here and construct a new opt instance for comparison
             rd = ICMPv6NDOptPrefixInfo(
-                prefixlen=raos.prefixlen,
-                prefix=raos.prefix,
-                L=raos.L,
-                A=raos.A)
+                prefixlen=raos.prefixlen, prefix=raos.prefix, L=raos.L, A=raos.A
+            )
             if type(pi_opt) is list:
                 for ii in range(len(pi_opt)):
                     self.assertEqual(pi_opt[ii], rd)
             if type(pi_opt) is list:
                 for ii in range(len(pi_opt)):
                     self.assertEqual(pi_opt[ii], rd)
-                    rd = rx.getlayer(
-                        ICMPv6NDOptPrefixInfo, ii + 2)
+                    rd = rx.getlayer(ICMPv6NDOptPrefixInfo, ii + 2)
             else:
             else:
-                self.assertEqual(pi_opt, raos, 'Expected: %s, received: %s'
-                                 % (pi_opt.show(dump=True),
-                                    raos.show(dump=True)))
-
-    def send_and_expect_ra(self, intf, pkts, remark, dst_ip=None,
-                           filter_out_fn=is_ipv6_misc,
-                           opt=None,
-                           src_ip=None):
+                self.assertEqual(
+                    pi_opt,
+                    raos,
+                    "Expected: %s, received: %s"
+                    % (pi_opt.show(dump=True), raos.show(dump=True)),
+                )
+
+    def send_and_expect_ra(
+        self,
+        intf,
+        pkts,
+        remark,
+        dst_ip=None,
+        filter_out_fn=is_ipv6_misc,
+        opt=None,
+        src_ip=None,
+    ):
         self.vapi.cli("clear trace")
         intf.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
         self.vapi.cli("clear trace")
         intf.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
@@ -671,7 +726,7 @@ class TestIPv6(TestIPv6ND):
         self.validate_ra(intf, rx, dst_ip, src_ip=src_ip, pi_opt=opt)
 
     def test_rs(self):
         self.validate_ra(intf, rx, dst_ip, src_ip=src_ip, pi_opt=opt)
 
     def test_rs(self):
-        """ IPv6 Router Solicitation Exceptions
+        """IPv6 Router Solicitation Exceptions
 
         Test scenario:
         """
 
         Test scenario:
         """
@@ -692,9 +747,11 @@ class TestIPv6(TestIPv6ND):
         # An RS from a link source address
         #  - expect an RA in return
         #
         # An RS from a link source address
         #  - expect an RA in return
         #
-        p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-             IPv6(dst=self.pg0.local_ip6, src=self.pg0.remote_ip6) /
-             ICMPv6ND_RS())
+        p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IPv6(dst=self.pg0.local_ip6, src=self.pg0.remote_ip6)
+            / ICMPv6ND_RS()
+        )
         pkts = [p]
         self.send_and_expect_ra(self.pg0, pkts, "Genuine RS")
 
         pkts = [p]
         self.send_and_expect_ra(self.pg0, pkts, "Genuine RS")
 
@@ -716,26 +773,26 @@ class TestIPv6(TestIPv6ND):
         # An RS sent from a non-link local source
         #
         self.pg0.ip6_ra_config(send_unicast=1)
         # An RS sent from a non-link local source
         #
         self.pg0.ip6_ra_config(send_unicast=1)
-        p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-             IPv6(dst=self.pg0.local_ip6,
-                  src="2002::ffff") /
-             ICMPv6ND_RS())
+        p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IPv6(dst=self.pg0.local_ip6, src="2002::ffff")
+            / ICMPv6ND_RS()
+        )
         pkts = [p]
         pkts = [p]
-        self.send_and_assert_no_replies(self.pg0, pkts,
-                                        "RS from non-link source")
+        self.send_and_assert_no_replies(self.pg0, pkts, "RS from non-link source")
 
         #
         # Source an RS from a link local address
         #
         self.pg0.ip6_ra_config(send_unicast=1)
         ll = mk_ll_addr(self.pg0.remote_mac)
 
         #
         # Source an RS from a link local address
         #
         self.pg0.ip6_ra_config(send_unicast=1)
         ll = mk_ll_addr(self.pg0.remote_mac)
-        p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-             IPv6(dst=self.pg0.local_ip6, src=ll) /
-             ICMPv6ND_RS())
+        p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IPv6(dst=self.pg0.local_ip6, src=ll)
+            / ICMPv6ND_RS()
+        )
         pkts = [p]
         pkts = [p]
-        self.send_and_expect_ra(self.pg0, pkts,
-                                "RS sourced from link-local",
-                                dst_ip=ll)
+        self.send_and_expect_ra(self.pg0, pkts, "RS sourced from link-local", dst_ip=ll)
 
         #
         # Source an RS from a link local address
 
         #
         # Source an RS from a link local address
@@ -743,12 +800,13 @@ class TestIPv6(TestIPv6ND):
         #
         self.pg0.ip6_ra_config(send_unicast=1, suppress=1)
         ll = mk_ll_addr(self.pg0.remote_mac)
         #
         self.pg0.ip6_ra_config(send_unicast=1, suppress=1)
         ll = mk_ll_addr(self.pg0.remote_mac)
-        p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-             IPv6(dst=self.pg0.local_ip6, src=ll) /
-             ICMPv6ND_RS())
+        p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IPv6(dst=self.pg0.local_ip6, src=ll)
+            / ICMPv6ND_RS()
+        )
         pkts = [p]
         pkts = [p]
-        self.send_and_assert_no_replies(self.pg0, pkts,
-                                        "Suppressed RS from link-local")
+        self.send_and_assert_no_replies(self.pg0, pkts, "Suppressed RS from link-local")
 
         #
         # Send the RS multicast
 
         #
         # Send the RS multicast
@@ -757,13 +815,13 @@ class TestIPv6(TestIPv6ND):
         self.pg0.ip6_ra_config(send_unicast=1)
         dmac = in6_getnsmac(inet_pton(AF_INET6, "ff02::2"))
         ll = mk_ll_addr(self.pg0.remote_mac)
         self.pg0.ip6_ra_config(send_unicast=1)
         dmac = in6_getnsmac(inet_pton(AF_INET6, "ff02::2"))
         ll = mk_ll_addr(self.pg0.remote_mac)
-        p = (Ether(dst=dmac, src=self.pg0.remote_mac) /
-             IPv6(dst="ff02::2", src=ll) /
-             ICMPv6ND_RS())
+        p = (
+            Ether(dst=dmac, src=self.pg0.remote_mac)
+            / IPv6(dst="ff02::2", src=ll)
+            / ICMPv6ND_RS()
+        )
         pkts = [p]
         pkts = [p]
-        self.send_and_expect_ra(self.pg0, pkts,
-                                "RS sourced from link-local",
-                                dst_ip=ll)
+        self.send_and_expect_ra(self.pg0, pkts, "RS sourced from link-local", dst_ip=ll)
 
         #
         # Source from the unspecified address ::. This happens when the RS
 
         #
         # Source from the unspecified address ::. This happens when the RS
@@ -774,209 +832,204 @@ class TestIPv6(TestIPv6ND):
         # it's not an error.
         #
         self.pg0.ip6_ra_config(send_unicast=1)
         # it's not an error.
         #
         self.pg0.ip6_ra_config(send_unicast=1)
-        p = (Ether(dst=dmac, src=self.pg0.remote_mac) /
-             IPv6(dst="ff02::2", src="::") /
-             ICMPv6ND_RS())
+        p = (
+            Ether(dst=dmac, src=self.pg0.remote_mac)
+            / IPv6(dst="ff02::2", src="::")
+            / ICMPv6ND_RS()
+        )
         pkts = [p]
         pkts = [p]
-        self.send_and_expect_ra(self.pg0, pkts,
-                                "RS sourced from unspecified",
-                                dst_ip="ff02::1",
-                                filter_out_fn=None)
+        self.send_and_expect_ra(
+            self.pg0,
+            pkts,
+            "RS sourced from unspecified",
+            dst_ip="ff02::1",
+            filter_out_fn=None,
+        )
 
         #
         # Configure The RA to announce the links prefix
         #
 
         #
         # Configure The RA to announce the links prefix
         #
-        self.pg0.ip6_ra_prefix('%s/%s' % (self.pg0.local_ip6,
-                               self.pg0.local_ip6_prefix_len))
+        self.pg0.ip6_ra_prefix(
+            "%s/%s" % (self.pg0.local_ip6, self.pg0.local_ip6_prefix_len)
+        )
 
         #
         # RAs should now contain the prefix information option
         #
         opt = ICMPv6NDOptPrefixInfo(
 
         #
         # RAs should now contain the prefix information option
         #
         opt = ICMPv6NDOptPrefixInfo(
-            prefixlen=self.pg0.local_ip6_prefix_len,
-            prefix=self.pg0.local_ip6,
-            L=1,
-            A=1)
+            prefixlen=self.pg0.local_ip6_prefix_len, prefix=self.pg0.local_ip6, L=1, A=1
+        )
 
         self.pg0.ip6_ra_config(send_unicast=1)
         ll = mk_ll_addr(self.pg0.remote_mac)
 
         self.pg0.ip6_ra_config(send_unicast=1)
         ll = mk_ll_addr(self.pg0.remote_mac)
-        p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-             IPv6(dst=self.pg0.local_ip6, src=ll) /
-             ICMPv6ND_RS())
-        self.send_and_expect_ra(self.pg0, p,
-                                "RA with prefix-info",
-                                dst_ip=ll,
-                                opt=opt)
+        p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IPv6(dst=self.pg0.local_ip6, src=ll)
+            / ICMPv6ND_RS()
+        )
+        self.send_and_expect_ra(self.pg0, p, "RA with prefix-info", dst_ip=ll, opt=opt)
 
         #
         # Change the prefix info to not off-link
         #  L-flag is clear
         #
 
         #
         # Change the prefix info to not off-link
         #  L-flag is clear
         #
-        self.pg0.ip6_ra_prefix('%s/%s' % (self.pg0.local_ip6,
-                               self.pg0.local_ip6_prefix_len),
-                               off_link=1)
+        self.pg0.ip6_ra_prefix(
+            "%s/%s" % (self.pg0.local_ip6, self.pg0.local_ip6_prefix_len), off_link=1
+        )
 
         opt = ICMPv6NDOptPrefixInfo(
 
         opt = ICMPv6NDOptPrefixInfo(
-            prefixlen=self.pg0.local_ip6_prefix_len,
-            prefix=self.pg0.local_ip6,
-            L=0,
-            A=1)
+            prefixlen=self.pg0.local_ip6_prefix_len, prefix=self.pg0.local_ip6, L=0, A=1
+        )
 
         self.pg0.ip6_ra_config(send_unicast=1)
 
         self.pg0.ip6_ra_config(send_unicast=1)
-        self.send_and_expect_ra(self.pg0, p,
-                                "RA with Prefix info with L-flag=0",
-                                dst_ip=ll,
-                                opt=opt)
+        self.send_and_expect_ra(
+            self.pg0, p, "RA with Prefix info with L-flag=0", dst_ip=ll, opt=opt
+        )
 
         #
         # Change the prefix info to not off-link, no-autoconfig
         #  L and A flag are clear in the advert
         #
 
         #
         # Change the prefix info to not off-link, no-autoconfig
         #  L and A flag are clear in the advert
         #
-        self.pg0.ip6_ra_prefix('%s/%s' % (self.pg0.local_ip6,
-                               self.pg0.local_ip6_prefix_len),
-                               off_link=1,
-                               no_autoconfig=1)
+        self.pg0.ip6_ra_prefix(
+            "%s/%s" % (self.pg0.local_ip6, self.pg0.local_ip6_prefix_len),
+            off_link=1,
+            no_autoconfig=1,
+        )
 
         opt = ICMPv6NDOptPrefixInfo(
 
         opt = ICMPv6NDOptPrefixInfo(
-            prefixlen=self.pg0.local_ip6_prefix_len,
-            prefix=self.pg0.local_ip6,
-            L=0,
-            A=0)
+            prefixlen=self.pg0.local_ip6_prefix_len, prefix=self.pg0.local_ip6, L=0, A=0
+        )
 
         self.pg0.ip6_ra_config(send_unicast=1)
 
         self.pg0.ip6_ra_config(send_unicast=1)
-        self.send_and_expect_ra(self.pg0, p,
-                                "RA with Prefix info with A & L-flag=0",
-                                dst_ip=ll,
-                                opt=opt)
+        self.send_and_expect_ra(
+            self.pg0, p, "RA with Prefix info with A & L-flag=0", dst_ip=ll, opt=opt
+        )
 
         #
         # Change the flag settings back to the defaults
         #  L and A flag are set in the advert
         #
 
         #
         # Change the flag settings back to the defaults
         #  L and A flag are set in the advert
         #
-        self.pg0.ip6_ra_prefix('%s/%s' % (self.pg0.local_ip6,
-                               self.pg0.local_ip6_prefix_len))
+        self.pg0.ip6_ra_prefix(
+            "%s/%s" % (self.pg0.local_ip6, self.pg0.local_ip6_prefix_len)
+        )
 
         opt = ICMPv6NDOptPrefixInfo(
 
         opt = ICMPv6NDOptPrefixInfo(
-            prefixlen=self.pg0.local_ip6_prefix_len,
-            prefix=self.pg0.local_ip6,
-            L=1,
-            A=1)
+            prefixlen=self.pg0.local_ip6_prefix_len, prefix=self.pg0.local_ip6, L=1, A=1
+        )
 
         self.pg0.ip6_ra_config(send_unicast=1)
 
         self.pg0.ip6_ra_config(send_unicast=1)
-        self.send_and_expect_ra(self.pg0, p,
-                                "RA with Prefix info",
-                                dst_ip=ll,
-                                opt=opt)
+        self.send_and_expect_ra(self.pg0, p, "RA with Prefix info", dst_ip=ll, opt=opt)
 
         #
         # Change the prefix info to not off-link, no-autoconfig
         #  L and A flag are clear in the advert
         #
 
         #
         # Change the prefix info to not off-link, no-autoconfig
         #  L and A flag are clear in the advert
         #
-        self.pg0.ip6_ra_prefix('%s/%s' % (self.pg0.local_ip6,
-                               self.pg0.local_ip6_prefix_len),
-                               off_link=1,
-                               no_autoconfig=1)
+        self.pg0.ip6_ra_prefix(
+            "%s/%s" % (self.pg0.local_ip6, self.pg0.local_ip6_prefix_len),
+            off_link=1,
+            no_autoconfig=1,
+        )
 
         opt = ICMPv6NDOptPrefixInfo(
 
         opt = ICMPv6NDOptPrefixInfo(
-            prefixlen=self.pg0.local_ip6_prefix_len,
-            prefix=self.pg0.local_ip6,
-            L=0,
-            A=0)
+            prefixlen=self.pg0.local_ip6_prefix_len, prefix=self.pg0.local_ip6, L=0, A=0
+        )
 
         self.pg0.ip6_ra_config(send_unicast=1)
 
         self.pg0.ip6_ra_config(send_unicast=1)
-        self.send_and_expect_ra(self.pg0, p,
-                                "RA with Prefix info with A & L-flag=0",
-                                dst_ip=ll,
-                                opt=opt)
+        self.send_and_expect_ra(
+            self.pg0, p, "RA with Prefix info with A & L-flag=0", dst_ip=ll, opt=opt
+        )
 
         #
         # Use the reset to defaults option to revert to defaults
         #  L and A flag are clear in the advert
         #
 
         #
         # Use the reset to defaults option to revert to defaults
         #  L and A flag are clear in the advert
         #
-        self.pg0.ip6_ra_prefix('%s/%s' % (self.pg0.local_ip6,
-                               self.pg0.local_ip6_prefix_len),
-                               use_default=1)
+        self.pg0.ip6_ra_prefix(
+            "%s/%s" % (self.pg0.local_ip6, self.pg0.local_ip6_prefix_len), use_default=1
+        )
 
         opt = ICMPv6NDOptPrefixInfo(
 
         opt = ICMPv6NDOptPrefixInfo(
-            prefixlen=self.pg0.local_ip6_prefix_len,
-            prefix=self.pg0.local_ip6,
-            L=1,
-            A=1)
+            prefixlen=self.pg0.local_ip6_prefix_len, prefix=self.pg0.local_ip6, L=1, A=1
+        )
 
         self.pg0.ip6_ra_config(send_unicast=1)
 
         self.pg0.ip6_ra_config(send_unicast=1)
-        self.send_and_expect_ra(self.pg0, p,
-                                "RA with Prefix reverted to defaults",
-                                dst_ip=ll,
-                                opt=opt)
+        self.send_and_expect_ra(
+            self.pg0, p, "RA with Prefix reverted to defaults", dst_ip=ll, opt=opt
+        )
 
         #
         # Advertise Another prefix. With no L-flag/A-flag
         #
 
         #
         # Advertise Another prefix. With no L-flag/A-flag
         #
-        self.pg0.ip6_ra_prefix('%s/%s' % (self.pg1.local_ip6,
-                               self.pg1.local_ip6_prefix_len),
-                               off_link=1,
-                               no_autoconfig=1)
+        self.pg0.ip6_ra_prefix(
+            "%s/%s" % (self.pg1.local_ip6, self.pg1.local_ip6_prefix_len),
+            off_link=1,
+            no_autoconfig=1,
+        )
 
 
-        opt = [ICMPv6NDOptPrefixInfo(
-            prefixlen=self.pg0.local_ip6_prefix_len,
-            prefix=self.pg0.local_ip6,
-            L=1,
-            A=1),
+        opt = [
+            ICMPv6NDOptPrefixInfo(
+                prefixlen=self.pg0.local_ip6_prefix_len,
+                prefix=self.pg0.local_ip6,
+                L=1,
+                A=1,
+            ),
             ICMPv6NDOptPrefixInfo(
                 prefixlen=self.pg1.local_ip6_prefix_len,
                 prefix=self.pg1.local_ip6,
                 L=0,
             ICMPv6NDOptPrefixInfo(
                 prefixlen=self.pg1.local_ip6_prefix_len,
                 prefix=self.pg1.local_ip6,
                 L=0,
-                A=0)]
+                A=0,
+            ),
+        ]
 
         self.pg0.ip6_ra_config(send_unicast=1)
         ll = mk_ll_addr(self.pg0.remote_mac)
 
         self.pg0.ip6_ra_config(send_unicast=1)
         ll = mk_ll_addr(self.pg0.remote_mac)
-        p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-             IPv6(dst=self.pg0.local_ip6, src=ll) /
-             ICMPv6ND_RS())
-        self.send_and_expect_ra(self.pg0, p,
-                                "RA with multiple Prefix infos",
-                                dst_ip=ll,
-                                opt=opt)
+        p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IPv6(dst=self.pg0.local_ip6, src=ll)
+            / ICMPv6ND_RS()
+        )
+        self.send_and_expect_ra(
+            self.pg0, p, "RA with multiple Prefix infos", dst_ip=ll, opt=opt
+        )
 
         #
         # Remove the first prefix-info - expect the second is still in the
         # advert
         #
 
         #
         # Remove the first prefix-info - expect the second is still in the
         # advert
         #
-        self.pg0.ip6_ra_prefix('%s/%s' % (self.pg0.local_ip6,
-                               self.pg0.local_ip6_prefix_len),
-                               is_no=1)
+        self.pg0.ip6_ra_prefix(
+            "%s/%s" % (self.pg0.local_ip6, self.pg0.local_ip6_prefix_len), is_no=1
+        )
 
         opt = ICMPv6NDOptPrefixInfo(
 
         opt = ICMPv6NDOptPrefixInfo(
-            prefixlen=self.pg1.local_ip6_prefix_len,
-            prefix=self.pg1.local_ip6,
-            L=0,
-            A=0)
+            prefixlen=self.pg1.local_ip6_prefix_len, prefix=self.pg1.local_ip6, L=0, A=0
+        )
 
         self.pg0.ip6_ra_config(send_unicast=1)
 
         self.pg0.ip6_ra_config(send_unicast=1)
-        self.send_and_expect_ra(self.pg0, p,
-                                "RA with Prefix reverted to defaults",
-                                dst_ip=ll,
-                                opt=opt)
+        self.send_and_expect_ra(
+            self.pg0, p, "RA with Prefix reverted to defaults", dst_ip=ll, opt=opt
+        )
 
         #
         # Remove the second prefix-info - expect no prefix-info in the adverts
         #
 
         #
         # Remove the second prefix-info - expect no prefix-info in the adverts
         #
-        self.pg0.ip6_ra_prefix('%s/%s' % (self.pg1.local_ip6,
-                               self.pg1.local_ip6_prefix_len),
-                               is_no=1)
+        self.pg0.ip6_ra_prefix(
+            "%s/%s" % (self.pg1.local_ip6, self.pg1.local_ip6_prefix_len), is_no=1
+        )
 
         #
         # change the link's link local, so we know that works too.
         #
         self.vapi.sw_interface_ip6_set_link_local_address(
 
         #
         # change the link's link local, so we know that works too.
         #
         self.vapi.sw_interface_ip6_set_link_local_address(
-            sw_if_index=self.pg0.sw_if_index,
-            ip="fe80::88")
+            sw_if_index=self.pg0.sw_if_index, ip="fe80::88"
+        )
 
         self.pg0.ip6_ra_config(send_unicast=1)
 
         self.pg0.ip6_ra_config(send_unicast=1)
-        self.send_and_expect_ra(self.pg0, p,
-                                "RA with Prefix reverted to defaults",
-                                dst_ip=ll,
-                                src_ip="fe80::88")
+        self.send_and_expect_ra(
+            self.pg0,
+            p,
+            "RA with Prefix reverted to defaults",
+            dst_ip=ll,
+            src_ip="fe80::88",
+        )
 
         #
         # Reset the periodic advertisements back to default values
 
         #
         # Reset the periodic advertisements back to default values
@@ -985,7 +1038,7 @@ class TestIPv6(TestIPv6ND):
         self.pg0.ip6_ra_config(no=1, send_unicast=1)
 
     def test_mld(self):
         self.pg0.ip6_ra_config(no=1, send_unicast=1)
 
     def test_mld(self):
-        """ MLD Report """
+        """MLD Report"""
         #
         # test one MLD is sent after applying an IPv6 Address on an interface
         #
         #
         # test one MLD is sent after applying an IPv6 Address on an interface
         #
@@ -1006,25 +1059,30 @@ class TestIPv6(TestIPv6ND):
             # make sure ipv6 packets with hop by hop options have
             # correct checksums
             self.assert_packet_checksums_valid(rx)
             # make sure ipv6 packets with hop by hop options have
             # correct checksums
             self.assert_packet_checksums_valid(rx)
-            if rx.haslayer(IPv6ExtHdrHopByHop) and \
-               rx.haslayer(Dot1Q) and \
-               rx[Dot1Q].vlan == 99:
+            if (
+                rx.haslayer(IPv6ExtHdrHopByHop)
+                and rx.haslayer(Dot1Q)
+                and rx[Dot1Q].vlan == 99
+            ):
                 mld = rx[ICMPv6MLReport2]
 
         self.assertEqual(mld.records_number, 4)
 
 
 class TestIPv6RouteLookup(VppTestCase):
                 mld = rx[ICMPv6MLReport2]
 
         self.assertEqual(mld.records_number, 4)
 
 
 class TestIPv6RouteLookup(VppTestCase):
-    """ IPv6 Route Lookup Test Case """
+    """IPv6 Route Lookup Test Case"""
+
     routes = []
 
     def route_lookup(self, prefix, exact):
     routes = []
 
     def route_lookup(self, prefix, exact):
-        return self.vapi.api(self.vapi.papi.ip_route_lookup,
-                             {
-                                 'table_id': 0,
-                                 'exact': exact,
-                                 'prefix': prefix,
-                             })
+        return self.vapi.api(
+            self.vapi.papi.ip_route_lookup,
+            {
+                "table_id": 0,
+                "exact": exact,
+                "prefix": prefix,
+            },
+        )
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -1037,8 +1095,7 @@ class TestIPv6RouteLookup(VppTestCase):
     def setUp(self):
         super(TestIPv6RouteLookup, self).setUp()
 
     def setUp(self):
         super(TestIPv6RouteLookup, self).setUp()
 
-        drop_nh = VppRoutePath("::1", 0xffffffff,
-                               type=FibPathType.FIB_PATH_TYPE_DROP)
+        drop_nh = VppRoutePath("::1", 0xFFFFFFFF, type=FibPathType.FIB_PATH_TYPE_DROP)
 
         # Add 3 routes
         r = VppIpRoute(self, "2001:1111::", 32, [drop_nh])
 
         # Add 3 routes
         r = VppIpRoute(self, "2001:1111::", 32, [drop_nh])
@@ -1064,12 +1121,12 @@ class TestIPv6RouteLookup(VppTestCase):
         # Verify we find the host route
         prefix = "2001:1111:2222::1/128"
         result = self.route_lookup(prefix, True)
         # Verify we find the host route
         prefix = "2001:1111:2222::1/128"
         result = self.route_lookup(prefix, True)
-        assert (prefix == str(result.route.prefix))
+        assert prefix == str(result.route.prefix)
 
         # Verify we find a middle prefix route
         prefix = "2001:1111:2222::/48"
         result = self.route_lookup(prefix, True)
 
         # Verify we find a middle prefix route
         prefix = "2001:1111:2222::/48"
         result = self.route_lookup(prefix, True)
-        assert (prefix == str(result.route.prefix))
+        assert prefix == str(result.route.prefix)
 
         # Verify we do not find an available LPM.
         with self.vapi.assert_negative_api_retval():
 
         # Verify we do not find an available LPM.
         with self.vapi.assert_negative_api_retval():
@@ -1079,17 +1136,17 @@ class TestIPv6RouteLookup(VppTestCase):
         # verify we find lpm
         lpm_prefix = "2001:1111:2222::/48"
         result = self.route_lookup("2001:1111:2222::2/128", False)
         # verify we find lpm
         lpm_prefix = "2001:1111:2222::/48"
         result = self.route_lookup("2001:1111:2222::2/128", False)
-        assert (lpm_prefix == str(result.route.prefix))
+        assert lpm_prefix == str(result.route.prefix)
 
         # Verify we find the exact when not requested
         result = self.route_lookup(lpm_prefix, False)
 
         # Verify we find the exact when not requested
         result = self.route_lookup(lpm_prefix, False)
-        assert (lpm_prefix == str(result.route.prefix))
+        assert lpm_prefix == str(result.route.prefix)
 
         # Can't seem to delete the default route so no negative LPM test.
 
 
 class TestIPv6IfAddrRoute(VppTestCase):
 
         # Can't seem to delete the default route so no negative LPM test.
 
 
 class TestIPv6IfAddrRoute(VppTestCase):
-    """ IPv6 Interface Addr Route Test Case """
+    """IPv6 Interface Addr Route Test Case"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -1117,7 +1174,7 @@ class TestIPv6IfAddrRoute(VppTestCase):
             i.admin_down()
 
     def test_ipv6_ifaddrs_same_prefix(self):
             i.admin_down()
 
     def test_ipv6_ifaddrs_same_prefix(self):
-        """ IPv6 Interface Addresses Same Prefix test
+        """IPv6 Interface Addresses Same Prefix test
 
         Test scenario:
 
 
         Test scenario:
 
@@ -1161,7 +1218,7 @@ class TestIPv6IfAddrRoute(VppTestCase):
         self.assertFalse(find_route(self, addr2, 128))
 
     def test_ipv6_ifaddr_del(self):
         self.assertFalse(find_route(self, addr2, 128))
 
     def test_ipv6_ifaddr_del(self):
-        """ Delete an interface address that does not exist """
+        """Delete an interface address that does not exist"""
 
         loopbacks = self.create_loopback_interfaces(1)
         lo = self.lo_interfaces[0]
 
         loopbacks = self.create_loopback_interfaces(1)
         lo = self.lo_interfaces[0]
@@ -1174,13 +1231,12 @@ class TestIPv6IfAddrRoute(VppTestCase):
         #
         with self.vapi.assert_negative_api_retval():
             self.vapi.sw_interface_add_del_address(
         #
         with self.vapi.assert_negative_api_retval():
             self.vapi.sw_interface_add_del_address(
-                sw_if_index=lo.sw_if_index,
-                prefix=self.pg0.local_ip6_prefix,
-                is_add=0)
+                sw_if_index=lo.sw_if_index, prefix=self.pg0.local_ip6_prefix, is_add=0
+            )
 
 
 class TestICMPv6Echo(VppTestCase):
 
 
 class TestICMPv6Echo(VppTestCase):
-    """ ICMPv6 Echo Test Case """
+    """ICMPv6 Echo Test Case"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -1209,7 +1265,7 @@ class TestICMPv6Echo(VppTestCase):
             i.admin_down()
 
     def test_icmpv6_echo(self):
             i.admin_down()
 
     def test_icmpv6_echo(self):
-        """ VPP replies to ICMPv6 Echo Request
+        """VPP replies to ICMPv6 Echo Request
 
         Test scenario:
 
 
         Test scenario:
 
@@ -1219,14 +1275,18 @@ class TestICMPv6Echo(VppTestCase):
 
         # test both with global and local ipv6 addresses
         dsts = (self.pg0.local_ip6, self.pg0.local_ip6_ll)
 
         # test both with global and local ipv6 addresses
         dsts = (self.pg0.local_ip6, self.pg0.local_ip6_ll)
-        id = 0xb
+        id = 0xB
         seq = 5
         seq = 5
-        data = b'\x0a' * 18
+        data = b"\x0a" * 18
         p = list()
         for dst in dsts:
         p = list()
         for dst in dsts:
-            p.append((Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-                      IPv6(src=self.pg0.remote_ip6, dst=dst) /
-                      ICMPv6EchoRequest(id=id, seq=seq, data=data)))
+            p.append(
+                (
+                    Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+                    / IPv6(src=self.pg0.remote_ip6, dst=dst)
+                    / ICMPv6EchoRequest(id=id, seq=seq, data=data)
+                )
+            )
 
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
 
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
@@ -1248,7 +1308,7 @@ class TestICMPv6Echo(VppTestCase):
 
 
 class TestIPv6RD(TestIPv6ND):
 
 
 class TestIPv6RD(TestIPv6ND):
-    """ IPv6 Router Discovery Test Case """
+    """IPv6 Router Discovery Test Case"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -1278,51 +1338,52 @@ class TestIPv6RD(TestIPv6ND):
         super(TestIPv6RD, self).tearDown()
 
     def test_rd_send_router_solicitation(self):
         super(TestIPv6RD, self).tearDown()
 
     def test_rd_send_router_solicitation(self):
-        """ Verify router solicitation packets """
+        """Verify router solicitation packets"""
 
         count = 2
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
         count = 2
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
-        self.vapi.ip6nd_send_router_solicitation(self.pg1.sw_if_index,
-                                                 mrc=count)
+        self.vapi.ip6nd_send_router_solicitation(self.pg1.sw_if_index, mrc=count)
         rx_list = self.pg1.get_capture(count, timeout=3)
         self.assertEqual(len(rx_list), count)
         for packet in rx_list:
             self.assertEqual(packet.haslayer(IPv6), 1)
         rx_list = self.pg1.get_capture(count, timeout=3)
         self.assertEqual(len(rx_list), count)
         for packet in rx_list:
             self.assertEqual(packet.haslayer(IPv6), 1)
-            self.assertEqual(packet[IPv6].haslayer(
-                ICMPv6ND_RS), 1)
+            self.assertEqual(packet[IPv6].haslayer(ICMPv6ND_RS), 1)
             dst = ip6_normalize(packet[IPv6].dst)
             dst2 = ip6_normalize("ff02::2")
             self.assert_equal(dst, dst2)
             src = ip6_normalize(packet[IPv6].src)
             src2 = ip6_normalize(self.pg1.local_ip6_ll)
             self.assert_equal(src, src2)
             dst = ip6_normalize(packet[IPv6].dst)
             dst2 = ip6_normalize("ff02::2")
             self.assert_equal(dst, dst2)
             src = ip6_normalize(packet[IPv6].src)
             src2 = ip6_normalize(self.pg1.local_ip6_ll)
             self.assert_equal(src, src2)
-            self.assertTrue(
-                bool(packet[ICMPv6ND_RS].haslayer(
-                    ICMPv6NDOptSrcLLAddr)))
-            self.assert_equal(
-                packet[ICMPv6NDOptSrcLLAddr].lladdr,
-                self.pg1.local_mac)
+            self.assertTrue(bool(packet[ICMPv6ND_RS].haslayer(ICMPv6NDOptSrcLLAddr)))
+            self.assert_equal(packet[ICMPv6NDOptSrcLLAddr].lladdr, self.pg1.local_mac)
 
     def verify_prefix_info(self, reported_prefix, prefix_option):
         prefix = IPv6Network(
 
     def verify_prefix_info(self, reported_prefix, prefix_option):
         prefix = IPv6Network(
-            text_type(prefix_option.getfieldval("prefix") +
-                      "/" +
-                      text_type(prefix_option.getfieldval("prefixlen"))),
-            strict=False)
-        self.assert_equal(reported_prefix.prefix.network_address,
-                          prefix.network_address)
+            text_type(
+                prefix_option.getfieldval("prefix")
+                + "/"
+                + text_type(prefix_option.getfieldval("prefixlen"))
+            ),
+            strict=False,
+        )
+        self.assert_equal(
+            reported_prefix.prefix.network_address, prefix.network_address
+        )
         L = prefix_option.getfieldval("L")
         A = prefix_option.getfieldval("A")
         option_flags = (L << 7) | (A << 6)
         self.assert_equal(reported_prefix.flags, option_flags)
         L = prefix_option.getfieldval("L")
         A = prefix_option.getfieldval("A")
         option_flags = (L << 7) | (A << 6)
         self.assert_equal(reported_prefix.flags, option_flags)
-        self.assert_equal(reported_prefix.valid_time,
-                          prefix_option.getfieldval("validlifetime"))
-        self.assert_equal(reported_prefix.preferred_time,
-                          prefix_option.getfieldval("preferredlifetime"))
+        self.assert_equal(
+            reported_prefix.valid_time, prefix_option.getfieldval("validlifetime")
+        )
+        self.assert_equal(
+            reported_prefix.preferred_time,
+            prefix_option.getfieldval("preferredlifetime"),
+        )
 
     def test_rd_receive_router_advertisement(self):
 
     def test_rd_receive_router_advertisement(self):
-        """ Verify events triggered by received RA packets """
+        """Verify events triggered by received RA packets"""
 
         self.vapi.want_ip6_ra_events(enable=1)
 
 
         self.vapi.want_ip6_ra_events(enable=1)
 
@@ -1344,12 +1405,13 @@ class TestIPv6RD(TestIPv6ND):
             A=0,
         )
 
             A=0,
         )
 
-        p = (Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac) /
-             IPv6(dst=self.pg1.local_ip6_ll,
-                  src=mk_ll_addr(self.pg1.remote_mac)) /
-             ICMPv6ND_RA() /
-             prefix_info_1 /
-             prefix_info_2)
+        p = (
+            Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac)
+            / IPv6(dst=self.pg1.local_ip6_ll, src=mk_ll_addr(self.pg1.remote_mac))
+            / ICMPv6ND_RA()
+            / prefix_info_1
+            / prefix_info_2
+        )
         self.pg1.add_stream([p])
         self.pg_start()
 
         self.pg1.add_stream([p])
         self.pg_start()
 
@@ -1360,7 +1422,8 @@ class TestIPv6RD(TestIPv6ND):
         self.assert_equal(ev.router_lifetime_in_sec, 1800)
         self.assert_equal(ev.neighbor_reachable_time_in_msec, 0)
         self.assert_equal(
         self.assert_equal(ev.router_lifetime_in_sec, 1800)
         self.assert_equal(ev.neighbor_reachable_time_in_msec, 0)
         self.assert_equal(
-            ev.time_in_msec_between_retransmitted_neighbor_solicitations, 0)
+            ev.time_in_msec_between_retransmitted_neighbor_solicitations, 0
+        )
 
         self.assert_equal(ev.n_prefixes, 2)
 
 
         self.assert_equal(ev.n_prefixes, 2)
 
@@ -1369,7 +1432,7 @@ class TestIPv6RD(TestIPv6ND):
 
 
 class TestIPv6RDControlPlane(TestIPv6ND):
 
 
 class TestIPv6RDControlPlane(TestIPv6ND):
-    """ IPv6 Router Discovery Control Plane Test Case """
+    """IPv6 Router Discovery Control Plane Test Case"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -1403,8 +1466,11 @@ class TestIPv6RDControlPlane(TestIPv6ND):
             ra = ICMPv6ND_RA(routerlifetime=routerlifetime)
         else:
             ra = ICMPv6ND_RA()
             ra = ICMPv6ND_RA(routerlifetime=routerlifetime)
         else:
             ra = ICMPv6ND_RA()
-        p = (Ether(dst=pg.local_mac, src=pg.remote_mac) /
-             IPv6(dst=dst_ip, src=src_ip) / ra)
+        p = (
+            Ether(dst=pg.local_mac, src=pg.remote_mac)
+            / IPv6(dst=dst_ip, src=src_ip)
+            / ra
+        )
         return p
 
     @staticmethod
         return p
 
     @staticmethod
@@ -1415,8 +1481,8 @@ class TestIPv6RDControlPlane(TestIPv6ND):
                 for path in entry.route.paths:
                     if path.sw_if_index != 0xFFFFFFFF:
                         defaut_route = {}
                 for path in entry.route.paths:
                     if path.sw_if_index != 0xFFFFFFFF:
                         defaut_route = {}
-                        defaut_route['sw_if_index'] = path.sw_if_index
-                        defaut_route['next_hop'] = path.nh.address.ip6
+                        defaut_route["sw_if_index"] = path.sw_if_index
+                        defaut_route["next_hop"] = path.nh.address.ip6
                         list.append(defaut_route)
         return list
 
                         list.append(defaut_route)
         return list
 
@@ -1431,7 +1497,7 @@ class TestIPv6RDControlPlane(TestIPv6ND):
         return list
 
     def wait_for_no_default_route(self, n_tries=50, s_time=1):
         return list
 
     def wait_for_no_default_route(self, n_tries=50, s_time=1):
-        while (n_tries):
+        while n_tries:
             fib = self.vapi.ip_route_dump(0, True)
             default_routes = self.get_default_routes(fib)
             if 0 == len(default_routes):
             fib = self.vapi.ip_route_dump(0, True)
             default_routes = self.get_default_routes(fib)
             if 0 == len(default_routes):
@@ -1442,7 +1508,7 @@ class TestIPv6RDControlPlane(TestIPv6ND):
         return False
 
     def test_all(self):
         return False
 
     def test_all(self):
-        """ Test handling of SLAAC addresses and default routes """
+        """Test handling of SLAAC addresses and default routes"""
 
         fib = self.vapi.ip_route_dump(0, True)
         default_routes = self.get_default_routes(fib)
 
         fib = self.vapi.ip_route_dump(0, True)
         default_routes = self.get_default_routes(fib)
@@ -1455,22 +1521,25 @@ class TestIPv6RDControlPlane(TestIPv6ND):
         self.sleep(0.1)
 
         # send RA
         self.sleep(0.1)
 
         # send RA
-        packet = (self.create_ra_packet(
-            self.pg0) / ICMPv6NDOptPrefixInfo(
-            prefix="1::",
-            prefixlen=64,
-            validlifetime=2,
-            preferredlifetime=2,
-            L=1,
-            A=1,
-        ) / ICMPv6NDOptPrefixInfo(
-            prefix="7::",
-            prefixlen=20,
-            validlifetime=1500,
-            preferredlifetime=1000,
-            L=1,
-            A=0,
-        ))
+        packet = (
+            self.create_ra_packet(self.pg0)
+            / ICMPv6NDOptPrefixInfo(
+                prefix="1::",
+                prefixlen=64,
+                validlifetime=2,
+                preferredlifetime=2,
+                L=1,
+                A=1,
+            )
+            / ICMPv6NDOptPrefixInfo(
+                prefix="7::",
+                prefixlen=20,
+                validlifetime=1500,
+                preferredlifetime=1000,
+                L=1,
+                A=0,
+            )
+        )
         self.pg0.add_stream([packet])
         self.pg_start()
 
         self.pg0.add_stream([packet])
         self.pg_start()
 
@@ -1482,16 +1551,17 @@ class TestIPv6RDControlPlane(TestIPv6ND):
         addresses = set(self.get_interface_addresses(fib, self.pg0))
         new_addresses = addresses.difference(initial_addresses)
         self.assertEqual(len(new_addresses), 1)
         addresses = set(self.get_interface_addresses(fib, self.pg0))
         new_addresses = addresses.difference(initial_addresses)
         self.assertEqual(len(new_addresses), 1)
-        prefix = IPv6Network(text_type("%s/%d" % (list(new_addresses)[0], 20)),
-                             strict=False)
-        self.assertEqual(prefix, IPv6Network(text_type('1::/20')))
+        prefix = IPv6Network(
+            text_type("%s/%d" % (list(new_addresses)[0], 20)), strict=False
+        )
+        self.assertEqual(prefix, IPv6Network(text_type("1::/20")))
 
         # check FIB for new default route
         default_routes = self.get_default_routes(fib)
         self.assertEqual(len(default_routes), 1)
         dr = default_routes[0]
 
         # check FIB for new default route
         default_routes = self.get_default_routes(fib)
         self.assertEqual(len(default_routes), 1)
         dr = default_routes[0]
-        self.assertEqual(dr['sw_if_index'], self.pg0.sw_if_index)
-        self.assertEqual(dr['next_hop'], router_address)
+        self.assertEqual(dr["sw_if_index"], self.pg0.sw_if_index)
+        self.assertEqual(dr["next_hop"], router_address)
 
         # send RA to delete default route
         packet = self.create_ra_packet(self.pg0, routerlifetime=0)
 
         # send RA to delete default route
         packet = self.create_ra_packet(self.pg0, routerlifetime=0)
@@ -1519,8 +1589,8 @@ class TestIPv6RDControlPlane(TestIPv6ND):
         default_routes = self.get_default_routes(fib)
         self.assertEqual(len(default_routes), 1)
         dr = default_routes[0]
         default_routes = self.get_default_routes(fib)
         self.assertEqual(len(default_routes), 1)
         dr = default_routes[0]
-        self.assertEqual(dr['sw_if_index'], self.pg0.sw_if_index)
-        self.assertEqual(dr['next_hop'], router_address)
+        self.assertEqual(dr["sw_if_index"], self.pg0.sw_if_index)
+        self.assertEqual(dr["next_hop"], router_address)
 
         # send RA, updating router lifetime to 1s
         packet = self.create_ra_packet(self.pg0, 1)
 
         # send RA, updating router lifetime to 1s
         packet = self.create_ra_packet(self.pg0, 1)
@@ -1534,8 +1604,8 @@ class TestIPv6RDControlPlane(TestIPv6ND):
         default_routes = self.get_default_routes(fib)
         self.assertEqual(len(default_routes), 1)
         dr = default_routes[0]
         default_routes = self.get_default_routes(fib)
         self.assertEqual(len(default_routes), 1)
         dr = default_routes[0]
-        self.assertEqual(dr['sw_if_index'], self.pg0.sw_if_index)
-        self.assertEqual(dr['next_hop'], router_address)
+        self.assertEqual(dr["sw_if_index"], self.pg0.sw_if_index)
+        self.assertEqual(dr["next_hop"], router_address)
 
         self.sleep_on_vpp_time(1)
 
 
         self.sleep_on_vpp_time(1)
 
@@ -1547,9 +1617,10 @@ class TestIPv6RDControlPlane(TestIPv6ND):
         new_addresses = addresses.difference(initial_addresses)
 
         self.assertEqual(len(new_addresses), 1)
         new_addresses = addresses.difference(initial_addresses)
 
         self.assertEqual(len(new_addresses), 1)
-        prefix = IPv6Network(text_type("%s/%d" % (list(new_addresses)[0], 20)),
-                             strict=False)
-        self.assertEqual(prefix, IPv6Network(text_type('1::/20')))
+        prefix = IPv6Network(
+            text_type("%s/%d" % (list(new_addresses)[0], 20)), strict=False
+        )
+        self.assertEqual(prefix, IPv6Network(text_type("1::/20")))
 
         self.sleep_on_vpp_time(1)
 
 
         self.sleep_on_vpp_time(1)
 
@@ -1561,7 +1632,7 @@ class TestIPv6RDControlPlane(TestIPv6ND):
 
 
 class IPv6NDProxyTest(TestIPv6ND):
 
 
 class IPv6NDProxyTest(TestIPv6ND):
-    """ IPv6 ND ProxyTest Case """
+    """IPv6 ND ProxyTest Case"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -1589,7 +1660,7 @@ class IPv6NDProxyTest(TestIPv6ND):
         super(IPv6NDProxyTest, self).tearDown()
 
     def test_nd_proxy(self):
         super(IPv6NDProxyTest, self).tearDown()
 
     def test_nd_proxy(self):
-        """ IPv6 Proxy ND """
+        """IPv6 Proxy ND"""
 
         #
         # Generate some hosts in the subnet that we are proxying
 
         #
         # Generate some hosts in the subnet that we are proxying
@@ -1604,12 +1675,12 @@ class IPv6NDProxyTest(TestIPv6ND):
         # expect no response since it's from an address that is not
         # on the link that has the prefix configured
         #
         # expect no response since it's from an address that is not
         # on the link that has the prefix configured
         #
-        ns_pg1 = (Ether(dst=in6_getnsmac(nsma), src=self.pg1.remote_mac) /
-                  IPv6(dst=d,
-                       src=self.pg0._remote_hosts[2].ip6) /
-                  ICMPv6ND_NS(tgt=self.pg0.local_ip6) /
-                  ICMPv6NDOptSrcLLAddr(
-                      lladdr=self.pg0._remote_hosts[2].mac))
+        ns_pg1 = (
+            Ether(dst=in6_getnsmac(nsma), src=self.pg1.remote_mac)
+            / IPv6(dst=d, src=self.pg0._remote_hosts[2].ip6)
+            / ICMPv6ND_NS(tgt=self.pg0.local_ip6)
+            / ICMPv6NDOptSrcLLAddr(lladdr=self.pg0._remote_hosts[2].mac)
+        )
 
         self.send_and_assert_no_replies(self.pg1, ns_pg1, "Off link NS")
 
 
         self.send_and_assert_no_replies(self.pg1, ns_pg1, "Off link NS")
 
@@ -1617,32 +1688,38 @@ class IPv6NDProxyTest(TestIPv6ND):
         # Add proxy support for the host
         #
         self.vapi.ip6nd_proxy_add_del(
         # Add proxy support for the host
         #
         self.vapi.ip6nd_proxy_add_del(
-            is_add=1, ip=inet_pton(AF_INET6, self.pg0._remote_hosts[2].ip6),
-            sw_if_index=self.pg1.sw_if_index)
+            is_add=1,
+            ip=inet_pton(AF_INET6, self.pg0._remote_hosts[2].ip6),
+            sw_if_index=self.pg1.sw_if_index,
+        )
 
         #
         # try that NS again. this time we expect an NA back
         #
 
         #
         # try that NS again. this time we expect an NA back
         #
-        self.send_and_expect_na(self.pg1, ns_pg1,
-                                "NS to proxy entry",
-                                dst_ip=self.pg0._remote_hosts[2].ip6,
-                                tgt_ip=self.pg0.local_ip6)
+        self.send_and_expect_na(
+            self.pg1,
+            ns_pg1,
+            "NS to proxy entry",
+            dst_ip=self.pg0._remote_hosts[2].ip6,
+            tgt_ip=self.pg0.local_ip6,
+        )
 
         #
         # ... and that we have an entry in the ND cache
         #
 
         #
         # ... and that we have an entry in the ND cache
         #
-        self.assertTrue(find_nbr(self,
-                                 self.pg1.sw_if_index,
-                                 self.pg0._remote_hosts[2].ip6))
+        self.assertTrue(
+            find_nbr(self, self.pg1.sw_if_index, self.pg0._remote_hosts[2].ip6)
+        )
 
         #
         # ... and we can route traffic to it
         #
 
         #
         # ... and we can route traffic to it
         #
-        t = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-             IPv6(dst=self.pg0._remote_hosts[2].ip6,
-                  src=self.pg0.remote_ip6) /
-             inet6.UDP(sport=10000, dport=20000) /
-             Raw(b'\xa5' * 100))
+        t = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IPv6(dst=self.pg0._remote_hosts[2].ip6, src=self.pg0.remote_ip6)
+            / inet6.UDP(sport=10000, dport=20000)
+            / Raw(b"\xa5" * 100)
+        )
 
         self.pg0.add_stream(t)
         self.pg_enable_capture(self.pg_interfaces)
 
         self.pg0.add_stream(t)
         self.pg_enable_capture(self.pg_interfaces)
@@ -1653,58 +1730,64 @@ class IPv6NDProxyTest(TestIPv6ND):
         self.assertEqual(rx[Ether].dst, self.pg0._remote_hosts[2].mac)
         self.assertEqual(rx[Ether].src, self.pg1.local_mac)
 
         self.assertEqual(rx[Ether].dst, self.pg0._remote_hosts[2].mac)
         self.assertEqual(rx[Ether].src, self.pg1.local_mac)
 
-        self.assertEqual(rx[IPv6].src,
-                         t[IPv6].src)
-        self.assertEqual(rx[IPv6].dst,
-                         t[IPv6].dst)
+        self.assertEqual(rx[IPv6].src, t[IPv6].src)
+        self.assertEqual(rx[IPv6].dst, t[IPv6].dst)
 
         #
         # Test we proxy for the host on the main interface
         #
 
         #
         # Test we proxy for the host on the main interface
         #
-        ns_pg0 = (Ether(dst=in6_getnsmac(nsma), src=self.pg0.remote_mac) /
-                  IPv6(dst=d, src=self.pg0.remote_ip6) /
-                  ICMPv6ND_NS(
-                      tgt=self.pg0._remote_hosts[2].ip6) /
-                  ICMPv6NDOptSrcLLAddr(
-                      lladdr=self.pg0.remote_mac))
+        ns_pg0 = (
+            Ether(dst=in6_getnsmac(nsma), src=self.pg0.remote_mac)
+            / IPv6(dst=d, src=self.pg0.remote_ip6)
+            / ICMPv6ND_NS(tgt=self.pg0._remote_hosts[2].ip6)
+            / ICMPv6NDOptSrcLLAddr(lladdr=self.pg0.remote_mac)
+        )
 
 
-        self.send_and_expect_na(self.pg0, ns_pg0,
-                                "NS to proxy entry on main",
-                                tgt_ip=self.pg0._remote_hosts[2].ip6,
-                                dst_ip=self.pg0.remote_ip6)
+        self.send_and_expect_na(
+            self.pg0,
+            ns_pg0,
+            "NS to proxy entry on main",
+            tgt_ip=self.pg0._remote_hosts[2].ip6,
+            dst_ip=self.pg0.remote_ip6,
+        )
 
         #
         # Setup and resolve proxy for another host on another interface
         #
 
         #
         # Setup and resolve proxy for another host on another interface
         #
-        ns_pg2 = (Ether(dst=in6_getnsmac(nsma), src=self.pg2.remote_mac) /
-                  IPv6(dst=d,
-                       src=self.pg0._remote_hosts[3].ip6) /
-                  ICMPv6ND_NS(tgt=self.pg0.local_ip6) /
-                  ICMPv6NDOptSrcLLAddr(
-                      lladdr=self.pg0._remote_hosts[2].mac))
+        ns_pg2 = (
+            Ether(dst=in6_getnsmac(nsma), src=self.pg2.remote_mac)
+            / IPv6(dst=d, src=self.pg0._remote_hosts[3].ip6)
+            / ICMPv6ND_NS(tgt=self.pg0.local_ip6)
+            / ICMPv6NDOptSrcLLAddr(lladdr=self.pg0._remote_hosts[2].mac)
+        )
 
         self.vapi.ip6nd_proxy_add_del(
 
         self.vapi.ip6nd_proxy_add_del(
-            is_add=1, ip=inet_pton(AF_INET6, self.pg0._remote_hosts[3].ip6),
-            sw_if_index=self.pg2.sw_if_index)
+            is_add=1,
+            ip=inet_pton(AF_INET6, self.pg0._remote_hosts[3].ip6),
+            sw_if_index=self.pg2.sw_if_index,
+        )
 
 
-        self.send_and_expect_na(self.pg2, ns_pg2,
-                                "NS to proxy entry other interface",
-                                dst_ip=self.pg0._remote_hosts[3].ip6,
-                                tgt_ip=self.pg0.local_ip6)
+        self.send_and_expect_na(
+            self.pg2,
+            ns_pg2,
+            "NS to proxy entry other interface",
+            dst_ip=self.pg0._remote_hosts[3].ip6,
+            tgt_ip=self.pg0.local_ip6,
+        )
 
 
-        self.assertTrue(find_nbr(self,
-                                 self.pg2.sw_if_index,
-                                 self.pg0._remote_hosts[3].ip6))
+        self.assertTrue(
+            find_nbr(self, self.pg2.sw_if_index, self.pg0._remote_hosts[3].ip6)
+        )
 
         #
         # hosts can communicate. pg2->pg1
         #
 
         #
         # hosts can communicate. pg2->pg1
         #
-        t2 = (Ether(dst=self.pg2.local_mac,
-                    src=self.pg0.remote_hosts[3].mac) /
-              IPv6(dst=self.pg0._remote_hosts[2].ip6,
-                   src=self.pg0._remote_hosts[3].ip6) /
-              inet6.UDP(sport=10000, dport=20000) /
-              Raw(b'\xa5' * 100))
+        t2 = (
+            Ether(dst=self.pg2.local_mac, src=self.pg0.remote_hosts[3].mac)
+            / IPv6(dst=self.pg0._remote_hosts[2].ip6, src=self.pg0._remote_hosts[3].ip6)
+            / inet6.UDP(sport=10000, dport=20000)
+            / Raw(b"\xa5" * 100)
+        )
 
         self.pg2.add_stream(t2)
         self.pg_enable_capture(self.pg_interfaces)
 
         self.pg2.add_stream(t2)
         self.pg_enable_capture(self.pg_interfaces)
@@ -1715,27 +1798,29 @@ class IPv6NDProxyTest(TestIPv6ND):
         self.assertEqual(rx[Ether].dst, self.pg0._remote_hosts[2].mac)
         self.assertEqual(rx[Ether].src, self.pg1.local_mac)
 
         self.assertEqual(rx[Ether].dst, self.pg0._remote_hosts[2].mac)
         self.assertEqual(rx[Ether].src, self.pg1.local_mac)
 
-        self.assertEqual(rx[IPv6].src,
-                         t2[IPv6].src)
-        self.assertEqual(rx[IPv6].dst,
-                         t2[IPv6].dst)
+        self.assertEqual(rx[IPv6].src, t2[IPv6].src)
+        self.assertEqual(rx[IPv6].dst, t2[IPv6].dst)
 
         #
         # remove the proxy configs
         #
         self.vapi.ip6nd_proxy_add_del(
             ip=inet_pton(AF_INET6, self.pg0._remote_hosts[2].ip6),
 
         #
         # remove the proxy configs
         #
         self.vapi.ip6nd_proxy_add_del(
             ip=inet_pton(AF_INET6, self.pg0._remote_hosts[2].ip6),
-            sw_if_index=self.pg1.sw_if_index, is_add=0)
+            sw_if_index=self.pg1.sw_if_index,
+            is_add=0,
+        )
         self.vapi.ip6nd_proxy_add_del(
             ip=inet_pton(AF_INET6, self.pg0._remote_hosts[3].ip6),
         self.vapi.ip6nd_proxy_add_del(
             ip=inet_pton(AF_INET6, self.pg0._remote_hosts[3].ip6),
-            sw_if_index=self.pg2.sw_if_index, is_add=0)
+            sw_if_index=self.pg2.sw_if_index,
+            is_add=0,
+        )
 
 
-        self.assertFalse(find_nbr(self,
-                                  self.pg2.sw_if_index,
-                                  self.pg0._remote_hosts[3].ip6))
-        self.assertFalse(find_nbr(self,
-                                  self.pg1.sw_if_index,
-                                  self.pg0._remote_hosts[2].ip6))
+        self.assertFalse(
+            find_nbr(self, self.pg2.sw_if_index, self.pg0._remote_hosts[3].ip6)
+        )
+        self.assertFalse(
+            find_nbr(self, self.pg1.sw_if_index, self.pg0._remote_hosts[2].ip6)
+        )
 
         #
         # no longer proxy-ing...
 
         #
         # no longer proxy-ing...
@@ -1758,7 +1843,7 @@ class IPv6NDProxyTest(TestIPv6ND):
 
 
 class TestIP6Null(VppTestCase):
 
 
 class TestIP6Null(VppTestCase):
-    """ IPv6 routes via NULL """
+    """IPv6 routes via NULL"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -1786,21 +1871,28 @@ class TestIP6Null(VppTestCase):
             i.admin_down()
 
     def test_ip_null(self):
             i.admin_down()
 
     def test_ip_null(self):
-        """ IP NULL route """
+        """IP NULL route"""
 
 
-        p = (Ether(src=self.pg0.remote_mac,
-                   dst=self.pg0.local_mac) /
-             IPv6(src=self.pg0.remote_ip6, dst="2001::1") /
-             inet6.UDP(sport=1234, dport=1234) /
-             Raw(b'\xa5' * 100))
+        p = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IPv6(src=self.pg0.remote_ip6, dst="2001::1")
+            / inet6.UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
 
         #
         # A route via IP NULL that will reply with ICMP unreachables
         #
         ip_unreach = VppIpRoute(
 
         #
         # A route via IP NULL that will reply with ICMP unreachables
         #
         ip_unreach = VppIpRoute(
-            self, "2001::", 64,
-            [VppRoutePath("::", 0xffffffff,
-                          type=FibPathType.FIB_PATH_TYPE_ICMP_UNREACH)])
+            self,
+            "2001::",
+            64,
+            [
+                VppRoutePath(
+                    "::", 0xFFFFFFFF, type=FibPathType.FIB_PATH_TYPE_ICMP_UNREACH
+                )
+            ],
+        )
         ip_unreach.add_vpp_config()
 
         self.pg0.add_stream(p)
         ip_unreach.add_vpp_config()
 
         self.pg0.add_stream(p)
@@ -1821,9 +1913,15 @@ class TestIP6Null(VppTestCase):
         # A route via IP NULL that will reply with ICMP prohibited
         #
         ip_prohibit = VppIpRoute(
         # A route via IP NULL that will reply with ICMP prohibited
         #
         ip_prohibit = VppIpRoute(
-            self, "2001::1", 128,
-            [VppRoutePath("::", 0xffffffff,
-                          type=FibPathType.FIB_PATH_TYPE_ICMP_PROHIBIT)])
+            self,
+            "2001::1",
+            128,
+            [
+                VppRoutePath(
+                    "::", 0xFFFFFFFF, type=FibPathType.FIB_PATH_TYPE_ICMP_PROHIBIT
+                )
+            ],
+        )
         ip_prohibit.add_vpp_config()
 
         self.pg0.add_stream(p)
         ip_prohibit.add_vpp_config()
 
         self.pg0.add_stream(p)
@@ -1839,7 +1937,7 @@ class TestIP6Null(VppTestCase):
 
 
 class TestIP6Disabled(VppTestCase):
 
 
 class TestIP6Disabled(VppTestCase):
-    """ IPv6 disabled """
+    """IPv6 disabled"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -1870,7 +1968,7 @@ class TestIP6Disabled(VppTestCase):
             i.admin_down()
 
     def test_ip_disabled(self):
             i.admin_down()
 
     def test_ip_disabled(self):
-        """ IP Disabled """
+        """IP Disabled"""
 
         MRouteItfFlags = VppEnum.vl_api_mfib_itf_flags_t
         MRouteEntryFlags = VppEnum.vl_api_mfib_entry_flags_t
 
         MRouteItfFlags = VppEnum.vl_api_mfib_itf_flags_t
         MRouteEntryFlags = VppEnum.vl_api_mfib_entry_flags_t
@@ -1881,24 +1979,32 @@ class TestIP6Disabled(VppTestCase):
         route_ff_01 = VppIpMRoute(
             self,
             "::",
         route_ff_01 = VppIpMRoute(
             self,
             "::",
-            "ffef::1", 128,
+            "ffef::1",
+            128,
             MRouteEntryFlags.MFIB_API_ENTRY_FLAG_NONE,
             MRouteEntryFlags.MFIB_API_ENTRY_FLAG_NONE,
-            [VppMRoutePath(self.pg1.sw_if_index,
-                           MRouteItfFlags.MFIB_API_ITF_FLAG_ACCEPT),
-             VppMRoutePath(self.pg0.sw_if_index,
-                           MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD)])
+            [
+                VppMRoutePath(
+                    self.pg1.sw_if_index, MRouteItfFlags.MFIB_API_ITF_FLAG_ACCEPT
+                ),
+                VppMRoutePath(
+                    self.pg0.sw_if_index, MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD
+                ),
+            ],
+        )
         route_ff_01.add_vpp_config()
 
         route_ff_01.add_vpp_config()
 
-        pu = (Ether(src=self.pg1.remote_mac,
-                    dst=self.pg1.local_mac) /
-              IPv6(src="2001::1", dst=self.pg0.remote_ip6) /
-              inet6.UDP(sport=1234, dport=1234) /
-              Raw(b'\xa5' * 100))
-        pm = (Ether(src=self.pg1.remote_mac,
-                    dst=self.pg1.local_mac) /
-              IPv6(src="2001::1", dst="ffef::1") /
-              inet6.UDP(sport=1234, dport=1234) /
-              Raw(b'\xa5' * 100))
+        pu = (
+            Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
+            / IPv6(src="2001::1", dst=self.pg0.remote_ip6)
+            / inet6.UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
+        pm = (
+            Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
+            / IPv6(src="2001::1", dst="ffef::1")
+            / inet6.UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
 
         #
         # PG1 does not forward IP traffic
 
         #
         # PG1 does not forward IP traffic
@@ -1937,7 +2043,7 @@ class TestIP6Disabled(VppTestCase):
 
 
 class TestIP6LoadBalance(VppTestCase):
 
 
 class TestIP6LoadBalance(VppTestCase):
-    """ IPv6 Load-Balancing """
+    """IPv6 Load-Balancing"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -1969,7 +2075,7 @@ class TestIP6LoadBalance(VppTestCase):
         super(TestIP6LoadBalance, self).tearDown()
 
     def test_ip6_load_balance(self):
         super(TestIP6LoadBalance, self).tearDown()
 
     def test_ip6_load_balance(self):
-        """ IPv6 Load-Balancing """
+        """IPv6 Load-Balancing"""
 
         #
         # An array of packets that differ only in the destination port
 
         #
         # An array of packets that differ only in the destination port
@@ -1991,47 +2097,65 @@ class TestIP6LoadBalance(VppTestCase):
 
         for ii in range(NUM_PKTS):
             port_ip_hdr = (
 
         for ii in range(NUM_PKTS):
             port_ip_hdr = (
-                IPv6(dst="3000::1", src="3000:1::1") /
-                inet6.UDP(sport=1234, dport=1234 + ii) /
-                Raw(b'\xa5' * 100))
-            port_ip_pkts.append((Ether(src=self.pg0.remote_mac,
-                                       dst=self.pg0.local_mac) /
-                                 port_ip_hdr))
-            port_mpls_pkts.append((Ether(src=self.pg0.remote_mac,
-                                         dst=self.pg0.local_mac) /
-                                   MPLS(label=66, ttl=2) /
-                                   port_ip_hdr))
-            port_mpls_neos_pkts.append((Ether(src=self.pg0.remote_mac,
-                                              dst=self.pg0.local_mac) /
-                                        MPLS(label=67, ttl=2) /
-                                        MPLS(label=77, ttl=2) /
-                                        port_ip_hdr))
-            port_ent_pkts.append((Ether(src=self.pg0.remote_mac,
-                                        dst=self.pg0.local_mac) /
-                                  MPLS(label=67, ttl=2) /
-                                  MPLS(label=14, ttl=2) /
-                                  MPLS(label=999, ttl=2) /
-                                  port_ip_hdr))
+                IPv6(dst="3000::1", src="3000:1::1")
+                / inet6.UDP(sport=1234, dport=1234 + ii)
+                / Raw(b"\xa5" * 100)
+            )
+            port_ip_pkts.append(
+                (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) / port_ip_hdr)
+            )
+            port_mpls_pkts.append(
+                (
+                    Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+                    / MPLS(label=66, ttl=2)
+                    / port_ip_hdr
+                )
+            )
+            port_mpls_neos_pkts.append(
+                (
+                    Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+                    / MPLS(label=67, ttl=2)
+                    / MPLS(label=77, ttl=2)
+                    / port_ip_hdr
+                )
+            )
+            port_ent_pkts.append(
+                (
+                    Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+                    / MPLS(label=67, ttl=2)
+                    / MPLS(label=14, ttl=2)
+                    / MPLS(label=999, ttl=2)
+                    / port_ip_hdr
+                )
+            )
             src_ip_hdr = (
             src_ip_hdr = (
-                IPv6(dst="3000::1", src="3000:1::%d" % ii) /
-                inet6.UDP(sport=1234, dport=1234) /
-                Raw(b'\xa5' * 100))
-            src_ip_pkts.append((Ether(src=self.pg0.remote_mac,
-                                      dst=self.pg0.local_mac) /
-                                src_ip_hdr))
-            src_mpls_pkts.append((Ether(src=self.pg0.remote_mac,
-                                        dst=self.pg0.local_mac) /
-                                  MPLS(label=66, ttl=2) /
-                                  src_ip_hdr))
+                IPv6(dst="3000::1", src="3000:1::%d" % ii)
+                / inet6.UDP(sport=1234, dport=1234)
+                / Raw(b"\xa5" * 100)
+            )
+            src_ip_pkts.append(
+                (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) / src_ip_hdr)
+            )
+            src_mpls_pkts.append(
+                (
+                    Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+                    / MPLS(label=66, ttl=2)
+                    / src_ip_hdr
+                )
+            )
 
         #
         # A route for the IP packets
         #
 
         #
         # A route for the IP packets
         #
-        route_3000_1 = VppIpRoute(self, "3000::1", 128,
-                                  [VppRoutePath(self.pg1.remote_ip6,
-                                                self.pg1.sw_if_index),
-                                   VppRoutePath(self.pg2.remote_ip6,
-                                                self.pg2.sw_if_index)])
+        route_3000_1 = VppIpRoute(
+            self,
+            "3000::1",
+            128,
+            [
+                VppRoutePath(self.pg1.remote_ip6, self.pg1.sw_if_index),
+                VppRoutePath(self.pg2.remote_ip6, self.pg2.sw_if_index),
+            ],
+        )
         route_3000_1.add_vpp_config()
 
         #
         route_3000_1.add_vpp_config()
 
         #
@@ -2043,13 +2167,15 @@ class TestIP6LoadBalance(VppTestCase):
         #
         # An MPLS route for the non-EOS packets
         #
         #
         # An MPLS route for the non-EOS packets
         #
-        route_67 = VppMplsRoute(self, 67, 0,
-                                [VppRoutePath(self.pg1.remote_ip6,
-                                              self.pg1.sw_if_index,
-                                              labels=[67]),
-                                 VppRoutePath(self.pg2.remote_ip6,
-                                              self.pg2.sw_if_index,
-                                              labels=[67])])
+        route_67 = VppMplsRoute(
+            self,
+            67,
+            0,
+            [
+                VppRoutePath(self.pg1.remote_ip6, self.pg1.sw_if_index, labels=[67]),
+                VppRoutePath(self.pg2.remote_ip6, self.pg2.sw_if_index, labels=[67]),
+            ],
+        )
         route_67.add_vpp_config()
 
         #
         route_67.add_vpp_config()
 
         #
@@ -2061,17 +2187,20 @@ class TestIP6LoadBalance(VppTestCase):
         # be guaranteed. But with 64 different packets we do expect some
         # balancing. So instead just ensure there is traffic on each link.
         #
         # be guaranteed. But with 64 different packets we do expect some
         # balancing. So instead just ensure there is traffic on each link.
         #
-        rx = self.send_and_expect_load_balancing(self.pg0, port_ip_pkts,
-                                                 [self.pg1, self.pg2])
+        rx = self.send_and_expect_load_balancing(
+            self.pg0, port_ip_pkts, [self.pg1, self.pg2]
+        )
         n_ip_pg0 = len(rx[0])
         n_ip_pg0 = len(rx[0])
-        self.send_and_expect_load_balancing(self.pg0, src_ip_pkts,
-                                            [self.pg1, self.pg2])
-        self.send_and_expect_load_balancing(self.pg0, port_mpls_pkts,
-                                            [self.pg1, self.pg2])
-        self.send_and_expect_load_balancing(self.pg0, src_mpls_pkts,
-                                            [self.pg1, self.pg2])
-        rx = self.send_and_expect_load_balancing(self.pg0, port_mpls_neos_pkts,
-                                                 [self.pg1, self.pg2])
+        self.send_and_expect_load_balancing(self.pg0, src_ip_pkts, [self.pg1, self.pg2])
+        self.send_and_expect_load_balancing(
+            self.pg0, port_mpls_pkts, [self.pg1, self.pg2]
+        )
+        self.send_and_expect_load_balancing(
+            self.pg0, src_mpls_pkts, [self.pg1, self.pg2]
+        )
+        rx = self.send_and_expect_load_balancing(
+            self.pg0, port_mpls_neos_pkts, [self.pg1, self.pg2]
+        )
         n_mpls_pg0 = len(rx[0])
 
         #
         n_mpls_pg0 = len(rx[0])
 
         #
@@ -2079,12 +2208,14 @@ class TestIP6LoadBalance(VppTestCase):
         #
         self.vapi.set_ip_flow_hash_router_id(router_id=0x11111111)
 
         #
         self.vapi.set_ip_flow_hash_router_id(router_id=0x11111111)
 
-        rx = self.send_and_expect_load_balancing(self.pg0, port_ip_pkts,
-                                                 [self.pg1, self.pg2])
+        rx = self.send_and_expect_load_balancing(
+            self.pg0, port_ip_pkts, [self.pg1, self.pg2]
+        )
         self.assertNotEqual(n_ip_pg0, len(rx[0]))
 
         self.assertNotEqual(n_ip_pg0, len(rx[0]))
 
-        rx = self.send_and_expect_load_balancing(self.pg0, src_mpls_pkts,
-                                                 [self.pg1, self.pg2])
+        rx = self.send_and_expect_load_balancing(
+            self.pg0, src_mpls_pkts, [self.pg1, self.pg2]
+        )
         self.assertNotEqual(n_mpls_pg0, len(rx[0]))
 
         #
         self.assertNotEqual(n_mpls_pg0, len(rx[0]))
 
         #
@@ -2098,20 +2229,22 @@ class TestIP6LoadBalance(VppTestCase):
         #  - now only the stream with differing source address will
         #    load-balance
         #
         #  - now only the stream with differing source address will
         #    load-balance
         #
-        self.vapi.set_ip_flow_hash(vrf_id=0, src=1, dst=1, proto=1,
-                                   sport=0, dport=0, is_ipv6=1)
+        self.vapi.set_ip_flow_hash(
+            vrf_id=0, src=1, dst=1, proto=1, sport=0, dport=0, is_ipv6=1
+        )
 
 
-        self.send_and_expect_load_balancing(self.pg0, src_ip_pkts,
-                                            [self.pg1, self.pg2])
-        self.send_and_expect_load_balancing(self.pg0, src_mpls_pkts,
-                                            [self.pg1, self.pg2])
+        self.send_and_expect_load_balancing(self.pg0, src_ip_pkts, [self.pg1, self.pg2])
+        self.send_and_expect_load_balancing(
+            self.pg0, src_mpls_pkts, [self.pg1, self.pg2]
+        )
         self.send_and_expect_only(self.pg0, port_ip_pkts, self.pg2)
 
         #
         # change the flow hash config back to defaults
         #
         self.send_and_expect_only(self.pg0, port_ip_pkts, self.pg2)
 
         #
         # change the flow hash config back to defaults
         #
-        self.vapi.set_ip_flow_hash(vrf_id=0, src=1, dst=1, sport=1, dport=1,
-                                   proto=1, is_ipv6=1)
+        self.vapi.set_ip_flow_hash(
+            vrf_id=0, src=1, dst=1, sport=1, dport=1, proto=1, is_ipv6=1
+        )
 
         #
         # Recursive prefixes
 
         #
         # Recursive prefixes
@@ -2122,44 +2255,52 @@ class TestIP6LoadBalance(VppTestCase):
         src_pkts = []
 
         for ii in range(257):
         src_pkts = []
 
         for ii in range(257):
-            port_pkts.append((Ether(src=self.pg0.remote_mac,
-                                    dst=self.pg0.local_mac) /
-                              IPv6(dst="4000::1",
-                                   src="4000:1::1") /
-                              inet6.UDP(sport=1234,
-                                        dport=1234 + ii) /
-                              Raw(b'\xa5' * 100)))
-            src_pkts.append((Ether(src=self.pg0.remote_mac,
-                                   dst=self.pg0.local_mac) /
-                             IPv6(dst="4000::1",
-                                  src="4000:1::%d" % ii) /
-                             inet6.UDP(sport=1234, dport=1234) /
-                             Raw(b'\xa5' * 100)))
-
-        route_3000_2 = VppIpRoute(self, "3000::2", 128,
-                                  [VppRoutePath(self.pg3.remote_ip6,
-                                                self.pg3.sw_if_index),
-                                   VppRoutePath(self.pg4.remote_ip6,
-                                                self.pg4.sw_if_index)])
+            port_pkts.append(
+                (
+                    Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+                    / IPv6(dst="4000::1", src="4000:1::1")
+                    / inet6.UDP(sport=1234, dport=1234 + ii)
+                    / Raw(b"\xa5" * 100)
+                )
+            )
+            src_pkts.append(
+                (
+                    Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+                    / IPv6(dst="4000::1", src="4000:1::%d" % ii)
+                    / inet6.UDP(sport=1234, dport=1234)
+                    / Raw(b"\xa5" * 100)
+                )
+            )
+
+        route_3000_2 = VppIpRoute(
+            self,
+            "3000::2",
+            128,
+            [
+                VppRoutePath(self.pg3.remote_ip6, self.pg3.sw_if_index),
+                VppRoutePath(self.pg4.remote_ip6, self.pg4.sw_if_index),
+            ],
+        )
         route_3000_2.add_vpp_config()
 
         route_3000_2.add_vpp_config()
 
-        route_4000_1 = VppIpRoute(self, "4000::1", 128,
-                                  [VppRoutePath("3000::1",
-                                                0xffffffff),
-                                   VppRoutePath("3000::2",
-                                                0xffffffff)])
+        route_4000_1 = VppIpRoute(
+            self,
+            "4000::1",
+            128,
+            [VppRoutePath("3000::1", 0xFFFFFFFF), VppRoutePath("3000::2", 0xFFFFFFFF)],
+        )
         route_4000_1.add_vpp_config()
 
         #
         # inject the packet on pg0 - expect load-balancing across all 4 paths
         #
         self.vapi.cli("clear trace")
         route_4000_1.add_vpp_config()
 
         #
         # inject the packet on pg0 - expect load-balancing across all 4 paths
         #
         self.vapi.cli("clear trace")
-        self.send_and_expect_load_balancing(self.pg0, port_pkts,
-                                            [self.pg1, self.pg2,
-                                             self.pg3, self.pg4])
-        self.send_and_expect_load_balancing(self.pg0, src_pkts,
-                                            [self.pg1, self.pg2,
-                                             self.pg3, self.pg4])
+        self.send_and_expect_load_balancing(
+            self.pg0, port_pkts, [self.pg1, self.pg2, self.pg3, self.pg4]
+        )
+        self.send_and_expect_load_balancing(
+            self.pg0, src_pkts, [self.pg1, self.pg2, self.pg3, self.pg4]
+        )
 
         #
         # Recursive prefixes
 
         #
         # Recursive prefixes
@@ -2168,22 +2309,26 @@ class TestIP6LoadBalance(VppTestCase):
         port_pkts = []
 
         for ii in range(257):
         port_pkts = []
 
         for ii in range(257):
-            port_pkts.append((Ether(src=self.pg0.remote_mac,
-                                    dst=self.pg0.local_mac) /
-                              IPv6(dst="6000::1",
-                                   src="6000:1::1") /
-                              inet6.UDP(sport=1234,
-                                        dport=1234 + ii) /
-                              Raw(b'\xa5' * 100)))
-
-        route_5000_2 = VppIpRoute(self, "5000::2", 128,
-                                  [VppRoutePath(self.pg3.remote_ip6,
-                                                self.pg3.sw_if_index)])
+            port_pkts.append(
+                (
+                    Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+                    / IPv6(dst="6000::1", src="6000:1::1")
+                    / inet6.UDP(sport=1234, dport=1234 + ii)
+                    / Raw(b"\xa5" * 100)
+                )
+            )
+
+        route_5000_2 = VppIpRoute(
+            self,
+            "5000::2",
+            128,
+            [VppRoutePath(self.pg3.remote_ip6, self.pg3.sw_if_index)],
+        )
         route_5000_2.add_vpp_config()
 
         route_5000_2.add_vpp_config()
 
-        route_6000_1 = VppIpRoute(self, "6000::1", 128,
-                                  [VppRoutePath("5000::2",
-                                                0xffffffff)])
+        route_6000_1 = VppIpRoute(
+            self, "6000::1", 128, [VppRoutePath("5000::2", 0xFFFFFFFF)]
+        )
         route_6000_1.add_vpp_config()
 
         #
         route_6000_1.add_vpp_config()
 
         #
@@ -2194,7 +2339,7 @@ class TestIP6LoadBalance(VppTestCase):
 
 
 class IP6PuntSetup(object):
 
 
 class IP6PuntSetup(object):
-    """ Setup for IPv6 Punt Police/Redirect """
+    """Setup for IPv6 Punt Police/Redirect"""
 
     def punt_setup(self):
         self.create_pg_interfaces(range(4))
 
     def punt_setup(self):
         self.create_pg_interfaces(range(4))
@@ -2204,12 +2349,12 @@ class IP6PuntSetup(object):
             i.config_ip6()
             i.resolve_ndp()
 
             i.config_ip6()
             i.resolve_ndp()
 
-        self.pkt = (Ether(src=self.pg0.remote_mac,
-                          dst=self.pg0.local_mac) /
-                    IPv6(src=self.pg0.remote_ip6,
-                         dst=self.pg0.local_ip6) /
-                    inet6.TCP(sport=1234, dport=1234) /
-                    Raw(b'\xa5' * 100))
+        self.pkt = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IPv6(src=self.pg0.remote_ip6, dst=self.pg0.local_ip6)
+            / inet6.TCP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
 
     def punt_teardown(self):
         for i in self.pg_interfaces:
 
     def punt_teardown(self):
         for i in self.pg_interfaces:
@@ -2218,7 +2363,7 @@ class IP6PuntSetup(object):
 
 
 class TestIP6Punt(IP6PuntSetup, VppTestCase):
 
 
 class TestIP6Punt(IP6PuntSetup, VppTestCase):
-    """ IPv6 Punt Police/Redirect """
+    """IPv6 Punt Police/Redirect"""
 
     def setUp(self):
         super(TestIP6Punt, self).setUp()
 
     def setUp(self):
         super(TestIP6Punt, self).setUp()
@@ -2229,7 +2374,7 @@ class TestIP6Punt(IP6PuntSetup, VppTestCase):
         super(TestIP6Punt, self).tearDown()
 
     def test_ip_punt(self):
         super(TestIP6Punt, self).tearDown()
 
     def test_ip_punt(self):
-        """ IP6 punt police and redirect """
+        """IP6 punt police and redirect"""
 
         pkts = self.pkt * 1025
 
 
         pkts = self.pkt * 1025
 
@@ -2237,8 +2382,9 @@ class TestIP6Punt(IP6PuntSetup, VppTestCase):
         # Configure a punt redirect via pg1.
         #
         nh_addr = self.pg1.remote_ip6
         # Configure a punt redirect via pg1.
         #
         nh_addr = self.pg1.remote_ip6
-        ip_punt_redirect = VppIpPuntRedirect(self, self.pg0.sw_if_index,
-                                             self.pg1.sw_if_index, nh_addr)
+        ip_punt_redirect = VppIpPuntRedirect(
+            self, self.pg0.sw_if_index, self.pg1.sw_if_index, nh_addr
+        )
         ip_punt_redirect.add_vpp_config()
 
         self.send_and_expect(self.pg0, pkts, self.pg1)
         ip_punt_redirect.add_vpp_config()
 
         self.send_and_expect(self.pg0, pkts, self.pg1)
@@ -2248,8 +2394,7 @@ class TestIP6Punt(IP6PuntSetup, VppTestCase):
         #
         policer = VppPolicer(self, "ip6-punt", 400, 0, 10, 0, rate_type=1)
         policer.add_vpp_config()
         #
         policer = VppPolicer(self, "ip6-punt", 400, 0, 10, 0, rate_type=1)
         policer.add_vpp_config()
-        ip_punt_policer = VppIpPuntPolicer(self, policer.policer_index,
-                                           is_ip6=True)
+        ip_punt_policer = VppIpPuntPolicer(self, policer.policer_index, is_ip6=True)
         ip_punt_policer.add_vpp_config()
 
         self.vapi.cli("clear trace")
         ip_punt_policer.add_vpp_config()
 
         self.vapi.cli("clear trace")
@@ -2265,9 +2410,9 @@ class TestIP6Punt(IP6PuntSetup, VppTestCase):
         stats = policer.get_stats()
 
         # Single rate policer - expect conform, violate but no exceed
         stats = policer.get_stats()
 
         # Single rate policer - expect conform, violate but no exceed
-        self.assertGreater(stats['conform_packets'], 0)
-        self.assertEqual(stats['exceed_packets'], 0)
-        self.assertGreater(stats['violate_packets'], 0)
+        self.assertGreater(stats["conform_packets"], 0)
+        self.assertEqual(stats["exceed_packets"], 0)
+        self.assertGreater(stats["violate_packets"], 0)
 
         self.assertGreater(len(rx), 0)
         self.assertLess(len(rx), len(pkts))
 
         self.assertGreater(len(rx), 0)
         self.assertLess(len(rx), len(pkts))
@@ -2283,31 +2428,34 @@ class TestIP6Punt(IP6PuntSetup, VppTestCase):
         # remove the redirect. expect full drop.
         #
         ip_punt_redirect.remove_vpp_config()
         # remove the redirect. expect full drop.
         #
         ip_punt_redirect.remove_vpp_config()
-        self.send_and_assert_no_replies(self.pg0, pkts,
-                                        "IP no punt config")
+        self.send_and_assert_no_replies(self.pg0, pkts, "IP no punt config")
 
         #
         # Add a redirect that is not input port selective
         #
 
         #
         # Add a redirect that is not input port selective
         #
-        ip_punt_redirect = VppIpPuntRedirect(self, 0xffffffff,
-                                             self.pg1.sw_if_index, nh_addr)
+        ip_punt_redirect = VppIpPuntRedirect(
+            self, 0xFFFFFFFF, self.pg1.sw_if_index, nh_addr
+        )
         ip_punt_redirect.add_vpp_config()
         self.send_and_expect(self.pg0, pkts, self.pg1)
         ip_punt_redirect.remove_vpp_config()
 
     def test_ip_punt_dump(self):
         ip_punt_redirect.add_vpp_config()
         self.send_and_expect(self.pg0, pkts, self.pg1)
         ip_punt_redirect.remove_vpp_config()
 
     def test_ip_punt_dump(self):
-        """ IP6 punt redirect dump"""
+        """IP6 punt redirect dump"""
 
         #
         # Configure a punt redirects
         #
         nh_address = self.pg3.remote_ip6
 
         #
         # Configure a punt redirects
         #
         nh_address = self.pg3.remote_ip6
-        ipr_03 = VppIpPuntRedirect(self, self.pg0.sw_if_index,
-                                   self.pg3.sw_if_index, nh_address)
-        ipr_13 = VppIpPuntRedirect(self, self.pg1.sw_if_index,
-                                   self.pg3.sw_if_index, nh_address)
-        ipr_23 = VppIpPuntRedirect(self, self.pg2.sw_if_index,
-                                   self.pg3.sw_if_index, '0::0')
+        ipr_03 = VppIpPuntRedirect(
+            self, self.pg0.sw_if_index, self.pg3.sw_if_index, nh_address
+        )
+        ipr_13 = VppIpPuntRedirect(
+            self, self.pg1.sw_if_index, self.pg3.sw_if_index, nh_address
+        )
+        ipr_23 = VppIpPuntRedirect(
+            self, self.pg2.sw_if_index, self.pg3.sw_if_index, "0::0"
+        )
         ipr_03.add_vpp_config()
         ipr_13.add_vpp_config()
         ipr_23.add_vpp_config()
         ipr_03.add_vpp_config()
         ipr_13.add_vpp_config()
         ipr_23.add_vpp_config()
@@ -2322,16 +2470,17 @@ class TestIP6Punt(IP6PuntSetup, VppTestCase):
         #
         # Dump punt redirects for all interfaces
         #
         #
         # Dump punt redirects for all interfaces
         #
-        punts = self.vapi.ip_punt_redirect_dump(0xffffffff, is_ipv6=1)
+        punts = self.vapi.ip_punt_redirect_dump(0xFFFFFFFF, is_ipv6=1)
         self.assertEqual(len(punts), 3)
         for p in punts:
             self.assertEqual(p.punt.tx_sw_if_index, self.pg3.sw_if_index)
         self.assertNotEqual(punts[1].punt.nh, self.pg3.remote_ip6)
         self.assertEqual(len(punts), 3)
         for p in punts:
             self.assertEqual(p.punt.tx_sw_if_index, self.pg3.sw_if_index)
         self.assertNotEqual(punts[1].punt.nh, self.pg3.remote_ip6)
-        self.assertEqual(str(punts[2].punt.nh), '::')
+        self.assertEqual(str(punts[2].punt.nh), "::")
 
 
 class TestIP6PuntHandoff(IP6PuntSetup, VppTestCase):
 
 
 class TestIP6PuntHandoff(IP6PuntSetup, VppTestCase):
-    """ IPv6 Punt Police/Redirect """
+    """IPv6 Punt Police/Redirect"""
+
     vpp_worker_count = 2
 
     def setUp(self):
     vpp_worker_count = 2
 
     def setUp(self):
@@ -2343,29 +2492,42 @@ class TestIP6PuntHandoff(IP6PuntSetup, VppTestCase):
         super(TestIP6PuntHandoff, self).tearDown()
 
     def test_ip_punt(self):
         super(TestIP6PuntHandoff, self).tearDown()
 
     def test_ip_punt(self):
-        """ IP6 punt policer thread handoff """
+        """IP6 punt policer thread handoff"""
         pkts = self.pkt * NUM_PKTS
 
         #
         # Configure a punt redirect via pg1.
         #
         nh_addr = self.pg1.remote_ip6
         pkts = self.pkt * NUM_PKTS
 
         #
         # Configure a punt redirect via pg1.
         #
         nh_addr = self.pg1.remote_ip6
-        ip_punt_redirect = VppIpPuntRedirect(self, self.pg0.sw_if_index,
-                                             self.pg1.sw_if_index, nh_addr)
+        ip_punt_redirect = VppIpPuntRedirect(
+            self, self.pg0.sw_if_index, self.pg1.sw_if_index, nh_addr
+        )
         ip_punt_redirect.add_vpp_config()
 
         action_tx = PolicerAction(
         ip_punt_redirect.add_vpp_config()
 
         action_tx = PolicerAction(
-            VppEnum.vl_api_sse2_qos_action_type_t.SSE2_QOS_ACTION_API_TRANSMIT,
-            0)
+            VppEnum.vl_api_sse2_qos_action_type_t.SSE2_QOS_ACTION_API_TRANSMIT, 0
+        )
         #
         # This policer drops no packets, we are just
         # testing that they get to the right thread.
         #
         #
         # This policer drops no packets, we are just
         # testing that they get to the right thread.
         #
-        policer = VppPolicer(self, "ip6-punt", 400, 0, 10, 0, 1,
-                             0, 0, False, action_tx, action_tx, action_tx)
+        policer = VppPolicer(
+            self,
+            "ip6-punt",
+            400,
+            0,
+            10,
+            0,
+            1,
+            0,
+            0,
+            False,
+            action_tx,
+            action_tx,
+            action_tx,
+        )
         policer.add_vpp_config()
         policer.add_vpp_config()
-        ip_punt_policer = VppIpPuntPolicer(self, policer.policer_index,
-                                           is_ip6=True)
+        ip_punt_policer = VppIpPuntPolicer(self, policer.policer_index, is_ip6=True)
         ip_punt_policer.add_vpp_config()
 
         for worker in [0, 1]:
         ip_punt_policer.add_vpp_config()
 
         for worker in [0, 1]:
@@ -2377,9 +2539,9 @@ class TestIP6PuntHandoff(IP6PuntSetup, VppTestCase):
         stats = policer.get_stats()
 
         # Single rate policer - expect conform, violate but no exceed
         stats = policer.get_stats()
 
         # Single rate policer - expect conform, violate but no exceed
-        self.assertGreater(stats['conform_packets'], 0)
-        self.assertEqual(stats['exceed_packets'], 0)
-        self.assertGreater(stats['violate_packets'], 0)
+        self.assertGreater(stats["conform_packets"], 0)
+        self.assertEqual(stats["exceed_packets"], 0)
+        self.assertGreater(stats["violate_packets"], 0)
 
         # Worker 0, should have done all the policing
         stats0 = policer.get_stats(worker=0)
 
         # Worker 0, should have done all the policing
         stats0 = policer.get_stats(worker=0)
@@ -2387,9 +2549,9 @@ class TestIP6PuntHandoff(IP6PuntSetup, VppTestCase):
 
         # Worker 1, should have handed everything off
         stats1 = policer.get_stats(worker=1)
 
         # Worker 1, should have handed everything off
         stats1 = policer.get_stats(worker=1)
-        self.assertEqual(stats1['conform_packets'], 0)
-        self.assertEqual(stats1['exceed_packets'], 0)
-        self.assertEqual(stats1['violate_packets'], 0)
+        self.assertEqual(stats1["conform_packets"], 0)
+        self.assertEqual(stats1["exceed_packets"], 0)
+        self.assertEqual(stats1["violate_packets"], 0)
 
         # Bind the policer to worker 1 and repeat
         policer.bind_vpp_config(1, True)
 
         # Bind the policer to worker 1 and repeat
         policer.bind_vpp_config(1, True)
@@ -2402,19 +2564,23 @@ class TestIP6PuntHandoff(IP6PuntSetup, VppTestCase):
         stats0 = policer.get_stats(worker=0)
         stats1 = policer.get_stats(worker=1)
 
         stats0 = policer.get_stats(worker=0)
         stats1 = policer.get_stats(worker=1)
 
-        self.assertGreater(stats0['conform_packets'], 0)
-        self.assertEqual(stats0['exceed_packets'], 0)
-        self.assertGreater(stats0['violate_packets'], 0)
+        self.assertGreater(stats0["conform_packets"], 0)
+        self.assertEqual(stats0["exceed_packets"], 0)
+        self.assertGreater(stats0["violate_packets"], 0)
 
 
-        self.assertGreater(stats1['conform_packets'], 0)
-        self.assertEqual(stats1['exceed_packets'], 0)
-        self.assertGreater(stats1['violate_packets'], 0)
+        self.assertGreater(stats1["conform_packets"], 0)
+        self.assertEqual(stats1["exceed_packets"], 0)
+        self.assertGreater(stats1["violate_packets"], 0)
 
 
-        self.assertEqual(stats0['conform_packets'] + stats1['conform_packets'],
-                         stats['conform_packets'])
+        self.assertEqual(
+            stats0["conform_packets"] + stats1["conform_packets"],
+            stats["conform_packets"],
+        )
 
 
-        self.assertEqual(stats0['violate_packets'] + stats1['violate_packets'],
-                         stats['violate_packets'])
+        self.assertEqual(
+            stats0["violate_packets"] + stats1["violate_packets"],
+            stats["violate_packets"],
+        )
 
         # Unbind the policer and repeat
         policer.bind_vpp_config(1, False)
 
         # Unbind the policer and repeat
         policer.bind_vpp_config(1, False)
@@ -2427,11 +2593,9 @@ class TestIP6PuntHandoff(IP6PuntSetup, VppTestCase):
         stats0new = policer.get_stats(worker=0)
         stats1new = policer.get_stats(worker=1)
 
         stats0new = policer.get_stats(worker=0)
         stats1new = policer.get_stats(worker=1)
 
-        self.assertGreater(stats0new['conform_packets'],
-                           stats0['conform_packets'])
-        self.assertEqual(stats0new['exceed_packets'], 0)
-        self.assertGreater(stats0new['violate_packets'],
-                           stats0['violate_packets'])
+        self.assertGreater(stats0new["conform_packets"], stats0["conform_packets"])
+        self.assertEqual(stats0new["exceed_packets"], 0)
+        self.assertGreater(stats0new["violate_packets"], stats0["violate_packets"])
 
         self.assertEqual(stats1, stats1new)
 
 
         self.assertEqual(stats1, stats1new)
 
@@ -2444,7 +2608,7 @@ class TestIP6PuntHandoff(IP6PuntSetup, VppTestCase):
 
 
 class TestIP6Deag(VppTestCase):
 
 
 class TestIP6Deag(VppTestCase):
-    """ IPv6 Deaggregate Routes """
+    """IPv6 Deaggregate Routes"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -2471,7 +2635,7 @@ class TestIP6Deag(VppTestCase):
             i.admin_down()
 
     def test_ip_deag(self):
             i.admin_down()
 
     def test_ip_deag(self):
-        """ IP Deag Routes """
+        """IP Deag Routes"""
 
         #
         # Create a table to be used for:
 
         #
         # Create a table to be used for:
@@ -2487,16 +2651,22 @@ class TestIP6Deag(VppTestCase):
         # Add a route in the default table to point to a deag/
         # second lookup in each of these tables
         #
         # Add a route in the default table to point to a deag/
         # second lookup in each of these tables
         #
-        route_to_dst = VppIpRoute(self, "1::1", 128,
-                                  [VppRoutePath("::",
-                                                0xffffffff,
-                                                nh_table_id=1)])
+        route_to_dst = VppIpRoute(
+            self, "1::1", 128, [VppRoutePath("::", 0xFFFFFFFF, nh_table_id=1)]
+        )
         route_to_src = VppIpRoute(
         route_to_src = VppIpRoute(
-            self, "1::2", 128,
-            [VppRoutePath("::",
-                          0xffffffff,
-                          nh_table_id=2,
-                          type=FibPathType.FIB_PATH_TYPE_SOURCE_LOOKUP)])
+            self,
+            "1::2",
+            128,
+            [
+                VppRoutePath(
+                    "::",
+                    0xFFFFFFFF,
+                    nh_table_id=2,
+                    type=FibPathType.FIB_PATH_TYPE_SOURCE_LOOKUP,
+                )
+            ],
+        )
 
         route_to_dst.add_vpp_config()
         route_to_src.add_vpp_config()
 
         route_to_dst.add_vpp_config()
         route_to_src.add_vpp_config()
@@ -2505,31 +2675,34 @@ class TestIP6Deag(VppTestCase):
         # packets to these destination are dropped, since they'll
         # hit the respective default routes in the second table
         #
         # packets to these destination are dropped, since they'll
         # hit the respective default routes in the second table
         #
-        p_dst = (Ether(src=self.pg0.remote_mac,
-                       dst=self.pg0.local_mac) /
-                 IPv6(src="5::5", dst="1::1") /
-                 inet6.TCP(sport=1234, dport=1234) /
-                 Raw(b'\xa5' * 100))
-        p_src = (Ether(src=self.pg0.remote_mac,
-                       dst=self.pg0.local_mac) /
-                 IPv6(src="2::2", dst="1::2") /
-                 inet6.TCP(sport=1234, dport=1234) /
-                 Raw(b'\xa5' * 100))
+        p_dst = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IPv6(src="5::5", dst="1::1")
+            / inet6.TCP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
+        p_src = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IPv6(src="2::2", dst="1::2")
+            / inet6.TCP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
         pkts_dst = p_dst * 257
         pkts_src = p_src * 257
 
         pkts_dst = p_dst * 257
         pkts_src = p_src * 257
 
-        self.send_and_assert_no_replies(self.pg0, pkts_dst,
-                                        "IP in dst table")
-        self.send_and_assert_no_replies(self.pg0, pkts_src,
-                                        "IP in src table")
+        self.send_and_assert_no_replies(self.pg0, pkts_dst, "IP in dst table")
+        self.send_and_assert_no_replies(self.pg0, pkts_src, "IP in src table")
 
         #
         # add a route in the dst table to forward via pg1
         #
 
         #
         # add a route in the dst table to forward via pg1
         #
-        route_in_dst = VppIpRoute(self, "1::1", 128,
-                                  [VppRoutePath(self.pg1.remote_ip6,
-                                                self.pg1.sw_if_index)],
-                                  table_id=1)
+        route_in_dst = VppIpRoute(
+            self,
+            "1::1",
+            128,
+            [VppRoutePath(self.pg1.remote_ip6, self.pg1.sw_if_index)],
+            table_id=1,
+        )
         route_in_dst.add_vpp_config()
 
         self.send_and_expect(self.pg0, pkts_dst, self.pg1)
         route_in_dst.add_vpp_config()
 
         self.send_and_expect(self.pg0, pkts_dst, self.pg1)
@@ -2537,33 +2710,34 @@ class TestIP6Deag(VppTestCase):
         #
         # add a route in the src table to forward via pg2
         #
         #
         # add a route in the src table to forward via pg2
         #
-        route_in_src = VppIpRoute(self, "2::2", 128,
-                                  [VppRoutePath(self.pg2.remote_ip6,
-                                                self.pg2.sw_if_index)],
-                                  table_id=2)
+        route_in_src = VppIpRoute(
+            self,
+            "2::2",
+            128,
+            [VppRoutePath(self.pg2.remote_ip6, self.pg2.sw_if_index)],
+            table_id=2,
+        )
         route_in_src.add_vpp_config()
         self.send_and_expect(self.pg0, pkts_src, self.pg2)
 
         #
         # loop in the lookup DP
         #
         route_in_src.add_vpp_config()
         self.send_and_expect(self.pg0, pkts_src, self.pg2)
 
         #
         # loop in the lookup DP
         #
-        route_loop = VppIpRoute(self, "3::3", 128,
-                                [VppRoutePath("::",
-                                              0xffffffff)])
+        route_loop = VppIpRoute(self, "3::3", 128, [VppRoutePath("::", 0xFFFFFFFF)])
         route_loop.add_vpp_config()
 
         route_loop.add_vpp_config()
 
-        p_l = (Ether(src=self.pg0.remote_mac,
-                     dst=self.pg0.local_mac) /
-               IPv6(src="3::4", dst="3::3") /
-               inet6.TCP(sport=1234, dport=1234) /
-               Raw(b'\xa5' * 100))
+        p_l = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IPv6(src="3::4", dst="3::3")
+            / inet6.TCP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
 
 
-        self.send_and_assert_no_replies(self.pg0, p_l * 257,
-                                        "IP lookup loop")
+        self.send_and_assert_no_replies(self.pg0, p_l * 257, "IP lookup loop")
 
 
 class TestIP6Input(VppTestCase):
 
 
 class TestIP6Input(VppTestCase):
-    """ IPv6 Input Exception Test Cases """
+    """IPv6 Input Exception Test Cases"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -2590,72 +2764,110 @@ class TestIP6Input(VppTestCase):
             i.admin_down()
 
     def test_ip_input_icmp_reply(self):
             i.admin_down()
 
     def test_ip_input_icmp_reply(self):
-        """ IP6 Input Exception - Return ICMP (3,0) """
+        """IP6 Input Exception - Return ICMP (3,0)"""
         #
         # hop limit - ICMP replies
         #
         #
         # hop limit - ICMP replies
         #
-        p_version = (Ether(src=self.pg0.remote_mac,
-                           dst=self.pg0.local_mac) /
-                     IPv6(src=self.pg0.remote_ip6,
-                          dst=self.pg1.remote_ip6,
-                          hlim=1) /
-                     inet6.UDP(sport=1234, dport=1234) /
-                     Raw(b'\xa5' * 100))
+        p_version = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IPv6(src=self.pg0.remote_ip6, dst=self.pg1.remote_ip6, hlim=1)
+            / inet6.UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
 
 
-        rxs = self.send_and_expect_some(self.pg0,
-                                        p_version * NUM_PKTS,
-                                        self.pg0)
+        rxs = self.send_and_expect_some(self.pg0, p_version * NUM_PKTS, self.pg0)
 
         for rx in rxs:
             icmp = rx[ICMPv6TimeExceeded]
             # 0: "hop limit exceeded in transit",
             self.assertEqual((icmp.type, icmp.code), (3, 0))
 
 
         for rx in rxs:
             icmp = rx[ICMPv6TimeExceeded]
             # 0: "hop limit exceeded in transit",
             self.assertEqual((icmp.type, icmp.code), (3, 0))
 
-    icmpv6_data = '\x0a' * 18
+    icmpv6_data = "\x0a" * 18
     all_0s = "::"
     all_1s = "FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF"
 
     all_0s = "::"
     all_1s = "FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF"
 
-    @parameterized.expand([
-        # Name, src, dst, l4proto, msg, timeout
-        ("src='iface',   dst='iface'", None, None,
-         inet6.UDP(sport=1234, dport=1234), "funky version", None),
-        ("src='All 0's', dst='iface'", all_0s, None,
-         ICMPv6EchoRequest(id=0xb, seq=5, data=icmpv6_data), None, 0.1),
-        ("src='iface',   dst='All 0's'", None, all_0s,
-         ICMPv6EchoRequest(id=0xb, seq=5, data=icmpv6_data), None, 0.1),
-        ("src='All 1's', dst='iface'", all_1s, None,
-         ICMPv6EchoRequest(id=0xb, seq=5, data=icmpv6_data), None, 0.1),
-        ("src='iface',   dst='All 1's'", None, all_1s,
-         ICMPv6EchoRequest(id=0xb, seq=5, data=icmpv6_data), None, 0.1),
-        ("src='All 1's', dst='All 1's'", all_1s, all_1s,
-         ICMPv6EchoRequest(id=0xb, seq=5, data=icmpv6_data), None, 0.1),
-
-    ])
+    @parameterized.expand(
+        [
+            # Name, src, dst, l4proto, msg, timeout
+            (
+                "src='iface',   dst='iface'",
+                None,
+                None,
+                inet6.UDP(sport=1234, dport=1234),
+                "funky version",
+                None,
+            ),
+            (
+                "src='All 0's', dst='iface'",
+                all_0s,
+                None,
+                ICMPv6EchoRequest(id=0xB, seq=5, data=icmpv6_data),
+                None,
+                0.1,
+            ),
+            (
+                "src='iface',   dst='All 0's'",
+                None,
+                all_0s,
+                ICMPv6EchoRequest(id=0xB, seq=5, data=icmpv6_data),
+                None,
+                0.1,
+            ),
+            (
+                "src='All 1's', dst='iface'",
+                all_1s,
+                None,
+                ICMPv6EchoRequest(id=0xB, seq=5, data=icmpv6_data),
+                None,
+                0.1,
+            ),
+            (
+                "src='iface',   dst='All 1's'",
+                None,
+                all_1s,
+                ICMPv6EchoRequest(id=0xB, seq=5, data=icmpv6_data),
+                None,
+                0.1,
+            ),
+            (
+                "src='All 1's', dst='All 1's'",
+                all_1s,
+                all_1s,
+                ICMPv6EchoRequest(id=0xB, seq=5, data=icmpv6_data),
+                None,
+                0.1,
+            ),
+        ]
+    )
     def test_ip_input_no_replies(self, name, src, dst, l4, msg, timeout):
 
     def test_ip_input_no_replies(self, name, src, dst, l4, msg, timeout):
 
-        self._testMethodDoc = 'IPv6 Input Exception - %s' % name
-
-        p_version = (Ether(src=self.pg0.remote_mac,
-                           dst=self.pg0.local_mac) /
-                     IPv6(src=src or self.pg0.remote_ip6,
-                          dst=dst or self.pg1.remote_ip6,
-                          version=3) /
-                     l4 /
-                     Raw(b'\xa5' * 100))
+        self._testMethodDoc = "IPv6 Input Exception - %s" % name
+
+        p_version = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IPv6(
+                src=src or self.pg0.remote_ip6,
+                dst=dst or self.pg1.remote_ip6,
+                version=3,
+            )
+            / l4
+            / Raw(b"\xa5" * 100)
+        )
 
 
-        self.send_and_assert_no_replies(self.pg0, p_version * NUM_PKTS,
-                                        remark=msg or "",
-                                        timeout=timeout)
+        self.send_and_assert_no_replies(
+            self.pg0, p_version * NUM_PKTS, remark=msg or "", timeout=timeout
+        )
 
     def test_hop_by_hop(self):
 
     def test_hop_by_hop(self):
-        """ Hop-by-hop header test """
-
-        p = (Ether(src=self.pg0.remote_mac,
-                   dst=self.pg0.local_mac) /
-             IPv6(src=self.pg0.remote_ip6, dst=self.pg0.local_ip6) /
-             IPv6ExtHdrHopByHop() /
-             inet6.UDP(sport=1234, dport=1234) /
-             Raw(b'\xa5' * 100))
+        """Hop-by-hop header test"""
+
+        p = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IPv6(src=self.pg0.remote_ip6, dst=self.pg0.local_ip6)
+            / IPv6ExtHdrHopByHop()
+            / inet6.UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
 
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
 
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
@@ -2663,7 +2875,7 @@ class TestIP6Input(VppTestCase):
 
 
 class TestIP6Replace(VppTestCase):
 
 
 class TestIP6Replace(VppTestCase):
-    """ IPv6 Table Replace """
+    """IPv6 Table Replace"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -2685,8 +2897,7 @@ class TestIP6Replace(VppTestCase):
             i.admin_up()
             i.config_ip6()
             i.generate_remote_hosts(2)
             i.admin_up()
             i.config_ip6()
             i.generate_remote_hosts(2)
-            self.tables.append(VppIpTable(self, table_id,
-                                          True).add_vpp_config())
+            self.tables.append(VppIpTable(self, table_id, True).add_vpp_config())
             table_id += 1
 
     def tearDown(self):
             table_id += 1
 
     def tearDown(self):
@@ -2696,7 +2907,7 @@ class TestIP6Replace(VppTestCase):
             i.unconfig_ip6()
 
     def test_replace(self):
             i.unconfig_ip6()
 
     def test_replace(self):
-        """ IP Table Replace """
+        """IP Table Replace"""
 
         MRouteItfFlags = VppEnum.vl_api_mfib_itf_flags_t
         MRouteEntryFlags = VppEnum.vl_api_mfib_entry_flags_t
 
         MRouteItfFlags = VppEnum.vl_api_mfib_itf_flags_t
         MRouteEntryFlags = VppEnum.vl_api_mfib_entry_flags_t
@@ -2713,31 +2924,50 @@ class TestIP6Replace(VppTestCase):
         for ii, t in enumerate(self.tables):
             for jj in range(1, N_ROUTES):
                 uni = VppIpRoute(
         for ii, t in enumerate(self.tables):
             for jj in range(1, N_ROUTES):
                 uni = VppIpRoute(
-                    self, "2001::%d" % jj if jj != 0 else "2001::", 128,
-                    [VppRoutePath(links[ii].remote_hosts[0].ip6,
-                                  links[ii].sw_if_index),
-                     VppRoutePath(links[ii].remote_hosts[1].ip6,
-                                  links[ii].sw_if_index)],
-                    table_id=t.table_id).add_vpp_config()
+                    self,
+                    "2001::%d" % jj if jj != 0 else "2001::",
+                    128,
+                    [
+                        VppRoutePath(
+                            links[ii].remote_hosts[0].ip6, links[ii].sw_if_index
+                        ),
+                        VppRoutePath(
+                            links[ii].remote_hosts[1].ip6, links[ii].sw_if_index
+                        ),
+                    ],
+                    table_id=t.table_id,
+                ).add_vpp_config()
                 multi = VppIpMRoute(
                 multi = VppIpMRoute(
-                    self, "::",
-                    "ff:2001::%d" % jj, 128,
+                    self,
+                    "::",
+                    "ff:2001::%d" % jj,
+                    128,
                     MRouteEntryFlags.MFIB_API_ENTRY_FLAG_NONE,
                     MRouteEntryFlags.MFIB_API_ENTRY_FLAG_NONE,
-                    [VppMRoutePath(self.pg0.sw_if_index,
-                                   MRouteItfFlags.MFIB_API_ITF_FLAG_ACCEPT,
-                                   proto=FibPathProto.FIB_PATH_NH_PROTO_IP6),
-                     VppMRoutePath(self.pg1.sw_if_index,
-                                   MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD,
-                                   proto=FibPathProto.FIB_PATH_NH_PROTO_IP6),
-                     VppMRoutePath(self.pg2.sw_if_index,
-                                   MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD,
-                                   proto=FibPathProto.FIB_PATH_NH_PROTO_IP6),
-                     VppMRoutePath(self.pg3.sw_if_index,
-                                   MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD,
-                                   proto=FibPathProto.FIB_PATH_NH_PROTO_IP6)],
-                    table_id=t.table_id).add_vpp_config()
-                routes[ii].append({'uni': uni,
-                                   'multi': multi})
+                    [
+                        VppMRoutePath(
+                            self.pg0.sw_if_index,
+                            MRouteItfFlags.MFIB_API_ITF_FLAG_ACCEPT,
+                            proto=FibPathProto.FIB_PATH_NH_PROTO_IP6,
+                        ),
+                        VppMRoutePath(
+                            self.pg1.sw_if_index,
+                            MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD,
+                            proto=FibPathProto.FIB_PATH_NH_PROTO_IP6,
+                        ),
+                        VppMRoutePath(
+                            self.pg2.sw_if_index,
+                            MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD,
+                            proto=FibPathProto.FIB_PATH_NH_PROTO_IP6,
+                        ),
+                        VppMRoutePath(
+                            self.pg3.sw_if_index,
+                            MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD,
+                            proto=FibPathProto.FIB_PATH_NH_PROTO_IP6,
+                        ),
+                    ],
+                    table_id=t.table_id,
+                ).add_vpp_config()
+                routes[ii].append({"uni": uni, "multi": multi})
 
         #
         # replace the tables a few times
 
         #
         # replace the tables a few times
@@ -2752,14 +2982,14 @@ class TestIP6Replace(VppTestCase):
                 dump = t.dump()
                 mdump = t.mdump()
                 for r in routes[ii]:
                 dump = t.dump()
                 mdump = t.mdump()
                 for r in routes[ii]:
-                    self.assertTrue(find_route_in_dump(dump, r['uni'], t))
-                    self.assertTrue(find_mroute_in_dump(mdump, r['multi'], t))
+                    self.assertTrue(find_route_in_dump(dump, r["uni"], t))
+                    self.assertTrue(find_mroute_in_dump(mdump, r["multi"], t))
 
             # redownload the even numbered routes
             for ii, t in enumerate(self.tables):
                 for jj in range(0, N_ROUTES, 2):
 
             # redownload the even numbered routes
             for ii, t in enumerate(self.tables):
                 for jj in range(0, N_ROUTES, 2):
-                    routes[ii][jj]['uni'].add_vpp_config()
-                    routes[ii][jj]['multi'].add_vpp_config()
+                    routes[ii][jj]["uni"].add_vpp_config()
+                    routes[ii][jj]["multi"].add_vpp_config()
 
             # signal each table converged
             for t in self.tables:
 
             # signal each table converged
             for t in self.tables:
@@ -2770,29 +3000,29 @@ class TestIP6Replace(VppTestCase):
                 dump = t.dump()
                 mdump = t.mdump()
                 for jj in range(0, N_ROUTES, 2):
                 dump = t.dump()
                 mdump = t.mdump()
                 for jj in range(0, N_ROUTES, 2):
-                    self.assertTrue(find_route_in_dump(
-                        dump, routes[ii][jj]['uni'], t))
-                    self.assertTrue(find_mroute_in_dump(
-                        mdump, routes[ii][jj]['multi'], t))
+                    self.assertTrue(find_route_in_dump(dump, routes[ii][jj]["uni"], t))
+                    self.assertTrue(
+                        find_mroute_in_dump(mdump, routes[ii][jj]["multi"], t)
+                    )
                 for jj in range(1, N_ROUTES - 1, 2):
                 for jj in range(1, N_ROUTES - 1, 2):
-                    self.assertFalse(find_route_in_dump(
-                        dump, routes[ii][jj]['uni'], t))
-                    self.assertFalse(find_mroute_in_dump(
-                        mdump, routes[ii][jj]['multi'], t))
+                    self.assertFalse(find_route_in_dump(dump, routes[ii][jj]["uni"], t))
+                    self.assertFalse(
+                        find_mroute_in_dump(mdump, routes[ii][jj]["multi"], t)
+                    )
 
             # reload all the routes
             for ii, t in enumerate(self.tables):
                 for r in routes[ii]:
 
             # reload all the routes
             for ii, t in enumerate(self.tables):
                 for r in routes[ii]:
-                    r['uni'].add_vpp_config()
-                    r['multi'].add_vpp_config()
+                    r["uni"].add_vpp_config()
+                    r["multi"].add_vpp_config()
 
             # all the routes are still there
             for ii, t in enumerate(self.tables):
                 dump = t.dump()
                 mdump = t.mdump()
                 for r in routes[ii]:
 
             # all the routes are still there
             for ii, t in enumerate(self.tables):
                 dump = t.dump()
                 mdump = t.mdump()
                 for r in routes[ii]:
-                    self.assertTrue(find_route_in_dump(dump, r['uni'], t))
-                    self.assertTrue(find_mroute_in_dump(mdump, r['multi'], t))
+                    self.assertTrue(find_route_in_dump(dump, r["uni"], t))
+                    self.assertTrue(find_mroute_in_dump(mdump, r["multi"], t))
 
         #
         # finally flush the tables for good measure
 
         #
         # finally flush the tables for good measure
@@ -2804,7 +3034,7 @@ class TestIP6Replace(VppTestCase):
 
 
 class TestIP6AddrReplace(VppTestCase):
 
 
 class TestIP6AddrReplace(VppTestCase):
-    """ IPv6 Interface Address Replace """
+    """IPv6 Interface Address Replace"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -2831,7 +3061,7 @@ class TestIP6AddrReplace(VppTestCase):
         return len(self.vapi.ip_address_dump(intf.sw_if_index, True))
 
     def test_replace(self):
         return len(self.vapi.ip_address_dump(intf.sw_if_index, True))
 
     def test_replace(self):
-        """ IP interface address replace """
+        """IP interface address replace"""
 
         intf_pfxs = [[], [], [], []]
 
 
         intf_pfxs = [[], [], [], []]
 
@@ -2915,8 +3145,7 @@ class TestIP6AddrReplace(VppTestCase):
         for intf in self.pg_interfaces:
             # 2001:18:x::1/64
             addr = "2001:18:%d::1" % intf.sw_if_index
         for intf in self.pg_interfaces:
             # 2001:18:x::1/64
             addr = "2001:18:%d::1" % intf.sw_if_index
-            pfxs.append(VppIpInterfaceAddress(self, intf, addr,
-                                              64).add_vpp_config())
+            pfxs.append(VppIpInterfaceAddress(self, intf, addr, 64).add_vpp_config())
 
         self.vapi.sw_interface_address_replace_end()
 
 
         self.vapi.sw_interface_address_replace_end()
 
@@ -2951,8 +3180,7 @@ class TestIP6AddrReplace(VppTestCase):
         for intf in self.pg_interfaces:
             # 2001:18:x::1/64
             addr = "2001:18:%d::1" % (intf.sw_if_index + 1)
         for intf in self.pg_interfaces:
             # 2001:18:x::1/64
             addr = "2001:18:%d::1" % (intf.sw_if_index + 1)
-            pfxs.append(VppIpInterfaceAddress(self, intf,
-                                              addr, 64).add_vpp_config())
+            pfxs.append(VppIpInterfaceAddress(self, intf, addr, 64).add_vpp_config())
 
         self.vapi.sw_interface_address_replace_end()
 
 
         self.vapi.sw_interface_address_replace_end()
 
@@ -2965,7 +3193,7 @@ class TestIP6AddrReplace(VppTestCase):
 
 
 class TestIP6LinkLocal(VppTestCase):
 
 
 class TestIP6LinkLocal(VppTestCase):
-    """ IPv6 Link Local """
+    """IPv6 Link Local"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -2989,7 +3217,7 @@ class TestIP6LinkLocal(VppTestCase):
             i.admin_down()
 
     def test_ip6_ll(self):
             i.admin_down()
 
     def test_ip6_ll(self):
-        """ IPv6 Link Local """
+        """IPv6 Link Local"""
 
         #
         # two APIs to add a link local address.
 
         #
         # two APIs to add a link local address.
@@ -3004,35 +3232,33 @@ class TestIP6LinkLocal(VppTestCase):
         ll2 = "fe80:2::2"
         ll3 = "fe80:3::3"
 
         ll2 = "fe80:2::2"
         ll3 = "fe80:3::3"
 
-        VppNeighbor(self,
-                    self.pg0.sw_if_index,
-                    self.pg0.remote_mac,
-                    ll2).add_vpp_config()
+        VppNeighbor(
+            self, self.pg0.sw_if_index, self.pg0.remote_mac, ll2
+        ).add_vpp_config()
 
         VppIpInterfaceAddress(self, self.pg0, ll1, 128).add_vpp_config()
 
         #
         # should be able to ping the ll
         #
 
         VppIpInterfaceAddress(self, self.pg0, ll1, 128).add_vpp_config()
 
         #
         # should be able to ping the ll
         #
-        p_echo_request_1 = (Ether(src=self.pg0.remote_mac,
-                                  dst=self.pg0.local_mac) /
-                            IPv6(src=ll2,
-                                 dst=ll1) /
-                            ICMPv6EchoRequest())
+        p_echo_request_1 = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IPv6(src=ll2, dst=ll1)
+            / ICMPv6EchoRequest()
+        )
 
         self.send_and_expect(self.pg0, [p_echo_request_1], self.pg0)
 
         #
         # change the link-local on pg0
         #
 
         self.send_and_expect(self.pg0, [p_echo_request_1], self.pg0)
 
         #
         # change the link-local on pg0
         #
-        v_ll3 = VppIpInterfaceAddress(self, self.pg0,
-                                      ll3, 128).add_vpp_config()
+        v_ll3 = VppIpInterfaceAddress(self, self.pg0, ll3, 128).add_vpp_config()
 
 
-        p_echo_request_3 = (Ether(src=self.pg0.remote_mac,
-                                  dst=self.pg0.local_mac) /
-                            IPv6(src=ll2,
-                                 dst=ll3) /
-                            ICMPv6EchoRequest())
+        p_echo_request_3 = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IPv6(src=ll2, dst=ll3)
+            / ICMPv6EchoRequest()
+        )
 
         self.send_and_expect(self.pg0, [p_echo_request_3], self.pg0)
 
 
         self.send_and_expect(self.pg0, [p_echo_request_3], self.pg0)
 
@@ -3057,13 +3283,13 @@ class TestIP6LinkLocal(VppTestCase):
         self.send_and_expect(self.pg1, [p_echo_request_3], self.pg1)
 
     def test_ip6_ll_p2p(self):
         self.send_and_expect(self.pg1, [p_echo_request_3], self.pg1)
 
     def test_ip6_ll_p2p(self):
-        """ IPv6 Link Local P2P (GRE)"""
+        """IPv6 Link Local P2P (GRE)"""
 
         self.pg0.config_ip4()
         self.pg0.resolve_arp()
 
         self.pg0.config_ip4()
         self.pg0.resolve_arp()
-        gre_if = VppGreInterface(self,
-                                 self.pg0.local_ip4,
-                                 self.pg0.remote_ip4).add_vpp_config()
+        gre_if = VppGreInterface(
+            self, self.pg0.local_ip4, self.pg0.remote_ip4
+        ).add_vpp_config()
         gre_if.admin_up()
 
         ll1 = "fe80:1::1"
         gre_if.admin_up()
 
         ll1 = "fe80:1::1"
@@ -3073,20 +3299,20 @@ class TestIP6LinkLocal(VppTestCase):
 
         self.logger.info(self.vapi.cli("sh ip6-ll gre0 fe80:2::2"))
 
 
         self.logger.info(self.vapi.cli("sh ip6-ll gre0 fe80:2::2"))
 
-        p_echo_request_1 = (Ether(src=self.pg0.remote_mac,
-                                  dst=self.pg0.local_mac) /
-                            IP(src=self.pg0.remote_ip4,
-                               dst=self.pg0.local_ip4) /
-                            GRE() /
-                            IPv6(src=ll2, dst=ll1) /
-                            ICMPv6EchoRequest())
+        p_echo_request_1 = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg0.local_ip4)
+            / GRE()
+            / IPv6(src=ll2, dst=ll1)
+            / ICMPv6EchoRequest()
+        )
         self.send_and_expect(self.pg0, [p_echo_request_1], self.pg0)
 
         self.pg0.unconfig_ip4()
         gre_if.remove_vpp_config()
 
     def test_ip6_ll_p2mp(self):
         self.send_and_expect(self.pg0, [p_echo_request_1], self.pg0)
 
         self.pg0.unconfig_ip4()
         gre_if.remove_vpp_config()
 
     def test_ip6_ll_p2mp(self):
-        """ IPv6 Link Local P2MP (GRE)"""
+        """IPv6 Link Local P2MP (GRE)"""
 
         self.pg0.config_ip4()
         self.pg0.resolve_arp()
 
         self.pg0.config_ip4()
         self.pg0.resolve_arp()
@@ -3095,8 +3321,8 @@ class TestIP6LinkLocal(VppTestCase):
             self,
             self.pg0.local_ip4,
             "0.0.0.0",
             self,
             self.pg0.local_ip4,
             "0.0.0.0",
-            mode=(VppEnum.vl_api_tunnel_mode_t.
-                  TUNNEL_API_MODE_MP)).add_vpp_config()
+            mode=(VppEnum.vl_api_tunnel_mode_t.TUNNEL_API_MODE_MP),
+        ).add_vpp_config()
         gre_if.admin_up()
 
         ll1 = "fe80:1::1"
         gre_if.admin_up()
 
         ll1 = "fe80:1::1"
@@ -3104,13 +3330,13 @@ class TestIP6LinkLocal(VppTestCase):
 
         VppIpInterfaceAddress(self, gre_if, ll1, 128).add_vpp_config()
 
 
         VppIpInterfaceAddress(self, gre_if, ll1, 128).add_vpp_config()
 
-        p_echo_request_1 = (Ether(src=self.pg0.remote_mac,
-                                  dst=self.pg0.local_mac) /
-                            IP(src=self.pg0.remote_ip4,
-                               dst=self.pg0.local_ip4) /
-                            GRE() /
-                            IPv6(src=ll2, dst=ll1) /
-                            ICMPv6EchoRequest())
+        p_echo_request_1 = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg0.local_ip4)
+            / GRE()
+            / IPv6(src=ll2, dst=ll1)
+            / ICMPv6EchoRequest()
+        )
 
         # no route back at this point
         self.send_and_assert_no_replies(self.pg0, [p_echo_request_1])
 
         # no route back at this point
         self.send_and_assert_no_replies(self.pg0, [p_echo_request_1])
@@ -3127,7 +3353,7 @@ class TestIP6LinkLocal(VppTestCase):
 
 
 class TestIPv6PathMTU(VppTestCase):
 
 
 class TestIPv6PathMTU(VppTestCase):
-    """ IPv6 Path MTU """
+    """IPv6 Path MTU"""
 
     def setUp(self):
         super(TestIPv6PathMTU, self).setUp()
 
     def setUp(self):
         super(TestIPv6PathMTU, self).setUp()
@@ -3147,7 +3373,7 @@ class TestIPv6PathMTU(VppTestCase):
             i.admin_down()
 
     def test_path_mtu_local(self):
             i.admin_down()
 
     def test_path_mtu_local(self):
-        """ Path MTU for attached neighbour """
+        """Path MTU for attached neighbour"""
 
         self.vapi.cli("set log class ip level debug")
         #
 
         self.vapi.cli("set log class ip level debug")
         #
@@ -3161,41 +3387,37 @@ class TestIPv6PathMTU(VppTestCase):
         # packets post encap
         #
         tun = VppIpIpTunInterface(
         # packets post encap
         #
         tun = VppIpIpTunInterface(
-            self,
-            self.pg1,
-            self.pg1.local_ip6,
-            self.pg1.remote_ip6)
+            self, self.pg1, self.pg1.local_ip6, self.pg1.remote_ip6
+        )
         tun.add_vpp_config()
         tun.admin_up()
         tun.config_ip6()
 
         # set the interface MTU to a reasonable value
         tun.add_vpp_config()
         tun.admin_up()
         tun.config_ip6()
 
         # set the interface MTU to a reasonable value
-        self.vapi.sw_interface_set_mtu(self.pg1.sw_if_index,
-                                       [2800, 0, 0, 0])
-
-        p_6k = (Ether(dst=self.pg0.local_mac,
-                      src=self.pg0.remote_mac) /
-                IPv6(src=self.pg0.remote_ip6,
-                     dst=tun.remote_ip6) /
-                UDP(sport=1234, dport=5678) /
-                Raw(b'0xa' * 2000))
-        p_2k = (Ether(dst=self.pg0.local_mac,
-                      src=self.pg0.remote_mac) /
-                IPv6(src=self.pg0.remote_ip6,
-                     dst=tun.remote_ip6) /
-                UDP(sport=1234, dport=5678) /
-                Raw(b'0xa' * 1000))
-        p_1k = (Ether(dst=self.pg0.local_mac,
-                      src=self.pg0.remote_mac) /
-                IPv6(src=self.pg0.remote_ip6,
-                     dst=tun.remote_ip6) /
-                UDP(sport=1234, dport=5678) /
-                Raw(b'0xa' * 600))
-
-        nbr = VppNeighbor(self,
-                          self.pg1.sw_if_index,
-                          self.pg1.remote_mac,
-                          self.pg1.remote_ip6).add_vpp_config()
+        self.vapi.sw_interface_set_mtu(self.pg1.sw_if_index, [2800, 0, 0, 0])
+
+        p_6k = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IPv6(src=self.pg0.remote_ip6, dst=tun.remote_ip6)
+            / UDP(sport=1234, dport=5678)
+            / Raw(b"0xa" * 2000)
+        )
+        p_2k = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IPv6(src=self.pg0.remote_ip6, dst=tun.remote_ip6)
+            / UDP(sport=1234, dport=5678)
+            / Raw(b"0xa" * 1000)
+        )
+        p_1k = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IPv6(src=self.pg0.remote_ip6, dst=tun.remote_ip6)
+            / UDP(sport=1234, dport=5678)
+            / Raw(b"0xa" * 600)
+        )
+
+        nbr = VppNeighbor(
+            self, self.pg1.sw_if_index, self.pg1.remote_mac, self.pg1.remote_ip6
+        ).add_vpp_config()
 
         # this is now the interface MTU frags
         self.send_and_expect(self.pg0, [p_6k], self.pg1, n_rx=4)
 
         # this is now the interface MTU frags
         self.send_and_expect(self.pg0, [p_6k], self.pg1, n_rx=4)
@@ -3228,28 +3450,25 @@ class TestIPv6PathMTU(VppTestCase):
 
         # raise the interface's MTU
         # should still use that of the path
 
         # raise the interface's MTU
         # should still use that of the path
-        self.vapi.sw_interface_set_mtu(self.pg1.sw_if_index,
-                                       [2000, 0, 0, 0])
+        self.vapi.sw_interface_set_mtu(self.pg1.sw_if_index, [2000, 0, 0, 0])
         self.send_and_expect(self.pg0, [p_2k], self.pg1, n_rx=3)
         self.send_and_expect(self.pg0, [p_1k], self.pg1, n_rx=2)
 
         # set path high and interface low
         pmtu.modify(2000)
         self.send_and_expect(self.pg0, [p_2k], self.pg1, n_rx=3)
         self.send_and_expect(self.pg0, [p_1k], self.pg1, n_rx=2)
 
         # set path high and interface low
         pmtu.modify(2000)
-        self.vapi.sw_interface_set_mtu(self.pg1.sw_if_index,
-                                       [1300, 0, 0, 0])
+        self.vapi.sw_interface_set_mtu(self.pg1.sw_if_index, [1300, 0, 0, 0])
         self.send_and_expect(self.pg0, [p_2k], self.pg1, n_rx=3)
         self.send_and_expect(self.pg0, [p_1k], self.pg1, n_rx=2)
 
         # remove the path MTU
         self.send_and_expect(self.pg0, [p_2k], self.pg1, n_rx=3)
         self.send_and_expect(self.pg0, [p_1k], self.pg1, n_rx=2)
 
         # remove the path MTU
-        self.vapi.sw_interface_set_mtu(self.pg1.sw_if_index,
-                                       [2800, 0, 0, 0])
+        self.vapi.sw_interface_set_mtu(self.pg1.sw_if_index, [2800, 0, 0, 0])
         pmtu.modify(0)
 
         self.send_and_expect(self.pg0, [p_2k], self.pg1, n_rx=2)
         self.send_and_expect(self.pg0, [p_1k], self.pg1)
 
     def test_path_mtu_remote(self):
         pmtu.modify(0)
 
         self.send_and_expect(self.pg0, [p_2k], self.pg1, n_rx=2)
         self.send_and_expect(self.pg0, [p_1k], self.pg1)
 
     def test_path_mtu_remote(self):
-        """ Path MTU for remote neighbour """
+        """Path MTU for remote neighbour"""
 
         self.vapi.cli("set log class ip level debug")
         #
 
         self.vapi.cli("set log class ip level debug")
         #
@@ -3260,44 +3479,37 @@ class TestIPv6PathMTU(VppTestCase):
         tun_dst = "2001::1"
 
         route = VppIpRoute(
         tun_dst = "2001::1"
 
         route = VppIpRoute(
-            self, tun_dst, 64,
-            [VppRoutePath(self.pg1.remote_ip6,
-                          self.pg1.sw_if_index)]).add_vpp_config()
+            self, tun_dst, 64, [VppRoutePath(self.pg1.remote_ip6, self.pg1.sw_if_index)]
+        ).add_vpp_config()
 
         #
         # IPv6 will only frag locally generated packets, so use tunnelled
         # packets post encap
         #
 
         #
         # IPv6 will only frag locally generated packets, so use tunnelled
         # packets post encap
         #
-        tun = VppIpIpTunInterface(
-            self,
-            self.pg1,
-            self.pg1.local_ip6,
-            tun_dst)
+        tun = VppIpIpTunInterface(self, self.pg1, self.pg1.local_ip6, tun_dst)
         tun.add_vpp_config()
         tun.admin_up()
         tun.config_ip6()
 
         # set the interface MTU to a reasonable value
         tun.add_vpp_config()
         tun.admin_up()
         tun.config_ip6()
 
         # set the interface MTU to a reasonable value
-        self.vapi.sw_interface_set_mtu(self.pg1.sw_if_index,
-                                       [2800, 0, 0, 0])
-
-        p_2k = (Ether(dst=self.pg0.local_mac,
-                      src=self.pg0.remote_mac) /
-                IPv6(src=self.pg0.remote_ip6,
-                     dst=tun.remote_ip6) /
-                UDP(sport=1234, dport=5678) /
-                Raw(b'0xa' * 1000))
-        p_1k = (Ether(dst=self.pg0.local_mac,
-                      src=self.pg0.remote_mac) /
-                IPv6(src=self.pg0.remote_ip6,
-                     dst=tun.remote_ip6) /
-                UDP(sport=1234, dport=5678) /
-                Raw(b'0xa' * 600))
-
-        nbr = VppNeighbor(self,
-                          self.pg1.sw_if_index,
-                          self.pg1.remote_mac,
-                          self.pg1.remote_ip6).add_vpp_config()
+        self.vapi.sw_interface_set_mtu(self.pg1.sw_if_index, [2800, 0, 0, 0])
+
+        p_2k = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IPv6(src=self.pg0.remote_ip6, dst=tun.remote_ip6)
+            / UDP(sport=1234, dport=5678)
+            / Raw(b"0xa" * 1000)
+        )
+        p_1k = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IPv6(src=self.pg0.remote_ip6, dst=tun.remote_ip6)
+            / UDP(sport=1234, dport=5678)
+            / Raw(b"0xa" * 600)
+        )
+
+        nbr = VppNeighbor(
+            self, self.pg1.sw_if_index, self.pg1.remote_mac, self.pg1.remote_ip6
+        ).add_vpp_config()
 
         # this is now the interface MTU frags
         self.send_and_expect(self.pg0, [p_2k], self.pg1, n_rx=2)
 
         # this is now the interface MTU frags
         self.send_and_expect(self.pg0, [p_2k], self.pg1, n_rx=2)
@@ -3328,44 +3540,38 @@ class TestIPv6PathMTU(VppTestCase):
 
         # raise the interface's MTU
         # should still use that of the path
 
         # raise the interface's MTU
         # should still use that of the path
-        self.vapi.sw_interface_set_mtu(self.pg1.sw_if_index,
-                                       [2000, 0, 0, 0])
+        self.vapi.sw_interface_set_mtu(self.pg1.sw_if_index, [2000, 0, 0, 0])
         self.send_and_expect(self.pg0, [p_2k], self.pg1, n_rx=3)
         self.send_and_expect(self.pg0, [p_1k], self.pg1, n_rx=2)
 
         # turn the tun_dst into an attached neighbour
         self.send_and_expect(self.pg0, [p_2k], self.pg1, n_rx=3)
         self.send_and_expect(self.pg0, [p_1k], self.pg1, n_rx=2)
 
         # turn the tun_dst into an attached neighbour
-        route.modify([VppRoutePath("::",
-                                   self.pg1.sw_if_index)])
-        nbr2 = VppNeighbor(self,
-                           self.pg1.sw_if_index,
-                           self.pg1.remote_mac,
-                           tun_dst).add_vpp_config()
+        route.modify([VppRoutePath("::", self.pg1.sw_if_index)])
+        nbr2 = VppNeighbor(
+            self, self.pg1.sw_if_index, self.pg1.remote_mac, tun_dst
+        ).add_vpp_config()
 
         self.send_and_expect(self.pg0, [p_2k], self.pg1, n_rx=3)
         self.send_and_expect(self.pg0, [p_1k], self.pg1, n_rx=2)
 
         # add back to not attached
         nbr2.remove_vpp_config()
 
         self.send_and_expect(self.pg0, [p_2k], self.pg1, n_rx=3)
         self.send_and_expect(self.pg0, [p_1k], self.pg1, n_rx=2)
 
         # add back to not attached
         nbr2.remove_vpp_config()
-        route.modify([VppRoutePath(self.pg1.remote_ip6,
-                                   self.pg1.sw_if_index)])
+        route.modify([VppRoutePath(self.pg1.remote_ip6, self.pg1.sw_if_index)])
 
         # set path high and interface low
         pmtu.modify(2000)
 
         # set path high and interface low
         pmtu.modify(2000)
-        self.vapi.sw_interface_set_mtu(self.pg1.sw_if_index,
-                                       [1300, 0, 0, 0])
+        self.vapi.sw_interface_set_mtu(self.pg1.sw_if_index, [1300, 0, 0, 0])
         self.send_and_expect(self.pg0, [p_2k], self.pg1, n_rx=3)
         self.send_and_expect(self.pg0, [p_1k], self.pg1, n_rx=2)
 
         # remove the path MTU
         self.send_and_expect(self.pg0, [p_2k], self.pg1, n_rx=3)
         self.send_and_expect(self.pg0, [p_1k], self.pg1, n_rx=2)
 
         # remove the path MTU
-        self.vapi.sw_interface_set_mtu(self.pg1.sw_if_index,
-                                       [2800, 0, 0, 0])
+        self.vapi.sw_interface_set_mtu(self.pg1.sw_if_index, [2800, 0, 0, 0])
         pmtu.remove_vpp_config()
         self.send_and_expect(self.pg0, [p_2k], self.pg1, n_rx=2)
         self.send_and_expect(self.pg0, [p_1k], self.pg1)
 
 
 class TestIPFibSource(VppTestCase):
         pmtu.remove_vpp_config()
         self.send_and_expect(self.pg0, [p_2k], self.pg1, n_rx=2)
         self.send_and_expect(self.pg0, [p_1k], self.pg1)
 
 
 class TestIPFibSource(VppTestCase):
-    """ IPv6 Table FibSource """
+    """IPv6 Table FibSource"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -3394,7 +3600,7 @@ class TestIPFibSource(VppTestCase):
             i.unconfig_ip4()
 
     def test_fib_source(self):
             i.unconfig_ip4()
 
     def test_fib_source(self):
-        """ IP Table FibSource """
+        """IP Table FibSource"""
 
         routes = self.vapi.ip_route_v2_dump(0, True)
 
 
         routes = self.vapi.ip_route_v2_dump(0, True)
 
@@ -3404,15 +3610,15 @@ class TestIPFibSource(VppTestCase):
         # dump all the sources in the FIB
         sources = self.vapi.fib_source_dump()
         for source in sources:
         # dump all the sources in the FIB
         sources = self.vapi.fib_source_dump()
         for source in sources:
-            if (source.src.name == "API"):
+            if source.src.name == "API":
                 api_source = source.src
                 api_source = source.src
-            if (source.src.name == "interface"):
+            if source.src.name == "interface":
                 intf_source = source.src
                 intf_source = source.src
-            if (source.src.name == "adjacency"):
+            if source.src.name == "adjacency":
                 adj_source = source.src
                 adj_source = source.src
-            if (source.src.name == "special"):
+            if source.src.name == "special":
                 special_source = source.src
                 special_source = source.src
-            if (source.src.name == "default-route"):
+            if source.src.name == "default-route":
                 dr_source = source.src
 
         # dump the individual route types
                 dr_source = source.src
 
         # dump the individual route types
@@ -3426,37 +3632,43 @@ class TestIPFibSource(VppTestCase):
         self.assertEqual(len(routes), 1)
 
         # add a new soure that'a better than the API
         self.assertEqual(len(routes), 1)
 
         # add a new soure that'a better than the API
-        self.vapi.fib_source_add(src={'name': "bgp",
-                                      "priority": api_source.priority - 1})
+        self.vapi.fib_source_add(
+            src={"name": "bgp", "priority": api_source.priority - 1}
+        )
 
         # dump all the sources to check our new one is there
         sources = self.vapi.fib_source_dump()
 
         for source in sources:
 
         # dump all the sources to check our new one is there
         sources = self.vapi.fib_source_dump()
 
         for source in sources:
-            if (source.src.name == "bgp"):
+            if source.src.name == "bgp":
                 bgp_source = source.src
 
         self.assertTrue(bgp_source)
                 bgp_source = source.src
 
         self.assertTrue(bgp_source)
-        self.assertEqual(bgp_source.priority,
-                         api_source.priority - 1)
+        self.assertEqual(bgp_source.priority, api_source.priority - 1)
 
         # add a route with the default API source
         r1 = VppIpRouteV2(
 
         # add a route with the default API source
         r1 = VppIpRouteV2(
-            self, "2001::1", 128,
-            [VppRoutePath(self.pg0.remote_ip6,
-                          self.pg0.sw_if_index)]).add_vpp_config()
+            self,
+            "2001::1",
+            128,
+            [VppRoutePath(self.pg0.remote_ip6, self.pg0.sw_if_index)],
+        ).add_vpp_config()
 
 
-        r2 = VppIpRouteV2(self, "2001::1", 128,
-                          [VppRoutePath(self.pg1.remote_ip6,
-                                        self.pg1.sw_if_index)],
-                          src=bgp_source.id).add_vpp_config()
+        r2 = VppIpRouteV2(
+            self,
+            "2001::1",
+            128,
+            [VppRoutePath(self.pg1.remote_ip6, self.pg1.sw_if_index)],
+            src=bgp_source.id,
+        ).add_vpp_config()
 
         # ensure the BGP source takes priority
 
         # ensure the BGP source takes priority
-        p = (Ether(src=self.pg0.remote_mac,
-                   dst=self.pg0.local_mac) /
-             IPv6(src=self.pg0.remote_ip6, dst="2001::1") /
-             inet6.UDP(sport=1234, dport=1234) /
-             Raw(b'\xa5' * 100))
+        p = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IPv6(src=self.pg0.remote_ip6, dst="2001::1")
+            / inet6.UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
 
         self.send_and_expect(self.pg0, [p], self.pg1)
 
 
         self.send_and_expect(self.pg0, [p], self.pg1)
 
@@ -3467,7 +3679,7 @@ class TestIPFibSource(VppTestCase):
 
 
 class TestIPxAF(VppTestCase):
 
 
 class TestIPxAF(VppTestCase):
-    """ IP cross AF """
+    """IP cross AF"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -3497,20 +3709,23 @@ class TestIPxAF(VppTestCase):
             i.unconfig_ip6()
 
     def test_x_af(self):
             i.unconfig_ip6()
 
     def test_x_af(self):
-        """ Cross AF routing """
+        """Cross AF routing"""
 
         N_PKTS = 63
         # a v4 route via a v6 attached next-hop
         VppIpRoute(
 
         N_PKTS = 63
         # a v4 route via a v6 attached next-hop
         VppIpRoute(
-            self, "1.1.1.1", 32,
-            [VppRoutePath(self.pg1.remote_ip6,
-                          self.pg1.sw_if_index)]).add_vpp_config()
-
-        p = (Ether(src=self.pg0.remote_mac,
-                   dst=self.pg0.local_mac) /
-             IP(src=self.pg0.remote_ip4, dst="1.1.1.1") /
-             UDP(sport=1234, dport=1234) /
-             Raw(b'\xa5' * 100))
+            self,
+            "1.1.1.1",
+            32,
+            [VppRoutePath(self.pg1.remote_ip6, self.pg1.sw_if_index)],
+        ).add_vpp_config()
+
+        p = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg0.remote_ip4, dst="1.1.1.1")
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
         rxs = self.send_and_expect(self.pg0, p * N_PKTS, self.pg1)
 
         for rx in rxs:
         rxs = self.send_and_expect(self.pg0, p * N_PKTS, self.pg1)
 
         for rx in rxs:
@@ -3518,15 +3733,18 @@ class TestIPxAF(VppTestCase):
 
         # a v6 route via a v4 attached next-hop
         VppIpRoute(
 
         # a v6 route via a v4 attached next-hop
         VppIpRoute(
-            self, "2001::1", 128,
-            [VppRoutePath(self.pg1.remote_ip4,
-                          self.pg1.sw_if_index)]).add_vpp_config()
-
-        p = (Ether(src=self.pg0.remote_mac,
-                   dst=self.pg0.local_mac) /
-             IPv6(src=self.pg0.remote_ip6, dst="2001::1") /
-             UDP(sport=1234, dport=1234) /
-             Raw(b'\xa5' * 100))
+            self,
+            "2001::1",
+            128,
+            [VppRoutePath(self.pg1.remote_ip4, self.pg1.sw_if_index)],
+        ).add_vpp_config()
+
+        p = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IPv6(src=self.pg0.remote_ip6, dst="2001::1")
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
         rxs = self.send_and_expect(self.pg0, p * N_PKTS, self.pg1)
 
         for rx in rxs:
         rxs = self.send_and_expect(self.pg0, p * N_PKTS, self.pg1)
 
         for rx in rxs:
@@ -3534,56 +3752,56 @@ class TestIPxAF(VppTestCase):
 
         # a recursive v4 route via a v6 next-hop (from above)
         VppIpRoute(
 
         # a recursive v4 route via a v6 next-hop (from above)
         VppIpRoute(
-            self, "2.2.2.2", 32,
-            [VppRoutePath("2001::1",
-                          0xffffffff)]).add_vpp_config()
-
-        p = (Ether(src=self.pg0.remote_mac,
-                   dst=self.pg0.local_mac) /
-             IP(src=self.pg0.remote_ip4, dst="2.2.2.2") /
-             UDP(sport=1234, dport=1234) /
-             Raw(b'\xa5' * 100))
+            self, "2.2.2.2", 32, [VppRoutePath("2001::1", 0xFFFFFFFF)]
+        ).add_vpp_config()
+
+        p = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg0.remote_ip4, dst="2.2.2.2")
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
         rxs = self.send_and_expect(self.pg0, p * N_PKTS, self.pg1)
 
         # a recursive v4 route via a v6 next-hop
         VppIpRoute(
         rxs = self.send_and_expect(self.pg0, p * N_PKTS, self.pg1)
 
         # a recursive v4 route via a v6 next-hop
         VppIpRoute(
-            self, "2.2.2.3", 32,
-            [VppRoutePath(self.pg1.remote_ip6,
-                          0xffffffff)]).add_vpp_config()
-
-        p = (Ether(src=self.pg0.remote_mac,
-                   dst=self.pg0.local_mac) /
-             IP(src=self.pg0.remote_ip4, dst="2.2.2.3") /
-             UDP(sport=1234, dport=1234) /
-             Raw(b'\xa5' * 100))
+            self, "2.2.2.3", 32, [VppRoutePath(self.pg1.remote_ip6, 0xFFFFFFFF)]
+        ).add_vpp_config()
+
+        p = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg0.remote_ip4, dst="2.2.2.3")
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
         rxs = self.send_and_expect(self.pg0, p * N_PKTS, self.pg1)
 
         # a recursive v6 route via a v4 next-hop
         VppIpRoute(
         rxs = self.send_and_expect(self.pg0, p * N_PKTS, self.pg1)
 
         # a recursive v6 route via a v4 next-hop
         VppIpRoute(
-            self, "3001::1", 128,
-            [VppRoutePath(self.pg1.remote_ip4,
-                          0xffffffff)]).add_vpp_config()
-
-        p = (Ether(src=self.pg0.remote_mac,
-                   dst=self.pg0.local_mac) /
-             IPv6(src=self.pg0.remote_ip6, dst="3001::1") /
-             UDP(sport=1234, dport=1234) /
-             Raw(b'\xa5' * 100))
+            self, "3001::1", 128, [VppRoutePath(self.pg1.remote_ip4, 0xFFFFFFFF)]
+        ).add_vpp_config()
+
+        p = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IPv6(src=self.pg0.remote_ip6, dst="3001::1")
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
         rxs = self.send_and_expect(self.pg0, p * N_PKTS, self.pg1)
 
         for rx in rxs:
             self.assertEqual(rx[IPv6].dst, "3001::1")
 
         VppIpRoute(
         rxs = self.send_and_expect(self.pg0, p * N_PKTS, self.pg1)
 
         for rx in rxs:
             self.assertEqual(rx[IPv6].dst, "3001::1")
 
         VppIpRoute(
-            self, "3001::2", 128,
-            [VppRoutePath("1.1.1.1",
-                          0xffffffff)]).add_vpp_config()
-
-        p = (Ether(src=self.pg0.remote_mac,
-                   dst=self.pg0.local_mac) /
-             IPv6(src=self.pg0.remote_ip6, dst="3001::2") /
-             UDP(sport=1234, dport=1234) /
-             Raw(b'\xa5' * 100))
+            self, "3001::2", 128, [VppRoutePath("1.1.1.1", 0xFFFFFFFF)]
+        ).add_vpp_config()
+
+        p = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IPv6(src=self.pg0.remote_ip6, dst="3001::2")
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
         rxs = self.send_and_expect(self.pg0, p * N_PKTS, self.pg1)
 
         for rx in rxs:
         rxs = self.send_and_expect(self.pg0, p * N_PKTS, self.pg1)
 
         for rx in rxs:
@@ -3591,7 +3809,7 @@ class TestIPxAF(VppTestCase):
 
 
 class TestIPv6Punt(VppTestCase):
 
 
 class TestIPv6Punt(VppTestCase):
-    """ IPv6 Punt Police/Redirect """
+    """IPv6 Punt Police/Redirect"""
 
     def setUp(self):
         super(TestIPv6Punt, self).setUp()
 
     def setUp(self):
         super(TestIPv6Punt, self).setUp()
@@ -3609,7 +3827,7 @@ class TestIPv6Punt(VppTestCase):
             i.admin_down()
 
     def test_ip6_punt(self):
             i.admin_down()
 
     def test_ip6_punt(self):
-        """ IPv6 punt police and redirect """
+        """IPv6 punt police and redirect"""
 
         # use UDP packet that have a port we need to explicitly
         # register to get punted.
 
         # use UDP packet that have a port we need to explicitly
         # register to get punted.
@@ -3617,30 +3835,32 @@ class TestIPv6Punt(VppTestCase):
         af_ip6 = VppEnum.vl_api_address_family_t.ADDRESS_IP6
         udp_proto = VppEnum.vl_api_ip_proto_t.IP_API_PROTO_UDP
         punt_udp = {
         af_ip6 = VppEnum.vl_api_address_family_t.ADDRESS_IP6
         udp_proto = VppEnum.vl_api_ip_proto_t.IP_API_PROTO_UDP
         punt_udp = {
-            'type': pt_l4,
-            'punt': {
-                'l4': {
-                    'af': af_ip6,
-                    'protocol': udp_proto,
-                    'port': 7654,
+            "type": pt_l4,
+            "punt": {
+                "l4": {
+                    "af": af_ip6,
+                    "protocol": udp_proto,
+                    "port": 7654,
                 }
                 }
-            }
+            },
         }
 
         self.vapi.set_punt(is_add=1, punt=punt_udp)
 
         }
 
         self.vapi.set_punt(is_add=1, punt=punt_udp)
 
-        pkts = (Ether(src=self.pg0.remote_mac,
-                      dst=self.pg0.local_mac) /
-                IPv6(src=self.pg0.remote_ip6, dst=self.pg0.local_ip6) /
-                UDP(sport=1234, dport=7654) /
-                Raw(b'\xa5' * 100)) * 1025
+        pkts = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IPv6(src=self.pg0.remote_ip6, dst=self.pg0.local_ip6)
+            / UDP(sport=1234, dport=7654)
+            / Raw(b"\xa5" * 100)
+        ) * 1025
 
         #
         # Configure a punt redirect via pg1.
         #
         nh_addr = self.pg1.remote_ip6
 
         #
         # Configure a punt redirect via pg1.
         #
         nh_addr = self.pg1.remote_ip6
-        ip_punt_redirect = VppIpPuntRedirect(self, self.pg0.sw_if_index,
-                                             self.pg1.sw_if_index, nh_addr)
+        ip_punt_redirect = VppIpPuntRedirect(
+            self, self.pg0.sw_if_index, self.pg1.sw_if_index, nh_addr
+        )
         ip_punt_redirect.add_vpp_config()
 
         self.send_and_expect(self.pg0, pkts, self.pg1)
         ip_punt_redirect.add_vpp_config()
 
         self.send_and_expect(self.pg0, pkts, self.pg1)
@@ -3650,8 +3870,7 @@ class TestIPv6Punt(VppTestCase):
         #
         policer = VppPolicer(self, "ip6-punt", 400, 0, 10, 0, rate_type=1)
         policer.add_vpp_config()
         #
         policer = VppPolicer(self, "ip6-punt", 400, 0, 10, 0, rate_type=1)
         policer.add_vpp_config()
-        ip_punt_policer = VppIpPuntPolicer(self, policer.policer_index,
-                                           is_ip6=True)
+        ip_punt_policer = VppIpPuntPolicer(self, policer.policer_index, is_ip6=True)
         ip_punt_policer.add_vpp_config()
 
         self.vapi.cli("clear trace")
         ip_punt_policer.add_vpp_config()
 
         self.vapi.cli("clear trace")
@@ -3668,9 +3887,9 @@ class TestIPv6Punt(VppTestCase):
         stats = policer.get_stats()
 
         # Single rate policer - expect conform, violate but no exceed
         stats = policer.get_stats()
 
         # Single rate policer - expect conform, violate but no exceed
-        self.assertGreater(stats['conform_packets'], 0)
-        self.assertEqual(stats['exceed_packets'], 0)
-        self.assertGreater(stats['violate_packets'], 0)
+        self.assertGreater(stats["conform_packets"], 0)
+        self.assertEqual(stats["exceed_packets"], 0)
+        self.assertGreater(stats["violate_packets"], 0)
 
         self.assertGreater(len(rx), 0)
         self.assertLess(len(rx), len(pkts))
 
         self.assertGreater(len(rx), 0)
         self.assertLess(len(rx), len(pkts))
@@ -3686,31 +3905,34 @@ class TestIPv6Punt(VppTestCase):
         # remove the redirect. expect full drop.
         #
         ip_punt_redirect.remove_vpp_config()
         # remove the redirect. expect full drop.
         #
         ip_punt_redirect.remove_vpp_config()
-        self.send_and_assert_no_replies(self.pg0, pkts,
-                                        "IP no punt config")
+        self.send_and_assert_no_replies(self.pg0, pkts, "IP no punt config")
 
         #
         # Add a redirect that is not input port selective
         #
 
         #
         # Add a redirect that is not input port selective
         #
-        ip_punt_redirect = VppIpPuntRedirect(self, 0xffffffff,
-                                             self.pg1.sw_if_index, nh_addr)
+        ip_punt_redirect = VppIpPuntRedirect(
+            self, 0xFFFFFFFF, self.pg1.sw_if_index, nh_addr
+        )
         ip_punt_redirect.add_vpp_config()
         self.send_and_expect(self.pg0, pkts, self.pg1)
         ip_punt_redirect.remove_vpp_config()
 
     def test_ip6_punt_dump(self):
         ip_punt_redirect.add_vpp_config()
         self.send_and_expect(self.pg0, pkts, self.pg1)
         ip_punt_redirect.remove_vpp_config()
 
     def test_ip6_punt_dump(self):
-        """ IPv6 punt redirect dump"""
+        """IPv6 punt redirect dump"""
 
         #
         # Configure a punt redirects
         #
         nh_address = self.pg3.remote_ip6
 
         #
         # Configure a punt redirects
         #
         nh_address = self.pg3.remote_ip6
-        ipr_03 = VppIpPuntRedirect(self, self.pg0.sw_if_index,
-                                   self.pg3.sw_if_index, nh_address)
-        ipr_13 = VppIpPuntRedirect(self, self.pg1.sw_if_index,
-                                   self.pg3.sw_if_index, nh_address)
-        ipr_23 = VppIpPuntRedirect(self, self.pg2.sw_if_index,
-                                   self.pg3.sw_if_index, "::")
+        ipr_03 = VppIpPuntRedirect(
+            self, self.pg0.sw_if_index, self.pg3.sw_if_index, nh_address
+        )
+        ipr_13 = VppIpPuntRedirect(
+            self, self.pg1.sw_if_index, self.pg3.sw_if_index, nh_address
+        )
+        ipr_23 = VppIpPuntRedirect(
+            self, self.pg2.sw_if_index, self.pg3.sw_if_index, "::"
+        )
         ipr_03.add_vpp_config()
         ipr_13.add_vpp_config()
         ipr_23.add_vpp_config()
         ipr_03.add_vpp_config()
         ipr_13.add_vpp_config()
         ipr_23.add_vpp_config()
@@ -3725,14 +3947,13 @@ class TestIPv6Punt(VppTestCase):
         #
         # Dump punt redirects for all interfaces
         #
         #
         # Dump punt redirects for all interfaces
         #
-        punts = self.vapi.ip_punt_redirect_dump(sw_if_index=0xffffffff,
-                                                is_ipv6=True)
+        punts = self.vapi.ip_punt_redirect_dump(sw_if_index=0xFFFFFFFF, is_ipv6=True)
         self.assertEqual(len(punts), 3)
         for p in punts:
             self.assertEqual(p.punt.tx_sw_if_index, self.pg3.sw_if_index)
         self.assertNotEqual(punts[1].punt.nh, self.pg3.remote_ip6)
         self.assertEqual(len(punts), 3)
         for p in punts:
             self.assertEqual(p.punt.tx_sw_if_index, self.pg3.sw_if_index)
         self.assertNotEqual(punts[1].punt.nh, self.pg3.remote_ip6)
-        self.assertEqual(str(punts[2].punt.nh), '::')
+        self.assertEqual(str(punts[2].punt.nh), "::")
 
 
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index fa98801..9214e32 100644 (file)
@@ -7,8 +7,15 @@ from socket import AF_INET6, inet_pton, inet_ntop
 from framework import tag_fixme_vpp_workers
 from framework import VppTestCase, VppTestRunner
 from vpp_neighbor import VppNeighbor, find_nbr
 from framework import tag_fixme_vpp_workers
 from framework import VppTestCase, VppTestRunner
 from vpp_neighbor import VppNeighbor, find_nbr
-from vpp_ip_route import VppIpRoute, VppRoutePath, find_route, \
-    VppIpTable, DpoProto, FibPathType, VppIpInterfaceAddress
+from vpp_ip_route import (
+    VppIpRoute,
+    VppRoutePath,
+    find_route,
+    VppIpTable,
+    DpoProto,
+    FibPathType,
+    VppIpInterfaceAddress,
+)
 from vpp_papi import VppEnum
 from vpp_ip import VppIpPuntRedirect
 
 from vpp_papi import VppEnum
 from vpp_ip import VppIpPuntRedirect
 
@@ -16,14 +23,21 @@ import scapy.compat
 from scapy.packet import Raw
 from scapy.layers.l2 import Ether, ARP, Dot1Q
 from scapy.layers.inet import IP, UDP, TCP
 from scapy.packet import Raw
 from scapy.layers.l2 import Ether, ARP, Dot1Q
 from scapy.layers.inet import IP, UDP, TCP
-from scapy.layers.inet6 import IPv6, ipv6nh, ICMPv6ND_NS, ICMPv6ND_NA, \
-    ICMPv6NDOptSrcLLAddr, ICMPv6NDOptDstLLAddr, ICMPv6EchoRequest, \
-    ICMPv6EchoReply
+from scapy.layers.inet6 import (
+    IPv6,
+    ipv6nh,
+    ICMPv6ND_NS,
+    ICMPv6ND_NA,
+    ICMPv6NDOptSrcLLAddr,
+    ICMPv6NDOptDstLLAddr,
+    ICMPv6EchoRequest,
+    ICMPv6EchoReply,
+)
 from scapy.utils6 import in6_ptop, in6_getnsma, in6_getnsmac, in6_ismaddr
 
 
 class TestNDPROXY(VppTestCase):
 from scapy.utils6 import in6_ptop, in6_getnsma, in6_getnsmac, in6_ismaddr
 
 
 class TestNDPROXY(VppTestCase):
-    """ IP6 ND (mirror) Proxy Test Case """
+    """IP6 ND (mirror) Proxy Test Case"""
 
     @classmethod
     def setUpClass(self):
 
     @classmethod
     def setUpClass(self):
@@ -49,7 +63,7 @@ class TestNDPROXY(VppTestCase):
                 i.admin_down()
 
     def test_nd_mirror_proxy(self):
                 i.admin_down()
 
     def test_nd_mirror_proxy(self):
-        """ Interface (Mirror) Proxy ND """
+        """Interface (Mirror) Proxy ND"""
 
         #
         # When VPP has an interface whose address is also applied to a TAP
 
         #
         # When VPP has an interface whose address is also applied to a TAP
@@ -70,17 +84,19 @@ class TestNDPROXY(VppTestCase):
         #
         # Enable ND proxy on pg1
         #
         #
         # Enable ND proxy on pg1
         #
-        self.vapi.ip6nd_proxy_enable_disable(sw_if_index=self.pg1.sw_if_index,
-                                             is_enable=1)
+        self.vapi.ip6nd_proxy_enable_disable(
+            sw_if_index=self.pg1.sw_if_index, is_enable=1
+        )
         #
         # Send the ND request with an originating address that
         # is VPP's own address
         #
         #
         # Send the ND request with an originating address that
         # is VPP's own address
         #
-        nd_req_from_host = (Ether(src=self.pg1.remote_mac,
-                                  dst=in6_getnsmac(nsma)) /
-                            IPv6(dst=d, src=self.pg0.local_ip6) /
-                            ICMPv6ND_NS(tgt=addr) /
-                            ICMPv6NDOptSrcLLAddr(lladdr=self.pg1.remote_mac))
+        nd_req_from_host = (
+            Ether(src=self.pg1.remote_mac, dst=in6_getnsmac(nsma))
+            / IPv6(dst=d, src=self.pg0.local_ip6)
+            / ICMPv6ND_NS(tgt=addr)
+            / ICMPv6NDOptSrcLLAddr(lladdr=self.pg1.remote_mac)
+        )
 
         rx = self.send_and_expect(self.pg1, [nd_req_from_host], self.pg1)
         self.assertEqual(rx[0][Ether].src, self.pg1.local_mac)
 
         rx = self.send_and_expect(self.pg1, [nd_req_from_host], self.pg1)
         self.assertEqual(rx[0][Ether].src, self.pg1.local_mac)
@@ -90,22 +106,19 @@ class TestNDPROXY(VppTestCase):
         self.assertEqual(ipv6nh[rx[0][IPv6].nh], "ICMPv6")
         self.assertEqual(rx[0][ICMPv6ND_NA].tgt, self.pg0.remote_ip6)
         self.assertTrue(rx[0].haslayer(ICMPv6NDOptDstLLAddr))
         self.assertEqual(ipv6nh[rx[0][IPv6].nh], "ICMPv6")
         self.assertEqual(rx[0][ICMPv6ND_NA].tgt, self.pg0.remote_ip6)
         self.assertTrue(rx[0].haslayer(ICMPv6NDOptDstLLAddr))
-        self.assertEqual(rx[0][ICMPv6NDOptDstLLAddr].lladdr,
-                         self.pg1.local_mac)
+        self.assertEqual(rx[0][ICMPv6NDOptDstLLAddr].lladdr, self.pg1.local_mac)
 
         #
         # Send the unicast ND request
         #
 
         #
         # Send the unicast ND request
         #
-        unicast_nd_req_from_host = (Ether(src=self.pg1.remote_mac,
-                                          dst=self.pg1.local_mac) /
-                                    IPv6(dst=self.pg0.remote_ip6,
-                                         src=self.pg1.remote_ip6_ll) /
-                                    ICMPv6ND_NS(tgt=self.pg0.remote_ip6) /
-                                    ICMPv6NDOptSrcLLAddr(
-                                         lladdr=self.pg1.remote_mac))
+        unicast_nd_req_from_host = (
+            Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
+            / IPv6(dst=self.pg0.remote_ip6, src=self.pg1.remote_ip6_ll)
+            / ICMPv6ND_NS(tgt=self.pg0.remote_ip6)
+            / ICMPv6NDOptSrcLLAddr(lladdr=self.pg1.remote_mac)
+        )
 
 
-        rx = self.send_and_expect(self.pg1, [unicast_nd_req_from_host],
-                                  self.pg0)
+        rx = self.send_and_expect(self.pg1, [unicast_nd_req_from_host], self.pg0)
         self.assertEqual(rx[0][Ether].src, self.pg0.local_mac)
         self.assertEqual(rx[0][Ether].dst, in6_getnsmac(nsma))
         self.assertEqual(rx[0][IPv6].src, self.pg0.local_ip6)
         self.assertEqual(rx[0][Ether].src, self.pg0.local_mac)
         self.assertEqual(rx[0][Ether].dst, in6_getnsmac(nsma))
         self.assertEqual(rx[0][IPv6].src, self.pg0.local_ip6)
@@ -113,8 +126,7 @@ class TestNDPROXY(VppTestCase):
         self.assertEqual(ipv6nh[rx[0][IPv6].nh], "ICMPv6")
         self.assertEqual(rx[0][ICMPv6ND_NS].tgt, self.pg0.remote_ip6)
         self.assertTrue(rx[0].haslayer(ICMPv6NDOptSrcLLAddr))
         self.assertEqual(ipv6nh[rx[0][IPv6].nh], "ICMPv6")
         self.assertEqual(rx[0][ICMPv6ND_NS].tgt, self.pg0.remote_ip6)
         self.assertTrue(rx[0].haslayer(ICMPv6NDOptSrcLLAddr))
-        self.assertEqual(rx[0][ICMPv6NDOptSrcLLAddr].lladdr,
-                         self.pg0.local_mac)
+        self.assertEqual(rx[0][ICMPv6NDOptSrcLLAddr].lladdr, self.pg0.local_mac)
 
         # Resolve the NDs on the uplink
         self.pg0.resolve_ndp()
 
         # Resolve the NDs on the uplink
         self.pg0.resolve_ndp()
@@ -123,28 +135,26 @@ class TestNDPROXY(VppTestCase):
         # Again send the unicast ND request, this time dst address should be
         # in local cache
         #
         # Again send the unicast ND request, this time dst address should be
         # in local cache
         #
-        rx = self.send_and_expect(self.pg1, [unicast_nd_req_from_host],
-                                  self.pg1)
+        rx = self.send_and_expect(self.pg1, [unicast_nd_req_from_host], self.pg1)
         self.assertEqual(rx[0][Ether].src, self.pg1.local_mac)
         self.assertEqual(rx[0][Ether].dst, self.pg1.remote_mac)
         self.assertEqual(rx[0][IPv6].src, self.pg0.remote_ip6)
         self.assertEqual(rx[0][Ether].src, self.pg1.local_mac)
         self.assertEqual(rx[0][Ether].dst, self.pg1.remote_mac)
         self.assertEqual(rx[0][IPv6].src, self.pg0.remote_ip6)
-        self.assertEqual(in6_ptop(rx[0][IPv6].dst),
-                         in6_ptop(self.pg1.remote_ip6_ll))
+        self.assertEqual(in6_ptop(rx[0][IPv6].dst), in6_ptop(self.pg1.remote_ip6_ll))
         self.assertEqual(ipv6nh[rx[0][IPv6].nh], "ICMPv6")
         self.assertEqual(rx[0][ICMPv6ND_NA].tgt, self.pg0.remote_ip6)
         self.assertTrue(rx[0].haslayer(ICMPv6NDOptDstLLAddr))
         self.assertEqual(ipv6nh[rx[0][IPv6].nh], "ICMPv6")
         self.assertEqual(rx[0][ICMPv6ND_NA].tgt, self.pg0.remote_ip6)
         self.assertTrue(rx[0].haslayer(ICMPv6NDOptDstLLAddr))
-        self.assertEqual(rx[0][ICMPv6NDOptDstLLAddr].lladdr,
-                         self.pg1.local_mac)
+        self.assertEqual(rx[0][ICMPv6NDOptDstLLAddr].lladdr, self.pg1.local_mac)
 
         #
         # Send the Echo Request from host to remote (of uplink)
         #
         id = self.pg1.sw_if_index
         seq = 0x1
 
         #
         # Send the Echo Request from host to remote (of uplink)
         #
         id = self.pg1.sw_if_index
         seq = 0x1
-        echo_request = (Ether(dst=self.pg1.local_mac,
-                              src=self.pg1.remote_mac) /
-                        IPv6(dst=self.pg0.remote_ip6, src=self.pg0.local_ip6) /
-                        ICMPv6EchoRequest(seq=seq, id=id))
+        echo_request = (
+            Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac)
+            / IPv6(dst=self.pg0.remote_ip6, src=self.pg0.local_ip6)
+            / ICMPv6EchoRequest(seq=seq, id=id)
+        )
 
         rx = self.send_and_expect(self.pg1, [echo_request], self.pg0)
         self.assertEqual(rx[0][Ether].src, self.pg0.local_mac)
 
         rx = self.send_and_expect(self.pg1, [echo_request], self.pg0)
         self.assertEqual(rx[0][Ether].src, self.pg0.local_mac)
@@ -159,13 +169,16 @@ class TestNDPROXY(VppTestCase):
         #
         # setup a punt redirect so packets from the uplink go to the tap
         #
         #
         # setup a punt redirect so packets from the uplink go to the tap
         #
-        redirect = VppIpPuntRedirect(self, self.pg0.sw_if_index,
-                                     self.pg1.sw_if_index, self.pg0.local_ip6)
+        redirect = VppIpPuntRedirect(
+            self, self.pg0.sw_if_index, self.pg1.sw_if_index, self.pg0.local_ip6
+        )
         redirect.add_vpp_config()
 
         redirect.add_vpp_config()
 
-        echo_reply = (Ether(dst=self.pg0.remote_mac, src=self.pg0.local_mac) /
-                      IPv6(dst=self.pg0.local_ip6, src=self.pg0.remote_ip6) /
-                      ICMPv6EchoReply(seq=1, id=id))
+        echo_reply = (
+            Ether(dst=self.pg0.remote_mac, src=self.pg0.local_mac)
+            / IPv6(dst=self.pg0.local_ip6, src=self.pg0.remote_ip6)
+            / ICMPv6EchoReply(seq=1, id=id)
+        )
 
         rx = self.send_and_expect(self.pg0, [echo_reply], self.pg1)
         self.assertEqual(rx[0][Ether].src, self.pg1.local_mac)
 
         rx = self.send_and_expect(self.pg0, [echo_reply], self.pg1)
         self.assertEqual(rx[0][Ether].src, self.pg1.local_mac)
@@ -180,9 +193,11 @@ class TestNDPROXY(VppTestCase):
         #
         # cleanup
         #
         #
         # cleanup
         #
-        self.vapi.ip6nd_proxy_enable_disable(sw_if_index=self.pg1.sw_if_index,
-                                             is_enable=0)
+        self.vapi.ip6nd_proxy_enable_disable(
+            sw_if_index=self.pg1.sw_if_index, is_enable=0
+        )
         redirect.remove_vpp_config()
 
         redirect.remove_vpp_config()
 
-if __name__ == '__main__':
+
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index d95e792..73df30d 100644 (file)
@@ -69,8 +69,14 @@ import socket
 
 from scapy.packet import Raw
 from scapy.layers.l2 import Ether
 
 from scapy.packet import Raw
 from scapy.layers.l2 import Ether
-from scapy.layers.inet6 import UDP, IPv6, ICMPv6ND_NS, ICMPv6ND_RA, \
-    RouterAlert, IPv6ExtHdrHopByHop
+from scapy.layers.inet6 import (
+    UDP,
+    IPv6,
+    ICMPv6ND_NS,
+    ICMPv6ND_RA,
+    RouterAlert,
+    IPv6ExtHdrHopByHop,
+)
 from scapy.utils6 import in6_ismaddr, in6_isllsnmaddr, in6_getAddrType
 from scapy.pton_ntop import inet_ntop
 
 from scapy.utils6 import in6_ismaddr, in6_isllsnmaddr, in6_getAddrType
 from scapy.pton_ntop import inet_ntop
 
@@ -80,8 +86,8 @@ from vrf import VRFState
 
 
 def is_ipv6_misc_ext(p):
 
 
 def is_ipv6_misc_ext(p):
-    """ Is packet one of uninteresting IPv6 broadcasts (extended to filter out
-    ICMPv6 Neighbor Discovery - Neighbor Advertisement packets too)? """
+    """Is packet one of uninteresting IPv6 broadcasts (extended to filter out
+    ICMPv6 Neighbor Discovery - Neighbor Advertisement packets too)?"""
     if p.haslayer(ICMPv6ND_RA):
         if in6_ismaddr(p[IPv6].dst):
             return True
     if p.haslayer(ICMPv6ND_RA):
         if in6_ismaddr(p[IPv6].dst):
             return True
@@ -96,7 +102,7 @@ def is_ipv6_misc_ext(p):
 
 
 class TestIP6VrfMultiInst(VppTestCase):
 
 
 class TestIP6VrfMultiInst(VppTestCase):
-    """ IP6 VRF  Multi-instance Test Case """
+    """IP6 VRF  Multi-instance Test Case"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -114,8 +120,7 @@ class TestIP6VrfMultiInst(VppTestCase):
 
         try:
             # Create pg interfaces
 
         try:
             # Create pg interfaces
-            cls.create_pg_interfaces(
-                range(cls.nr_of_vrfs * cls.pg_ifs_per_vrf))
+            cls.create_pg_interfaces(range(cls.nr_of_vrfs * cls.pg_ifs_per_vrf))
 
             # Packet flows mapping pg0 -> pg1, pg2 etc.
             cls.flows = dict()
 
             # Packet flows mapping pg0 -> pg1, pg2 etc.
             cls.flows = dict()
@@ -124,7 +129,8 @@ class TestIP6VrfMultiInst(VppTestCase):
                 pg_list = [
                     cls.pg_interfaces[multiplicand * cls.pg_ifs_per_vrf + j]
                     for j in range(cls.pg_ifs_per_vrf)
                 pg_list = [
                     cls.pg_interfaces[multiplicand * cls.pg_ifs_per_vrf + j]
                     for j in range(cls.pg_ifs_per_vrf)
-                    if (multiplicand * cls.pg_ifs_per_vrf + j) != i]
+                    if (multiplicand * cls.pg_ifs_per_vrf + j) != i
+                ]
                 cls.flows[cls.pg_interfaces[i]] = pg_list
 
             # Packet sizes - jumbo packet (9018 bytes) skipped
                 cls.flows[cls.pg_interfaces[i]] = pg_list
 
             # Packet sizes - jumbo packet (9018 bytes) skipped
@@ -153,7 +159,8 @@ class TestIP6VrfMultiInst(VppTestCase):
                 set_id = i + 1
                 pg_list = [
                     cls.pg_interfaces[i * cls.pg_ifs_per_vrf + j]
                 set_id = i + 1
                 pg_list = [
                     cls.pg_interfaces[i * cls.pg_ifs_per_vrf + j]
-                    for j in range(cls.pg_ifs_per_vrf)]
+                    for j in range(cls.pg_ifs_per_vrf)
+                ]
                 cls.pg_if_sets[set_id] = pg_list
 
         except Exception:
                 cls.pg_if_sets[set_id] = pg_list
 
         except Exception:
@@ -185,8 +192,9 @@ class TestIP6VrfMultiInst(VppTestCase):
         for i in range(self.pg_ifs_per_vrf):
             pg_if = self.pg_if_sets[if_set_id][i]
             pg_if.set_table_ip6(vrf_id)
         for i in range(self.pg_ifs_per_vrf):
             pg_if = self.pg_if_sets[if_set_id][i]
             pg_if.set_table_ip6(vrf_id)
-            self.logger.info("pg-interface %s added to IPv6 VRF ID %d"
-                             % (pg_if.name, vrf_id))
+            self.logger.info(
+                "pg-interface %s added to IPv6 VRF ID %d" % (pg_if.name, vrf_id)
+            )
             if pg_if not in self.pg_in_vrf:
                 self.pg_in_vrf.append(pg_if)
             if pg_if in self.pg_not_in_vrf:
             if pg_if not in self.pg_in_vrf:
                 self.pg_in_vrf.append(pg_if)
             if pg_if in self.pg_not_in_vrf:
@@ -206,8 +214,9 @@ class TestIP6VrfMultiInst(VppTestCase):
         """
         for i in range(count):
             vrf_id = i + start
         """
         for i in range(count):
             vrf_id = i + start
-            self.vapi.ip_table_add_del(is_add=1,
-                                       table={'table_id': vrf_id, 'is_ip6': 1})
+            self.vapi.ip_table_add_del(
+                is_add=1, table={"table_id": vrf_id, "is_ip6": 1}
+            )
             self.logger.info("IPv6 VRF ID %d created" % vrf_id)
             if vrf_id not in self.vrf_list:
                 self.vrf_list.append(vrf_id)
             self.logger.info("IPv6 VRF ID %d created" % vrf_id)
             if vrf_id not in self.vrf_list:
                 self.vrf_list.append(vrf_id)
@@ -217,8 +226,7 @@ class TestIP6VrfMultiInst(VppTestCase):
         self.logger.debug(self.vapi.ppcli("show ip6 fib"))
         self.logger.debug(self.vapi.ppcli("show ip6 neighbors"))
 
         self.logger.debug(self.vapi.ppcli("show ip6 fib"))
         self.logger.debug(self.vapi.ppcli("show ip6 neighbors"))
 
-    def create_vrf_by_id_and_assign_interfaces(self, set_id,
-                                               vrf_id=0xffffffff):
+    def create_vrf_by_id_and_assign_interfaces(self, set_id, vrf_id=0xFFFFFFFF):
         """
         Create a FIB table / VRF by vrf_id, put 3 pg-ip6 interfaces
         to FIB table / VRF.
         """
         Create a FIB table / VRF by vrf_id, put 3 pg-ip6 interfaces
         to FIB table / VRF.
@@ -226,8 +234,7 @@ class TestIP6VrfMultiInst(VppTestCase):
         :param int vrf_id: Required table ID / VRF ID. \
         (Default value = 0xffffffff, ID will be selected automatically)
         """
         :param int vrf_id: Required table ID / VRF ID. \
         (Default value = 0xffffffff, ID will be selected automatically)
         """
-        ret = self.vapi.ip_table_allocate(table={'table_id': vrf_id,
-                                                 'is_ip6': 1})
+        ret = self.vapi.ip_table_allocate(table={"table_id": vrf_id, "is_ip6": 1})
         vrf_id = ret.table.table_id
         self.logger.info("IPv6 VRF ID %d created" % vrf_id)
         if vrf_id not in self.vrf_list:
         vrf_id = ret.table.table_id
         self.logger.info("IPv6 VRF ID %d created" % vrf_id)
         if vrf_id not in self.vrf_list:
@@ -248,7 +255,7 @@ class TestIP6VrfMultiInst(VppTestCase):
         """
         if if_set_id is None:
             if_set_id = vrf_id
         """
         if if_set_id is None:
             if_set_id = vrf_id
-        self.vapi.ip_table_flush(table={'table_id': vrf_id, 'is_ip6': 1})
+        self.vapi.ip_table_flush(table={"table_id": vrf_id, "is_ip6": 1})
         if vrf_id in self.vrf_list:
             self.vrf_list.remove(vrf_id)
         if vrf_id not in self.vrf_reset_list:
         if vrf_id in self.vrf_list:
             self.vrf_list.remove(vrf_id)
         if vrf_id not in self.vrf_reset_list:
@@ -270,8 +277,7 @@ class TestIP6VrfMultiInst(VppTestCase):
             self.vrf_list.remove(vrf_id)
         if vrf_id in self.vrf_reset_list:
             self.vrf_reset_list.remove(vrf_id)
             self.vrf_list.remove(vrf_id)
         if vrf_id in self.vrf_reset_list:
             self.vrf_reset_list.remove(vrf_id)
-        self.vapi.ip_table_add_del(is_add=0,
-                                   table={'table_id': vrf_id, 'is_ip6': 1})
+        self.vapi.ip_table_add_del(is_add=0, table={"table_id": vrf_id, "is_ip6": 1})
 
     def create_stream(self, src_if, packet_sizes):
         """
 
     def create_stream(self, src_if, packet_sizes):
         """
@@ -288,16 +294,20 @@ class TestIP6VrfMultiInst(VppTestCase):
                 src_host = random.choice(src_hosts)
                 pkt_info = self.create_packet_info(src_if, dst_if)
                 payload = self.info_to_payload(pkt_info)
                 src_host = random.choice(src_hosts)
                 pkt_info = self.create_packet_info(src_if, dst_if)
                 payload = self.info_to_payload(pkt_info)
-                p = (Ether(dst=src_if.local_mac, src=src_host.mac) /
-                     IPv6(src=src_host.ip6, dst=dst_host.ip6) /
-                     UDP(sport=1234, dport=1234) /
-                     Raw(payload))
+                p = (
+                    Ether(dst=src_if.local_mac, src=src_host.mac)
+                    / IPv6(src=src_host.ip6, dst=dst_host.ip6)
+                    / UDP(sport=1234, dport=1234)
+                    / Raw(payload)
+                )
                 pkt_info.data = p.copy()
                 size = random.choice(packet_sizes)
                 self.extend_packet(p, size)
                 pkts.append(p)
                 pkt_info.data = p.copy()
                 size = random.choice(packet_sizes)
                 self.extend_packet(p, size)
                 pkts.append(p)
-        self.logger.debug("Input stream created for port %s. Length: %u pkt(s)"
-                          % (src_if.name, len(pkts)))
+        self.logger.debug(
+            "Input stream created for port %s. Length: %u pkt(s)"
+            % (src_if.name, len(pkts))
+        )
         return pkts
 
     def create_stream_crosswise_vrf(self, src_if, vrf_id, packet_sizes):
         return pkts
 
     def create_stream_crosswise_vrf(self, src_if, vrf_id, packet_sizes):
@@ -320,16 +330,20 @@ class TestIP6VrfMultiInst(VppTestCase):
                     src_host = random.choice(src_hosts)
                     pkt_info = self.create_packet_info(src_if, dst_if)
                     payload = self.info_to_payload(pkt_info)
                     src_host = random.choice(src_hosts)
                     pkt_info = self.create_packet_info(src_if, dst_if)
                     payload = self.info_to_payload(pkt_info)
-                    p = (Ether(dst=src_if.local_mac, src=src_host.mac) /
-                         IPv6(src=src_host.ip6, dst=dst_host.ip6) /
-                         UDP(sport=1234, dport=1234) /
-                         Raw(payload))
+                    p = (
+                        Ether(dst=src_if.local_mac, src=src_host.mac)
+                        / IPv6(src=src_host.ip6, dst=dst_host.ip6)
+                        / UDP(sport=1234, dport=1234)
+                        / Raw(payload)
+                    )
                     pkt_info.data = p.copy()
                     size = random.choice(packet_sizes)
                     self.extend_packet(p, size)
                     pkts.append(p)
                     pkt_info.data = p.copy()
                     size = random.choice(packet_sizes)
                     self.extend_packet(p, size)
                     pkts.append(p)
-        self.logger.debug("Input stream created for port %s. Length: %u pkt(s)"
-                          % (src_if.name, len(pkts)))
+        self.logger.debug(
+            "Input stream created for port %s. Length: %u pkt(s)"
+            % (src_if.name, len(pkts))
+        )
         return pkts
 
     def verify_capture(self, pg_if, capture):
         return pkts
 
     def verify_capture(self, pg_if, capture):
@@ -350,11 +364,13 @@ class TestIP6VrfMultiInst(VppTestCase):
                 payload_info = self.payload_to_info(packet[Raw])
                 packet_index = payload_info.index
                 self.assertEqual(payload_info.dst, dst_sw_if_index)
                 payload_info = self.payload_to_info(packet[Raw])
                 packet_index = payload_info.index
                 self.assertEqual(payload_info.dst, dst_sw_if_index)
-                self.logger.debug("Got packet on port %s: src=%u (id=%u)" %
-                                  (pg_if.name, payload_info.src, packet_index))
+                self.logger.debug(
+                    "Got packet on port %s: src=%u (id=%u)"
+                    % (pg_if.name, payload_info.src, packet_index)
+                )
                 next_info = self.get_next_packet_info_for_interface2(
                 next_info = self.get_next_packet_info_for_interface2(
-                    payload_info.src, dst_sw_if_index,
-                    last_info[payload_info.src])
+                    payload_info.src, dst_sw_if_index, last_info[payload_info.src]
+                )
                 last_info[payload_info.src] = next_info
                 self.assertIsNotNone(next_info)
                 self.assertEqual(packet_index, next_info.index)
                 last_info[payload_info.src] = next_info
                 self.assertIsNotNone(next_info)
                 self.assertEqual(packet_index, next_info.index)
@@ -369,11 +385,13 @@ class TestIP6VrfMultiInst(VppTestCase):
                 raise
         for i in self.pg_interfaces:
             remaining_packet = self.get_next_packet_info_for_interface2(
                 raise
         for i in self.pg_interfaces:
             remaining_packet = self.get_next_packet_info_for_interface2(
-                i, dst_sw_if_index, last_info[i.sw_if_index])
+                i, dst_sw_if_index, last_info[i.sw_if_index]
+            )
             self.assertIsNone(
                 remaining_packet,
             self.assertIsNone(
                 remaining_packet,
-                "Port %u: Packet expected from source %u didn't arrive" %
-                (dst_sw_if_index, i.sw_if_index))
+                "Port %u: Packet expected from source %u didn't arrive"
+                % (dst_sw_if_index, i.sw_if_index),
+            )
 
     def verify_vrf(self, vrf_id, if_set_id=None):
         """
 
     def verify_vrf(self, vrf_id, if_set_id=None):
         """
@@ -437,8 +455,9 @@ class TestIP6VrfMultiInst(VppTestCase):
                 capture = pg_if.get_capture(remark="interface is in VRF")
                 self.verify_capture(pg_if, capture)
             elif pg_if in self.pg_not_in_vrf:
                 capture = pg_if.get_capture(remark="interface is in VRF")
                 self.verify_capture(pg_if, capture)
             elif pg_if in self.pg_not_in_vrf:
-                pg_if.assert_nothing_captured(remark="interface is not in VRF",
-                                              filter_out_fn=is_ipv6_misc_ext)
+                pg_if.assert_nothing_captured(
+                    remark="interface is not in VRF", filter_out_fn=is_ipv6_misc_ext
+                )
                 self.logger.debug("No capture for interface %s" % pg_if.name)
             else:
                 raise Exception("Unknown interface: %s" % pg_if.name)
                 self.logger.debug("No capture for interface %s" % pg_if.name)
             else:
                 raise Exception("Unknown interface: %s" % pg_if.name)
@@ -458,7 +477,8 @@ class TestIP6VrfMultiInst(VppTestCase):
         for vrf_id in self.vrf_list:
             for pg_if in self.pg_if_sets[vrf_id]:
                 pkts = self.create_stream_crosswise_vrf(
         for vrf_id in self.vrf_list:
             for pg_if in self.pg_if_sets[vrf_id]:
                 pkts = self.create_stream_crosswise_vrf(
-                    pg_if, vrf_id, self.pg_if_packet_sizes)
+                    pg_if, vrf_id, self.pg_if_packet_sizes
+                )
                 pg_if.add_stream(pkts)
 
         # Enable packet capture and start packet sending
                 pg_if.add_stream(pkts)
 
         # Enable packet capture and start packet sending
@@ -468,29 +488,27 @@ class TestIP6VrfMultiInst(VppTestCase):
         # Verify
         # Verify outgoing packet streams per packet-generator interface
         for pg_if in self.pg_interfaces:
         # Verify
         # Verify outgoing packet streams per packet-generator interface
         for pg_if in self.pg_interfaces:
-            pg_if.assert_nothing_captured(remark="interface is in other VRF",
-                                          filter_out_fn=is_ipv6_misc_ext)
+            pg_if.assert_nothing_captured(
+                remark="interface is in other VRF", filter_out_fn=is_ipv6_misc_ext
+            )
             self.logger.debug("No capture for interface %s" % pg_if.name)
 
     def test_ip6_vrf_01(self):
             self.logger.debug("No capture for interface %s" % pg_if.name)
 
     def test_ip6_vrf_01(self):
-        """ IP6 VRF  Multi-instance test 1 - create 4 VRFs
-        """
+        """IP6 VRF  Multi-instance test 1 - create 4 VRFs"""
         # Config 1
         # Create 4 VRFs
         self.create_vrf_and_assign_interfaces(4)
 
         # Verify 1
         for vrf_id in self.vrf_list:
         # Config 1
         # Create 4 VRFs
         self.create_vrf_and_assign_interfaces(4)
 
         # Verify 1
         for vrf_id in self.vrf_list:
-            self.assert_equal(self.verify_vrf(vrf_id),
-                              VRFState.configured, VRFState)
+            self.assert_equal(self.verify_vrf(vrf_id), VRFState.configured, VRFState)
 
         # Test 1
         self.run_verify_test()
         self.run_crosswise_vrf_test()
 
     def test_ip6_vrf_02(self):
 
         # Test 1
         self.run_verify_test()
         self.run_crosswise_vrf_test()
 
     def test_ip6_vrf_02(self):
-        """ IP6 VRF  Multi-instance test 2 - reset 2 VRFs
-        """
+        """IP6 VRF  Multi-instance test 2 - reset 2 VRFs"""
         # Config 2
         # Delete 2 VRFs
         self.reset_vrf_and_remove_from_vrf_list(1)
         # Config 2
         # Delete 2 VRFs
         self.reset_vrf_and_remove_from_vrf_list(1)
@@ -498,11 +516,9 @@ class TestIP6VrfMultiInst(VppTestCase):
 
         # Verify 2
         for vrf_id in self.vrf_reset_list:
 
         # Verify 2
         for vrf_id in self.vrf_reset_list:
-            self.assert_equal(self.verify_vrf(vrf_id),
-                              VRFState.reset, VRFState)
+            self.assert_equal(self.verify_vrf(vrf_id), VRFState.reset, VRFState)
         for vrf_id in self.vrf_list:
         for vrf_id in self.vrf_list:
-            self.assert_equal(self.verify_vrf(vrf_id),
-                              VRFState.configured, VRFState)
+            self.assert_equal(self.verify_vrf(vrf_id), VRFState.configured, VRFState)
 
         # Test 2
         self.run_verify_test()
 
         # Test 2
         self.run_verify_test()
@@ -513,8 +529,7 @@ class TestIP6VrfMultiInst(VppTestCase):
         #     self.reset_vrf_and_remove_from_vrf_list(vrf_id)
 
     def test_ip6_vrf_03(self):
         #     self.reset_vrf_and_remove_from_vrf_list(vrf_id)
 
     def test_ip6_vrf_03(self):
-        """ IP6 VRF  Multi-instance 3 - add 2 VRFs
-        """
+        """IP6 VRF  Multi-instance 3 - add 2 VRFs"""
         # Config 3
         # Add 1 of reset VRFs and 1 new VRF
         self.create_vrf_and_assign_interfaces(1)
         # Config 3
         # Add 1 of reset VRFs and 1 new VRF
         self.create_vrf_and_assign_interfaces(1)
@@ -522,11 +537,9 @@ class TestIP6VrfMultiInst(VppTestCase):
 
         # Verify 3
         for vrf_id in self.vrf_reset_list:
 
         # Verify 3
         for vrf_id in self.vrf_reset_list:
-            self.assert_equal(self.verify_vrf(vrf_id),
-                              VRFState.reset, VRFState)
+            self.assert_equal(self.verify_vrf(vrf_id), VRFState.reset, VRFState)
         for vrf_id in self.vrf_list:
         for vrf_id in self.vrf_list:
-            self.assert_equal(self.verify_vrf(vrf_id),
-                              VRFState.configured, VRFState)
+            self.assert_equal(self.verify_vrf(vrf_id), VRFState.configured, VRFState)
 
         # Test 3
         self.run_verify_test()
 
         # Test 3
         self.run_verify_test()
@@ -537,8 +550,7 @@ class TestIP6VrfMultiInst(VppTestCase):
         #     self.reset_vrf_and_remove_from_vrf_list(vrf_id)
 
     def test_ip6_vrf_04(self):
         #     self.reset_vrf_and_remove_from_vrf_list(vrf_id)
 
     def test_ip6_vrf_04(self):
-        """ IP6 VRF  Multi-instance test 4 - reset 4 VRFs
-        """
+        """IP6 VRF  Multi-instance test 4 - reset 4 VRFs"""
         # Config 4
         # Reset all VRFs (i.e. no VRF except VRF=0 configured)
         for i in range(len(self.vrf_list)):
         # Config 4
         # Reset all VRFs (i.e. no VRF except VRF=0 configured)
         for i in range(len(self.vrf_list)):
@@ -547,20 +559,20 @@ class TestIP6VrfMultiInst(VppTestCase):
 
         # Verify 4
         for vrf_id in self.vrf_reset_list:
 
         # Verify 4
         for vrf_id in self.vrf_reset_list:
-            self.assert_equal(self.verify_vrf(vrf_id),
-                              VRFState.reset, VRFState)
+            self.assert_equal(self.verify_vrf(vrf_id), VRFState.reset, VRFState)
         vrf_list_length = len(self.vrf_list)
         self.assertEqual(
         vrf_list_length = len(self.vrf_list)
         self.assertEqual(
-            vrf_list_length, 0,
-            "List of configured VRFs is not empty: %s != 0" % vrf_list_length)
+            vrf_list_length,
+            0,
+            "List of configured VRFs is not empty: %s != 0" % vrf_list_length,
+        )
 
         # Test 4
         self.run_verify_test()
         self.run_crosswise_vrf_test()
 
     def test_ip6_vrf_05(self):
 
         # Test 4
         self.run_verify_test()
         self.run_crosswise_vrf_test()
 
     def test_ip6_vrf_05(self):
-        """ IP6 VRF  Multi-instance test 5 - auto allocate vrf id
-        """
+        """IP6 VRF  Multi-instance test 5 - auto allocate vrf id"""
         # Config 5
         # Create several VRFs
         # Set vrf_id manually first
         # Config 5
         # Create several VRFs
         # Set vrf_id manually first
@@ -571,11 +583,11 @@ class TestIP6VrfMultiInst(VppTestCase):
         ]
 
         # Verify 5
         ]
 
         # Verify 5
-        self.assert_equal(self.verify_vrf(10, 1), VRFState.configured,
-                          VRFState)
+        self.assert_equal(self.verify_vrf(10, 1), VRFState.configured, VRFState)
         for i, vrf in enumerate(auto_vrf_id):
         for i, vrf in enumerate(auto_vrf_id):
-            self.assert_equal(self.verify_vrf(vrf, i+2),
-                              VRFState.configured, VRFState)
+            self.assert_equal(
+                self.verify_vrf(vrf, i + 2), VRFState.configured, VRFState
+            )
 
         # Test 5
         self.run_verify_test()
 
         # Test 5
         self.run_verify_test()
@@ -584,18 +596,19 @@ class TestIP6VrfMultiInst(VppTestCase):
         # Reset VRFs
         self.reset_vrf_and_remove_from_vrf_list(10, 1)
         for i, vrf in enumerate(auto_vrf_id):
         # Reset VRFs
         self.reset_vrf_and_remove_from_vrf_list(10, 1)
         for i, vrf in enumerate(auto_vrf_id):
-            self.reset_vrf_and_remove_from_vrf_list(vrf, i+2)
+            self.reset_vrf_and_remove_from_vrf_list(vrf, i + 2)
 
         # Verify 5.1
         self.assert_equal(self.verify_vrf(10, 1), VRFState.reset, VRFState)
         for i, vrf in enumerate(auto_vrf_id):
 
         # Verify 5.1
         self.assert_equal(self.verify_vrf(10, 1), VRFState.reset, VRFState)
         for i, vrf in enumerate(auto_vrf_id):
-            self.assert_equal(self.verify_vrf(vrf, i+2),
-                              VRFState.reset, VRFState)
+            self.assert_equal(self.verify_vrf(vrf, i + 2), VRFState.reset, VRFState)
 
         vrf_list_length = len(self.vrf_list)
         self.assertEqual(
 
         vrf_list_length = len(self.vrf_list)
         self.assertEqual(
-            vrf_list_length, 0,
-            "List of configured VRFs is not empty: %s != 0" % vrf_list_length)
+            vrf_list_length,
+            0,
+            "List of configured VRFs is not empty: %s != 0" % vrf_list_length,
+        )
 
         # Cleanup our extra created VRFs
         for vrf in auto_vrf_id:
 
         # Cleanup our extra created VRFs
         for vrf in auto_vrf_id:
@@ -604,14 +617,12 @@ class TestIP6VrfMultiInst(VppTestCase):
         self.delete_vrf(10)
 
     def test_ip6_vrf_06(self):
         self.delete_vrf(10)
 
     def test_ip6_vrf_06(self):
-        """ IP6 VRF  Multi-instance test 6 - recreate 4 VRFs
-        """
+        """IP6 VRF  Multi-instance test 6 - recreate 4 VRFs"""
         # Reconfigure all the VRFs
         self.create_vrf_and_assign_interfaces(4)
         # Verify
         for vrf_id in self.vrf_list:
         # Reconfigure all the VRFs
         self.create_vrf_and_assign_interfaces(4)
         # Verify
         for vrf_id in self.vrf_list:
-            self.assert_equal(self.verify_vrf(vrf_id),
-                              VRFState.configured, VRFState)
+            self.assert_equal(self.verify_vrf(vrf_id), VRFState.configured, VRFState)
         # Test
         self.run_verify_test()
         self.run_crosswise_vrf_test()
         # Test
         self.run_verify_test()
         self.run_crosswise_vrf_test()
@@ -620,16 +631,17 @@ class TestIP6VrfMultiInst(VppTestCase):
             self.reset_vrf_and_remove_from_vrf_list(self.vrf_list[0])
         # Verify
         for vrf_id in self.vrf_reset_list:
             self.reset_vrf_and_remove_from_vrf_list(self.vrf_list[0])
         # Verify
         for vrf_id in self.vrf_reset_list:
-            self.assert_equal(self.verify_vrf(vrf_id),
-                              VRFState.reset, VRFState)
+            self.assert_equal(self.verify_vrf(vrf_id), VRFState.reset, VRFState)
         vrf_list_length = len(self.vrf_list)
         self.assertEqual(
         vrf_list_length = len(self.vrf_list)
         self.assertEqual(
-            vrf_list_length, 0,
-            "List of configured VRFs is not empty: %s != 0" % vrf_list_length)
+            vrf_list_length,
+            0,
+            "List of configured VRFs is not empty: %s != 0" % vrf_list_length,
+        )
         # Test
         self.run_verify_test()
         self.run_crosswise_vrf_test()
 
 
         # Test
         self.run_verify_test()
         self.run_crosswise_vrf_test()
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index 1d3e872..d5347db 100644 (file)
@@ -26,7 +26,7 @@ N_PKTS_IN_STREAM = 300
 
 
 class TestECMP(VppTestCase):
 
 
 class TestECMP(VppTestCase):
-    """ Equal-cost multi-path routing Test Case """
+    """Equal-cost multi-path routing Test Case"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -92,11 +92,11 @@ class TestECMP(VppTestCase):
             ip_addr = IPv6Address(text_type(ip_addr_start))
             ip_max_len = 128
 
             ip_addr = IPv6Address(text_type(ip_addr_start))
             ip_max_len = 128
 
-        return str(ip_addr +
-                   random.randint(0, 2 ** (ip_max_len - ip_prefix_len) - 2))
+        return str(ip_addr + random.randint(0, 2 ** (ip_max_len - ip_prefix_len) - 2))
 
 
-    def create_stream(self, src_if, src_ip_start, dst_ip_start,
-                      ip_prefix_len, packet_sizes, ip_l=IP):
+    def create_stream(
+        self, src_if, src_ip_start, dst_ip_start, ip_prefix_len, packet_sizes, ip_l=IP
+    ):
         """Create input packet stream for defined interfaces.
 
         :param VppInterface src_if: Source Interface for packet stream.
         """Create input packet stream for defined interfaces.
 
         :param VppInterface src_if: Source Interface for packet stream.
@@ -112,10 +112,12 @@ class TestECMP(VppTestCase):
             payload = self.info_to_payload(info)
             src_ip = self.get_ip_address(src_ip_start, ip_prefix_len)
             dst_ip = self.get_ip_address(dst_ip_start, ip_prefix_len)
             payload = self.info_to_payload(info)
             src_ip = self.get_ip_address(src_ip_start, ip_prefix_len)
             dst_ip = self.get_ip_address(dst_ip_start, ip_prefix_len)
-            p = (Ether(dst=src_if.local_mac, src=src_if.remote_mac) /
-                 ip_l(src=src_ip, dst=dst_ip) /
-                 UDP(sport=1234, dport=1234) /
-                 Raw(payload))
+            p = (
+                Ether(dst=src_if.local_mac, src=src_if.remote_mac)
+                / ip_l(src=src_ip, dst=dst_ip)
+                / UDP(sport=1234, dport=1234)
+                / Raw(payload)
+            )
             info.data = p.copy()
             size = random.choice(packet_sizes)
             self.extend_packet(p, size)
             info.data = p.copy()
             size = random.choice(packet_sizes)
             self.extend_packet(p, size)
@@ -142,12 +144,17 @@ class TestECMP(VppTestCase):
                 payload_info = self.payload_to_info(packet[Raw])
                 packet_index = payload_info.index
                 ip_sent = self._packet_infos[packet_index].data[ip_l]
                 payload_info = self.payload_to_info(packet[Raw])
                 packet_index = payload_info.index
                 ip_sent = self._packet_infos[packet_index].data[ip_l]
-                self.logger.debug("Got packet on port %s: src=%u (id=%u)" %
-                                  (rx_if.name, payload_info.src, packet_index))
+                self.logger.debug(
+                    "Got packet on port %s: src=%u (id=%u)"
+                    % (rx_if.name, payload_info.src, packet_index)
+                )
                 # Check standard fields
                 # Check standard fields
-                self.assertIn(packet.dst, rx_if._hosts_by_mac,
-                              "Destination MAC address %s shouldn't be routed "
-                              "via interface %s" % (packet.dst, rx_if.name))
+                self.assertIn(
+                    packet.dst,
+                    rx_if._hosts_by_mac,
+                    "Destination MAC address %s shouldn't be routed "
+                    "via interface %s" % (packet.dst, rx_if.name),
+                )
                 self.assertEqual(packet.src, rx_if.local_mac)
                 self.assertEqual(ip_received.src, ip_sent.src)
                 self.assertEqual(ip_received.dst, ip_sent.dst)
                 self.assertEqual(packet.src, rx_if.local_mac)
                 self.assertEqual(ip_received.src, ip_sent.src)
                 self.assertEqual(ip_received.dst, ip_sent.dst)
@@ -161,13 +168,15 @@ class TestECMP(VppTestCase):
         # We expect packet routed via all host of pg interface
         for host_mac in host_counters:
             nr = host_counters[host_mac]
         # We expect packet routed via all host of pg interface
         for host_mac in host_counters:
             nr = host_counters[host_mac]
-            self.assertNotEqual(
-                nr, 0, "No packet routed via host %s" % host_mac)
-            self.logger.info("%u packets routed via host %s of %s interface" %
-                             (nr, host_mac, rx_if.name))
+            self.assertNotEqual(nr, 0, "No packet routed via host %s" % host_mac)
+            self.logger.info(
+                "%u packets routed via host %s of %s interface"
+                % (nr, host_mac, rx_if.name)
+            )
             count += nr
             count += nr
-        self.logger.info("Total amount of %u packets routed via %s interface" %
-                         (count, rx_if.name))
+        self.logger.info(
+            "Total amount of %u packets routed via %s interface" % (count, rx_if.name)
+        )
 
         return count
 
 
         return count
 
@@ -184,28 +193,27 @@ class TestECMP(VppTestCase):
         for pg_if in self.pg_interfaces[1:]:
             for nh_host in pg_if.remote_hosts:
                 nh_host_ip = nh_host.ip4 if is_ipv6 == 0 else nh_host.ip6
         for pg_if in self.pg_interfaces[1:]:
             for nh_host in pg_if.remote_hosts:
                 nh_host_ip = nh_host.ip4 if is_ipv6 == 0 else nh_host.ip6
-                paths.append(VppRoutePath(nh_host_ip,
-                                          pg_if.sw_if_index))
+                paths.append(VppRoutePath(nh_host_ip, pg_if.sw_if_index))
 
         rip = VppIpRoute(self, dst_ip_net, dst_prefix_len, paths)
         rip.add_vpp_config()
 
         rip = VppIpRoute(self, dst_ip_net, dst_prefix_len, paths)
         rip.add_vpp_config()
-        self.logger.info("Route via %s on %s created" %
-                         (nh_host_ip, pg_if.name))
+        self.logger.info("Route via %s on %s created" % (nh_host_ip, pg_if.name))
 
         self.logger.debug(self.vapi.ppcli("show ip fib"))
         self.logger.debug(self.vapi.ppcli("show ip6 fib"))
 
     def test_ip_ecmp(self):
 
         self.logger.debug(self.vapi.ppcli("show ip fib"))
         self.logger.debug(self.vapi.ppcli("show ip6 fib"))
 
     def test_ip_ecmp(self):
-        """ IP equal-cost multi-path routing test """
+        """IP equal-cost multi-path routing test"""
 
 
-        src_ip_net = '16.0.0.1'
-        dst_ip_net = '32.0.0.1'
+        src_ip_net = "16.0.0.1"
+        dst_ip_net = "32.0.0.1"
         ip_prefix_len = 24
 
         self.create_ip_routes(dst_ip_net, ip_prefix_len)
 
         ip_prefix_len = 24
 
         self.create_ip_routes(dst_ip_net, ip_prefix_len)
 
-        pkts = self.create_stream(self.pg0, src_ip_net, dst_ip_net,
-                                  ip_prefix_len, self.pg_if_packet_sizes)
+        pkts = self.create_stream(
+            self.pg0, src_ip_net, dst_ip_net, ip_prefix_len, self.pg_if_packet_sizes
+        )
         self.pg0.add_stream(pkts)
 
         self.pg_enable_capture(self.pg_interfaces)
         self.pg0.add_stream(pkts)
 
         self.pg_enable_capture(self.pg_interfaces)
@@ -216,7 +224,8 @@ class TestECMP(VppTestCase):
         for pg_if in self.pg_interfaces[1:]:
             capture = pg_if._get_capture(timeout=1)
             self.assertNotEqual(
         for pg_if in self.pg_interfaces[1:]:
             capture = pg_if._get_capture(timeout=1)
             self.assertNotEqual(
-                len(capture), 0, msg="No packets captured on %s" % pg_if.name)
+                len(capture), 0, msg="No packets captured on %s" % pg_if.name
+            )
             rx_count += self.verify_capture(pg_if, capture)
         self.pg0.assert_nothing_captured(remark="IP packets forwarded on pg0")
 
             rx_count += self.verify_capture(pg_if, capture)
         self.pg0.assert_nothing_captured(remark="IP packets forwarded on pg0")
 
@@ -224,17 +233,22 @@ class TestECMP(VppTestCase):
         self.assertEqual(rx_count, len(pkts))
 
     def test_ip6_ecmp(self):
         self.assertEqual(rx_count, len(pkts))
 
     def test_ip6_ecmp(self):
-        """ IPv6 equal-cost multi-path routing test """
+        """IPv6 equal-cost multi-path routing test"""
 
 
-        src_ip_net = '3ffe:51::1'
-        dst_ip_net = '3ffe:71::1'
+        src_ip_net = "3ffe:51::1"
+        dst_ip_net = "3ffe:71::1"
         ip_prefix_len = 64
 
         self.create_ip_routes(dst_ip_net, ip_prefix_len, is_ipv6=1)
 
         pkts = self.create_stream(
         ip_prefix_len = 64
 
         self.create_ip_routes(dst_ip_net, ip_prefix_len, is_ipv6=1)
 
         pkts = self.create_stream(
-            self.pg0, src_ip_net, dst_ip_net,
-            ip_prefix_len, self.pg_if_packet_sizes, ip_l=IPv6)
+            self.pg0,
+            src_ip_net,
+            dst_ip_net,
+            ip_prefix_len,
+            self.pg_if_packet_sizes,
+            ip_l=IPv6,
+        )
         self.pg0.add_stream(pkts)
 
         self.pg_enable_capture(self.pg_interfaces)
         self.pg0.add_stream(pkts)
 
         self.pg_enable_capture(self.pg_interfaces)
@@ -245,7 +259,8 @@ class TestECMP(VppTestCase):
         for pg_if in self.pg_interfaces[1:]:
             capture = pg_if._get_capture(timeout=1)
             self.assertNotEqual(
         for pg_if in self.pg_interfaces[1:]:
             capture = pg_if._get_capture(timeout=1)
             self.assertNotEqual(
-                len(capture), 0, msg="No packets captured on %s" % pg_if.name)
+                len(capture), 0, msg="No packets captured on %s" % pg_if.name
+            )
             rx_count += self.verify_capture(pg_if, capture, ip_l=IPv6)
         self.pg0.assert_nothing_captured(remark="IP packets forwarded on pg0")
 
             rx_count += self.verify_capture(pg_if, capture, ip_l=IPv6)
         self.pg0.assert_nothing_captured(remark="IP packets forwarded on pg0")
 
@@ -253,5 +268,5 @@ class TestECMP(VppTestCase):
         self.assertEqual(rx_count, len(pkts))
 
 
         self.assertEqual(rx_count, len(pkts))
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index 50ac01b..c3ac16c 100644 (file)
@@ -5,8 +5,14 @@ import unittest
 from framework import tag_fixme_vpp_workers
 from framework import VppTestCase, VppTestRunner
 from vpp_ip import DpoProto
 from framework import tag_fixme_vpp_workers
 from framework import VppTestCase, VppTestRunner
 from vpp_ip import DpoProto
-from vpp_ip_route import VppIpMRoute, VppMRoutePath, VppMFibSignal, \
-    VppIpTable, FibPathProto, FibPathType
+from vpp_ip_route import (
+    VppIpMRoute,
+    VppMRoutePath,
+    VppMFibSignal,
+    VppIpTable,
+    FibPathProto,
+    FibPathType,
+)
 from vpp_gre_interface import VppGreInterface
 from vpp_papi import VppEnum
 
 from vpp_gre_interface import VppGreInterface
 from vpp_papi import VppEnum
 
@@ -26,7 +32,7 @@ N_PKTS_IN_STREAM = 91
 
 
 class TestMFIB(VppTestCase):
 
 
 class TestMFIB(VppTestCase):
-    """ MFIB Test Case """
+    """MFIB Test Case"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -40,7 +46,7 @@ class TestMFIB(VppTestCase):
         super(TestMFIB, self).setUp()
 
     def test_mfib(self):
         super(TestMFIB, self).setUp()
 
     def test_mfib(self):
-        """ MFIB Unit Tests """
+        """MFIB Unit Tests"""
         error = self.vapi.cli("test mfib")
 
         if error:
         error = self.vapi.cli("test mfib")
 
         if error:
@@ -50,7 +56,7 @@ class TestMFIB(VppTestCase):
 
 @tag_fixme_vpp_workers
 class TestIPMcast(VppTestCase):
 
 @tag_fixme_vpp_workers
 class TestIPMcast(VppTestCase):
-    """ IP Multicast Test Case """
+    """IP Multicast Test Case"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -98,12 +104,14 @@ class TestIPMcast(VppTestCase):
     def create_stream_ip4(self, src_if, src_ip, dst_ip, payload_size=0):
         pkts = []
         # default to small packet sizes
     def create_stream_ip4(self, src_if, src_ip, dst_ip, payload_size=0):
         pkts = []
         # default to small packet sizes
-        p = (Ether(dst=getmacbyip(dst_ip), src=src_if.remote_mac) /
-             IP(src=src_ip, dst=dst_ip) /
-             UDP(sport=1234, dport=1234))
+        p = (
+            Ether(dst=getmacbyip(dst_ip), src=src_if.remote_mac)
+            / IP(src=src_ip, dst=dst_ip)
+            / UDP(sport=1234, dport=1234)
+        )
         if not payload_size:
             payload_size = 64 - len(p)
         if not payload_size:
             payload_size = 64 - len(p)
-            p = p / Raw(b'\xa5' * payload_size)
+            p = p / Raw(b"\xa5" * payload_size)
 
         for i in range(0, N_PKTS_IN_STREAM):
             pkts.append(p)
 
         for i in range(0, N_PKTS_IN_STREAM):
             pkts.append(p)
@@ -114,10 +122,12 @@ class TestIPMcast(VppTestCase):
         for i in range(0, N_PKTS_IN_STREAM):
             info = self.create_packet_info(src_if, src_if)
             payload = self.info_to_payload(info)
         for i in range(0, N_PKTS_IN_STREAM):
             info = self.create_packet_info(src_if, src_if)
             payload = self.info_to_payload(info)
-            p = (Ether(dst=getmacbyip6(dst_ip), src=src_if.remote_mac) /
-                 IPv6(src=src_ip, dst=dst_ip) /
-                 UDP(sport=1234, dport=1234) /
-                 Raw(payload))
+            p = (
+                Ether(dst=getmacbyip6(dst_ip), src=src_if.remote_mac)
+                / IPv6(src=src_ip, dst=dst_ip)
+                / UDP(sport=1234, dport=1234)
+                / Raw(payload)
+            )
             info.data = p.copy()
             pkts.append(p)
         return pkts
             info.data = p.copy()
             pkts.append(p)
         return pkts
@@ -126,7 +136,7 @@ class TestIPMcast(VppTestCase):
         if not len(capture) == len(sent):
             # filter out any IPv6 RAs from the capture
             for p in capture:
         if not len(capture) == len(sent):
             # filter out any IPv6 RAs from the capture
             for p in capture:
-                if (p.haslayer(IPv6)):
+                if p.haslayer(IPv6):
                     capture.remove(p)
         return capture
 
                     capture.remove(p)
         return capture
 
@@ -186,7 +196,7 @@ class TestIPMcast(VppTestCase):
             self.assertEqual(rx_ip.hlim + 1, tx_ip.hlim)
 
     def test_ip_mcast(self):
             self.assertEqual(rx_ip.hlim + 1, tx_ip.hlim)
 
     def test_ip_mcast(self):
-        """ IP Multicast Replication """
+        """IP Multicast Replication"""
 
         MRouteItfFlags = VppEnum.vl_api_mfib_itf_flags_t
         MRouteEntryFlags = VppEnum.vl_api_mfib_entry_flags_t
 
         MRouteItfFlags = VppEnum.vl_api_mfib_itf_flags_t
         MRouteEntryFlags = VppEnum.vl_api_mfib_entry_flags_t
@@ -210,9 +220,11 @@ class TestIPMcast(VppTestCase):
         self.pg_start()
 
         self.pg0.assert_nothing_captured(
         self.pg_start()
 
         self.pg0.assert_nothing_captured(
-            remark="IP multicast packets forwarded on default route")
+            remark="IP multicast packets forwarded on default route"
+        )
         count = self.statistics.get_err_counter(
         count = self.statistics.get_err_counter(
-            "/err/ip4-input/Multicast RPF check failed")
+            "/err/ip4-input/Multicast RPF check failed"
+        )
         self.assertEqual(count, len(tx))
 
         #
         self.assertEqual(count, len(tx))
 
         #
@@ -224,24 +236,36 @@ class TestIPMcast(VppTestCase):
         route_232_1_1_1 = VppIpMRoute(
             self,
             "0.0.0.0",
         route_232_1_1_1 = VppIpMRoute(
             self,
             "0.0.0.0",
-            "232.1.1.1", 32,
+            "232.1.1.1",
+            32,
             MRouteEntryFlags.MFIB_API_ENTRY_FLAG_NONE,
             MRouteEntryFlags.MFIB_API_ENTRY_FLAG_NONE,
-            [VppMRoutePath(self.pg0.sw_if_index,
-                           MRouteItfFlags.MFIB_API_ITF_FLAG_ACCEPT),
-             VppMRoutePath(self.pg1.sw_if_index,
-                           MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD),
-             VppMRoutePath(self.pg2.sw_if_index,
-                           MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD),
-             VppMRoutePath(self.pg3.sw_if_index,
-                           MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD),
-             VppMRoutePath(self.pg4.sw_if_index,
-                           MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD),
-             VppMRoutePath(self.pg5.sw_if_index,
-                           MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD),
-             VppMRoutePath(self.pg6.sw_if_index,
-                           MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD),
-             VppMRoutePath(self.pg7.sw_if_index,
-                           MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD)])
+            [
+                VppMRoutePath(
+                    self.pg0.sw_if_index, MRouteItfFlags.MFIB_API_ITF_FLAG_ACCEPT
+                ),
+                VppMRoutePath(
+                    self.pg1.sw_if_index, MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD
+                ),
+                VppMRoutePath(
+                    self.pg2.sw_if_index, MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD
+                ),
+                VppMRoutePath(
+                    self.pg3.sw_if_index, MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD
+                ),
+                VppMRoutePath(
+                    self.pg4.sw_if_index, MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD
+                ),
+                VppMRoutePath(
+                    self.pg5.sw_if_index, MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD
+                ),
+                VppMRoutePath(
+                    self.pg6.sw_if_index, MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD
+                ),
+                VppMRoutePath(
+                    self.pg7.sw_if_index, MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD
+                ),
+            ],
+        )
         route_232_1_1_1.add_vpp_config()
 
         #
         route_232_1_1_1.add_vpp_config()
 
         #
@@ -251,14 +275,21 @@ class TestIPMcast(VppTestCase):
         route_1_1_1_1_232_1_1_1 = VppIpMRoute(
             self,
             "1.1.1.1",
         route_1_1_1_1_232_1_1_1 = VppIpMRoute(
             self,
             "1.1.1.1",
-            "232.1.1.1", 27,  # any grp-len is ok when src is set
+            "232.1.1.1",
+            27,  # any grp-len is ok when src is set
             MRouteEntryFlags.MFIB_API_ENTRY_FLAG_NONE,
             MRouteEntryFlags.MFIB_API_ENTRY_FLAG_NONE,
-            [VppMRoutePath(self.pg0.sw_if_index,
-                           MRouteItfFlags.MFIB_API_ITF_FLAG_ACCEPT),
-             VppMRoutePath(self.pg1.sw_if_index,
-                           MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD),
-             VppMRoutePath(self.pg2.sw_if_index,
-                           MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD)])
+            [
+                VppMRoutePath(
+                    self.pg0.sw_if_index, MRouteItfFlags.MFIB_API_ITF_FLAG_ACCEPT
+                ),
+                VppMRoutePath(
+                    self.pg1.sw_if_index, MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD
+                ),
+                VppMRoutePath(
+                    self.pg2.sw_if_index, MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD
+                ),
+            ],
+        )
         route_1_1_1_1_232_1_1_1.add_vpp_config()
 
         #
         route_1_1_1_1_232_1_1_1.add_vpp_config()
 
         #
@@ -269,16 +300,25 @@ class TestIPMcast(VppTestCase):
         route_1_1_1_1_232_1_1_2 = VppIpMRoute(
             self,
             "1.1.1.1",
         route_1_1_1_1_232_1_1_2 = VppIpMRoute(
             self,
             "1.1.1.1",
-            "232.1.1.2", 64,
+            "232.1.1.2",
+            64,
             MRouteEntryFlags.MFIB_API_ENTRY_FLAG_NONE,
             MRouteEntryFlags.MFIB_API_ENTRY_FLAG_NONE,
-            [VppMRoutePath(self.pg0.sw_if_index,
-                           MRouteItfFlags.MFIB_API_ITF_FLAG_ACCEPT),
-             VppMRoutePath(self.pg1.sw_if_index,
-                           MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD,
-                           nh=self.pg1.remote_ip4),
-             VppMRoutePath(self.pg2.sw_if_index,
-                           MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD,
-                           nh=self.pg2.remote_ip4)])
+            [
+                VppMRoutePath(
+                    self.pg0.sw_if_index, MRouteItfFlags.MFIB_API_ITF_FLAG_ACCEPT
+                ),
+                VppMRoutePath(
+                    self.pg1.sw_if_index,
+                    MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD,
+                    nh=self.pg1.remote_ip4,
+                ),
+                VppMRoutePath(
+                    self.pg2.sw_if_index,
+                    MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD,
+                    nh=self.pg2.remote_ip4,
+                ),
+            ],
+        )
         route_1_1_1_1_232_1_1_2.add_vpp_config()
 
         #
         route_1_1_1_1_232_1_1_2.add_vpp_config()
 
         #
@@ -288,12 +328,18 @@ class TestIPMcast(VppTestCase):
         route_232 = VppIpMRoute(
             self,
             "0.0.0.0",
         route_232 = VppIpMRoute(
             self,
             "0.0.0.0",
-            "232.0.0.0", 8,
+            "232.0.0.0",
+            8,
             MRouteEntryFlags.MFIB_API_ENTRY_FLAG_NONE,
             MRouteEntryFlags.MFIB_API_ENTRY_FLAG_NONE,
-            [VppMRoutePath(self.pg0.sw_if_index,
-                           MRouteItfFlags.MFIB_API_ITF_FLAG_ACCEPT),
-             VppMRoutePath(self.pg1.sw_if_index,
-                           MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD)])
+            [
+                VppMRoutePath(
+                    self.pg0.sw_if_index, MRouteItfFlags.MFIB_API_ITF_FLAG_ACCEPT
+                ),
+                VppMRoutePath(
+                    self.pg1.sw_if_index, MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD
+                ),
+            ],
+        )
         route_232.add_vpp_config()
 
         #
         route_232.add_vpp_config()
 
         #
@@ -307,26 +353,22 @@ class TestIPMcast(VppTestCase):
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
-        self.assertEqual(route_1_1_1_1_232_1_1_1.get_stats()['packets'],
-                         len(tx))
+        self.assertEqual(route_1_1_1_1_232_1_1_1.get_stats()["packets"], len(tx))
 
         # We expect replications on Pg1->7
         self.verify_capture_ip4(self.pg1, tx)
         self.verify_capture_ip4(self.pg2, tx)
 
         # no replications on Pg0
 
         # We expect replications on Pg1->7
         self.verify_capture_ip4(self.pg1, tx)
         self.verify_capture_ip4(self.pg2, tx)
 
         # no replications on Pg0
-        self.pg0.assert_nothing_captured(
-            remark="IP multicast packets forwarded on PG0")
-        self.pg3.assert_nothing_captured(
-            remark="IP multicast packets forwarded on PG3")
+        self.pg0.assert_nothing_captured(remark="IP multicast packets forwarded on PG0")
+        self.pg3.assert_nothing_captured(remark="IP multicast packets forwarded on PG3")
 
         #
         # a stream that matches the route for (1.1.1.1,232.1.1.1)
         #  large packets
         #
         self.vapi.cli("clear trace")
 
         #
         # a stream that matches the route for (1.1.1.1,232.1.1.1)
         #  large packets
         #
         self.vapi.cli("clear trace")
-        tx = self.create_stream_ip4(self.pg0, "1.1.1.1", "232.1.1.1",
-                                    payload_size=1024)
+        tx = self.create_stream_ip4(self.pg0, "1.1.1.1", "232.1.1.1", payload_size=1024)
         self.pg0.add_stream(tx)
 
         self.pg_enable_capture(self.pg_interfaces)
         self.pg0.add_stream(tx)
 
         self.pg_enable_capture(self.pg_interfaces)
@@ -336,14 +378,11 @@ class TestIPMcast(VppTestCase):
         self.verify_capture_ip4(self.pg1, tx)
         self.verify_capture_ip4(self.pg2, tx)
 
         self.verify_capture_ip4(self.pg1, tx)
         self.verify_capture_ip4(self.pg2, tx)
 
-        self.assertEqual(route_1_1_1_1_232_1_1_1.get_stats()['packets'],
-                         2*len(tx))
+        self.assertEqual(route_1_1_1_1_232_1_1_1.get_stats()["packets"], 2 * len(tx))
 
         # no replications on Pg0
 
         # no replications on Pg0
-        self.pg0.assert_nothing_captured(
-            remark="IP multicast packets forwarded on PG0")
-        self.pg3.assert_nothing_captured(
-            remark="IP multicast packets forwarded on PG3")
+        self.pg0.assert_nothing_captured(remark="IP multicast packets forwarded on PG0")
+        self.pg3.assert_nothing_captured(remark="IP multicast packets forwarded on PG3")
 
         #
         # a stream to the unicast next-hops
 
         #
         # a stream to the unicast next-hops
@@ -360,10 +399,8 @@ class TestIPMcast(VppTestCase):
         self.verify_capture_ip4(self.pg2, tx, dst_mac=self.pg2.remote_mac)
 
         # no replications on Pg0 nor pg3
         self.verify_capture_ip4(self.pg2, tx, dst_mac=self.pg2.remote_mac)
 
         # no replications on Pg0 nor pg3
-        self.pg0.assert_nothing_captured(
-            remark="IP multicast packets forwarded on PG0")
-        self.pg3.assert_nothing_captured(
-            remark="IP multicast packets forwarded on PG3")
+        self.pg0.assert_nothing_captured(remark="IP multicast packets forwarded on PG0")
+        self.pg3.assert_nothing_captured(remark="IP multicast packets forwarded on PG3")
 
         #
         # a stream that matches the route for (*,232.0.0.0/8)
 
         #
         # a stream that matches the route for (*,232.0.0.0/8)
@@ -379,15 +416,12 @@ class TestIPMcast(VppTestCase):
 
         # We expect replications on Pg1 only
         self.verify_capture_ip4(self.pg1, tx)
 
         # We expect replications on Pg1 only
         self.verify_capture_ip4(self.pg1, tx)
-        self.assertEqual(route_232.get_stats()['packets'], len(tx))
+        self.assertEqual(route_232.get_stats()["packets"], len(tx))
 
         # no replications on Pg0, Pg2 not Pg3
 
         # no replications on Pg0, Pg2 not Pg3
-        self.pg0.assert_nothing_captured(
-            remark="IP multicast packets forwarded on PG0")
-        self.pg2.assert_nothing_captured(
-            remark="IP multicast packets forwarded on PG2")
-        self.pg3.assert_nothing_captured(
-            remark="IP multicast packets forwarded on PG3")
+        self.pg0.assert_nothing_captured(remark="IP multicast packets forwarded on PG0")
+        self.pg2.assert_nothing_captured(remark="IP multicast packets forwarded on PG2")
+        self.pg3.assert_nothing_captured(remark="IP multicast packets forwarded on PG3")
 
         #
         # a stream that matches the route for (*,232.1.1.1)
 
         #
         # a stream that matches the route for (*,232.1.1.1)
@@ -409,8 +443,7 @@ class TestIPMcast(VppTestCase):
         self.verify_capture_ip4(self.pg7, tx)
 
         # no replications on Pg0
         self.verify_capture_ip4(self.pg7, tx)
 
         # no replications on Pg0
-        self.pg0.assert_nothing_captured(
-            remark="IP multicast packets forwarded on PG0")
+        self.pg0.assert_nothing_captured(remark="IP multicast packets forwarded on PG0")
 
         self.vapi.cli("packet mac-filter pg0 off")
         self.vapi.cli("packet mac-filter pg1 off")
 
         self.vapi.cli("packet mac-filter pg0 off")
         self.vapi.cli("packet mac-filter pg1 off")
@@ -421,7 +454,7 @@ class TestIPMcast(VppTestCase):
         self.vapi.cli("packet mac-filter pg7 off")
 
     def test_ip6_mcast(self):
         self.vapi.cli("packet mac-filter pg7 off")
 
     def test_ip6_mcast(self):
-        """ IPv6 Multicast Replication """
+        """IPv6 Multicast Replication"""
 
         MRouteItfFlags = VppEnum.vl_api_mfib_itf_flags_t
         MRouteEntryFlags = VppEnum.vl_api_mfib_entry_flags_t
 
         MRouteItfFlags = VppEnum.vl_api_mfib_itf_flags_t
         MRouteEntryFlags = VppEnum.vl_api_mfib_entry_flags_t
@@ -444,7 +477,8 @@ class TestIPMcast(VppTestCase):
         self.pg_start()
 
         self.pg0.assert_nothing_captured(
         self.pg_start()
 
         self.pg0.assert_nothing_captured(
-            remark="IPv6 multicast packets forwarded on default route")
+            remark="IPv6 multicast packets forwarded on default route"
+        )
 
         #
         # A (*,G).
 
         #
         # A (*,G).
@@ -453,20 +487,32 @@ class TestIPMcast(VppTestCase):
         route_ff01_1 = VppIpMRoute(
             self,
             "::",
         route_ff01_1 = VppIpMRoute(
             self,
             "::",
-            "ff01::1", 128,
+            "ff01::1",
+            128,
             MRouteEntryFlags.MFIB_API_ENTRY_FLAG_NONE,
             MRouteEntryFlags.MFIB_API_ENTRY_FLAG_NONE,
-            [VppMRoutePath(self.pg0.sw_if_index,
-                           MRouteItfFlags.MFIB_API_ITF_FLAG_ACCEPT,
-                           proto=FibPathProto.FIB_PATH_NH_PROTO_IP6),
-             VppMRoutePath(self.pg1.sw_if_index,
-                           MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD,
-                           proto=FibPathProto.FIB_PATH_NH_PROTO_IP6),
-             VppMRoutePath(self.pg2.sw_if_index,
-                           MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD,
-                           proto=FibPathProto.FIB_PATH_NH_PROTO_IP6),
-             VppMRoutePath(self.pg3.sw_if_index,
-                           MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD,
-                           proto=FibPathProto.FIB_PATH_NH_PROTO_IP6)])
+            [
+                VppMRoutePath(
+                    self.pg0.sw_if_index,
+                    MRouteItfFlags.MFIB_API_ITF_FLAG_ACCEPT,
+                    proto=FibPathProto.FIB_PATH_NH_PROTO_IP6,
+                ),
+                VppMRoutePath(
+                    self.pg1.sw_if_index,
+                    MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD,
+                    proto=FibPathProto.FIB_PATH_NH_PROTO_IP6,
+                ),
+                VppMRoutePath(
+                    self.pg2.sw_if_index,
+                    MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD,
+                    proto=FibPathProto.FIB_PATH_NH_PROTO_IP6,
+                ),
+                VppMRoutePath(
+                    self.pg3.sw_if_index,
+                    MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD,
+                    proto=FibPathProto.FIB_PATH_NH_PROTO_IP6,
+                ),
+            ],
+        )
         route_ff01_1.add_vpp_config()
 
         #
         route_ff01_1.add_vpp_config()
 
         #
@@ -476,17 +522,27 @@ class TestIPMcast(VppTestCase):
         route_2001_ff01_1 = VppIpMRoute(
             self,
             "2001::1",
         route_2001_ff01_1 = VppIpMRoute(
             self,
             "2001::1",
-            "ff01::1", 0,  # any grp-len is ok when src is set
+            "ff01::1",
+            0,  # any grp-len is ok when src is set
             MRouteEntryFlags.MFIB_API_ENTRY_FLAG_NONE,
             MRouteEntryFlags.MFIB_API_ENTRY_FLAG_NONE,
-            [VppMRoutePath(self.pg0.sw_if_index,
-                           MRouteItfFlags.MFIB_API_ITF_FLAG_ACCEPT,
-                           proto=FibPathProto.FIB_PATH_NH_PROTO_IP6),
-             VppMRoutePath(self.pg1.sw_if_index,
-                           MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD,
-                           proto=FibPathProto.FIB_PATH_NH_PROTO_IP6),
-             VppMRoutePath(self.pg2.sw_if_index,
-                           MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD,
-                           proto=FibPathProto.FIB_PATH_NH_PROTO_IP6)])
+            [
+                VppMRoutePath(
+                    self.pg0.sw_if_index,
+                    MRouteItfFlags.MFIB_API_ITF_FLAG_ACCEPT,
+                    proto=FibPathProto.FIB_PATH_NH_PROTO_IP6,
+                ),
+                VppMRoutePath(
+                    self.pg1.sw_if_index,
+                    MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD,
+                    proto=FibPathProto.FIB_PATH_NH_PROTO_IP6,
+                ),
+                VppMRoutePath(
+                    self.pg2.sw_if_index,
+                    MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD,
+                    proto=FibPathProto.FIB_PATH_NH_PROTO_IP6,
+                ),
+            ],
+        )
         route_2001_ff01_1.add_vpp_config()
 
         #
         route_2001_ff01_1.add_vpp_config()
 
         #
@@ -496,14 +552,22 @@ class TestIPMcast(VppTestCase):
         route_ff01 = VppIpMRoute(
             self,
             "::",
         route_ff01 = VppIpMRoute(
             self,
             "::",
-            "ff01::", 16,
+            "ff01::",
+            16,
             MRouteEntryFlags.MFIB_API_ENTRY_FLAG_NONE,
             MRouteEntryFlags.MFIB_API_ENTRY_FLAG_NONE,
-            [VppMRoutePath(self.pg0.sw_if_index,
-                           MRouteItfFlags.MFIB_API_ITF_FLAG_ACCEPT,
-                           proto=FibPathProto.FIB_PATH_NH_PROTO_IP6),
-             VppMRoutePath(self.pg1.sw_if_index,
-                           MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD,
-                           proto=FibPathProto.FIB_PATH_NH_PROTO_IP6)])
+            [
+                VppMRoutePath(
+                    self.pg0.sw_if_index,
+                    MRouteItfFlags.MFIB_API_ITF_FLAG_ACCEPT,
+                    proto=FibPathProto.FIB_PATH_NH_PROTO_IP6,
+                ),
+                VppMRoutePath(
+                    self.pg1.sw_if_index,
+                    MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD,
+                    proto=FibPathProto.FIB_PATH_NH_PROTO_IP6,
+                ),
+            ],
+        )
         route_ff01.add_vpp_config()
 
         #
         route_ff01.add_vpp_config()
 
         #
@@ -514,7 +578,8 @@ class TestIPMcast(VppTestCase):
         tx = self.create_stream_ip6(self.pg1, "2002::1", "ff01:2::255")
         self.send_and_assert_no_replies(self.pg1, tx, "RPF miss")
         count = self.statistics.get_err_counter(
         tx = self.create_stream_ip6(self.pg1, "2002::1", "ff01:2::255")
         self.send_and_assert_no_replies(self.pg1, tx, "RPF miss")
         count = self.statistics.get_err_counter(
-            "/err/ip6-input/Multicast RPF check failed")
+            "/err/ip6-input/Multicast RPF check failed"
+        )
         self.assertEqual(count, 2 * len(tx))
 
         #
         self.assertEqual(count, 2 * len(tx))
 
         #
@@ -532,12 +597,9 @@ class TestIPMcast(VppTestCase):
         self.verify_capture_ip6(self.pg1, tx)
 
         # no replications on Pg0, Pg3
         self.verify_capture_ip6(self.pg1, tx)
 
         # no replications on Pg0, Pg3
-        self.pg0.assert_nothing_captured(
-            remark="IP multicast packets forwarded on PG0")
-        self.pg2.assert_nothing_captured(
-            remark="IP multicast packets forwarded on PG2")
-        self.pg3.assert_nothing_captured(
-            remark="IP multicast packets forwarded on PG3")
+        self.pg0.assert_nothing_captured(remark="IP multicast packets forwarded on PG0")
+        self.pg2.assert_nothing_captured(remark="IP multicast packets forwarded on PG2")
+        self.pg3.assert_nothing_captured(remark="IP multicast packets forwarded on PG3")
 
         #
         # Bounce the interface and it should still work
 
         #
         # Bounce the interface and it should still work
@@ -547,7 +609,8 @@ class TestIPMcast(VppTestCase):
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg1.assert_nothing_captured(
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg1.assert_nothing_captured(
-            remark="IP multicast packets forwarded on down PG1")
+            remark="IP multicast packets forwarded on down PG1"
+        )
 
         self.pg1.admin_up()
         self.pg0.add_stream(tx)
 
         self.pg1.admin_up()
         self.pg0.add_stream(tx)
@@ -572,7 +635,8 @@ class TestIPMcast(VppTestCase):
 
         # no replications on Pg0
         self.pg0.assert_nothing_captured(
 
         # no replications on Pg0
         self.pg0.assert_nothing_captured(
-            remark="IPv6 multicast packets forwarded on PG0")
+            remark="IPv6 multicast packets forwarded on PG0"
+        )
 
         #
         # a stream that matches the route for (2001::1, ff00::1)
 
         #
         # a stream that matches the route for (2001::1, ff00::1)
@@ -589,10 +653,8 @@ class TestIPMcast(VppTestCase):
         self.verify_capture_ip6(self.pg2, tx)
 
         # no replications on Pg0, Pg3
         self.verify_capture_ip6(self.pg2, tx)
 
         # no replications on Pg0, Pg3
-        self.pg0.assert_nothing_captured(
-            remark="IP multicast packets forwarded on PG0")
-        self.pg3.assert_nothing_captured(
-            remark="IP multicast packets forwarded on PG3")
+        self.pg0.assert_nothing_captured(remark="IP multicast packets forwarded on PG0")
+        self.pg3.assert_nothing_captured(remark="IP multicast packets forwarded on PG3")
 
         self.vapi.cli("packet mac-filter pg0 off")
         self.vapi.cli("packet mac-filter pg1 off")
 
         self.vapi.cli("packet mac-filter pg0 off")
         self.vapi.cli("packet mac-filter pg1 off")
@@ -604,9 +666,7 @@ class TestIPMcast(VppTestCase):
 
     def _mcast_connected_send_stream(self, dst_ip):
         self.vapi.cli("clear trace")
 
     def _mcast_connected_send_stream(self, dst_ip):
         self.vapi.cli("clear trace")
-        tx = self.create_stream_ip4(self.pg0,
-                                    self.pg0.remote_ip4,
-                                    dst_ip)
+        tx = self.create_stream_ip4(self.pg0, self.pg0.remote_ip4, dst_ip)
         self.pg0.add_stream(tx)
 
         self.pg_enable_capture(self.pg_interfaces)
         self.pg0.add_stream(tx)
 
         self.pg_enable_capture(self.pg_interfaces)
@@ -618,7 +678,7 @@ class TestIPMcast(VppTestCase):
         return tx
 
     def test_ip_mcast_connected(self):
         return tx
 
     def test_ip_mcast_connected(self):
-        """ IP Multicast Connected Source check """
+        """IP Multicast Connected Source check"""
 
         MRouteItfFlags = VppEnum.vl_api_mfib_itf_flags_t
         MRouteEntryFlags = VppEnum.vl_api_mfib_entry_flags_t
 
         MRouteItfFlags = VppEnum.vl_api_mfib_itf_flags_t
         MRouteEntryFlags = VppEnum.vl_api_mfib_entry_flags_t
@@ -630,16 +690,23 @@ class TestIPMcast(VppTestCase):
         route_232_1_1_1 = VppIpMRoute(
             self,
             "0.0.0.0",
         route_232_1_1_1 = VppIpMRoute(
             self,
             "0.0.0.0",
-            "232.1.1.1", 32,
+            "232.1.1.1",
+            32,
             MRouteEntryFlags.MFIB_API_ENTRY_FLAG_NONE,
             MRouteEntryFlags.MFIB_API_ENTRY_FLAG_NONE,
-            [VppMRoutePath(self.pg0.sw_if_index,
-                           MRouteItfFlags.MFIB_API_ITF_FLAG_ACCEPT),
-             VppMRoutePath(self.pg1.sw_if_index,
-                           MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD)])
+            [
+                VppMRoutePath(
+                    self.pg0.sw_if_index, MRouteItfFlags.MFIB_API_ITF_FLAG_ACCEPT
+                ),
+                VppMRoutePath(
+                    self.pg1.sw_if_index, MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD
+                ),
+            ],
+        )
 
         route_232_1_1_1.add_vpp_config()
         route_232_1_1_1.update_entry_flags(
 
         route_232_1_1_1.add_vpp_config()
         route_232_1_1_1.update_entry_flags(
-            MRouteEntryFlags.MFIB_API_ENTRY_FLAG_CONNECTED)
+            MRouteEntryFlags.MFIB_API_ENTRY_FLAG_CONNECTED
+        )
 
         #
         # Now the (*,G) is present, send from connected source
 
         #
         # Now the (*,G) is present, send from connected source
@@ -649,10 +716,9 @@ class TestIPMcast(VppTestCase):
         #
         # Constrct a representation of the signal we expect on pg0
         #
         #
         # Constrct a representation of the signal we expect on pg0
         #
-        signal_232_1_1_1_itf_0 = VppMFibSignal(self,
-                                               route_232_1_1_1,
-                                               self.pg0.sw_if_index,
-                                               tx[0])
+        signal_232_1_1_1_itf_0 = VppMFibSignal(
+            self, route_232_1_1_1, self.pg0.sw_if_index, tx[0]
+        )
 
         #
         # read the only expected signal
 
         #
         # read the only expected signal
@@ -680,24 +746,30 @@ class TestIPMcast(VppTestCase):
         route_232_1_1_2 = VppIpMRoute(
             self,
             "0.0.0.0",
         route_232_1_1_2 = VppIpMRoute(
             self,
             "0.0.0.0",
-            "232.1.1.2", 32,
+            "232.1.1.2",
+            32,
             MRouteEntryFlags.MFIB_API_ENTRY_FLAG_NONE,
             MRouteEntryFlags.MFIB_API_ENTRY_FLAG_NONE,
-            [VppMRoutePath(self.pg0.sw_if_index,
-                           MRouteItfFlags.MFIB_API_ITF_FLAG_ACCEPT),
-             VppMRoutePath(self.pg1.sw_if_index,
-                           MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD)])
+            [
+                VppMRoutePath(
+                    self.pg0.sw_if_index, MRouteItfFlags.MFIB_API_ITF_FLAG_ACCEPT
+                ),
+                VppMRoutePath(
+                    self.pg1.sw_if_index, MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD
+                ),
+            ],
+        )
 
         route_232_1_1_2.add_vpp_config()
         route_232_1_1_2.update_entry_flags(
 
         route_232_1_1_2.add_vpp_config()
         route_232_1_1_2.update_entry_flags(
-            MRouteEntryFlags.MFIB_API_ENTRY_FLAG_CONNECTED)
+            MRouteEntryFlags.MFIB_API_ENTRY_FLAG_CONNECTED
+        )
 
         #
         # Send traffic to both entries. One read should net us two signals
         #
 
         #
         # Send traffic to both entries. One read should net us two signals
         #
-        signal_232_1_1_2_itf_0 = VppMFibSignal(self,
-                                               route_232_1_1_2,
-                                               self.pg0.sw_if_index,
-                                               tx[0])
+        signal_232_1_1_2_itf_0 = VppMFibSignal(
+            self, route_232_1_1_2, self.pg0.sw_if_index, tx[0]
+        )
         tx = self._mcast_connected_send_stream("232.1.1.1")
         tx2 = self._mcast_connected_send_stream("232.1.1.2")
 
         tx = self._mcast_connected_send_stream("232.1.1.1")
         tx2 = self._mcast_connected_send_stream("232.1.1.2")
 
@@ -711,13 +783,11 @@ class TestIPMcast(VppTestCase):
         signal_232_1_1_1_itf_0.compare(signals[1])
         signal_232_1_1_2_itf_0.compare(signals[0])
 
         signal_232_1_1_1_itf_0.compare(signals[1])
         signal_232_1_1_2_itf_0.compare(signals[0])
 
-        route_232_1_1_1.update_entry_flags(
-            MRouteEntryFlags.MFIB_API_ENTRY_FLAG_NONE)
-        route_232_1_1_2.update_entry_flags(
-            MRouteEntryFlags.MFIB_API_ENTRY_FLAG_NONE)
+        route_232_1_1_1.update_entry_flags(MRouteEntryFlags.MFIB_API_ENTRY_FLAG_NONE)
+        route_232_1_1_2.update_entry_flags(MRouteEntryFlags.MFIB_API_ENTRY_FLAG_NONE)
 
     def test_ip_mcast_signal(self):
 
     def test_ip_mcast_signal(self):
-        """ IP Multicast Signal """
+        """IP Multicast Signal"""
 
         MRouteItfFlags = VppEnum.vl_api_mfib_itf_flags_t
         MRouteEntryFlags = VppEnum.vl_api_mfib_entry_flags_t
 
         MRouteItfFlags = VppEnum.vl_api_mfib_itf_flags_t
         MRouteEntryFlags = VppEnum.vl_api_mfib_entry_flags_t
@@ -729,17 +799,22 @@ class TestIPMcast(VppTestCase):
         route_232_1_1_1 = VppIpMRoute(
             self,
             "0.0.0.0",
         route_232_1_1_1 = VppIpMRoute(
             self,
             "0.0.0.0",
-            "232.1.1.1", 32,
+            "232.1.1.1",
+            32,
             MRouteEntryFlags.MFIB_API_ENTRY_FLAG_NONE,
             MRouteEntryFlags.MFIB_API_ENTRY_FLAG_NONE,
-            [VppMRoutePath(self.pg0.sw_if_index,
-                           MRouteItfFlags.MFIB_API_ITF_FLAG_ACCEPT),
-             VppMRoutePath(self.pg1.sw_if_index,
-                           MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD)])
+            [
+                VppMRoutePath(
+                    self.pg0.sw_if_index, MRouteItfFlags.MFIB_API_ITF_FLAG_ACCEPT
+                ),
+                VppMRoutePath(
+                    self.pg1.sw_if_index, MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD
+                ),
+            ],
+        )
 
         route_232_1_1_1.add_vpp_config()
 
 
         route_232_1_1_1.add_vpp_config()
 
-        route_232_1_1_1.update_entry_flags(
-            MRouteEntryFlags.MFIB_API_ENTRY_FLAG_SIGNAL)
+        route_232_1_1_1.update_entry_flags(MRouteEntryFlags.MFIB_API_ENTRY_FLAG_SIGNAL)
 
         #
         # Now the (*,G) is present, send from connected source
 
         #
         # Now the (*,G) is present, send from connected source
@@ -749,10 +824,9 @@ class TestIPMcast(VppTestCase):
         #
         # Constrct a representation of the signal we expect on pg0
         #
         #
         # Constrct a representation of the signal we expect on pg0
         #
-        signal_232_1_1_1_itf_0 = VppMFibSignal(self,
-                                               route_232_1_1_1,
-                                               self.pg0.sw_if_index,
-                                               tx[0])
+        signal_232_1_1_1_itf_0 = VppMFibSignal(
+            self, route_232_1_1_1, self.pg0.sw_if_index, tx[0]
+        )
 
         #
         # read the only expected signal
 
         #
         # read the only expected signal
@@ -779,8 +853,11 @@ class TestIPMcast(VppTestCase):
         #
         route_232_1_1_1.update_path_flags(
             self.pg0.sw_if_index,
         #
         route_232_1_1_1.update_path_flags(
             self.pg0.sw_if_index,
-            (MRouteItfFlags.MFIB_API_ITF_FLAG_ACCEPT |
-             MRouteItfFlags.MFIB_API_ITF_FLAG_NEGATE_SIGNAL))
+            (
+                MRouteItfFlags.MFIB_API_ITF_FLAG_ACCEPT
+                | MRouteItfFlags.MFIB_API_ITF_FLAG_NEGATE_SIGNAL
+            ),
+        )
 
         self.vapi.cli("clear trace")
         tx = self._mcast_connected_send_stream("232.1.1.1")
 
         self.vapi.cli("clear trace")
         tx = self._mcast_connected_send_stream("232.1.1.1")
@@ -792,8 +869,7 @@ class TestIPMcast(VppTestCase):
         # Clear the SIGNAL flag on the entry and the signals should
         # come back since the interface is still NEGATE-SIGNAL
         #
         # Clear the SIGNAL flag on the entry and the signals should
         # come back since the interface is still NEGATE-SIGNAL
         #
-        route_232_1_1_1.update_entry_flags(
-            MRouteEntryFlags.MFIB_API_ENTRY_FLAG_NONE)
+        route_232_1_1_1.update_entry_flags(MRouteEntryFlags.MFIB_API_ENTRY_FLAG_NONE)
 
         tx = self._mcast_connected_send_stream("232.1.1.1")
 
 
         tx = self._mcast_connected_send_stream("232.1.1.1")
 
@@ -806,15 +882,15 @@ class TestIPMcast(VppTestCase):
         # signals should stop
         #
         route_232_1_1_1.update_path_flags(
         # signals should stop
         #
         route_232_1_1_1.update_path_flags(
-            self.pg0.sw_if_index,
-            MRouteItfFlags.MFIB_API_ITF_FLAG_ACCEPT)
+            self.pg0.sw_if_index, MRouteItfFlags.MFIB_API_ITF_FLAG_ACCEPT
+        )
 
         tx = self._mcast_connected_send_stream("232.1.1.1")
         signals = self.vapi.mfib_signal_dump()
         self.assertEqual(0, len(signals))
 
     def test_ip_mcast_vrf(self):
 
         tx = self._mcast_connected_send_stream("232.1.1.1")
         signals = self.vapi.mfib_signal_dump()
         self.assertEqual(0, len(signals))
 
     def test_ip_mcast_vrf(self):
-        """ IP Multicast Replication in non-default table"""
+        """IP Multicast Replication in non-default table"""
 
         MRouteItfFlags = VppEnum.vl_api_mfib_itf_flags_t
         MRouteEntryFlags = VppEnum.vl_api_mfib_entry_flags_t
 
         MRouteItfFlags = VppEnum.vl_api_mfib_itf_flags_t
         MRouteEntryFlags = VppEnum.vl_api_mfib_entry_flags_t
@@ -826,15 +902,22 @@ class TestIPMcast(VppTestCase):
         route_1_1_1_1_232_1_1_1 = VppIpMRoute(
             self,
             "1.1.1.1",
         route_1_1_1_1_232_1_1_1 = VppIpMRoute(
             self,
             "1.1.1.1",
-            "232.1.1.1", 64,
+            "232.1.1.1",
+            64,
             MRouteEntryFlags.MFIB_API_ENTRY_FLAG_NONE,
             MRouteEntryFlags.MFIB_API_ENTRY_FLAG_NONE,
-            [VppMRoutePath(self.pg8.sw_if_index,
-                           MRouteItfFlags.MFIB_API_ITF_FLAG_ACCEPT),
-             VppMRoutePath(self.pg1.sw_if_index,
-                           MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD),
-             VppMRoutePath(self.pg2.sw_if_index,
-                           MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD)],
-            table_id=10)
+            [
+                VppMRoutePath(
+                    self.pg8.sw_if_index, MRouteItfFlags.MFIB_API_ITF_FLAG_ACCEPT
+                ),
+                VppMRoutePath(
+                    self.pg1.sw_if_index, MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD
+                ),
+                VppMRoutePath(
+                    self.pg2.sw_if_index, MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD
+                ),
+            ],
+            table_id=10,
+        )
         route_1_1_1_1_232_1_1_1.add_vpp_config()
 
         #
         route_1_1_1_1_232_1_1_1.add_vpp_config()
 
         #
@@ -858,14 +941,21 @@ class TestIPMcast(VppTestCase):
         route_0_0_0_0_224_0_0_5 = VppIpMRoute(
             self,
             "0.0.0.0",
         route_0_0_0_0_224_0_0_5 = VppIpMRoute(
             self,
             "0.0.0.0",
-            "224.0.0.5", 32,
+            "224.0.0.5",
+            32,
             MRouteEntryFlags.MFIB_API_ENTRY_FLAG_NONE,
             MRouteEntryFlags.MFIB_API_ENTRY_FLAG_NONE,
-            [VppMRoutePath(self.pg8.sw_if_index,
-                           MRouteItfFlags.MFIB_API_ITF_FLAG_ACCEPT),
-             VppMRoutePath(0xffffffff,
-                           MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD,
-                           type=FibPathType.FIB_PATH_TYPE_LOCAL)],
-            table_id=10)
+            [
+                VppMRoutePath(
+                    self.pg8.sw_if_index, MRouteItfFlags.MFIB_API_ITF_FLAG_ACCEPT
+                ),
+                VppMRoutePath(
+                    0xFFFFFFFF,
+                    MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD,
+                    type=FibPathType.FIB_PATH_TYPE_LOCAL,
+                ),
+            ],
+            table_id=10,
+        )
         route_0_0_0_0_224_0_0_5.add_vpp_config()
 
         #
         route_0_0_0_0_224_0_0_5.add_vpp_config()
 
         #
@@ -879,34 +969,33 @@ class TestIPMcast(VppTestCase):
         # send a ping to mcast address from peer on pg8
         #  expect a response
         #
         # send a ping to mcast address from peer on pg8
         #  expect a response
         #
-        icmp_id = 0xb
+        icmp_id = 0xB
         icmp_seq = 5
         icmp_seq = 5
-        icmp_load = b'\x0a' * 18
-        tx = (Ether(dst=getmacbyip("224.0.0.5"), src=self.pg8.remote_mac) /
-              IP(src=self.pg8.remote_ip4, dst="224.0.0.5") /
-              ICMP(id=icmp_id, seq=icmp_seq) /
-              Raw(load=icmp_load)) * 2
+        icmp_load = b"\x0a" * 18
+        tx = (
+            Ether(dst=getmacbyip("224.0.0.5"), src=self.pg8.remote_mac)
+            / IP(src=self.pg8.remote_ip4, dst="224.0.0.5")
+            / ICMP(id=icmp_id, seq=icmp_seq)
+            / Raw(load=icmp_load)
+        ) * 2
 
         self.send_and_expect(self.pg8, tx, self.pg8)
 
     def test_ip_mcast_gre(self):
 
         self.send_and_expect(self.pg8, tx, self.pg8)
 
     def test_ip_mcast_gre(self):
-        """ IP Multicast Replication over GRE"""
+        """IP Multicast Replication over GRE"""
 
         MRouteItfFlags = VppEnum.vl_api_mfib_itf_flags_t
         MRouteEntryFlags = VppEnum.vl_api_mfib_entry_flags_t
 
         gre_if_1 = VppGreInterface(
 
         MRouteItfFlags = VppEnum.vl_api_mfib_itf_flags_t
         MRouteEntryFlags = VppEnum.vl_api_mfib_entry_flags_t
 
         gre_if_1 = VppGreInterface(
-            self,
-            self.pg1.local_ip4,
-            self.pg1.remote_ip4).add_vpp_config()
+            self, self.pg1.local_ip4, self.pg1.remote_ip4
+        ).add_vpp_config()
         gre_if_2 = VppGreInterface(
         gre_if_2 = VppGreInterface(
-            self,
-            self.pg2.local_ip4,
-            self.pg2.remote_ip4).add_vpp_config()
+            self, self.pg2.local_ip4, self.pg2.remote_ip4
+        ).add_vpp_config()
         gre_if_3 = VppGreInterface(
         gre_if_3 = VppGreInterface(
-            self,
-            self.pg3.local_ip4,
-            self.pg3.remote_ip4).add_vpp_config()
+            self, self.pg3.local_ip4, self.pg3.remote_ip4
+        ).add_vpp_config()
 
         gre_if_1.admin_up()
         gre_if_1.config_ip4()
 
         gre_if_1.admin_up()
         gre_if_1.config_ip4()
@@ -922,28 +1011,35 @@ class TestIPMcast(VppTestCase):
         route_1_1_1_1_232_1_1_1 = VppIpMRoute(
             self,
             "1.1.1.1",
         route_1_1_1_1_232_1_1_1 = VppIpMRoute(
             self,
             "1.1.1.1",
-            "232.2.2.2", 64,
+            "232.2.2.2",
+            64,
             MRouteEntryFlags.MFIB_API_ENTRY_FLAG_NONE,
             MRouteEntryFlags.MFIB_API_ENTRY_FLAG_NONE,
-            [VppMRoutePath(gre_if_1.sw_if_index,
-                           MRouteItfFlags.MFIB_API_ITF_FLAG_ACCEPT),
-             VppMRoutePath(gre_if_2.sw_if_index,
-                           MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD),
-             VppMRoutePath(gre_if_3.sw_if_index,
-                           MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD)])
+            [
+                VppMRoutePath(
+                    gre_if_1.sw_if_index, MRouteItfFlags.MFIB_API_ITF_FLAG_ACCEPT
+                ),
+                VppMRoutePath(
+                    gre_if_2.sw_if_index, MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD
+                ),
+                VppMRoutePath(
+                    gre_if_3.sw_if_index, MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD
+                ),
+            ],
+        )
         route_1_1_1_1_232_1_1_1.add_vpp_config()
 
         #
         # a stream that matches the route for (1.1.1.1,232.2.2.2)
         #  small packets
         #
         route_1_1_1_1_232_1_1_1.add_vpp_config()
 
         #
         # a stream that matches the route for (1.1.1.1,232.2.2.2)
         #  small packets
         #
-        tx = (Ether(dst=self.pg1.local_mac,
-                    src=self.pg1.remote_mac) /
-              IP(src=self.pg1.remote_ip4,
-                 dst=self.pg1.local_ip4) /
-              GRE() /
-              IP(src="1.1.1.1", dst="232.2.2.2") /
-              UDP(sport=1234, dport=1234) /
-              Raw(b'\a5' * 64)) * 63
+        tx = (
+            Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac)
+            / IP(src=self.pg1.remote_ip4, dst=self.pg1.local_ip4)
+            / GRE()
+            / IP(src="1.1.1.1", dst="232.2.2.2")
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\a5" * 64)
+        ) * 63
 
         self.vapi.cli("clear trace")
         self.pg1.add_stream(tx)
 
         self.vapi.cli("clear trace")
         self.pg1.add_stream(tx)
@@ -966,23 +1062,20 @@ class TestIPMcast(VppTestCase):
             self.assert_packet_checksums_valid(rx)
 
     def test_ip6_mcast_gre(self):
             self.assert_packet_checksums_valid(rx)
 
     def test_ip6_mcast_gre(self):
-        """ IP6 Multicast Replication over GRE"""
+        """IP6 Multicast Replication over GRE"""
 
         MRouteItfFlags = VppEnum.vl_api_mfib_itf_flags_t
         MRouteEntryFlags = VppEnum.vl_api_mfib_entry_flags_t
 
         gre_if_1 = VppGreInterface(
 
         MRouteItfFlags = VppEnum.vl_api_mfib_itf_flags_t
         MRouteEntryFlags = VppEnum.vl_api_mfib_entry_flags_t
 
         gre_if_1 = VppGreInterface(
-            self,
-            self.pg1.local_ip4,
-            self.pg1.remote_ip4).add_vpp_config()
+            self, self.pg1.local_ip4, self.pg1.remote_ip4
+        ).add_vpp_config()
         gre_if_2 = VppGreInterface(
         gre_if_2 = VppGreInterface(
-            self,
-            self.pg2.local_ip4,
-            self.pg2.remote_ip4).add_vpp_config()
+            self, self.pg2.local_ip4, self.pg2.remote_ip4
+        ).add_vpp_config()
         gre_if_3 = VppGreInterface(
         gre_if_3 = VppGreInterface(
-            self,
-            self.pg3.local_ip4,
-            self.pg3.remote_ip4).add_vpp_config()
+            self, self.pg3.local_ip4, self.pg3.remote_ip4
+        ).add_vpp_config()
 
         gre_if_1.admin_up()
         gre_if_1.config_ip6()
 
         gre_if_1.admin_up()
         gre_if_1.config_ip6()
@@ -998,28 +1091,35 @@ class TestIPMcast(VppTestCase):
         route_1_1_FF_1 = VppIpMRoute(
             self,
             "1::1",
         route_1_1_FF_1 = VppIpMRoute(
             self,
             "1::1",
-            "FF00::1", 256,
+            "FF00::1",
+            256,
             MRouteEntryFlags.MFIB_API_ENTRY_FLAG_NONE,
             MRouteEntryFlags.MFIB_API_ENTRY_FLAG_NONE,
-            [VppMRoutePath(gre_if_1.sw_if_index,
-                           MRouteItfFlags.MFIB_API_ITF_FLAG_ACCEPT),
-             VppMRoutePath(gre_if_2.sw_if_index,
-                           MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD),
-             VppMRoutePath(gre_if_3.sw_if_index,
-                           MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD)])
+            [
+                VppMRoutePath(
+                    gre_if_1.sw_if_index, MRouteItfFlags.MFIB_API_ITF_FLAG_ACCEPT
+                ),
+                VppMRoutePath(
+                    gre_if_2.sw_if_index, MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD
+                ),
+                VppMRoutePath(
+                    gre_if_3.sw_if_index, MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD
+                ),
+            ],
+        )
         route_1_1_FF_1.add_vpp_config()
 
         #
         # a stream that matches the route for (1::1, FF::1)
         #  small packets
         #
         route_1_1_FF_1.add_vpp_config()
 
         #
         # a stream that matches the route for (1::1, FF::1)
         #  small packets
         #
-        tx = (Ether(dst=self.pg1.local_mac,
-                    src=self.pg1.remote_mac) /
-              IP(src=self.pg1.remote_ip4,
-                 dst=self.pg1.local_ip4) /
-              GRE() /
-              IPv6(src="1::1", dst="FF00::1") /
-              UDP(sport=1234, dport=1234) /
-              Raw(b'\a5' * 64)) * 63
+        tx = (
+            Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac)
+            / IP(src=self.pg1.remote_ip4, dst=self.pg1.local_ip4)
+            / GRE()
+            / IPv6(src="1::1", dst="FF00::1")
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\a5" * 64)
+        ) * 63
 
         self.vapi.cli("clear trace")
         self.pg1.add_stream(tx)
 
         self.vapi.cli("clear trace")
         self.pg1.add_stream(tx)
@@ -1042,7 +1142,7 @@ class TestIPMcast(VppTestCase):
             self.assert_packet_checksums_valid(rx)
 
     def test_ip6_mcast_vrf(self):
             self.assert_packet_checksums_valid(rx)
 
     def test_ip6_mcast_vrf(self):
-        """ IPv6 Multicast Replication in non-default table"""
+        """IPv6 Multicast Replication in non-default table"""
 
         MRouteItfFlags = VppEnum.vl_api_mfib_itf_flags_t
         MRouteEntryFlags = VppEnum.vl_api_mfib_entry_flags_t
 
         MRouteItfFlags = VppEnum.vl_api_mfib_itf_flags_t
         MRouteEntryFlags = VppEnum.vl_api_mfib_entry_flags_t
@@ -1054,18 +1154,28 @@ class TestIPMcast(VppTestCase):
         route_2001_ff01_1 = VppIpMRoute(
             self,
             "2001::1",
         route_2001_ff01_1 = VppIpMRoute(
             self,
             "2001::1",
-            "ff01::1", 256,
+            "ff01::1",
+            256,
             MRouteEntryFlags.MFIB_API_ENTRY_FLAG_NONE,
             MRouteEntryFlags.MFIB_API_ENTRY_FLAG_NONE,
-            [VppMRoutePath(self.pg8.sw_if_index,
-                           MRouteItfFlags.MFIB_API_ITF_FLAG_ACCEPT,
-                           proto=FibPathProto.FIB_PATH_NH_PROTO_IP6),
-             VppMRoutePath(self.pg1.sw_if_index,
-                           MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD,
-                           proto=FibPathProto.FIB_PATH_NH_PROTO_IP6),
-             VppMRoutePath(self.pg2.sw_if_index,
-                           MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD,
-                           proto=FibPathProto.FIB_PATH_NH_PROTO_IP6)],
-            table_id=10)
+            [
+                VppMRoutePath(
+                    self.pg8.sw_if_index,
+                    MRouteItfFlags.MFIB_API_ITF_FLAG_ACCEPT,
+                    proto=FibPathProto.FIB_PATH_NH_PROTO_IP6,
+                ),
+                VppMRoutePath(
+                    self.pg1.sw_if_index,
+                    MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD,
+                    proto=FibPathProto.FIB_PATH_NH_PROTO_IP6,
+                ),
+                VppMRoutePath(
+                    self.pg2.sw_if_index,
+                    MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD,
+                    proto=FibPathProto.FIB_PATH_NH_PROTO_IP6,
+                ),
+            ],
+            table_id=10,
+        )
         route_2001_ff01_1.add_vpp_config()
 
         #
         route_2001_ff01_1.add_vpp_config()
 
         #
@@ -1083,7 +1193,7 @@ class TestIPMcast(VppTestCase):
         self.verify_capture_ip6(self.pg2, tx)
 
     def test_bidir(self):
         self.verify_capture_ip6(self.pg2, tx)
 
     def test_bidir(self):
-        """ IP Multicast Bi-directional """
+        """IP Multicast Bi-directional"""
 
         MRouteItfFlags = VppEnum.vl_api_mfib_itf_flags_t
         MRouteEntryFlags = VppEnum.vl_api_mfib_entry_flags_t
 
         MRouteItfFlags = VppEnum.vl_api_mfib_itf_flags_t
         MRouteEntryFlags = VppEnum.vl_api_mfib_entry_flags_t
@@ -1094,20 +1204,32 @@ class TestIPMcast(VppTestCase):
         route_232_1_1_1 = VppIpMRoute(
             self,
             "0.0.0.0",
         route_232_1_1_1 = VppIpMRoute(
             self,
             "0.0.0.0",
-            "232.1.1.1", 32,
+            "232.1.1.1",
+            32,
             MRouteEntryFlags.MFIB_API_ENTRY_FLAG_NONE,
             MRouteEntryFlags.MFIB_API_ENTRY_FLAG_NONE,
-            [VppMRoutePath(self.pg0.sw_if_index,
-                           MRouteItfFlags.MFIB_API_ITF_FLAG_ACCEPT |
-                           MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD),
-             VppMRoutePath(self.pg1.sw_if_index,
-                           MRouteItfFlags.MFIB_API_ITF_FLAG_ACCEPT |
-                           MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD),
-             VppMRoutePath(self.pg2.sw_if_index,
-                           MRouteItfFlags.MFIB_API_ITF_FLAG_ACCEPT |
-                           MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD),
-             VppMRoutePath(self.pg3.sw_if_index,
-                           MRouteItfFlags.MFIB_API_ITF_FLAG_ACCEPT |
-                           MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD)])
+            [
+                VppMRoutePath(
+                    self.pg0.sw_if_index,
+                    MRouteItfFlags.MFIB_API_ITF_FLAG_ACCEPT
+                    | MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD,
+                ),
+                VppMRoutePath(
+                    self.pg1.sw_if_index,
+                    MRouteItfFlags.MFIB_API_ITF_FLAG_ACCEPT
+                    | MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD,
+                ),
+                VppMRoutePath(
+                    self.pg2.sw_if_index,
+                    MRouteItfFlags.MFIB_API_ITF_FLAG_ACCEPT
+                    | MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD,
+                ),
+                VppMRoutePath(
+                    self.pg3.sw_if_index,
+                    MRouteItfFlags.MFIB_API_ITF_FLAG_ACCEPT
+                    | MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD,
+                ),
+            ],
+        )
         route_232_1_1_1.add_vpp_config()
 
         tx = self.create_stream_ip4(self.pg0, "1.1.1.1", "232.1.1.1")
         route_232_1_1_1.add_vpp_config()
 
         tx = self.create_stream_ip4(self.pg0, "1.1.1.1", "232.1.1.1")
@@ -1120,9 +1242,8 @@ class TestIPMcast(VppTestCase):
         self.verify_capture_ip4(self.pg1, tx)
         self.verify_capture_ip4(self.pg2, tx)
         self.verify_capture_ip4(self.pg3, tx)
         self.verify_capture_ip4(self.pg1, tx)
         self.verify_capture_ip4(self.pg2, tx)
         self.verify_capture_ip4(self.pg3, tx)
-        self.pg0.assert_nothing_captured(
-            remark="IP multicast packets forwarded on PG0")
+        self.pg0.assert_nothing_captured(remark="IP multicast packets forwarded on PG0")
 
 
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index be7476e..f7b8be7 100644 (file)
@@ -16,7 +16,7 @@ from socket import AF_INET, AF_INET6
 
 
 class TestIpfixExporter(VppTestCase):
 
 
 class TestIpfixExporter(VppTestCase):
-    """ Ipfix Exporter Tests """
+    """Ipfix Exporter Tests"""
 
     def setUp(self):
         super(TestIpfixExporter, self).setUp()
 
     def setUp(self):
         super(TestIpfixExporter, self).setUp()
@@ -37,15 +37,16 @@ class TestIpfixExporter(VppTestCase):
             i.admin_down()
 
     def find_exp_by_collector_addr(self, exporters, addr):
             i.admin_down()
 
     def find_exp_by_collector_addr(self, exporters, addr):
-        """ Find the exporter in the list of exportes with the given  addr """
+        """Find the exporter in the list of exportes with the given  addr"""
 
         for exp in exporters:
             if exp.collector_address == IPv4Address(addr):
                 return exp
         return None
 
 
         for exp in exporters:
             if exp.collector_address == IPv4Address(addr):
                 return exp
         return None
 
-    def verify_exporter_detail(self, exp, collector_addr, src_addr,
-                               collector_port=4739, mtu=1400, interval=20):
+    def verify_exporter_detail(
+        self, exp, collector_addr, src_addr, collector_port=4739, mtu=1400, interval=20
+    ):
         self.assertTrue(exp is not None)
         self.assert_equal(exp.collector_address, collector_addr)
         self.assert_equal(exp.src_address, src_addr)
         self.assertTrue(exp is not None)
         self.assert_equal(exp.collector_address, collector_addr)
         self.assert_equal(exp.src_address, src_addr)
@@ -54,7 +55,7 @@ class TestIpfixExporter(VppTestCase):
         self.assert_equal(exp.template_interval, interval)
 
     def test_create_multipe_exporters(self):
         self.assert_equal(exp.template_interval, interval)
 
     def test_create_multipe_exporters(self):
-        """ test that we can create and dump multiple exporters """
+        """test that we can create and dump multiple exporters"""
 
         mtu = 1400
         interval = 20
 
         mtu = 1400
         interval = 20
@@ -66,20 +67,20 @@ class TestIpfixExporter(VppTestCase):
             src_address=self.pg0.local_ip4,
             collector_port=4739,
             path_mtu=mtu,
             src_address=self.pg0.local_ip4,
             collector_port=4739,
             path_mtu=mtu,
-            template_interval=interval)
+            template_interval=interval,
+        )
 
         exporters = self.vapi.ipfix_exporter_dump()
         exp = self.find_exp_by_collector_addr(exporters, self.pg1.remote_ip4)
 
         exporters = self.vapi.ipfix_exporter_dump()
         exp = self.find_exp_by_collector_addr(exporters, self.pg1.remote_ip4)
-        self.verify_exporter_detail(exp,
-                                    IPv4Address(self.pg1.remote_ip4),
-                                    IPv4Address(self.pg0.local_ip4))
+        self.verify_exporter_detail(
+            exp, IPv4Address(self.pg1.remote_ip4), IPv4Address(self.pg0.local_ip4)
+        )
 
 
-        exporters = list(self.vapi.vpp.details_iter(
-            self.vapi.ipfix_all_exporter_get))
+        exporters = list(self.vapi.vpp.details_iter(self.vapi.ipfix_all_exporter_get))
         exp = self.find_exp_by_collector_addr(exporters, self.pg1.remote_ip4)
         exp = self.find_exp_by_collector_addr(exporters, self.pg1.remote_ip4)
-        self.verify_exporter_detail(exp,
-                                    IPv4Address(self.pg1.remote_ip4),
-                                    IPv4Address(self.pg0.local_ip4))
+        self.verify_exporter_detail(
+            exp, IPv4Address(self.pg1.remote_ip4), IPv4Address(self.pg0.local_ip4)
+        )
 
         # create a 2nd exporter
         self.vapi.ipfix_exporter_create_delete(
 
         # create a 2nd exporter
         self.vapi.ipfix_exporter_create_delete(
@@ -88,19 +89,19 @@ class TestIpfixExporter(VppTestCase):
             collector_port=4739,
             path_mtu=mtu,
             template_interval=interval,
             collector_port=4739,
             path_mtu=mtu,
             template_interval=interval,
-            is_create=True)
+            is_create=True,
+        )
 
 
-        exporters = list(self.vapi.vpp.details_iter(
-            self.vapi.ipfix_all_exporter_get))
+        exporters = list(self.vapi.vpp.details_iter(self.vapi.ipfix_all_exporter_get))
         self.assertTrue(len(exporters) == 2)
         exp = self.find_exp_by_collector_addr(exporters, self.pg1.remote_ip4)
         self.assertTrue(len(exporters) == 2)
         exp = self.find_exp_by_collector_addr(exporters, self.pg1.remote_ip4)
-        self.verify_exporter_detail(exp,
-                                    IPv4Address(self.pg1.remote_ip4),
-                                    IPv4Address(self.pg0.local_ip4))
+        self.verify_exporter_detail(
+            exp, IPv4Address(self.pg1.remote_ip4), IPv4Address(self.pg0.local_ip4)
+        )
         exp = self.find_exp_by_collector_addr(exporters, self.pg2.remote_ip4)
         exp = self.find_exp_by_collector_addr(exporters, self.pg2.remote_ip4)
-        self.verify_exporter_detail(exp,
-                                    IPv4Address(self.pg2.remote_ip4),
-                                    IPv4Address(self.pg0.local_ip4))
+        self.verify_exporter_detail(
+            exp, IPv4Address(self.pg2.remote_ip4), IPv4Address(self.pg0.local_ip4)
+        )
 
         # Create a 3rd exporter
         self.vapi.ipfix_exporter_create_delete(
 
         # Create a 3rd exporter
         self.vapi.ipfix_exporter_create_delete(
@@ -109,49 +110,52 @@ class TestIpfixExporter(VppTestCase):
             collector_port=4739,
             path_mtu=mtu,
             template_interval=interval,
             collector_port=4739,
             path_mtu=mtu,
             template_interval=interval,
-            is_create=True)
+            is_create=True,
+        )
 
 
-        exporters = list(self.vapi.vpp.details_iter(
-            self.vapi.ipfix_all_exporter_get))
+        exporters = list(self.vapi.vpp.details_iter(self.vapi.ipfix_all_exporter_get))
         self.assertTrue(len(exporters) == 3)
         exp = self.find_exp_by_collector_addr(exporters, self.pg1.remote_ip4)
         self.assertTrue(len(exporters) == 3)
         exp = self.find_exp_by_collector_addr(exporters, self.pg1.remote_ip4)
-        self.verify_exporter_detail(exp,
-                                    IPv4Address(self.pg1.remote_ip4),
-                                    IPv4Address(self.pg0.local_ip4))
+        self.verify_exporter_detail(
+            exp, IPv4Address(self.pg1.remote_ip4), IPv4Address(self.pg0.local_ip4)
+        )
         exp = self.find_exp_by_collector_addr(exporters, self.pg2.remote_ip4)
         exp = self.find_exp_by_collector_addr(exporters, self.pg2.remote_ip4)
-        self.verify_exporter_detail(exp,
-                                    IPv4Address(self.pg2.remote_ip4),
-                                    IPv4Address(self.pg0.local_ip4))
+        self.verify_exporter_detail(
+            exp, IPv4Address(self.pg2.remote_ip4), IPv4Address(self.pg0.local_ip4)
+        )
         exp = self.find_exp_by_collector_addr(exporters, self.pg3.remote_ip4)
         exp = self.find_exp_by_collector_addr(exporters, self.pg3.remote_ip4)
-        self.verify_exporter_detail(exp,
-                                    IPv4Address(self.pg3.remote_ip4),
-                                    IPv4Address(self.pg0.local_ip4))
+        self.verify_exporter_detail(
+            exp, IPv4Address(self.pg3.remote_ip4), IPv4Address(self.pg0.local_ip4)
+        )
 
         # Modify the 2nd exporter.
         self.vapi.ipfix_exporter_create_delete(
             collector_address=self.pg2.remote_ip4,
             src_address=self.pg0.local_ip4,
             collector_port=4739,
 
         # Modify the 2nd exporter.
         self.vapi.ipfix_exporter_create_delete(
             collector_address=self.pg2.remote_ip4,
             src_address=self.pg0.local_ip4,
             collector_port=4739,
-            path_mtu=mtu+1,
-            template_interval=interval+1,
-            is_create=True)
+            path_mtu=mtu + 1,
+            template_interval=interval + 1,
+            is_create=True,
+        )
 
 
-        exporters = list(self.vapi.vpp.details_iter(
-            self.vapi.ipfix_all_exporter_get))
+        exporters = list(self.vapi.vpp.details_iter(self.vapi.ipfix_all_exporter_get))
         self.assertTrue(len(exporters) == 3)
         exp = self.find_exp_by_collector_addr(exporters, self.pg1.remote_ip4)
         self.assertTrue(len(exporters) == 3)
         exp = self.find_exp_by_collector_addr(exporters, self.pg1.remote_ip4)
-        self.verify_exporter_detail(exp,
-                                    IPv4Address(self.pg1.remote_ip4),
-                                    IPv4Address(self.pg0.local_ip4))
+        self.verify_exporter_detail(
+            exp, IPv4Address(self.pg1.remote_ip4), IPv4Address(self.pg0.local_ip4)
+        )
         exp = self.find_exp_by_collector_addr(exporters, self.pg2.remote_ip4)
         exp = self.find_exp_by_collector_addr(exporters, self.pg2.remote_ip4)
-        self.verify_exporter_detail(exp,
-                                    IPv4Address(self.pg2.remote_ip4),
-                                    IPv4Address(self.pg0.local_ip4),
-                                    mtu=mtu+1, interval=interval+1)
+        self.verify_exporter_detail(
+            exp,
+            IPv4Address(self.pg2.remote_ip4),
+            IPv4Address(self.pg0.local_ip4),
+            mtu=mtu + 1,
+            interval=interval + 1,
+        )
         exp = self.find_exp_by_collector_addr(exporters, self.pg3.remote_ip4)
         exp = self.find_exp_by_collector_addr(exporters, self.pg3.remote_ip4)
-        self.verify_exporter_detail(exp,
-                                    IPv4Address(self.pg3.remote_ip4),
-                                    IPv4Address(self.pg0.local_ip4))
+        self.verify_exporter_detail(
+            exp, IPv4Address(self.pg3.remote_ip4), IPv4Address(self.pg0.local_ip4)
+        )
 
         # Delete 2nd exporter
         self.vapi.ipfix_exporter_create_delete(
 
         # Delete 2nd exporter
         self.vapi.ipfix_exporter_create_delete(
@@ -160,19 +164,19 @@ class TestIpfixExporter(VppTestCase):
             collector_port=4739,
             path_mtu=mtu,
             template_interval=interval,
             collector_port=4739,
             path_mtu=mtu,
             template_interval=interval,
-            is_create=False)
+            is_create=False,
+        )
 
 
-        exporters = list(self.vapi.vpp.details_iter(
-            self.vapi.ipfix_all_exporter_get))
+        exporters = list(self.vapi.vpp.details_iter(self.vapi.ipfix_all_exporter_get))
         self.assertTrue(len(exporters) == 2)
         exp = self.find_exp_by_collector_addr(exporters, self.pg1.remote_ip4)
         self.assertTrue(len(exporters) == 2)
         exp = self.find_exp_by_collector_addr(exporters, self.pg1.remote_ip4)
-        self.verify_exporter_detail(exp,
-                                    IPv4Address(self.pg1.remote_ip4),
-                                    IPv4Address(self.pg0.local_ip4))
+        self.verify_exporter_detail(
+            exp, IPv4Address(self.pg1.remote_ip4), IPv4Address(self.pg0.local_ip4)
+        )
         exp = self.find_exp_by_collector_addr(exporters, self.pg3.remote_ip4)
         exp = self.find_exp_by_collector_addr(exporters, self.pg3.remote_ip4)
-        self.verify_exporter_detail(exp,
-                                    IPv4Address(self.pg3.remote_ip4),
-                                    IPv4Address(self.pg0.local_ip4))
+        self.verify_exporter_detail(
+            exp, IPv4Address(self.pg3.remote_ip4), IPv4Address(self.pg0.local_ip4)
+        )
 
         # Delete final exporter (exporter in slot 0 can not be deleted)
         self.vapi.ipfix_exporter_create_delete(
 
         # Delete final exporter (exporter in slot 0 can not be deleted)
         self.vapi.ipfix_exporter_create_delete(
@@ -181,12 +185,12 @@ class TestIpfixExporter(VppTestCase):
             collector_port=4739,
             path_mtu=mtu,
             template_interval=interval,
             collector_port=4739,
             path_mtu=mtu,
             template_interval=interval,
-            is_create=False)
+            is_create=False,
+        )
 
 
-        exporters = list(self.vapi.vpp.details_iter(
-            self.vapi.ipfix_all_exporter_get))
+        exporters = list(self.vapi.vpp.details_iter(self.vapi.ipfix_all_exporter_get))
         self.assertTrue(len(exporters) == 1)
         exp = self.find_exp_by_collector_addr(exporters, self.pg1.remote_ip4)
         self.assertTrue(len(exporters) == 1)
         exp = self.find_exp_by_collector_addr(exporters, self.pg1.remote_ip4)
-        self.verify_exporter_detail(exp,
-                                    IPv4Address(self.pg1.remote_ip4),
-                                    IPv4Address(self.pg0.local_ip4))
+        self.verify_exporter_detail(
+            exp, IPv4Address(self.pg1.remote_ip4), IPv4Address(self.pg0.local_ip4)
+        )
index b1ea57d..cbaedd5 100644 (file)
@@ -7,8 +7,15 @@ from scapy.contrib.mpls import MPLS
 from scapy.all import fragment, fragment6, RandShort, defragment6
 from framework import VppTestCase, VppTestRunner
 from vpp_ip import DpoProto
 from scapy.all import fragment, fragment6, RandShort, defragment6
 from framework import VppTestCase, VppTestRunner
 from vpp_ip import DpoProto
-from vpp_ip_route import VppIpRoute, VppRoutePath, VppIpTable, FibPathProto, \
-    VppMplsLabel, VppMplsRoute, VppMplsTable
+from vpp_ip_route import (
+    VppIpRoute,
+    VppRoutePath,
+    VppIpTable,
+    FibPathProto,
+    VppMplsLabel,
+    VppMplsRoute,
+    VppMplsTable,
+)
 from vpp_ipip_tun_interface import VppIpIpTunInterface
 from vpp_teib import VppTeib
 from vpp_papi import VppEnum
 from vpp_ipip_tun_interface import VppIpIpTunInterface
 from vpp_teib import VppTeib
 from vpp_papi import VppEnum
@@ -22,27 +29,27 @@ IPIP tests.
 """
 
 
 """
 
 
-def ipip_add_tunnel(test, src, dst, table_id=0, dscp=0x0,
-                    flags=0):
-    """ Add a IPIP tunnel """
+def ipip_add_tunnel(test, src, dst, table_id=0, dscp=0x0, flags=0):
+    """Add a IPIP tunnel"""
     return test.vapi.ipip_add_tunnel(
         tunnel={
     return test.vapi.ipip_add_tunnel(
         tunnel={
-            'src': src,
-            'dst': dst,
-            'table_id': table_id,
-            'instance': 0xffffffff,
-            'dscp': dscp,
-            'flags': flags
+            "src": src,
+            "dst": dst,
+            "table_id": table_id,
+            "instance": 0xFFFFFFFF,
+            "dscp": dscp,
+            "flags": flags,
         }
     )
 
         }
     )
 
+
 # the number of packets to send when injecting traffic.
 # a multiple of 8 minus one, so we test all by 8/4/2/1 loops
 N_PACKETS = 64 - 1
 
 
 class TestIPIP(VppTestCase):
 # the number of packets to send when injecting traffic.
 # a multiple of 8 minus one, so we test all by 8/4/2/1 loops
 N_PACKETS = 64 - 1
 
 
 class TestIPIP(VppTestCase):
-    """ IPIP Test Case """
+    """IPIP Test Case"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -88,21 +95,24 @@ class TestIPIP(VppTestCase):
         p_ether = Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
         p_payload = UDP(sport=1234, dport=1234) / self.payload(payload_length)
         p_ip4 = IP(src="1.2.3.4", dst=self.pg0.remote_ip4)
         p_ether = Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
         p_payload = UDP(sport=1234, dport=1234) / self.payload(payload_length)
         p_ip4 = IP(src="1.2.3.4", dst=self.pg0.remote_ip4)
-        outer_ip4 = (p_ether / IP(src=self.pg1.remote_ip4,
-                                  id=RandShort(),
-                                  dst=self.pg0.local_ip4) / p_ip4 / p_payload)
+        outer_ip4 = (
+            p_ether
+            / IP(src=self.pg1.remote_ip4, id=RandShort(), dst=self.pg0.local_ip4)
+            / p_ip4
+            / p_payload
+        )
         frags = fragment(outer_ip4, fragment_size)
         frags = fragment(outer_ip4, fragment_size)
-        p4_reply = (p_ip4 / p_payload)
+        p4_reply = p_ip4 / p_payload
         p4_reply.ttl -= 1
         return frags, p4_reply
 
     def verify_ip4ip4_encaps(self, a, p_ip4s, p_ip4_encaps):
         for i, p_ip4 in enumerate(p_ip4s):
             p_ip4.dst = a
         p4_reply.ttl -= 1
         return frags, p4_reply
 
     def verify_ip4ip4_encaps(self, a, p_ip4s, p_ip4_encaps):
         for i, p_ip4 in enumerate(p_ip4s):
             p_ip4.dst = a
-            p4 = (self.p_ether / p_ip4 / self.p_payload)
+            p4 = self.p_ether / p_ip4 / self.p_payload
             p_ip4_inner = p_ip4
             p_ip4_inner.ttl -= 1
             p_ip4_inner = p_ip4
             p_ip4_inner.ttl -= 1
-            p4_reply = (p_ip4_encaps[i] / p_ip4_inner / self.p_payload)
+            p4_reply = p_ip4_encaps[i] / p_ip4_inner / self.p_payload
             p4_reply.ttl -= 1
             p4_reply.id = 0
             rx = self.send_and_expect(self.pg0, p4 * N_PACKETS, self.pg1)
             p4_reply.ttl -= 1
             p4_reply.id = 0
             rx = self.send_and_expect(self.pg0, p4 * N_PACKETS, self.pg1)
@@ -113,10 +123,10 @@ class TestIPIP(VppTestCase):
     def verify_ip6ip4_encaps(self, a, p_ip6s, p_ip4_encaps):
         for i, p_ip6 in enumerate(p_ip6s):
             p_ip6.dst = a
     def verify_ip6ip4_encaps(self, a, p_ip6s, p_ip4_encaps):
         for i, p_ip6 in enumerate(p_ip6s):
             p_ip6.dst = a
-            p6 = (self.p_ether / p_ip6 / self.p_payload)
+            p6 = self.p_ether / p_ip6 / self.p_payload
             p_inner_ip6 = p_ip6
             p_inner_ip6.hlim -= 1
             p_inner_ip6 = p_ip6
             p_inner_ip6.hlim -= 1
-            p6_reply = (p_ip4_encaps[i] / p_inner_ip6 / self.p_payload)
+            p6_reply = p_ip4_encaps[i] / p_inner_ip6 / self.p_payload
             p6_reply.ttl -= 1
             rx = self.send_and_expect(self.pg0, p6 * N_PACKETS, self.pg1)
             for p in rx:
             p6_reply.ttl -= 1
             rx = self.send_and_expect(self.pg0, p6 * N_PACKETS, self.pg1)
             for p in rx:
@@ -124,14 +134,14 @@ class TestIPIP(VppTestCase):
                 self.assert_packet_checksums_valid(p)
 
     def test_ipip4(self):
                 self.assert_packet_checksums_valid(p)
 
     def test_ipip4(self):
-        """ ip{v4,v6} over ip4 test """
+        """ip{v4,v6} over ip4 test"""
 
         self.pg1.generate_remote_hosts(5)
         self.pg1.configure_ipv4_neighbors()
         e = VppEnum.vl_api_tunnel_encap_decap_flags_t
         d = VppEnum.vl_api_ip_dscp_t
         self.p_ether = Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
 
         self.pg1.generate_remote_hosts(5)
         self.pg1.configure_ipv4_neighbors()
         e = VppEnum.vl_api_tunnel_encap_decap_flags_t
         d = VppEnum.vl_api_ip_dscp_t
         self.p_ether = Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
-        self.p_payload = UDP(sport=1234, dport=1234) / Raw(b'X' * 100)
+        self.p_payload = UDP(sport=1234, dport=1234) / Raw(b"X" * 100)
 
         # create a TOS byte by shifting a DSCP code point 2 bits. those 2 bits
         # are for the ECN.
 
         # create a TOS byte by shifting a DSCP code point 2 bits. those 2 bits
         # are for the ECN.
@@ -145,7 +155,8 @@ class TestIPIP(VppTestCase):
             self.pg0,
             self.pg0.local_ip4,
             self.pg1.remote_hosts[0].ip4,
             self.pg0,
             self.pg0.local_ip4,
             self.pg1.remote_hosts[0].ip4,
-            flags=e.TUNNEL_API_ENCAP_DECAP_FLAG_ENCAP_COPY_DSCP)
+            flags=e.TUNNEL_API_ENCAP_DECAP_FLAG_ENCAP_COPY_DSCP,
+        )
         tun_dscp.add_vpp_config()
         # IPv4 transport that copies the DCSP and ECN from the payload
         tun_dscp_ecn = VppIpIpTunInterface(
         tun_dscp.add_vpp_config()
         # IPv4 transport that copies the DCSP and ECN from the payload
         tun_dscp_ecn = VppIpIpTunInterface(
@@ -153,8 +164,11 @@ class TestIPIP(VppTestCase):
             self.pg0,
             self.pg0.local_ip4,
             self.pg1.remote_hosts[1].ip4,
             self.pg0,
             self.pg0.local_ip4,
             self.pg1.remote_hosts[1].ip4,
-            flags=(e.TUNNEL_API_ENCAP_DECAP_FLAG_ENCAP_COPY_DSCP |
-                   e.TUNNEL_API_ENCAP_DECAP_FLAG_ENCAP_COPY_ECN))
+            flags=(
+                e.TUNNEL_API_ENCAP_DECAP_FLAG_ENCAP_COPY_DSCP
+                | e.TUNNEL_API_ENCAP_DECAP_FLAG_ENCAP_COPY_ECN
+            ),
+        )
         tun_dscp_ecn.add_vpp_config()
         # IPv4 transport that copies the ECN from the payload and sets the
         # DF bit on encap. copies the ECN on decap
         tun_dscp_ecn.add_vpp_config()
         # IPv4 transport that copies the ECN from the payload and sets the
         # DF bit on encap. copies the ECN on decap
@@ -163,9 +177,12 @@ class TestIPIP(VppTestCase):
             self.pg0,
             self.pg0.local_ip4,
             self.pg1.remote_hosts[2].ip4,
             self.pg0,
             self.pg0.local_ip4,
             self.pg1.remote_hosts[2].ip4,
-            flags=(e.TUNNEL_API_ENCAP_DECAP_FLAG_ENCAP_COPY_ECN |
-                   e.TUNNEL_API_ENCAP_DECAP_FLAG_ENCAP_SET_DF |
-                   e.TUNNEL_API_ENCAP_DECAP_FLAG_DECAP_COPY_ECN))
+            flags=(
+                e.TUNNEL_API_ENCAP_DECAP_FLAG_ENCAP_COPY_ECN
+                | e.TUNNEL_API_ENCAP_DECAP_FLAG_ENCAP_SET_DF
+                | e.TUNNEL_API_ENCAP_DECAP_FLAG_DECAP_COPY_ECN
+            ),
+        )
         tun_ecn.add_vpp_config()
         # IPv4 transport that sets a fixed DSCP in the encap and copies
         # the DF bit
         tun_ecn.add_vpp_config()
         # IPv4 transport that sets a fixed DSCP in the encap and copies
         # the DF bit
@@ -175,7 +192,8 @@ class TestIPIP(VppTestCase):
             self.pg0.local_ip4,
             self.pg1.remote_hosts[3].ip4,
             dscp=d.IP_API_DSCP_AF11,
             self.pg0.local_ip4,
             self.pg1.remote_hosts[3].ip4,
             dscp=d.IP_API_DSCP_AF11,
-            flags=e.TUNNEL_API_ENCAP_DECAP_FLAG_ENCAP_COPY_DF)
+            flags=e.TUNNEL_API_ENCAP_DECAP_FLAG_ENCAP_COPY_DF,
+        )
         tun.add_vpp_config()
 
         # array of all the tunnels
         tun.add_vpp_config()
 
         # array of all the tunnels
@@ -186,22 +204,26 @@ class TestIPIP(VppTestCase):
         a6s = ["" for i in range(len(tuns))]
 
         # IP headers with each combination of DSCp/ECN tested
         a6s = ["" for i in range(len(tuns))]
 
         # IP headers with each combination of DSCp/ECN tested
-        p_ip6s = [IPv6(src="1::1", dst="DEAD::1", nh='UDP', tc=dscp),
-                  IPv6(src="1::1", dst="DEAD::1", nh='UDP', tc=dscp_ecn),
-                  IPv6(src="1::1", dst="DEAD::1", nh='UDP', tc=ecn),
-                  IPv6(src="1::1", dst="DEAD::1", nh='UDP', tc=0xff)]
-        p_ip4s = [IP(src="1.2.3.4", dst="130.67.0.1", tos=dscp, flags='DF'),
-                  IP(src="1.2.3.4", dst="130.67.0.1", tos=dscp_ecn),
-                  IP(src="1.2.3.4", dst="130.67.0.1", tos=ecn),
-                  IP(src="1.2.3.4", dst="130.67.0.1", tos=0xff)]
+        p_ip6s = [
+            IPv6(src="1::1", dst="DEAD::1", nh="UDP", tc=dscp),
+            IPv6(src="1::1", dst="DEAD::1", nh="UDP", tc=dscp_ecn),
+            IPv6(src="1::1", dst="DEAD::1", nh="UDP", tc=ecn),
+            IPv6(src="1::1", dst="DEAD::1", nh="UDP", tc=0xFF),
+        ]
+        p_ip4s = [
+            IP(src="1.2.3.4", dst="130.67.0.1", tos=dscp, flags="DF"),
+            IP(src="1.2.3.4", dst="130.67.0.1", tos=dscp_ecn),
+            IP(src="1.2.3.4", dst="130.67.0.1", tos=ecn),
+            IP(src="1.2.3.4", dst="130.67.0.1", tos=0xFF),
+        ]
 
         # Configure each tunnel
         for i, t in enumerate(tuns):
             # Set interface up and enable IP on it
             self.vapi.sw_interface_set_flags(t.sw_if_index, 1)
             self.vapi.sw_interface_set_unnumbered(
 
         # Configure each tunnel
         for i, t in enumerate(tuns):
             # Set interface up and enable IP on it
             self.vapi.sw_interface_set_flags(t.sw_if_index, 1)
             self.vapi.sw_interface_set_unnumbered(
-                sw_if_index=self.pg0.sw_if_index,
-                unnumbered_sw_if_index=t.sw_if_index)
+                sw_if_index=self.pg0.sw_if_index, unnumbered_sw_if_index=t.sw_if_index
+            )
 
             # prefix for route / destination address for packets
             a4s[i] = "130.67.%d.0" % i
 
             # prefix for route / destination address for packets
             a4s[i] = "130.67.%d.0" % i
@@ -209,17 +231,29 @@ class TestIPIP(VppTestCase):
 
             # Add IPv4 and IPv6 routes via tunnel interface
             ip4_via_tunnel = VppIpRoute(
 
             # Add IPv4 and IPv6 routes via tunnel interface
             ip4_via_tunnel = VppIpRoute(
-                self, a4s[i], 24,
-                [VppRoutePath("0.0.0.0",
-                              t.sw_if_index,
-                              proto=FibPathProto.FIB_PATH_NH_PROTO_IP4)])
+                self,
+                a4s[i],
+                24,
+                [
+                    VppRoutePath(
+                        "0.0.0.0",
+                        t.sw_if_index,
+                        proto=FibPathProto.FIB_PATH_NH_PROTO_IP4,
+                    )
+                ],
+            )
             ip4_via_tunnel.add_vpp_config()
 
             ip6_via_tunnel = VppIpRoute(
             ip4_via_tunnel.add_vpp_config()
 
             ip6_via_tunnel = VppIpRoute(
-                self, a6s[i], 64,
-                [VppRoutePath("::",
-                              t.sw_if_index,
-                              proto=FibPathProto.FIB_PATH_NH_PROTO_IP6)])
+                self,
+                a6s[i],
+                64,
+                [
+                    VppRoutePath(
+                        "::", t.sw_if_index, proto=FibPathProto.FIB_PATH_NH_PROTO_IP6
+                    )
+                ],
+            )
             ip6_via_tunnel.add_vpp_config()
 
         #
             ip6_via_tunnel.add_vpp_config()
 
         #
@@ -229,13 +263,14 @@ class TestIPIP(VppTestCase):
         # tun_dscp copies only the dscp
         # expected TC values are thus only the DCSP value is present from the
         # inner
         # tun_dscp copies only the dscp
         # expected TC values are thus only the DCSP value is present from the
         # inner
-        exp_tcs = [dscp, dscp, 0, 0xfc]
-        p_ip44_encaps = [IP(src=self.pg0.local_ip4,
-                            dst=tun_dscp.dst,
-                            tos=tc) for tc in exp_tcs]
-        p_ip64_encaps = [IP(src=self.pg0.local_ip4,
-                            dst=tun_dscp.dst,
-                            proto='ipv6', id=0, tos=tc) for tc in exp_tcs]
+        exp_tcs = [dscp, dscp, 0, 0xFC]
+        p_ip44_encaps = [
+            IP(src=self.pg0.local_ip4, dst=tun_dscp.dst, tos=tc) for tc in exp_tcs
+        ]
+        p_ip64_encaps = [
+            IP(src=self.pg0.local_ip4, dst=tun_dscp.dst, proto="ipv6", id=0, tos=tc)
+            for tc in exp_tcs
+        ]
 
         # IPv4 in to IPv4 tunnel
         self.verify_ip4ip4_encaps(a4s[0], p_ip4s, p_ip44_encaps)
 
         # IPv4 in to IPv4 tunnel
         self.verify_ip4ip4_encaps(a4s[0], p_ip4s, p_ip44_encaps)
@@ -243,41 +278,50 @@ class TestIPIP(VppTestCase):
         self.verify_ip6ip4_encaps(a6s[0], p_ip6s, p_ip64_encaps)
 
         # tun_dscp_ecn copies the dscp and the ecn
         self.verify_ip6ip4_encaps(a6s[0], p_ip6s, p_ip64_encaps)
 
         # tun_dscp_ecn copies the dscp and the ecn
-        exp_tcs = [dscp, dscp_ecn, ecn, 0xff]
-        p_ip44_encaps = [IP(src=self.pg0.local_ip4,
-                            dst=tun_dscp_ecn.dst,
-                            tos=tc) for tc in exp_tcs]
-        p_ip64_encaps = [IP(src=self.pg0.local_ip4,
-                            dst=tun_dscp_ecn.dst,
-                            proto='ipv6', id=0, tos=tc) for tc in exp_tcs]
+        exp_tcs = [dscp, dscp_ecn, ecn, 0xFF]
+        p_ip44_encaps = [
+            IP(src=self.pg0.local_ip4, dst=tun_dscp_ecn.dst, tos=tc) for tc in exp_tcs
+        ]
+        p_ip64_encaps = [
+            IP(src=self.pg0.local_ip4, dst=tun_dscp_ecn.dst, proto="ipv6", id=0, tos=tc)
+            for tc in exp_tcs
+        ]
 
         self.verify_ip4ip4_encaps(a4s[1], p_ip4s, p_ip44_encaps)
         self.verify_ip6ip4_encaps(a6s[1], p_ip6s, p_ip64_encaps)
 
         # tun_ecn copies only the ecn and always sets DF
         exp_tcs = [0, ecn, ecn, ecn]
 
         self.verify_ip4ip4_encaps(a4s[1], p_ip4s, p_ip44_encaps)
         self.verify_ip6ip4_encaps(a6s[1], p_ip6s, p_ip64_encaps)
 
         # tun_ecn copies only the ecn and always sets DF
         exp_tcs = [0, ecn, ecn, ecn]
-        p_ip44_encaps = [IP(src=self.pg0.local_ip4,
-                            dst=tun_ecn.dst,
-                            flags='DF', tos=tc) for tc in exp_tcs]
-        p_ip64_encaps = [IP(src=self.pg0.local_ip4,
-                            dst=tun_ecn.dst,
-                            flags='DF', proto='ipv6', id=0, tos=tc)
-                         for tc in exp_tcs]
+        p_ip44_encaps = [
+            IP(src=self.pg0.local_ip4, dst=tun_ecn.dst, flags="DF", tos=tc)
+            for tc in exp_tcs
+        ]
+        p_ip64_encaps = [
+            IP(
+                src=self.pg0.local_ip4,
+                dst=tun_ecn.dst,
+                flags="DF",
+                proto="ipv6",
+                id=0,
+                tos=tc,
+            )
+            for tc in exp_tcs
+        ]
 
         self.verify_ip4ip4_encaps(a4s[2], p_ip4s, p_ip44_encaps)
         self.verify_ip6ip4_encaps(a6s[2], p_ip6s, p_ip64_encaps)
 
         # tun sets a fixed dscp and copies DF
         fixed_dscp = tun.dscp << 2
 
         self.verify_ip4ip4_encaps(a4s[2], p_ip4s, p_ip44_encaps)
         self.verify_ip6ip4_encaps(a6s[2], p_ip6s, p_ip64_encaps)
 
         # tun sets a fixed dscp and copies DF
         fixed_dscp = tun.dscp << 2
-        flags = ['DF', 0, 0, 0]
-        p_ip44_encaps = [IP(src=self.pg0.local_ip4,
-                            dst=tun.dst,
-                            flags=f,
-                            tos=fixed_dscp) for f in flags]
-        p_ip64_encaps = [IP(src=self.pg0.local_ip4,
-                            dst=tun.dst,
-                            proto='ipv6', id=0,
-                            tos=fixed_dscp) for i in range(len(p_ip4s))]
+        flags = ["DF", 0, 0, 0]
+        p_ip44_encaps = [
+            IP(src=self.pg0.local_ip4, dst=tun.dst, flags=f, tos=fixed_dscp)
+            for f in flags
+        ]
+        p_ip64_encaps = [
+            IP(src=self.pg0.local_ip4, dst=tun.dst, proto="ipv6", id=0, tos=fixed_dscp)
+            for i in range(len(p_ip4s))
+        ]
 
         self.verify_ip4ip4_encaps(a4s[3], p_ip4s, p_ip44_encaps)
         self.verify_ip6ip4_encaps(a6s[3], p_ip6s, p_ip64_encaps)
 
         self.verify_ip4ip4_encaps(a4s[3], p_ip4s, p_ip44_encaps)
         self.verify_ip6ip4_encaps(a6s[3], p_ip6s, p_ip64_encaps)
@@ -293,15 +337,13 @@ class TestIPIP(VppTestCase):
 
         # one overlay packet and all combinations of its encap
         p_ip4 = IP(src="1.2.3.4", dst=self.pg0.remote_ip4)
 
         # one overlay packet and all combinations of its encap
         p_ip4 = IP(src="1.2.3.4", dst=self.pg0.remote_ip4)
-        p_ip4_encaps = [IP(src=tun.dst,
-                           dst=self.pg0.local_ip4,
-                           tos=tc) for tc in tcs]
+        p_ip4_encaps = [IP(src=tun.dst, dst=self.pg0.local_ip4, tos=tc) for tc in tcs]
 
         # for each encap tun will produce the same inner packet because it does
         # not copy up fields from the payload
         for p_ip4_encap in p_ip4_encaps:
 
         # for each encap tun will produce the same inner packet because it does
         # not copy up fields from the payload
         for p_ip4_encap in p_ip4_encaps:
-            p4 = (self.p_ether / p_ip4_encap / p_ip4 / self.p_payload)
-            p4_reply = (p_ip4 / self.p_payload)
+            p4 = self.p_ether / p_ip4_encap / p_ip4 / self.p_payload
+            p4_reply = p_ip4 / self.p_payload
             p4_reply.ttl -= 1
             rx = self.send_and_expect(self.pg1, p4 * N_PACKETS, self.pg0)
             n_packets_decapped += N_PACKETS
             p4_reply.ttl -= 1
             rx = self.send_and_expect(self.pg1, p4 * N_PACKETS, self.pg0)
             n_packets_decapped += N_PACKETS
@@ -309,20 +351,19 @@ class TestIPIP(VppTestCase):
                 self.validate(p[1], p4_reply)
                 self.assert_packet_checksums_valid(p)
 
                 self.validate(p[1], p4_reply)
                 self.assert_packet_checksums_valid(p)
 
-        err = self.statistics.get_err_counter(
-            '/err/ipip4-input/packets decapsulated')
+        err = self.statistics.get_err_counter("/err/ipip4-input/packets decapsulated")
         self.assertEqual(err, n_packets_decapped)
 
         # tun_ecn copies the ECN bits from the encap to the inner
         self.assertEqual(err, n_packets_decapped)
 
         # tun_ecn copies the ECN bits from the encap to the inner
-        p_ip4_encaps = [IP(src=tun_ecn.dst,
-                           dst=self.pg0.local_ip4,
-                           tos=tc) for tc in tcs]
+        p_ip4_encaps = [
+            IP(src=tun_ecn.dst, dst=self.pg0.local_ip4, tos=tc) for tc in tcs
+        ]
         p_ip4_replys = [p_ip4.copy() for i in range(len(p_ip4_encaps))]
         p_ip4_replys[2].tos = ecn
         p_ip4_replys[3].tos = ecn
         for i, p_ip4_encap in enumerate(p_ip4_encaps):
         p_ip4_replys = [p_ip4.copy() for i in range(len(p_ip4_encaps))]
         p_ip4_replys[2].tos = ecn
         p_ip4_replys[3].tos = ecn
         for i, p_ip4_encap in enumerate(p_ip4_encaps):
-            p4 = (self.p_ether / p_ip4_encap / p_ip4 / self.p_payload)
-            p4_reply = (p_ip4_replys[i] / self.p_payload)
+            p4 = self.p_ether / p_ip4_encap / p_ip4 / self.p_payload
+            p4_reply = p_ip4_replys[i] / self.p_payload
             p4_reply.ttl -= 1
             rx = self.send_and_expect(self.pg1, p4 * N_PACKETS, self.pg0)
             n_packets_decapped += N_PACKETS
             p4_reply.ttl -= 1
             rx = self.send_and_expect(self.pg1, p4 * N_PACKETS, self.pg0)
             n_packets_decapped += N_PACKETS
@@ -330,22 +371,17 @@ class TestIPIP(VppTestCase):
                 self.validate(p[1], p4_reply)
                 self.assert_packet_checksums_valid(p)
 
                 self.validate(p[1], p4_reply)
                 self.assert_packet_checksums_valid(p)
 
-        err = self.statistics.get_err_counter(
-            '/err/ipip4-input/packets decapsulated')
+        err = self.statistics.get_err_counter("/err/ipip4-input/packets decapsulated")
         self.assertEqual(err, n_packets_decapped)
 
         # IPv4 tunnel to IPv6
         # for each encap tun will produce the same inner packet because it does
         # not copy up fields from the payload
         self.assertEqual(err, n_packets_decapped)
 
         # IPv4 tunnel to IPv6
         # for each encap tun will produce the same inner packet because it does
         # not copy up fields from the payload
-        p_ip4_encaps = [IP(src=tun.dst,
-                           dst=self.pg0.local_ip4,
-                           tos=tc) for tc in tcs]
+        p_ip4_encaps = [IP(src=tun.dst, dst=self.pg0.local_ip4, tos=tc) for tc in tcs]
         p_ip6 = IPv6(src="1:2:3::4", dst=self.pg0.remote_ip6)
         for p_ip4_encap in p_ip4_encaps:
         p_ip6 = IPv6(src="1:2:3::4", dst=self.pg0.remote_ip6)
         for p_ip4_encap in p_ip4_encaps:
-            p6 = (self.p_ether /
-                  p_ip4_encap / p_ip6 /
-                  self.p_payload)
-            p6_reply = (p_ip6 / self.p_payload)
+            p6 = self.p_ether / p_ip4_encap / p_ip6 / self.p_payload
+            p6_reply = p_ip6 / self.p_payload
             p6_reply.hlim = 63
             rx = self.send_and_expect(self.pg1, p6 * N_PACKETS, self.pg0)
             n_packets_decapped += N_PACKETS
             p6_reply.hlim = 63
             rx = self.send_and_expect(self.pg1, p6 * N_PACKETS, self.pg0)
             n_packets_decapped += N_PACKETS
@@ -353,22 +389,21 @@ class TestIPIP(VppTestCase):
                 self.validate(p[1], p6_reply)
                 self.assert_packet_checksums_valid(p)
 
                 self.validate(p[1], p6_reply)
                 self.assert_packet_checksums_valid(p)
 
-        err = self.statistics.get_err_counter(
-            '/err/ipip4-input/packets decapsulated')
+        err = self.statistics.get_err_counter("/err/ipip4-input/packets decapsulated")
         self.assertEqual(err, n_packets_decapped)
 
         # IPv4 tunnel to IPv6
         # tun_ecn copies the ECN bits from the encap to the inner
         self.assertEqual(err, n_packets_decapped)
 
         # IPv4 tunnel to IPv6
         # tun_ecn copies the ECN bits from the encap to the inner
-        p_ip4_encaps = [IP(src=tun_ecn.dst,
-                           dst=self.pg0.local_ip4,
-                           tos=tc) for tc in tcs]
+        p_ip4_encaps = [
+            IP(src=tun_ecn.dst, dst=self.pg0.local_ip4, tos=tc) for tc in tcs
+        ]
         p_ip6 = IPv6(src="1:2:3::4", dst=self.pg0.remote_ip6)
         p_ip6_replys = [p_ip6.copy() for i in range(len(p_ip4_encaps))]
         p_ip6_replys[2].tc = ecn
         p_ip6_replys[3].tc = ecn
         for i, p_ip4_encap in enumerate(p_ip4_encaps):
         p_ip6 = IPv6(src="1:2:3::4", dst=self.pg0.remote_ip6)
         p_ip6_replys = [p_ip6.copy() for i in range(len(p_ip4_encaps))]
         p_ip6_replys[2].tc = ecn
         p_ip6_replys[3].tc = ecn
         for i, p_ip4_encap in enumerate(p_ip4_encaps):
-            p6 = (self.p_ether / p_ip4_encap / p_ip6 / self.p_payload)
-            p6_reply = (p_ip6_replys[i] / self.p_payload)
+            p6 = self.p_ether / p_ip4_encap / p_ip6 / self.p_payload
+            p6_reply = p_ip6_replys[i] / self.p_payload
             p6_reply.hlim = 63
             rx = self.send_and_expect(self.pg1, p6 * N_PACKETS, self.pg0)
             n_packets_decapped += N_PACKETS
             p6_reply.hlim = 63
             rx = self.send_and_expect(self.pg1, p6 * N_PACKETS, self.pg0)
             n_packets_decapped += N_PACKETS
@@ -376,21 +411,23 @@ class TestIPIP(VppTestCase):
                 self.validate(p[1], p6_reply)
                 self.assert_packet_checksums_valid(p)
 
                 self.validate(p[1], p6_reply)
                 self.assert_packet_checksums_valid(p)
 
-        err = self.statistics.get_err_counter(
-            '/err/ipip4-input/packets decapsulated')
+        err = self.statistics.get_err_counter("/err/ipip4-input/packets decapsulated")
         self.assertEqual(err, n_packets_decapped)
 
         #
         # Fragmentation / Reassembly and Re-fragmentation
         #
         rv = self.vapi.ip_reassembly_enable_disable(
         self.assertEqual(err, n_packets_decapped)
 
         #
         # Fragmentation / Reassembly and Re-fragmentation
         #
         rv = self.vapi.ip_reassembly_enable_disable(
-            sw_if_index=self.pg1.sw_if_index,
-            enable_ip4=1)
+            sw_if_index=self.pg1.sw_if_index, enable_ip4=1
+        )
 
 
-        self.vapi.ip_reassembly_set(timeout_ms=1000, max_reassemblies=1000,
-                                    max_reassembly_length=1000,
-                                    expire_walk_interval_ms=10000,
-                                    is_ip6=0)
+        self.vapi.ip_reassembly_set(
+            timeout_ms=1000,
+            max_reassemblies=1000,
+            max_reassembly_length=1000,
+            expire_walk_interval_ms=10000,
+            is_ip6=0,
+        )
 
         # Send lots of fragments, verify reassembled packet
         frags, p4_reply = self.generate_ip4_frags(3131, 1400)
 
         # Send lots of fragments, verify reassembled packet
         frags, p4_reply = self.generate_ip4_frags(3131, 1400)
@@ -406,8 +443,7 @@ class TestIPIP(VppTestCase):
         for p in rx:
             self.validate(p[1], p4_reply)
 
         for p in rx:
             self.validate(p[1], p4_reply)
 
-        err = self.statistics.get_err_counter(
-            '/err/ipip4-input/packets decapsulated')
+        err = self.statistics.get_err_counter("/err/ipip4-input/packets decapsulated")
         self.assertEqual(err, n_packets_decapped)
 
         f = []
         self.assertEqual(err, n_packets_decapped)
 
         f = []
@@ -453,9 +489,12 @@ class TestIPIP(VppTestCase):
         # send large packets through the tunnel, expect them to be fragmented
         self.vapi.sw_interface_set_mtu(tun_dscp.sw_if_index, [600, 0, 0, 0])
 
         # send large packets through the tunnel, expect them to be fragmented
         self.vapi.sw_interface_set_mtu(tun_dscp.sw_if_index, [600, 0, 0, 0])
 
-        p4 = (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-              IP(src="1.2.3.4", dst="130.67.0.1", tos=42) /
-              UDP(sport=1234, dport=1234) / Raw(b'Q' * 1000))
+        p4 = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src="1.2.3.4", dst="130.67.0.1", tos=42)
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"Q" * 1000)
+        )
         rx = self.send_and_expect(self.pg0, p4 * 15, self.pg1, 30)
         inners = []
         for p in rx:
         rx = self.send_and_expect(self.pg0, p4 * 15, self.pg1, 30)
         inners = []
         for p in rx:
@@ -466,25 +505,25 @@ class TestIPIP(VppTestCase):
             self.assertEqual(p[IP].ttl, 63)
 
     def test_ipip_create(self):
             self.assertEqual(p[IP].ttl, 63)
 
     def test_ipip_create(self):
-        """ ipip create / delete interface test """
-        rv = ipip_add_tunnel(self, '1.2.3.4', '2.3.4.5')
+        """ipip create / delete interface test"""
+        rv = ipip_add_tunnel(self, "1.2.3.4", "2.3.4.5")
         sw_if_index = rv.sw_if_index
         self.vapi.ipip_del_tunnel(sw_if_index)
 
     def test_ipip_vrf_create(self):
         sw_if_index = rv.sw_if_index
         self.vapi.ipip_del_tunnel(sw_if_index)
 
     def test_ipip_vrf_create(self):
-        """ ipip create / delete interface VRF test """
+        """ipip create / delete interface VRF test"""
 
         t = VppIpTable(self, 20)
         t.add_vpp_config()
 
         t = VppIpTable(self, 20)
         t.add_vpp_config()
-        rv = ipip_add_tunnel(self, '1.2.3.4', '2.3.4.5', table_id=20)
+        rv = ipip_add_tunnel(self, "1.2.3.4", "2.3.4.5", table_id=20)
         sw_if_index = rv.sw_if_index
         self.vapi.ipip_del_tunnel(sw_if_index)
 
     def payload(self, len):
         sw_if_index = rv.sw_if_index
         self.vapi.ipip_del_tunnel(sw_if_index)
 
     def payload(self, len):
-        return 'x' * len
+        return "x" * len
 
     def test_mipip4(self):
 
     def test_mipip4(self):
-        """ p2mp IPv4 tunnel Tests """
+        """p2mp IPv4 tunnel Tests"""
 
         for itf in self.pg_interfaces[:2]:
             #
 
         for itf in self.pg_interfaces[:2]:
             #
@@ -499,11 +538,13 @@ class TestIPIP(VppTestCase):
             #  - assign an IP Addres
             #  - Add a route via the tunnel
             #
             #  - assign an IP Addres
             #  - Add a route via the tunnel
             #
-            ipip_if = VppIpIpTunInterface(self, itf,
-                                          itf.local_ip4,
-                                          "0.0.0.0",
-                                          mode=(VppEnum.vl_api_tunnel_mode_t.
-                                                TUNNEL_API_MODE_MP))
+            ipip_if = VppIpIpTunInterface(
+                self,
+                itf,
+                itf.local_ip4,
+                "0.0.0.0",
+                mode=(VppEnum.vl_api_tunnel_mode_t.TUNNEL_API_MODE_MP),
+            )
             ipip_if.add_vpp_config()
             ipip_if.admin_up()
             ipip_if.config_ip4()
             ipip_if.add_vpp_config()
             ipip_if.admin_up()
             ipip_if.config_ip4()
@@ -533,31 +574,40 @@ class TestIPIP(VppTestCase):
                 # route traffic via the peer
                 #
                 route_via_tun = VppIpRoute(
                 # route traffic via the peer
                 #
                 route_via_tun = VppIpRoute(
-                    self, route_addr, 32,
-                    [VppRoutePath(ipip_if._remote_hosts[ii].ip4,
-                                  ipip_if.sw_if_index)])
+                    self,
+                    route_addr,
+                    32,
+                    [VppRoutePath(ipip_if._remote_hosts[ii].ip4, ipip_if.sw_if_index)],
+                )
                 route_via_tun.add_vpp_config()
 
                 #
                 # Add a TEIB entry resolves the peer
                 #
                 route_via_tun.add_vpp_config()
 
                 #
                 # Add a TEIB entry resolves the peer
                 #
-                teib = VppTeib(self, ipip_if,
-                               ipip_if._remote_hosts[ii].ip4,
-                               itf._remote_hosts[ii].ip4)
+                teib = VppTeib(
+                    self,
+                    ipip_if,
+                    ipip_if._remote_hosts[ii].ip4,
+                    itf._remote_hosts[ii].ip4,
+                )
                 teib.add_vpp_config()
                 teib.add_vpp_config()
-                self.logger.info(self.vapi.cli("sh adj nbr ipip0 %s" %
-                                               ipip_if._remote_hosts[ii].ip4))
+                self.logger.info(
+                    self.vapi.cli("sh adj nbr ipip0 %s" % ipip_if._remote_hosts[ii].ip4)
+                )
 
                 #
                 # Send a packet stream that is routed into the tunnel
                 #  - packets are IPIP encapped
                 #
 
                 #
                 # Send a packet stream that is routed into the tunnel
                 #  - packets are IPIP encapped
                 #
-                inner = (IP(dst=route_addr, src="5.5.5.5") /
-                         UDP(sport=1234, dport=1234) /
-                         Raw(b'0x44' * 100))
-                tx_e = [(Ether(dst=self.pg0.local_mac,
-                               src=self.pg0.remote_mac) /
-                         inner) for x in range(63)]
+                inner = (
+                    IP(dst=route_addr, src="5.5.5.5")
+                    / UDP(sport=1234, dport=1234)
+                    / Raw(b"0x44" * 100)
+                )
+                tx_e = [
+                    (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) / inner)
+                    for x in range(63)
+                ]
 
                 rxs = self.send_and_expect(self.pg0, tx_e, itf)
 
 
                 rxs = self.send_and_expect(self.pg0, tx_e, itf)
 
@@ -565,13 +615,16 @@ class TestIPIP(VppTestCase):
                     self.assertEqual(rx[IP].src, itf.local_ip4)
                     self.assertEqual(rx[IP].dst, itf._remote_hosts[ii].ip4)
 
                     self.assertEqual(rx[IP].src, itf.local_ip4)
                     self.assertEqual(rx[IP].dst, itf._remote_hosts[ii].ip4)
 
-                tx_i = [(Ether(dst=self.pg0.local_mac,
-                               src=self.pg0.remote_mac) /
-                         IP(src=itf._remote_hosts[ii].ip4,
-                            dst=itf.local_ip4) /
-                         IP(src=self.pg0.local_ip4, dst=self.pg0.remote_ip4) /
-                         UDP(sport=1234, dport=1234) /
-                         Raw(b'0x44' * 100)) for x in range(63)]
+                tx_i = [
+                    (
+                        Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+                        / IP(src=itf._remote_hosts[ii].ip4, dst=itf.local_ip4)
+                        / IP(src=self.pg0.local_ip4, dst=self.pg0.remote_ip4)
+                        / UDP(sport=1234, dport=1234)
+                        / Raw(b"0x44" * 100)
+                    )
+                    for x in range(63)
+                ]
 
                 self.logger.info(self.vapi.cli("sh ipip tunnel-hash"))
                 rx = self.send_and_expect(self.pg0, tx_i, self.pg0)
 
                 self.logger.info(self.vapi.cli("sh ipip tunnel-hash"))
                 rx = self.send_and_expect(self.pg0, tx_i, self.pg0)
@@ -593,12 +646,15 @@ class TestIPIP(VppTestCase):
                 #
                 # we can also send to the peer's address
                 #
                 #
                 # we can also send to the peer's address
                 #
-                inner = (IP(dst=teib.peer, src="5.5.5.5") /
-                         UDP(sport=1234, dport=1234) /
-                         Raw(b'0x44' * 100))
-                tx_e = [(Ether(dst=self.pg0.local_mac,
-                               src=self.pg0.remote_mac) /
-                         inner) for x in range(63)]
+                inner = (
+                    IP(dst=teib.peer, src="5.5.5.5")
+                    / UDP(sport=1234, dport=1234)
+                    / Raw(b"0x44" * 100)
+                )
+                tx_e = [
+                    (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) / inner)
+                    for x in range(63)
+                ]
 
                 rxs = self.send_and_expect(self.pg0, tx_e, itf)
 
 
                 rxs = self.send_and_expect(self.pg0, tx_e, itf)
 
@@ -616,12 +672,15 @@ class TestIPIP(VppTestCase):
             #
             # we should still be able to reach the peers from the new table
             #
             #
             # we should still be able to reach the peers from the new table
             #
-            inner = (IP(dst=teib.peer, src="5.5.5.5") /
-                     UDP(sport=1234, dport=1234) /
-                     Raw(b'0x44' * 100))
-            tx_e = [(Ether(dst=self.pg0.local_mac,
-                           src=self.pg0.remote_mac) /
-                     inner) for x in range(63)]
+            inner = (
+                IP(dst=teib.peer, src="5.5.5.5")
+                / UDP(sport=1234, dport=1234)
+                / Raw(b"0x44" * 100)
+            )
+            tx_e = [
+                (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) / inner)
+                for x in range(63)
+            ]
 
             rxs = self.send_and_expect(self.pg2, tx_e, itf)
 
 
             rxs = self.send_and_expect(self.pg2, tx_e, itf)
 
@@ -631,7 +690,7 @@ class TestIPIP(VppTestCase):
 
 
 class TestIPIP6(VppTestCase):
 
 
 class TestIPIP6(VppTestCase):
-    """ IPIP6 Test Case """
+    """IPIP6 Test Case"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -665,30 +724,34 @@ class TestIPIP6(VppTestCase):
 
     def setup_tunnel(self):
         # IPv6 transport
 
     def setup_tunnel(self):
         # IPv6 transport
-        rv = ipip_add_tunnel(self,
-                             self.pg0.local_ip6,
-                             self.pg1.remote_ip6)
+        rv = ipip_add_tunnel(self, self.pg0.local_ip6, self.pg1.remote_ip6)
 
         sw_if_index = rv.sw_if_index
         self.tunnel_if_index = sw_if_index
         self.vapi.sw_interface_set_flags(sw_if_index, 1)
         self.vapi.sw_interface_set_unnumbered(
 
         sw_if_index = rv.sw_if_index
         self.tunnel_if_index = sw_if_index
         self.vapi.sw_interface_set_flags(sw_if_index, 1)
         self.vapi.sw_interface_set_unnumbered(
-            sw_if_index=self.pg0.sw_if_index,
-            unnumbered_sw_if_index=sw_if_index)
+            sw_if_index=self.pg0.sw_if_index, unnumbered_sw_if_index=sw_if_index
+        )
 
         # Add IPv4 and IPv6 routes via tunnel interface
         ip4_via_tunnel = VppIpRoute(
 
         # Add IPv4 and IPv6 routes via tunnel interface
         ip4_via_tunnel = VppIpRoute(
-            self, "130.67.0.0", 16,
-            [VppRoutePath("0.0.0.0",
-                          sw_if_index,
-                          proto=FibPathProto.FIB_PATH_NH_PROTO_IP4)])
+            self,
+            "130.67.0.0",
+            16,
+            [
+                VppRoutePath(
+                    "0.0.0.0", sw_if_index, proto=FibPathProto.FIB_PATH_NH_PROTO_IP4
+                )
+            ],
+        )
         ip4_via_tunnel.add_vpp_config()
 
         ip6_via_tunnel = VppIpRoute(
         ip4_via_tunnel.add_vpp_config()
 
         ip6_via_tunnel = VppIpRoute(
-            self, "dead::", 16,
-            [VppRoutePath("::",
-                          sw_if_index,
-                          proto=FibPathProto.FIB_PATH_NH_PROTO_IP6)])
+            self,
+            "dead::",
+            16,
+            [VppRoutePath("::", sw_if_index, proto=FibPathProto.FIB_PATH_NH_PROTO_IP6)],
+        )
         ip6_via_tunnel.add_vpp_config()
 
         self.tunnel_ip6_via_tunnel = ip6_via_tunnel
         ip6_via_tunnel.add_vpp_config()
 
         self.tunnel_ip6_via_tunnel = ip6_via_tunnel
@@ -708,11 +771,15 @@ class TestIPIP6(VppTestCase):
         p_ether = Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
         p_payload = UDP(sport=1234, dport=1234) / self.payload(payload_length)
         p_ip6 = IPv6(src="1::1", dst=self.pg0.remote_ip6)
         p_ether = Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
         p_payload = UDP(sport=1234, dport=1234) / self.payload(payload_length)
         p_ip6 = IPv6(src="1::1", dst=self.pg0.remote_ip6)
-        outer_ip6 = (p_ether / IPv6(src=self.pg1.remote_ip6,
-                                    dst=self.pg0.local_ip6) /
-                     IPv6ExtHdrFragment() / p_ip6 / p_payload)
+        outer_ip6 = (
+            p_ether
+            / IPv6(src=self.pg1.remote_ip6, dst=self.pg0.local_ip6)
+            / IPv6ExtHdrFragment()
+            / p_ip6
+            / p_payload
+        )
         frags = fragment6(outer_ip6, fragment_size)
         frags = fragment6(outer_ip6, fragment_size)
-        p6_reply = (p_ip6 / p_payload)
+        p6_reply = p_ip6 / p_payload
         p6_reply.hlim -= 1
         return frags, p6_reply
 
         p6_reply.hlim -= 1
         return frags, p6_reply
 
@@ -720,58 +787,73 @@ class TestIPIP6(VppTestCase):
         p_ether = Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
         p_payload = UDP(sport=1234, dport=1234) / self.payload(payload_length)
         p_ip6 = IPv6(src="1::1", dst="dead::1")
         p_ether = Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
         p_payload = UDP(sport=1234, dport=1234) / self.payload(payload_length)
         p_ip6 = IPv6(src="1::1", dst="dead::1")
-        outer_ip6 = (p_ether / IPv6(src=self.pg1.remote_ip6,
-                                    dst=self.pg0.local_ip6) /
-                     IPv6ExtHdrFragment() / p_ip6 / p_payload)
+        outer_ip6 = (
+            p_ether
+            / IPv6(src=self.pg1.remote_ip6, dst=self.pg0.local_ip6)
+            / IPv6ExtHdrFragment()
+            / p_ip6
+            / p_payload
+        )
         frags = fragment6(outer_ip6, fragment_size)
         p_ip6.hlim -= 1
         frags = fragment6(outer_ip6, fragment_size)
         p_ip6.hlim -= 1
-        p6_reply = (IPv6(src=self.pg0.local_ip6, dst=self.pg1.remote_ip6,
-                         hlim=63) / p_ip6 / p_payload)
+        p6_reply = (
+            IPv6(src=self.pg0.local_ip6, dst=self.pg1.remote_ip6, hlim=63)
+            / p_ip6
+            / p_payload
+        )
 
         return frags, p6_reply
 
     def test_encap(self):
 
         return frags, p6_reply
 
     def test_encap(self):
-        """ ip{v4,v6} over ip6 test encap """
+        """ip{v4,v6} over ip6 test encap"""
         p_ether = Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
         p_ether = Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
-        p_ip6 = IPv6(src="1::1", dst="DEAD::1", tc=42, nh='UDP')
+        p_ip6 = IPv6(src="1::1", dst="DEAD::1", tc=42, nh="UDP")
         p_ip4 = IP(src="1.2.3.4", dst="130.67.0.1", tos=42)
         p_payload = UDP(sport=1234, dport=1234)
 
         # Encapsulation
         # IPv6 in to IPv6 tunnel
         p_ip4 = IP(src="1.2.3.4", dst="130.67.0.1", tos=42)
         p_payload = UDP(sport=1234, dport=1234)
 
         # Encapsulation
         # IPv6 in to IPv6 tunnel
-        p6 = (p_ether / p_ip6 / p_payload)
-        p6_reply = (IPv6(src=self.pg0.local_ip6, dst=self.pg1.remote_ip6,
-                         hlim=64) /
-                    p_ip6 / p_payload)
+        p6 = p_ether / p_ip6 / p_payload
+        p6_reply = (
+            IPv6(src=self.pg0.local_ip6, dst=self.pg1.remote_ip6, hlim=64)
+            / p_ip6
+            / p_payload
+        )
         p6_reply[1].hlim -= 1
         rx = self.send_and_expect(self.pg0, p6 * 11, self.pg1)
         for p in rx:
             self.validate(p[1], p6_reply)
 
         # IPv4 in to IPv6 tunnel
         p6_reply[1].hlim -= 1
         rx = self.send_and_expect(self.pg0, p6 * 11, self.pg1)
         for p in rx:
             self.validate(p[1], p6_reply)
 
         # IPv4 in to IPv6 tunnel
-        p4 = (p_ether / p_ip4 / p_payload)
-        p4_reply = (IPv6(src=self.pg0.local_ip6,
-                         dst=self.pg1.remote_ip6, hlim=64) /
-                    p_ip4 / p_payload)
+        p4 = p_ether / p_ip4 / p_payload
+        p4_reply = (
+            IPv6(src=self.pg0.local_ip6, dst=self.pg1.remote_ip6, hlim=64)
+            / p_ip4
+            / p_payload
+        )
         p4_reply[1].ttl -= 1
         rx = self.send_and_expect(self.pg0, p4 * 11, self.pg1)
         for p in rx:
             self.validate(p[1], p4_reply)
 
     def test_decap(self):
         p4_reply[1].ttl -= 1
         rx = self.send_and_expect(self.pg0, p4 * 11, self.pg1)
         for p in rx:
             self.validate(p[1], p4_reply)
 
     def test_decap(self):
-        """ ip{v4,v6} over ip6 test decap """
+        """ip{v4,v6} over ip6 test decap"""
 
         p_ether = Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
 
         p_ether = Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
-        p_ip6 = IPv6(src="1::1", dst="DEAD::1", tc=42, nh='UDP')
+        p_ip6 = IPv6(src="1::1", dst="DEAD::1", tc=42, nh="UDP")
         p_ip4 = IP(src="1.2.3.4", dst=self.pg0.remote_ip4)
         p_payload = UDP(sport=1234, dport=1234)
 
         # Decapsulation
         # IPv6 tunnel to IPv4
 
         p_ip4 = IP(src="1.2.3.4", dst=self.pg0.remote_ip4)
         p_payload = UDP(sport=1234, dport=1234)
 
         # Decapsulation
         # IPv6 tunnel to IPv4
 
-        p4 = (p_ether / IPv6(src=self.pg1.remote_ip6,
-                             dst=self.pg0.local_ip6) / p_ip4 / p_payload)
-        p4_reply = (p_ip4 / p_payload)
+        p4 = (
+            p_ether
+            / IPv6(src=self.pg1.remote_ip6, dst=self.pg0.local_ip6)
+            / p_ip4
+            / p_payload
+        )
+        p4_reply = p_ip4 / p_payload
         p4_reply.ttl -= 1
         rx = self.send_and_expect(self.pg1, p4 * 11, self.pg0)
         for p in rx:
         p4_reply.ttl -= 1
         rx = self.send_and_expect(self.pg1, p4 * 11, self.pg0)
         for p in rx:
@@ -779,9 +861,13 @@ class TestIPIP6(VppTestCase):
 
         # IPv6 tunnel to IPv6
         p_ip6 = IPv6(src="1:2:3::4", dst=self.pg0.remote_ip6)
 
         # IPv6 tunnel to IPv6
         p_ip6 = IPv6(src="1:2:3::4", dst=self.pg0.remote_ip6)
-        p6 = (p_ether / IPv6(src=self.pg1.remote_ip6,
-                             dst=self.pg0.local_ip6) / p_ip6 / p_payload)
-        p6_reply = (p_ip6 / p_payload)
+        p6 = (
+            p_ether
+            / IPv6(src=self.pg1.remote_ip6, dst=self.pg0.local_ip6)
+            / p_ip6
+            / p_payload
+        )
+        p6_reply = p_ip6 / p_payload
         p6_reply.hlim = 63
         rx = self.send_and_expect(self.pg1, p6 * 11, self.pg0)
         for p in rx:
         p6_reply.hlim = 63
         rx = self.send_and_expect(self.pg1, p6 * 11, self.pg0)
         for p in rx:
@@ -790,10 +876,10 @@ class TestIPIP6(VppTestCase):
     def verify_ip4ip6_encaps(self, a, p_ip4s, p_ip6_encaps):
         for i, p_ip4 in enumerate(p_ip4s):
             p_ip4.dst = a
     def verify_ip4ip6_encaps(self, a, p_ip4s, p_ip6_encaps):
         for i, p_ip4 in enumerate(p_ip4s):
             p_ip4.dst = a
-            p4 = (self.p_ether / p_ip4 / self.p_payload)
+            p4 = self.p_ether / p_ip4 / self.p_payload
             p_ip4_inner = p_ip4
             p_ip4_inner.ttl -= 1
             p_ip4_inner = p_ip4
             p_ip4_inner.ttl -= 1
-            p6_reply = (p_ip6_encaps[i] / p_ip4_inner / self.p_payload)
+            p6_reply = p_ip6_encaps[i] / p_ip4_inner / self.p_payload
             rx = self.send_and_expect(self.pg0, p4 * N_PACKETS, self.pg1)
             for p in rx:
                 self.validate(p[1], p6_reply)
             rx = self.send_and_expect(self.pg0, p4 * N_PACKETS, self.pg1)
             for p in rx:
                 self.validate(p[1], p6_reply)
@@ -802,17 +888,17 @@ class TestIPIP6(VppTestCase):
     def verify_ip6ip6_encaps(self, a, p_ip6s, p_ip6_encaps):
         for i, p_ip6 in enumerate(p_ip6s):
             p_ip6.dst = a
     def verify_ip6ip6_encaps(self, a, p_ip6s, p_ip6_encaps):
         for i, p_ip6 in enumerate(p_ip6s):
             p_ip6.dst = a
-            p6 = (self.p_ether / p_ip6 / self.p_payload)
+            p6 = self.p_ether / p_ip6 / self.p_payload
             p_inner_ip6 = p_ip6
             p_inner_ip6.hlim -= 1
             p_inner_ip6 = p_ip6
             p_inner_ip6.hlim -= 1
-            p6_reply = (p_ip6_encaps[i] / p_inner_ip6 / self.p_payload)
+            p6_reply = p_ip6_encaps[i] / p_inner_ip6 / self.p_payload
             rx = self.send_and_expect(self.pg0, p6 * N_PACKETS, self.pg1)
             for p in rx:
                 self.validate(p[1], p6_reply)
                 self.assert_packet_checksums_valid(p)
 
     def test_ipip6(self):
             rx = self.send_and_expect(self.pg0, p6 * N_PACKETS, self.pg1)
             for p in rx:
                 self.validate(p[1], p6_reply)
                 self.assert_packet_checksums_valid(p)
 
     def test_ipip6(self):
-        """ ip{v4,v6} over ip6 test """
+        """ip{v4,v6} over ip6 test"""
 
         # that's annoying
         self.destroy_tunnel()
 
         # that's annoying
         self.destroy_tunnel()
@@ -822,7 +908,7 @@ class TestIPIP6(VppTestCase):
         e = VppEnum.vl_api_tunnel_encap_decap_flags_t
         d = VppEnum.vl_api_ip_dscp_t
         self.p_ether = Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
         e = VppEnum.vl_api_tunnel_encap_decap_flags_t
         d = VppEnum.vl_api_ip_dscp_t
         self.p_ether = Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
-        self.p_payload = UDP(sport=1234, dport=1234) / Raw(b'X' * 100)
+        self.p_payload = UDP(sport=1234, dport=1234) / Raw(b"X" * 100)
 
         # create a TOS byte by shifting a DSCP code point 2 bits. those 2 bits
         # are for the ECN.
 
         # create a TOS byte by shifting a DSCP code point 2 bits. those 2 bits
         # are for the ECN.
@@ -836,7 +922,8 @@ class TestIPIP6(VppTestCase):
             self.pg0,
             self.pg0.local_ip6,
             self.pg1.remote_hosts[0].ip6,
             self.pg0,
             self.pg0.local_ip6,
             self.pg1.remote_hosts[0].ip6,
-            flags=e.TUNNEL_API_ENCAP_DECAP_FLAG_ENCAP_COPY_DSCP)
+            flags=e.TUNNEL_API_ENCAP_DECAP_FLAG_ENCAP_COPY_DSCP,
+        )
         tun_dscp.add_vpp_config()
         # IPv4 transport that copies the DCSP and ECN from the payload
         tun_dscp_ecn = VppIpIpTunInterface(
         tun_dscp.add_vpp_config()
         # IPv4 transport that copies the DCSP and ECN from the payload
         tun_dscp_ecn = VppIpIpTunInterface(
@@ -844,8 +931,11 @@ class TestIPIP6(VppTestCase):
             self.pg0,
             self.pg0.local_ip6,
             self.pg1.remote_hosts[1].ip6,
             self.pg0,
             self.pg0.local_ip6,
             self.pg1.remote_hosts[1].ip6,
-            flags=(e.TUNNEL_API_ENCAP_DECAP_FLAG_ENCAP_COPY_DSCP |
-                   e.TUNNEL_API_ENCAP_DECAP_FLAG_ENCAP_COPY_ECN))
+            flags=(
+                e.TUNNEL_API_ENCAP_DECAP_FLAG_ENCAP_COPY_DSCP
+                | e.TUNNEL_API_ENCAP_DECAP_FLAG_ENCAP_COPY_ECN
+            ),
+        )
         tun_dscp_ecn.add_vpp_config()
         # IPv4 transport that copies the ECN from the payload and sets the
         # DF bit on encap. copies the ECN on decap
         tun_dscp_ecn.add_vpp_config()
         # IPv4 transport that copies the ECN from the payload and sets the
         # DF bit on encap. copies the ECN on decap
@@ -854,9 +944,12 @@ class TestIPIP6(VppTestCase):
             self.pg0,
             self.pg0.local_ip6,
             self.pg1.remote_hosts[2].ip6,
             self.pg0,
             self.pg0.local_ip6,
             self.pg1.remote_hosts[2].ip6,
-            flags=(e.TUNNEL_API_ENCAP_DECAP_FLAG_ENCAP_COPY_ECN |
-                   e.TUNNEL_API_ENCAP_DECAP_FLAG_ENCAP_SET_DF |
-                   e.TUNNEL_API_ENCAP_DECAP_FLAG_DECAP_COPY_ECN))
+            flags=(
+                e.TUNNEL_API_ENCAP_DECAP_FLAG_ENCAP_COPY_ECN
+                | e.TUNNEL_API_ENCAP_DECAP_FLAG_ENCAP_SET_DF
+                | e.TUNNEL_API_ENCAP_DECAP_FLAG_DECAP_COPY_ECN
+            ),
+        )
         tun_ecn.add_vpp_config()
         # IPv4 transport that sets a fixed DSCP in the encap and copies
         # the DF bit
         tun_ecn.add_vpp_config()
         # IPv4 transport that sets a fixed DSCP in the encap and copies
         # the DF bit
@@ -866,7 +959,8 @@ class TestIPIP6(VppTestCase):
             self.pg0.local_ip6,
             self.pg1.remote_hosts[3].ip6,
             dscp=d.IP_API_DSCP_AF11,
             self.pg0.local_ip6,
             self.pg1.remote_hosts[3].ip6,
             dscp=d.IP_API_DSCP_AF11,
-            flags=e.TUNNEL_API_ENCAP_DECAP_FLAG_ENCAP_COPY_DF)
+            flags=e.TUNNEL_API_ENCAP_DECAP_FLAG_ENCAP_COPY_DF,
+        )
         tun.add_vpp_config()
 
         # array of all the tunnels
         tun.add_vpp_config()
 
         # array of all the tunnels
@@ -877,22 +971,26 @@ class TestIPIP6(VppTestCase):
         a6s = ["" for i in range(len(tuns))]
 
         # IP headers for inner packets with each combination of DSCp/ECN tested
         a6s = ["" for i in range(len(tuns))]
 
         # IP headers for inner packets with each combination of DSCp/ECN tested
-        p_ip6s = [IPv6(src="1::1", dst="DEAD::1", nh='UDP', tc=dscp),
-                  IPv6(src="1::1", dst="DEAD::1", nh='UDP', tc=dscp_ecn),
-                  IPv6(src="1::1", dst="DEAD::1", nh='UDP', tc=ecn),
-                  IPv6(src="1::1", dst="DEAD::1", nh='UDP', tc=0xff)]
-        p_ip4s = [IP(src="1.2.3.4", dst="130.67.0.1", tos=dscp, flags='DF'),
-                  IP(src="1.2.3.4", dst="130.67.0.1", tos=dscp_ecn),
-                  IP(src="1.2.3.4", dst="130.67.0.1", tos=ecn),
-                  IP(src="1.2.3.4", dst="130.67.0.1", tos=0xff)]
+        p_ip6s = [
+            IPv6(src="1::1", dst="DEAD::1", nh="UDP", tc=dscp),
+            IPv6(src="1::1", dst="DEAD::1", nh="UDP", tc=dscp_ecn),
+            IPv6(src="1::1", dst="DEAD::1", nh="UDP", tc=ecn),
+            IPv6(src="1::1", dst="DEAD::1", nh="UDP", tc=0xFF),
+        ]
+        p_ip4s = [
+            IP(src="1.2.3.4", dst="130.67.0.1", tos=dscp, flags="DF"),
+            IP(src="1.2.3.4", dst="130.67.0.1", tos=dscp_ecn),
+            IP(src="1.2.3.4", dst="130.67.0.1", tos=ecn),
+            IP(src="1.2.3.4", dst="130.67.0.1", tos=0xFF),
+        ]
 
         # Configure each tunnel
         for i, t in enumerate(tuns):
             # Set interface up and enable IP on it
             self.vapi.sw_interface_set_flags(t.sw_if_index, 1)
             self.vapi.sw_interface_set_unnumbered(
 
         # Configure each tunnel
         for i, t in enumerate(tuns):
             # Set interface up and enable IP on it
             self.vapi.sw_interface_set_flags(t.sw_if_index, 1)
             self.vapi.sw_interface_set_unnumbered(
-                sw_if_index=self.pg0.sw_if_index,
-                unnumbered_sw_if_index=t.sw_if_index)
+                sw_if_index=self.pg0.sw_if_index, unnumbered_sw_if_index=t.sw_if_index
+            )
 
             # prefix for route / destination address for packets
             a4s[i] = "130.67.%d.0" % i
 
             # prefix for route / destination address for packets
             a4s[i] = "130.67.%d.0" % i
@@ -900,17 +998,29 @@ class TestIPIP6(VppTestCase):
 
             # Add IPv4 and IPv6 routes via tunnel interface
             ip4_via_tunnel = VppIpRoute(
 
             # Add IPv4 and IPv6 routes via tunnel interface
             ip4_via_tunnel = VppIpRoute(
-                self, a4s[i], 24,
-                [VppRoutePath("0.0.0.0",
-                              t.sw_if_index,
-                              proto=FibPathProto.FIB_PATH_NH_PROTO_IP4)])
+                self,
+                a4s[i],
+                24,
+                [
+                    VppRoutePath(
+                        "0.0.0.0",
+                        t.sw_if_index,
+                        proto=FibPathProto.FIB_PATH_NH_PROTO_IP4,
+                    )
+                ],
+            )
             ip4_via_tunnel.add_vpp_config()
 
             ip6_via_tunnel = VppIpRoute(
             ip4_via_tunnel.add_vpp_config()
 
             ip6_via_tunnel = VppIpRoute(
-                self, a6s[i], 64,
-                [VppRoutePath("::",
-                              t.sw_if_index,
-                              proto=FibPathProto.FIB_PATH_NH_PROTO_IP6)])
+                self,
+                a6s[i],
+                64,
+                [
+                    VppRoutePath(
+                        "::", t.sw_if_index, proto=FibPathProto.FIB_PATH_NH_PROTO_IP6
+                    )
+                ],
+            )
             ip6_via_tunnel.add_vpp_config()
 
         #
             ip6_via_tunnel.add_vpp_config()
 
         #
@@ -920,10 +1030,10 @@ class TestIPIP6(VppTestCase):
         # tun_dscp copies only the dscp
         # expected TC values are thus only the DCSP value is present from the
         # inner
         # tun_dscp copies only the dscp
         # expected TC values are thus only the DCSP value is present from the
         # inner
-        exp_tcs = [dscp, dscp, 0, 0xfc]
-        p_ip6_encaps = [IPv6(src=self.pg0.local_ip6,
-                             dst=tun_dscp.dst,
-                             tc=tc) for tc in exp_tcs]
+        exp_tcs = [dscp, dscp, 0, 0xFC]
+        p_ip6_encaps = [
+            IPv6(src=self.pg0.local_ip6, dst=tun_dscp.dst, tc=tc) for tc in exp_tcs
+        ]
 
         # IPv4 in to IPv4 tunnel
         self.verify_ip4ip6_encaps(a4s[0], p_ip4s, p_ip6_encaps)
 
         # IPv4 in to IPv4 tunnel
         self.verify_ip4ip6_encaps(a4s[0], p_ip4s, p_ip6_encaps)
@@ -931,28 +1041,29 @@ class TestIPIP6(VppTestCase):
         self.verify_ip6ip6_encaps(a6s[0], p_ip6s, p_ip6_encaps)
 
         # tun_dscp_ecn copies the dscp and the ecn
         self.verify_ip6ip6_encaps(a6s[0], p_ip6s, p_ip6_encaps)
 
         # tun_dscp_ecn copies the dscp and the ecn
-        exp_tcs = [dscp, dscp_ecn, ecn, 0xff]
-        p_ip6_encaps = [IPv6(src=self.pg0.local_ip6,
-                             dst=tun_dscp_ecn.dst,
-                             tc=tc) for tc in exp_tcs]
+        exp_tcs = [dscp, dscp_ecn, ecn, 0xFF]
+        p_ip6_encaps = [
+            IPv6(src=self.pg0.local_ip6, dst=tun_dscp_ecn.dst, tc=tc) for tc in exp_tcs
+        ]
 
         self.verify_ip4ip6_encaps(a4s[1], p_ip4s, p_ip6_encaps)
         self.verify_ip6ip6_encaps(a6s[1], p_ip6s, p_ip6_encaps)
 
         # tun_ecn copies only the ecn and always sets DF
         exp_tcs = [0, ecn, ecn, ecn]
 
         self.verify_ip4ip6_encaps(a4s[1], p_ip4s, p_ip6_encaps)
         self.verify_ip6ip6_encaps(a6s[1], p_ip6s, p_ip6_encaps)
 
         # tun_ecn copies only the ecn and always sets DF
         exp_tcs = [0, ecn, ecn, ecn]
-        p_ip6_encaps = [IPv6(src=self.pg0.local_ip6,
-                             dst=tun_ecn.dst,
-                             tc=tc) for tc in exp_tcs]
+        p_ip6_encaps = [
+            IPv6(src=self.pg0.local_ip6, dst=tun_ecn.dst, tc=tc) for tc in exp_tcs
+        ]
 
         self.verify_ip4ip6_encaps(a4s[2], p_ip4s, p_ip6_encaps)
         self.verify_ip6ip6_encaps(a6s[2], p_ip6s, p_ip6_encaps)
 
         # tun sets a fixed dscp
         fixed_dscp = tun.dscp << 2
 
         self.verify_ip4ip6_encaps(a4s[2], p_ip4s, p_ip6_encaps)
         self.verify_ip6ip6_encaps(a6s[2], p_ip6s, p_ip6_encaps)
 
         # tun sets a fixed dscp
         fixed_dscp = tun.dscp << 2
-        p_ip6_encaps = [IPv6(src=self.pg0.local_ip6,
-                             dst=tun.dst,
-                             tc=fixed_dscp) for i in range(len(p_ip4s))]
+        p_ip6_encaps = [
+            IPv6(src=self.pg0.local_ip6, dst=tun.dst, tc=fixed_dscp)
+            for i in range(len(p_ip4s))
+        ]
 
         self.verify_ip4ip6_encaps(a4s[3], p_ip4s, p_ip6_encaps)
         self.verify_ip6ip6_encaps(a6s[3], p_ip6s, p_ip6_encaps)
 
         self.verify_ip4ip6_encaps(a4s[3], p_ip4s, p_ip6_encaps)
         self.verify_ip6ip6_encaps(a6s[3], p_ip6s, p_ip6_encaps)
@@ -961,7 +1072,8 @@ class TestIPIP6(VppTestCase):
         # Decapsulation
         #
         n_packets_decapped = self.statistics.get_err_counter(
         # Decapsulation
         #
         n_packets_decapped = self.statistics.get_err_counter(
-            '/err/ipip6-input/packets decapsulated')
+            "/err/ipip6-input/packets decapsulated"
+        )
 
         self.p_ether = Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
 
 
         self.p_ether = Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
 
@@ -970,15 +1082,13 @@ class TestIPIP6(VppTestCase):
 
         # one overlay packet and all combinations of its encap
         p_ip4 = IP(src="1.2.3.4", dst=self.pg0.remote_ip4)
 
         # one overlay packet and all combinations of its encap
         p_ip4 = IP(src="1.2.3.4", dst=self.pg0.remote_ip4)
-        p_ip6_encaps = [IPv6(src=tun.dst,
-                             dst=self.pg0.local_ip6,
-                             tc=tc) for tc in tcs]
+        p_ip6_encaps = [IPv6(src=tun.dst, dst=self.pg0.local_ip6, tc=tc) for tc in tcs]
 
         # for each encap tun will produce the same inner packet because it does
         # not copy up fields from the payload
         for p_ip6_encap in p_ip6_encaps:
 
         # for each encap tun will produce the same inner packet because it does
         # not copy up fields from the payload
         for p_ip6_encap in p_ip6_encaps:
-            p6 = (self.p_ether / p_ip6_encap / p_ip4 / self.p_payload)
-            p4_reply = (p_ip4 / self.p_payload)
+            p6 = self.p_ether / p_ip6_encap / p_ip4 / self.p_payload
+            p4_reply = p_ip4 / self.p_payload
             p4_reply.ttl -= 1
             rx = self.send_and_expect(self.pg1, p6 * N_PACKETS, self.pg0)
             n_packets_decapped += N_PACKETS
             p4_reply.ttl -= 1
             rx = self.send_and_expect(self.pg1, p6 * N_PACKETS, self.pg0)
             n_packets_decapped += N_PACKETS
@@ -986,20 +1096,19 @@ class TestIPIP6(VppTestCase):
                 self.validate(p[1], p4_reply)
                 self.assert_packet_checksums_valid(p)
 
                 self.validate(p[1], p4_reply)
                 self.assert_packet_checksums_valid(p)
 
-        err = self.statistics.get_err_counter(
-            '/err/ipip6-input/packets decapsulated')
+        err = self.statistics.get_err_counter("/err/ipip6-input/packets decapsulated")
         self.assertEqual(err, n_packets_decapped)
 
         # tun_ecn copies the ECN bits from the encap to the inner
         self.assertEqual(err, n_packets_decapped)
 
         # tun_ecn copies the ECN bits from the encap to the inner
-        p_ip6_encaps = [IPv6(src=tun_ecn.dst,
-                             dst=self.pg0.local_ip6,
-                             tc=tc) for tc in tcs]
+        p_ip6_encaps = [
+            IPv6(src=tun_ecn.dst, dst=self.pg0.local_ip6, tc=tc) for tc in tcs
+        ]
         p_ip4_replys = [p_ip4.copy() for i in range(len(p_ip6_encaps))]
         p_ip4_replys[2].tos = ecn
         p_ip4_replys[3].tos = ecn
         for i, p_ip6_encap in enumerate(p_ip6_encaps):
         p_ip4_replys = [p_ip4.copy() for i in range(len(p_ip6_encaps))]
         p_ip4_replys[2].tos = ecn
         p_ip4_replys[3].tos = ecn
         for i, p_ip6_encap in enumerate(p_ip6_encaps):
-            p6 = (self.p_ether / p_ip6_encap / p_ip4 / self.p_payload)
-            p4_reply = (p_ip4_replys[i] / self.p_payload)
+            p6 = self.p_ether / p_ip6_encap / p_ip4 / self.p_payload
+            p4_reply = p_ip4_replys[i] / self.p_payload
             p4_reply.ttl -= 1
             rx = self.send_and_expect(self.pg1, p6 * N_PACKETS, self.pg0)
             n_packets_decapped += N_PACKETS
             p4_reply.ttl -= 1
             rx = self.send_and_expect(self.pg1, p6 * N_PACKETS, self.pg0)
             n_packets_decapped += N_PACKETS
@@ -1007,20 +1116,17 @@ class TestIPIP6(VppTestCase):
                 self.validate(p[1], p4_reply)
                 self.assert_packet_checksums_valid(p)
 
                 self.validate(p[1], p4_reply)
                 self.assert_packet_checksums_valid(p)
 
-        err = self.statistics.get_err_counter(
-            '/err/ipip6-input/packets decapsulated')
+        err = self.statistics.get_err_counter("/err/ipip6-input/packets decapsulated")
         self.assertEqual(err, n_packets_decapped)
 
         # IPv6 tunnel to IPv6
         # for each encap tun will produce the same inner packet because it does
         # not copy up fields from the payload
         self.assertEqual(err, n_packets_decapped)
 
         # IPv6 tunnel to IPv6
         # for each encap tun will produce the same inner packet because it does
         # not copy up fields from the payload
-        p_ip6_encaps = [IPv6(src=tun.dst,
-                             dst=self.pg0.local_ip6,
-                             tc=tc) for tc in tcs]
+        p_ip6_encaps = [IPv6(src=tun.dst, dst=self.pg0.local_ip6, tc=tc) for tc in tcs]
         p_ip6 = IPv6(src="1:2:3::4", dst=self.pg0.remote_ip6)
         for p_ip6_encap in p_ip6_encaps:
         p_ip6 = IPv6(src="1:2:3::4", dst=self.pg0.remote_ip6)
         for p_ip6_encap in p_ip6_encaps:
-            p6 = (self.p_ether / p_ip6_encap / p_ip6 / self.p_payload)
-            p6_reply = (p_ip6 / self.p_payload)
+            p6 = self.p_ether / p_ip6_encap / p_ip6 / self.p_payload
+            p6_reply = p_ip6 / self.p_payload
             p6_reply.hlim = 63
             rx = self.send_and_expect(self.pg1, p6 * N_PACKETS, self.pg0)
             n_packets_decapped += N_PACKETS
             p6_reply.hlim = 63
             rx = self.send_and_expect(self.pg1, p6 * N_PACKETS, self.pg0)
             n_packets_decapped += N_PACKETS
@@ -1028,22 +1134,21 @@ class TestIPIP6(VppTestCase):
                 self.validate(p[1], p6_reply)
                 self.assert_packet_checksums_valid(p)
 
                 self.validate(p[1], p6_reply)
                 self.assert_packet_checksums_valid(p)
 
-        err = self.statistics.get_err_counter(
-            '/err/ipip6-input/packets decapsulated')
+        err = self.statistics.get_err_counter("/err/ipip6-input/packets decapsulated")
         self.assertEqual(err, n_packets_decapped)
 
         # IPv6 tunnel to IPv6
         # tun_ecn copies the ECN bits from the encap to the inner
         self.assertEqual(err, n_packets_decapped)
 
         # IPv6 tunnel to IPv6
         # tun_ecn copies the ECN bits from the encap to the inner
-        p_ip6_encaps = [IPv6(src=tun_ecn.dst,
-                             dst=self.pg0.local_ip6,
-                             tc=tc) for tc in tcs]
+        p_ip6_encaps = [
+            IPv6(src=tun_ecn.dst, dst=self.pg0.local_ip6, tc=tc) for tc in tcs
+        ]
         p_ip6 = IPv6(src="1:2:3::4", dst=self.pg0.remote_ip6)
         p_ip6_replys = [p_ip6.copy() for i in range(len(p_ip6_encaps))]
         p_ip6_replys[2].tc = ecn
         p_ip6_replys[3].tc = ecn
         for i, p_ip6_encap in enumerate(p_ip6_encaps):
         p_ip6 = IPv6(src="1:2:3::4", dst=self.pg0.remote_ip6)
         p_ip6_replys = [p_ip6.copy() for i in range(len(p_ip6_encaps))]
         p_ip6_replys[2].tc = ecn
         p_ip6_replys[3].tc = ecn
         for i, p_ip6_encap in enumerate(p_ip6_encaps):
-            p6 = (self.p_ether / p_ip6_encap / p_ip6 / self.p_payload)
-            p6_reply = (p_ip6_replys[i] / self.p_payload)
+            p6 = self.p_ether / p_ip6_encap / p_ip6 / self.p_payload
+            p6_reply = p_ip6_replys[i] / self.p_payload
             p6_reply.hlim = 63
             rx = self.send_and_expect(self.pg1, p6 * N_PACKETS, self.pg0)
             n_packets_decapped += N_PACKETS
             p6_reply.hlim = 63
             rx = self.send_and_expect(self.pg1, p6 * N_PACKETS, self.pg0)
             n_packets_decapped += N_PACKETS
@@ -1051,15 +1156,14 @@ class TestIPIP6(VppTestCase):
                 self.validate(p[1], p6_reply)
                 self.assert_packet_checksums_valid(p)
 
                 self.validate(p[1], p6_reply)
                 self.assert_packet_checksums_valid(p)
 
-        err = self.statistics.get_err_counter(
-            '/err/ipip6-input/packets decapsulated')
+        err = self.statistics.get_err_counter("/err/ipip6-input/packets decapsulated")
         self.assertEqual(err, n_packets_decapped)
 
     def test_frag(self):
         self.assertEqual(err, n_packets_decapped)
 
     def test_frag(self):
-        """ ip{v4,v6} over ip6 test frag """
+        """ip{v4,v6} over ip6 test frag"""
 
         p_ether = Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
 
         p_ether = Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
-        p_ip6 = IPv6(src="1::1", dst="DEAD::1", tc=42, nh='UDP')
+        p_ip6 = IPv6(src="1::1", dst="DEAD::1", tc=42, nh="UDP")
         p_ip4 = IP(src="1.2.3.4", dst=self.pg0.remote_ip4)
         p_payload = UDP(sport=1234, dport=1234)
 
         p_ip4 = IP(src="1.2.3.4", dst=self.pg0.remote_ip4)
         p_payload = UDP(sport=1234, dport=1234)
 
@@ -1067,17 +1171,21 @@ class TestIPIP6(VppTestCase):
         # Fragmentation / Reassembly and Re-fragmentation
         #
         rv = self.vapi.ip_reassembly_enable_disable(
         # Fragmentation / Reassembly and Re-fragmentation
         #
         rv = self.vapi.ip_reassembly_enable_disable(
-            sw_if_index=self.pg1.sw_if_index,
-            enable_ip6=1)
+            sw_if_index=self.pg1.sw_if_index, enable_ip6=1
+        )
 
 
-        self.vapi.ip_reassembly_set(timeout_ms=1000, max_reassemblies=1000,
-                                    max_reassembly_length=1000,
-                                    expire_walk_interval_ms=10000,
-                                    is_ip6=1)
+        self.vapi.ip_reassembly_set(
+            timeout_ms=1000,
+            max_reassemblies=1000,
+            max_reassembly_length=1000,
+            expire_walk_interval_ms=10000,
+            is_ip6=1,
+        )
 
         # Send lots of fragments, verify reassembled packet
         before_cnt = self.statistics.get_err_counter(
 
         # Send lots of fragments, verify reassembled packet
         before_cnt = self.statistics.get_err_counter(
-            '/err/ipip6-input/packets decapsulated')
+            "/err/ipip6-input/packets decapsulated"
+        )
         frags, p6_reply = self.generate_ip6_frags(3131, 1400)
         f = []
         for i in range(0, 1000):
         frags, p6_reply = self.generate_ip6_frags(3131, 1400)
         f = []
         for i in range(0, 1000):
@@ -1090,8 +1198,7 @@ class TestIPIP6(VppTestCase):
         for p in rx:
             self.validate(p[1], p6_reply)
 
         for p in rx:
             self.validate(p[1], p6_reply)
 
-        cnt = self.statistics.get_err_counter(
-            '/err/ipip6-input/packets decapsulated')
+        cnt = self.statistics.get_err_counter("/err/ipip6-input/packets decapsulated")
         self.assertEqual(cnt, before_cnt + 1000)
 
         f = []
         self.assertEqual(cnt, before_cnt + 1000)
 
         f = []
@@ -1117,10 +1224,12 @@ class TestIPIP6(VppTestCase):
         # IPv6 in to IPv6 tunnel
         p_payload = UDP(sport=1234, dport=1234) / self.payload(1300)
 
         # IPv6 in to IPv6 tunnel
         p_payload = UDP(sport=1234, dport=1234) / self.payload(1300)
 
-        p6 = (p_ether / p_ip6 / p_payload)
-        p6_reply = (IPv6(src=self.pg0.local_ip6, dst=self.pg1.remote_ip6,
-                         hlim=63) /
-                    p_ip6 / p_payload)
+        p6 = p_ether / p_ip6 / p_payload
+        p6_reply = (
+            IPv6(src=self.pg0.local_ip6, dst=self.pg1.remote_ip6, hlim=63)
+            / p_ip6
+            / p_payload
+        )
         p6_reply[1].hlim -= 1
         self.pg_enable_capture()
         self.pg0.add_stream(p6)
         p6_reply[1].hlim -= 1
         self.pg_enable_capture()
         self.pg0.add_stream(p6)
@@ -1151,47 +1260,49 @@ class TestIPIP6(VppTestCase):
         self.validate(reass_pkt, p6_reply)
 
     def test_ip6_mpls_frag(self):
         self.validate(reass_pkt, p6_reply)
 
     def test_ip6_mpls_frag(self):
-        """ Test fragmenting IPv6 over MPLS """
+        """Test fragmenting IPv6 over MPLS"""
 
         # IPv6 packets must be locally generated to be fragmented
         # the use of tunnel encaps
         tun_dst = VppIpRoute(
 
         # IPv6 packets must be locally generated to be fragmented
         # the use of tunnel encaps
         tun_dst = VppIpRoute(
-            self, "1000::1", 128,
-            [VppRoutePath(self.pg1.remote_ip6,
-                          self.pg1.sw_if_index,
-                          labels=[VppMplsLabel(32)])]).add_vpp_config()
+            self,
+            "1000::1",
+            128,
+            [
+                VppRoutePath(
+                    self.pg1.remote_ip6, self.pg1.sw_if_index, labels=[VppMplsLabel(32)]
+                )
+            ],
+        ).add_vpp_config()
 
         tun = VppIpIpTunInterface(
 
         tun = VppIpIpTunInterface(
-            self,
-            self.pg0,
-            self.pg0.local_ip6,
-            "1000::1").add_vpp_config()
+            self, self.pg0, self.pg0.local_ip6, "1000::1"
+        ).add_vpp_config()
 
         tun.admin_up()
         tun.config_ip6()
         tun.config_ip4()
 
 
         tun.admin_up()
         tun.config_ip6()
         tun.config_ip4()
 
-        self.vapi.sw_interface_set_mtu(self.pg1.sw_if_index,
-                                       [2000, 0, 0, 0])
-
-        p_6k = (Ether(dst=self.pg0.local_mac,
-                      src=self.pg0.remote_mac) /
-                IPv6(src=self.pg0.remote_ip6,
-                     dst=tun.remote_ip6) /
-                UDP(sport=1234, dport=5678) /
-                Raw(b'0xa' * 2000))
-        p_2k = (Ether(dst=self.pg0.local_mac,
-                      src=self.pg0.remote_mac) /
-                IPv6(src=self.pg0.remote_ip6,
-                     dst=tun.remote_ip6) /
-                UDP(sport=1234, dport=5678) /
-                Raw(b'0xa' * 1000))
-        p_1k = (Ether(dst=self.pg0.local_mac,
-                      src=self.pg0.remote_mac) /
-                IPv6(src=self.pg0.remote_ip6,
-                     dst=tun.remote_ip6) /
-                UDP(sport=1234, dport=5678) /
-                Raw(b'0xa' * 600))
+        self.vapi.sw_interface_set_mtu(self.pg1.sw_if_index, [2000, 0, 0, 0])
+
+        p_6k = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IPv6(src=self.pg0.remote_ip6, dst=tun.remote_ip6)
+            / UDP(sport=1234, dport=5678)
+            / Raw(b"0xa" * 2000)
+        )
+        p_2k = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IPv6(src=self.pg0.remote_ip6, dst=tun.remote_ip6)
+            / UDP(sport=1234, dport=5678)
+            / Raw(b"0xa" * 1000)
+        )
+        p_1k = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IPv6(src=self.pg0.remote_ip6, dst=tun.remote_ip6)
+            / UDP(sport=1234, dport=5678)
+            / Raw(b"0xa" * 600)
+        )
 
         # this is now the interface MTU frags
         rxs = self.send_and_expect(self.pg0, [p_6k], self.pg1, n_rx=4)
 
         # this is now the interface MTU frags
         rxs = self.send_and_expect(self.pg0, [p_6k], self.pg1, n_rx=4)
@@ -1204,26 +1315,26 @@ class TestIPIP6(VppTestCase):
         self.send_and_expect(self.pg0, [p_1k], self.pg1)
 
     def test_ipip_create(self):
         self.send_and_expect(self.pg0, [p_1k], self.pg1)
 
     def test_ipip_create(self):
-        """ ipip create / delete interface test """
-        rv = ipip_add_tunnel(self, '1.2.3.4', '2.3.4.5')
+        """ipip create / delete interface test"""
+        rv = ipip_add_tunnel(self, "1.2.3.4", "2.3.4.5")
         sw_if_index = rv.sw_if_index
         self.vapi.ipip_del_tunnel(sw_if_index)
 
     def test_ipip_vrf_create(self):
         sw_if_index = rv.sw_if_index
         self.vapi.ipip_del_tunnel(sw_if_index)
 
     def test_ipip_vrf_create(self):
-        """ ipip create / delete interface VRF test """
+        """ipip create / delete interface VRF test"""
 
         t = VppIpTable(self, 20)
         t.add_vpp_config()
 
         t = VppIpTable(self, 20)
         t.add_vpp_config()
-        rv = ipip_add_tunnel(self, '1.2.3.4', '2.3.4.5', table_id=20)
+        rv = ipip_add_tunnel(self, "1.2.3.4", "2.3.4.5", table_id=20)
         sw_if_index = rv.sw_if_index
         self.vapi.ipip_del_tunnel(sw_if_index)
 
     def payload(self, len):
         sw_if_index = rv.sw_if_index
         self.vapi.ipip_del_tunnel(sw_if_index)
 
     def payload(self, len):
-        return 'x' * len
+        return "x" * len
 
 
 class TestIPIPMPLS(VppTestCase):
 
 
 class TestIPIPMPLS(VppTestCase):
-    """ MPLS Test Case """
+    """MPLS Test Case"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -1254,62 +1365,69 @@ class TestIPIPMPLS(VppTestCase):
             i.admin_down()
 
     def test_mpls(self):
             i.admin_down()
 
     def test_mpls(self):
-        """ MPLS over ip{6,4} test """
+        """MPLS over ip{6,4} test"""
 
         tbl = VppMplsTable(self, 0)
         tbl.add_vpp_config()
 
         self.p_ether = Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
 
         tbl = VppMplsTable(self, 0)
         tbl.add_vpp_config()
 
         self.p_ether = Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
-        self.p_payload = UDP(sport=1234, dport=1234) / Raw(b'X' * 100)
+        self.p_payload = UDP(sport=1234, dport=1234) / Raw(b"X" * 100)
         f = FibPathProto
 
         # IPv4 transport
         tun4 = VppIpIpTunInterface(
         f = FibPathProto
 
         # IPv4 transport
         tun4 = VppIpIpTunInterface(
-            self,
-            self.pg1,
-            self.pg1.local_ip4,
-            self.pg1.remote_ip4).add_vpp_config()
+            self, self.pg1, self.pg1.local_ip4, self.pg1.remote_ip4
+        ).add_vpp_config()
         tun4.admin_up()
         tun4.config_ip4()
         tun4.enable_mpls()
 
         # IPv6 transport
         tun6 = VppIpIpTunInterface(
         tun4.admin_up()
         tun4.config_ip4()
         tun4.enable_mpls()
 
         # IPv6 transport
         tun6 = VppIpIpTunInterface(
-            self,
-            self.pg1,
-            self.pg1.local_ip6,
-            self.pg1.remote_ip6).add_vpp_config()
+            self, self.pg1, self.pg1.local_ip6, self.pg1.remote_ip6
+        ).add_vpp_config()
         tun6.admin_up()
         tun6.config_ip6()
         tun6.enable_mpls()
 
         # ip routes into the tunnels with output labels
         tun6.admin_up()
         tun6.config_ip6()
         tun6.enable_mpls()
 
         # ip routes into the tunnels with output labels
-        r4 = VppIpRoute(self, "1.1.1.1", 32,
-                        [VppRoutePath(
-                            tun4.remote_ip4,
-                            tun4.sw_if_index,
-                            labels=[VppMplsLabel(44)])]).add_vpp_config()
-        r6 = VppIpRoute(self, "1::1", 128,
-                        [VppRoutePath(
-                            tun6.remote_ip6,
-                            tun6.sw_if_index,
-                            labels=[VppMplsLabel(66)])]).add_vpp_config()
+        r4 = VppIpRoute(
+            self,
+            "1.1.1.1",
+            32,
+            [
+                VppRoutePath(
+                    tun4.remote_ip4, tun4.sw_if_index, labels=[VppMplsLabel(44)]
+                )
+            ],
+        ).add_vpp_config()
+        r6 = VppIpRoute(
+            self,
+            "1::1",
+            128,
+            [
+                VppRoutePath(
+                    tun6.remote_ip6, tun6.sw_if_index, labels=[VppMplsLabel(66)]
+                )
+            ],
+        ).add_vpp_config()
 
         # deag MPLS routes from the tunnel
 
         # deag MPLS routes from the tunnel
-        r4 = VppMplsRoute(self, 44, 1,
-                          [VppRoutePath(
-                              self.pg0.remote_ip4,
-                              self.pg0.sw_if_index)]).add_vpp_config()
-        r6 = VppMplsRoute(self, 66, 1,
-                          [VppRoutePath(
-                              self.pg0.remote_ip6,
-                              self.pg0.sw_if_index)],
-                          eos_proto=f.FIB_PATH_NH_PROTO_IP6).add_vpp_config()
+        r4 = VppMplsRoute(
+            self, 44, 1, [VppRoutePath(self.pg0.remote_ip4, self.pg0.sw_if_index)]
+        ).add_vpp_config()
+        r6 = VppMplsRoute(
+            self,
+            66,
+            1,
+            [VppRoutePath(self.pg0.remote_ip6, self.pg0.sw_if_index)],
+            eos_proto=f.FIB_PATH_NH_PROTO_IP6,
+        ).add_vpp_config()
 
         #
         # Tunnel Encap
         #
 
         #
         # Tunnel Encap
         #
-        p4 = (self.p_ether / IP(src="2.2.2.2", dst="1.1.1.1") / self.p_payload)
+        p4 = self.p_ether / IP(src="2.2.2.2", dst="1.1.1.1") / self.p_payload
 
         rxs = self.send_and_expect(self.pg0, p4 * N_PACKETS, self.pg1)
 
 
         rxs = self.send_and_expect(self.pg0, p4 * N_PACKETS, self.pg1)
 
@@ -1321,7 +1439,7 @@ class TestIPIPMPLS(VppTestCase):
             self.assertEqual(inner.src, "2.2.2.2")
             self.assertEqual(inner.dst, "1.1.1.1")
 
             self.assertEqual(inner.src, "2.2.2.2")
             self.assertEqual(inner.dst, "1.1.1.1")
 
-        p6 = (self.p_ether / IPv6(src="2::2", dst="1::1") / self.p_payload)
+        p6 = self.p_ether / IPv6(src="2::2", dst="1::1") / self.p_payload
 
         rxs = self.send_and_expect(self.pg0, p6 * N_PACKETS, self.pg1)
 
 
         rxs = self.send_and_expect(self.pg0, p6 * N_PACKETS, self.pg1)
 
@@ -1336,13 +1454,13 @@ class TestIPIPMPLS(VppTestCase):
         #
         # Tunnel Decap
         #
         #
         # Tunnel Decap
         #
-        p4 = (self.p_ether /
-              IP(src=self.pg1.remote_ip4,
-                 dst=self.pg1.local_ip4) /
-              MPLS(label=44, ttl=4) /
-              IP(src="1.1.1.1",
-                 dst="2.2.2.2") /
-              self.p_payload)
+        p4 = (
+            self.p_ether
+            / IP(src=self.pg1.remote_ip4, dst=self.pg1.local_ip4)
+            / MPLS(label=44, ttl=4)
+            / IP(src="1.1.1.1", dst="2.2.2.2")
+            / self.p_payload
+        )
 
         rxs = self.send_and_expect(self.pg1, p4 * N_PACKETS, self.pg0)
 
 
         rxs = self.send_and_expect(self.pg1, p4 * N_PACKETS, self.pg0)
 
@@ -1350,13 +1468,13 @@ class TestIPIPMPLS(VppTestCase):
             self.assertEqual(rx[IP].src, "1.1.1.1")
             self.assertEqual(rx[IP].dst, "2.2.2.2")
 
             self.assertEqual(rx[IP].src, "1.1.1.1")
             self.assertEqual(rx[IP].dst, "2.2.2.2")
 
-        p6 = (self.p_ether /
-              IPv6(src=self.pg1.remote_ip6,
-                   dst=self.pg1.local_ip6) /
-              MPLS(label=66, ttl=4) /
-              IPv6(src="1::1",
-                   dst="2::2") /
-              self.p_payload)
+        p6 = (
+            self.p_ether
+            / IPv6(src=self.pg1.remote_ip6, dst=self.pg1.local_ip6)
+            / MPLS(label=66, ttl=4)
+            / IPv6(src="1::1", dst="2::2")
+            / self.p_payload
+        )
 
         rxs = self.send_and_expect(self.pg1, p6 * N_PACKETS, self.pg0)
 
 
         rxs = self.send_and_expect(self.pg1, p6 * N_PACKETS, self.pg0)
 
@@ -1368,5 +1486,5 @@ class TestIPIPMPLS(VppTestCase):
         tun6.disable_mpls()
 
 
         tun6.disable_mpls()
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index 8f8b2bf..190bde7 100644 (file)
@@ -8,13 +8,23 @@ from scapy.layers.l2 import Ether
 from scapy.packet import Raw
 
 from framework import VppTestRunner
 from scapy.packet import Raw
 
 from framework import VppTestRunner
-from template_ipsec import TemplateIpsec, IpsecTra46Tests, IpsecTun46Tests, \
-    config_tun_params, config_tra_params, IPsecIPv4Params, IPsecIPv6Params, \
-    IpsecTra4, IpsecTun4, IpsecTra6, IpsecTun6, \
-    IpsecTun6HandoffTests, IpsecTun4HandoffTests
+from template_ipsec import (
+    TemplateIpsec,
+    IpsecTra46Tests,
+    IpsecTun46Tests,
+    config_tun_params,
+    config_tra_params,
+    IPsecIPv4Params,
+    IPsecIPv6Params,
+    IpsecTra4,
+    IpsecTun4,
+    IpsecTra6,
+    IpsecTun6,
+    IpsecTun6HandoffTests,
+    IpsecTun4HandoffTests,
+)
 from template_ipsec import IpsecTcpTests
 from template_ipsec import IpsecTcpTests
-from vpp_ipsec import VppIpsecSA, VppIpsecSpd, VppIpsecSpdEntry,\
-        VppIpsecSpdItfBinding
+from vpp_ipsec import VppIpsecSA, VppIpsecSpd, VppIpsecSpdEntry, VppIpsecSpdItfBinding
 from vpp_ip_route import VppIpRoute, VppRoutePath
 from vpp_ip import DpoProto
 from vpp_papi import VppEnum
 from vpp_ip_route import VppIpRoute, VppRoutePath
 from vpp_ip import DpoProto
 from vpp_papi import VppEnum
@@ -41,6 +51,7 @@ class ConfigIpsecAH(TemplateIpsec):
          ---             ---           ---
 
     """
          ---             ---           ---
 
     """
+
     encryption_type = AH
     net_objs = []
     tra4_encrypt_node_name = "ah4-encrypt"
     encryption_type = AH
     net_objs = []
     tra4_encrypt_node_name = "ah4-encrypt"
@@ -79,13 +90,11 @@ class ConfigIpsecAH(TemplateIpsec):
         self.tun_spd.add_vpp_config()
         self.net_objs.append(self.tun_spd)
 
         self.tun_spd.add_vpp_config()
         self.net_objs.append(self.tun_spd)
 
-        b = VppIpsecSpdItfBinding(self, self.tra_spd,
-                                  self.tra_if)
+        b = VppIpsecSpdItfBinding(self, self.tra_spd, self.tra_if)
         b.add_vpp_config()
         self.net_objs.append(b)
 
         b.add_vpp_config()
         self.net_objs.append(b)
 
-        b = VppIpsecSpdItfBinding(self, self.tun_spd,
-                                  self.tun_if)
+        b = VppIpsecSpdItfBinding(self, self.tun_spd, self.tun_if)
         b.add_vpp_config()
         self.net_objs.append(b)
 
         b.add_vpp_config()
         self.net_objs.append(b)
 
@@ -97,10 +106,16 @@ class ConfigIpsecAH(TemplateIpsec):
             config_tun_params(p, self.encryption_type, self.tun_if)
         for p in params:
             d = DpoProto.DPO_PROTO_IP6 if p.is_ipv6 else DpoProto.DPO_PROTO_IP4
             config_tun_params(p, self.encryption_type, self.tun_if)
         for p in params:
             d = DpoProto.DPO_PROTO_IP6 if p.is_ipv6 else DpoProto.DPO_PROTO_IP4
-            r = VppIpRoute(self,  p.remote_tun_if_host, p.addr_len,
-                           [VppRoutePath(self.tun_if.remote_addr[p.addr_type],
-                                         0xffffffff,
-                                         proto=d)])
+            r = VppIpRoute(
+                self,
+                p.remote_tun_if_host,
+                p.addr_len,
+                [
+                    VppRoutePath(
+                        self.tun_if.remote_addr[p.addr_type], 0xFFFFFFFF, proto=d
+                    )
+                ],
+            )
             r.add_vpp_config()
             self.net_objs.append(r)
         self.logger.info(self.vapi.ppcli("show ipsec all"))
             r.add_vpp_config()
             self.net_objs.append(r)
         self.logger.info(self.vapi.ppcli("show ipsec all"))
@@ -130,74 +145,116 @@ class ConfigIpsecAH(TemplateIpsec):
         params.outer_hop_limit = 253
         params.outer_flow_label = 0x12345
 
         params.outer_hop_limit = 253
         params.outer_flow_label = 0x12345
 
-        params.tun_sa_in = VppIpsecSA(self, scapy_tun_sa_id, scapy_tun_spi,
-                                      auth_algo_vpp_id, auth_key,
-                                      crypt_algo_vpp_id, crypt_key,
-                                      self.vpp_ah_protocol,
-                                      self.tun_if.local_addr[addr_type],
-                                      self.tun_if.remote_addr[addr_type],
-                                      tun_flags=tun_flags,
-                                      flags=flags,
-                                      dscp=params.dscp)
-
-        params.tun_sa_out = VppIpsecSA(self, vpp_tun_sa_id, vpp_tun_spi,
-                                       auth_algo_vpp_id, auth_key,
-                                       crypt_algo_vpp_id, crypt_key,
-                                       self.vpp_ah_protocol,
-                                       self.tun_if.remote_addr[addr_type],
-                                       self.tun_if.local_addr[addr_type],
-                                       tun_flags=tun_flags,
-                                       flags=flags,
-                                       dscp=params.dscp)
+        params.tun_sa_in = VppIpsecSA(
+            self,
+            scapy_tun_sa_id,
+            scapy_tun_spi,
+            auth_algo_vpp_id,
+            auth_key,
+            crypt_algo_vpp_id,
+            crypt_key,
+            self.vpp_ah_protocol,
+            self.tun_if.local_addr[addr_type],
+            self.tun_if.remote_addr[addr_type],
+            tun_flags=tun_flags,
+            flags=flags,
+            dscp=params.dscp,
+        )
+
+        params.tun_sa_out = VppIpsecSA(
+            self,
+            vpp_tun_sa_id,
+            vpp_tun_spi,
+            auth_algo_vpp_id,
+            auth_key,
+            crypt_algo_vpp_id,
+            crypt_key,
+            self.vpp_ah_protocol,
+            self.tun_if.remote_addr[addr_type],
+            self.tun_if.local_addr[addr_type],
+            tun_flags=tun_flags,
+            flags=flags,
+            dscp=params.dscp,
+        )
 
         objs.append(params.tun_sa_in)
         objs.append(params.tun_sa_out)
 
 
         objs.append(params.tun_sa_in)
         objs.append(params.tun_sa_out)
 
-        params.spd_policy_in_any = VppIpsecSpdEntry(self, self.tun_spd,
-                                                    vpp_tun_sa_id,
-                                                    addr_any, addr_bcast,
-                                                    addr_any, addr_bcast,
-                                                    socket.IPPROTO_AH)
-        params.spd_policy_out_any = VppIpsecSpdEntry(self, self.tun_spd,
-                                                     vpp_tun_sa_id,
-                                                     addr_any, addr_bcast,
-                                                     addr_any, addr_bcast,
-                                                     socket.IPPROTO_AH,
-                                                     is_outbound=0)
+        params.spd_policy_in_any = VppIpsecSpdEntry(
+            self,
+            self.tun_spd,
+            vpp_tun_sa_id,
+            addr_any,
+            addr_bcast,
+            addr_any,
+            addr_bcast,
+            socket.IPPROTO_AH,
+        )
+        params.spd_policy_out_any = VppIpsecSpdEntry(
+            self,
+            self.tun_spd,
+            vpp_tun_sa_id,
+            addr_any,
+            addr_bcast,
+            addr_any,
+            addr_bcast,
+            socket.IPPROTO_AH,
+            is_outbound=0,
+        )
 
         objs.append(params.spd_policy_out_any)
         objs.append(params.spd_policy_in_any)
 
 
         objs.append(params.spd_policy_out_any)
         objs.append(params.spd_policy_in_any)
 
-        e1 = VppIpsecSpdEntry(self, self.tun_spd, vpp_tun_sa_id,
-                              remote_tun_if_host,
-                              remote_tun_if_host,
-                              self.pg1.remote_addr[addr_type],
-                              self.pg1.remote_addr[addr_type],
-                              0, priority=10,
-                              policy=e.IPSEC_API_SPD_ACTION_PROTECT,
-                              is_outbound=0)
-        e2 = VppIpsecSpdEntry(self, self.tun_spd, scapy_tun_sa_id,
-                              self.pg1.remote_addr[addr_type],
-                              self.pg1.remote_addr[addr_type],
-                              remote_tun_if_host,
-                              remote_tun_if_host,
-                              0, policy=e.IPSEC_API_SPD_ACTION_PROTECT,
-                              priority=10)
-        e3 = VppIpsecSpdEntry(self, self.tun_spd, vpp_tun_sa_id,
-                              remote_tun_if_host,
-                              remote_tun_if_host,
-                              self.pg0.local_addr[addr_type],
-                              self.pg0.local_addr[addr_type],
-                              0, priority=20,
-                              policy=e.IPSEC_API_SPD_ACTION_PROTECT,
-                              is_outbound=0)
-        e4 = VppIpsecSpdEntry(self, self.tun_spd, scapy_tun_sa_id,
-                              self.pg0.local_addr[addr_type],
-                              self.pg0.local_addr[addr_type],
-                              remote_tun_if_host,
-                              remote_tun_if_host,
-                              0, policy=e.IPSEC_API_SPD_ACTION_PROTECT,
-                              priority=20)
+        e1 = VppIpsecSpdEntry(
+            self,
+            self.tun_spd,
+            vpp_tun_sa_id,
+            remote_tun_if_host,
+            remote_tun_if_host,
+            self.pg1.remote_addr[addr_type],
+            self.pg1.remote_addr[addr_type],
+            0,
+            priority=10,
+            policy=e.IPSEC_API_SPD_ACTION_PROTECT,
+            is_outbound=0,
+        )
+        e2 = VppIpsecSpdEntry(
+            self,
+            self.tun_spd,
+            scapy_tun_sa_id,
+            self.pg1.remote_addr[addr_type],
+            self.pg1.remote_addr[addr_type],
+            remote_tun_if_host,
+            remote_tun_if_host,
+            0,
+            policy=e.IPSEC_API_SPD_ACTION_PROTECT,
+            priority=10,
+        )
+        e3 = VppIpsecSpdEntry(
+            self,
+            self.tun_spd,
+            vpp_tun_sa_id,
+            remote_tun_if_host,
+            remote_tun_if_host,
+            self.pg0.local_addr[addr_type],
+            self.pg0.local_addr[addr_type],
+            0,
+            priority=20,
+            policy=e.IPSEC_API_SPD_ACTION_PROTECT,
+            is_outbound=0,
+        )
+        e4 = VppIpsecSpdEntry(
+            self,
+            self.tun_spd,
+            scapy_tun_sa_id,
+            self.pg0.local_addr[addr_type],
+            self.pg0.local_addr[addr_type],
+            remote_tun_if_host,
+            remote_tun_if_host,
+            0,
+            policy=e.IPSEC_API_SPD_ACTION_PROTECT,
+            priority=20,
+        )
 
         objs = objs + [e1, e2, e3, e4]
 
 
         objs = objs + [e1, e2, e3, e4]
 
@@ -218,49 +275,92 @@ class ConfigIpsecAH(TemplateIpsec):
         crypt_key = params.crypt_key
         addr_any = params.addr_any
         addr_bcast = params.addr_bcast
         crypt_key = params.crypt_key
         addr_any = params.addr_any
         addr_bcast = params.addr_bcast
-        flags = params.flags | (VppEnum.vl_api_ipsec_sad_flags_t.
-                                IPSEC_API_SAD_FLAG_USE_ANTI_REPLAY)
+        flags = params.flags | (
+            VppEnum.vl_api_ipsec_sad_flags_t.IPSEC_API_SAD_FLAG_USE_ANTI_REPLAY
+        )
         e = VppEnum.vl_api_ipsec_spd_action_t
         objs = []
 
         e = VppEnum.vl_api_ipsec_spd_action_t
         objs = []
 
-        params.tra_sa_in = VppIpsecSA(self, scapy_tra_sa_id, scapy_tra_spi,
-                                      auth_algo_vpp_id, auth_key,
-                                      crypt_algo_vpp_id, crypt_key,
-                                      self.vpp_ah_protocol,
-                                      flags=flags)
-        params.tra_sa_out = VppIpsecSA(self, vpp_tra_sa_id, vpp_tra_spi,
-                                       auth_algo_vpp_id, auth_key,
-                                       crypt_algo_vpp_id, crypt_key,
-                                       self.vpp_ah_protocol,
-                                       flags=flags)
+        params.tra_sa_in = VppIpsecSA(
+            self,
+            scapy_tra_sa_id,
+            scapy_tra_spi,
+            auth_algo_vpp_id,
+            auth_key,
+            crypt_algo_vpp_id,
+            crypt_key,
+            self.vpp_ah_protocol,
+            flags=flags,
+        )
+        params.tra_sa_out = VppIpsecSA(
+            self,
+            vpp_tra_sa_id,
+            vpp_tra_spi,
+            auth_algo_vpp_id,
+            auth_key,
+            crypt_algo_vpp_id,
+            crypt_key,
+            self.vpp_ah_protocol,
+            flags=flags,
+        )
 
         objs.append(params.tra_sa_in)
         objs.append(params.tra_sa_out)
 
 
         objs.append(params.tra_sa_in)
         objs.append(params.tra_sa_out)
 
-        objs.append(VppIpsecSpdEntry(self, self.tra_spd, vpp_tra_sa_id,
-                                     addr_any, addr_bcast,
-                                     addr_any, addr_bcast,
-                                     socket.IPPROTO_AH))
-        objs.append(VppIpsecSpdEntry(self, self.tra_spd, scapy_tra_sa_id,
-                                     addr_any, addr_bcast,
-                                     addr_any, addr_bcast,
-                                     socket.IPPROTO_AH,
-                                     is_outbound=0))
-        objs.append(VppIpsecSpdEntry(self, self.tra_spd, vpp_tra_sa_id,
-                                     self.tra_if.local_addr[addr_type],
-                                     self.tra_if.local_addr[addr_type],
-                                     self.tra_if.remote_addr[addr_type],
-                                     self.tra_if.remote_addr[addr_type],
-                                     0, priority=10,
-                                     policy=e.IPSEC_API_SPD_ACTION_PROTECT,
-                                     is_outbound=0))
-        objs.append(VppIpsecSpdEntry(self, self.tra_spd, scapy_tra_sa_id,
-                                     self.tra_if.local_addr[addr_type],
-                                     self.tra_if.local_addr[addr_type],
-                                     self.tra_if.remote_addr[addr_type],
-                                     self.tra_if.remote_addr[addr_type],
-                                     0, policy=e.IPSEC_API_SPD_ACTION_PROTECT,
-                                     priority=10))
+        objs.append(
+            VppIpsecSpdEntry(
+                self,
+                self.tra_spd,
+                vpp_tra_sa_id,
+                addr_any,
+                addr_bcast,
+                addr_any,
+                addr_bcast,
+                socket.IPPROTO_AH,
+            )
+        )
+        objs.append(
+            VppIpsecSpdEntry(
+                self,
+                self.tra_spd,
+                scapy_tra_sa_id,
+                addr_any,
+                addr_bcast,
+                addr_any,
+                addr_bcast,
+                socket.IPPROTO_AH,
+                is_outbound=0,
+            )
+        )
+        objs.append(
+            VppIpsecSpdEntry(
+                self,
+                self.tra_spd,
+                vpp_tra_sa_id,
+                self.tra_if.local_addr[addr_type],
+                self.tra_if.local_addr[addr_type],
+                self.tra_if.remote_addr[addr_type],
+                self.tra_if.remote_addr[addr_type],
+                0,
+                priority=10,
+                policy=e.IPSEC_API_SPD_ACTION_PROTECT,
+                is_outbound=0,
+            )
+        )
+        objs.append(
+            VppIpsecSpdEntry(
+                self,
+                self.tra_spd,
+                scapy_tra_sa_id,
+                self.tra_if.local_addr[addr_type],
+                self.tra_if.local_addr[addr_type],
+                self.tra_if.remote_addr[addr_type],
+                self.tra_if.remote_addr[addr_type],
+                0,
+                policy=e.IPSEC_API_SPD_ACTION_PROTECT,
+                priority=10,
+            )
+        )
 
         for o in objs:
             o.add_vpp_config()
 
         for o in objs:
             o.add_vpp_config()
@@ -288,6 +388,7 @@ class TemplateIpsecAh(ConfigIpsecAH):
          ---             ---           ---
 
     """
          ---             ---           ---
 
     """
+
     @classmethod
     def setUpClass(cls):
         super(TemplateIpsecAh, cls).setUpClass()
     @classmethod
     def setUpClass(cls):
         super(TemplateIpsecAh, cls).setUpClass()
@@ -306,26 +407,30 @@ class TemplateIpsecAh(ConfigIpsecAH):
 
 
 class TestIpsecAh1(TemplateIpsecAh, IpsecTcpTests):
 
 
 class TestIpsecAh1(TemplateIpsecAh, IpsecTcpTests):
-    """ Ipsec AH - TCP tests """
+    """Ipsec AH - TCP tests"""
+
     pass
 
 
 class TestIpsecAh2(TemplateIpsecAh, IpsecTra46Tests, IpsecTun46Tests):
     pass
 
 
 class TestIpsecAh2(TemplateIpsecAh, IpsecTra46Tests, IpsecTun46Tests):
-    """ Ipsec AH w/ SHA1 """
+    """Ipsec AH w/ SHA1"""
+
     pass
 
 
 class TestIpsecAhTun(TemplateIpsecAh, IpsecTun46Tests):
     pass
 
 
 class TestIpsecAhTun(TemplateIpsecAh, IpsecTun46Tests):
-    """ Ipsec AH - TUN encap tests """
+    """Ipsec AH - TUN encap tests"""
 
     def setUp(self):
         self.ipv4_params = IPsecIPv4Params()
         self.ipv6_params = IPsecIPv6Params()
 
 
     def setUp(self):
         self.ipv4_params = IPsecIPv4Params()
         self.ipv6_params = IPsecIPv6Params()
 
-        c = (VppEnum.vl_api_tunnel_encap_decap_flags_t.
-             TUNNEL_API_ENCAP_DECAP_FLAG_ENCAP_COPY_DSCP)
-        c1 = c | (VppEnum.vl_api_tunnel_encap_decap_flags_t.
-                  TUNNEL_API_ENCAP_DECAP_FLAG_ENCAP_COPY_ECN)
+        c = (
+            VppEnum.vl_api_tunnel_encap_decap_flags_t.TUNNEL_API_ENCAP_DECAP_FLAG_ENCAP_COPY_DSCP
+        )
+        c1 = c | (
+            VppEnum.vl_api_tunnel_encap_decap_flags_t.TUNNEL_API_ENCAP_DECAP_FLAG_ENCAP_COPY_ECN
+        )
 
         self.ipv4_params.tun_flags = c
         self.ipv6_params.tun_flags = c1
 
         self.ipv4_params.tun_flags = c
         self.ipv6_params.tun_flags = c1
@@ -334,19 +439,23 @@ class TestIpsecAhTun(TemplateIpsecAh, IpsecTun46Tests):
 
     def gen_pkts(self, sw_intf, src, dst, count=1, payload_size=54):
         # set the DSCP + ECN - flags are set to copy only DSCP
 
     def gen_pkts(self, sw_intf, src, dst, count=1, payload_size=54):
         # set the DSCP + ECN - flags are set to copy only DSCP
-        return [Ether(src=sw_intf.remote_mac, dst=sw_intf.local_mac) /
-                IP(src=src, dst=dst, tos=5) /
-                UDP(sport=4444, dport=4444) /
-                Raw(b'X' * payload_size)
-                for i in range(count)]
+        return [
+            Ether(src=sw_intf.remote_mac, dst=sw_intf.local_mac)
+            / IP(src=src, dst=dst, tos=5)
+            / UDP(sport=4444, dport=4444)
+            / Raw(b"X" * payload_size)
+            for i in range(count)
+        ]
 
     def gen_pkts6(self, p, sw_intf, src, dst, count=1, payload_size=54):
         # set the DSCP + ECN - flags are set to copy both
 
     def gen_pkts6(self, p, sw_intf, src, dst, count=1, payload_size=54):
         # set the DSCP + ECN - flags are set to copy both
-        return [Ether(src=sw_intf.remote_mac, dst=sw_intf.local_mac) /
-                IPv6(src=src, dst=dst, tc=5) /
-                UDP(sport=4444, dport=4444) /
-                Raw(b'X' * payload_size)
-                for i in range(count)]
+        return [
+            Ether(src=sw_intf.remote_mac, dst=sw_intf.local_mac)
+            / IPv6(src=src, dst=dst, tc=5)
+            / UDP(sport=4444, dport=4444)
+            / Raw(b"X" * payload_size)
+            for i in range(count)
+        ]
 
     def verify_encrypted(self, p, sa, rxs):
         # just check that only the DSCP is copied
 
     def verify_encrypted(self, p, sa, rxs):
         # just check that only the DSCP is copied
@@ -360,7 +469,7 @@ class TestIpsecAhTun(TemplateIpsecAh, IpsecTun46Tests):
 
 
 class TestIpsecAhTun2(TemplateIpsecAh, IpsecTun46Tests):
 
 
 class TestIpsecAhTun2(TemplateIpsecAh, IpsecTun46Tests):
-    """ Ipsec AH - TUN encap tests """
+    """Ipsec AH - TUN encap tests"""
 
     def setUp(self):
         self.ipv4_params = IPsecIPv4Params()
 
     def setUp(self):
         self.ipv4_params = IPsecIPv4Params()
@@ -373,24 +482,28 @@ class TestIpsecAhTun2(TemplateIpsecAh, IpsecTun46Tests):
 
     def gen_pkts(self, sw_intf, src, dst, count=1, payload_size=54):
         # set the DSCP + ECN - flags are set to copy only DSCP
 
     def gen_pkts(self, sw_intf, src, dst, count=1, payload_size=54):
         # set the DSCP + ECN - flags are set to copy only DSCP
-        return [Ether(src=sw_intf.remote_mac, dst=sw_intf.local_mac) /
-                IP(src=src, dst=dst, tos=0) /
-                UDP(sport=4444, dport=4444) /
-                Raw(b'X' * payload_size)
-                for i in range(count)]
+        return [
+            Ether(src=sw_intf.remote_mac, dst=sw_intf.local_mac)
+            / IP(src=src, dst=dst, tos=0)
+            / UDP(sport=4444, dport=4444)
+            / Raw(b"X" * payload_size)
+            for i in range(count)
+        ]
 
     def gen_pkts6(self, p, sw_intf, src, dst, count=1, payload_size=54):
         # set the DSCP + ECN - flags are set to copy both
 
     def gen_pkts6(self, p, sw_intf, src, dst, count=1, payload_size=54):
         # set the DSCP + ECN - flags are set to copy both
-        return [Ether(src=sw_intf.remote_mac, dst=sw_intf.local_mac) /
-                IPv6(src=src, dst=dst, tc=0) /
-                UDP(sport=4444, dport=4444) /
-                Raw(b'X' * payload_size)
-                for i in range(count)]
+        return [
+            Ether(src=sw_intf.remote_mac, dst=sw_intf.local_mac)
+            / IPv6(src=src, dst=dst, tc=0)
+            / UDP(sport=4444, dport=4444)
+            / Raw(b"X" * payload_size)
+            for i in range(count)
+        ]
 
     def verify_encrypted(self, p, sa, rxs):
         # just check that only the DSCP is copied
         for rx in rxs:
 
     def verify_encrypted(self, p, sa, rxs):
         # just check that only the DSCP is copied
         for rx in rxs:
-            self.assertEqual(rx[IP].tos, 0xc)
+            self.assertEqual(rx[IP].tos, 0xC)
 
     def verify_encrypted6(self, p, sa, rxs):
         # just check that the DSCP & ECN are copied
 
     def verify_encrypted6(self, p, sa, rxs):
         # just check that the DSCP & ECN are copied
@@ -398,17 +511,14 @@ class TestIpsecAhTun2(TemplateIpsecAh, IpsecTun46Tests):
             self.assertEqual(rx[IPv6].tc, 0x10)
 
 
             self.assertEqual(rx[IPv6].tc, 0x10)
 
 
-class TestIpsecAhHandoff(TemplateIpsecAh,
-                         IpsecTun6HandoffTests,
-                         IpsecTun4HandoffTests):
-    """ Ipsec AH Handoff """
+class TestIpsecAhHandoff(TemplateIpsecAh, IpsecTun6HandoffTests, IpsecTun4HandoffTests):
+    """Ipsec AH Handoff"""
+
     pass
 
 
     pass
 
 
-class TestIpsecAhAll(ConfigIpsecAH,
-                     IpsecTra4, IpsecTra6,
-                     IpsecTun4, IpsecTun6):
-    """ Ipsec AH all Algos """
+class TestIpsecAhAll(ConfigIpsecAH, IpsecTra4, IpsecTra6, IpsecTun4, IpsecTun6):
+    """Ipsec AH all Algos"""
 
     def setUp(self):
         super(TestIpsecAhAll, self).setUp()
 
     def setUp(self):
         super(TestIpsecAhAll, self).setUp()
@@ -421,21 +531,26 @@ class TestIpsecAhAll(ConfigIpsecAH,
         # foreach VPP crypto engine
         engines = ["ia32", "ipsecmb", "openssl"]
 
         # foreach VPP crypto engine
         engines = ["ia32", "ipsecmb", "openssl"]
 
-        algos = [{'vpp': VppEnum.vl_api_ipsec_integ_alg_t.
-                  IPSEC_API_INTEG_ALG_SHA1_96,
-                  'scapy': "HMAC-SHA1-96"},
-                 {'vpp': VppEnum.vl_api_ipsec_integ_alg_t.
-                  IPSEC_API_INTEG_ALG_SHA_256_128,
-                  'scapy': "SHA2-256-128"},
-                 {'vpp': VppEnum.vl_api_ipsec_integ_alg_t.
-                  IPSEC_API_INTEG_ALG_SHA_384_192,
-                  'scapy': "SHA2-384-192"},
-                 {'vpp': VppEnum.vl_api_ipsec_integ_alg_t.
-                  IPSEC_API_INTEG_ALG_SHA_512_256,
-                  'scapy': "SHA2-512-256"}]
-
-        flags = [0, (VppEnum.vl_api_ipsec_sad_flags_t.
-                     IPSEC_API_SAD_FLAG_USE_ESN)]
+        algos = [
+            {
+                "vpp": VppEnum.vl_api_ipsec_integ_alg_t.IPSEC_API_INTEG_ALG_SHA1_96,
+                "scapy": "HMAC-SHA1-96",
+            },
+            {
+                "vpp": VppEnum.vl_api_ipsec_integ_alg_t.IPSEC_API_INTEG_ALG_SHA_256_128,
+                "scapy": "SHA2-256-128",
+            },
+            {
+                "vpp": VppEnum.vl_api_ipsec_integ_alg_t.IPSEC_API_INTEG_ALG_SHA_384_192,
+                "scapy": "SHA2-384-192",
+            },
+            {
+                "vpp": VppEnum.vl_api_ipsec_integ_alg_t.IPSEC_API_INTEG_ALG_SHA_512_256,
+                "scapy": "SHA2-512-256",
+            },
+        ]
+
+        flags = [0, (VppEnum.vl_api_ipsec_sad_flags_t.IPSEC_API_SAD_FLAG_USE_ESN)]
 
         #
         # loop through the VPP engines
 
         #
         # loop through the VPP engines
@@ -454,14 +569,14 @@ class TestIpsecAhAll(ConfigIpsecAH,
                     self.ipv4_params = IPsecIPv4Params()
                     self.ipv6_params = IPsecIPv6Params()
 
                     self.ipv4_params = IPsecIPv4Params()
                     self.ipv6_params = IPsecIPv6Params()
 
-                    self.params = {self.ipv4_params.addr_type:
-                                   self.ipv4_params,
-                                   self.ipv6_params.addr_type:
-                                   self.ipv6_params}
+                    self.params = {
+                        self.ipv4_params.addr_type: self.ipv4_params,
+                        self.ipv6_params.addr_type: self.ipv6_params,
+                    }
 
                     for _, p in self.params.items():
 
                     for _, p in self.params.items():
-                        p.auth_algo_vpp_id = algo['vpp']
-                        p.auth_algo = algo['scapy']
+                        p.auth_algo_vpp_id = algo["vpp"]
+                        p.auth_algo = algo["scapy"]
                         p.flags = p.flags | flag
 
                     #
                         p.flags = p.flags | flag
 
                     #
@@ -484,5 +599,5 @@ class TestIpsecAhAll(ConfigIpsecAH,
                     self.unconfig_network()
 
 
                     self.unconfig_network()
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index b5b4ada..9c62c87 100644 (file)
@@ -6,7 +6,7 @@ from vpp_papi import VppEnum
 
 
 class IpsecApiTestCase(VppTestCase):
 
 
 class IpsecApiTestCase(VppTestCase):
-    """ IPSec API tests """
+    """IPSec API tests"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -22,10 +22,8 @@ class IpsecApiTestCase(VppTestCase):
         self.pg0.config_ip4()
         self.pg0.admin_up()
 
         self.pg0.config_ip4()
         self.pg0.admin_up()
 
-        self.vpp_esp_protocol = (VppEnum.vl_api_ipsec_proto_t.
-                                 IPSEC_API_PROTO_ESP)
-        self.vpp_ah_protocol = (VppEnum.vl_api_ipsec_proto_t.
-                                IPSEC_API_PROTO_AH)
+        self.vpp_esp_protocol = VppEnum.vl_api_ipsec_proto_t.IPSEC_API_PROTO_ESP
+        self.vpp_ah_protocol = VppEnum.vl_api_ipsec_proto_t.IPSEC_API_PROTO_AH
         self.ipv4_params = IPsecIPv4Params()
 
     def tearDown(self):
         self.ipv4_params = IPsecIPv4Params()
 
     def tearDown(self):
@@ -34,32 +32,34 @@ class IpsecApiTestCase(VppTestCase):
         super(IpsecApiTestCase, self).tearDown()
 
     def test_backend_dump(self):
         super(IpsecApiTestCase, self).tearDown()
 
     def test_backend_dump(self):
-        """ backend dump """
+        """backend dump"""
         d = self.vapi.ipsec_backend_dump()
         self.assert_equal(len(d), 2, "number of ipsec backends in dump")
         d = self.vapi.ipsec_backend_dump()
         self.assert_equal(len(d), 2, "number of ipsec backends in dump")
-        self.assert_equal(d[0].protocol, self.vpp_ah_protocol,
-                          "ipsec protocol in dump entry")
+        self.assert_equal(
+            d[0].protocol, self.vpp_ah_protocol, "ipsec protocol in dump entry"
+        )
         self.assert_equal(d[0].index, 0, "index in dump entry")
         self.assert_equal(d[0].active, 1, "active flag in dump entry")
         self.assert_equal(d[0].index, 0, "index in dump entry")
         self.assert_equal(d[0].active, 1, "active flag in dump entry")
-        self.assert_equal(d[1].protocol, self.vpp_esp_protocol,
-                          "ipsec protocol in dump entry")
+        self.assert_equal(
+            d[1].protocol, self.vpp_esp_protocol, "ipsec protocol in dump entry"
+        )
         self.assert_equal(d[1].index, 0, "index in dump entry")
         self.assert_equal(d[1].active, 1, "active flag in dump entry")
 
     def test_select_valid_backend(self):
         self.assert_equal(d[1].index, 0, "index in dump entry")
         self.assert_equal(d[1].active, 1, "active flag in dump entry")
 
     def test_select_valid_backend(self):
-        """ select valid backend """
+        """select valid backend"""
         self.vapi.ipsec_select_backend(self.vpp_ah_protocol, 0)
         self.vapi.ipsec_select_backend(self.vpp_esp_protocol, 0)
 
     def test_select_invalid_backend(self):
         self.vapi.ipsec_select_backend(self.vpp_ah_protocol, 0)
         self.vapi.ipsec_select_backend(self.vpp_esp_protocol, 0)
 
     def test_select_invalid_backend(self):
-        """ select invalid backend """
+        """select invalid backend"""
         with self.vapi.assert_negative_api_retval():
             self.vapi.ipsec_select_backend(self.vpp_ah_protocol, 200)
         with self.vapi.assert_negative_api_retval():
             self.vapi.ipsec_select_backend(self.vpp_esp_protocol, 200)
 
     def test_select_backend_in_use(self):
         with self.vapi.assert_negative_api_retval():
             self.vapi.ipsec_select_backend(self.vpp_ah_protocol, 200)
         with self.vapi.assert_negative_api_retval():
             self.vapi.ipsec_select_backend(self.vpp_esp_protocol, 200)
 
     def test_select_backend_in_use(self):
-        """ attempt to change backend while sad configured """
+        """attempt to change backend while sad configured"""
         params = self.ipv4_params
         addr_type = params.addr_type
         is_ipv6 = params.is_ipv6
         params = self.ipv4_params
         addr_type = params.addr_type
         is_ipv6 = params.is_ipv6
@@ -73,48 +73,48 @@ class IpsecApiTestCase(VppTestCase):
         self.vapi.ipsec_sad_entry_add_del(
             is_add=1,
             entry={
         self.vapi.ipsec_sad_entry_add_del(
             is_add=1,
             entry={
-                'sad_id': scapy_tun_sa_id,
-                'spi': scapy_tun_spi,
-                'integrity_algorithm': auth_algo_vpp_id,
-                'integrity_key': {
-                    'data': auth_key,
-                    'length': len(auth_key),
+                "sad_id": scapy_tun_sa_id,
+                "spi": scapy_tun_spi,
+                "integrity_algorithm": auth_algo_vpp_id,
+                "integrity_key": {
+                    "data": auth_key,
+                    "length": len(auth_key),
                 },
                 },
-                'crypto_algorithm': crypt_algo_vpp_id,
-                'crypto_key': {
-                    'data': crypt_key,
-                    'length': len(crypt_key),
+                "crypto_algorithm": crypt_algo_vpp_id,
+                "crypto_key": {
+                    "data": crypt_key,
+                    "length": len(crypt_key),
                 },
                 },
-                'protocol': self.vpp_ah_protocol,
-                'tunnel_src': self.pg0.local_addr[addr_type],
-                'tunnel_dst': self.pg0.remote_addr[addr_type]
-            })
+                "protocol": self.vpp_ah_protocol,
+                "tunnel_src": self.pg0.local_addr[addr_type],
+                "tunnel_dst": self.pg0.remote_addr[addr_type],
+            },
+        )
         with self.vapi.assert_negative_api_retval():
         with self.vapi.assert_negative_api_retval():
-            self.vapi.ipsec_select_backend(
-                protocol=self.vpp_ah_protocol, index=0)
+            self.vapi.ipsec_select_backend(protocol=self.vpp_ah_protocol, index=0)
 
         self.vapi.ipsec_sad_entry_add_del(
             is_add=0,
             entry={
 
         self.vapi.ipsec_sad_entry_add_del(
             is_add=0,
             entry={
-                'sad_id': scapy_tun_sa_id,
-                'spi': scapy_tun_spi,
-                'integrity_algorithm': auth_algo_vpp_id,
-                'integrity_key': {
-                    'data': auth_key,
-                    'length': len(auth_key),
+                "sad_id": scapy_tun_sa_id,
+                "spi": scapy_tun_spi,
+                "integrity_algorithm": auth_algo_vpp_id,
+                "integrity_key": {
+                    "data": auth_key,
+                    "length": len(auth_key),
                 },
                 },
-                'crypto_algorithm': crypt_algo_vpp_id,
-                'crypto_key': {
-                    'data': crypt_key,
-                    'length': len(crypt_key),
+                "crypto_algorithm": crypt_algo_vpp_id,
+                "crypto_key": {
+                    "data": crypt_key,
+                    "length": len(crypt_key),
                 },
                 },
-                'protocol': self.vpp_ah_protocol,
-                'tunnel_src': self.pg0.local_addr[addr_type],
-                'tunnel_dst': self.pg0.remote_addr[addr_type]
-            })
-        self.vapi.ipsec_select_backend(
-            protocol=self.vpp_ah_protocol, index=0)
+                "protocol": self.vpp_ah_protocol,
+                "tunnel_src": self.pg0.local_addr[addr_type],
+                "tunnel_dst": self.pg0.remote_addr[addr_type],
+            },
+        )
+        self.vapi.ipsec_select_backend(protocol=self.vpp_ah_protocol, index=0)
 
 
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index 6ee6f78..f9de210 100644 (file)
@@ -33,7 +33,7 @@ packets are dropped as expected.
 
 
 class IPSecInboundDefaultDrop(IPSecIPv4Fwd):
 
 
 class IPSecInboundDefaultDrop(IPSecIPv4Fwd):
-    """ IPSec: inbound packets drop by default with no matching rule """
+    """IPSec: inbound packets drop by default with no matching rule"""
 
     def test_ipsec_inbound_default_drop(self):
         # configure two interfaces and bind the same SPD to both
 
     def test_ipsec_inbound_default_drop(self):
         # configure two interfaces and bind the same SPD to both
@@ -43,13 +43,26 @@ class IPSecInboundDefaultDrop(IPSecIPv4Fwd):
 
         # catch-all inbound BYPASS policy, all interfaces
         inbound_policy = self.spd_add_rem_policy(
 
         # catch-all inbound BYPASS policy, all interfaces
         inbound_policy = self.spd_add_rem_policy(
-            1, None, None, socket.IPPROTO_UDP, is_out=0, priority=10,
-            policy_type="bypass", all_ips=True)
+            1,
+            None,
+            None,
+            socket.IPPROTO_UDP,
+            is_out=0,
+            priority=10,
+            policy_type="bypass",
+            all_ips=True,
+        )
 
         # outbound BYPASS policy allowing traffic from pg0->pg1
         outbound_policy = self.spd_add_rem_policy(
 
         # outbound BYPASS policy allowing traffic from pg0->pg1
         outbound_policy = self.spd_add_rem_policy(
-            1, self.pg0, self.pg1, socket.IPPROTO_UDP,
-            is_out=1, priority=10, policy_type="bypass")
+            1,
+            self.pg0,
+            self.pg1,
+            socket.IPPROTO_UDP,
+            is_out=1,
+            priority=10,
+            policy_type="bypass",
+        )
 
         # create a packet stream pg0->pg1 + add to pg0
         packets0 = self.create_stream(self.pg0, self.pg1, pkt_count)
 
         # create a packet stream pg0->pg1 + add to pg0
         packets0 = self.create_stream(self.pg0, self.pg1, pkt_count)
@@ -64,8 +77,7 @@ class IPSecInboundDefaultDrop(IPSecIPv4Fwd):
             try:
                 self.logger.debug(ppp("SPD - Got packet:", packet))
             except Exception:
             try:
                 self.logger.debug(ppp("SPD - Got packet:", packet))
             except Exception:
-                self.logger.error(
-                    ppp("Unexpected or invalid packet:", packet))
+                self.logger.error(ppp("Unexpected or invalid packet:", packet))
                 raise
         self.logger.debug("SPD: Num packets: %s", len(cap1.res))
         # verify captures on pg1
                 raise
         self.logger.debug("SPD: Num packets: %s", len(cap1.res))
         # verify captures on pg1
@@ -76,8 +88,16 @@ class IPSecInboundDefaultDrop(IPSecIPv4Fwd):
 
         # remove inbound catch-all BYPASS rule, traffic should now be dropped
         self.spd_add_rem_policy(  # inbound, all interfaces
 
         # remove inbound catch-all BYPASS rule, traffic should now be dropped
         self.spd_add_rem_policy(  # inbound, all interfaces
-            1, None, None, socket.IPPROTO_UDP, is_out=0, priority=10,
-            policy_type="bypass", all_ips=True, remove=True)
+            1,
+            None,
+            None,
+            socket.IPPROTO_UDP,
+            is_out=0,
+            priority=10,
+            policy_type="bypass",
+            all_ips=True,
+            remove=True,
+        )
 
         # create another packet stream pg0->pg1 + add to pg0
         packets1 = self.create_stream(self.pg0, self.pg1, pkt_count)
 
         # create another packet stream pg0->pg1 + add to pg0
         packets1 = self.create_stream(self.pg0, self.pg1, pkt_count)
@@ -85,8 +105,9 @@ class IPSecInboundDefaultDrop(IPSecIPv4Fwd):
         self.pg_interfaces[1].enable_capture()
         self.pg_start()
         # confirm traffic has now been dropped
         self.pg_interfaces[1].enable_capture()
         self.pg_start()
         # confirm traffic has now been dropped
-        self.pg1.assert_nothing_captured(remark="inbound pkts with no matching"
-                                         "rules NOT dropped by default")
+        self.pg1.assert_nothing_captured(
+            remark="inbound pkts with no matching" "rules NOT dropped by default"
+        )
         # both policies should not have matched any further packets
         # since we've dropped at input stage
         self.verify_policy_match(pkt_count, outbound_policy)
         # both policies should not have matched any further packets
         # since we've dropped at input stage
         self.verify_policy_match(pkt_count, outbound_policy)
@@ -94,7 +115,7 @@ class IPSecInboundDefaultDrop(IPSecIPv4Fwd):
 
 
 class IPSecOutboundDefaultDrop(IPSecIPv4Fwd):
 
 
 class IPSecOutboundDefaultDrop(IPSecIPv4Fwd):
-    """ IPSec: outbound packets drop by default with no matching rule """
+    """IPSec: outbound packets drop by default with no matching rule"""
 
     def test_ipsec_inbound_default_drop(self):
         # configure two interfaces and bind the same SPD to both
 
     def test_ipsec_inbound_default_drop(self):
         # configure two interfaces and bind the same SPD to both
@@ -104,13 +125,26 @@ class IPSecOutboundDefaultDrop(IPSecIPv4Fwd):
 
         # catch-all inbound BYPASS policy, all interfaces
         inbound_policy = self.spd_add_rem_policy(
 
         # catch-all inbound BYPASS policy, all interfaces
         inbound_policy = self.spd_add_rem_policy(
-            1, None, None, socket.IPPROTO_UDP, is_out=0, priority=10,
-            policy_type="bypass", all_ips=True)
+            1,
+            None,
+            None,
+            socket.IPPROTO_UDP,
+            is_out=0,
+            priority=10,
+            policy_type="bypass",
+            all_ips=True,
+        )
 
         # outbound BYPASS policy allowing traffic from pg0->pg1
         outbound_policy = self.spd_add_rem_policy(
 
         # outbound BYPASS policy allowing traffic from pg0->pg1
         outbound_policy = self.spd_add_rem_policy(
-            1, self.pg0, self.pg1, socket.IPPROTO_UDP,
-            is_out=1, priority=10, policy_type="bypass")
+            1,
+            self.pg0,
+            self.pg1,
+            socket.IPPROTO_UDP,
+            is_out=1,
+            priority=10,
+            policy_type="bypass",
+        )
 
         # create a packet stream pg0->pg1 + add to pg0
         packets0 = self.create_stream(self.pg0, self.pg1, pkt_count)
 
         # create a packet stream pg0->pg1 + add to pg0
         packets0 = self.create_stream(self.pg0, self.pg1, pkt_count)
@@ -125,8 +159,7 @@ class IPSecOutboundDefaultDrop(IPSecIPv4Fwd):
             try:
                 self.logger.debug(ppp("SPD - Got packet:", packet))
             except Exception:
             try:
                 self.logger.debug(ppp("SPD - Got packet:", packet))
             except Exception:
-                self.logger.error(
-                    ppp("Unexpected or invalid packet:", packet))
+                self.logger.error(ppp("Unexpected or invalid packet:", packet))
                 raise
         self.logger.debug("SPD: Num packets: %s", len(cap1.res))
         # verify captures on pg1
                 raise
         self.logger.debug("SPD: Num packets: %s", len(cap1.res))
         # verify captures on pg1
@@ -137,9 +170,15 @@ class IPSecOutboundDefaultDrop(IPSecIPv4Fwd):
 
         # remove outbound rule
         self.spd_add_rem_policy(
 
         # remove outbound rule
         self.spd_add_rem_policy(
-            1, self.pg0, self.pg1, socket.IPPROTO_UDP,
-            is_out=1, priority=10, policy_type="bypass",
-            remove=True)
+            1,
+            self.pg0,
+            self.pg1,
+            socket.IPPROTO_UDP,
+            is_out=1,
+            priority=10,
+            policy_type="bypass",
+            remove=True,
+        )
 
         # create another packet stream pg0->pg1 + add to pg0
         packets1 = self.create_stream(self.pg0, self.pg1, pkt_count)
 
         # create another packet stream pg0->pg1 + add to pg0
         packets1 = self.create_stream(self.pg0, self.pg1, pkt_count)
@@ -148,13 +187,13 @@ class IPSecOutboundDefaultDrop(IPSecIPv4Fwd):
         self.pg_start()
         # confirm traffic was dropped and not forwarded
         self.pg1.assert_nothing_captured(
         self.pg_start()
         # confirm traffic was dropped and not forwarded
         self.pg1.assert_nothing_captured(
-            remark="outbound pkts with no matching rules NOT dropped "
-            "by default")
+            remark="outbound pkts with no matching rules NOT dropped " "by default"
+        )
         # inbound rule should have matched twice the # of pkts now
         # inbound rule should have matched twice the # of pkts now
-        self.verify_policy_match(pkt_count*2, inbound_policy)
+        self.verify_policy_match(pkt_count * 2, inbound_policy)
         # as dropped at outbound, outbound policy is the same
         self.verify_policy_match(pkt_count, outbound_policy)
 
 
         # as dropped at outbound, outbound policy is the same
         self.verify_policy_match(pkt_count, outbound_policy)
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index 74d01cd..54b8771 100644 (file)
@@ -8,14 +8,26 @@ from scapy.packet import Raw
 
 from parameterized import parameterized
 from framework import VppTestRunner
 
 from parameterized import parameterized
 from framework import VppTestRunner
-from template_ipsec import IpsecTra46Tests, IpsecTun46Tests, TemplateIpsec, \
-    IpsecTcpTests, IpsecTun4Tests, IpsecTra4Tests, config_tra_params, \
-    config_tun_params, IPsecIPv4Params, IPsecIPv6Params, \
-    IpsecTra4, IpsecTun4, IpsecTra6, IpsecTun6, \
-    IpsecTun6HandoffTests, IpsecTun4HandoffTests, \
-    IpsecTra6ExtTests
-from vpp_ipsec import VppIpsecSpd, VppIpsecSpdEntry, VppIpsecSA,\
-    VppIpsecSpdItfBinding
+from template_ipsec import (
+    IpsecTra46Tests,
+    IpsecTun46Tests,
+    TemplateIpsec,
+    IpsecTcpTests,
+    IpsecTun4Tests,
+    IpsecTra4Tests,
+    config_tra_params,
+    config_tun_params,
+    IPsecIPv4Params,
+    IPsecIPv6Params,
+    IpsecTra4,
+    IpsecTun4,
+    IpsecTra6,
+    IpsecTun6,
+    IpsecTun6HandoffTests,
+    IpsecTun4HandoffTests,
+    IpsecTra6ExtTests,
+)
+from vpp_ipsec import VppIpsecSpd, VppIpsecSpdEntry, VppIpsecSA, VppIpsecSpdItfBinding
 from vpp_ip_route import VppIpRoute, VppRoutePath
 from vpp_ip import DpoProto
 from vpp_papi import VppEnum
 from vpp_ip_route import VppIpRoute, VppRoutePath
 from vpp_ip import DpoProto
 from vpp_papi import VppEnum
@@ -68,13 +80,11 @@ class ConfigIpsecESP(TemplateIpsec):
         self.tun_spd.add_vpp_config()
         self.net_objs.append(self.tun_spd)
 
         self.tun_spd.add_vpp_config()
         self.net_objs.append(self.tun_spd)
 
-        b = VppIpsecSpdItfBinding(self, self.tun_spd,
-                                  self.tun_if)
+        b = VppIpsecSpdItfBinding(self, self.tun_spd, self.tun_if)
         b.add_vpp_config()
         self.net_objs.append(b)
 
         b.add_vpp_config()
         self.net_objs.append(b)
 
-        b = VppIpsecSpdItfBinding(self, self.tra_spd,
-                                  self.tra_if)
+        b = VppIpsecSpdItfBinding(self, self.tra_spd, self.tra_if)
         b.add_vpp_config()
         self.net_objs.append(b)
 
         b.add_vpp_config()
         self.net_objs.append(b)
 
@@ -87,10 +97,16 @@ class ConfigIpsecESP(TemplateIpsec):
 
         for p in params:
             d = DpoProto.DPO_PROTO_IP6 if p.is_ipv6 else DpoProto.DPO_PROTO_IP4
 
         for p in params:
             d = DpoProto.DPO_PROTO_IP6 if p.is_ipv6 else DpoProto.DPO_PROTO_IP4
-            r = VppIpRoute(self,  p.remote_tun_if_host, p.addr_len,
-                           [VppRoutePath(self.tun_if.remote_addr[p.addr_type],
-                                         0xffffffff,
-                                         proto=d)])
+            r = VppIpRoute(
+                self,
+                p.remote_tun_if_host,
+                p.addr_len,
+                [
+                    VppRoutePath(
+                        self.tun_if.remote_addr[p.addr_type], 0xFFFFFFFF, proto=d
+                    )
+                ],
+            )
             r.add_vpp_config()
             self.net_objs.append(r)
 
             r.add_vpp_config()
             self.net_objs.append(r)
 
@@ -120,75 +136,125 @@ class ConfigIpsecESP(TemplateIpsec):
         salt = params.salt
         objs = []
 
         salt = params.salt
         objs = []
 
-        params.tun_sa_in = VppIpsecSA(self, scapy_tun_sa_id, scapy_tun_spi,
-                                      auth_algo_vpp_id, auth_key,
-                                      crypt_algo_vpp_id, crypt_key,
-                                      self.vpp_esp_protocol,
-                                      self.tun_if.local_addr[addr_type],
-                                      self.tun_if.remote_addr[addr_type],
-                                      tun_flags=tun_flags,
-                                      dscp=params.dscp,
-                                      flags=flags,
-                                      salt=salt,
-                                      hop_limit=params.outer_hop_limit)
-        params.tun_sa_out = VppIpsecSA(self, vpp_tun_sa_id, vpp_tun_spi,
-                                       auth_algo_vpp_id, auth_key,
-                                       crypt_algo_vpp_id, crypt_key,
-                                       self.vpp_esp_protocol,
-                                       self.tun_if.remote_addr[addr_type],
-                                       self.tun_if.local_addr[addr_type],
-                                       tun_flags=tun_flags,
-                                       dscp=params.dscp,
-                                       flags=flags,
-                                       salt=salt,
-                                       hop_limit=params.outer_hop_limit)
+        params.tun_sa_in = VppIpsecSA(
+            self,
+            scapy_tun_sa_id,
+            scapy_tun_spi,
+            auth_algo_vpp_id,
+            auth_key,
+            crypt_algo_vpp_id,
+            crypt_key,
+            self.vpp_esp_protocol,
+            self.tun_if.local_addr[addr_type],
+            self.tun_if.remote_addr[addr_type],
+            tun_flags=tun_flags,
+            dscp=params.dscp,
+            flags=flags,
+            salt=salt,
+            hop_limit=params.outer_hop_limit,
+        )
+        params.tun_sa_out = VppIpsecSA(
+            self,
+            vpp_tun_sa_id,
+            vpp_tun_spi,
+            auth_algo_vpp_id,
+            auth_key,
+            crypt_algo_vpp_id,
+            crypt_key,
+            self.vpp_esp_protocol,
+            self.tun_if.remote_addr[addr_type],
+            self.tun_if.local_addr[addr_type],
+            tun_flags=tun_flags,
+            dscp=params.dscp,
+            flags=flags,
+            salt=salt,
+            hop_limit=params.outer_hop_limit,
+        )
         objs.append(params.tun_sa_in)
         objs.append(params.tun_sa_out)
 
         objs.append(params.tun_sa_in)
         objs.append(params.tun_sa_out)
 
-        params.spd_policy_in_any = VppIpsecSpdEntry(self, self.tun_spd,
-                                                    scapy_tun_sa_id,
-                                                    addr_any, addr_bcast,
-                                                    addr_any, addr_bcast,
-                                                    socket.IPPROTO_ESP)
-        params.spd_policy_out_any = VppIpsecSpdEntry(self, self.tun_spd,
-                                                     scapy_tun_sa_id,
-                                                     addr_any, addr_bcast,
-                                                     addr_any, addr_bcast,
-                                                     socket.IPPROTO_ESP,
-                                                     is_outbound=0)
+        params.spd_policy_in_any = VppIpsecSpdEntry(
+            self,
+            self.tun_spd,
+            scapy_tun_sa_id,
+            addr_any,
+            addr_bcast,
+            addr_any,
+            addr_bcast,
+            socket.IPPROTO_ESP,
+        )
+        params.spd_policy_out_any = VppIpsecSpdEntry(
+            self,
+            self.tun_spd,
+            scapy_tun_sa_id,
+            addr_any,
+            addr_bcast,
+            addr_any,
+            addr_bcast,
+            socket.IPPROTO_ESP,
+            is_outbound=0,
+        )
         objs.append(params.spd_policy_out_any)
         objs.append(params.spd_policy_in_any)
 
         objs.append(params.spd_policy_out_any)
         objs.append(params.spd_policy_in_any)
 
-        objs.append(VppIpsecSpdEntry(self, self.tun_spd, vpp_tun_sa_id,
-                                     remote_tun_if_host, remote_tun_if_host,
-                                     self.pg1.remote_addr[addr_type],
-                                     self.pg1.remote_addr[addr_type],
-                                     0,
-                                     priority=10,
-                                     policy=e.IPSEC_API_SPD_ACTION_PROTECT,
-                                     is_outbound=0))
-        objs.append(VppIpsecSpdEntry(self, self.tun_spd, scapy_tun_sa_id,
-                                     self.pg1.remote_addr[addr_type],
-                                     self.pg1.remote_addr[addr_type],
-                                     remote_tun_if_host, remote_tun_if_host,
-                                     0,
-                                     policy=e.IPSEC_API_SPD_ACTION_PROTECT,
-                                     priority=10))
-        objs.append(VppIpsecSpdEntry(self, self.tun_spd, vpp_tun_sa_id,
-                                     remote_tun_if_host, remote_tun_if_host,
-                                     self.pg0.local_addr[addr_type],
-                                     self.pg0.local_addr[addr_type],
-                                     0,
-                                     priority=20,
-                                     policy=e.IPSEC_API_SPD_ACTION_PROTECT,
-                                     is_outbound=0))
-        objs.append(VppIpsecSpdEntry(self, self.tun_spd, scapy_tun_sa_id,
-                                     self.pg0.local_addr[addr_type],
-                                     self.pg0.local_addr[addr_type],
-                                     remote_tun_if_host, remote_tun_if_host,
-                                     0,
-                                     policy=e.IPSEC_API_SPD_ACTION_PROTECT,
-                                     priority=20))
+        objs.append(
+            VppIpsecSpdEntry(
+                self,
+                self.tun_spd,
+                vpp_tun_sa_id,
+                remote_tun_if_host,
+                remote_tun_if_host,
+                self.pg1.remote_addr[addr_type],
+                self.pg1.remote_addr[addr_type],
+                0,
+                priority=10,
+                policy=e.IPSEC_API_SPD_ACTION_PROTECT,
+                is_outbound=0,
+            )
+        )
+        objs.append(
+            VppIpsecSpdEntry(
+                self,
+                self.tun_spd,
+                scapy_tun_sa_id,
+                self.pg1.remote_addr[addr_type],
+                self.pg1.remote_addr[addr_type],
+                remote_tun_if_host,
+                remote_tun_if_host,
+                0,
+                policy=e.IPSEC_API_SPD_ACTION_PROTECT,
+                priority=10,
+            )
+        )
+        objs.append(
+            VppIpsecSpdEntry(
+                self,
+                self.tun_spd,
+                vpp_tun_sa_id,
+                remote_tun_if_host,
+                remote_tun_if_host,
+                self.pg0.local_addr[addr_type],
+                self.pg0.local_addr[addr_type],
+                0,
+                priority=20,
+                policy=e.IPSEC_API_SPD_ACTION_PROTECT,
+                is_outbound=0,
+            )
+        )
+        objs.append(
+            VppIpsecSpdEntry(
+                self,
+                self.tun_spd,
+                scapy_tun_sa_id,
+                self.pg0.local_addr[addr_type],
+                self.pg0.local_addr[addr_type],
+                remote_tun_if_host,
+                remote_tun_if_host,
+                0,
+                policy=e.IPSEC_API_SPD_ACTION_PROTECT,
+                priority=20,
+            )
+        )
         for o in objs:
             o.add_vpp_config()
         self.net_objs = self.net_objs + objs
         for o in objs:
             o.add_vpp_config()
         self.net_objs = self.net_objs + objs
@@ -210,45 +276,87 @@ class ConfigIpsecESP(TemplateIpsec):
         salt = params.salt
         objs = []
 
         salt = params.salt
         objs = []
 
-        params.tra_sa_in = VppIpsecSA(self, scapy_tra_sa_id, scapy_tra_spi,
-                                      auth_algo_vpp_id, auth_key,
-                                      crypt_algo_vpp_id, crypt_key,
-                                      self.vpp_esp_protocol,
-                                      flags=flags,
-                                      salt=salt)
-        params.tra_sa_out = VppIpsecSA(self, vpp_tra_sa_id, vpp_tra_spi,
-                                       auth_algo_vpp_id, auth_key,
-                                       crypt_algo_vpp_id, crypt_key,
-                                       self.vpp_esp_protocol,
-                                       flags=flags,
-                                       salt=salt)
+        params.tra_sa_in = VppIpsecSA(
+            self,
+            scapy_tra_sa_id,
+            scapy_tra_spi,
+            auth_algo_vpp_id,
+            auth_key,
+            crypt_algo_vpp_id,
+            crypt_key,
+            self.vpp_esp_protocol,
+            flags=flags,
+            salt=salt,
+        )
+        params.tra_sa_out = VppIpsecSA(
+            self,
+            vpp_tra_sa_id,
+            vpp_tra_spi,
+            auth_algo_vpp_id,
+            auth_key,
+            crypt_algo_vpp_id,
+            crypt_key,
+            self.vpp_esp_protocol,
+            flags=flags,
+            salt=salt,
+        )
         objs.append(params.tra_sa_in)
         objs.append(params.tra_sa_out)
 
         objs.append(params.tra_sa_in)
         objs.append(params.tra_sa_out)
 
-        objs.append(VppIpsecSpdEntry(self, self.tra_spd, vpp_tra_sa_id,
-                                     addr_any, addr_bcast,
-                                     addr_any, addr_bcast,
-                                     socket.IPPROTO_ESP))
-        objs.append(VppIpsecSpdEntry(self, self.tra_spd, vpp_tra_sa_id,
-                                     addr_any, addr_bcast,
-                                     addr_any, addr_bcast,
-                                     socket.IPPROTO_ESP,
-                                     is_outbound=0))
-        objs.append(VppIpsecSpdEntry(self, self.tra_spd, vpp_tra_sa_id,
-                                     self.tra_if.local_addr[addr_type],
-                                     self.tra_if.local_addr[addr_type],
-                                     self.tra_if.remote_addr[addr_type],
-                                     self.tra_if.remote_addr[addr_type],
-                                     0, priority=10,
-                                     policy=e.IPSEC_API_SPD_ACTION_PROTECT,
-                                     is_outbound=0))
-        objs.append(VppIpsecSpdEntry(self, self.tra_spd, scapy_tra_sa_id,
-                                     self.tra_if.local_addr[addr_type],
-                                     self.tra_if.local_addr[addr_type],
-                                     self.tra_if.remote_addr[addr_type],
-                                     self.tra_if.remote_addr[addr_type],
-                                     0, policy=e.IPSEC_API_SPD_ACTION_PROTECT,
-                                     priority=10))
+        objs.append(
+            VppIpsecSpdEntry(
+                self,
+                self.tra_spd,
+                vpp_tra_sa_id,
+                addr_any,
+                addr_bcast,
+                addr_any,
+                addr_bcast,
+                socket.IPPROTO_ESP,
+            )
+        )
+        objs.append(
+            VppIpsecSpdEntry(
+                self,
+                self.tra_spd,
+                vpp_tra_sa_id,
+                addr_any,
+                addr_bcast,
+                addr_any,
+                addr_bcast,
+                socket.IPPROTO_ESP,
+                is_outbound=0,
+            )
+        )
+        objs.append(
+            VppIpsecSpdEntry(
+                self,
+                self.tra_spd,
+                vpp_tra_sa_id,
+                self.tra_if.local_addr[addr_type],
+                self.tra_if.local_addr[addr_type],
+                self.tra_if.remote_addr[addr_type],
+                self.tra_if.remote_addr[addr_type],
+                0,
+                priority=10,
+                policy=e.IPSEC_API_SPD_ACTION_PROTECT,
+                is_outbound=0,
+            )
+        )
+        objs.append(
+            VppIpsecSpdEntry(
+                self,
+                self.tra_spd,
+                scapy_tra_sa_id,
+                self.tra_if.local_addr[addr_type],
+                self.tra_if.local_addr[addr_type],
+                self.tra_if.remote_addr[addr_type],
+                self.tra_if.remote_addr[addr_type],
+                0,
+                policy=e.IPSEC_API_SPD_ACTION_PROTECT,
+                priority=10,
+            )
+        )
         for o in objs:
             o.add_vpp_config()
         self.net_objs = self.net_objs + objs
         for o in objs:
             o.add_vpp_config()
         self.net_objs = self.net_objs + objs
@@ -308,9 +416,10 @@ class TemplateIpsecEsp(ConfigIpsecESP):
         super(TemplateIpsecEsp, self).tearDown()
 
 
         super(TemplateIpsecEsp, self).tearDown()
 
 
-class TestIpsecEsp1(TemplateIpsecEsp, IpsecTra46Tests,
-                    IpsecTun46Tests, IpsecTra6ExtTests):
-    """ Ipsec ESP - TUN & TRA tests """
+class TestIpsecEsp1(
+    TemplateIpsecEsp, IpsecTra46Tests, IpsecTun46Tests, IpsecTra6ExtTests
+):
+    """Ipsec ESP - TUN & TRA tests"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -327,7 +436,7 @@ class TestIpsecEsp1(TemplateIpsecEsp, IpsecTra46Tests,
         super(TestIpsecEsp1, self).tearDown()
 
     def test_tun_46(self):
         super(TestIpsecEsp1, self).tearDown()
 
     def test_tun_46(self):
-        """ ipsec 4o6 tunnel """
+        """ipsec 4o6 tunnel"""
         # add an SPD entry to direct 2.2.2.2 to the v6 tunnel SA
         p6 = self.ipv6_params
         p4 = self.ipv4_params
         # add an SPD entry to direct 2.2.2.2 to the v6 tunnel SA
         p6 = self.ipv6_params
         p4 = self.ipv4_params
@@ -335,20 +444,25 @@ class TestIpsecEsp1(TemplateIpsecEsp, IpsecTra46Tests,
         p6.remote_tun_if_host4 = "2.2.2.2"
         e = VppEnum.vl_api_ipsec_spd_action_t
 
         p6.remote_tun_if_host4 = "2.2.2.2"
         e = VppEnum.vl_api_ipsec_spd_action_t
 
-        VppIpsecSpdEntry(self,
-                         self.tun_spd,
-                         p6.scapy_tun_sa_id,
-                         self.pg1.remote_addr[p4.addr_type],
-                         self.pg1.remote_addr[p4.addr_type],
-                         p6.remote_tun_if_host4,
-                         p6.remote_tun_if_host4,
-                         0,
-                         priority=10,
-                         policy=e.IPSEC_API_SPD_ACTION_PROTECT,
-                         is_outbound=1).add_vpp_config()
-        VppIpRoute(self,  p6.remote_tun_if_host4, p4.addr_len,
-                   [VppRoutePath(self.tun_if.remote_addr[p4.addr_type],
-                                 0xffffffff)]).add_vpp_config()
+        VppIpsecSpdEntry(
+            self,
+            self.tun_spd,
+            p6.scapy_tun_sa_id,
+            self.pg1.remote_addr[p4.addr_type],
+            self.pg1.remote_addr[p4.addr_type],
+            p6.remote_tun_if_host4,
+            p6.remote_tun_if_host4,
+            0,
+            priority=10,
+            policy=e.IPSEC_API_SPD_ACTION_PROTECT,
+            is_outbound=1,
+        ).add_vpp_config()
+        VppIpRoute(
+            self,
+            p6.remote_tun_if_host4,
+            p4.addr_len,
+            [VppRoutePath(self.tun_if.remote_addr[p4.addr_type], 0xFFFFFFFF)],
+        ).add_vpp_config()
 
         old_name = self.tun6_encrypt_node_name
         self.tun6_encrypt_node_name = "esp4-encrypt"
 
         old_name = self.tun6_encrypt_node_name
         self.tun6_encrypt_node_name = "esp4-encrypt"
@@ -357,7 +471,7 @@ class TestIpsecEsp1(TemplateIpsecEsp, IpsecTra46Tests,
         self.tun6_encrypt_node_name = old_name
 
     def test_tun_64(self):
         self.tun6_encrypt_node_name = old_name
 
     def test_tun_64(self):
-        """ ipsec 6o4 tunnel """
+        """ipsec 6o4 tunnel"""
         # add an SPD entry to direct 4444::4 to the v4 tunnel SA
         p6 = self.ipv6_params
         p4 = self.ipv4_params
         # add an SPD entry to direct 4444::4 to the v4 tunnel SA
         p6 = self.ipv6_params
         p4 = self.ipv4_params
@@ -365,22 +479,26 @@ class TestIpsecEsp1(TemplateIpsecEsp, IpsecTra46Tests,
         p4.remote_tun_if_host6 = "4444::4"
         e = VppEnum.vl_api_ipsec_spd_action_t
 
         p4.remote_tun_if_host6 = "4444::4"
         e = VppEnum.vl_api_ipsec_spd_action_t
 
-        VppIpsecSpdEntry(self,
-                         self.tun_spd,
-                         p4.scapy_tun_sa_id,
-                         self.pg1.remote_addr[p6.addr_type],
-                         self.pg1.remote_addr[p6.addr_type],
-                         p4.remote_tun_if_host6,
-                         p4.remote_tun_if_host6,
-                         0,
-                         priority=10,
-                         policy=e.IPSEC_API_SPD_ACTION_PROTECT,
-                         is_outbound=1).add_vpp_config()
+        VppIpsecSpdEntry(
+            self,
+            self.tun_spd,
+            p4.scapy_tun_sa_id,
+            self.pg1.remote_addr[p6.addr_type],
+            self.pg1.remote_addr[p6.addr_type],
+            p4.remote_tun_if_host6,
+            p4.remote_tun_if_host6,
+            0,
+            priority=10,
+            policy=e.IPSEC_API_SPD_ACTION_PROTECT,
+            is_outbound=1,
+        ).add_vpp_config()
         d = DpoProto.DPO_PROTO_IP6
         d = DpoProto.DPO_PROTO_IP6
-        VppIpRoute(self,  p4.remote_tun_if_host6, p6.addr_len,
-                   [VppRoutePath(self.tun_if.remote_addr[p6.addr_type],
-                                 0xffffffff,
-                                 proto=d)]).add_vpp_config()
+        VppIpRoute(
+            self,
+            p4.remote_tun_if_host6,
+            p6.addr_len,
+            [VppRoutePath(self.tun_if.remote_addr[p6.addr_type], 0xFFFFFFFF, proto=d)],
+        ).add_vpp_config()
 
         old_name = self.tun4_encrypt_node_name
         self.tun4_encrypt_node_name = "esp6-encrypt"
 
         old_name = self.tun4_encrypt_node_name
         self.tun4_encrypt_node_name = "esp6-encrypt"
@@ -389,16 +507,18 @@ class TestIpsecEsp1(TemplateIpsecEsp, IpsecTra46Tests,
 
 
 class TestIpsecEspTun(TemplateIpsecEsp, IpsecTun46Tests):
 
 
 class TestIpsecEspTun(TemplateIpsecEsp, IpsecTun46Tests):
-    """ Ipsec ESP - TUN encap tests """
+    """Ipsec ESP - TUN encap tests"""
 
     def setUp(self):
         self.ipv4_params = IPsecIPv4Params()
         self.ipv6_params = IPsecIPv6Params()
 
 
     def setUp(self):
         self.ipv4_params = IPsecIPv4Params()
         self.ipv6_params = IPsecIPv6Params()
 
-        c = (VppEnum.vl_api_tunnel_encap_decap_flags_t.
-             TUNNEL_API_ENCAP_DECAP_FLAG_ENCAP_COPY_DSCP)
-        c1 = c | (VppEnum.vl_api_tunnel_encap_decap_flags_t.
-                  TUNNEL_API_ENCAP_DECAP_FLAG_ENCAP_COPY_ECN)
+        c = (
+            VppEnum.vl_api_tunnel_encap_decap_flags_t.TUNNEL_API_ENCAP_DECAP_FLAG_ENCAP_COPY_DSCP
+        )
+        c1 = c | (
+            VppEnum.vl_api_tunnel_encap_decap_flags_t.TUNNEL_API_ENCAP_DECAP_FLAG_ENCAP_COPY_ECN
+        )
 
         self.ipv4_params.tun_flags = c
         self.ipv6_params.tun_flags = c1
 
         self.ipv4_params.tun_flags = c
         self.ipv6_params.tun_flags = c1
@@ -407,19 +527,23 @@ class TestIpsecEspTun(TemplateIpsecEsp, IpsecTun46Tests):
 
     def gen_pkts(self, sw_intf, src, dst, count=1, payload_size=54):
         # set the DSCP + ECN - flags are set to copy only DSCP
 
     def gen_pkts(self, sw_intf, src, dst, count=1, payload_size=54):
         # set the DSCP + ECN - flags are set to copy only DSCP
-        return [Ether(src=sw_intf.remote_mac, dst=sw_intf.local_mac) /
-                IP(src=src, dst=dst, tos=5) /
-                UDP(sport=4444, dport=4444) /
-                Raw(b'X' * payload_size)
-                for i in range(count)]
+        return [
+            Ether(src=sw_intf.remote_mac, dst=sw_intf.local_mac)
+            / IP(src=src, dst=dst, tos=5)
+            / UDP(sport=4444, dport=4444)
+            / Raw(b"X" * payload_size)
+            for i in range(count)
+        ]
 
     def gen_pkts6(self, p, sw_intf, src, dst, count=1, payload_size=54):
         # set the DSCP + ECN - flags are set to copy both
 
     def gen_pkts6(self, p, sw_intf, src, dst, count=1, payload_size=54):
         # set the DSCP + ECN - flags are set to copy both
-        return [Ether(src=sw_intf.remote_mac, dst=sw_intf.local_mac) /
-                IPv6(src=src, dst=dst, tc=5) /
-                UDP(sport=4444, dport=4444) /
-                Raw(b'X' * payload_size)
-                for i in range(count)]
+        return [
+            Ether(src=sw_intf.remote_mac, dst=sw_intf.local_mac)
+            / IPv6(src=src, dst=dst, tc=5)
+            / UDP(sport=4444, dport=4444)
+            / Raw(b"X" * payload_size)
+            for i in range(count)
+        ]
 
     def verify_encrypted(self, p, sa, rxs):
         # just check that only the DSCP is copied
 
     def verify_encrypted(self, p, sa, rxs):
         # just check that only the DSCP is copied
@@ -433,7 +557,7 @@ class TestIpsecEspTun(TemplateIpsecEsp, IpsecTun46Tests):
 
 
 class TestIpsecEspTun2(TemplateIpsecEsp, IpsecTun46Tests):
 
 
 class TestIpsecEspTun2(TemplateIpsecEsp, IpsecTun46Tests):
-    """ Ipsec ESP - TUN DSCP tests """
+    """Ipsec ESP - TUN DSCP tests"""
 
     def setUp(self):
         self.ipv4_params = IPsecIPv4Params()
 
     def setUp(self):
         self.ipv4_params = IPsecIPv4Params()
@@ -445,39 +569,44 @@ class TestIpsecEspTun2(TemplateIpsecEsp, IpsecTun46Tests):
         super(TestIpsecEspTun2, self).setUp()
 
     def gen_pkts(self, sw_intf, src, dst, count=1, payload_size=54):
         super(TestIpsecEspTun2, self).setUp()
 
     def gen_pkts(self, sw_intf, src, dst, count=1, payload_size=54):
-        return [Ether(src=sw_intf.remote_mac, dst=sw_intf.local_mac) /
-                IP(src=src, dst=dst) /
-                UDP(sport=4444, dport=4444) /
-                Raw(b'X' * payload_size)
-                for i in range(count)]
+        return [
+            Ether(src=sw_intf.remote_mac, dst=sw_intf.local_mac)
+            / IP(src=src, dst=dst)
+            / UDP(sport=4444, dport=4444)
+            / Raw(b"X" * payload_size)
+            for i in range(count)
+        ]
 
     def gen_pkts6(self, p, sw_intf, src, dst, count=1, payload_size=54):
 
     def gen_pkts6(self, p, sw_intf, src, dst, count=1, payload_size=54):
-        return [Ether(src=sw_intf.remote_mac, dst=sw_intf.local_mac) /
-                IPv6(src=src, dst=dst) /
-                UDP(sport=4444, dport=4444) /
-                Raw(b'X' * payload_size)
-                for i in range(count)]
+        return [
+            Ether(src=sw_intf.remote_mac, dst=sw_intf.local_mac)
+            / IPv6(src=src, dst=dst)
+            / UDP(sport=4444, dport=4444)
+            / Raw(b"X" * payload_size)
+            for i in range(count)
+        ]
 
     def verify_encrypted(self, p, sa, rxs):
         # just check that only the DSCP is set
         for rx in rxs:
 
     def verify_encrypted(self, p, sa, rxs):
         # just check that only the DSCP is set
         for rx in rxs:
-            self.assertEqual(rx[IP].tos,
-                             VppEnum.vl_api_ip_dscp_t.IP_API_DSCP_EF << 2)
+            self.assertEqual(rx[IP].tos, VppEnum.vl_api_ip_dscp_t.IP_API_DSCP_EF << 2)
 
     def verify_encrypted6(self, p, sa, rxs):
         # just check that the DSCP is set
         for rx in rxs:
 
     def verify_encrypted6(self, p, sa, rxs):
         # just check that the DSCP is set
         for rx in rxs:
-            self.assertEqual(rx[IPv6].tc,
-                             VppEnum.vl_api_ip_dscp_t.IP_API_DSCP_AF11 << 2)
+            self.assertEqual(
+                rx[IPv6].tc, VppEnum.vl_api_ip_dscp_t.IP_API_DSCP_AF11 << 2
+            )
 
 
 class TestIpsecEsp2(TemplateIpsecEsp, IpsecTcpTests):
 
 
 class TestIpsecEsp2(TemplateIpsecEsp, IpsecTcpTests):
-    """ Ipsec ESP - TCP tests """
+    """Ipsec ESP - TCP tests"""
+
     pass
 
 
 class TestIpsecEspAsync(TemplateIpsecEsp):
     pass
 
 
 class TestIpsecEspAsync(TemplateIpsecEsp):
-    """ Ipsec ESP - Aysnc tests """
+    """Ipsec ESP - Aysnc tests"""
 
     vpp_worker_count = 2
 
 
     vpp_worker_count = 2
 
@@ -486,15 +615,16 @@ class TestIpsecEspAsync(TemplateIpsecEsp):
 
         self.p_sync = IPsecIPv4Params()
 
 
         self.p_sync = IPsecIPv4Params()
 
-        self.p_sync.crypt_algo_vpp_id = (VppEnum.vl_api_ipsec_crypto_alg_t.
-                                         IPSEC_API_CRYPTO_ALG_AES_CBC_256)
-        self.p_sync.crypt_algo = 'AES-CBC'  # scapy name
-        self.p_sync.crypt_key = b'JPjyOWBeVEQiMe7hJPjyOWBeVEQiMe7h'
+        self.p_sync.crypt_algo_vpp_id = (
+            VppEnum.vl_api_ipsec_crypto_alg_t.IPSEC_API_CRYPTO_ALG_AES_CBC_256
+        )
+        self.p_sync.crypt_algo = "AES-CBC"  # scapy name
+        self.p_sync.crypt_key = b"JPjyOWBeVEQiMe7hJPjyOWBeVEQiMe7h"
 
 
-        self.p_sync.scapy_tun_sa_id += 0xf0000
-        self.p_sync.scapy_tun_spi += 0xf0000
-        self.p_sync.vpp_tun_sa_id += 0xf0000
-        self.p_sync.vpp_tun_spi += 0xf0000
+        self.p_sync.scapy_tun_sa_id += 0xF0000
+        self.p_sync.scapy_tun_spi += 0xF0000
+        self.p_sync.vpp_tun_sa_id += 0xF0000
+        self.p_sync.vpp_tun_spi += 0xF0000
         self.p_sync.remote_tun_if_host = "2.2.2.2"
         e = VppEnum.vl_api_ipsec_spd_action_t
 
         self.p_sync.remote_tun_if_host = "2.2.2.2"
         e = VppEnum.vl_api_ipsec_spd_action_t
 
@@ -508,7 +638,8 @@ class TestIpsecEspAsync(TemplateIpsecEsp):
             self.p_sync.crypt_key,
             self.vpp_esp_protocol,
             self.tun_if.local_addr[self.p_sync.addr_type],
             self.p_sync.crypt_key,
             self.vpp_esp_protocol,
             self.tun_if.local_addr[self.p_sync.addr_type],
-            self.tun_if.remote_addr[self.p_sync.addr_type]).add_vpp_config()
+            self.tun_if.remote_addr[self.p_sync.addr_type],
+        ).add_vpp_config()
         self.p_sync.spd = VppIpsecSpdEntry(
             self,
             self.tun_spd,
         self.p_sync.spd = VppIpsecSpdEntry(
             self,
             self.tun_spd,
@@ -520,35 +651,40 @@ class TestIpsecEspAsync(TemplateIpsecEsp):
             0,
             priority=1,
             policy=e.IPSEC_API_SPD_ACTION_PROTECT,
             0,
             priority=1,
             policy=e.IPSEC_API_SPD_ACTION_PROTECT,
-            is_outbound=1).add_vpp_config()
-        VppIpRoute(self,
-                   self.p_sync.remote_tun_if_host,
-                   self.p_sync.addr_len,
-                   [VppRoutePath(
-                       self.tun_if.remote_addr[self.p_sync.addr_type],
-                       0xffffffff)]).add_vpp_config()
+            is_outbound=1,
+        ).add_vpp_config()
+        VppIpRoute(
+            self,
+            self.p_sync.remote_tun_if_host,
+            self.p_sync.addr_len,
+            [VppRoutePath(self.tun_if.remote_addr[self.p_sync.addr_type], 0xFFFFFFFF)],
+        ).add_vpp_config()
         config_tun_params(self.p_sync, self.encryption_type, self.tun_if)
 
         self.p_async = IPsecIPv4Params()
 
         config_tun_params(self.p_sync, self.encryption_type, self.tun_if)
 
         self.p_async = IPsecIPv4Params()
 
-        self.p_async.crypt_algo_vpp_id = (VppEnum.vl_api_ipsec_crypto_alg_t.
-                                          IPSEC_API_CRYPTO_ALG_AES_GCM_256)
-        self.p_async.auth_algo_vpp_id = (VppEnum.vl_api_ipsec_integ_alg_t.
-                                         IPSEC_API_INTEG_ALG_NONE)
-        self.p_async.crypt_algo = 'AES-GCM'  # scapy name
-        self.p_async.crypt_key = b'JPjyOWBeVEQiMe7hJPjyOWBeVEQiMe7h'
-        self.p_async.auth_algo = 'NULL'
-
-        self.p_async.scapy_tun_sa_id += 0xe0000
-        self.p_async.scapy_tun_spi += 0xe0000
-        self.p_async.vpp_tun_sa_id += 0xe0000
-        self.p_async.vpp_tun_spi += 0xe0000
+        self.p_async.crypt_algo_vpp_id = (
+            VppEnum.vl_api_ipsec_crypto_alg_t.IPSEC_API_CRYPTO_ALG_AES_GCM_256
+        )
+        self.p_async.auth_algo_vpp_id = (
+            VppEnum.vl_api_ipsec_integ_alg_t.IPSEC_API_INTEG_ALG_NONE
+        )
+        self.p_async.crypt_algo = "AES-GCM"  # scapy name
+        self.p_async.crypt_key = b"JPjyOWBeVEQiMe7hJPjyOWBeVEQiMe7h"
+        self.p_async.auth_algo = "NULL"
+
+        self.p_async.scapy_tun_sa_id += 0xE0000
+        self.p_async.scapy_tun_spi += 0xE0000
+        self.p_async.vpp_tun_sa_id += 0xE0000
+        self.p_async.vpp_tun_spi += 0xE0000
         self.p_async.remote_tun_if_host = "2.2.2.3"
 
         iflags = VppEnum.vl_api_ipsec_sad_flags_t
         self.p_async.remote_tun_if_host = "2.2.2.3"
 
         iflags = VppEnum.vl_api_ipsec_sad_flags_t
-        self.p_async.flags = (iflags.IPSEC_API_SAD_FLAG_USE_ESN |
-                              iflags.IPSEC_API_SAD_FLAG_USE_ANTI_REPLAY |
-                              iflags.IPSEC_API_SAD_FLAG_ASYNC)
+        self.p_async.flags = (
+            iflags.IPSEC_API_SAD_FLAG_USE_ESN
+            | iflags.IPSEC_API_SAD_FLAG_USE_ANTI_REPLAY
+            | iflags.IPSEC_API_SAD_FLAG_ASYNC
+        )
 
         self.p_async.sa = VppIpsecSA(
             self,
 
         self.p_async.sa = VppIpsecSA(
             self,
@@ -561,7 +697,8 @@ class TestIpsecEspAsync(TemplateIpsecEsp):
             self.vpp_esp_protocol,
             self.tun_if.local_addr[self.p_async.addr_type],
             self.tun_if.remote_addr[self.p_async.addr_type],
             self.vpp_esp_protocol,
             self.tun_if.local_addr[self.p_async.addr_type],
             self.tun_if.remote_addr[self.p_async.addr_type],
-            flags=self.p_async.flags).add_vpp_config()
+            flags=self.p_async.flags,
+        ).add_vpp_config()
         self.p_async.spd = VppIpsecSpdEntry(
             self,
             self.tun_spd,
         self.p_async.spd = VppIpsecSpdEntry(
             self,
             self.tun_spd,
@@ -573,30 +710,35 @@ class TestIpsecEspAsync(TemplateIpsecEsp):
             0,
             priority=2,
             policy=e.IPSEC_API_SPD_ACTION_PROTECT,
             0,
             priority=2,
             policy=e.IPSEC_API_SPD_ACTION_PROTECT,
-            is_outbound=1).add_vpp_config()
-        VppIpRoute(self,
-                   self.p_async.remote_tun_if_host,
-                   self.p_async.addr_len,
-                   [VppRoutePath(
-                       self.tun_if.remote_addr[self.p_async.addr_type],
-                       0xffffffff)]).add_vpp_config()
+            is_outbound=1,
+        ).add_vpp_config()
+        VppIpRoute(
+            self,
+            self.p_async.remote_tun_if_host,
+            self.p_async.addr_len,
+            [VppRoutePath(self.tun_if.remote_addr[self.p_async.addr_type], 0xFFFFFFFF)],
+        ).add_vpp_config()
         config_tun_params(self.p_async, self.encryption_type, self.tun_if)
 
     def test_dual_stream(self):
         config_tun_params(self.p_async, self.encryption_type, self.tun_if)
 
     def test_dual_stream(self):
-        """ Alternating SAs """
+        """Alternating SAs"""
         p = self.params[self.p_sync.addr_type]
         self.vapi.ipsec_set_async_mode(async_enable=True)
 
         p = self.params[self.p_sync.addr_type]
         self.vapi.ipsec_set_async_mode(async_enable=True)
 
-        pkts = [(Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac) /
-                 IP(src=self.pg1.remote_ip4,
-                    dst=self.p_sync.remote_tun_if_host) /
-                 UDP(sport=4444, dport=4444) /
-                 Raw(b'0x0' * 200)),
-                (Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac) /
-                 IP(src=self.pg1.remote_ip4,
-                    dst=p.remote_tun_if_host) /
-                 UDP(sport=4444, dport=4444) /
-                 Raw(b'0x0' * 200))]
+        pkts = [
+            (
+                Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
+                / IP(src=self.pg1.remote_ip4, dst=self.p_sync.remote_tun_if_host)
+                / UDP(sport=4444, dport=4444)
+                / Raw(b"0x0" * 200)
+            ),
+            (
+                Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
+                / IP(src=self.pg1.remote_ip4, dst=p.remote_tun_if_host)
+                / UDP(sport=4444, dport=4444)
+                / Raw(b"0x0" * 200)
+            ),
+        ]
         pkts *= 1023
 
         rxs = self.send_and_expect(self.pg1, pkts, self.pg0)
         pkts *= 1023
 
         rxs = self.send_and_expect(self.pg1, pkts, self.pg0)
@@ -619,15 +761,18 @@ class TestIpsecEspAsync(TemplateIpsecEsp):
         self.vapi.ipsec_set_async_mode(async_enable=False)
 
     def test_sync_async_noop_stream(self):
         self.vapi.ipsec_set_async_mode(async_enable=False)
 
     def test_sync_async_noop_stream(self):
-        """ Alternating SAs sync/async/noop """
+        """Alternating SAs sync/async/noop"""
         p = self.params[self.p_sync.addr_type]
 
         # first pin the default/noop SA to worker 0
         p = self.params[self.p_sync.addr_type]
 
         # first pin the default/noop SA to worker 0
-        pkts = [(Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac) /
-                 IP(src=self.pg1.remote_ip4,
-                    dst=p.remote_tun_if_host) /
-                 UDP(sport=4444, dport=4444) /
-                 Raw(b'0x0' * 200))]
+        pkts = [
+            (
+                Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
+                / IP(src=self.pg1.remote_ip4, dst=p.remote_tun_if_host)
+                / UDP(sport=4444, dport=4444)
+                / Raw(b"0x0" * 200)
+            )
+        ]
         rxs = self.send_and_expect(self.pg1, pkts, self.pg0, worker=0)
 
         self.logger.info(self.vapi.cli("sh ipsec sa"))
         rxs = self.send_and_expect(self.pg1, pkts, self.pg0, worker=0)
 
         self.logger.info(self.vapi.cli("sh ipsec sa"))
@@ -635,21 +780,26 @@ class TestIpsecEspAsync(TemplateIpsecEsp):
 
         # then use all the other SAs on worker 1.
         # some will handoff, other take the sync and async paths
 
         # then use all the other SAs on worker 1.
         # some will handoff, other take the sync and async paths
-        pkts = [(Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac) /
-                 IP(src=self.pg1.remote_ip4,
-                    dst=self.p_sync.remote_tun_if_host) /
-                 UDP(sport=4444, dport=4444) /
-                 Raw(b'0x0' * 200)),
-                (Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac) /
-                 IP(src=self.pg1.remote_ip4,
-                    dst=p.remote_tun_if_host) /
-                 UDP(sport=4444, dport=4444) /
-                 Raw(b'0x0' * 200)),
-                (Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac) /
-                 IP(src=self.pg1.remote_ip4,
-                    dst=self.p_async.remote_tun_if_host) /
-                 UDP(sport=4444, dport=4444) /
-                 Raw(b'0x0' * 200))]
+        pkts = [
+            (
+                Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
+                / IP(src=self.pg1.remote_ip4, dst=self.p_sync.remote_tun_if_host)
+                / UDP(sport=4444, dport=4444)
+                / Raw(b"0x0" * 200)
+            ),
+            (
+                Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
+                / IP(src=self.pg1.remote_ip4, dst=p.remote_tun_if_host)
+                / UDP(sport=4444, dport=4444)
+                / Raw(b"0x0" * 200)
+            ),
+            (
+                Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
+                / IP(src=self.pg1.remote_ip4, dst=self.p_async.remote_tun_if_host)
+                / UDP(sport=4444, dport=4444)
+                / Raw(b"0x0" * 200)
+            ),
+        ]
         pkts *= 1023
 
         rxs = self.send_and_expect(self.pg1, pkts, self.pg0, worker=1)
         pkts *= 1023
 
         rxs = self.send_and_expect(self.pg1, pkts, self.pg0, worker=1)
@@ -678,10 +828,11 @@ class TestIpsecEspAsync(TemplateIpsecEsp):
         self.assertTrue("DISABLED" in self.vapi.cli("sh crypto async status"))
 
 
         self.assertTrue("DISABLED" in self.vapi.cli("sh crypto async status"))
 
 
-class TestIpsecEspHandoff(TemplateIpsecEsp,
-                          IpsecTun6HandoffTests,
-                          IpsecTun4HandoffTests):
-    """ Ipsec ESP - handoff tests """
+class TestIpsecEspHandoff(
+    TemplateIpsecEsp, IpsecTun6HandoffTests, IpsecTun4HandoffTests
+):
+    """Ipsec ESP - handoff tests"""
+
     pass
 
 
     pass
 
 
@@ -706,33 +857,33 @@ class TemplateIpsecEspUdp(ConfigIpsecESP):
         self.logger.info(self.vapi.ppcli("show int addr"))
 
         p = self.ipv4_params
         self.logger.info(self.vapi.ppcli("show int addr"))
 
         p = self.ipv4_params
-        p.flags = (VppEnum.vl_api_ipsec_sad_flags_t.
-                   IPSEC_API_SAD_FLAG_UDP_ENCAP |
-                   VppEnum.vl_api_ipsec_sad_flags_t.
-                   IPSEC_API_SAD_FLAG_USE_ANTI_REPLAY)
+        p.flags = (
+            VppEnum.vl_api_ipsec_sad_flags_t.IPSEC_API_SAD_FLAG_UDP_ENCAP
+            | VppEnum.vl_api_ipsec_sad_flags_t.IPSEC_API_SAD_FLAG_USE_ANTI_REPLAY
+        )
         p.nat_header = UDP(sport=5454, dport=4500)
 
         self.tra_spd = VppIpsecSpd(self, self.tra_spd_id)
         self.tra_spd.add_vpp_config()
         p.nat_header = UDP(sport=5454, dport=4500)
 
         self.tra_spd = VppIpsecSpd(self, self.tra_spd_id)
         self.tra_spd.add_vpp_config()
-        VppIpsecSpdItfBinding(self, self.tra_spd,
-                              self.tra_if).add_vpp_config()
+        VppIpsecSpdItfBinding(self, self.tra_spd, self.tra_if).add_vpp_config()
 
         self.config_esp_tra(p)
         config_tra_params(p, self.encryption_type)
 
         self.tun_spd = VppIpsecSpd(self, self.tun_spd_id)
         self.tun_spd.add_vpp_config()
 
         self.config_esp_tra(p)
         config_tra_params(p, self.encryption_type)
 
         self.tun_spd = VppIpsecSpd(self, self.tun_spd_id)
         self.tun_spd.add_vpp_config()
-        VppIpsecSpdItfBinding(self, self.tun_spd,
-                              self.tun_if).add_vpp_config()
+        VppIpsecSpdItfBinding(self, self.tun_spd, self.tun_if).add_vpp_config()
 
         self.config_esp_tun(p)
         self.logger.info(self.vapi.ppcli("show ipsec all"))
 
         d = DpoProto.DPO_PROTO_IP4
 
         self.config_esp_tun(p)
         self.logger.info(self.vapi.ppcli("show ipsec all"))
 
         d = DpoProto.DPO_PROTO_IP4
-        VppIpRoute(self,  p.remote_tun_if_host, p.addr_len,
-                   [VppRoutePath(self.tun_if.remote_addr[p.addr_type],
-                                 0xffffffff,
-                                 proto=d)]).add_vpp_config()
+        VppIpRoute(
+            self,
+            p.remote_tun_if_host,
+            p.addr_len,
+            [VppRoutePath(self.tun_if.remote_addr[p.addr_type], 0xFFFFFFFF, proto=d)],
+        ).add_vpp_config()
 
     def tearDown(self):
         super(TemplateIpsecEspUdp, self).tearDown()
 
     def tearDown(self):
         super(TemplateIpsecEspUdp, self).tearDown()
@@ -742,11 +893,12 @@ class TemplateIpsecEspUdp(ConfigIpsecESP):
 
 
 class TestIpsecEspUdp(TemplateIpsecEspUdp, IpsecTra4Tests):
 
 
 class TestIpsecEspUdp(TemplateIpsecEspUdp, IpsecTra4Tests):
-    """ Ipsec NAT-T ESP UDP tests """
+    """Ipsec NAT-T ESP UDP tests"""
+
     pass
 
 
     pass
 
 
-class MyParameters():
+class MyParameters:
     def __init__(self):
         saf = VppEnum.vl_api_ipsec_sad_flags_t
         flag_esn = saf.IPSEC_API_SAD_FLAG_USE_ESN
     def __init__(self):
         saf = VppEnum.vl_api_ipsec_sad_flags_t
         flag_esn = saf.IPSEC_API_SAD_FLAG_USE_ESN
@@ -754,111 +906,143 @@ class MyParameters():
         self.flags = [0, flag_esn, flag_ar]
         # foreach crypto algorithm
         self.algos = {
         self.flags = [0, flag_esn, flag_ar]
         # foreach crypto algorithm
         self.algos = {
-            'AES-GCM-128/NONE': {
-                  'vpp-crypto': (VppEnum.vl_api_ipsec_crypto_alg_t.
-                                 IPSEC_API_CRYPTO_ALG_AES_GCM_128),
-                  'vpp-integ': (VppEnum.vl_api_ipsec_integ_alg_t.
-                                IPSEC_API_INTEG_ALG_NONE),
-                  'scapy-crypto': "AES-GCM",
-                  'scapy-integ': "NULL",
-                  'key': b"JPjyOWBeVEQiMe7h",
-                  'salt': 0},
-            'AES-GCM-192/NONE': {
-                  'vpp-crypto': (VppEnum.vl_api_ipsec_crypto_alg_t.
-                                 IPSEC_API_CRYPTO_ALG_AES_GCM_192),
-                  'vpp-integ': (VppEnum.vl_api_ipsec_integ_alg_t.
-                                IPSEC_API_INTEG_ALG_NONE),
-                  'scapy-crypto': "AES-GCM",
-                  'scapy-integ': "NULL",
-                  'key': b"JPjyOWBeVEQiMe7h01234567",
-                  'salt': 1010},
-            'AES-GCM-256/NONE': {
-                  'vpp-crypto': (VppEnum.vl_api_ipsec_crypto_alg_t.
-                                 IPSEC_API_CRYPTO_ALG_AES_GCM_256),
-                  'vpp-integ': (VppEnum.vl_api_ipsec_integ_alg_t.
-                                IPSEC_API_INTEG_ALG_NONE),
-                  'scapy-crypto': "AES-GCM",
-                  'scapy-integ': "NULL",
-                  'key': b"JPjyOWBeVEQiMe7h0123456787654321",
-                  'salt': 2020},
-            'AES-CBC-128/MD5-96': {
-                  'vpp-crypto': (VppEnum.vl_api_ipsec_crypto_alg_t.
-                                 IPSEC_API_CRYPTO_ALG_AES_CBC_128),
-                  'vpp-integ': (VppEnum.vl_api_ipsec_integ_alg_t.
-                                IPSEC_API_INTEG_ALG_MD5_96),
-                  'scapy-crypto': "AES-CBC",
-                  'scapy-integ': "HMAC-MD5-96",
-                  'salt': 0,
-                  'key': b"JPjyOWBeVEQiMe7h"},
-            'AES-CBC-192/SHA1-96': {
-                  'vpp-crypto': (VppEnum.vl_api_ipsec_crypto_alg_t.
-                                 IPSEC_API_CRYPTO_ALG_AES_CBC_192),
-                  'vpp-integ': (VppEnum.vl_api_ipsec_integ_alg_t.
-                                IPSEC_API_INTEG_ALG_SHA1_96),
-                  'scapy-crypto': "AES-CBC",
-                  'scapy-integ': "HMAC-SHA1-96",
-                  'salt': 0,
-                  'key': b"JPjyOWBeVEQiMe7hJPjyOWBe"},
-            'AES-CBC-256/SHA1-96': {
-                  'vpp-crypto': (VppEnum.vl_api_ipsec_crypto_alg_t.
-                                 IPSEC_API_CRYPTO_ALG_AES_CBC_256),
-                  'vpp-integ': (VppEnum.vl_api_ipsec_integ_alg_t.
-                                IPSEC_API_INTEG_ALG_SHA1_96),
-                  'scapy-crypto': "AES-CBC",
-                  'scapy-integ': "HMAC-SHA1-96",
-                  'salt': 0,
-                  'key': b"JPjyOWBeVEQiMe7hJPjyOWBeVEQiMe7h"},
-            '3DES-CBC/SHA1-96': {
-                  'vpp-crypto': (VppEnum.vl_api_ipsec_crypto_alg_t.
-                                 IPSEC_API_CRYPTO_ALG_3DES_CBC),
-                  'vpp-integ': (VppEnum.vl_api_ipsec_integ_alg_t.
-                                IPSEC_API_INTEG_ALG_SHA1_96),
-                  'scapy-crypto': "3DES",
-                  'scapy-integ': "HMAC-SHA1-96",
-                  'salt': 0,
-                  'key': b"JPjyOWBeVEQiMe7h00112233"},
-            'NONE/SHA1-96': {
-                  'vpp-crypto': (VppEnum.vl_api_ipsec_crypto_alg_t.
-                                 IPSEC_API_CRYPTO_ALG_NONE),
-                  'vpp-integ': (VppEnum.vl_api_ipsec_integ_alg_t.
-                                IPSEC_API_INTEG_ALG_SHA1_96),
-                  'scapy-crypto': "NULL",
-                  'scapy-integ': "HMAC-SHA1-96",
-                  'salt': 0,
-                  'key': b"JPjyOWBeVEQiMe7h00112233"},
-            'AES-CTR-128/SHA1-96': {
-                  'vpp-crypto': (VppEnum.vl_api_ipsec_crypto_alg_t.
-                                 IPSEC_API_CRYPTO_ALG_AES_CTR_128),
-                  'vpp-integ': (VppEnum.vl_api_ipsec_integ_alg_t.
-                                IPSEC_API_INTEG_ALG_SHA1_96),
-                  'scapy-crypto': "AES-CTR",
-                  'scapy-integ': "HMAC-SHA1-96",
-                  'salt': 0,
-                  'key': b"JPjyOWBeVEQiMe7h"},
-            'AES-CTR-192/SHA1-96': {
-                  'vpp-crypto': (VppEnum.vl_api_ipsec_crypto_alg_t.
-                                 IPSEC_API_CRYPTO_ALG_AES_CTR_192),
-                  'vpp-integ': (VppEnum.vl_api_ipsec_integ_alg_t.
-                                IPSEC_API_INTEG_ALG_SHA1_96),
-                  'scapy-crypto': "AES-CTR",
-                  'scapy-integ': "HMAC-SHA1-96",
-                  'salt': 1010,
-                  'key': b"JPjyOWBeVEQiMe7hJPjyOWBe"},
-            'AES-CTR-256/SHA1-96': {
-                  'vpp-crypto': (VppEnum.vl_api_ipsec_crypto_alg_t.
-                                 IPSEC_API_CRYPTO_ALG_AES_CTR_256),
-                  'vpp-integ': (VppEnum.vl_api_ipsec_integ_alg_t.
-                                IPSEC_API_INTEG_ALG_SHA1_96),
-                  'scapy-crypto': "AES-CTR",
-                  'scapy-integ': "HMAC-SHA1-96",
-                  'salt': 2020,
-                  'key': b"JPjyOWBeVEQiMe7hJPjyOWBeVEQiMe7h"}}
-
-
-class RunTestIpsecEspAll(ConfigIpsecESP,
-                         IpsecTra4, IpsecTra6,
-                         IpsecTun4, IpsecTun6):
-    """ Ipsec ESP all Algos """
+            "AES-GCM-128/NONE": {
+                "vpp-crypto": (
+                    VppEnum.vl_api_ipsec_crypto_alg_t.IPSEC_API_CRYPTO_ALG_AES_GCM_128
+                ),
+                "vpp-integ": (
+                    VppEnum.vl_api_ipsec_integ_alg_t.IPSEC_API_INTEG_ALG_NONE
+                ),
+                "scapy-crypto": "AES-GCM",
+                "scapy-integ": "NULL",
+                "key": b"JPjyOWBeVEQiMe7h",
+                "salt": 0,
+            },
+            "AES-GCM-192/NONE": {
+                "vpp-crypto": (
+                    VppEnum.vl_api_ipsec_crypto_alg_t.IPSEC_API_CRYPTO_ALG_AES_GCM_192
+                ),
+                "vpp-integ": (
+                    VppEnum.vl_api_ipsec_integ_alg_t.IPSEC_API_INTEG_ALG_NONE
+                ),
+                "scapy-crypto": "AES-GCM",
+                "scapy-integ": "NULL",
+                "key": b"JPjyOWBeVEQiMe7h01234567",
+                "salt": 1010,
+            },
+            "AES-GCM-256/NONE": {
+                "vpp-crypto": (
+                    VppEnum.vl_api_ipsec_crypto_alg_t.IPSEC_API_CRYPTO_ALG_AES_GCM_256
+                ),
+                "vpp-integ": (
+                    VppEnum.vl_api_ipsec_integ_alg_t.IPSEC_API_INTEG_ALG_NONE
+                ),
+                "scapy-crypto": "AES-GCM",
+                "scapy-integ": "NULL",
+                "key": b"JPjyOWBeVEQiMe7h0123456787654321",
+                "salt": 2020,
+            },
+            "AES-CBC-128/MD5-96": {
+                "vpp-crypto": (
+                    VppEnum.vl_api_ipsec_crypto_alg_t.IPSEC_API_CRYPTO_ALG_AES_CBC_128
+                ),
+                "vpp-integ": (
+                    VppEnum.vl_api_ipsec_integ_alg_t.IPSEC_API_INTEG_ALG_MD5_96
+                ),
+                "scapy-crypto": "AES-CBC",
+                "scapy-integ": "HMAC-MD5-96",
+                "salt": 0,
+                "key": b"JPjyOWBeVEQiMe7h",
+            },
+            "AES-CBC-192/SHA1-96": {
+                "vpp-crypto": (
+                    VppEnum.vl_api_ipsec_crypto_alg_t.IPSEC_API_CRYPTO_ALG_AES_CBC_192
+                ),
+                "vpp-integ": (
+                    VppEnum.vl_api_ipsec_integ_alg_t.IPSEC_API_INTEG_ALG_SHA1_96
+                ),
+                "scapy-crypto": "AES-CBC",
+                "scapy-integ": "HMAC-SHA1-96",
+                "salt": 0,
+                "key": b"JPjyOWBeVEQiMe7hJPjyOWBe",
+            },
+            "AES-CBC-256/SHA1-96": {
+                "vpp-crypto": (
+                    VppEnum.vl_api_ipsec_crypto_alg_t.IPSEC_API_CRYPTO_ALG_AES_CBC_256
+                ),
+                "vpp-integ": (
+                    VppEnum.vl_api_ipsec_integ_alg_t.IPSEC_API_INTEG_ALG_SHA1_96
+                ),
+                "scapy-crypto": "AES-CBC",
+                "scapy-integ": "HMAC-SHA1-96",
+                "salt": 0,
+                "key": b"JPjyOWBeVEQiMe7hJPjyOWBeVEQiMe7h",
+            },
+            "3DES-CBC/SHA1-96": {
+                "vpp-crypto": (
+                    VppEnum.vl_api_ipsec_crypto_alg_t.IPSEC_API_CRYPTO_ALG_3DES_CBC
+                ),
+                "vpp-integ": (
+                    VppEnum.vl_api_ipsec_integ_alg_t.IPSEC_API_INTEG_ALG_SHA1_96
+                ),
+                "scapy-crypto": "3DES",
+                "scapy-integ": "HMAC-SHA1-96",
+                "salt": 0,
+                "key": b"JPjyOWBeVEQiMe7h00112233",
+            },
+            "NONE/SHA1-96": {
+                "vpp-crypto": (
+                    VppEnum.vl_api_ipsec_crypto_alg_t.IPSEC_API_CRYPTO_ALG_NONE
+                ),
+                "vpp-integ": (
+                    VppEnum.vl_api_ipsec_integ_alg_t.IPSEC_API_INTEG_ALG_SHA1_96
+                ),
+                "scapy-crypto": "NULL",
+                "scapy-integ": "HMAC-SHA1-96",
+                "salt": 0,
+                "key": b"JPjyOWBeVEQiMe7h00112233",
+            },
+            "AES-CTR-128/SHA1-96": {
+                "vpp-crypto": (
+                    VppEnum.vl_api_ipsec_crypto_alg_t.IPSEC_API_CRYPTO_ALG_AES_CTR_128
+                ),
+                "vpp-integ": (
+                    VppEnum.vl_api_ipsec_integ_alg_t.IPSEC_API_INTEG_ALG_SHA1_96
+                ),
+                "scapy-crypto": "AES-CTR",
+                "scapy-integ": "HMAC-SHA1-96",
+                "salt": 0,
+                "key": b"JPjyOWBeVEQiMe7h",
+            },
+            "AES-CTR-192/SHA1-96": {
+                "vpp-crypto": (
+                    VppEnum.vl_api_ipsec_crypto_alg_t.IPSEC_API_CRYPTO_ALG_AES_CTR_192
+                ),
+                "vpp-integ": (
+                    VppEnum.vl_api_ipsec_integ_alg_t.IPSEC_API_INTEG_ALG_SHA1_96
+                ),
+                "scapy-crypto": "AES-CTR",
+                "scapy-integ": "HMAC-SHA1-96",
+                "salt": 1010,
+                "key": b"JPjyOWBeVEQiMe7hJPjyOWBe",
+            },
+            "AES-CTR-256/SHA1-96": {
+                "vpp-crypto": (
+                    VppEnum.vl_api_ipsec_crypto_alg_t.IPSEC_API_CRYPTO_ALG_AES_CTR_256
+                ),
+                "vpp-integ": (
+                    VppEnum.vl_api_ipsec_integ_alg_t.IPSEC_API_INTEG_ALG_SHA1_96
+                ),
+                "scapy-crypto": "AES-CTR",
+                "scapy-integ": "HMAC-SHA1-96",
+                "salt": 2020,
+                "key": b"JPjyOWBeVEQiMe7hJPjyOWBeVEQiMe7h",
+            },
+        }
+
+
+class RunTestIpsecEspAll(ConfigIpsecESP, IpsecTra4, IpsecTra6, IpsecTun4, IpsecTun6):
+    """Ipsec ESP all Algos"""
 
     @classmethod
     def setUpConstants(cls):
 
     @classmethod
     def setUpConstants(cls):
@@ -875,9 +1059,9 @@ class RunTestIpsecEspAll(ConfigIpsecESP,
         params = MyParameters()
         self.engine = test_args[0]
         self.flag = params.flags[0]
         params = MyParameters()
         self.engine = test_args[0]
         self.flag = params.flags[0]
-        if test_args[1] == 'ESNon':
+        if test_args[1] == "ESNon":
             self.flag |= params.flags[1]
             self.flag |= params.flags[1]
-        if test_args[2] == 'ARon':
+        if test_args[2] == "ARon":
             self.flag |= params.flags[2]
 
         self.algo = params.algos[test_args[3]]
             self.flag |= params.flags[2]
 
         self.algo = params.algos[test_args[3]]
@@ -901,18 +1085,18 @@ class RunTestIpsecEspAll(ConfigIpsecESP,
         self.ipv4_params = IPsecIPv4Params()
         self.ipv6_params = IPsecIPv6Params()
 
         self.ipv4_params = IPsecIPv4Params()
         self.ipv6_params = IPsecIPv6Params()
 
-        self.params = {self.ipv4_params.addr_type:
-                       self.ipv4_params,
-                       self.ipv6_params.addr_type:
-                       self.ipv6_params}
+        self.params = {
+            self.ipv4_params.addr_type: self.ipv4_params,
+            self.ipv6_params.addr_type: self.ipv6_params,
+        }
 
         for _, p in self.params.items():
 
         for _, p in self.params.items():
-            p.auth_algo_vpp_id = algo['vpp-integ']
-            p.crypt_algo_vpp_id = algo['vpp-crypto']
-            p.crypt_algo = algo['scapy-crypto']
-            p.auth_algo = algo['scapy-integ']
-            p.crypt_key = algo['key']
-            p.salt = algo['salt']
+            p.auth_algo_vpp_id = algo["vpp-integ"]
+            p.crypt_algo_vpp_id = algo["vpp-crypto"]
+            p.crypt_algo = algo["scapy-crypto"]
+            p.auth_algo = algo["scapy-integ"]
+            p.crypt_key = algo["key"]
+            p.salt = algo["salt"]
             p.flags = flag
             p.outer_flow_label = 243224
             p.async_mode = self.async_mode
             p.flags = flag
             p.outer_flow_label = 243224
             p.async_mode = self.async_mode
@@ -931,8 +1115,7 @@ class RunTestIpsecEspAll(ConfigIpsecESP,
         #
         self.verify_tra_basic6(count=NUM_PKTS)
         self.verify_tra_basic4(count=NUM_PKTS)
         #
         self.verify_tra_basic6(count=NUM_PKTS)
         self.verify_tra_basic4(count=NUM_PKTS)
-        self.verify_tun_66(self.params[socket.AF_INET6],
-                           count=NUM_PKTS)
+        self.verify_tun_66(self.params[socket.AF_INET6], count=NUM_PKTS)
         #
         # Use an odd-byte payload size to check for correct padding.
         #
         #
         # Use an odd-byte payload size to check for correct padding.
         #
@@ -940,26 +1123,29 @@ class RunTestIpsecEspAll(ConfigIpsecESP,
         # to 56 for 8 byte alignment, and +13 to 64 for 64 byte alignment.
         # This should catch bugs where the code is incorrectly over-padding
         # for algorithms that don't require it
         # to 56 for 8 byte alignment, and +13 to 64 for 64 byte alignment.
         # This should catch bugs where the code is incorrectly over-padding
         # for algorithms that don't require it
-        psz = 49 - len(IP()/ICMP()) if payload_size is None else payload_size
-        self.verify_tun_44(self.params[socket.AF_INET],
-                           count=NUM_PKTS, payload_size=psz)
+        psz = 49 - len(IP() / ICMP()) if payload_size is None else payload_size
+        self.verify_tun_44(
+            self.params[socket.AF_INET], count=NUM_PKTS, payload_size=psz
+        )
 
         LARGE_PKT_SZ = [
             1970,  # results in 2 chained buffers entering decrypt node
 
         LARGE_PKT_SZ = [
             1970,  # results in 2 chained buffers entering decrypt node
-                   # but leaving as simple buffer due to ICV removal (tra4)
+            # but leaving as simple buffer due to ICV removal (tra4)
             2004,  # footer+ICV will be added to 2nd buffer (tun4)
             4010,  # ICV ends up splitted across 2 buffers in esp_decrypt
             2004,  # footer+ICV will be added to 2nd buffer (tun4)
             4010,  # ICV ends up splitted across 2 buffers in esp_decrypt
-                   # for transport4; transport6 takes normal path
+            # for transport4; transport6 takes normal path
             4020,  # same as above but tra4 and tra6 are switched
         ]
         if self.engine in engines_supporting_chain_bufs:
             for sz in LARGE_PKT_SZ:
                 self.verify_tra_basic4(count=NUM_PKTS, payload_size=sz)
                 self.verify_tra_basic6(count=NUM_PKTS, payload_size=sz)
             4020,  # same as above but tra4 and tra6 are switched
         ]
         if self.engine in engines_supporting_chain_bufs:
             for sz in LARGE_PKT_SZ:
                 self.verify_tra_basic4(count=NUM_PKTS, payload_size=sz)
                 self.verify_tra_basic6(count=NUM_PKTS, payload_size=sz)
-                self.verify_tun_66(self.params[socket.AF_INET6],
-                                   count=NUM_PKTS, payload_size=sz)
-                self.verify_tun_44(self.params[socket.AF_INET],
-                                   count=NUM_PKTS, payload_size=sz)
+                self.verify_tun_66(
+                    self.params[socket.AF_INET6], count=NUM_PKTS, payload_size=sz
+                )
+                self.verify_tun_44(
+                    self.params[socket.AF_INET], count=NUM_PKTS, payload_size=sz
+                )
 
         #
         # reconfigure the network and SA to run the
 
         #
         # reconfigure the network and SA to run the
@@ -990,6 +1176,7 @@ class RunTestIpsecEspAll(ConfigIpsecESP,
 
         self.unconfig_network()
 
 
         self.unconfig_network()
 
+
 #
 # To generate test classes, do:
 #   grep '# GEN' test_ipsec_esp.py | sed -e 's/# GEN //g' | bash
 #
 # To generate test classes, do:
 #   grep '# GEN' test_ipsec_esp.py | sed -e 's/# GEN //g' | bash
@@ -1026,6 +1213,7 @@ class RunTestIpsecEspAll(ConfigIpsecESP,
 
 class Test_native_ESNon_ARon_AES_GCM_128_NONE(RunTestIpsecEspAll):
     """native ESNon ARon AES-GCM-128/NONE IPSec test"""
 
 class Test_native_ESNon_ARon_AES_GCM_128_NONE(RunTestIpsecEspAll):
     """native ESNon ARon AES-GCM-128/NONE IPSec test"""
+
     def test_ipsec(self):
         """native ESNon ARon AES-GCM-128/NONE IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """native ESNon ARon AES-GCM-128/NONE IPSec test"""
         self.run_test()
@@ -1033,6 +1221,7 @@ class Test_native_ESNon_ARon_AES_GCM_128_NONE(RunTestIpsecEspAll):
 
 class Test_native_ESNon_ARon_AES_GCM_192_NONE(RunTestIpsecEspAll):
     """native ESNon ARon AES-GCM-192/NONE IPSec test"""
 
 class Test_native_ESNon_ARon_AES_GCM_192_NONE(RunTestIpsecEspAll):
     """native ESNon ARon AES-GCM-192/NONE IPSec test"""
+
     def test_ipsec(self):
         """native ESNon ARon AES-GCM-192/NONE IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """native ESNon ARon AES-GCM-192/NONE IPSec test"""
         self.run_test()
@@ -1040,6 +1229,7 @@ class Test_native_ESNon_ARon_AES_GCM_192_NONE(RunTestIpsecEspAll):
 
 class Test_native_ESNon_ARon_AES_GCM_256_NONE(RunTestIpsecEspAll):
     """native ESNon ARon AES-GCM-256/NONE IPSec test"""
 
 class Test_native_ESNon_ARon_AES_GCM_256_NONE(RunTestIpsecEspAll):
     """native ESNon ARon AES-GCM-256/NONE IPSec test"""
+
     def test_ipsec(self):
         """native ESNon ARon AES-GCM-256/NONE IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """native ESNon ARon AES-GCM-256/NONE IPSec test"""
         self.run_test()
@@ -1047,6 +1237,7 @@ class Test_native_ESNon_ARon_AES_GCM_256_NONE(RunTestIpsecEspAll):
 
 class Test_native_ESNon_ARon_AES_CBC_128_MD5_96(RunTestIpsecEspAll):
     """native ESNon ARon AES-CBC-128/MD5-96 IPSec test"""
 
 class Test_native_ESNon_ARon_AES_CBC_128_MD5_96(RunTestIpsecEspAll):
     """native ESNon ARon AES-CBC-128/MD5-96 IPSec test"""
+
     def test_ipsec(self):
         """native ESNon ARon AES-CBC-128/MD5-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """native ESNon ARon AES-CBC-128/MD5-96 IPSec test"""
         self.run_test()
@@ -1054,6 +1245,7 @@ class Test_native_ESNon_ARon_AES_CBC_128_MD5_96(RunTestIpsecEspAll):
 
 class Test_native_ESNon_ARon_AES_CBC_192_SHA1_96(RunTestIpsecEspAll):
     """native ESNon ARon AES-CBC-192/SHA1-96 IPSec test"""
 
 class Test_native_ESNon_ARon_AES_CBC_192_SHA1_96(RunTestIpsecEspAll):
     """native ESNon ARon AES-CBC-192/SHA1-96 IPSec test"""
+
     def test_ipsec(self):
         """native ESNon ARon AES-CBC-192/SHA1-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """native ESNon ARon AES-CBC-192/SHA1-96 IPSec test"""
         self.run_test()
@@ -1061,6 +1253,7 @@ class Test_native_ESNon_ARon_AES_CBC_192_SHA1_96(RunTestIpsecEspAll):
 
 class Test_native_ESNon_ARon_AES_CBC_256_SHA1_96(RunTestIpsecEspAll):
     """native ESNon ARon AES-CBC-256/SHA1-96 IPSec test"""
 
 class Test_native_ESNon_ARon_AES_CBC_256_SHA1_96(RunTestIpsecEspAll):
     """native ESNon ARon AES-CBC-256/SHA1-96 IPSec test"""
+
     def test_ipsec(self):
         """native ESNon ARon AES-CBC-256/SHA1-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """native ESNon ARon AES-CBC-256/SHA1-96 IPSec test"""
         self.run_test()
@@ -1068,6 +1261,7 @@ class Test_native_ESNon_ARon_AES_CBC_256_SHA1_96(RunTestIpsecEspAll):
 
 class Test_native_ESNon_ARon_3DES_CBC_SHA1_96(RunTestIpsecEspAll):
     """native ESNon ARon 3DES-CBC/SHA1-96 IPSec test"""
 
 class Test_native_ESNon_ARon_3DES_CBC_SHA1_96(RunTestIpsecEspAll):
     """native ESNon ARon 3DES-CBC/SHA1-96 IPSec test"""
+
     def test_ipsec(self):
         """native ESNon ARon 3DES-CBC/SHA1-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """native ESNon ARon 3DES-CBC/SHA1-96 IPSec test"""
         self.run_test()
@@ -1075,6 +1269,7 @@ class Test_native_ESNon_ARon_3DES_CBC_SHA1_96(RunTestIpsecEspAll):
 
 class Test_native_ESNon_ARon_NONE_SHA1_96(RunTestIpsecEspAll):
     """native ESNon ARon NONE/SHA1-96 IPSec test"""
 
 class Test_native_ESNon_ARon_NONE_SHA1_96(RunTestIpsecEspAll):
     """native ESNon ARon NONE/SHA1-96 IPSec test"""
+
     def test_ipsec(self):
         """native ESNon ARon NONE/SHA1-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """native ESNon ARon NONE/SHA1-96 IPSec test"""
         self.run_test()
@@ -1082,6 +1277,7 @@ class Test_native_ESNon_ARon_NONE_SHA1_96(RunTestIpsecEspAll):
 
 class Test_native_ESNon_ARon_AES_CTR_128_SHA1_96(RunTestIpsecEspAll):
     """native ESNon ARon AES-CTR-128/SHA1-96 IPSec test"""
 
 class Test_native_ESNon_ARon_AES_CTR_128_SHA1_96(RunTestIpsecEspAll):
     """native ESNon ARon AES-CTR-128/SHA1-96 IPSec test"""
+
     def test_ipsec(self):
         """native ESNon ARon AES-CTR-128/SHA1-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """native ESNon ARon AES-CTR-128/SHA1-96 IPSec test"""
         self.run_test()
@@ -1089,6 +1285,7 @@ class Test_native_ESNon_ARon_AES_CTR_128_SHA1_96(RunTestIpsecEspAll):
 
 class Test_native_ESNon_ARon_AES_CTR_192_SHA1_96(RunTestIpsecEspAll):
     """native ESNon ARon AES-CTR-192/SHA1-96 IPSec test"""
 
 class Test_native_ESNon_ARon_AES_CTR_192_SHA1_96(RunTestIpsecEspAll):
     """native ESNon ARon AES-CTR-192/SHA1-96 IPSec test"""
+
     def test_ipsec(self):
         """native ESNon ARon AES-CTR-192/SHA1-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """native ESNon ARon AES-CTR-192/SHA1-96 IPSec test"""
         self.run_test()
@@ -1096,6 +1293,7 @@ class Test_native_ESNon_ARon_AES_CTR_192_SHA1_96(RunTestIpsecEspAll):
 
 class Test_native_ESNon_ARon_AES_CTR_256_SHA1_96(RunTestIpsecEspAll):
     """native ESNon ARon AES-CTR-256/SHA1-96 IPSec test"""
 
 class Test_native_ESNon_ARon_AES_CTR_256_SHA1_96(RunTestIpsecEspAll):
     """native ESNon ARon AES-CTR-256/SHA1-96 IPSec test"""
+
     def test_ipsec(self):
         """native ESNon ARon AES-CTR-256/SHA1-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """native ESNon ARon AES-CTR-256/SHA1-96 IPSec test"""
         self.run_test()
@@ -1103,6 +1301,7 @@ class Test_native_ESNon_ARon_AES_CTR_256_SHA1_96(RunTestIpsecEspAll):
 
 class Test_native_ESNon_ARoff_AES_GCM_128_NONE(RunTestIpsecEspAll):
     """native ESNon ARoff AES-GCM-128/NONE IPSec test"""
 
 class Test_native_ESNon_ARoff_AES_GCM_128_NONE(RunTestIpsecEspAll):
     """native ESNon ARoff AES-GCM-128/NONE IPSec test"""
+
     def test_ipsec(self):
         """native ESNon ARoff AES-GCM-128/NONE IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """native ESNon ARoff AES-GCM-128/NONE IPSec test"""
         self.run_test()
@@ -1110,6 +1309,7 @@ class Test_native_ESNon_ARoff_AES_GCM_128_NONE(RunTestIpsecEspAll):
 
 class Test_native_ESNon_ARoff_AES_GCM_192_NONE(RunTestIpsecEspAll):
     """native ESNon ARoff AES-GCM-192/NONE IPSec test"""
 
 class Test_native_ESNon_ARoff_AES_GCM_192_NONE(RunTestIpsecEspAll):
     """native ESNon ARoff AES-GCM-192/NONE IPSec test"""
+
     def test_ipsec(self):
         """native ESNon ARoff AES-GCM-192/NONE IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """native ESNon ARoff AES-GCM-192/NONE IPSec test"""
         self.run_test()
@@ -1117,6 +1317,7 @@ class Test_native_ESNon_ARoff_AES_GCM_192_NONE(RunTestIpsecEspAll):
 
 class Test_native_ESNon_ARoff_AES_GCM_256_NONE(RunTestIpsecEspAll):
     """native ESNon ARoff AES-GCM-256/NONE IPSec test"""
 
 class Test_native_ESNon_ARoff_AES_GCM_256_NONE(RunTestIpsecEspAll):
     """native ESNon ARoff AES-GCM-256/NONE IPSec test"""
+
     def test_ipsec(self):
         """native ESNon ARoff AES-GCM-256/NONE IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """native ESNon ARoff AES-GCM-256/NONE IPSec test"""
         self.run_test()
@@ -1124,6 +1325,7 @@ class Test_native_ESNon_ARoff_AES_GCM_256_NONE(RunTestIpsecEspAll):
 
 class Test_native_ESNon_ARoff_AES_CBC_128_MD5_96(RunTestIpsecEspAll):
     """native ESNon ARoff AES-CBC-128/MD5-96 IPSec test"""
 
 class Test_native_ESNon_ARoff_AES_CBC_128_MD5_96(RunTestIpsecEspAll):
     """native ESNon ARoff AES-CBC-128/MD5-96 IPSec test"""
+
     def test_ipsec(self):
         """native ESNon ARoff AES-CBC-128/MD5-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """native ESNon ARoff AES-CBC-128/MD5-96 IPSec test"""
         self.run_test()
@@ -1131,6 +1333,7 @@ class Test_native_ESNon_ARoff_AES_CBC_128_MD5_96(RunTestIpsecEspAll):
 
 class Test_native_ESNon_ARoff_AES_CBC_192_SHA1_96(RunTestIpsecEspAll):
     """native ESNon ARoff AES-CBC-192/SHA1-96 IPSec test"""
 
 class Test_native_ESNon_ARoff_AES_CBC_192_SHA1_96(RunTestIpsecEspAll):
     """native ESNon ARoff AES-CBC-192/SHA1-96 IPSec test"""
+
     def test_ipsec(self):
         """native ESNon ARoff AES-CBC-192/SHA1-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """native ESNon ARoff AES-CBC-192/SHA1-96 IPSec test"""
         self.run_test()
@@ -1138,6 +1341,7 @@ class Test_native_ESNon_ARoff_AES_CBC_192_SHA1_96(RunTestIpsecEspAll):
 
 class Test_native_ESNon_ARoff_AES_CBC_256_SHA1_96(RunTestIpsecEspAll):
     """native ESNon ARoff AES-CBC-256/SHA1-96 IPSec test"""
 
 class Test_native_ESNon_ARoff_AES_CBC_256_SHA1_96(RunTestIpsecEspAll):
     """native ESNon ARoff AES-CBC-256/SHA1-96 IPSec test"""
+
     def test_ipsec(self):
         """native ESNon ARoff AES-CBC-256/SHA1-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """native ESNon ARoff AES-CBC-256/SHA1-96 IPSec test"""
         self.run_test()
@@ -1145,6 +1349,7 @@ class Test_native_ESNon_ARoff_AES_CBC_256_SHA1_96(RunTestIpsecEspAll):
 
 class Test_native_ESNon_ARoff_3DES_CBC_SHA1_96(RunTestIpsecEspAll):
     """native ESNon ARoff 3DES-CBC/SHA1-96 IPSec test"""
 
 class Test_native_ESNon_ARoff_3DES_CBC_SHA1_96(RunTestIpsecEspAll):
     """native ESNon ARoff 3DES-CBC/SHA1-96 IPSec test"""
+
     def test_ipsec(self):
         """native ESNon ARoff 3DES-CBC/SHA1-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """native ESNon ARoff 3DES-CBC/SHA1-96 IPSec test"""
         self.run_test()
@@ -1152,6 +1357,7 @@ class Test_native_ESNon_ARoff_3DES_CBC_SHA1_96(RunTestIpsecEspAll):
 
 class Test_native_ESNon_ARoff_NONE_SHA1_96(RunTestIpsecEspAll):
     """native ESNon ARoff NONE/SHA1-96 IPSec test"""
 
 class Test_native_ESNon_ARoff_NONE_SHA1_96(RunTestIpsecEspAll):
     """native ESNon ARoff NONE/SHA1-96 IPSec test"""
+
     def test_ipsec(self):
         """native ESNon ARoff NONE/SHA1-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """native ESNon ARoff NONE/SHA1-96 IPSec test"""
         self.run_test()
@@ -1159,6 +1365,7 @@ class Test_native_ESNon_ARoff_NONE_SHA1_96(RunTestIpsecEspAll):
 
 class Test_native_ESNon_ARoff_AES_CTR_128_SHA1_96(RunTestIpsecEspAll):
     """native ESNon ARoff AES-CTR-128/SHA1-96 IPSec test"""
 
 class Test_native_ESNon_ARoff_AES_CTR_128_SHA1_96(RunTestIpsecEspAll):
     """native ESNon ARoff AES-CTR-128/SHA1-96 IPSec test"""
+
     def test_ipsec(self):
         """native ESNon ARoff AES-CTR-128/SHA1-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """native ESNon ARoff AES-CTR-128/SHA1-96 IPSec test"""
         self.run_test()
@@ -1166,6 +1373,7 @@ class Test_native_ESNon_ARoff_AES_CTR_128_SHA1_96(RunTestIpsecEspAll):
 
 class Test_native_ESNon_ARoff_AES_CTR_192_SHA1_96(RunTestIpsecEspAll):
     """native ESNon ARoff AES-CTR-192/SHA1-96 IPSec test"""
 
 class Test_native_ESNon_ARoff_AES_CTR_192_SHA1_96(RunTestIpsecEspAll):
     """native ESNon ARoff AES-CTR-192/SHA1-96 IPSec test"""
+
     def test_ipsec(self):
         """native ESNon ARoff AES-CTR-192/SHA1-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """native ESNon ARoff AES-CTR-192/SHA1-96 IPSec test"""
         self.run_test()
@@ -1173,6 +1381,7 @@ class Test_native_ESNon_ARoff_AES_CTR_192_SHA1_96(RunTestIpsecEspAll):
 
 class Test_native_ESNon_ARoff_AES_CTR_256_SHA1_96(RunTestIpsecEspAll):
     """native ESNon ARoff AES-CTR-256/SHA1-96 IPSec test"""
 
 class Test_native_ESNon_ARoff_AES_CTR_256_SHA1_96(RunTestIpsecEspAll):
     """native ESNon ARoff AES-CTR-256/SHA1-96 IPSec test"""
+
     def test_ipsec(self):
         """native ESNon ARoff AES-CTR-256/SHA1-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """native ESNon ARoff AES-CTR-256/SHA1-96 IPSec test"""
         self.run_test()
@@ -1180,6 +1389,7 @@ class Test_native_ESNon_ARoff_AES_CTR_256_SHA1_96(RunTestIpsecEspAll):
 
 class Test_native_ESNoff_ARon_AES_GCM_128_NONE(RunTestIpsecEspAll):
     """native ESNoff ARon AES-GCM-128/NONE IPSec test"""
 
 class Test_native_ESNoff_ARon_AES_GCM_128_NONE(RunTestIpsecEspAll):
     """native ESNoff ARon AES-GCM-128/NONE IPSec test"""
+
     def test_ipsec(self):
         """native ESNoff ARon AES-GCM-128/NONE IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """native ESNoff ARon AES-GCM-128/NONE IPSec test"""
         self.run_test()
@@ -1187,6 +1397,7 @@ class Test_native_ESNoff_ARon_AES_GCM_128_NONE(RunTestIpsecEspAll):
 
 class Test_native_ESNoff_ARon_AES_GCM_192_NONE(RunTestIpsecEspAll):
     """native ESNoff ARon AES-GCM-192/NONE IPSec test"""
 
 class Test_native_ESNoff_ARon_AES_GCM_192_NONE(RunTestIpsecEspAll):
     """native ESNoff ARon AES-GCM-192/NONE IPSec test"""
+
     def test_ipsec(self):
         """native ESNoff ARon AES-GCM-192/NONE IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """native ESNoff ARon AES-GCM-192/NONE IPSec test"""
         self.run_test()
@@ -1194,6 +1405,7 @@ class Test_native_ESNoff_ARon_AES_GCM_192_NONE(RunTestIpsecEspAll):
 
 class Test_native_ESNoff_ARon_AES_GCM_256_NONE(RunTestIpsecEspAll):
     """native ESNoff ARon AES-GCM-256/NONE IPSec test"""
 
 class Test_native_ESNoff_ARon_AES_GCM_256_NONE(RunTestIpsecEspAll):
     """native ESNoff ARon AES-GCM-256/NONE IPSec test"""
+
     def test_ipsec(self):
         """native ESNoff ARon AES-GCM-256/NONE IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """native ESNoff ARon AES-GCM-256/NONE IPSec test"""
         self.run_test()
@@ -1201,6 +1413,7 @@ class Test_native_ESNoff_ARon_AES_GCM_256_NONE(RunTestIpsecEspAll):
 
 class Test_native_ESNoff_ARon_AES_CBC_128_MD5_96(RunTestIpsecEspAll):
     """native ESNoff ARon AES-CBC-128/MD5-96 IPSec test"""
 
 class Test_native_ESNoff_ARon_AES_CBC_128_MD5_96(RunTestIpsecEspAll):
     """native ESNoff ARon AES-CBC-128/MD5-96 IPSec test"""
+
     def test_ipsec(self):
         """native ESNoff ARon AES-CBC-128/MD5-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """native ESNoff ARon AES-CBC-128/MD5-96 IPSec test"""
         self.run_test()
@@ -1208,6 +1421,7 @@ class Test_native_ESNoff_ARon_AES_CBC_128_MD5_96(RunTestIpsecEspAll):
 
 class Test_native_ESNoff_ARon_AES_CBC_192_SHA1_96(RunTestIpsecEspAll):
     """native ESNoff ARon AES-CBC-192/SHA1-96 IPSec test"""
 
 class Test_native_ESNoff_ARon_AES_CBC_192_SHA1_96(RunTestIpsecEspAll):
     """native ESNoff ARon AES-CBC-192/SHA1-96 IPSec test"""
+
     def test_ipsec(self):
         """native ESNoff ARon AES-CBC-192/SHA1-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """native ESNoff ARon AES-CBC-192/SHA1-96 IPSec test"""
         self.run_test()
@@ -1215,6 +1429,7 @@ class Test_native_ESNoff_ARon_AES_CBC_192_SHA1_96(RunTestIpsecEspAll):
 
 class Test_native_ESNoff_ARon_AES_CBC_256_SHA1_96(RunTestIpsecEspAll):
     """native ESNoff ARon AES-CBC-256/SHA1-96 IPSec test"""
 
 class Test_native_ESNoff_ARon_AES_CBC_256_SHA1_96(RunTestIpsecEspAll):
     """native ESNoff ARon AES-CBC-256/SHA1-96 IPSec test"""
+
     def test_ipsec(self):
         """native ESNoff ARon AES-CBC-256/SHA1-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """native ESNoff ARon AES-CBC-256/SHA1-96 IPSec test"""
         self.run_test()
@@ -1222,6 +1437,7 @@ class Test_native_ESNoff_ARon_AES_CBC_256_SHA1_96(RunTestIpsecEspAll):
 
 class Test_native_ESNoff_ARon_3DES_CBC_SHA1_96(RunTestIpsecEspAll):
     """native ESNoff ARon 3DES-CBC/SHA1-96 IPSec test"""
 
 class Test_native_ESNoff_ARon_3DES_CBC_SHA1_96(RunTestIpsecEspAll):
     """native ESNoff ARon 3DES-CBC/SHA1-96 IPSec test"""
+
     def test_ipsec(self):
         """native ESNoff ARon 3DES-CBC/SHA1-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """native ESNoff ARon 3DES-CBC/SHA1-96 IPSec test"""
         self.run_test()
@@ -1229,6 +1445,7 @@ class Test_native_ESNoff_ARon_3DES_CBC_SHA1_96(RunTestIpsecEspAll):
 
 class Test_native_ESNoff_ARon_NONE_SHA1_96(RunTestIpsecEspAll):
     """native ESNoff ARon NONE/SHA1-96 IPSec test"""
 
 class Test_native_ESNoff_ARon_NONE_SHA1_96(RunTestIpsecEspAll):
     """native ESNoff ARon NONE/SHA1-96 IPSec test"""
+
     def test_ipsec(self):
         """native ESNoff ARon NONE/SHA1-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """native ESNoff ARon NONE/SHA1-96 IPSec test"""
         self.run_test()
@@ -1236,6 +1453,7 @@ class Test_native_ESNoff_ARon_NONE_SHA1_96(RunTestIpsecEspAll):
 
 class Test_native_ESNoff_ARon_AES_CTR_128_SHA1_96(RunTestIpsecEspAll):
     """native ESNoff ARon AES-CTR-128/SHA1-96 IPSec test"""
 
 class Test_native_ESNoff_ARon_AES_CTR_128_SHA1_96(RunTestIpsecEspAll):
     """native ESNoff ARon AES-CTR-128/SHA1-96 IPSec test"""
+
     def test_ipsec(self):
         """native ESNoff ARon AES-CTR-128/SHA1-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """native ESNoff ARon AES-CTR-128/SHA1-96 IPSec test"""
         self.run_test()
@@ -1243,6 +1461,7 @@ class Test_native_ESNoff_ARon_AES_CTR_128_SHA1_96(RunTestIpsecEspAll):
 
 class Test_native_ESNoff_ARon_AES_CTR_192_SHA1_96(RunTestIpsecEspAll):
     """native ESNoff ARon AES-CTR-192/SHA1-96 IPSec test"""
 
 class Test_native_ESNoff_ARon_AES_CTR_192_SHA1_96(RunTestIpsecEspAll):
     """native ESNoff ARon AES-CTR-192/SHA1-96 IPSec test"""
+
     def test_ipsec(self):
         """native ESNoff ARon AES-CTR-192/SHA1-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """native ESNoff ARon AES-CTR-192/SHA1-96 IPSec test"""
         self.run_test()
@@ -1250,6 +1469,7 @@ class Test_native_ESNoff_ARon_AES_CTR_192_SHA1_96(RunTestIpsecEspAll):
 
 class Test_native_ESNoff_ARon_AES_CTR_256_SHA1_96(RunTestIpsecEspAll):
     """native ESNoff ARon AES-CTR-256/SHA1-96 IPSec test"""
 
 class Test_native_ESNoff_ARon_AES_CTR_256_SHA1_96(RunTestIpsecEspAll):
     """native ESNoff ARon AES-CTR-256/SHA1-96 IPSec test"""
+
     def test_ipsec(self):
         """native ESNoff ARon AES-CTR-256/SHA1-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """native ESNoff ARon AES-CTR-256/SHA1-96 IPSec test"""
         self.run_test()
@@ -1257,6 +1477,7 @@ class Test_native_ESNoff_ARon_AES_CTR_256_SHA1_96(RunTestIpsecEspAll):
 
 class Test_native_ESNoff_ARoff_AES_GCM_128_NONE(RunTestIpsecEspAll):
     """native ESNoff ARoff AES-GCM-128/NONE IPSec test"""
 
 class Test_native_ESNoff_ARoff_AES_GCM_128_NONE(RunTestIpsecEspAll):
     """native ESNoff ARoff AES-GCM-128/NONE IPSec test"""
+
     def test_ipsec(self):
         """native ESNoff ARoff AES-GCM-128/NONE IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """native ESNoff ARoff AES-GCM-128/NONE IPSec test"""
         self.run_test()
@@ -1264,6 +1485,7 @@ class Test_native_ESNoff_ARoff_AES_GCM_128_NONE(RunTestIpsecEspAll):
 
 class Test_native_ESNoff_ARoff_AES_GCM_192_NONE(RunTestIpsecEspAll):
     """native ESNoff ARoff AES-GCM-192/NONE IPSec test"""
 
 class Test_native_ESNoff_ARoff_AES_GCM_192_NONE(RunTestIpsecEspAll):
     """native ESNoff ARoff AES-GCM-192/NONE IPSec test"""
+
     def test_ipsec(self):
         """native ESNoff ARoff AES-GCM-192/NONE IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """native ESNoff ARoff AES-GCM-192/NONE IPSec test"""
         self.run_test()
@@ -1271,6 +1493,7 @@ class Test_native_ESNoff_ARoff_AES_GCM_192_NONE(RunTestIpsecEspAll):
 
 class Test_native_ESNoff_ARoff_AES_GCM_256_NONE(RunTestIpsecEspAll):
     """native ESNoff ARoff AES-GCM-256/NONE IPSec test"""
 
 class Test_native_ESNoff_ARoff_AES_GCM_256_NONE(RunTestIpsecEspAll):
     """native ESNoff ARoff AES-GCM-256/NONE IPSec test"""
+
     def test_ipsec(self):
         """native ESNoff ARoff AES-GCM-256/NONE IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """native ESNoff ARoff AES-GCM-256/NONE IPSec test"""
         self.run_test()
@@ -1278,6 +1501,7 @@ class Test_native_ESNoff_ARoff_AES_GCM_256_NONE(RunTestIpsecEspAll):
 
 class Test_native_ESNoff_ARoff_AES_CBC_128_MD5_96(RunTestIpsecEspAll):
     """native ESNoff ARoff AES-CBC-128/MD5-96 IPSec test"""
 
 class Test_native_ESNoff_ARoff_AES_CBC_128_MD5_96(RunTestIpsecEspAll):
     """native ESNoff ARoff AES-CBC-128/MD5-96 IPSec test"""
+
     def test_ipsec(self):
         """native ESNoff ARoff AES-CBC-128/MD5-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """native ESNoff ARoff AES-CBC-128/MD5-96 IPSec test"""
         self.run_test()
@@ -1285,6 +1509,7 @@ class Test_native_ESNoff_ARoff_AES_CBC_128_MD5_96(RunTestIpsecEspAll):
 
 class Test_native_ESNoff_ARoff_AES_CBC_192_SHA1_96(RunTestIpsecEspAll):
     """native ESNoff ARoff AES-CBC-192/SHA1-96 IPSec test"""
 
 class Test_native_ESNoff_ARoff_AES_CBC_192_SHA1_96(RunTestIpsecEspAll):
     """native ESNoff ARoff AES-CBC-192/SHA1-96 IPSec test"""
+
     def test_ipsec(self):
         """native ESNoff ARoff AES-CBC-192/SHA1-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """native ESNoff ARoff AES-CBC-192/SHA1-96 IPSec test"""
         self.run_test()
@@ -1292,6 +1517,7 @@ class Test_native_ESNoff_ARoff_AES_CBC_192_SHA1_96(RunTestIpsecEspAll):
 
 class Test_native_ESNoff_ARoff_AES_CBC_256_SHA1_96(RunTestIpsecEspAll):
     """native ESNoff ARoff AES-CBC-256/SHA1-96 IPSec test"""
 
 class Test_native_ESNoff_ARoff_AES_CBC_256_SHA1_96(RunTestIpsecEspAll):
     """native ESNoff ARoff AES-CBC-256/SHA1-96 IPSec test"""
+
     def test_ipsec(self):
         """native ESNoff ARoff AES-CBC-256/SHA1-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """native ESNoff ARoff AES-CBC-256/SHA1-96 IPSec test"""
         self.run_test()
@@ -1299,6 +1525,7 @@ class Test_native_ESNoff_ARoff_AES_CBC_256_SHA1_96(RunTestIpsecEspAll):
 
 class Test_native_ESNoff_ARoff_3DES_CBC_SHA1_96(RunTestIpsecEspAll):
     """native ESNoff ARoff 3DES-CBC/SHA1-96 IPSec test"""
 
 class Test_native_ESNoff_ARoff_3DES_CBC_SHA1_96(RunTestIpsecEspAll):
     """native ESNoff ARoff 3DES-CBC/SHA1-96 IPSec test"""
+
     def test_ipsec(self):
         """native ESNoff ARoff 3DES-CBC/SHA1-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """native ESNoff ARoff 3DES-CBC/SHA1-96 IPSec test"""
         self.run_test()
@@ -1306,6 +1533,7 @@ class Test_native_ESNoff_ARoff_3DES_CBC_SHA1_96(RunTestIpsecEspAll):
 
 class Test_native_ESNoff_ARoff_NONE_SHA1_96(RunTestIpsecEspAll):
     """native ESNoff ARoff NONE/SHA1-96 IPSec test"""
 
 class Test_native_ESNoff_ARoff_NONE_SHA1_96(RunTestIpsecEspAll):
     """native ESNoff ARoff NONE/SHA1-96 IPSec test"""
+
     def test_ipsec(self):
         """native ESNoff ARoff NONE/SHA1-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """native ESNoff ARoff NONE/SHA1-96 IPSec test"""
         self.run_test()
@@ -1313,6 +1541,7 @@ class Test_native_ESNoff_ARoff_NONE_SHA1_96(RunTestIpsecEspAll):
 
 class Test_native_ESNoff_ARoff_AES_CTR_128_SHA1_96(RunTestIpsecEspAll):
     """native ESNoff ARoff AES-CTR-128/SHA1-96 IPSec test"""
 
 class Test_native_ESNoff_ARoff_AES_CTR_128_SHA1_96(RunTestIpsecEspAll):
     """native ESNoff ARoff AES-CTR-128/SHA1-96 IPSec test"""
+
     def test_ipsec(self):
         """native ESNoff ARoff AES-CTR-128/SHA1-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """native ESNoff ARoff AES-CTR-128/SHA1-96 IPSec test"""
         self.run_test()
@@ -1320,6 +1549,7 @@ class Test_native_ESNoff_ARoff_AES_CTR_128_SHA1_96(RunTestIpsecEspAll):
 
 class Test_native_ESNoff_ARoff_AES_CTR_192_SHA1_96(RunTestIpsecEspAll):
     """native ESNoff ARoff AES-CTR-192/SHA1-96 IPSec test"""
 
 class Test_native_ESNoff_ARoff_AES_CTR_192_SHA1_96(RunTestIpsecEspAll):
     """native ESNoff ARoff AES-CTR-192/SHA1-96 IPSec test"""
+
     def test_ipsec(self):
         """native ESNoff ARoff AES-CTR-192/SHA1-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """native ESNoff ARoff AES-CTR-192/SHA1-96 IPSec test"""
         self.run_test()
@@ -1327,6 +1557,7 @@ class Test_native_ESNoff_ARoff_AES_CTR_192_SHA1_96(RunTestIpsecEspAll):
 
 class Test_native_ESNoff_ARoff_AES_CTR_256_SHA1_96(RunTestIpsecEspAll):
     """native ESNoff ARoff AES-CTR-256/SHA1-96 IPSec test"""
 
 class Test_native_ESNoff_ARoff_AES_CTR_256_SHA1_96(RunTestIpsecEspAll):
     """native ESNoff ARoff AES-CTR-256/SHA1-96 IPSec test"""
+
     def test_ipsec(self):
         """native ESNoff ARoff AES-CTR-256/SHA1-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """native ESNoff ARoff AES-CTR-256/SHA1-96 IPSec test"""
         self.run_test()
@@ -1334,6 +1565,7 @@ class Test_native_ESNoff_ARoff_AES_CTR_256_SHA1_96(RunTestIpsecEspAll):
 
 class Test_ipsecmb_ESNon_ARon_AES_GCM_128_NONE(RunTestIpsecEspAll):
     """ipsecmb ESNon ARon AES-GCM-128/NONE IPSec test"""
 
 class Test_ipsecmb_ESNon_ARon_AES_GCM_128_NONE(RunTestIpsecEspAll):
     """ipsecmb ESNon ARon AES-GCM-128/NONE IPSec test"""
+
     def test_ipsec(self):
         """ipsecmb ESNon ARon AES-GCM-128/NONE IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """ipsecmb ESNon ARon AES-GCM-128/NONE IPSec test"""
         self.run_test()
@@ -1341,6 +1573,7 @@ class Test_ipsecmb_ESNon_ARon_AES_GCM_128_NONE(RunTestIpsecEspAll):
 
 class Test_ipsecmb_ESNon_ARon_AES_GCM_192_NONE(RunTestIpsecEspAll):
     """ipsecmb ESNon ARon AES-GCM-192/NONE IPSec test"""
 
 class Test_ipsecmb_ESNon_ARon_AES_GCM_192_NONE(RunTestIpsecEspAll):
     """ipsecmb ESNon ARon AES-GCM-192/NONE IPSec test"""
+
     def test_ipsec(self):
         """ipsecmb ESNon ARon AES-GCM-192/NONE IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """ipsecmb ESNon ARon AES-GCM-192/NONE IPSec test"""
         self.run_test()
@@ -1348,6 +1581,7 @@ class Test_ipsecmb_ESNon_ARon_AES_GCM_192_NONE(RunTestIpsecEspAll):
 
 class Test_ipsecmb_ESNon_ARon_AES_GCM_256_NONE(RunTestIpsecEspAll):
     """ipsecmb ESNon ARon AES-GCM-256/NONE IPSec test"""
 
 class Test_ipsecmb_ESNon_ARon_AES_GCM_256_NONE(RunTestIpsecEspAll):
     """ipsecmb ESNon ARon AES-GCM-256/NONE IPSec test"""
+
     def test_ipsec(self):
         """ipsecmb ESNon ARon AES-GCM-256/NONE IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """ipsecmb ESNon ARon AES-GCM-256/NONE IPSec test"""
         self.run_test()
@@ -1355,6 +1589,7 @@ class Test_ipsecmb_ESNon_ARon_AES_GCM_256_NONE(RunTestIpsecEspAll):
 
 class Test_ipsecmb_ESNon_ARon_AES_CBC_128_MD5_96(RunTestIpsecEspAll):
     """ipsecmb ESNon ARon AES-CBC-128/MD5-96 IPSec test"""
 
 class Test_ipsecmb_ESNon_ARon_AES_CBC_128_MD5_96(RunTestIpsecEspAll):
     """ipsecmb ESNon ARon AES-CBC-128/MD5-96 IPSec test"""
+
     def test_ipsec(self):
         """ipsecmb ESNon ARon AES-CBC-128/MD5-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """ipsecmb ESNon ARon AES-CBC-128/MD5-96 IPSec test"""
         self.run_test()
@@ -1362,6 +1597,7 @@ class Test_ipsecmb_ESNon_ARon_AES_CBC_128_MD5_96(RunTestIpsecEspAll):
 
 class Test_ipsecmb_ESNon_ARon_AES_CBC_192_SHA1_96(RunTestIpsecEspAll):
     """ipsecmb ESNon ARon AES-CBC-192/SHA1-96 IPSec test"""
 
 class Test_ipsecmb_ESNon_ARon_AES_CBC_192_SHA1_96(RunTestIpsecEspAll):
     """ipsecmb ESNon ARon AES-CBC-192/SHA1-96 IPSec test"""
+
     def test_ipsec(self):
         """ipsecmb ESNon ARon AES-CBC-192/SHA1-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """ipsecmb ESNon ARon AES-CBC-192/SHA1-96 IPSec test"""
         self.run_test()
@@ -1369,6 +1605,7 @@ class Test_ipsecmb_ESNon_ARon_AES_CBC_192_SHA1_96(RunTestIpsecEspAll):
 
 class Test_ipsecmb_ESNon_ARon_AES_CBC_256_SHA1_96(RunTestIpsecEspAll):
     """ipsecmb ESNon ARon AES-CBC-256/SHA1-96 IPSec test"""
 
 class Test_ipsecmb_ESNon_ARon_AES_CBC_256_SHA1_96(RunTestIpsecEspAll):
     """ipsecmb ESNon ARon AES-CBC-256/SHA1-96 IPSec test"""
+
     def test_ipsec(self):
         """ipsecmb ESNon ARon AES-CBC-256/SHA1-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """ipsecmb ESNon ARon AES-CBC-256/SHA1-96 IPSec test"""
         self.run_test()
@@ -1376,6 +1613,7 @@ class Test_ipsecmb_ESNon_ARon_AES_CBC_256_SHA1_96(RunTestIpsecEspAll):
 
 class Test_ipsecmb_ESNon_ARon_3DES_CBC_SHA1_96(RunTestIpsecEspAll):
     """ipsecmb ESNon ARon 3DES-CBC/SHA1-96 IPSec test"""
 
 class Test_ipsecmb_ESNon_ARon_3DES_CBC_SHA1_96(RunTestIpsecEspAll):
     """ipsecmb ESNon ARon 3DES-CBC/SHA1-96 IPSec test"""
+
     def test_ipsec(self):
         """ipsecmb ESNon ARon 3DES-CBC/SHA1-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """ipsecmb ESNon ARon 3DES-CBC/SHA1-96 IPSec test"""
         self.run_test()
@@ -1383,6 +1621,7 @@ class Test_ipsecmb_ESNon_ARon_3DES_CBC_SHA1_96(RunTestIpsecEspAll):
 
 class Test_ipsecmb_ESNon_ARon_NONE_SHA1_96(RunTestIpsecEspAll):
     """ipsecmb ESNon ARon NONE/SHA1-96 IPSec test"""
 
 class Test_ipsecmb_ESNon_ARon_NONE_SHA1_96(RunTestIpsecEspAll):
     """ipsecmb ESNon ARon NONE/SHA1-96 IPSec test"""
+
     def test_ipsec(self):
         """ipsecmb ESNon ARon NONE/SHA1-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """ipsecmb ESNon ARon NONE/SHA1-96 IPSec test"""
         self.run_test()
@@ -1390,6 +1629,7 @@ class Test_ipsecmb_ESNon_ARon_NONE_SHA1_96(RunTestIpsecEspAll):
 
 class Test_ipsecmb_ESNon_ARon_AES_CTR_128_SHA1_96(RunTestIpsecEspAll):
     """ipsecmb ESNon ARon AES-CTR-128/SHA1-96 IPSec test"""
 
 class Test_ipsecmb_ESNon_ARon_AES_CTR_128_SHA1_96(RunTestIpsecEspAll):
     """ipsecmb ESNon ARon AES-CTR-128/SHA1-96 IPSec test"""
+
     def test_ipsec(self):
         """ipsecmb ESNon ARon AES-CTR-128/SHA1-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """ipsecmb ESNon ARon AES-CTR-128/SHA1-96 IPSec test"""
         self.run_test()
@@ -1397,6 +1637,7 @@ class Test_ipsecmb_ESNon_ARon_AES_CTR_128_SHA1_96(RunTestIpsecEspAll):
 
 class Test_ipsecmb_ESNon_ARon_AES_CTR_192_SHA1_96(RunTestIpsecEspAll):
     """ipsecmb ESNon ARon AES-CTR-192/SHA1-96 IPSec test"""
 
 class Test_ipsecmb_ESNon_ARon_AES_CTR_192_SHA1_96(RunTestIpsecEspAll):
     """ipsecmb ESNon ARon AES-CTR-192/SHA1-96 IPSec test"""
+
     def test_ipsec(self):
         """ipsecmb ESNon ARon AES-CTR-192/SHA1-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """ipsecmb ESNon ARon AES-CTR-192/SHA1-96 IPSec test"""
         self.run_test()
@@ -1404,6 +1645,7 @@ class Test_ipsecmb_ESNon_ARon_AES_CTR_192_SHA1_96(RunTestIpsecEspAll):
 
 class Test_ipsecmb_ESNon_ARon_AES_CTR_256_SHA1_96(RunTestIpsecEspAll):
     """ipsecmb ESNon ARon AES-CTR-256/SHA1-96 IPSec test"""
 
 class Test_ipsecmb_ESNon_ARon_AES_CTR_256_SHA1_96(RunTestIpsecEspAll):
     """ipsecmb ESNon ARon AES-CTR-256/SHA1-96 IPSec test"""
+
     def test_ipsec(self):
         """ipsecmb ESNon ARon AES-CTR-256/SHA1-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """ipsecmb ESNon ARon AES-CTR-256/SHA1-96 IPSec test"""
         self.run_test()
@@ -1411,6 +1653,7 @@ class Test_ipsecmb_ESNon_ARon_AES_CTR_256_SHA1_96(RunTestIpsecEspAll):
 
 class Test_ipsecmb_ESNon_ARoff_AES_GCM_128_NONE(RunTestIpsecEspAll):
     """ipsecmb ESNon ARoff AES-GCM-128/NONE IPSec test"""
 
 class Test_ipsecmb_ESNon_ARoff_AES_GCM_128_NONE(RunTestIpsecEspAll):
     """ipsecmb ESNon ARoff AES-GCM-128/NONE IPSec test"""
+
     def test_ipsec(self):
         """ipsecmb ESNon ARoff AES-GCM-128/NONE IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """ipsecmb ESNon ARoff AES-GCM-128/NONE IPSec test"""
         self.run_test()
@@ -1418,6 +1661,7 @@ class Test_ipsecmb_ESNon_ARoff_AES_GCM_128_NONE(RunTestIpsecEspAll):
 
 class Test_ipsecmb_ESNon_ARoff_AES_GCM_192_NONE(RunTestIpsecEspAll):
     """ipsecmb ESNon ARoff AES-GCM-192/NONE IPSec test"""
 
 class Test_ipsecmb_ESNon_ARoff_AES_GCM_192_NONE(RunTestIpsecEspAll):
     """ipsecmb ESNon ARoff AES-GCM-192/NONE IPSec test"""
+
     def test_ipsec(self):
         """ipsecmb ESNon ARoff AES-GCM-192/NONE IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """ipsecmb ESNon ARoff AES-GCM-192/NONE IPSec test"""
         self.run_test()
@@ -1425,6 +1669,7 @@ class Test_ipsecmb_ESNon_ARoff_AES_GCM_192_NONE(RunTestIpsecEspAll):
 
 class Test_ipsecmb_ESNon_ARoff_AES_GCM_256_NONE(RunTestIpsecEspAll):
     """ipsecmb ESNon ARoff AES-GCM-256/NONE IPSec test"""
 
 class Test_ipsecmb_ESNon_ARoff_AES_GCM_256_NONE(RunTestIpsecEspAll):
     """ipsecmb ESNon ARoff AES-GCM-256/NONE IPSec test"""
+
     def test_ipsec(self):
         """ipsecmb ESNon ARoff AES-GCM-256/NONE IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """ipsecmb ESNon ARoff AES-GCM-256/NONE IPSec test"""
         self.run_test()
@@ -1432,6 +1677,7 @@ class Test_ipsecmb_ESNon_ARoff_AES_GCM_256_NONE(RunTestIpsecEspAll):
 
 class Test_ipsecmb_ESNon_ARoff_AES_CBC_128_MD5_96(RunTestIpsecEspAll):
     """ipsecmb ESNon ARoff AES-CBC-128/MD5-96 IPSec test"""
 
 class Test_ipsecmb_ESNon_ARoff_AES_CBC_128_MD5_96(RunTestIpsecEspAll):
     """ipsecmb ESNon ARoff AES-CBC-128/MD5-96 IPSec test"""
+
     def test_ipsec(self):
         """ipsecmb ESNon ARoff AES-CBC-128/MD5-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """ipsecmb ESNon ARoff AES-CBC-128/MD5-96 IPSec test"""
         self.run_test()
@@ -1439,6 +1685,7 @@ class Test_ipsecmb_ESNon_ARoff_AES_CBC_128_MD5_96(RunTestIpsecEspAll):
 
 class Test_ipsecmb_ESNon_ARoff_AES_CBC_192_SHA1_96(RunTestIpsecEspAll):
     """ipsecmb ESNon ARoff AES-CBC-192/SHA1-96 IPSec test"""
 
 class Test_ipsecmb_ESNon_ARoff_AES_CBC_192_SHA1_96(RunTestIpsecEspAll):
     """ipsecmb ESNon ARoff AES-CBC-192/SHA1-96 IPSec test"""
+
     def test_ipsec(self):
         """ipsecmb ESNon ARoff AES-CBC-192/SHA1-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """ipsecmb ESNon ARoff AES-CBC-192/SHA1-96 IPSec test"""
         self.run_test()
@@ -1446,6 +1693,7 @@ class Test_ipsecmb_ESNon_ARoff_AES_CBC_192_SHA1_96(RunTestIpsecEspAll):
 
 class Test_ipsecmb_ESNon_ARoff_AES_CBC_256_SHA1_96(RunTestIpsecEspAll):
     """ipsecmb ESNon ARoff AES-CBC-256/SHA1-96 IPSec test"""
 
 class Test_ipsecmb_ESNon_ARoff_AES_CBC_256_SHA1_96(RunTestIpsecEspAll):
     """ipsecmb ESNon ARoff AES-CBC-256/SHA1-96 IPSec test"""
+
     def test_ipsec(self):
         """ipsecmb ESNon ARoff AES-CBC-256/SHA1-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """ipsecmb ESNon ARoff AES-CBC-256/SHA1-96 IPSec test"""
         self.run_test()
@@ -1453,6 +1701,7 @@ class Test_ipsecmb_ESNon_ARoff_AES_CBC_256_SHA1_96(RunTestIpsecEspAll):
 
 class Test_ipsecmb_ESNon_ARoff_3DES_CBC_SHA1_96(RunTestIpsecEspAll):
     """ipsecmb ESNon ARoff 3DES-CBC/SHA1-96 IPSec test"""
 
 class Test_ipsecmb_ESNon_ARoff_3DES_CBC_SHA1_96(RunTestIpsecEspAll):
     """ipsecmb ESNon ARoff 3DES-CBC/SHA1-96 IPSec test"""
+
     def test_ipsec(self):
         """ipsecmb ESNon ARoff 3DES-CBC/SHA1-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """ipsecmb ESNon ARoff 3DES-CBC/SHA1-96 IPSec test"""
         self.run_test()
@@ -1460,6 +1709,7 @@ class Test_ipsecmb_ESNon_ARoff_3DES_CBC_SHA1_96(RunTestIpsecEspAll):
 
 class Test_ipsecmb_ESNon_ARoff_NONE_SHA1_96(RunTestIpsecEspAll):
     """ipsecmb ESNon ARoff NONE/SHA1-96 IPSec test"""
 
 class Test_ipsecmb_ESNon_ARoff_NONE_SHA1_96(RunTestIpsecEspAll):
     """ipsecmb ESNon ARoff NONE/SHA1-96 IPSec test"""
+
     def test_ipsec(self):
         """ipsecmb ESNon ARoff NONE/SHA1-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """ipsecmb ESNon ARoff NONE/SHA1-96 IPSec test"""
         self.run_test()
@@ -1467,6 +1717,7 @@ class Test_ipsecmb_ESNon_ARoff_NONE_SHA1_96(RunTestIpsecEspAll):
 
 class Test_ipsecmb_ESNon_ARoff_AES_CTR_128_SHA1_96(RunTestIpsecEspAll):
     """ipsecmb ESNon ARoff AES-CTR-128/SHA1-96 IPSec test"""
 
 class Test_ipsecmb_ESNon_ARoff_AES_CTR_128_SHA1_96(RunTestIpsecEspAll):
     """ipsecmb ESNon ARoff AES-CTR-128/SHA1-96 IPSec test"""
+
     def test_ipsec(self):
         """ipsecmb ESNon ARoff AES-CTR-128/SHA1-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """ipsecmb ESNon ARoff AES-CTR-128/SHA1-96 IPSec test"""
         self.run_test()
@@ -1474,6 +1725,7 @@ class Test_ipsecmb_ESNon_ARoff_AES_CTR_128_SHA1_96(RunTestIpsecEspAll):
 
 class Test_ipsecmb_ESNon_ARoff_AES_CTR_192_SHA1_96(RunTestIpsecEspAll):
     """ipsecmb ESNon ARoff AES-CTR-192/SHA1-96 IPSec test"""
 
 class Test_ipsecmb_ESNon_ARoff_AES_CTR_192_SHA1_96(RunTestIpsecEspAll):
     """ipsecmb ESNon ARoff AES-CTR-192/SHA1-96 IPSec test"""
+
     def test_ipsec(self):
         """ipsecmb ESNon ARoff AES-CTR-192/SHA1-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """ipsecmb ESNon ARoff AES-CTR-192/SHA1-96 IPSec test"""
         self.run_test()
@@ -1481,6 +1733,7 @@ class Test_ipsecmb_ESNon_ARoff_AES_CTR_192_SHA1_96(RunTestIpsecEspAll):
 
 class Test_ipsecmb_ESNon_ARoff_AES_CTR_256_SHA1_96(RunTestIpsecEspAll):
     """ipsecmb ESNon ARoff AES-CTR-256/SHA1-96 IPSec test"""
 
 class Test_ipsecmb_ESNon_ARoff_AES_CTR_256_SHA1_96(RunTestIpsecEspAll):
     """ipsecmb ESNon ARoff AES-CTR-256/SHA1-96 IPSec test"""
+
     def test_ipsec(self):
         """ipsecmb ESNon ARoff AES-CTR-256/SHA1-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """ipsecmb ESNon ARoff AES-CTR-256/SHA1-96 IPSec test"""
         self.run_test()
@@ -1488,6 +1741,7 @@ class Test_ipsecmb_ESNon_ARoff_AES_CTR_256_SHA1_96(RunTestIpsecEspAll):
 
 class Test_ipsecmb_ESNoff_ARon_AES_GCM_128_NONE(RunTestIpsecEspAll):
     """ipsecmb ESNoff ARon AES-GCM-128/NONE IPSec test"""
 
 class Test_ipsecmb_ESNoff_ARon_AES_GCM_128_NONE(RunTestIpsecEspAll):
     """ipsecmb ESNoff ARon AES-GCM-128/NONE IPSec test"""
+
     def test_ipsec(self):
         """ipsecmb ESNoff ARon AES-GCM-128/NONE IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """ipsecmb ESNoff ARon AES-GCM-128/NONE IPSec test"""
         self.run_test()
@@ -1495,6 +1749,7 @@ class Test_ipsecmb_ESNoff_ARon_AES_GCM_128_NONE(RunTestIpsecEspAll):
 
 class Test_ipsecmb_ESNoff_ARon_AES_GCM_192_NONE(RunTestIpsecEspAll):
     """ipsecmb ESNoff ARon AES-GCM-192/NONE IPSec test"""
 
 class Test_ipsecmb_ESNoff_ARon_AES_GCM_192_NONE(RunTestIpsecEspAll):
     """ipsecmb ESNoff ARon AES-GCM-192/NONE IPSec test"""
+
     def test_ipsec(self):
         """ipsecmb ESNoff ARon AES-GCM-192/NONE IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """ipsecmb ESNoff ARon AES-GCM-192/NONE IPSec test"""
         self.run_test()
@@ -1502,6 +1757,7 @@ class Test_ipsecmb_ESNoff_ARon_AES_GCM_192_NONE(RunTestIpsecEspAll):
 
 class Test_ipsecmb_ESNoff_ARon_AES_GCM_256_NONE(RunTestIpsecEspAll):
     """ipsecmb ESNoff ARon AES-GCM-256/NONE IPSec test"""
 
 class Test_ipsecmb_ESNoff_ARon_AES_GCM_256_NONE(RunTestIpsecEspAll):
     """ipsecmb ESNoff ARon AES-GCM-256/NONE IPSec test"""
+
     def test_ipsec(self):
         """ipsecmb ESNoff ARon AES-GCM-256/NONE IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """ipsecmb ESNoff ARon AES-GCM-256/NONE IPSec test"""
         self.run_test()
@@ -1509,6 +1765,7 @@ class Test_ipsecmb_ESNoff_ARon_AES_GCM_256_NONE(RunTestIpsecEspAll):
 
 class Test_ipsecmb_ESNoff_ARon_AES_CBC_128_MD5_96(RunTestIpsecEspAll):
     """ipsecmb ESNoff ARon AES-CBC-128/MD5-96 IPSec test"""
 
 class Test_ipsecmb_ESNoff_ARon_AES_CBC_128_MD5_96(RunTestIpsecEspAll):
     """ipsecmb ESNoff ARon AES-CBC-128/MD5-96 IPSec test"""
+
     def test_ipsec(self):
         """ipsecmb ESNoff ARon AES-CBC-128/MD5-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """ipsecmb ESNoff ARon AES-CBC-128/MD5-96 IPSec test"""
         self.run_test()
@@ -1516,6 +1773,7 @@ class Test_ipsecmb_ESNoff_ARon_AES_CBC_128_MD5_96(RunTestIpsecEspAll):
 
 class Test_ipsecmb_ESNoff_ARon_AES_CBC_192_SHA1_96(RunTestIpsecEspAll):
     """ipsecmb ESNoff ARon AES-CBC-192/SHA1-96 IPSec test"""
 
 class Test_ipsecmb_ESNoff_ARon_AES_CBC_192_SHA1_96(RunTestIpsecEspAll):
     """ipsecmb ESNoff ARon AES-CBC-192/SHA1-96 IPSec test"""
+
     def test_ipsec(self):
         """ipsecmb ESNoff ARon AES-CBC-192/SHA1-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """ipsecmb ESNoff ARon AES-CBC-192/SHA1-96 IPSec test"""
         self.run_test()
@@ -1523,6 +1781,7 @@ class Test_ipsecmb_ESNoff_ARon_AES_CBC_192_SHA1_96(RunTestIpsecEspAll):
 
 class Test_ipsecmb_ESNoff_ARon_AES_CBC_256_SHA1_96(RunTestIpsecEspAll):
     """ipsecmb ESNoff ARon AES-CBC-256/SHA1-96 IPSec test"""
 
 class Test_ipsecmb_ESNoff_ARon_AES_CBC_256_SHA1_96(RunTestIpsecEspAll):
     """ipsecmb ESNoff ARon AES-CBC-256/SHA1-96 IPSec test"""
+
     def test_ipsec(self):
         """ipsecmb ESNoff ARon AES-CBC-256/SHA1-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """ipsecmb ESNoff ARon AES-CBC-256/SHA1-96 IPSec test"""
         self.run_test()
@@ -1530,6 +1789,7 @@ class Test_ipsecmb_ESNoff_ARon_AES_CBC_256_SHA1_96(RunTestIpsecEspAll):
 
 class Test_ipsecmb_ESNoff_ARon_3DES_CBC_SHA1_96(RunTestIpsecEspAll):
     """ipsecmb ESNoff ARon 3DES-CBC/SHA1-96 IPSec test"""
 
 class Test_ipsecmb_ESNoff_ARon_3DES_CBC_SHA1_96(RunTestIpsecEspAll):
     """ipsecmb ESNoff ARon 3DES-CBC/SHA1-96 IPSec test"""
+
     def test_ipsec(self):
         """ipsecmb ESNoff ARon 3DES-CBC/SHA1-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """ipsecmb ESNoff ARon 3DES-CBC/SHA1-96 IPSec test"""
         self.run_test()
@@ -1537,6 +1797,7 @@ class Test_ipsecmb_ESNoff_ARon_3DES_CBC_SHA1_96(RunTestIpsecEspAll):
 
 class Test_ipsecmb_ESNoff_ARon_NONE_SHA1_96(RunTestIpsecEspAll):
     """ipsecmb ESNoff ARon NONE/SHA1-96 IPSec test"""
 
 class Test_ipsecmb_ESNoff_ARon_NONE_SHA1_96(RunTestIpsecEspAll):
     """ipsecmb ESNoff ARon NONE/SHA1-96 IPSec test"""
+
     def test_ipsec(self):
         """ipsecmb ESNoff ARon NONE/SHA1-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """ipsecmb ESNoff ARon NONE/SHA1-96 IPSec test"""
         self.run_test()
@@ -1544,6 +1805,7 @@ class Test_ipsecmb_ESNoff_ARon_NONE_SHA1_96(RunTestIpsecEspAll):
 
 class Test_ipsecmb_ESNoff_ARon_AES_CTR_128_SHA1_96(RunTestIpsecEspAll):
     """ipsecmb ESNoff ARon AES-CTR-128/SHA1-96 IPSec test"""
 
 class Test_ipsecmb_ESNoff_ARon_AES_CTR_128_SHA1_96(RunTestIpsecEspAll):
     """ipsecmb ESNoff ARon AES-CTR-128/SHA1-96 IPSec test"""
+
     def test_ipsec(self):
         """ipsecmb ESNoff ARon AES-CTR-128/SHA1-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """ipsecmb ESNoff ARon AES-CTR-128/SHA1-96 IPSec test"""
         self.run_test()
@@ -1551,6 +1813,7 @@ class Test_ipsecmb_ESNoff_ARon_AES_CTR_128_SHA1_96(RunTestIpsecEspAll):
 
 class Test_ipsecmb_ESNoff_ARon_AES_CTR_192_SHA1_96(RunTestIpsecEspAll):
     """ipsecmb ESNoff ARon AES-CTR-192/SHA1-96 IPSec test"""
 
 class Test_ipsecmb_ESNoff_ARon_AES_CTR_192_SHA1_96(RunTestIpsecEspAll):
     """ipsecmb ESNoff ARon AES-CTR-192/SHA1-96 IPSec test"""
+
     def test_ipsec(self):
         """ipsecmb ESNoff ARon AES-CTR-192/SHA1-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """ipsecmb ESNoff ARon AES-CTR-192/SHA1-96 IPSec test"""
         self.run_test()
@@ -1558,6 +1821,7 @@ class Test_ipsecmb_ESNoff_ARon_AES_CTR_192_SHA1_96(RunTestIpsecEspAll):
 
 class Test_ipsecmb_ESNoff_ARon_AES_CTR_256_SHA1_96(RunTestIpsecEspAll):
     """ipsecmb ESNoff ARon AES-CTR-256/SHA1-96 IPSec test"""
 
 class Test_ipsecmb_ESNoff_ARon_AES_CTR_256_SHA1_96(RunTestIpsecEspAll):
     """ipsecmb ESNoff ARon AES-CTR-256/SHA1-96 IPSec test"""
+
     def test_ipsec(self):
         """ipsecmb ESNoff ARon AES-CTR-256/SHA1-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """ipsecmb ESNoff ARon AES-CTR-256/SHA1-96 IPSec test"""
         self.run_test()
@@ -1565,6 +1829,7 @@ class Test_ipsecmb_ESNoff_ARon_AES_CTR_256_SHA1_96(RunTestIpsecEspAll):
 
 class Test_ipsecmb_ESNoff_ARoff_AES_GCM_128_NONE(RunTestIpsecEspAll):
     """ipsecmb ESNoff ARoff AES-GCM-128/NONE IPSec test"""
 
 class Test_ipsecmb_ESNoff_ARoff_AES_GCM_128_NONE(RunTestIpsecEspAll):
     """ipsecmb ESNoff ARoff AES-GCM-128/NONE IPSec test"""
+
     def test_ipsec(self):
         """ipsecmb ESNoff ARoff AES-GCM-128/NONE IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """ipsecmb ESNoff ARoff AES-GCM-128/NONE IPSec test"""
         self.run_test()
@@ -1572,6 +1837,7 @@ class Test_ipsecmb_ESNoff_ARoff_AES_GCM_128_NONE(RunTestIpsecEspAll):
 
 class Test_ipsecmb_ESNoff_ARoff_AES_GCM_192_NONE(RunTestIpsecEspAll):
     """ipsecmb ESNoff ARoff AES-GCM-192/NONE IPSec test"""
 
 class Test_ipsecmb_ESNoff_ARoff_AES_GCM_192_NONE(RunTestIpsecEspAll):
     """ipsecmb ESNoff ARoff AES-GCM-192/NONE IPSec test"""
+
     def test_ipsec(self):
         """ipsecmb ESNoff ARoff AES-GCM-192/NONE IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """ipsecmb ESNoff ARoff AES-GCM-192/NONE IPSec test"""
         self.run_test()
@@ -1579,6 +1845,7 @@ class Test_ipsecmb_ESNoff_ARoff_AES_GCM_192_NONE(RunTestIpsecEspAll):
 
 class Test_ipsecmb_ESNoff_ARoff_AES_GCM_256_NONE(RunTestIpsecEspAll):
     """ipsecmb ESNoff ARoff AES-GCM-256/NONE IPSec test"""
 
 class Test_ipsecmb_ESNoff_ARoff_AES_GCM_256_NONE(RunTestIpsecEspAll):
     """ipsecmb ESNoff ARoff AES-GCM-256/NONE IPSec test"""
+
     def test_ipsec(self):
         """ipsecmb ESNoff ARoff AES-GCM-256/NONE IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """ipsecmb ESNoff ARoff AES-GCM-256/NONE IPSec test"""
         self.run_test()
@@ -1586,6 +1853,7 @@ class Test_ipsecmb_ESNoff_ARoff_AES_GCM_256_NONE(RunTestIpsecEspAll):
 
 class Test_ipsecmb_ESNoff_ARoff_AES_CBC_128_MD5_96(RunTestIpsecEspAll):
     """ipsecmb ESNoff ARoff AES-CBC-128/MD5-96 IPSec test"""
 
 class Test_ipsecmb_ESNoff_ARoff_AES_CBC_128_MD5_96(RunTestIpsecEspAll):
     """ipsecmb ESNoff ARoff AES-CBC-128/MD5-96 IPSec test"""
+
     def test_ipsec(self):
         """ipsecmb ESNoff ARoff AES-CBC-128/MD5-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """ipsecmb ESNoff ARoff AES-CBC-128/MD5-96 IPSec test"""
         self.run_test()
@@ -1593,6 +1861,7 @@ class Test_ipsecmb_ESNoff_ARoff_AES_CBC_128_MD5_96(RunTestIpsecEspAll):
 
 class Test_ipsecmb_ESNoff_ARoff_AES_CBC_192_SHA1_96(RunTestIpsecEspAll):
     """ipsecmb ESNoff ARoff AES-CBC-192/SHA1-96 IPSec test"""
 
 class Test_ipsecmb_ESNoff_ARoff_AES_CBC_192_SHA1_96(RunTestIpsecEspAll):
     """ipsecmb ESNoff ARoff AES-CBC-192/SHA1-96 IPSec test"""
+
     def test_ipsec(self):
         """ipsecmb ESNoff ARoff AES-CBC-192/SHA1-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """ipsecmb ESNoff ARoff AES-CBC-192/SHA1-96 IPSec test"""
         self.run_test()
@@ -1600,6 +1869,7 @@ class Test_ipsecmb_ESNoff_ARoff_AES_CBC_192_SHA1_96(RunTestIpsecEspAll):
 
 class Test_ipsecmb_ESNoff_ARoff_AES_CBC_256_SHA1_96(RunTestIpsecEspAll):
     """ipsecmb ESNoff ARoff AES-CBC-256/SHA1-96 IPSec test"""
 
 class Test_ipsecmb_ESNoff_ARoff_AES_CBC_256_SHA1_96(RunTestIpsecEspAll):
     """ipsecmb ESNoff ARoff AES-CBC-256/SHA1-96 IPSec test"""
+
     def test_ipsec(self):
         """ipsecmb ESNoff ARoff AES-CBC-256/SHA1-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """ipsecmb ESNoff ARoff AES-CBC-256/SHA1-96 IPSec test"""
         self.run_test()
@@ -1607,6 +1877,7 @@ class Test_ipsecmb_ESNoff_ARoff_AES_CBC_256_SHA1_96(RunTestIpsecEspAll):
 
 class Test_ipsecmb_ESNoff_ARoff_3DES_CBC_SHA1_96(RunTestIpsecEspAll):
     """ipsecmb ESNoff ARoff 3DES-CBC/SHA1-96 IPSec test"""
 
 class Test_ipsecmb_ESNoff_ARoff_3DES_CBC_SHA1_96(RunTestIpsecEspAll):
     """ipsecmb ESNoff ARoff 3DES-CBC/SHA1-96 IPSec test"""
+
     def test_ipsec(self):
         """ipsecmb ESNoff ARoff 3DES-CBC/SHA1-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """ipsecmb ESNoff ARoff 3DES-CBC/SHA1-96 IPSec test"""
         self.run_test()
@@ -1614,6 +1885,7 @@ class Test_ipsecmb_ESNoff_ARoff_3DES_CBC_SHA1_96(RunTestIpsecEspAll):
 
 class Test_ipsecmb_ESNoff_ARoff_NONE_SHA1_96(RunTestIpsecEspAll):
     """ipsecmb ESNoff ARoff NONE/SHA1-96 IPSec test"""
 
 class Test_ipsecmb_ESNoff_ARoff_NONE_SHA1_96(RunTestIpsecEspAll):
     """ipsecmb ESNoff ARoff NONE/SHA1-96 IPSec test"""
+
     def test_ipsec(self):
         """ipsecmb ESNoff ARoff NONE/SHA1-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """ipsecmb ESNoff ARoff NONE/SHA1-96 IPSec test"""
         self.run_test()
@@ -1621,6 +1893,7 @@ class Test_ipsecmb_ESNoff_ARoff_NONE_SHA1_96(RunTestIpsecEspAll):
 
 class Test_ipsecmb_ESNoff_ARoff_AES_CTR_128_SHA1_96(RunTestIpsecEspAll):
     """ipsecmb ESNoff ARoff AES-CTR-128/SHA1-96 IPSec test"""
 
 class Test_ipsecmb_ESNoff_ARoff_AES_CTR_128_SHA1_96(RunTestIpsecEspAll):
     """ipsecmb ESNoff ARoff AES-CTR-128/SHA1-96 IPSec test"""
+
     def test_ipsec(self):
         """ipsecmb ESNoff ARoff AES-CTR-128/SHA1-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """ipsecmb ESNoff ARoff AES-CTR-128/SHA1-96 IPSec test"""
         self.run_test()
@@ -1628,6 +1901,7 @@ class Test_ipsecmb_ESNoff_ARoff_AES_CTR_128_SHA1_96(RunTestIpsecEspAll):
 
 class Test_ipsecmb_ESNoff_ARoff_AES_CTR_192_SHA1_96(RunTestIpsecEspAll):
     """ipsecmb ESNoff ARoff AES-CTR-192/SHA1-96 IPSec test"""
 
 class Test_ipsecmb_ESNoff_ARoff_AES_CTR_192_SHA1_96(RunTestIpsecEspAll):
     """ipsecmb ESNoff ARoff AES-CTR-192/SHA1-96 IPSec test"""
+
     def test_ipsec(self):
         """ipsecmb ESNoff ARoff AES-CTR-192/SHA1-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """ipsecmb ESNoff ARoff AES-CTR-192/SHA1-96 IPSec test"""
         self.run_test()
@@ -1635,6 +1909,7 @@ class Test_ipsecmb_ESNoff_ARoff_AES_CTR_192_SHA1_96(RunTestIpsecEspAll):
 
 class Test_ipsecmb_ESNoff_ARoff_AES_CTR_256_SHA1_96(RunTestIpsecEspAll):
     """ipsecmb ESNoff ARoff AES-CTR-256/SHA1-96 IPSec test"""
 
 class Test_ipsecmb_ESNoff_ARoff_AES_CTR_256_SHA1_96(RunTestIpsecEspAll):
     """ipsecmb ESNoff ARoff AES-CTR-256/SHA1-96 IPSec test"""
+
     def test_ipsec(self):
         """ipsecmb ESNoff ARoff AES-CTR-256/SHA1-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """ipsecmb ESNoff ARoff AES-CTR-256/SHA1-96 IPSec test"""
         self.run_test()
@@ -1642,6 +1917,7 @@ class Test_ipsecmb_ESNoff_ARoff_AES_CTR_256_SHA1_96(RunTestIpsecEspAll):
 
 class Test_openssl_ESNon_ARon_AES_GCM_128_NONE(RunTestIpsecEspAll):
     """openssl ESNon ARon AES-GCM-128/NONE IPSec test"""
 
 class Test_openssl_ESNon_ARon_AES_GCM_128_NONE(RunTestIpsecEspAll):
     """openssl ESNon ARon AES-GCM-128/NONE IPSec test"""
+
     def test_ipsec(self):
         """openssl ESNon ARon AES-GCM-128/NONE IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """openssl ESNon ARon AES-GCM-128/NONE IPSec test"""
         self.run_test()
@@ -1649,6 +1925,7 @@ class Test_openssl_ESNon_ARon_AES_GCM_128_NONE(RunTestIpsecEspAll):
 
 class Test_openssl_ESNon_ARon_AES_GCM_192_NONE(RunTestIpsecEspAll):
     """openssl ESNon ARon AES-GCM-192/NONE IPSec test"""
 
 class Test_openssl_ESNon_ARon_AES_GCM_192_NONE(RunTestIpsecEspAll):
     """openssl ESNon ARon AES-GCM-192/NONE IPSec test"""
+
     def test_ipsec(self):
         """openssl ESNon ARon AES-GCM-192/NONE IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """openssl ESNon ARon AES-GCM-192/NONE IPSec test"""
         self.run_test()
@@ -1656,6 +1933,7 @@ class Test_openssl_ESNon_ARon_AES_GCM_192_NONE(RunTestIpsecEspAll):
 
 class Test_openssl_ESNon_ARon_AES_GCM_256_NONE(RunTestIpsecEspAll):
     """openssl ESNon ARon AES-GCM-256/NONE IPSec test"""
 
 class Test_openssl_ESNon_ARon_AES_GCM_256_NONE(RunTestIpsecEspAll):
     """openssl ESNon ARon AES-GCM-256/NONE IPSec test"""
+
     def test_ipsec(self):
         """openssl ESNon ARon AES-GCM-256/NONE IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """openssl ESNon ARon AES-GCM-256/NONE IPSec test"""
         self.run_test()
@@ -1663,6 +1941,7 @@ class Test_openssl_ESNon_ARon_AES_GCM_256_NONE(RunTestIpsecEspAll):
 
 class Test_openssl_ESNon_ARon_AES_CBC_128_MD5_96(RunTestIpsecEspAll):
     """openssl ESNon ARon AES-CBC-128/MD5-96 IPSec test"""
 
 class Test_openssl_ESNon_ARon_AES_CBC_128_MD5_96(RunTestIpsecEspAll):
     """openssl ESNon ARon AES-CBC-128/MD5-96 IPSec test"""
+
     def test_ipsec(self):
         """openssl ESNon ARon AES-CBC-128/MD5-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """openssl ESNon ARon AES-CBC-128/MD5-96 IPSec test"""
         self.run_test()
@@ -1670,6 +1949,7 @@ class Test_openssl_ESNon_ARon_AES_CBC_128_MD5_96(RunTestIpsecEspAll):
 
 class Test_openssl_ESNon_ARon_AES_CBC_192_SHA1_96(RunTestIpsecEspAll):
     """openssl ESNon ARon AES-CBC-192/SHA1-96 IPSec test"""
 
 class Test_openssl_ESNon_ARon_AES_CBC_192_SHA1_96(RunTestIpsecEspAll):
     """openssl ESNon ARon AES-CBC-192/SHA1-96 IPSec test"""
+
     def test_ipsec(self):
         """openssl ESNon ARon AES-CBC-192/SHA1-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """openssl ESNon ARon AES-CBC-192/SHA1-96 IPSec test"""
         self.run_test()
@@ -1677,6 +1957,7 @@ class Test_openssl_ESNon_ARon_AES_CBC_192_SHA1_96(RunTestIpsecEspAll):
 
 class Test_openssl_ESNon_ARon_AES_CBC_256_SHA1_96(RunTestIpsecEspAll):
     """openssl ESNon ARon AES-CBC-256/SHA1-96 IPSec test"""
 
 class Test_openssl_ESNon_ARon_AES_CBC_256_SHA1_96(RunTestIpsecEspAll):
     """openssl ESNon ARon AES-CBC-256/SHA1-96 IPSec test"""
+
     def test_ipsec(self):
         """openssl ESNon ARon AES-CBC-256/SHA1-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """openssl ESNon ARon AES-CBC-256/SHA1-96 IPSec test"""
         self.run_test()
@@ -1684,6 +1965,7 @@ class Test_openssl_ESNon_ARon_AES_CBC_256_SHA1_96(RunTestIpsecEspAll):
 
 class Test_openssl_ESNon_ARon_3DES_CBC_SHA1_96(RunTestIpsecEspAll):
     """openssl ESNon ARon 3DES-CBC/SHA1-96 IPSec test"""
 
 class Test_openssl_ESNon_ARon_3DES_CBC_SHA1_96(RunTestIpsecEspAll):
     """openssl ESNon ARon 3DES-CBC/SHA1-96 IPSec test"""
+
     def test_ipsec(self):
         """openssl ESNon ARon 3DES-CBC/SHA1-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """openssl ESNon ARon 3DES-CBC/SHA1-96 IPSec test"""
         self.run_test()
@@ -1691,6 +1973,7 @@ class Test_openssl_ESNon_ARon_3DES_CBC_SHA1_96(RunTestIpsecEspAll):
 
 class Test_openssl_ESNon_ARon_NONE_SHA1_96(RunTestIpsecEspAll):
     """openssl ESNon ARon NONE/SHA1-96 IPSec test"""
 
 class Test_openssl_ESNon_ARon_NONE_SHA1_96(RunTestIpsecEspAll):
     """openssl ESNon ARon NONE/SHA1-96 IPSec test"""
+
     def test_ipsec(self):
         """openssl ESNon ARon NONE/SHA1-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """openssl ESNon ARon NONE/SHA1-96 IPSec test"""
         self.run_test()
@@ -1698,6 +1981,7 @@ class Test_openssl_ESNon_ARon_NONE_SHA1_96(RunTestIpsecEspAll):
 
 class Test_openssl_ESNon_ARon_AES_CTR_128_SHA1_96(RunTestIpsecEspAll):
     """openssl ESNon ARon AES-CTR-128/SHA1-96 IPSec test"""
 
 class Test_openssl_ESNon_ARon_AES_CTR_128_SHA1_96(RunTestIpsecEspAll):
     """openssl ESNon ARon AES-CTR-128/SHA1-96 IPSec test"""
+
     def test_ipsec(self):
         """openssl ESNon ARon AES-CTR-128/SHA1-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """openssl ESNon ARon AES-CTR-128/SHA1-96 IPSec test"""
         self.run_test()
@@ -1705,6 +1989,7 @@ class Test_openssl_ESNon_ARon_AES_CTR_128_SHA1_96(RunTestIpsecEspAll):
 
 class Test_openssl_ESNon_ARon_AES_CTR_192_SHA1_96(RunTestIpsecEspAll):
     """openssl ESNon ARon AES-CTR-192/SHA1-96 IPSec test"""
 
 class Test_openssl_ESNon_ARon_AES_CTR_192_SHA1_96(RunTestIpsecEspAll):
     """openssl ESNon ARon AES-CTR-192/SHA1-96 IPSec test"""
+
     def test_ipsec(self):
         """openssl ESNon ARon AES-CTR-192/SHA1-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """openssl ESNon ARon AES-CTR-192/SHA1-96 IPSec test"""
         self.run_test()
@@ -1712,6 +1997,7 @@ class Test_openssl_ESNon_ARon_AES_CTR_192_SHA1_96(RunTestIpsecEspAll):
 
 class Test_openssl_ESNon_ARon_AES_CTR_256_SHA1_96(RunTestIpsecEspAll):
     """openssl ESNon ARon AES-CTR-256/SHA1-96 IPSec test"""
 
 class Test_openssl_ESNon_ARon_AES_CTR_256_SHA1_96(RunTestIpsecEspAll):
     """openssl ESNon ARon AES-CTR-256/SHA1-96 IPSec test"""
+
     def test_ipsec(self):
         """openssl ESNon ARon AES-CTR-256/SHA1-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """openssl ESNon ARon AES-CTR-256/SHA1-96 IPSec test"""
         self.run_test()
@@ -1719,6 +2005,7 @@ class Test_openssl_ESNon_ARon_AES_CTR_256_SHA1_96(RunTestIpsecEspAll):
 
 class Test_openssl_ESNon_ARoff_AES_GCM_128_NONE(RunTestIpsecEspAll):
     """openssl ESNon ARoff AES-GCM-128/NONE IPSec test"""
 
 class Test_openssl_ESNon_ARoff_AES_GCM_128_NONE(RunTestIpsecEspAll):
     """openssl ESNon ARoff AES-GCM-128/NONE IPSec test"""
+
     def test_ipsec(self):
         """openssl ESNon ARoff AES-GCM-128/NONE IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """openssl ESNon ARoff AES-GCM-128/NONE IPSec test"""
         self.run_test()
@@ -1726,6 +2013,7 @@ class Test_openssl_ESNon_ARoff_AES_GCM_128_NONE(RunTestIpsecEspAll):
 
 class Test_openssl_ESNon_ARoff_AES_GCM_192_NONE(RunTestIpsecEspAll):
     """openssl ESNon ARoff AES-GCM-192/NONE IPSec test"""
 
 class Test_openssl_ESNon_ARoff_AES_GCM_192_NONE(RunTestIpsecEspAll):
     """openssl ESNon ARoff AES-GCM-192/NONE IPSec test"""
+
     def test_ipsec(self):
         """openssl ESNon ARoff AES-GCM-192/NONE IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """openssl ESNon ARoff AES-GCM-192/NONE IPSec test"""
         self.run_test()
@@ -1733,6 +2021,7 @@ class Test_openssl_ESNon_ARoff_AES_GCM_192_NONE(RunTestIpsecEspAll):
 
 class Test_openssl_ESNon_ARoff_AES_GCM_256_NONE(RunTestIpsecEspAll):
     """openssl ESNon ARoff AES-GCM-256/NONE IPSec test"""
 
 class Test_openssl_ESNon_ARoff_AES_GCM_256_NONE(RunTestIpsecEspAll):
     """openssl ESNon ARoff AES-GCM-256/NONE IPSec test"""
+
     def test_ipsec(self):
         """openssl ESNon ARoff AES-GCM-256/NONE IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """openssl ESNon ARoff AES-GCM-256/NONE IPSec test"""
         self.run_test()
@@ -1740,6 +2029,7 @@ class Test_openssl_ESNon_ARoff_AES_GCM_256_NONE(RunTestIpsecEspAll):
 
 class Test_openssl_ESNon_ARoff_AES_CBC_128_MD5_96(RunTestIpsecEspAll):
     """openssl ESNon ARoff AES-CBC-128/MD5-96 IPSec test"""
 
 class Test_openssl_ESNon_ARoff_AES_CBC_128_MD5_96(RunTestIpsecEspAll):
     """openssl ESNon ARoff AES-CBC-128/MD5-96 IPSec test"""
+
     def test_ipsec(self):
         """openssl ESNon ARoff AES-CBC-128/MD5-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """openssl ESNon ARoff AES-CBC-128/MD5-96 IPSec test"""
         self.run_test()
@@ -1747,6 +2037,7 @@ class Test_openssl_ESNon_ARoff_AES_CBC_128_MD5_96(RunTestIpsecEspAll):
 
 class Test_openssl_ESNon_ARoff_AES_CBC_192_SHA1_96(RunTestIpsecEspAll):
     """openssl ESNon ARoff AES-CBC-192/SHA1-96 IPSec test"""
 
 class Test_openssl_ESNon_ARoff_AES_CBC_192_SHA1_96(RunTestIpsecEspAll):
     """openssl ESNon ARoff AES-CBC-192/SHA1-96 IPSec test"""
+
     def test_ipsec(self):
         """openssl ESNon ARoff AES-CBC-192/SHA1-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """openssl ESNon ARoff AES-CBC-192/SHA1-96 IPSec test"""
         self.run_test()
@@ -1754,6 +2045,7 @@ class Test_openssl_ESNon_ARoff_AES_CBC_192_SHA1_96(RunTestIpsecEspAll):
 
 class Test_openssl_ESNon_ARoff_AES_CBC_256_SHA1_96(RunTestIpsecEspAll):
     """openssl ESNon ARoff AES-CBC-256/SHA1-96 IPSec test"""
 
 class Test_openssl_ESNon_ARoff_AES_CBC_256_SHA1_96(RunTestIpsecEspAll):
     """openssl ESNon ARoff AES-CBC-256/SHA1-96 IPSec test"""
+
     def test_ipsec(self):
         """openssl ESNon ARoff AES-CBC-256/SHA1-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """openssl ESNon ARoff AES-CBC-256/SHA1-96 IPSec test"""
         self.run_test()
@@ -1761,6 +2053,7 @@ class Test_openssl_ESNon_ARoff_AES_CBC_256_SHA1_96(RunTestIpsecEspAll):
 
 class Test_openssl_ESNon_ARoff_3DES_CBC_SHA1_96(RunTestIpsecEspAll):
     """openssl ESNon ARoff 3DES-CBC/SHA1-96 IPSec test"""
 
 class Test_openssl_ESNon_ARoff_3DES_CBC_SHA1_96(RunTestIpsecEspAll):
     """openssl ESNon ARoff 3DES-CBC/SHA1-96 IPSec test"""
+
     def test_ipsec(self):
         """openssl ESNon ARoff 3DES-CBC/SHA1-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """openssl ESNon ARoff 3DES-CBC/SHA1-96 IPSec test"""
         self.run_test()
@@ -1768,6 +2061,7 @@ class Test_openssl_ESNon_ARoff_3DES_CBC_SHA1_96(RunTestIpsecEspAll):
 
 class Test_openssl_ESNon_ARoff_NONE_SHA1_96(RunTestIpsecEspAll):
     """openssl ESNon ARoff NONE/SHA1-96 IPSec test"""
 
 class Test_openssl_ESNon_ARoff_NONE_SHA1_96(RunTestIpsecEspAll):
     """openssl ESNon ARoff NONE/SHA1-96 IPSec test"""
+
     def test_ipsec(self):
         """openssl ESNon ARoff NONE/SHA1-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """openssl ESNon ARoff NONE/SHA1-96 IPSec test"""
         self.run_test()
@@ -1775,6 +2069,7 @@ class Test_openssl_ESNon_ARoff_NONE_SHA1_96(RunTestIpsecEspAll):
 
 class Test_openssl_ESNon_ARoff_AES_CTR_128_SHA1_96(RunTestIpsecEspAll):
     """openssl ESNon ARoff AES-CTR-128/SHA1-96 IPSec test"""
 
 class Test_openssl_ESNon_ARoff_AES_CTR_128_SHA1_96(RunTestIpsecEspAll):
     """openssl ESNon ARoff AES-CTR-128/SHA1-96 IPSec test"""
+
     def test_ipsec(self):
         """openssl ESNon ARoff AES-CTR-128/SHA1-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """openssl ESNon ARoff AES-CTR-128/SHA1-96 IPSec test"""
         self.run_test()
@@ -1782,6 +2077,7 @@ class Test_openssl_ESNon_ARoff_AES_CTR_128_SHA1_96(RunTestIpsecEspAll):
 
 class Test_openssl_ESNon_ARoff_AES_CTR_192_SHA1_96(RunTestIpsecEspAll):
     """openssl ESNon ARoff AES-CTR-192/SHA1-96 IPSec test"""
 
 class Test_openssl_ESNon_ARoff_AES_CTR_192_SHA1_96(RunTestIpsecEspAll):
     """openssl ESNon ARoff AES-CTR-192/SHA1-96 IPSec test"""
+
     def test_ipsec(self):
         """openssl ESNon ARoff AES-CTR-192/SHA1-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """openssl ESNon ARoff AES-CTR-192/SHA1-96 IPSec test"""
         self.run_test()
@@ -1789,6 +2085,7 @@ class Test_openssl_ESNon_ARoff_AES_CTR_192_SHA1_96(RunTestIpsecEspAll):
 
 class Test_openssl_ESNon_ARoff_AES_CTR_256_SHA1_96(RunTestIpsecEspAll):
     """openssl ESNon ARoff AES-CTR-256/SHA1-96 IPSec test"""
 
 class Test_openssl_ESNon_ARoff_AES_CTR_256_SHA1_96(RunTestIpsecEspAll):
     """openssl ESNon ARoff AES-CTR-256/SHA1-96 IPSec test"""
+
     def test_ipsec(self):
         """openssl ESNon ARoff AES-CTR-256/SHA1-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """openssl ESNon ARoff AES-CTR-256/SHA1-96 IPSec test"""
         self.run_test()
@@ -1796,6 +2093,7 @@ class Test_openssl_ESNon_ARoff_AES_CTR_256_SHA1_96(RunTestIpsecEspAll):
 
 class Test_openssl_ESNoff_ARon_AES_GCM_128_NONE(RunTestIpsecEspAll):
     """openssl ESNoff ARon AES-GCM-128/NONE IPSec test"""
 
 class Test_openssl_ESNoff_ARon_AES_GCM_128_NONE(RunTestIpsecEspAll):
     """openssl ESNoff ARon AES-GCM-128/NONE IPSec test"""
+
     def test_ipsec(self):
         """openssl ESNoff ARon AES-GCM-128/NONE IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """openssl ESNoff ARon AES-GCM-128/NONE IPSec test"""
         self.run_test()
@@ -1803,6 +2101,7 @@ class Test_openssl_ESNoff_ARon_AES_GCM_128_NONE(RunTestIpsecEspAll):
 
 class Test_openssl_ESNoff_ARon_AES_GCM_192_NONE(RunTestIpsecEspAll):
     """openssl ESNoff ARon AES-GCM-192/NONE IPSec test"""
 
 class Test_openssl_ESNoff_ARon_AES_GCM_192_NONE(RunTestIpsecEspAll):
     """openssl ESNoff ARon AES-GCM-192/NONE IPSec test"""
+
     def test_ipsec(self):
         """openssl ESNoff ARon AES-GCM-192/NONE IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """openssl ESNoff ARon AES-GCM-192/NONE IPSec test"""
         self.run_test()
@@ -1810,6 +2109,7 @@ class Test_openssl_ESNoff_ARon_AES_GCM_192_NONE(RunTestIpsecEspAll):
 
 class Test_openssl_ESNoff_ARon_AES_GCM_256_NONE(RunTestIpsecEspAll):
     """openssl ESNoff ARon AES-GCM-256/NONE IPSec test"""
 
 class Test_openssl_ESNoff_ARon_AES_GCM_256_NONE(RunTestIpsecEspAll):
     """openssl ESNoff ARon AES-GCM-256/NONE IPSec test"""
+
     def test_ipsec(self):
         """openssl ESNoff ARon AES-GCM-256/NONE IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """openssl ESNoff ARon AES-GCM-256/NONE IPSec test"""
         self.run_test()
@@ -1817,6 +2117,7 @@ class Test_openssl_ESNoff_ARon_AES_GCM_256_NONE(RunTestIpsecEspAll):
 
 class Test_openssl_ESNoff_ARon_AES_CBC_128_MD5_96(RunTestIpsecEspAll):
     """openssl ESNoff ARon AES-CBC-128/MD5-96 IPSec test"""
 
 class Test_openssl_ESNoff_ARon_AES_CBC_128_MD5_96(RunTestIpsecEspAll):
     """openssl ESNoff ARon AES-CBC-128/MD5-96 IPSec test"""
+
     def test_ipsec(self):
         """openssl ESNoff ARon AES-CBC-128/MD5-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """openssl ESNoff ARon AES-CBC-128/MD5-96 IPSec test"""
         self.run_test()
@@ -1824,6 +2125,7 @@ class Test_openssl_ESNoff_ARon_AES_CBC_128_MD5_96(RunTestIpsecEspAll):
 
 class Test_openssl_ESNoff_ARon_AES_CBC_192_SHA1_96(RunTestIpsecEspAll):
     """openssl ESNoff ARon AES-CBC-192/SHA1-96 IPSec test"""
 
 class Test_openssl_ESNoff_ARon_AES_CBC_192_SHA1_96(RunTestIpsecEspAll):
     """openssl ESNoff ARon AES-CBC-192/SHA1-96 IPSec test"""
+
     def test_ipsec(self):
         """openssl ESNoff ARon AES-CBC-192/SHA1-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """openssl ESNoff ARon AES-CBC-192/SHA1-96 IPSec test"""
         self.run_test()
@@ -1831,6 +2133,7 @@ class Test_openssl_ESNoff_ARon_AES_CBC_192_SHA1_96(RunTestIpsecEspAll):
 
 class Test_openssl_ESNoff_ARon_AES_CBC_256_SHA1_96(RunTestIpsecEspAll):
     """openssl ESNoff ARon AES-CBC-256/SHA1-96 IPSec test"""
 
 class Test_openssl_ESNoff_ARon_AES_CBC_256_SHA1_96(RunTestIpsecEspAll):
     """openssl ESNoff ARon AES-CBC-256/SHA1-96 IPSec test"""
+
     def test_ipsec(self):
         """openssl ESNoff ARon AES-CBC-256/SHA1-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """openssl ESNoff ARon AES-CBC-256/SHA1-96 IPSec test"""
         self.run_test()
@@ -1838,6 +2141,7 @@ class Test_openssl_ESNoff_ARon_AES_CBC_256_SHA1_96(RunTestIpsecEspAll):
 
 class Test_openssl_ESNoff_ARon_3DES_CBC_SHA1_96(RunTestIpsecEspAll):
     """openssl ESNoff ARon 3DES-CBC/SHA1-96 IPSec test"""
 
 class Test_openssl_ESNoff_ARon_3DES_CBC_SHA1_96(RunTestIpsecEspAll):
     """openssl ESNoff ARon 3DES-CBC/SHA1-96 IPSec test"""
+
     def test_ipsec(self):
         """openssl ESNoff ARon 3DES-CBC/SHA1-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """openssl ESNoff ARon 3DES-CBC/SHA1-96 IPSec test"""
         self.run_test()
@@ -1845,6 +2149,7 @@ class Test_openssl_ESNoff_ARon_3DES_CBC_SHA1_96(RunTestIpsecEspAll):
 
 class Test_openssl_ESNoff_ARon_NONE_SHA1_96(RunTestIpsecEspAll):
     """openssl ESNoff ARon NONE/SHA1-96 IPSec test"""
 
 class Test_openssl_ESNoff_ARon_NONE_SHA1_96(RunTestIpsecEspAll):
     """openssl ESNoff ARon NONE/SHA1-96 IPSec test"""
+
     def test_ipsec(self):
         """openssl ESNoff ARon NONE/SHA1-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """openssl ESNoff ARon NONE/SHA1-96 IPSec test"""
         self.run_test()
@@ -1852,6 +2157,7 @@ class Test_openssl_ESNoff_ARon_NONE_SHA1_96(RunTestIpsecEspAll):
 
 class Test_openssl_ESNoff_ARon_AES_CTR_128_SHA1_96(RunTestIpsecEspAll):
     """openssl ESNoff ARon AES-CTR-128/SHA1-96 IPSec test"""
 
 class Test_openssl_ESNoff_ARon_AES_CTR_128_SHA1_96(RunTestIpsecEspAll):
     """openssl ESNoff ARon AES-CTR-128/SHA1-96 IPSec test"""
+
     def test_ipsec(self):
         """openssl ESNoff ARon AES-CTR-128/SHA1-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """openssl ESNoff ARon AES-CTR-128/SHA1-96 IPSec test"""
         self.run_test()
@@ -1859,6 +2165,7 @@ class Test_openssl_ESNoff_ARon_AES_CTR_128_SHA1_96(RunTestIpsecEspAll):
 
 class Test_openssl_ESNoff_ARon_AES_CTR_192_SHA1_96(RunTestIpsecEspAll):
     """openssl ESNoff ARon AES-CTR-192/SHA1-96 IPSec test"""
 
 class Test_openssl_ESNoff_ARon_AES_CTR_192_SHA1_96(RunTestIpsecEspAll):
     """openssl ESNoff ARon AES-CTR-192/SHA1-96 IPSec test"""
+
     def test_ipsec(self):
         """openssl ESNoff ARon AES-CTR-192/SHA1-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """openssl ESNoff ARon AES-CTR-192/SHA1-96 IPSec test"""
         self.run_test()
@@ -1866,6 +2173,7 @@ class Test_openssl_ESNoff_ARon_AES_CTR_192_SHA1_96(RunTestIpsecEspAll):
 
 class Test_openssl_ESNoff_ARon_AES_CTR_256_SHA1_96(RunTestIpsecEspAll):
     """openssl ESNoff ARon AES-CTR-256/SHA1-96 IPSec test"""
 
 class Test_openssl_ESNoff_ARon_AES_CTR_256_SHA1_96(RunTestIpsecEspAll):
     """openssl ESNoff ARon AES-CTR-256/SHA1-96 IPSec test"""
+
     def test_ipsec(self):
         """openssl ESNoff ARon AES-CTR-256/SHA1-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """openssl ESNoff ARon AES-CTR-256/SHA1-96 IPSec test"""
         self.run_test()
@@ -1873,6 +2181,7 @@ class Test_openssl_ESNoff_ARon_AES_CTR_256_SHA1_96(RunTestIpsecEspAll):
 
 class Test_openssl_ESNoff_ARoff_AES_GCM_128_NONE(RunTestIpsecEspAll):
     """openssl ESNoff ARoff AES-GCM-128/NONE IPSec test"""
 
 class Test_openssl_ESNoff_ARoff_AES_GCM_128_NONE(RunTestIpsecEspAll):
     """openssl ESNoff ARoff AES-GCM-128/NONE IPSec test"""
+
     def test_ipsec(self):
         """openssl ESNoff ARoff AES-GCM-128/NONE IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """openssl ESNoff ARoff AES-GCM-128/NONE IPSec test"""
         self.run_test()
@@ -1880,6 +2189,7 @@ class Test_openssl_ESNoff_ARoff_AES_GCM_128_NONE(RunTestIpsecEspAll):
 
 class Test_openssl_ESNoff_ARoff_AES_GCM_192_NONE(RunTestIpsecEspAll):
     """openssl ESNoff ARoff AES-GCM-192/NONE IPSec test"""
 
 class Test_openssl_ESNoff_ARoff_AES_GCM_192_NONE(RunTestIpsecEspAll):
     """openssl ESNoff ARoff AES-GCM-192/NONE IPSec test"""
+
     def test_ipsec(self):
         """openssl ESNoff ARoff AES-GCM-192/NONE IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """openssl ESNoff ARoff AES-GCM-192/NONE IPSec test"""
         self.run_test()
@@ -1887,6 +2197,7 @@ class Test_openssl_ESNoff_ARoff_AES_GCM_192_NONE(RunTestIpsecEspAll):
 
 class Test_openssl_ESNoff_ARoff_AES_GCM_256_NONE(RunTestIpsecEspAll):
     """openssl ESNoff ARoff AES-GCM-256/NONE IPSec test"""
 
 class Test_openssl_ESNoff_ARoff_AES_GCM_256_NONE(RunTestIpsecEspAll):
     """openssl ESNoff ARoff AES-GCM-256/NONE IPSec test"""
+
     def test_ipsec(self):
         """openssl ESNoff ARoff AES-GCM-256/NONE IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """openssl ESNoff ARoff AES-GCM-256/NONE IPSec test"""
         self.run_test()
@@ -1894,6 +2205,7 @@ class Test_openssl_ESNoff_ARoff_AES_GCM_256_NONE(RunTestIpsecEspAll):
 
 class Test_openssl_ESNoff_ARoff_AES_CBC_128_MD5_96(RunTestIpsecEspAll):
     """openssl ESNoff ARoff AES-CBC-128/MD5-96 IPSec test"""
 
 class Test_openssl_ESNoff_ARoff_AES_CBC_128_MD5_96(RunTestIpsecEspAll):
     """openssl ESNoff ARoff AES-CBC-128/MD5-96 IPSec test"""
+
     def test_ipsec(self):
         """openssl ESNoff ARoff AES-CBC-128/MD5-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """openssl ESNoff ARoff AES-CBC-128/MD5-96 IPSec test"""
         self.run_test()
@@ -1901,6 +2213,7 @@ class Test_openssl_ESNoff_ARoff_AES_CBC_128_MD5_96(RunTestIpsecEspAll):
 
 class Test_openssl_ESNoff_ARoff_AES_CBC_192_SHA1_96(RunTestIpsecEspAll):
     """openssl ESNoff ARoff AES-CBC-192/SHA1-96 IPSec test"""
 
 class Test_openssl_ESNoff_ARoff_AES_CBC_192_SHA1_96(RunTestIpsecEspAll):
     """openssl ESNoff ARoff AES-CBC-192/SHA1-96 IPSec test"""
+
     def test_ipsec(self):
         """openssl ESNoff ARoff AES-CBC-192/SHA1-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """openssl ESNoff ARoff AES-CBC-192/SHA1-96 IPSec test"""
         self.run_test()
@@ -1908,6 +2221,7 @@ class Test_openssl_ESNoff_ARoff_AES_CBC_192_SHA1_96(RunTestIpsecEspAll):
 
 class Test_openssl_ESNoff_ARoff_AES_CBC_256_SHA1_96(RunTestIpsecEspAll):
     """openssl ESNoff ARoff AES-CBC-256/SHA1-96 IPSec test"""
 
 class Test_openssl_ESNoff_ARoff_AES_CBC_256_SHA1_96(RunTestIpsecEspAll):
     """openssl ESNoff ARoff AES-CBC-256/SHA1-96 IPSec test"""
+
     def test_ipsec(self):
         """openssl ESNoff ARoff AES-CBC-256/SHA1-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """openssl ESNoff ARoff AES-CBC-256/SHA1-96 IPSec test"""
         self.run_test()
@@ -1915,6 +2229,7 @@ class Test_openssl_ESNoff_ARoff_AES_CBC_256_SHA1_96(RunTestIpsecEspAll):
 
 class Test_openssl_ESNoff_ARoff_3DES_CBC_SHA1_96(RunTestIpsecEspAll):
     """openssl ESNoff ARoff 3DES-CBC/SHA1-96 IPSec test"""
 
 class Test_openssl_ESNoff_ARoff_3DES_CBC_SHA1_96(RunTestIpsecEspAll):
     """openssl ESNoff ARoff 3DES-CBC/SHA1-96 IPSec test"""
+
     def test_ipsec(self):
         """openssl ESNoff ARoff 3DES-CBC/SHA1-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """openssl ESNoff ARoff 3DES-CBC/SHA1-96 IPSec test"""
         self.run_test()
@@ -1922,6 +2237,7 @@ class Test_openssl_ESNoff_ARoff_3DES_CBC_SHA1_96(RunTestIpsecEspAll):
 
 class Test_openssl_ESNoff_ARoff_NONE_SHA1_96(RunTestIpsecEspAll):
     """openssl ESNoff ARoff NONE/SHA1-96 IPSec test"""
 
 class Test_openssl_ESNoff_ARoff_NONE_SHA1_96(RunTestIpsecEspAll):
     """openssl ESNoff ARoff NONE/SHA1-96 IPSec test"""
+
     def test_ipsec(self):
         """openssl ESNoff ARoff NONE/SHA1-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """openssl ESNoff ARoff NONE/SHA1-96 IPSec test"""
         self.run_test()
@@ -1929,6 +2245,7 @@ class Test_openssl_ESNoff_ARoff_NONE_SHA1_96(RunTestIpsecEspAll):
 
 class Test_openssl_ESNoff_ARoff_AES_CTR_128_SHA1_96(RunTestIpsecEspAll):
     """openssl ESNoff ARoff AES-CTR-128/SHA1-96 IPSec test"""
 
 class Test_openssl_ESNoff_ARoff_AES_CTR_128_SHA1_96(RunTestIpsecEspAll):
     """openssl ESNoff ARoff AES-CTR-128/SHA1-96 IPSec test"""
+
     def test_ipsec(self):
         """openssl ESNoff ARoff AES-CTR-128/SHA1-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """openssl ESNoff ARoff AES-CTR-128/SHA1-96 IPSec test"""
         self.run_test()
@@ -1936,6 +2253,7 @@ class Test_openssl_ESNoff_ARoff_AES_CTR_128_SHA1_96(RunTestIpsecEspAll):
 
 class Test_openssl_ESNoff_ARoff_AES_CTR_192_SHA1_96(RunTestIpsecEspAll):
     """openssl ESNoff ARoff AES-CTR-192/SHA1-96 IPSec test"""
 
 class Test_openssl_ESNoff_ARoff_AES_CTR_192_SHA1_96(RunTestIpsecEspAll):
     """openssl ESNoff ARoff AES-CTR-192/SHA1-96 IPSec test"""
+
     def test_ipsec(self):
         """openssl ESNoff ARoff AES-CTR-192/SHA1-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """openssl ESNoff ARoff AES-CTR-192/SHA1-96 IPSec test"""
         self.run_test()
@@ -1943,6 +2261,7 @@ class Test_openssl_ESNoff_ARoff_AES_CTR_192_SHA1_96(RunTestIpsecEspAll):
 
 class Test_openssl_ESNoff_ARoff_AES_CTR_256_SHA1_96(RunTestIpsecEspAll):
     """openssl ESNoff ARoff AES-CTR-256/SHA1-96 IPSec test"""
 
 class Test_openssl_ESNoff_ARoff_AES_CTR_256_SHA1_96(RunTestIpsecEspAll):
     """openssl ESNoff ARoff AES-CTR-256/SHA1-96 IPSec test"""
+
     def test_ipsec(self):
         """openssl ESNoff ARoff AES-CTR-256/SHA1-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """openssl ESNoff ARoff AES-CTR-256/SHA1-96 IPSec test"""
         self.run_test()
@@ -1950,6 +2269,7 @@ class Test_openssl_ESNoff_ARoff_AES_CTR_256_SHA1_96(RunTestIpsecEspAll):
 
 class Test_async_ESNon_ARon_AES_GCM_128_NONE(RunTestIpsecEspAll):
     """async ESNon ARon AES-GCM-128/NONE IPSec test"""
 
 class Test_async_ESNon_ARon_AES_GCM_128_NONE(RunTestIpsecEspAll):
     """async ESNon ARon AES-GCM-128/NONE IPSec test"""
+
     def test_ipsec(self):
         """async ESNon ARon AES-GCM-128/NONE IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """async ESNon ARon AES-GCM-128/NONE IPSec test"""
         self.run_test()
@@ -1957,6 +2277,7 @@ class Test_async_ESNon_ARon_AES_GCM_128_NONE(RunTestIpsecEspAll):
 
 class Test_async_ESNon_ARon_AES_GCM_192_NONE(RunTestIpsecEspAll):
     """async ESNon ARon AES-GCM-192/NONE IPSec test"""
 
 class Test_async_ESNon_ARon_AES_GCM_192_NONE(RunTestIpsecEspAll):
     """async ESNon ARon AES-GCM-192/NONE IPSec test"""
+
     def test_ipsec(self):
         """async ESNon ARon AES-GCM-192/NONE IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """async ESNon ARon AES-GCM-192/NONE IPSec test"""
         self.run_test()
@@ -1964,6 +2285,7 @@ class Test_async_ESNon_ARon_AES_GCM_192_NONE(RunTestIpsecEspAll):
 
 class Test_async_ESNon_ARon_AES_GCM_256_NONE(RunTestIpsecEspAll):
     """async ESNon ARon AES-GCM-256/NONE IPSec test"""
 
 class Test_async_ESNon_ARon_AES_GCM_256_NONE(RunTestIpsecEspAll):
     """async ESNon ARon AES-GCM-256/NONE IPSec test"""
+
     def test_ipsec(self):
         """async ESNon ARon AES-GCM-256/NONE IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """async ESNon ARon AES-GCM-256/NONE IPSec test"""
         self.run_test()
@@ -1971,6 +2293,7 @@ class Test_async_ESNon_ARon_AES_GCM_256_NONE(RunTestIpsecEspAll):
 
 class Test_async_ESNon_ARon_AES_CBC_192_SHA1_96(RunTestIpsecEspAll):
     """async ESNon ARon AES-CBC-192/SHA1-96 IPSec test"""
 
 class Test_async_ESNon_ARon_AES_CBC_192_SHA1_96(RunTestIpsecEspAll):
     """async ESNon ARon AES-CBC-192/SHA1-96 IPSec test"""
+
     def test_ipsec(self):
         """async ESNon ARon AES-CBC-192/SHA1-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """async ESNon ARon AES-CBC-192/SHA1-96 IPSec test"""
         self.run_test()
@@ -1978,6 +2301,7 @@ class Test_async_ESNon_ARon_AES_CBC_192_SHA1_96(RunTestIpsecEspAll):
 
 class Test_async_ESNon_ARon_AES_CBC_256_SHA1_96(RunTestIpsecEspAll):
     """async ESNon ARon AES-CBC-256/SHA1-96 IPSec test"""
 
 class Test_async_ESNon_ARon_AES_CBC_256_SHA1_96(RunTestIpsecEspAll):
     """async ESNon ARon AES-CBC-256/SHA1-96 IPSec test"""
+
     def test_ipsec(self):
         """async ESNon ARon AES-CBC-256/SHA1-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """async ESNon ARon AES-CBC-256/SHA1-96 IPSec test"""
         self.run_test()
@@ -1985,6 +2309,7 @@ class Test_async_ESNon_ARon_AES_CBC_256_SHA1_96(RunTestIpsecEspAll):
 
 class Test_async_ESNon_ARoff_AES_GCM_128_NONE(RunTestIpsecEspAll):
     """async ESNon ARoff AES-GCM-128/NONE IPSec test"""
 
 class Test_async_ESNon_ARoff_AES_GCM_128_NONE(RunTestIpsecEspAll):
     """async ESNon ARoff AES-GCM-128/NONE IPSec test"""
+
     def test_ipsec(self):
         """async ESNon ARoff AES-GCM-128/NONE IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """async ESNon ARoff AES-GCM-128/NONE IPSec test"""
         self.run_test()
@@ -1992,6 +2317,7 @@ class Test_async_ESNon_ARoff_AES_GCM_128_NONE(RunTestIpsecEspAll):
 
 class Test_async_ESNon_ARoff_AES_GCM_192_NONE(RunTestIpsecEspAll):
     """async ESNon ARoff AES-GCM-192/NONE IPSec test"""
 
 class Test_async_ESNon_ARoff_AES_GCM_192_NONE(RunTestIpsecEspAll):
     """async ESNon ARoff AES-GCM-192/NONE IPSec test"""
+
     def test_ipsec(self):
         """async ESNon ARoff AES-GCM-192/NONE IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """async ESNon ARoff AES-GCM-192/NONE IPSec test"""
         self.run_test()
@@ -1999,6 +2325,7 @@ class Test_async_ESNon_ARoff_AES_GCM_192_NONE(RunTestIpsecEspAll):
 
 class Test_async_ESNon_ARoff_AES_GCM_256_NONE(RunTestIpsecEspAll):
     """async ESNon ARoff AES-GCM-256/NONE IPSec test"""
 
 class Test_async_ESNon_ARoff_AES_GCM_256_NONE(RunTestIpsecEspAll):
     """async ESNon ARoff AES-GCM-256/NONE IPSec test"""
+
     def test_ipsec(self):
         """async ESNon ARoff AES-GCM-256/NONE IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """async ESNon ARoff AES-GCM-256/NONE IPSec test"""
         self.run_test()
@@ -2006,6 +2333,7 @@ class Test_async_ESNon_ARoff_AES_GCM_256_NONE(RunTestIpsecEspAll):
 
 class Test_async_ESNon_ARoff_AES_CBC_192_SHA1_96(RunTestIpsecEspAll):
     """async ESNon ARoff AES-CBC-192/SHA1-96 IPSec test"""
 
 class Test_async_ESNon_ARoff_AES_CBC_192_SHA1_96(RunTestIpsecEspAll):
     """async ESNon ARoff AES-CBC-192/SHA1-96 IPSec test"""
+
     def test_ipsec(self):
         """async ESNon ARoff AES-CBC-192/SHA1-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """async ESNon ARoff AES-CBC-192/SHA1-96 IPSec test"""
         self.run_test()
@@ -2013,6 +2341,7 @@ class Test_async_ESNon_ARoff_AES_CBC_192_SHA1_96(RunTestIpsecEspAll):
 
 class Test_async_ESNon_ARoff_AES_CBC_256_SHA1_96(RunTestIpsecEspAll):
     """async ESNon ARoff AES-CBC-256/SHA1-96 IPSec test"""
 
 class Test_async_ESNon_ARoff_AES_CBC_256_SHA1_96(RunTestIpsecEspAll):
     """async ESNon ARoff AES-CBC-256/SHA1-96 IPSec test"""
+
     def test_ipsec(self):
         """async ESNon ARoff AES-CBC-256/SHA1-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """async ESNon ARoff AES-CBC-256/SHA1-96 IPSec test"""
         self.run_test()
@@ -2020,6 +2349,7 @@ class Test_async_ESNon_ARoff_AES_CBC_256_SHA1_96(RunTestIpsecEspAll):
 
 class Test_async_ESNoff_ARon_AES_GCM_128_NONE(RunTestIpsecEspAll):
     """async ESNoff ARon AES-GCM-128/NONE IPSec test"""
 
 class Test_async_ESNoff_ARon_AES_GCM_128_NONE(RunTestIpsecEspAll):
     """async ESNoff ARon AES-GCM-128/NONE IPSec test"""
+
     def test_ipsec(self):
         """async ESNoff ARon AES-GCM-128/NONE IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """async ESNoff ARon AES-GCM-128/NONE IPSec test"""
         self.run_test()
@@ -2027,6 +2357,7 @@ class Test_async_ESNoff_ARon_AES_GCM_128_NONE(RunTestIpsecEspAll):
 
 class Test_async_ESNoff_ARon_AES_GCM_192_NONE(RunTestIpsecEspAll):
     """async ESNoff ARon AES-GCM-192/NONE IPSec test"""
 
 class Test_async_ESNoff_ARon_AES_GCM_192_NONE(RunTestIpsecEspAll):
     """async ESNoff ARon AES-GCM-192/NONE IPSec test"""
+
     def test_ipsec(self):
         """async ESNoff ARon AES-GCM-192/NONE IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """async ESNoff ARon AES-GCM-192/NONE IPSec test"""
         self.run_test()
@@ -2034,6 +2365,7 @@ class Test_async_ESNoff_ARon_AES_GCM_192_NONE(RunTestIpsecEspAll):
 
 class Test_async_ESNoff_ARon_AES_GCM_256_NONE(RunTestIpsecEspAll):
     """async ESNoff ARon AES-GCM-256/NONE IPSec test"""
 
 class Test_async_ESNoff_ARon_AES_GCM_256_NONE(RunTestIpsecEspAll):
     """async ESNoff ARon AES-GCM-256/NONE IPSec test"""
+
     def test_ipsec(self):
         """async ESNoff ARon AES-GCM-256/NONE IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """async ESNoff ARon AES-GCM-256/NONE IPSec test"""
         self.run_test()
@@ -2041,6 +2373,7 @@ class Test_async_ESNoff_ARon_AES_GCM_256_NONE(RunTestIpsecEspAll):
 
 class Test_async_ESNoff_ARon_AES_CBC_192_SHA1_96(RunTestIpsecEspAll):
     """async ESNoff ARon AES-CBC-192/SHA1-96 IPSec test"""
 
 class Test_async_ESNoff_ARon_AES_CBC_192_SHA1_96(RunTestIpsecEspAll):
     """async ESNoff ARon AES-CBC-192/SHA1-96 IPSec test"""
+
     def test_ipsec(self):
         """async ESNoff ARon AES-CBC-192/SHA1-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """async ESNoff ARon AES-CBC-192/SHA1-96 IPSec test"""
         self.run_test()
@@ -2048,6 +2381,7 @@ class Test_async_ESNoff_ARon_AES_CBC_192_SHA1_96(RunTestIpsecEspAll):
 
 class Test_async_ESNoff_ARon_AES_CBC_256_SHA1_96(RunTestIpsecEspAll):
     """async ESNoff ARon AES-CBC-256/SHA1-96 IPSec test"""
 
 class Test_async_ESNoff_ARon_AES_CBC_256_SHA1_96(RunTestIpsecEspAll):
     """async ESNoff ARon AES-CBC-256/SHA1-96 IPSec test"""
+
     def test_ipsec(self):
         """async ESNoff ARon AES-CBC-256/SHA1-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """async ESNoff ARon AES-CBC-256/SHA1-96 IPSec test"""
         self.run_test()
@@ -2055,6 +2389,7 @@ class Test_async_ESNoff_ARon_AES_CBC_256_SHA1_96(RunTestIpsecEspAll):
 
 class Test_async_ESNoff_ARoff_AES_GCM_128_NONE(RunTestIpsecEspAll):
     """async ESNoff ARoff AES-GCM-128/NONE IPSec test"""
 
 class Test_async_ESNoff_ARoff_AES_GCM_128_NONE(RunTestIpsecEspAll):
     """async ESNoff ARoff AES-GCM-128/NONE IPSec test"""
+
     def test_ipsec(self):
         """async ESNoff ARoff AES-GCM-128/NONE IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """async ESNoff ARoff AES-GCM-128/NONE IPSec test"""
         self.run_test()
@@ -2062,6 +2397,7 @@ class Test_async_ESNoff_ARoff_AES_GCM_128_NONE(RunTestIpsecEspAll):
 
 class Test_async_ESNoff_ARoff_AES_GCM_192_NONE(RunTestIpsecEspAll):
     """async ESNoff ARoff AES-GCM-192/NONE IPSec test"""
 
 class Test_async_ESNoff_ARoff_AES_GCM_192_NONE(RunTestIpsecEspAll):
     """async ESNoff ARoff AES-GCM-192/NONE IPSec test"""
+
     def test_ipsec(self):
         """async ESNoff ARoff AES-GCM-192/NONE IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """async ESNoff ARoff AES-GCM-192/NONE IPSec test"""
         self.run_test()
@@ -2069,6 +2405,7 @@ class Test_async_ESNoff_ARoff_AES_GCM_192_NONE(RunTestIpsecEspAll):
 
 class Test_async_ESNoff_ARoff_AES_GCM_256_NONE(RunTestIpsecEspAll):
     """async ESNoff ARoff AES-GCM-256/NONE IPSec test"""
 
 class Test_async_ESNoff_ARoff_AES_GCM_256_NONE(RunTestIpsecEspAll):
     """async ESNoff ARoff AES-GCM-256/NONE IPSec test"""
+
     def test_ipsec(self):
         """async ESNoff ARoff AES-GCM-256/NONE IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """async ESNoff ARoff AES-GCM-256/NONE IPSec test"""
         self.run_test()
@@ -2076,6 +2413,7 @@ class Test_async_ESNoff_ARoff_AES_GCM_256_NONE(RunTestIpsecEspAll):
 
 class Test_async_ESNoff_ARoff_AES_CBC_192_SHA1_96(RunTestIpsecEspAll):
     """async ESNoff ARoff AES-CBC-192/SHA1-96 IPSec test"""
 
 class Test_async_ESNoff_ARoff_AES_CBC_192_SHA1_96(RunTestIpsecEspAll):
     """async ESNoff ARoff AES-CBC-192/SHA1-96 IPSec test"""
+
     def test_ipsec(self):
         """async ESNoff ARoff AES-CBC-192/SHA1-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """async ESNoff ARoff AES-CBC-192/SHA1-96 IPSec test"""
         self.run_test()
@@ -2083,6 +2421,7 @@ class Test_async_ESNoff_ARoff_AES_CBC_192_SHA1_96(RunTestIpsecEspAll):
 
 class Test_async_ESNoff_ARoff_AES_CBC_256_SHA1_96(RunTestIpsecEspAll):
     """async ESNoff ARoff AES-CBC-256/SHA1-96 IPSec test"""
 
 class Test_async_ESNoff_ARoff_AES_CBC_256_SHA1_96(RunTestIpsecEspAll):
     """async ESNoff ARoff AES-CBC-256/SHA1-96 IPSec test"""
+
     def test_ipsec(self):
         """async ESNoff ARoff AES-CBC-256/SHA1-96 IPSec test"""
         self.run_test()
     def test_ipsec(self):
         """async ESNoff ARoff AES-CBC-256/SHA1-96 IPSec test"""
         self.run_test()
index b7ccb2b..64a2725 100644 (file)
@@ -9,15 +9,14 @@ from scapy.layers.ipsec import SecurityAssociation, ESP
 
 from util import ppp, ppc
 from template_ipsec import TemplateIpsec
 
 from util import ppp, ppc
 from template_ipsec import TemplateIpsec
-from vpp_ipsec import VppIpsecSA, VppIpsecSpd, VppIpsecSpdEntry,\
-        VppIpsecSpdItfBinding
+from vpp_ipsec import VppIpsecSA, VppIpsecSpd, VppIpsecSpdEntry, VppIpsecSpdItfBinding
 from vpp_ip_route import VppIpRoute, VppRoutePath
 from vpp_ip import DpoProto
 from vpp_papi import VppEnum
 
 
 class IPSecNATTestCase(TemplateIpsec):
 from vpp_ip_route import VppIpRoute, VppRoutePath
 from vpp_ip import DpoProto
 from vpp_papi import VppEnum
 
 
 class IPSecNATTestCase(TemplateIpsec):
-    """ IPSec/NAT
+    """IPSec/NAT
 
     TUNNEL MODE::
 
 
     TUNNEL MODE::
 
@@ -53,18 +52,19 @@ class IPSecNATTestCase(TemplateIpsec):
 
         self.tun_spd = VppIpsecSpd(self, self.tun_spd_id)
         self.tun_spd.add_vpp_config()
 
         self.tun_spd = VppIpsecSpd(self, self.tun_spd_id)
         self.tun_spd.add_vpp_config()
-        VppIpsecSpdItfBinding(self, self.tun_spd,
-                              self.tun_if).add_vpp_config()
+        VppIpsecSpdItfBinding(self, self.tun_spd, self.tun_if).add_vpp_config()
 
         p = self.ipv4_params
         self.config_esp_tun(p)
         self.logger.info(self.vapi.ppcli("show ipsec all"))
 
         d = DpoProto.DPO_PROTO_IP6 if p.is_ipv6 else DpoProto.DPO_PROTO_IP4
 
         p = self.ipv4_params
         self.config_esp_tun(p)
         self.logger.info(self.vapi.ppcli("show ipsec all"))
 
         d = DpoProto.DPO_PROTO_IP6 if p.is_ipv6 else DpoProto.DPO_PROTO_IP4
-        VppIpRoute(self,  p.remote_tun_if_host, p.addr_len,
-                   [VppRoutePath(self.tun_if.remote_addr[p.addr_type],
-                                 0xffffffff,
-                                 proto=d)]).add_vpp_config()
+        VppIpRoute(
+            self,
+            p.remote_tun_if_host,
+            p.addr_len,
+            [VppRoutePath(self.tun_if.remote_addr[p.addr_type], 0xFFFFFFFF, proto=d)],
+        ).add_vpp_config()
 
     def tearDown(self):
         super(IPSecNATTestCase, self).tearDown()
 
     def tearDown(self):
         super(IPSecNATTestCase, self).tearDown()
@@ -72,65 +72,84 @@ class IPSecNATTestCase(TemplateIpsec):
     def create_stream_plain(self, src_mac, dst_mac, src_ip, dst_ip):
         return [
             # TCP
     def create_stream_plain(self, src_mac, dst_mac, src_ip, dst_ip):
         return [
             # TCP
-            Ether(src=src_mac, dst=dst_mac) /
-            IP(src=src_ip, dst=dst_ip) /
-            TCP(sport=self.tcp_port_in, dport=20),
+            Ether(src=src_mac, dst=dst_mac)
+            / IP(src=src_ip, dst=dst_ip)
+            TCP(sport=self.tcp_port_in, dport=20),
             # UDP
             # UDP
-            Ether(src=src_mac, dst=dst_mac) /
-            IP(src=src_ip, dst=dst_ip) /
-            UDP(sport=self.udp_port_in, dport=20),
+            Ether(src=src_mac, dst=dst_mac)
+            / IP(src=src_ip, dst=dst_ip)
+            UDP(sport=self.udp_port_in, dport=20),
             # ICMP
             # ICMP
-            Ether(src=src_mac, dst=dst_mac) /
-            IP(src=src_ip, dst=dst_ip) /
-            ICMP(id=self.icmp_id_in, type='echo-request')
+            Ether(src=src_mac, dst=dst_mac)
+            / IP(src=src_ip, dst=dst_ip)
+            / ICMP(id=self.icmp_id_in, type="echo-request"),
         ]
 
     def create_stream_encrypted(self, src_mac, dst_mac, src_ip, dst_ip, sa):
         return [
             # TCP
         ]
 
     def create_stream_encrypted(self, src_mac, dst_mac, src_ip, dst_ip, sa):
         return [
             # TCP
-            Ether(src=src_mac, dst=dst_mac) /
-            sa.encrypt(IP(src=src_ip, dst=dst_ip) /
-                       TCP(dport=self.tcp_port_out, sport=20)),
+            Ether(src=src_mac, dst=dst_mac)
+            / sa.encrypt(
+                IP(src=src_ip, dst=dst_ip) / TCP(dport=self.tcp_port_out, sport=20)
+            ),
             # UDP
             # UDP
-            Ether(src=src_mac, dst=dst_mac) /
-            sa.encrypt(IP(src=src_ip, dst=dst_ip) /
-                       UDP(dport=self.udp_port_out, sport=20)),
+            Ether(src=src_mac, dst=dst_mac)
+            / sa.encrypt(
+                IP(src=src_ip, dst=dst_ip) / UDP(dport=self.udp_port_out, sport=20)
+            ),
             # ICMP
             # ICMP
-            Ether(src=src_mac, dst=dst_mac) /
-            sa.encrypt(IP(src=src_ip, dst=dst_ip) /
-                       ICMP(id=self.icmp_id_out, type='echo-request'))
+            Ether(src=src_mac, dst=dst_mac)
+            / sa.encrypt(
+                IP(src=src_ip, dst=dst_ip)
+                / ICMP(id=self.icmp_id_out, type="echo-request")
+            ),
         ]
 
     def verify_capture_plain(self, capture):
         for packet in capture:
             try:
                 self.assert_packet_checksums_valid(packet)
         ]
 
     def verify_capture_plain(self, capture):
         for packet in capture:
             try:
                 self.assert_packet_checksums_valid(packet)
-                self.assert_equal(packet[IP].src, self.tun_if.remote_ip4,
-                                  "decrypted packet source address")
-                self.assert_equal(packet[IP].dst, self.pg1.remote_ip4,
-                                  "decrypted packet destination address")
+                self.assert_equal(
+                    packet[IP].src,
+                    self.tun_if.remote_ip4,
+                    "decrypted packet source address",
+                )
+                self.assert_equal(
+                    packet[IP].dst,
+                    self.pg1.remote_ip4,
+                    "decrypted packet destination address",
+                )
                 if packet.haslayer(TCP):
                     self.assertFalse(
                         packet.haslayer(UDP),
                 if packet.haslayer(TCP):
                     self.assertFalse(
                         packet.haslayer(UDP),
-                        "unexpected UDP header in decrypted packet")
-                    self.assert_equal(packet[TCP].dport, self.tcp_port_in,
-                                      "decrypted packet TCP destination port")
+                        "unexpected UDP header in decrypted packet",
+                    )
+                    self.assert_equal(
+                        packet[TCP].dport,
+                        self.tcp_port_in,
+                        "decrypted packet TCP destination port",
+                    )
                 elif packet.haslayer(UDP):
                     if packet[UDP].payload:
                         self.assertFalse(
                             packet[UDP][1].haslayer(UDP),
                 elif packet.haslayer(UDP):
                     if packet[UDP].payload:
                         self.assertFalse(
                             packet[UDP][1].haslayer(UDP),
-                            "unexpected UDP header in decrypted packet")
-                    self.assert_equal(packet[UDP].dport, self.udp_port_in,
-                                      "decrypted packet UDP destination port")
+                            "unexpected UDP header in decrypted packet",
+                        )
+                    self.assert_equal(
+                        packet[UDP].dport,
+                        self.udp_port_in,
+                        "decrypted packet UDP destination port",
+                    )
                 else:
                     self.assertFalse(
                         packet.haslayer(UDP),
                 else:
                     self.assertFalse(
                         packet.haslayer(UDP),
-                        "unexpected UDP header in decrypted packet")
-                    self.assert_equal(packet[ICMP].id, self.icmp_id_in,
-                                      "decrypted packet ICMP ID")
+                        "unexpected UDP header in decrypted packet",
+                    )
+                    self.assert_equal(
+                        packet[ICMP].id, self.icmp_id_in, "decrypted packet ICMP ID"
+                    )
             except Exception:
             except Exception:
-                self.logger.error(
-                    ppp("Unexpected or invalid plain packet:", packet))
+                self.logger.error(ppp("Unexpected or invalid plain packet:", packet))
                 raise
 
     def verify_capture_encrypted(self, capture, sa):
                 raise
 
     def verify_capture_encrypted(self, capture, sa):
@@ -139,19 +158,25 @@ class IPSecNATTestCase(TemplateIpsec):
                 copy = packet.__class__(scapy.compat.raw(packet))
                 del copy[UDP].len
                 copy = packet.__class__(scapy.compat.raw(copy))
                 copy = packet.__class__(scapy.compat.raw(packet))
                 del copy[UDP].len
                 copy = packet.__class__(scapy.compat.raw(copy))
-                self.assert_equal(packet[UDP].len, copy[UDP].len,
-                                  "UDP header length")
+                self.assert_equal(packet[UDP].len, copy[UDP].len, "UDP header length")
                 self.assert_packet_checksums_valid(packet)
                 self.assertIn(ESP, packet[IP])
                 decrypt_pkt = sa.decrypt(packet[IP])
                 self.assert_packet_checksums_valid(decrypt_pkt)
                 self.assert_packet_checksums_valid(packet)
                 self.assertIn(ESP, packet[IP])
                 decrypt_pkt = sa.decrypt(packet[IP])
                 self.assert_packet_checksums_valid(decrypt_pkt)
-                self.assert_equal(decrypt_pkt[IP].src, self.pg1.remote_ip4,
-                                  "encrypted packet source address")
-                self.assert_equal(decrypt_pkt[IP].dst, self.tun_if.remote_ip4,
-                                  "encrypted packet destination address")
+                self.assert_equal(
+                    decrypt_pkt[IP].src,
+                    self.pg1.remote_ip4,
+                    "encrypted packet source address",
+                )
+                self.assert_equal(
+                    decrypt_pkt[IP].dst,
+                    self.tun_if.remote_ip4,
+                    "encrypted packet destination address",
+                )
             except Exception:
                 self.logger.error(
             except Exception:
                 self.logger.error(
-                    ppp("Unexpected or invalid encrypted packet:", packet))
+                    ppp("Unexpected or invalid encrypted packet:", packet)
+                )
                 raise
 
     def config_esp_tun(self, params):
                 raise
 
     def config_esp_tun(self, params):
@@ -166,104 +191,153 @@ class IPSecNATTestCase(TemplateIpsec):
         crypt_key = params.crypt_key
         addr_any = params.addr_any
         addr_bcast = params.addr_bcast
         crypt_key = params.crypt_key
         addr_any = params.addr_any
         addr_bcast = params.addr_bcast
-        flags = (VppEnum.vl_api_ipsec_sad_flags_t.
-                 IPSEC_API_SAD_FLAG_UDP_ENCAP)
+        flags = VppEnum.vl_api_ipsec_sad_flags_t.IPSEC_API_SAD_FLAG_UDP_ENCAP
         e = VppEnum.vl_api_ipsec_spd_action_t
 
         e = VppEnum.vl_api_ipsec_spd_action_t
 
-        VppIpsecSA(self, scapy_tun_sa_id, scapy_tun_spi,
-                   auth_algo_vpp_id, auth_key,
-                   crypt_algo_vpp_id, crypt_key,
-                   self.vpp_esp_protocol,
-                   self.pg1.remote_addr[addr_type],
-                   self.tun_if.remote_addr[addr_type],
-                   flags=flags).add_vpp_config()
-        VppIpsecSA(self, vpp_tun_sa_id, vpp_tun_spi,
-                   auth_algo_vpp_id, auth_key,
-                   crypt_algo_vpp_id, crypt_key,
-                   self.vpp_esp_protocol,
-                   self.tun_if.remote_addr[addr_type],
-                   self.pg1.remote_addr[addr_type],
-                   flags=flags).add_vpp_config()
+        VppIpsecSA(
+            self,
+            scapy_tun_sa_id,
+            scapy_tun_spi,
+            auth_algo_vpp_id,
+            auth_key,
+            crypt_algo_vpp_id,
+            crypt_key,
+            self.vpp_esp_protocol,
+            self.pg1.remote_addr[addr_type],
+            self.tun_if.remote_addr[addr_type],
+            flags=flags,
+        ).add_vpp_config()
+        VppIpsecSA(
+            self,
+            vpp_tun_sa_id,
+            vpp_tun_spi,
+            auth_algo_vpp_id,
+            auth_key,
+            crypt_algo_vpp_id,
+            crypt_key,
+            self.vpp_esp_protocol,
+            self.tun_if.remote_addr[addr_type],
+            self.pg1.remote_addr[addr_type],
+            flags=flags,
+        ).add_vpp_config()
 
 
-        VppIpsecSpdEntry(self, self.tun_spd, scapy_tun_sa_id,
-                         addr_any, addr_bcast,
-                         addr_any, addr_bcast,
-                         socket.IPPROTO_ESP).add_vpp_config()
-        VppIpsecSpdEntry(self, self.tun_spd, scapy_tun_sa_id,
-                         addr_any, addr_bcast,
-                         addr_any, addr_bcast,
-                         socket.IPPROTO_ESP,
-                         is_outbound=0).add_vpp_config()
-        VppIpsecSpdEntry(self, self.tun_spd, scapy_tun_sa_id,
-                         addr_any, addr_bcast,
-                         addr_any, addr_bcast,
-                         socket.IPPROTO_UDP,
-                         remote_port_start=4500,
-                         remote_port_stop=4500).add_vpp_config()
-        VppIpsecSpdEntry(self, self.tun_spd, scapy_tun_sa_id,
-                         addr_any, addr_bcast,
-                         addr_any, addr_bcast,
-                         socket.IPPROTO_UDP,
-                         remote_port_start=4500,
-                         remote_port_stop=4500,
-                         is_outbound=0).add_vpp_config()
-        VppIpsecSpdEntry(self, self.tun_spd, vpp_tun_sa_id,
-                         self.tun_if.remote_addr[addr_type],
-                         self.tun_if.remote_addr[addr_type],
-                         self.pg1.remote_addr[addr_type],
-                         self.pg1.remote_addr[addr_type],
-                         0, priority=10,
-                         policy=e.IPSEC_API_SPD_ACTION_PROTECT,
-                         is_outbound=0).add_vpp_config()
-        VppIpsecSpdEntry(self, self.tun_spd, scapy_tun_sa_id,
-                         self.pg1.remote_addr[addr_type],
-                         self.pg1.remote_addr[addr_type],
-                         self.tun_if.remote_addr[addr_type],
-                         self.tun_if.remote_addr[addr_type],
-                         0, policy=e.IPSEC_API_SPD_ACTION_PROTECT,
-                         priority=10).add_vpp_config()
+        VppIpsecSpdEntry(
+            self,
+            self.tun_spd,
+            scapy_tun_sa_id,
+            addr_any,
+            addr_bcast,
+            addr_any,
+            addr_bcast,
+            socket.IPPROTO_ESP,
+        ).add_vpp_config()
+        VppIpsecSpdEntry(
+            self,
+            self.tun_spd,
+            scapy_tun_sa_id,
+            addr_any,
+            addr_bcast,
+            addr_any,
+            addr_bcast,
+            socket.IPPROTO_ESP,
+            is_outbound=0,
+        ).add_vpp_config()
+        VppIpsecSpdEntry(
+            self,
+            self.tun_spd,
+            scapy_tun_sa_id,
+            addr_any,
+            addr_bcast,
+            addr_any,
+            addr_bcast,
+            socket.IPPROTO_UDP,
+            remote_port_start=4500,
+            remote_port_stop=4500,
+        ).add_vpp_config()
+        VppIpsecSpdEntry(
+            self,
+            self.tun_spd,
+            scapy_tun_sa_id,
+            addr_any,
+            addr_bcast,
+            addr_any,
+            addr_bcast,
+            socket.IPPROTO_UDP,
+            remote_port_start=4500,
+            remote_port_stop=4500,
+            is_outbound=0,
+        ).add_vpp_config()
+        VppIpsecSpdEntry(
+            self,
+            self.tun_spd,
+            vpp_tun_sa_id,
+            self.tun_if.remote_addr[addr_type],
+            self.tun_if.remote_addr[addr_type],
+            self.pg1.remote_addr[addr_type],
+            self.pg1.remote_addr[addr_type],
+            0,
+            priority=10,
+            policy=e.IPSEC_API_SPD_ACTION_PROTECT,
+            is_outbound=0,
+        ).add_vpp_config()
+        VppIpsecSpdEntry(
+            self,
+            self.tun_spd,
+            scapy_tun_sa_id,
+            self.pg1.remote_addr[addr_type],
+            self.pg1.remote_addr[addr_type],
+            self.tun_if.remote_addr[addr_type],
+            self.tun_if.remote_addr[addr_type],
+            0,
+            policy=e.IPSEC_API_SPD_ACTION_PROTECT,
+            priority=10,
+        ).add_vpp_config()
 
     def test_ipsec_nat_tun(self):
 
     def test_ipsec_nat_tun(self):
-        """ IPSec/NAT tunnel test case """
+        """IPSec/NAT tunnel test case"""
         p = self.ipv4_params
         p = self.ipv4_params
-        scapy_tun_sa = SecurityAssociation(ESP, spi=p.scapy_tun_spi,
-                                           crypt_algo=p.crypt_algo,
-                                           crypt_key=p.crypt_key,
-                                           auth_algo=p.auth_algo,
-                                           auth_key=p.auth_key,
-                                           tunnel_header=IP(
-                                               src=self.pg1.remote_ip4,
-                                               dst=self.tun_if.remote_ip4),
-                                           nat_t_header=UDP(
-                                               sport=4500,
-                                               dport=4500))
+        scapy_tun_sa = SecurityAssociation(
+            ESP,
+            spi=p.scapy_tun_spi,
+            crypt_algo=p.crypt_algo,
+            crypt_key=p.crypt_key,
+            auth_algo=p.auth_algo,
+            auth_key=p.auth_key,
+            tunnel_header=IP(src=self.pg1.remote_ip4, dst=self.tun_if.remote_ip4),
+            nat_t_header=UDP(sport=4500, dport=4500),
+        )
         # in2out - from private network to public
         pkts = self.create_stream_plain(
         # in2out - from private network to public
         pkts = self.create_stream_plain(
-            self.pg1.remote_mac, self.pg1.local_mac,
-            self.pg1.remote_ip4, self.tun_if.remote_ip4)
+            self.pg1.remote_mac,
+            self.pg1.local_mac,
+            self.pg1.remote_ip4,
+            self.tun_if.remote_ip4,
+        )
         self.pg1.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         capture = self.tun_if.get_capture(len(pkts))
         self.verify_capture_encrypted(capture, scapy_tun_sa)
 
         self.pg1.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         capture = self.tun_if.get_capture(len(pkts))
         self.verify_capture_encrypted(capture, scapy_tun_sa)
 
-        vpp_tun_sa = SecurityAssociation(ESP,
-                                         spi=p.vpp_tun_spi,
-                                         crypt_algo=p.crypt_algo,
-                                         crypt_key=p.crypt_key,
-                                         auth_algo=p.auth_algo,
-                                         auth_key=p.auth_key,
-                                         tunnel_header=IP(
-                                             src=self.tun_if.remote_ip4,
-                                             dst=self.pg1.remote_ip4),
-                                         nat_t_header=UDP(
-                                             sport=4500,
-                                             dport=4500))
+        vpp_tun_sa = SecurityAssociation(
+            ESP,
+            spi=p.vpp_tun_spi,
+            crypt_algo=p.crypt_algo,
+            crypt_key=p.crypt_key,
+            auth_algo=p.auth_algo,
+            auth_key=p.auth_key,
+            tunnel_header=IP(src=self.tun_if.remote_ip4, dst=self.pg1.remote_ip4),
+            nat_t_header=UDP(sport=4500, dport=4500),
+        )
 
         # out2in - from public network to private
         pkts = self.create_stream_encrypted(
 
         # out2in - from public network to private
         pkts = self.create_stream_encrypted(
-            self.tun_if.remote_mac, self.tun_if.local_mac,
-            self.tun_if.remote_ip4, self.pg1.remote_ip4, vpp_tun_sa)
+            self.tun_if.remote_mac,
+            self.tun_if.local_mac,
+            self.tun_if.remote_ip4,
+            self.pg1.remote_ip4,
+            vpp_tun_sa,
+        )
         self.logger.info(ppc("Sending packets:", pkts))
         self.tun_if.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
         self.logger.info(ppc("Sending packets:", pkts))
         self.tun_if.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
index 2d70d15..02ecb56 100644 (file)
@@ -12,16 +12,14 @@ class SpdFlowCacheInbound(SpdFlowCacheTemplate):
     @classmethod
     def setUpConstants(cls):
         super(SpdFlowCacheInbound, cls).setUpConstants()
     @classmethod
     def setUpConstants(cls):
         super(SpdFlowCacheInbound, cls).setUpConstants()
-        cls.vpp_cmdline.extend(["ipsec", "{",
-                                "ipv4-inbound-spd-flow-cache on",
-                                "}"])
-        cls.logger.info("VPP modified cmdline is %s" % " "
-                        .join(cls.vpp_cmdline))
+        cls.vpp_cmdline.extend(["ipsec", "{", "ipv4-inbound-spd-flow-cache on", "}"])
+        cls.logger.info("VPP modified cmdline is %s" % " ".join(cls.vpp_cmdline))
 
 
 class IPSec4SpdTestCaseBypass(SpdFlowCacheInbound):
     """ IPSec/IPv4 inbound: Policy mode test case with flow cache \
         (add bypass)"""
 
 
 class IPSec4SpdTestCaseBypass(SpdFlowCacheInbound):
     """ IPSec/IPv4 inbound: Policy mode test case with flow cache \
         (add bypass)"""
+
     def test_ipsec_spd_inbound_bypass(self):
         # In this test case, packets in IPv4 FWD path are configured
         # to go through IPSec inbound SPD policy lookup.
     def test_ipsec_spd_inbound_bypass(self):
         # In this test case, packets in IPv4 FWD path are configured
         # to go through IPSec inbound SPD policy lookup.
@@ -42,16 +40,34 @@ class IPSec4SpdTestCaseBypass(SpdFlowCacheInbound):
         # bypass rule should take precedence over discard rule,
         # even though it's lower priority
         policy_0 = self.spd_add_rem_policy(  # inbound, priority 10
         # bypass rule should take precedence over discard rule,
         # even though it's lower priority
         policy_0 = self.spd_add_rem_policy(  # inbound, priority 10
-            1, self.pg1, self.pg0, socket.IPPROTO_UDP,
-            is_out=0, priority=10, policy_type="bypass")
+            1,
+            self.pg1,
+            self.pg0,
+            socket.IPPROTO_UDP,
+            is_out=0,
+            priority=10,
+            policy_type="bypass",
+        )
         policy_1 = self.spd_add_rem_policy(  # inbound, priority 15
         policy_1 = self.spd_add_rem_policy(  # inbound, priority 15
-            1, self.pg1, self.pg0, socket.IPPROTO_UDP,
-            is_out=0, priority=15, policy_type="discard")
+            1,
+            self.pg1,
+            self.pg0,
+            socket.IPPROTO_UDP,
+            is_out=0,
+            priority=15,
+            policy_type="discard",
+        )
 
         # create output rule so we can capture forwarded packets
         policy_2 = self.spd_add_rem_policy(  # outbound, priority 10
 
         # create output rule so we can capture forwarded packets
         policy_2 = self.spd_add_rem_policy(  # outbound, priority 10
-            1, self.pg0, self.pg1, socket.IPPROTO_UDP,
-            is_out=1, priority=10, policy_type="bypass")
+            1,
+            self.pg0,
+            self.pg1,
+            socket.IPPROTO_UDP,
+            is_out=1,
+            priority=10,
+            policy_type="bypass",
+        )
 
         # check flow cache is empty before sending traffic
         self.verify_num_inbound_flow_cache_entries(0)
 
         # check flow cache is empty before sending traffic
         self.verify_num_inbound_flow_cache_entries(0)
@@ -85,6 +101,7 @@ class IPSec4SpdTestCaseBypass(SpdFlowCacheInbound):
 class IPSec4SpdTestCaseDiscard(SpdFlowCacheInbound):
     """ IPSec/IPv4 inbound: Policy mode test case with flow cache \
         (add discard)"""
 class IPSec4SpdTestCaseDiscard(SpdFlowCacheInbound):
     """ IPSec/IPv4 inbound: Policy mode test case with flow cache \
         (add discard)"""
+
     def test_ipsec_spd_inbound_discard(self):
         # In this test case, packets in IPv4 FWD path are configured
         # to go through IPSec inbound SPD policy lookup.
     def test_ipsec_spd_inbound_discard(self):
         # In this test case, packets in IPv4 FWD path are configured
         # to go through IPSec inbound SPD policy lookup.
@@ -96,13 +113,25 @@ class IPSec4SpdTestCaseDiscard(SpdFlowCacheInbound):
 
         # create input rule
         policy_0 = self.spd_add_rem_policy(  # inbound, priority 10
 
         # create input rule
         policy_0 = self.spd_add_rem_policy(  # inbound, priority 10
-            1, self.pg1, self.pg0, socket.IPPROTO_UDP,
-            is_out=0, priority=10, policy_type="discard")
+            1,
+            self.pg1,
+            self.pg0,
+            socket.IPPROTO_UDP,
+            is_out=0,
+            priority=10,
+            policy_type="discard",
+        )
 
         # create output rule so we can capture forwarded packets
         policy_1 = self.spd_add_rem_policy(  # outbound, priority 10
 
         # create output rule so we can capture forwarded packets
         policy_1 = self.spd_add_rem_policy(  # outbound, priority 10
-            1, self.pg0, self.pg1, socket.IPPROTO_UDP,
-            is_out=1, priority=10, policy_type="bypass")
+            1,
+            self.pg0,
+            self.pg1,
+            socket.IPPROTO_UDP,
+            is_out=1,
+            priority=10,
+            policy_type="bypass",
+        )
 
         # check flow cache is empty before sending traffic
         self.verify_num_inbound_flow_cache_entries(0)
 
         # check flow cache is empty before sending traffic
         self.verify_num_inbound_flow_cache_entries(0)
@@ -124,6 +153,7 @@ class IPSec4SpdTestCaseDiscard(SpdFlowCacheInbound):
 class IPSec4SpdTestCaseRemove(SpdFlowCacheInbound):
     """ IPSec/IPv4 inbound: Policy mode test case with flow cache \
         (remove bypass)"""
 class IPSec4SpdTestCaseRemove(SpdFlowCacheInbound):
     """ IPSec/IPv4 inbound: Policy mode test case with flow cache \
         (remove bypass)"""
+
     def test_ipsec_spd_inbound_remove(self):
         # In this test case, packets in IPv4 FWD path are configured
         # to go through IPSec inbound SPD policy lookup.
     def test_ipsec_spd_inbound_remove(self):
         # In this test case, packets in IPv4 FWD path are configured
         # to go through IPSec inbound SPD policy lookup.
@@ -147,16 +177,34 @@ class IPSec4SpdTestCaseRemove(SpdFlowCacheInbound):
         # bypass rule should take precedence over discard rule,
         # even though it's lower priority
         policy_0 = self.spd_add_rem_policy(  # inbound, priority 10
         # bypass rule should take precedence over discard rule,
         # even though it's lower priority
         policy_0 = self.spd_add_rem_policy(  # inbound, priority 10
-            1, self.pg1, self.pg0, socket.IPPROTO_UDP,
-            is_out=0, priority=10, policy_type="bypass")
+            1,
+            self.pg1,
+            self.pg0,
+            socket.IPPROTO_UDP,
+            is_out=0,
+            priority=10,
+            policy_type="bypass",
+        )
         policy_1 = self.spd_add_rem_policy(  # inbound, priority 15
         policy_1 = self.spd_add_rem_policy(  # inbound, priority 15
-            1, self.pg1, self.pg0, socket.IPPROTO_UDP,
-            is_out=0, priority=15, policy_type="discard")
+            1,
+            self.pg1,
+            self.pg0,
+            socket.IPPROTO_UDP,
+            is_out=0,
+            priority=15,
+            policy_type="discard",
+        )
 
         # create output rule so we can capture forwarded packets
         policy_2 = self.spd_add_rem_policy(  # outbound, priority 10
 
         # create output rule so we can capture forwarded packets
         policy_2 = self.spd_add_rem_policy(  # outbound, priority 10
-            1, self.pg0, self.pg1, socket.IPPROTO_UDP,
-            is_out=1, priority=10, policy_type="bypass")
+            1,
+            self.pg0,
+            self.pg1,
+            socket.IPPROTO_UDP,
+            is_out=1,
+            priority=10,
+            policy_type="bypass",
+        )
 
         # check flow cache is empty before sending traffic
         self.verify_num_inbound_flow_cache_entries(0)
 
         # check flow cache is empty before sending traffic
         self.verify_num_inbound_flow_cache_entries(0)
@@ -188,9 +236,15 @@ class IPSec4SpdTestCaseRemove(SpdFlowCacheInbound):
 
         # remove the input bypass rule
         self.spd_add_rem_policy(  # inbound, priority 10
 
         # remove the input bypass rule
         self.spd_add_rem_policy(  # inbound, priority 10
-            1, self.pg1, self.pg0, socket.IPPROTO_UDP,
-            is_out=0, priority=10, policy_type="bypass",
-            remove=True)
+            1,
+            self.pg1,
+            self.pg0,
+            socket.IPPROTO_UDP,
+            is_out=0,
+            priority=10,
+            policy_type="bypass",
+            remove=True,
+        )
         # verify flow cache counter has been reset by rule removal
         self.verify_num_inbound_flow_cache_entries(0)
 
         # verify flow cache counter has been reset by rule removal
         self.verify_num_inbound_flow_cache_entries(0)
 
@@ -213,6 +267,7 @@ class IPSec4SpdTestCaseRemove(SpdFlowCacheInbound):
 class IPSec4SpdTestCaseReadd(SpdFlowCacheInbound):
     """ IPSec/IPv4 inbound: Policy mode test case with flow cache \
         (add, remove, re-add bypass)"""
 class IPSec4SpdTestCaseReadd(SpdFlowCacheInbound):
     """ IPSec/IPv4 inbound: Policy mode test case with flow cache \
         (add, remove, re-add bypass)"""
+
     def test_ipsec_spd_inbound_readd(self):
         # In this test case, packets in IPv4 FWD path are configured
         # to go through IPSec inbound SPD policy lookup.
     def test_ipsec_spd_inbound_readd(self):
         # In this test case, packets in IPv4 FWD path are configured
         # to go through IPSec inbound SPD policy lookup.
@@ -239,16 +294,34 @@ class IPSec4SpdTestCaseReadd(SpdFlowCacheInbound):
         # bypass rule should take precedence over discard rule,
         # even though it's lower priority
         policy_0 = self.spd_add_rem_policy(  # inbound, priority 10
         # bypass rule should take precedence over discard rule,
         # even though it's lower priority
         policy_0 = self.spd_add_rem_policy(  # inbound, priority 10
-            1, self.pg1, self.pg0, socket.IPPROTO_UDP,
-            is_out=0, priority=10, policy_type="bypass")
+            1,
+            self.pg1,
+            self.pg0,
+            socket.IPPROTO_UDP,
+            is_out=0,
+            priority=10,
+            policy_type="bypass",
+        )
         policy_1 = self.spd_add_rem_policy(  # inbound, priority 15
         policy_1 = self.spd_add_rem_policy(  # inbound, priority 15
-            1, self.pg1, self.pg0, socket.IPPROTO_UDP,
-            is_out=0, priority=15, policy_type="discard")
+            1,
+            self.pg1,
+            self.pg0,
+            socket.IPPROTO_UDP,
+            is_out=0,
+            priority=15,
+            policy_type="discard",
+        )
 
         # create output rule so we can capture forwarded packets
         policy_2 = self.spd_add_rem_policy(  # outbound, priority 10
 
         # create output rule so we can capture forwarded packets
         policy_2 = self.spd_add_rem_policy(  # outbound, priority 10
-            1, self.pg0, self.pg1, socket.IPPROTO_UDP,
-            is_out=1, priority=10, policy_type="bypass")
+            1,
+            self.pg0,
+            self.pg1,
+            socket.IPPROTO_UDP,
+            is_out=1,
+            priority=10,
+            policy_type="bypass",
+        )
 
         # check flow cache is empty before sending traffic
         self.verify_num_inbound_flow_cache_entries(0)
 
         # check flow cache is empty before sending traffic
         self.verify_num_inbound_flow_cache_entries(0)
@@ -280,9 +353,15 @@ class IPSec4SpdTestCaseReadd(SpdFlowCacheInbound):
 
         # remove the input bypass rule
         self.spd_add_rem_policy(  # inbound, priority 10
 
         # remove the input bypass rule
         self.spd_add_rem_policy(  # inbound, priority 10
-            1, self.pg1, self.pg0, socket.IPPROTO_UDP,
-            is_out=0, priority=10, policy_type="bypass",
-            remove=True)
+            1,
+            self.pg1,
+            self.pg0,
+            socket.IPPROTO_UDP,
+            is_out=0,
+            priority=10,
+            policy_type="bypass",
+            remove=True,
+        )
         # verify flow cache counter has been reset by rule removal
         self.verify_num_inbound_flow_cache_entries(0)
 
         # verify flow cache counter has been reset by rule removal
         self.verify_num_inbound_flow_cache_entries(0)
 
@@ -303,8 +382,14 @@ class IPSec4SpdTestCaseReadd(SpdFlowCacheInbound):
 
         # readd the input bypass rule
         policy_0 = self.spd_add_rem_policy(  # inbound, priority 10
 
         # readd the input bypass rule
         policy_0 = self.spd_add_rem_policy(  # inbound, priority 10
-            1, self.pg1, self.pg0, socket.IPPROTO_UDP,
-            is_out=0, priority=10, policy_type="bypass")
+            1,
+            self.pg1,
+            self.pg0,
+            socket.IPPROTO_UDP,
+            is_out=0,
+            priority=10,
+            policy_type="bypass",
+        )
         # verify flow cache counter has been reset by rule addition
         self.verify_num_inbound_flow_cache_entries(0)
 
         # verify flow cache counter has been reset by rule addition
         self.verify_num_inbound_flow_cache_entries(0)
 
@@ -327,7 +412,7 @@ class IPSec4SpdTestCaseReadd(SpdFlowCacheInbound):
         # verify all policies matched the expected number of times
         self.verify_policy_match(pkt_count, policy_0)
         self.verify_policy_match(pkt_count, policy_1)
         # verify all policies matched the expected number of times
         self.verify_policy_match(pkt_count, policy_0)
         self.verify_policy_match(pkt_count, policy_1)
-        self.verify_policy_match(pkt_count*2, policy_2)
+        self.verify_policy_match(pkt_count * 2, policy_2)
         # by readding the bypass rule, we reset the flow cache
         # we only expect the bypass rule to now be in the flow cache
         self.verify_num_inbound_flow_cache_entries(1)
         # by readding the bypass rule, we reset the flow cache
         # we only expect the bypass rule to now be in the flow cache
         self.verify_num_inbound_flow_cache_entries(1)
@@ -336,6 +421,7 @@ class IPSec4SpdTestCaseReadd(SpdFlowCacheInbound):
 class IPSec4SpdTestCaseMultiple(SpdFlowCacheInbound):
     """ IPSec/IPv4 inbound: Policy mode test case with flow cache \
         (multiple interfaces, multiple rules)"""
 class IPSec4SpdTestCaseMultiple(SpdFlowCacheInbound):
     """ IPSec/IPv4 inbound: Policy mode test case with flow cache \
         (multiple interfaces, multiple rules)"""
+
     def test_ipsec_spd_inbound_multiple(self):
         # In this test case, packets in IPv4 FWD path are configured to go
         # through IPSec outbound SPD policy lookup.
     def test_ipsec_spd_inbound_multiple(self):
         # In this test case, packets in IPv4 FWD path are configured to go
         # through IPSec outbound SPD policy lookup.
@@ -353,23 +439,47 @@ class IPSec4SpdTestCaseMultiple(SpdFlowCacheInbound):
         # add input rules on all interfaces
         # pg0 -> pg1
         policy_0 = self.spd_add_rem_policy(  # inbound, priority 10
         # add input rules on all interfaces
         # pg0 -> pg1
         policy_0 = self.spd_add_rem_policy(  # inbound, priority 10
-            1, self.pg1, self.pg0, socket.IPPROTO_UDP,
-            is_out=0, priority=10, policy_type="bypass")
+            1,
+            self.pg1,
+            self.pg0,
+            socket.IPPROTO_UDP,
+            is_out=0,
+            priority=10,
+            policy_type="bypass",
+        )
         # pg1 -> pg2
         policy_1 = self.spd_add_rem_policy(  # inbound, priority 10
         # pg1 -> pg2
         policy_1 = self.spd_add_rem_policy(  # inbound, priority 10
-            1, self.pg2, self.pg1, socket.IPPROTO_UDP,
-            is_out=0, priority=10, policy_type="bypass")
+            1,
+            self.pg2,
+            self.pg1,
+            socket.IPPROTO_UDP,
+            is_out=0,
+            priority=10,
+            policy_type="bypass",
+        )
         # pg2 -> pg0
         policy_2 = self.spd_add_rem_policy(  # inbound, priority 10
         # pg2 -> pg0
         policy_2 = self.spd_add_rem_policy(  # inbound, priority 10
-            1, self.pg0, self.pg2, socket.IPPROTO_UDP,
-            is_out=0, priority=10, policy_type="discard")
+            1,
+            self.pg0,
+            self.pg2,
+            socket.IPPROTO_UDP,
+            is_out=0,
+            priority=10,
+            policy_type="discard",
+        )
 
         # create output rules covering the the full ip range
         # 0.0.0.0 -> 255.255.255.255, so we can capture forwarded packets
         policy_3 = self.spd_add_rem_policy(  # outbound, priority 10
 
         # create output rules covering the the full ip range
         # 0.0.0.0 -> 255.255.255.255, so we can capture forwarded packets
         policy_3 = self.spd_add_rem_policy(  # outbound, priority 10
-            1, self.pg0, self.pg0, socket.IPPROTO_UDP,
-            is_out=1, priority=10, policy_type="bypass",
-            all_ips=True)
+            1,
+            self.pg0,
+            self.pg0,
+            socket.IPPROTO_UDP,
+            is_out=1,
+            priority=10,
+            policy_type="bypass",
+            all_ips=True,
+        )
 
         # check flow cache is empty (0 active elements) before sending traffic
         self.verify_num_inbound_flow_cache_entries(0)
 
         # check flow cache is empty (0 active elements) before sending traffic
         self.verify_num_inbound_flow_cache_entries(0)
@@ -396,8 +506,7 @@ class IPSec4SpdTestCaseMultiple(SpdFlowCacheInbound):
                 try:
                     self.logger.debug(ppp("SPD Add - Got packet:", packet))
                 except Exception:
                 try:
                     self.logger.debug(ppp("SPD Add - Got packet:", packet))
                 except Exception:
-                    self.logger.error(
-                        ppp("Unexpected or invalid packet:", packet))
+                    self.logger.error(ppp("Unexpected or invalid packet:", packet))
                     raise
 
         # verify captures that matched BYPASS rules
                     raise
 
         # verify captures that matched BYPASS rules
@@ -416,6 +525,7 @@ class IPSec4SpdTestCaseMultiple(SpdFlowCacheInbound):
 class IPSec4SpdTestCaseOverwriteStale(SpdFlowCacheInbound):
     """ IPSec/IPv4 inbound: Policy mode test case with flow cache \
         (overwrite stale entries)"""
 class IPSec4SpdTestCaseOverwriteStale(SpdFlowCacheInbound):
     """ IPSec/IPv4 inbound: Policy mode test case with flow cache \
         (overwrite stale entries)"""
+
     def test_ipsec_spd_inbound_overwrite(self):
         # The operation of the flow cache is setup so that the entire cache
         # is invalidated when adding or removing an SPD policy rule.
     def test_ipsec_spd_inbound_overwrite(self):
         # The operation of the flow cache is setup so that the entire cache
         # is invalidated when adding or removing an SPD policy rule.
@@ -436,23 +546,47 @@ class IPSec4SpdTestCaseOverwriteStale(SpdFlowCacheInbound):
         # add input rules on all interfaces
         # pg0 -> pg1
         policy_0 = self.spd_add_rem_policy(  # inbound
         # add input rules on all interfaces
         # pg0 -> pg1
         policy_0 = self.spd_add_rem_policy(  # inbound
-            1, self.pg1, self.pg0, socket.IPPROTO_UDP,
-            is_out=0, priority=10, policy_type="bypass")
+            1,
+            self.pg1,
+            self.pg0,
+            socket.IPPROTO_UDP,
+            is_out=0,
+            priority=10,
+            policy_type="bypass",
+        )
         # pg1 -> pg2
         policy_1 = self.spd_add_rem_policy(  # inbound
         # pg1 -> pg2
         policy_1 = self.spd_add_rem_policy(  # inbound
-            1, self.pg2, self.pg1, socket.IPPROTO_UDP,
-            is_out=0, priority=10, policy_type="bypass")
+            1,
+            self.pg2,
+            self.pg1,
+            socket.IPPROTO_UDP,
+            is_out=0,
+            priority=10,
+            policy_type="bypass",
+        )
         # pg2 -> pg0
         policy_2 = self.spd_add_rem_policy(  # inbound
         # pg2 -> pg0
         policy_2 = self.spd_add_rem_policy(  # inbound
-            1, self.pg0, self.pg2, socket.IPPROTO_UDP,
-            is_out=0, priority=10, policy_type="discard")
+            1,
+            self.pg0,
+            self.pg2,
+            socket.IPPROTO_UDP,
+            is_out=0,
+            priority=10,
+            policy_type="discard",
+        )
 
         # create output rules covering the the full ip range
         # 0.0.0.0 -> 255.255.255.255, so we can capture forwarded packets
         policy_3 = self.spd_add_rem_policy(  # outbound
 
         # create output rules covering the the full ip range
         # 0.0.0.0 -> 255.255.255.255, so we can capture forwarded packets
         policy_3 = self.spd_add_rem_policy(  # outbound
-            1, self.pg0, self.pg0, socket.IPPROTO_UDP,
-            is_out=1, priority=10, policy_type="bypass",
-            all_ips=True)
+            1,
+            self.pg0,
+            self.pg0,
+            socket.IPPROTO_UDP,
+            is_out=1,
+            priority=10,
+            policy_type="bypass",
+            all_ips=True,
+        )
 
         # check flow cache is empty (0 active elements) before sending traffic
         self.verify_num_inbound_flow_cache_entries(0)
 
         # check flow cache is empty (0 active elements) before sending traffic
         self.verify_num_inbound_flow_cache_entries(0)
@@ -479,8 +613,7 @@ class IPSec4SpdTestCaseOverwriteStale(SpdFlowCacheInbound):
                 try:
                     self.logger.debug(ppp("SPD Add - Got packet:", packet))
                 except Exception:
                 try:
                     self.logger.debug(ppp("SPD Add - Got packet:", packet))
                 except Exception:
-                    self.logger.error(
-                        ppp("Unexpected or invalid packet:", packet))
+                    self.logger.error(ppp("Unexpected or invalid packet:", packet))
                     raise
 
         # verify captures that matched BYPASS rules
                     raise
 
         # verify captures that matched BYPASS rules
@@ -497,22 +630,40 @@ class IPSec4SpdTestCaseOverwriteStale(SpdFlowCacheInbound):
 
         # adding an outbound policy should not invalidate output flow cache
         self.spd_add_rem_policy(  # outbound
 
         # adding an outbound policy should not invalidate output flow cache
         self.spd_add_rem_policy(  # outbound
-            1, self.pg0, self.pg0, socket.IPPROTO_UDP,
-            is_out=1, priority=1, policy_type="bypass",
-            all_ips=True)
+            1,
+            self.pg0,
+            self.pg0,
+            socket.IPPROTO_UDP,
+            is_out=1,
+            priority=1,
+            policy_type="bypass",
+            all_ips=True,
+        )
         # check inbound flow cache counter has not been reset
         self.verify_num_inbound_flow_cache_entries(3)
 
         # remove + readd bypass policy - flow cache counter will be reset,
         # and there will be 3x stale entries in flow cache
         self.spd_add_rem_policy(  # inbound, priority 10
         # check inbound flow cache counter has not been reset
         self.verify_num_inbound_flow_cache_entries(3)
 
         # remove + readd bypass policy - flow cache counter will be reset,
         # and there will be 3x stale entries in flow cache
         self.spd_add_rem_policy(  # inbound, priority 10
-            1, self.pg1, self.pg0, socket.IPPROTO_UDP,
-            is_out=0, priority=10, policy_type="bypass",
-            remove=True)
+            1,
+            self.pg1,
+            self.pg0,
+            socket.IPPROTO_UDP,
+            is_out=0,
+            priority=10,
+            policy_type="bypass",
+            remove=True,
+        )
         # readd policy
         policy_0 = self.spd_add_rem_policy(  # inbound, priority 10
         # readd policy
         policy_0 = self.spd_add_rem_policy(  # inbound, priority 10
-            1, self.pg1, self.pg0, socket.IPPROTO_UDP,
-            is_out=0, priority=10, policy_type="bypass")
+            1,
+            self.pg1,
+            self.pg0,
+            socket.IPPROTO_UDP,
+            is_out=0,
+            priority=10,
+            policy_type="bypass",
+        )
         # check counter was reset
         self.verify_num_inbound_flow_cache_entries(0)
 
         # check counter was reset
         self.verify_num_inbound_flow_cache_entries(0)
 
@@ -532,8 +683,7 @@ class IPSec4SpdTestCaseOverwriteStale(SpdFlowCacheInbound):
                 try:
                     self.logger.debug(ppp("SPD Add - Got packet:", packet))
                 except Exception:
                 try:
                     self.logger.debug(ppp("SPD Add - Got packet:", packet))
                 except Exception:
-                    self.logger.error(
-                        ppp("Unexpected or invalid packet:", packet))
+                    self.logger.error(ppp("Unexpected or invalid packet:", packet))
                     raise
 
         # verify captures that matched BYPASS rules
                     raise
 
         # verify captures that matched BYPASS rules
@@ -543,8 +693,8 @@ class IPSec4SpdTestCaseOverwriteStale(SpdFlowCacheInbound):
         self.pg0.assert_nothing_captured()
         # verify all policies matched the expected number of times
         self.verify_policy_match(pkt_count, policy_0)
         self.pg0.assert_nothing_captured()
         # verify all policies matched the expected number of times
         self.verify_policy_match(pkt_count, policy_0)
-        self.verify_policy_match(pkt_count*2, policy_1)
-        self.verify_policy_match(pkt_count*2, policy_2)
+        self.verify_policy_match(pkt_count * 2, policy_1)
+        self.verify_policy_match(pkt_count * 2, policy_2)
         # we are overwriting 3x stale entries - check flow cache counter
         # is correct
         self.verify_num_inbound_flow_cache_entries(3)
         # we are overwriting 3x stale entries - check flow cache counter
         # is correct
         self.verify_num_inbound_flow_cache_entries(3)
@@ -553,18 +703,23 @@ class IPSec4SpdTestCaseOverwriteStale(SpdFlowCacheInbound):
 class IPSec4SpdTestCaseCollision(SpdFlowCacheInbound):
     """ IPSec/IPv4 inbound: Policy mode test case with flow cache \
         (hash collision)"""
 class IPSec4SpdTestCaseCollision(SpdFlowCacheInbound):
     """ IPSec/IPv4 inbound: Policy mode test case with flow cache \
         (hash collision)"""
+
     # Override class setup to restrict hash table size to 16 buckets.
     # This forces using only the lower 4 bits of the hash as a key,
     # making hash collisions easy to find.
     @classmethod
     def setUpConstants(cls):
         super(SpdFlowCacheInbound, cls).setUpConstants()
     # Override class setup to restrict hash table size to 16 buckets.
     # This forces using only the lower 4 bits of the hash as a key,
     # making hash collisions easy to find.
     @classmethod
     def setUpConstants(cls):
         super(SpdFlowCacheInbound, cls).setUpConstants()
-        cls.vpp_cmdline.extend(["ipsec", "{",
-                                "ipv4-inbound-spd-flow-cache on",
-                                "ipv4-inbound-spd-hash-buckets 16",
-                                "}"])
-        cls.logger.info("VPP modified cmdline is %s" % " "
-                        .join(cls.vpp_cmdline))
+        cls.vpp_cmdline.extend(
+            [
+                "ipsec",
+                "{",
+                "ipv4-inbound-spd-flow-cache on",
+                "ipv4-inbound-spd-hash-buckets 16",
+                "}",
+            ]
+        )
+        cls.logger.info("VPP modified cmdline is %s" % " ".join(cls.vpp_cmdline))
 
     def test_ipsec_spd_inbound_collision(self):
         # The flow cache operation is setup to overwrite an entry
 
     def test_ipsec_spd_inbound_collision(self):
         # The flow cache operation is setup to overwrite an entry
@@ -588,20 +743,38 @@ class IPSec4SpdTestCaseCollision(SpdFlowCacheInbound):
         # create output rules covering the the full ip range
         # 0.0.0.0 -> 255.255.255.255, so we can capture forwarded packets
         policy_0 = self.spd_add_rem_policy(  # outbound
         # create output rules covering the the full ip range
         # 0.0.0.0 -> 255.255.255.255, so we can capture forwarded packets
         policy_0 = self.spd_add_rem_policy(  # outbound
-            1, self.pg0, self.pg0, socket.IPPROTO_UDP,
-            is_out=1, priority=10, policy_type="bypass",
-            all_ips=True)
+            1,
+            self.pg0,
+            self.pg0,
+            socket.IPPROTO_UDP,
+            is_out=1,
+            priority=10,
+            policy_type="bypass",
+            all_ips=True,
+        )
 
         capture_intfs = []
         if self.crc32_supported():  # create crc32 collision on last 4 bits
             hashed_with_crc32 = True
             # add matching rules
             policy_1 = self.spd_add_rem_policy(  # inbound, priority 10
 
         capture_intfs = []
         if self.crc32_supported():  # create crc32 collision on last 4 bits
             hashed_with_crc32 = True
             # add matching rules
             policy_1 = self.spd_add_rem_policy(  # inbound, priority 10
-                1, self.pg1, self.pg2, socket.IPPROTO_UDP,
-                is_out=0, priority=10, policy_type="bypass")
+                1,
+                self.pg1,
+                self.pg2,
+                socket.IPPROTO_UDP,
+                is_out=0,
+                priority=10,
+                policy_type="bypass",
+            )
             policy_2 = self.spd_add_rem_policy(  # inbound, priority 10
             policy_2 = self.spd_add_rem_policy(  # inbound, priority 10
-                1, self.pg3, self.pg0, socket.IPPROTO_UDP,
-                is_out=0, priority=10, policy_type="bypass")
+                1,
+                self.pg3,
+                self.pg0,
+                socket.IPPROTO_UDP,
+                is_out=0,
+                priority=10,
+                policy_type="bypass",
+            )
 
             # we expect to get captures on pg1 + pg3
             capture_intfs.append(self.pg1)
 
             # we expect to get captures on pg1 + pg3
             capture_intfs.append(self.pg1)
@@ -623,11 +796,23 @@ class IPSec4SpdTestCaseCollision(SpdFlowCacheInbound):
             hashed_with_crc32 = False
             # add matching rules
             policy_1 = self.spd_add_rem_policy(  # inbound, priority 10
             hashed_with_crc32 = False
             # add matching rules
             policy_1 = self.spd_add_rem_policy(  # inbound, priority 10
-                1, self.pg1, self.pg2, socket.IPPROTO_UDP,
-                is_out=0, priority=10, policy_type="bypass")
+                1,
+                self.pg1,
+                self.pg2,
+                socket.IPPROTO_UDP,
+                is_out=0,
+                priority=10,
+                policy_type="bypass",
+            )
             policy_2 = self.spd_add_rem_policy(  # inbound, priority 10
             policy_2 = self.spd_add_rem_policy(  # inbound, priority 10
-                1, self.pg2, self.pg3, socket.IPPROTO_UDP,
-                is_out=0, priority=10, policy_type="bypass")
+                1,
+                self.pg2,
+                self.pg3,
+                socket.IPPROTO_UDP,
+                is_out=0,
+                priority=10,
+                policy_type="bypass",
+            )
 
             capture_intfs.append(self.pg1)
             capture_intfs.append(self.pg2)
 
             capture_intfs.append(self.pg1)
             capture_intfs.append(self.pg2)
@@ -655,15 +840,13 @@ class IPSec4SpdTestCaseCollision(SpdFlowCacheInbound):
             if_caps.append(pg.get_capture())
             for packet in if_caps[-1]:
                 try:
             if_caps.append(pg.get_capture())
             for packet in if_caps[-1]:
                 try:
-                    self.logger.debug(ppp(
-                        "SPD Add - Got packet:", packet))
+                    self.logger.debug(ppp("SPD Add - Got packet:", packet))
                 except Exception:
                 except Exception:
-                    self.logger.error(ppp(
-                        "Unexpected or invalid packet:", packet))
+                    self.logger.error(ppp("Unexpected or invalid packet:", packet))
                     raise
 
         # verify captures that matched BYPASS rule
                     raise
 
         # verify captures that matched BYPASS rule
-        if(hashed_with_crc32):
+        if hashed_with_crc32:
             self.verify_capture(self.pg2, self.pg1, if_caps[0])
             self.verify_capture(self.pg0, self.pg3, if_caps[1])
         else:  # hashed with xxhash
             self.verify_capture(self.pg2, self.pg1, if_caps[0])
             self.verify_capture(self.pg0, self.pg3, if_caps[1])
         else:  # hashed with xxhash
@@ -673,11 +856,11 @@ class IPSec4SpdTestCaseCollision(SpdFlowCacheInbound):
         # verify all policies matched the expected number of times
         self.verify_policy_match(pkt_count, policy_1)
         self.verify_policy_match(pkt_count, policy_2)
         # verify all policies matched the expected number of times
         self.verify_policy_match(pkt_count, policy_1)
         self.verify_policy_match(pkt_count, policy_2)
-        self.verify_policy_match(pkt_count*2, policy_0)  # output policy
+        self.verify_policy_match(pkt_count * 2, policy_0)  # output policy
         # we have matched 2 policies, but due to the hash collision
         # one active entry is expected
         self.verify_num_inbound_flow_cache_entries(1)
 
 
         # we have matched 2 policies, but due to the hash collision
         # one active entry is expected
         self.verify_num_inbound_flow_cache_entries(1)
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index 54571c6..9852b37 100644 (file)
@@ -11,16 +11,14 @@ class SpdFlowCacheOutbound(SpdFlowCacheTemplate):
     @classmethod
     def setUpConstants(cls):
         super(SpdFlowCacheOutbound, cls).setUpConstants()
     @classmethod
     def setUpConstants(cls):
         super(SpdFlowCacheOutbound, cls).setUpConstants()
-        cls.vpp_cmdline.extend(["ipsec", "{",
-                                "ipv4-outbound-spd-flow-cache on",
-                                "}"])
-        cls.logger.info("VPP modified cmdline is %s" % " "
-                        .join(cls.vpp_cmdline))
+        cls.vpp_cmdline.extend(["ipsec", "{", "ipv4-outbound-spd-flow-cache on", "}"])
+        cls.logger.info("VPP modified cmdline is %s" % " ".join(cls.vpp_cmdline))
 
 
 class IPSec4SpdTestCaseAdd(SpdFlowCacheOutbound):
     """ IPSec/IPv4 outbound: Policy mode test case with flow cache \
         (add rule)"""
 
 
 class IPSec4SpdTestCaseAdd(SpdFlowCacheOutbound):
     """ IPSec/IPv4 outbound: Policy mode test case with flow cache \
         (add rule)"""
+
     def test_ipsec_spd_outbound_add(self):
         # In this test case, packets in IPv4 FWD path are configured
         # to go through IPSec outbound SPD policy lookup.
     def test_ipsec_spd_outbound_add(self):
         # In this test case, packets in IPv4 FWD path are configured
         # to go through IPSec outbound SPD policy lookup.
@@ -33,11 +31,23 @@ class IPSec4SpdTestCaseAdd(SpdFlowCacheOutbound):
         pkt_count = 5
         self.spd_create_and_intf_add(1, [self.pg1])
         policy_0 = self.spd_add_rem_policy(  # outbound, priority 10
         pkt_count = 5
         self.spd_create_and_intf_add(1, [self.pg1])
         policy_0 = self.spd_add_rem_policy(  # outbound, priority 10
-            1, self.pg0, self.pg1, socket.IPPROTO_UDP,
-            is_out=1, priority=10, policy_type="bypass")
+            1,
+            self.pg0,
+            self.pg1,
+            socket.IPPROTO_UDP,
+            is_out=1,
+            priority=10,
+            policy_type="bypass",
+        )
         policy_1 = self.spd_add_rem_policy(  # outbound, priority 5
         policy_1 = self.spd_add_rem_policy(  # outbound, priority 5
-            1, self.pg0, self.pg1, socket.IPPROTO_UDP,
-            is_out=1, priority=5, policy_type="discard")
+            1,
+            self.pg0,
+            self.pg1,
+            socket.IPPROTO_UDP,
+            is_out=1,
+            priority=5,
+            policy_type="discard",
+        )
 
         # check flow cache is empty before sending traffic
         self.verify_num_outbound_flow_cache_entries(0)
 
         # check flow cache is empty before sending traffic
         self.verify_num_outbound_flow_cache_entries(0)
@@ -75,6 +85,7 @@ class IPSec4SpdTestCaseAdd(SpdFlowCacheOutbound):
 class IPSec4SpdTestCaseRemove(SpdFlowCacheOutbound):
     """ IPSec/IPv4 outbound: Policy mode test case with flow cache \
         (remove rule)"""
 class IPSec4SpdTestCaseRemove(SpdFlowCacheOutbound):
     """ IPSec/IPv4 outbound: Policy mode test case with flow cache \
         (remove rule)"""
+
     def test_ipsec_spd_outbound_remove(self):
         # In this test case, packets in IPv4 FWD path are configured
         # to go through IPSec outbound SPD policy lookup.
     def test_ipsec_spd_outbound_remove(self):
         # In this test case, packets in IPv4 FWD path are configured
         # to go through IPSec outbound SPD policy lookup.
@@ -88,11 +99,23 @@ class IPSec4SpdTestCaseRemove(SpdFlowCacheOutbound):
         pkt_count = 5
         self.spd_create_and_intf_add(1, [self.pg1])
         policy_0 = self.spd_add_rem_policy(  # outbound, priority 10
         pkt_count = 5
         self.spd_create_and_intf_add(1, [self.pg1])
         policy_0 = self.spd_add_rem_policy(  # outbound, priority 10
-            1, self.pg0, self.pg1, socket.IPPROTO_UDP,
-            is_out=1, priority=10, policy_type="bypass")
+            1,
+            self.pg0,
+            self.pg1,
+            socket.IPPROTO_UDP,
+            is_out=1,
+            priority=10,
+            policy_type="bypass",
+        )
         policy_1 = self.spd_add_rem_policy(  # outbound, priority 5
         policy_1 = self.spd_add_rem_policy(  # outbound, priority 5
-            1, self.pg0, self.pg1, socket.IPPROTO_UDP,
-            is_out=1, priority=5, policy_type="discard")
+            1,
+            self.pg0,
+            self.pg1,
+            socket.IPPROTO_UDP,
+            is_out=1,
+            priority=5,
+            policy_type="discard",
+        )
 
         # check flow cache is empty before sending traffic
         self.verify_num_outbound_flow_cache_entries(0)
 
         # check flow cache is empty before sending traffic
         self.verify_num_outbound_flow_cache_entries(0)
@@ -128,9 +151,15 @@ class IPSec4SpdTestCaseRemove(SpdFlowCacheOutbound):
 
         # now remove the bypass rule
         self.spd_add_rem_policy(  # outbound, priority 10
 
         # now remove the bypass rule
         self.spd_add_rem_policy(  # outbound, priority 10
-            1, self.pg0, self.pg1, socket.IPPROTO_UDP,
-            is_out=1, priority=10, policy_type="bypass",
-            remove=True)
+            1,
+            self.pg0,
+            self.pg1,
+            socket.IPPROTO_UDP,
+            is_out=1,
+            priority=10,
+            policy_type="bypass",
+            remove=True,
+        )
         # verify flow cache counter has been reset by rule removal
         self.verify_num_outbound_flow_cache_entries(0)
 
         # verify flow cache counter has been reset by rule removal
         self.verify_num_outbound_flow_cache_entries(0)
 
@@ -154,6 +183,7 @@ class IPSec4SpdTestCaseRemove(SpdFlowCacheOutbound):
 class IPSec4SpdTestCaseReadd(SpdFlowCacheOutbound):
     """ IPSec/IPv4 outbound: Policy mode test case with flow cache \
         (add, remove, re-add)"""
 class IPSec4SpdTestCaseReadd(SpdFlowCacheOutbound):
     """ IPSec/IPv4 outbound: Policy mode test case with flow cache \
         (add, remove, re-add)"""
+
     def test_ipsec_spd_outbound_readd(self):
         # In this test case, packets in IPv4 FWD path are configured
         # to go through IPSec outbound SPD policy lookup.
     def test_ipsec_spd_outbound_readd(self):
         # In this test case, packets in IPv4 FWD path are configured
         # to go through IPSec outbound SPD policy lookup.
@@ -172,11 +202,23 @@ class IPSec4SpdTestCaseReadd(SpdFlowCacheOutbound):
         pkt_count = 5
         self.spd_create_and_intf_add(1, [self.pg1])
         policy_0 = self.spd_add_rem_policy(  # outbound, priority 10
         pkt_count = 5
         self.spd_create_and_intf_add(1, [self.pg1])
         policy_0 = self.spd_add_rem_policy(  # outbound, priority 10
-            1, self.pg0, self.pg1, socket.IPPROTO_UDP,
-            is_out=1, priority=10, policy_type="bypass")
+            1,
+            self.pg0,
+            self.pg1,
+            socket.IPPROTO_UDP,
+            is_out=1,
+            priority=10,
+            policy_type="bypass",
+        )
         policy_1 = self.spd_add_rem_policy(  # outbound, priority 5
         policy_1 = self.spd_add_rem_policy(  # outbound, priority 5
-            1, self.pg0, self.pg1, socket.IPPROTO_UDP,
-            is_out=1, priority=5, policy_type="discard")
+            1,
+            self.pg0,
+            self.pg1,
+            socket.IPPROTO_UDP,
+            is_out=1,
+            priority=5,
+            policy_type="discard",
+        )
 
         # check flow cache is empty before sending traffic
         self.verify_num_outbound_flow_cache_entries(0)
 
         # check flow cache is empty before sending traffic
         self.verify_num_outbound_flow_cache_entries(0)
@@ -212,9 +254,15 @@ class IPSec4SpdTestCaseReadd(SpdFlowCacheOutbound):
 
         # now remove the bypass rule, leaving only the discard rule
         self.spd_add_rem_policy(  # outbound, priority 10
 
         # now remove the bypass rule, leaving only the discard rule
         self.spd_add_rem_policy(  # outbound, priority 10
-            1, self.pg0, self.pg1, socket.IPPROTO_UDP,
-            is_out=1, priority=10, policy_type="bypass",
-            remove=True)
+            1,
+            self.pg0,
+            self.pg1,
+            socket.IPPROTO_UDP,
+            is_out=1,
+            priority=10,
+            policy_type="bypass",
+            remove=True,
+        )
         # verify flow cache counter has been reset by rule removal
         self.verify_num_outbound_flow_cache_entries(0)
 
         # verify flow cache counter has been reset by rule removal
         self.verify_num_outbound_flow_cache_entries(0)
 
@@ -236,8 +284,14 @@ class IPSec4SpdTestCaseReadd(SpdFlowCacheOutbound):
 
         # now readd the bypass rule
         policy_0 = self.spd_add_rem_policy(  # outbound, priority 10
 
         # now readd the bypass rule
         policy_0 = self.spd_add_rem_policy(  # outbound, priority 10
-            1, self.pg0, self.pg1, socket.IPPROTO_UDP,
-            is_out=1, priority=10, policy_type="bypass")
+            1,
+            self.pg0,
+            self.pg1,
+            socket.IPPROTO_UDP,
+            is_out=1,
+            priority=10,
+            policy_type="bypass",
+        )
         # verify flow cache counter has been reset by rule addition
         self.verify_num_outbound_flow_cache_entries(0)
 
         # verify flow cache counter has been reset by rule addition
         self.verify_num_outbound_flow_cache_entries(0)
 
@@ -271,6 +325,7 @@ class IPSec4SpdTestCaseReadd(SpdFlowCacheOutbound):
 class IPSec4SpdTestCaseMultiple(SpdFlowCacheOutbound):
     """ IPSec/IPv4 outbound: Policy mode test case with flow cache \
         (multiple interfaces, multiple rules)"""
 class IPSec4SpdTestCaseMultiple(SpdFlowCacheOutbound):
     """ IPSec/IPv4 outbound: Policy mode test case with flow cache \
         (multiple interfaces, multiple rules)"""
+
     def test_ipsec_spd_outbound_multiple(self):
         # In this test case, packets in IPv4 FWD path are configured to go
         # through IPSec outbound SPD policy lookup.
     def test_ipsec_spd_outbound_multiple(self):
         # In this test case, packets in IPv4 FWD path are configured to go
         # through IPSec outbound SPD policy lookup.
@@ -286,32 +341,75 @@ class IPSec4SpdTestCaseMultiple(SpdFlowCacheOutbound):
         self.spd_create_and_intf_add(1, self.pg_interfaces)
         # add rules on all interfaces
         policy_01 = self.spd_add_rem_policy(  # outbound, priority 10
         self.spd_create_and_intf_add(1, self.pg_interfaces)
         # add rules on all interfaces
         policy_01 = self.spd_add_rem_policy(  # outbound, priority 10
-            1, self.pg0, self.pg1, socket.IPPROTO_UDP,
-            is_out=1, priority=10, policy_type="bypass")
+            1,
+            self.pg0,
+            self.pg1,
+            socket.IPPROTO_UDP,
+            is_out=1,
+            priority=10,
+            policy_type="bypass",
+        )
         policy_02 = self.spd_add_rem_policy(  # outbound, priority 5
         policy_02 = self.spd_add_rem_policy(  # outbound, priority 5
-            1, self.pg0, self.pg1, socket.IPPROTO_UDP,
-            is_out=1, priority=5, policy_type="discard")
+            1,
+            self.pg0,
+            self.pg1,
+            socket.IPPROTO_UDP,
+            is_out=1,
+            priority=5,
+            policy_type="discard",
+        )
 
         policy_11 = self.spd_add_rem_policy(  # outbound, priority 10
 
         policy_11 = self.spd_add_rem_policy(  # outbound, priority 10
-            1, self.pg1, self.pg2, socket.IPPROTO_UDP,
-            is_out=1, priority=10, policy_type="bypass")
+            1,
+            self.pg1,
+            self.pg2,
+            socket.IPPROTO_UDP,
+            is_out=1,
+            priority=10,
+            policy_type="bypass",
+        )
         policy_12 = self.spd_add_rem_policy(  # outbound, priority 5
         policy_12 = self.spd_add_rem_policy(  # outbound, priority 5
-            1, self.pg1, self.pg2, socket.IPPROTO_UDP,
-            is_out=1, priority=5, policy_type="discard")
+            1,
+            self.pg1,
+            self.pg2,
+            socket.IPPROTO_UDP,
+            is_out=1,
+            priority=5,
+            policy_type="discard",
+        )
 
         policy_21 = self.spd_add_rem_policy(  # outbound, priority 5
 
         policy_21 = self.spd_add_rem_policy(  # outbound, priority 5
-            1, self.pg2, self.pg0, socket.IPPROTO_UDP,
-            is_out=1, priority=5, policy_type="bypass")
+            1,
+            self.pg2,
+            self.pg0,
+            socket.IPPROTO_UDP,
+            is_out=1,
+            priority=5,
+            policy_type="bypass",
+        )
         policy_22 = self.spd_add_rem_policy(  # outbound, priority 10
         policy_22 = self.spd_add_rem_policy(  # outbound, priority 10
-            1, self.pg2, self.pg0, socket.IPPROTO_UDP,
-            is_out=1, priority=10, policy_type="discard")
+            1,
+            self.pg2,
+            self.pg0,
+            socket.IPPROTO_UDP,
+            is_out=1,
+            priority=10,
+            policy_type="discard",
+        )
 
         # interfaces bound to an SPD, will by default drop inbound
         # traffic with no matching policies. add catch-all inbound
         # bypass rule to SPD:
         self.spd_add_rem_policy(  # inbound, all interfaces
 
         # interfaces bound to an SPD, will by default drop inbound
         # traffic with no matching policies. add catch-all inbound
         # bypass rule to SPD:
         self.spd_add_rem_policy(  # inbound, all interfaces
-            1, None, None, socket.IPPROTO_UDP, is_out=0, priority=10,
-            policy_type="bypass", all_ips=True)
+            1,
+            None,
+            None,
+            socket.IPPROTO_UDP,
+            is_out=0,
+            priority=10,
+            policy_type="bypass",
+            all_ips=True,
+        )
 
         # check flow cache is empty (0 active elements) before sending traffic
         self.verify_num_outbound_flow_cache_entries(0)
 
         # check flow cache is empty (0 active elements) before sending traffic
         self.verify_num_outbound_flow_cache_entries(0)
@@ -338,8 +436,7 @@ class IPSec4SpdTestCaseMultiple(SpdFlowCacheOutbound):
                 try:
                     self.logger.debug(ppp("SPD - Got packet:", packet))
                 except Exception:
                 try:
                     self.logger.debug(ppp("SPD - Got packet:", packet))
                 except Exception:
-                    self.logger.error(
-                        ppp("Unexpected or invalid packet:", packet))
+                    self.logger.error(ppp("Unexpected or invalid packet:", packet))
                     raise
         self.logger.debug("SPD: Num packets: %s", len(if_caps[0].res))
         self.logger.debug("SPD: Num packets: %s", len(if_caps[1].res))
                     raise
         self.logger.debug("SPD: Num packets: %s", len(if_caps[0].res))
         self.logger.debug("SPD: Num packets: %s", len(if_caps[1].res))
@@ -366,6 +463,7 @@ class IPSec4SpdTestCaseMultiple(SpdFlowCacheOutbound):
 class IPSec4SpdTestCaseOverwriteStale(SpdFlowCacheOutbound):
     """ IPSec/IPv4 outbound: Policy mode test case with flow cache \
         (overwrite stale entries)"""
 class IPSec4SpdTestCaseOverwriteStale(SpdFlowCacheOutbound):
     """ IPSec/IPv4 outbound: Policy mode test case with flow cache \
         (overwrite stale entries)"""
+
     def test_ipsec_spd_outbound_overwrite(self):
         # The operation of the flow cache is setup so that the entire cache
         # is invalidated when adding or removing an SPD policy rule.
     def test_ipsec_spd_outbound_overwrite(self):
         # The operation of the flow cache is setup so that the entire cache
         # is invalidated when adding or removing an SPD policy rule.
@@ -386,23 +484,48 @@ class IPSec4SpdTestCaseOverwriteStale(SpdFlowCacheOutbound):
         # add output rules on all interfaces
         # pg0 -> pg1
         policy_0 = self.spd_add_rem_policy(  # outbound
         # add output rules on all interfaces
         # pg0 -> pg1
         policy_0 = self.spd_add_rem_policy(  # outbound
-            1, self.pg0, self.pg1, socket.IPPROTO_UDP,
-            is_out=1, priority=10, policy_type="bypass")
+            1,
+            self.pg0,
+            self.pg1,
+            socket.IPPROTO_UDP,
+            is_out=1,
+            priority=10,
+            policy_type="bypass",
+        )
         # pg1 -> pg2
         policy_1 = self.spd_add_rem_policy(  # outbound
         # pg1 -> pg2
         policy_1 = self.spd_add_rem_policy(  # outbound
-            1, self.pg1, self.pg2, socket.IPPROTO_UDP,
-            is_out=1, priority=10, policy_type="bypass")
+            1,
+            self.pg1,
+            self.pg2,
+            socket.IPPROTO_UDP,
+            is_out=1,
+            priority=10,
+            policy_type="bypass",
+        )
         # pg2 -> pg0
         policy_2 = self.spd_add_rem_policy(  # outbound
         # pg2 -> pg0
         policy_2 = self.spd_add_rem_policy(  # outbound
-            1, self.pg2, self.pg0, socket.IPPROTO_UDP,
-            is_out=1, priority=10, policy_type="discard")
+            1,
+            self.pg2,
+            self.pg0,
+            socket.IPPROTO_UDP,
+            is_out=1,
+            priority=10,
+            policy_type="discard",
+        )
 
         # interfaces bound to an SPD, will by default drop inbound
         # traffic with no matching policies. add catch-all inbound
         # bypass rule to SPD:
         self.spd_add_rem_policy(  # inbound, all interfaces
 
         # interfaces bound to an SPD, will by default drop inbound
         # traffic with no matching policies. add catch-all inbound
         # bypass rule to SPD:
         self.spd_add_rem_policy(  # inbound, all interfaces
-            1, None, None, socket.IPPROTO_UDP, is_out=0, priority=10,
-            policy_type="bypass", all_ips=True)
+            1,
+            None,
+            None,
+            socket.IPPROTO_UDP,
+            is_out=0,
+            priority=10,
+            policy_type="bypass",
+            all_ips=True,
+        )
 
         # check flow cache is empty (0 active elements) before sending traffic
         self.verify_num_outbound_flow_cache_entries(0)
 
         # check flow cache is empty (0 active elements) before sending traffic
         self.verify_num_outbound_flow_cache_entries(0)
@@ -429,8 +552,7 @@ class IPSec4SpdTestCaseOverwriteStale(SpdFlowCacheOutbound):
                 try:
                     self.logger.debug(ppp("SPD Add - Got packet:", packet))
                 except Exception:
                 try:
                     self.logger.debug(ppp("SPD Add - Got packet:", packet))
                 except Exception:
-                    self.logger.error(
-                        ppp("Unexpected or invalid packet:", packet))
+                    self.logger.error(ppp("Unexpected or invalid packet:", packet))
                     raise
 
         # verify captures that matched BYPASS rules
                     raise
 
         # verify captures that matched BYPASS rules
@@ -447,21 +569,39 @@ class IPSec4SpdTestCaseOverwriteStale(SpdFlowCacheOutbound):
 
         # adding an inbound policy should not invalidate output flow cache
         self.spd_add_rem_policy(  # inbound
 
         # adding an inbound policy should not invalidate output flow cache
         self.spd_add_rem_policy(  # inbound
-            1, self.pg0, self.pg1, socket.IPPROTO_UDP,
-            is_out=0, priority=10, policy_type="bypass")
+            1,
+            self.pg0,
+            self.pg1,
+            socket.IPPROTO_UDP,
+            is_out=0,
+            priority=10,
+            policy_type="bypass",
+        )
         # check flow cache counter has not been reset
         self.verify_num_outbound_flow_cache_entries(3)
 
         # remove a bypass policy - flow cache counter will be reset, and
         # there will be 3x stale entries in flow cache
         self.spd_add_rem_policy(  # outbound
         # check flow cache counter has not been reset
         self.verify_num_outbound_flow_cache_entries(3)
 
         # remove a bypass policy - flow cache counter will be reset, and
         # there will be 3x stale entries in flow cache
         self.spd_add_rem_policy(  # outbound
-            1, self.pg0, self.pg1, socket.IPPROTO_UDP,
-            is_out=1, priority=10, policy_type="bypass",
-            remove=True)
+            1,
+            self.pg0,
+            self.pg1,
+            socket.IPPROTO_UDP,
+            is_out=1,
+            priority=10,
+            policy_type="bypass",
+            remove=True,
+        )
         # readd policy
         policy_0 = self.spd_add_rem_policy(  # outbound
         # readd policy
         policy_0 = self.spd_add_rem_policy(  # outbound
-            1, self.pg0, self.pg1, socket.IPPROTO_UDP,
-            is_out=1, priority=10, policy_type="bypass")
+            1,
+            self.pg0,
+            self.pg1,
+            socket.IPPROTO_UDP,
+            is_out=1,
+            priority=10,
+            policy_type="bypass",
+        )
         # check counter was reset with flow cache invalidation
         self.verify_num_outbound_flow_cache_entries(0)
 
         # check counter was reset with flow cache invalidation
         self.verify_num_outbound_flow_cache_entries(0)
 
@@ -481,8 +621,7 @@ class IPSec4SpdTestCaseOverwriteStale(SpdFlowCacheOutbound):
                 try:
                     self.logger.debug(ppp("SPD Add - Got packet:", packet))
                 except Exception:
                 try:
                     self.logger.debug(ppp("SPD Add - Got packet:", packet))
                 except Exception:
-                    self.logger.error(
-                        ppp("Unexpected or invalid packet:", packet))
+                    self.logger.error(ppp("Unexpected or invalid packet:", packet))
                     raise
 
         # verify captures that matched BYPASS rules
                     raise
 
         # verify captures that matched BYPASS rules
@@ -492,8 +631,8 @@ class IPSec4SpdTestCaseOverwriteStale(SpdFlowCacheOutbound):
         self.pg0.assert_nothing_captured()
         # verify all policies matched the expected number of times
         self.verify_policy_match(pkt_count, policy_0)
         self.pg0.assert_nothing_captured()
         # verify all policies matched the expected number of times
         self.verify_policy_match(pkt_count, policy_0)
-        self.verify_policy_match(pkt_count*2, policy_1)
-        self.verify_policy_match(pkt_count*2, policy_2)
+        self.verify_policy_match(pkt_count * 2, policy_1)
+        self.verify_policy_match(pkt_count * 2, policy_2)
         # we are overwriting 3x stale entries - check flow cache counter
         # is correct
         self.verify_num_outbound_flow_cache_entries(3)
         # we are overwriting 3x stale entries - check flow cache counter
         # is correct
         self.verify_num_outbound_flow_cache_entries(3)
@@ -502,18 +641,23 @@ class IPSec4SpdTestCaseOverwriteStale(SpdFlowCacheOutbound):
 class IPSec4SpdTestCaseCollision(SpdFlowCacheOutbound):
     """ IPSec/IPv4 outbound: Policy mode test case with flow cache \
         (hash collision)"""
 class IPSec4SpdTestCaseCollision(SpdFlowCacheOutbound):
     """ IPSec/IPv4 outbound: Policy mode test case with flow cache \
         (hash collision)"""
+
     # Override class setup to restrict vector size to 16 elements.
     # This forces using only the lower 4 bits of the hash as a key,
     # making hash collisions easy to find.
     @classmethod
     def setUpConstants(cls):
         super(SpdFlowCacheOutbound, cls).setUpConstants()
     # Override class setup to restrict vector size to 16 elements.
     # This forces using only the lower 4 bits of the hash as a key,
     # making hash collisions easy to find.
     @classmethod
     def setUpConstants(cls):
         super(SpdFlowCacheOutbound, cls).setUpConstants()
-        cls.vpp_cmdline.extend(["ipsec", "{",
-                                "ipv4-outbound-spd-flow-cache on",
-                                "ipv4-outbound-spd-hash-buckets 16",
-                                "}"])
-        cls.logger.info("VPP modified cmdline is %s" % " "
-                        .join(cls.vpp_cmdline))
+        cls.vpp_cmdline.extend(
+            [
+                "ipsec",
+                "{",
+                "ipv4-outbound-spd-flow-cache on",
+                "ipv4-outbound-spd-hash-buckets 16",
+                "}",
+            ]
+        )
+        cls.logger.info("VPP modified cmdline is %s" % " ".join(cls.vpp_cmdline))
 
     def test_ipsec_spd_outbound_collision(self):
         # The flow cache operation is setup to overwrite an entry
 
     def test_ipsec_spd_outbound_collision(self):
         # The flow cache operation is setup to overwrite an entry
@@ -535,18 +679,37 @@ class IPSec4SpdTestCaseCollision(SpdFlowCacheOutbound):
         self.spd_create_and_intf_add(1, self.pg_interfaces)
         # add rules
         policy_0 = self.spd_add_rem_policy(  # outbound, priority 10
         self.spd_create_and_intf_add(1, self.pg_interfaces)
         # add rules
         policy_0 = self.spd_add_rem_policy(  # outbound, priority 10
-            1, self.pg1, self.pg2, socket.IPPROTO_UDP,
-            is_out=1, priority=10, policy_type="bypass")
+            1,
+            self.pg1,
+            self.pg2,
+            socket.IPPROTO_UDP,
+            is_out=1,
+            priority=10,
+            policy_type="bypass",
+        )
         policy_1 = self.spd_add_rem_policy(  # outbound, priority 10
         policy_1 = self.spd_add_rem_policy(  # outbound, priority 10
-            1, self.pg2, self.pg0, socket.IPPROTO_UDP,
-            is_out=1, priority=10, policy_type="bypass")
+            1,
+            self.pg2,
+            self.pg0,
+            socket.IPPROTO_UDP,
+            is_out=1,
+            priority=10,
+            policy_type="bypass",
+        )
 
         # interfaces bound to an SPD, will by default drop inbound
         # traffic with no matching policies. add catch-all inbound
         # bypass rule to SPD:
         self.spd_add_rem_policy(  # inbound, all interfaces
 
         # interfaces bound to an SPD, will by default drop inbound
         # traffic with no matching policies. add catch-all inbound
         # bypass rule to SPD:
         self.spd_add_rem_policy(  # inbound, all interfaces
-            1, None, None, socket.IPPROTO_UDP, is_out=0, priority=10,
-            policy_type="bypass", all_ips=True)
+            1,
+            None,
+            None,
+            socket.IPPROTO_UDP,
+            is_out=0,
+            priority=10,
+            policy_type="bypass",
+            all_ips=True,
+        )
 
         # check flow cache is empty (0 active elements) before sending traffic
         self.verify_num_outbound_flow_cache_entries(0)
 
         # check flow cache is empty (0 active elements) before sending traffic
         self.verify_num_outbound_flow_cache_entries(0)
@@ -580,11 +743,9 @@ class IPSec4SpdTestCaseCollision(SpdFlowCacheOutbound):
             if_caps.append(pg.get_capture())
             for packet in if_caps[-1]:
                 try:
             if_caps.append(pg.get_capture())
             for packet in if_caps[-1]:
                 try:
-                    self.logger.debug(ppp(
-                        "SPD - Got packet:", packet))
+                    self.logger.debug(ppp("SPD - Got packet:", packet))
                 except Exception:
                 except Exception:
-                    self.logger.error(ppp(
-                        "Unexpected or invalid packet:", packet))
+                    self.logger.error(ppp("Unexpected or invalid packet:", packet))
                     raise
         self.logger.debug("SPD: Num packets: %s", len(if_caps[0].res))
         self.logger.debug("SPD: Num packets: %s", len(if_caps[1].res))
                     raise
         self.logger.debug("SPD: Num packets: %s", len(if_caps[0].res))
         self.logger.debug("SPD: Num packets: %s", len(if_caps[1].res))
@@ -600,5 +761,5 @@ class IPSec4SpdTestCaseCollision(SpdFlowCacheOutbound):
         self.verify_num_outbound_flow_cache_entries(1)
 
 
         self.verify_num_outbound_flow_cache_entries(1)
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index 14c9b3e..9da75f0 100644 (file)
@@ -10,13 +10,29 @@ from scapy.layers.inet6 import IPv6
 from scapy.contrib.mpls import MPLS
 from framework import tag_fixme_vpp_workers
 from framework import VppTestRunner
 from scapy.contrib.mpls import MPLS
 from framework import tag_fixme_vpp_workers
 from framework import VppTestRunner
-from template_ipsec import TemplateIpsec, IpsecTun4Tests, IpsecTun6Tests, \
-    IpsecTun4, IpsecTun6,  IpsecTcpTests, mk_scapy_crypt_key, \
-    IpsecTun6HandoffTests, IpsecTun4HandoffTests, config_tun_params
+from template_ipsec import (
+    TemplateIpsec,
+    IpsecTun4Tests,
+    IpsecTun6Tests,
+    IpsecTun4,
+    IpsecTun6,
+    IpsecTcpTests,
+    mk_scapy_crypt_key,
+    IpsecTun6HandoffTests,
+    IpsecTun4HandoffTests,
+    config_tun_params,
+)
 from vpp_gre_interface import VppGreInterface
 from vpp_ipip_tun_interface import VppIpIpTunInterface
 from vpp_gre_interface import VppGreInterface
 from vpp_ipip_tun_interface import VppIpIpTunInterface
-from vpp_ip_route import VppIpRoute, VppRoutePath, DpoProto, VppMplsLabel, \
-    VppMplsTable, VppMplsRoute, FibPathProto
+from vpp_ip_route import (
+    VppIpRoute,
+    VppRoutePath,
+    DpoProto,
+    VppMplsLabel,
+    VppMplsTable,
+    VppMplsRoute,
+    FibPathProto,
+)
 from vpp_ipsec import VppIpsecSA, VppIpsecTunProtect, VppIpsecInterface
 from vpp_l2 import VppBridgeDomain, VppBridgeDomainPort
 from vpp_sub_interface import L2_VTR_OP, VppDot1QSubint
 from vpp_ipsec import VppIpsecSA, VppIpsecTunProtect, VppIpsecInterface
 from vpp_l2 import VppBridgeDomain, VppBridgeDomainPort
 from vpp_sub_interface import L2_VTR_OP, VppDot1QSubint
@@ -30,8 +46,9 @@ from vpp_policer import PolicerAction, VppPolicer, Dir
 
 def config_tun_params(p, encryption_type, tun_if, src=None, dst=None):
     ip_class_by_addr_type = {socket.AF_INET: IP, socket.AF_INET6: IPv6}
 
 def config_tun_params(p, encryption_type, tun_if, src=None, dst=None):
     ip_class_by_addr_type = {socket.AF_INET: IP, socket.AF_INET6: IPv6}
-    esn_en = bool(p.flags & (VppEnum.vl_api_ipsec_sad_flags_t.
-                             IPSEC_API_SAD_FLAG_USE_ESN))
+    esn_en = bool(
+        p.flags & (VppEnum.vl_api_ipsec_sad_flags_t.IPSEC_API_SAD_FLAG_USE_ESN)
+    )
     crypt_key = mk_scapy_crypt_key(p)
     if tun_if:
         p.tun_dst = tun_if.remote_ip
     crypt_key = mk_scapy_crypt_key(p)
     if tun_if:
         p.tun_dst = tun_if.remote_ip
@@ -41,77 +58,84 @@ def config_tun_params(p, encryption_type, tun_if, src=None, dst=None):
         p.tun_src = src
 
     if p.nat_header:
         p.tun_src = src
 
     if p.nat_header:
-        is_default_port = (p.nat_header.dport == 4500)
+        is_default_port = p.nat_header.dport == 4500
     else:
         is_default_port = True
 
     if is_default_port:
         outbound_nat_header = p.nat_header
     else:
     else:
         is_default_port = True
 
     if is_default_port:
         outbound_nat_header = p.nat_header
     else:
-        outbound_nat_header = UDP(sport=p.nat_header.dport,
-                                  dport=p.nat_header.sport)
+        outbound_nat_header = UDP(sport=p.nat_header.dport, dport=p.nat_header.sport)
         bind_layers(UDP, ESP, dport=p.nat_header.dport)
 
     p.scapy_tun_sa = SecurityAssociation(
         bind_layers(UDP, ESP, dport=p.nat_header.dport)
 
     p.scapy_tun_sa = SecurityAssociation(
-        encryption_type, spi=p.vpp_tun_spi,
+        encryption_type,
+        spi=p.vpp_tun_spi,
         crypt_algo=p.crypt_algo,
         crypt_key=crypt_key,
         crypt_algo=p.crypt_algo,
         crypt_key=crypt_key,
-        auth_algo=p.auth_algo, auth_key=p.auth_key,
-        tunnel_header=ip_class_by_addr_type[p.addr_type](
-            src=p.tun_dst,
-            dst=p.tun_src),
+        auth_algo=p.auth_algo,
+        auth_key=p.auth_key,
+        tunnel_header=ip_class_by_addr_type[p.addr_type](src=p.tun_dst, dst=p.tun_src),
         nat_t_header=outbound_nat_header,
         nat_t_header=outbound_nat_header,
-        esn_en=esn_en)
+        esn_en=esn_en,
+    )
     p.vpp_tun_sa = SecurityAssociation(
     p.vpp_tun_sa = SecurityAssociation(
-        encryption_type, spi=p.scapy_tun_spi,
+        encryption_type,
+        spi=p.scapy_tun_spi,
         crypt_algo=p.crypt_algo,
         crypt_key=crypt_key,
         crypt_algo=p.crypt_algo,
         crypt_key=crypt_key,
-        auth_algo=p.auth_algo, auth_key=p.auth_key,
-        tunnel_header=ip_class_by_addr_type[p.addr_type](
-            dst=p.tun_dst,
-            src=p.tun_src),
+        auth_algo=p.auth_algo,
+        auth_key=p.auth_key,
+        tunnel_header=ip_class_by_addr_type[p.addr_type](dst=p.tun_dst, src=p.tun_src),
         nat_t_header=p.nat_header,
         nat_t_header=p.nat_header,
-        esn_en=esn_en)
+        esn_en=esn_en,
+    )
 
 
 def config_tra_params(p, encryption_type, tun_if):
     ip_class_by_addr_type = {socket.AF_INET: IP, socket.AF_INET6: IPv6}
 
 
 def config_tra_params(p, encryption_type, tun_if):
     ip_class_by_addr_type = {socket.AF_INET: IP, socket.AF_INET6: IPv6}
-    esn_en = bool(p.flags & (VppEnum.vl_api_ipsec_sad_flags_t.
-                             IPSEC_API_SAD_FLAG_USE_ESN))
+    esn_en = bool(
+        p.flags & (VppEnum.vl_api_ipsec_sad_flags_t.IPSEC_API_SAD_FLAG_USE_ESN)
+    )
     crypt_key = mk_scapy_crypt_key(p)
     p.tun_dst = tun_if.remote_ip
     p.tun_src = tun_if.local_ip
 
     if p.nat_header:
     crypt_key = mk_scapy_crypt_key(p)
     p.tun_dst = tun_if.remote_ip
     p.tun_src = tun_if.local_ip
 
     if p.nat_header:
-        is_default_port = (p.nat_header.dport == 4500)
+        is_default_port = p.nat_header.dport == 4500
     else:
         is_default_port = True
 
     if is_default_port:
         outbound_nat_header = p.nat_header
     else:
     else:
         is_default_port = True
 
     if is_default_port:
         outbound_nat_header = p.nat_header
     else:
-        outbound_nat_header = UDP(sport=p.nat_header.dport,
-                                  dport=p.nat_header.sport)
+        outbound_nat_header = UDP(sport=p.nat_header.dport, dport=p.nat_header.sport)
         bind_layers(UDP, ESP, dport=p.nat_header.dport)
 
     p.scapy_tun_sa = SecurityAssociation(
         bind_layers(UDP, ESP, dport=p.nat_header.dport)
 
     p.scapy_tun_sa = SecurityAssociation(
-        encryption_type, spi=p.vpp_tun_spi,
+        encryption_type,
+        spi=p.vpp_tun_spi,
         crypt_algo=p.crypt_algo,
         crypt_key=crypt_key,
         crypt_algo=p.crypt_algo,
         crypt_key=crypt_key,
-        auth_algo=p.auth_algo, auth_key=p.auth_key,
+        auth_algo=p.auth_algo,
+        auth_key=p.auth_key,
         esn_en=esn_en,
         esn_en=esn_en,
-        nat_t_header=outbound_nat_header)
+        nat_t_header=outbound_nat_header,
+    )
     p.vpp_tun_sa = SecurityAssociation(
     p.vpp_tun_sa = SecurityAssociation(
-        encryption_type, spi=p.scapy_tun_spi,
+        encryption_type,
+        spi=p.scapy_tun_spi,
         crypt_algo=p.crypt_algo,
         crypt_key=crypt_key,
         crypt_algo=p.crypt_algo,
         crypt_key=crypt_key,
-        auth_algo=p.auth_algo, auth_key=p.auth_key,
+        auth_algo=p.auth_algo,
+        auth_key=p.auth_key,
         esn_en=esn_en,
         esn_en=esn_en,
-        nat_t_header=p.nat_header)
+        nat_t_header=p.nat_header,
+    )
 
 
 class TemplateIpsec4TunProtect(object):
 
 
 class TemplateIpsec4TunProtect(object):
-    """ IPsec IPv4 Tunnel protect """
+    """IPsec IPv4 Tunnel protect"""
 
     encryption_type = ESP
     tun4_encrypt_node_name = "esp4-encrypt-tun"
 
     encryption_type = ESP
     tun4_encrypt_node_name = "esp4-encrypt-tun"
@@ -121,69 +145,97 @@ class TemplateIpsec4TunProtect(object):
     def config_sa_tra(self, p):
         config_tun_params(p, self.encryption_type, p.tun_if)
 
     def config_sa_tra(self, p):
         config_tun_params(p, self.encryption_type, p.tun_if)
 
-        p.tun_sa_out = VppIpsecSA(self, p.scapy_tun_sa_id, p.scapy_tun_spi,
-                                  p.auth_algo_vpp_id, p.auth_key,
-                                  p.crypt_algo_vpp_id, p.crypt_key,
-                                  self.vpp_esp_protocol,
-                                  flags=p.flags)
+        p.tun_sa_out = VppIpsecSA(
+            self,
+            p.scapy_tun_sa_id,
+            p.scapy_tun_spi,
+            p.auth_algo_vpp_id,
+            p.auth_key,
+            p.crypt_algo_vpp_id,
+            p.crypt_key,
+            self.vpp_esp_protocol,
+            flags=p.flags,
+        )
         p.tun_sa_out.add_vpp_config()
 
         p.tun_sa_out.add_vpp_config()
 
-        p.tun_sa_in = VppIpsecSA(self, p.vpp_tun_sa_id, p.vpp_tun_spi,
-                                 p.auth_algo_vpp_id, p.auth_key,
-                                 p.crypt_algo_vpp_id, p.crypt_key,
-                                 self.vpp_esp_protocol,
-                                 flags=p.flags)
+        p.tun_sa_in = VppIpsecSA(
+            self,
+            p.vpp_tun_sa_id,
+            p.vpp_tun_spi,
+            p.auth_algo_vpp_id,
+            p.auth_key,
+            p.crypt_algo_vpp_id,
+            p.crypt_key,
+            self.vpp_esp_protocol,
+            flags=p.flags,
+        )
         p.tun_sa_in.add_vpp_config()
 
     def config_sa_tun(self, p):
         config_tun_params(p, self.encryption_type, p.tun_if)
 
         p.tun_sa_in.add_vpp_config()
 
     def config_sa_tun(self, p):
         config_tun_params(p, self.encryption_type, p.tun_if)
 
-        p.tun_sa_out = VppIpsecSA(self, p.scapy_tun_sa_id, p.scapy_tun_spi,
-                                  p.auth_algo_vpp_id, p.auth_key,
-                                  p.crypt_algo_vpp_id, p.crypt_key,
-                                  self.vpp_esp_protocol,
-                                  self.tun_if.local_addr[p.addr_type],
-                                  self.tun_if.remote_addr[p.addr_type],
-                                  flags=p.flags)
+        p.tun_sa_out = VppIpsecSA(
+            self,
+            p.scapy_tun_sa_id,
+            p.scapy_tun_spi,
+            p.auth_algo_vpp_id,
+            p.auth_key,
+            p.crypt_algo_vpp_id,
+            p.crypt_key,
+            self.vpp_esp_protocol,
+            self.tun_if.local_addr[p.addr_type],
+            self.tun_if.remote_addr[p.addr_type],
+            flags=p.flags,
+        )
         p.tun_sa_out.add_vpp_config()
 
         p.tun_sa_out.add_vpp_config()
 
-        p.tun_sa_in = VppIpsecSA(self, p.vpp_tun_sa_id, p.vpp_tun_spi,
-                                 p.auth_algo_vpp_id, p.auth_key,
-                                 p.crypt_algo_vpp_id, p.crypt_key,
-                                 self.vpp_esp_protocol,
-                                 self.tun_if.remote_addr[p.addr_type],
-                                 self.tun_if.local_addr[p.addr_type],
-                                 flags=p.flags)
+        p.tun_sa_in = VppIpsecSA(
+            self,
+            p.vpp_tun_sa_id,
+            p.vpp_tun_spi,
+            p.auth_algo_vpp_id,
+            p.auth_key,
+            p.crypt_algo_vpp_id,
+            p.crypt_key,
+            self.vpp_esp_protocol,
+            self.tun_if.remote_addr[p.addr_type],
+            self.tun_if.local_addr[p.addr_type],
+            flags=p.flags,
+        )
         p.tun_sa_in.add_vpp_config()
 
     def config_protect(self, p):
         p.tun_sa_in.add_vpp_config()
 
     def config_protect(self, p):
-        p.tun_protect = VppIpsecTunProtect(self,
-                                           p.tun_if,
-                                           p.tun_sa_out,
-                                           [p.tun_sa_in])
+        p.tun_protect = VppIpsecTunProtect(self, p.tun_if, p.tun_sa_out, [p.tun_sa_in])
         p.tun_protect.add_vpp_config()
 
     def config_network(self, p):
         p.tun_protect.add_vpp_config()
 
     def config_network(self, p):
-        if hasattr(p, 'tun_dst'):
+        if hasattr(p, "tun_dst"):
             tun_dst = p.tun_dst
         else:
             tun_dst = self.pg0.remote_ip4
             tun_dst = p.tun_dst
         else:
             tun_dst = self.pg0.remote_ip4
-        p.tun_if = VppIpIpTunInterface(self, self.pg0,
-                                       self.pg0.local_ip4,
-                                       tun_dst)
+        p.tun_if = VppIpIpTunInterface(self, self.pg0, self.pg0.local_ip4, tun_dst)
         p.tun_if.add_vpp_config()
         p.tun_if.admin_up()
         p.tun_if.config_ip4()
         p.tun_if.config_ip6()
 
         p.tun_if.add_vpp_config()
         p.tun_if.admin_up()
         p.tun_if.config_ip4()
         p.tun_if.config_ip6()
 
-        p.route = VppIpRoute(self, p.remote_tun_if_host, 32,
-                             [VppRoutePath(p.tun_if.remote_ip4,
-                                           0xffffffff)])
+        p.route = VppIpRoute(
+            self,
+            p.remote_tun_if_host,
+            32,
+            [VppRoutePath(p.tun_if.remote_ip4, 0xFFFFFFFF)],
+        )
         p.route.add_vpp_config()
         p.route.add_vpp_config()
-        r = VppIpRoute(self, p.remote_tun_if_host6, 128,
-                       [VppRoutePath(p.tun_if.remote_ip6,
-                                     0xffffffff,
-                                     proto=DpoProto.DPO_PROTO_IP6)])
+        r = VppIpRoute(
+            self,
+            p.remote_tun_if_host6,
+            128,
+            [
+                VppRoutePath(
+                    p.tun_if.remote_ip6, 0xFFFFFFFF, proto=DpoProto.DPO_PROTO_IP6
+                )
+            ],
+        )
         r.add_vpp_config()
 
     def unconfig_network(self, p):
         r.add_vpp_config()
 
     def unconfig_network(self, p):
@@ -198,9 +250,8 @@ class TemplateIpsec4TunProtect(object):
         p.tun_sa_in.remove_vpp_config()
 
 
         p.tun_sa_in.remove_vpp_config()
 
 
-class TemplateIpsec4TunIfEsp(TemplateIpsec4TunProtect,
-                             TemplateIpsec):
-    """ IPsec tunnel interface tests """
+class TemplateIpsec4TunIfEsp(TemplateIpsec4TunProtect, TemplateIpsec):
+    """IPsec tunnel interface tests"""
 
     encryption_type = ESP
 
 
     encryption_type = ESP
 
@@ -227,9 +278,8 @@ class TemplateIpsec4TunIfEsp(TemplateIpsec4TunProtect,
         super(TemplateIpsec4TunIfEsp, self).tearDown()
 
 
         super(TemplateIpsec4TunIfEsp, self).tearDown()
 
 
-class TemplateIpsec4TunIfEspUdp(TemplateIpsec4TunProtect,
-                                TemplateIpsec):
-    """ IPsec UDP tunnel interface tests """
+class TemplateIpsec4TunIfEspUdp(TemplateIpsec4TunProtect, TemplateIpsec):
+    """IPsec UDP tunnel interface tests"""
 
     tun4_encrypt_node_name = "esp4-encrypt-tun"
     tun4_decrypt_node_name = ["esp4-decrypt-tun", "esp4-decrypt-tun-post"]
 
     tun4_encrypt_node_name = "esp4-encrypt-tun"
     tun4_decrypt_node_name = ["esp4-decrypt-tun", "esp4-decrypt-tun-post"]
@@ -270,30 +320,41 @@ class TemplateIpsec4TunIfEspUdp(TemplateIpsec4TunProtect,
     def config_sa_tra(self, p):
         config_tun_params(p, self.encryption_type, p.tun_if)
 
     def config_sa_tra(self, p):
         config_tun_params(p, self.encryption_type, p.tun_if)
 
-        p.tun_sa_out = VppIpsecSA(self, p.scapy_tun_sa_id, p.scapy_tun_spi,
-                                  p.auth_algo_vpp_id, p.auth_key,
-                                  p.crypt_algo_vpp_id, p.crypt_key,
-                                  self.vpp_esp_protocol,
-                                  flags=p.flags,
-                                  udp_src=p.nat_header.sport,
-                                  udp_dst=p.nat_header.dport)
+        p.tun_sa_out = VppIpsecSA(
+            self,
+            p.scapy_tun_sa_id,
+            p.scapy_tun_spi,
+            p.auth_algo_vpp_id,
+            p.auth_key,
+            p.crypt_algo_vpp_id,
+            p.crypt_key,
+            self.vpp_esp_protocol,
+            flags=p.flags,
+            udp_src=p.nat_header.sport,
+            udp_dst=p.nat_header.dport,
+        )
         p.tun_sa_out.add_vpp_config()
 
         p.tun_sa_out.add_vpp_config()
 
-        p.tun_sa_in = VppIpsecSA(self, p.vpp_tun_sa_id, p.vpp_tun_spi,
-                                 p.auth_algo_vpp_id, p.auth_key,
-                                 p.crypt_algo_vpp_id, p.crypt_key,
-                                 self.vpp_esp_protocol,
-                                 flags=p.flags,
-                                 udp_src=p.nat_header.sport,
-                                 udp_dst=p.nat_header.dport)
+        p.tun_sa_in = VppIpsecSA(
+            self,
+            p.vpp_tun_sa_id,
+            p.vpp_tun_spi,
+            p.auth_algo_vpp_id,
+            p.auth_key,
+            p.crypt_algo_vpp_id,
+            p.crypt_key,
+            self.vpp_esp_protocol,
+            flags=p.flags,
+            udp_src=p.nat_header.sport,
+            udp_dst=p.nat_header.dport,
+        )
         p.tun_sa_in.add_vpp_config()
 
     def setUp(self):
         super(TemplateIpsec4TunIfEspUdp, self).setUp()
 
         p = self.ipv4_params
         p.tun_sa_in.add_vpp_config()
 
     def setUp(self):
         super(TemplateIpsec4TunIfEspUdp, self).setUp()
 
         p = self.ipv4_params
-        p.flags = (VppEnum.vl_api_ipsec_sad_flags_t.
-                   IPSEC_API_SAD_FLAG_UDP_ENCAP)
+        p.flags = VppEnum.vl_api_ipsec_sad_flags_t.IPSEC_API_SAD_FLAG_UDP_ENCAP
         p.nat_header = UDP(sport=5454, dport=4500)
 
         self.tun_if = self.pg0
         p.nat_header = UDP(sport=5454, dport=4500)
 
         self.tun_if = self.pg0
@@ -307,38 +368,38 @@ class TemplateIpsec4TunIfEspUdp(TemplateIpsec4TunProtect,
 
 
 class TestIpsec4TunIfEsp1(TemplateIpsec4TunIfEsp, IpsecTun4Tests):
 
 
 class TestIpsec4TunIfEsp1(TemplateIpsec4TunIfEsp, IpsecTun4Tests):
-    """ Ipsec ESP - TUN tests """
+    """Ipsec ESP - TUN tests"""
+
     tun4_encrypt_node_name = "esp4-encrypt-tun"
     tun4_decrypt_node_name = ["esp4-decrypt-tun", "esp4-decrypt-tun-post"]
 
     def test_tun_basic64(self):
     tun4_encrypt_node_name = "esp4-encrypt-tun"
     tun4_decrypt_node_name = ["esp4-decrypt-tun", "esp4-decrypt-tun-post"]
 
     def test_tun_basic64(self):
-        """ ipsec 6o4 tunnel basic test """
+        """ipsec 6o4 tunnel basic test"""
         self.tun4_encrypt_node_name = "esp4-encrypt-tun"
 
         self.verify_tun_64(self.params[socket.AF_INET], count=1)
 
     def test_tun_burst64(self):
         self.tun4_encrypt_node_name = "esp4-encrypt-tun"
 
         self.verify_tun_64(self.params[socket.AF_INET], count=1)
 
     def test_tun_burst64(self):
-        """ ipsec 6o4 tunnel basic test """
+        """ipsec 6o4 tunnel basic test"""
         self.tun4_encrypt_node_name = "esp4-encrypt-tun"
 
         self.verify_tun_64(self.params[socket.AF_INET], count=257)
 
     def test_tun_basic_frag44(self):
         self.tun4_encrypt_node_name = "esp4-encrypt-tun"
 
         self.verify_tun_64(self.params[socket.AF_INET], count=257)
 
     def test_tun_basic_frag44(self):
-        """ ipsec 4o4 tunnel frag basic test """
+        """ipsec 4o4 tunnel frag basic test"""
         self.tun4_encrypt_node_name = "esp4-encrypt-tun"
 
         p = self.ipv4_params
 
         self.tun4_encrypt_node_name = "esp4-encrypt-tun"
 
         p = self.ipv4_params
 
-        self.vapi.sw_interface_set_mtu(p.tun_if.sw_if_index,
-                                       [1500, 0, 0, 0])
-        self.verify_tun_44(self.params[socket.AF_INET],
-                           count=1, payload_size=1800, n_rx=2)
-        self.vapi.sw_interface_set_mtu(p.tun_if.sw_if_index,
-                                       [9000, 0, 0, 0])
+        self.vapi.sw_interface_set_mtu(p.tun_if.sw_if_index, [1500, 0, 0, 0])
+        self.verify_tun_44(
+            self.params[socket.AF_INET], count=1, payload_size=1800, n_rx=2
+        )
+        self.vapi.sw_interface_set_mtu(p.tun_if.sw_if_index, [9000, 0, 0, 0])
 
 
 class TestIpsec4TunIfEspUdp(TemplateIpsec4TunIfEspUdp, IpsecTun4Tests):
 
 
 class TestIpsec4TunIfEspUdp(TemplateIpsec4TunIfEspUdp, IpsecTun4Tests):
-    """ Ipsec ESP UDP tests """
+    """Ipsec ESP UDP tests"""
 
     tun4_input_node = "ipsec4-tun-input"
 
 
     tun4_input_node = "ipsec4-tun-input"
 
@@ -346,22 +407,22 @@ class TestIpsec4TunIfEspUdp(TemplateIpsec4TunIfEspUdp, IpsecTun4Tests):
         super(TestIpsec4TunIfEspUdp, self).setUp()
 
     def test_keepalive(self):
         super(TestIpsec4TunIfEspUdp, self).setUp()
 
     def test_keepalive(self):
-        """ IPSEC NAT Keepalive """
+        """IPSEC NAT Keepalive"""
         self.verify_keepalive(self.ipv4_params)
 
 
 class TestIpsec4TunIfEspUdpGCM(TemplateIpsec4TunIfEspUdp, IpsecTun4Tests):
         self.verify_keepalive(self.ipv4_params)
 
 
 class TestIpsec4TunIfEspUdpGCM(TemplateIpsec4TunIfEspUdp, IpsecTun4Tests):
-    """ Ipsec ESP UDP GCM tests """
+    """Ipsec ESP UDP GCM tests"""
 
     tun4_input_node = "ipsec4-tun-input"
 
     def setUp(self):
         super(TestIpsec4TunIfEspUdpGCM, self).setUp()
         p = self.ipv4_params
 
     tun4_input_node = "ipsec4-tun-input"
 
     def setUp(self):
         super(TestIpsec4TunIfEspUdpGCM, self).setUp()
         p = self.ipv4_params
-        p.auth_algo_vpp_id = (VppEnum.vl_api_ipsec_integ_alg_t.
-                              IPSEC_API_INTEG_ALG_NONE)
-        p.crypt_algo_vpp_id = (VppEnum.vl_api_ipsec_crypto_alg_t.
-                               IPSEC_API_CRYPTO_ALG_AES_GCM_256)
+        p.auth_algo_vpp_id = VppEnum.vl_api_ipsec_integ_alg_t.IPSEC_API_INTEG_ALG_NONE
+        p.crypt_algo_vpp_id = (
+            VppEnum.vl_api_ipsec_crypto_alg_t.IPSEC_API_CRYPTO_ALG_AES_GCM_256
+        )
         p.crypt_algo = "AES-GCM"
         p.auth_algo = "NULL"
         p.crypt_key = b"JPjyOWBeVEQiMe7hJPjyOWBeVEQiMe7h"
         p.crypt_algo = "AES-GCM"
         p.auth_algo = "NULL"
         p.crypt_key = b"JPjyOWBeVEQiMe7hJPjyOWBeVEQiMe7h"
@@ -369,75 +430,104 @@ class TestIpsec4TunIfEspUdpGCM(TemplateIpsec4TunIfEspUdp, IpsecTun4Tests):
 
 
 class TestIpsec4TunIfEsp2(TemplateIpsec4TunIfEsp, IpsecTcpTests):
 
 
 class TestIpsec4TunIfEsp2(TemplateIpsec4TunIfEsp, IpsecTcpTests):
-    """ Ipsec ESP - TCP tests """
+    """Ipsec ESP - TCP tests"""
+
     pass
 
 
 class TemplateIpsec6TunProtect(object):
     pass
 
 
 class TemplateIpsec6TunProtect(object):
-    """ IPsec IPv6 Tunnel protect """
+    """IPsec IPv6 Tunnel protect"""
 
     def config_sa_tra(self, p):
         config_tun_params(p, self.encryption_type, p.tun_if)
 
 
     def config_sa_tra(self, p):
         config_tun_params(p, self.encryption_type, p.tun_if)
 
-        p.tun_sa_out = VppIpsecSA(self, p.scapy_tun_sa_id, p.scapy_tun_spi,
-                                  p.auth_algo_vpp_id, p.auth_key,
-                                  p.crypt_algo_vpp_id, p.crypt_key,
-                                  self.vpp_esp_protocol)
+        p.tun_sa_out = VppIpsecSA(
+            self,
+            p.scapy_tun_sa_id,
+            p.scapy_tun_spi,
+            p.auth_algo_vpp_id,
+            p.auth_key,
+            p.crypt_algo_vpp_id,
+            p.crypt_key,
+            self.vpp_esp_protocol,
+        )
         p.tun_sa_out.add_vpp_config()
 
         p.tun_sa_out.add_vpp_config()
 
-        p.tun_sa_in = VppIpsecSA(self, p.vpp_tun_sa_id, p.vpp_tun_spi,
-                                 p.auth_algo_vpp_id, p.auth_key,
-                                 p.crypt_algo_vpp_id, p.crypt_key,
-                                 self.vpp_esp_protocol)
+        p.tun_sa_in = VppIpsecSA(
+            self,
+            p.vpp_tun_sa_id,
+            p.vpp_tun_spi,
+            p.auth_algo_vpp_id,
+            p.auth_key,
+            p.crypt_algo_vpp_id,
+            p.crypt_key,
+            self.vpp_esp_protocol,
+        )
         p.tun_sa_in.add_vpp_config()
 
     def config_sa_tun(self, p):
         config_tun_params(p, self.encryption_type, p.tun_if)
 
         p.tun_sa_in.add_vpp_config()
 
     def config_sa_tun(self, p):
         config_tun_params(p, self.encryption_type, p.tun_if)
 
-        p.tun_sa_out = VppIpsecSA(self, p.scapy_tun_sa_id, p.scapy_tun_spi,
-                                  p.auth_algo_vpp_id, p.auth_key,
-                                  p.crypt_algo_vpp_id, p.crypt_key,
-                                  self.vpp_esp_protocol,
-                                  self.tun_if.local_addr[p.addr_type],
-                                  self.tun_if.remote_addr[p.addr_type])
+        p.tun_sa_out = VppIpsecSA(
+            self,
+            p.scapy_tun_sa_id,
+            p.scapy_tun_spi,
+            p.auth_algo_vpp_id,
+            p.auth_key,
+            p.crypt_algo_vpp_id,
+            p.crypt_key,
+            self.vpp_esp_protocol,
+            self.tun_if.local_addr[p.addr_type],
+            self.tun_if.remote_addr[p.addr_type],
+        )
         p.tun_sa_out.add_vpp_config()
 
         p.tun_sa_out.add_vpp_config()
 
-        p.tun_sa_in = VppIpsecSA(self, p.vpp_tun_sa_id, p.vpp_tun_spi,
-                                 p.auth_algo_vpp_id, p.auth_key,
-                                 p.crypt_algo_vpp_id, p.crypt_key,
-                                 self.vpp_esp_protocol,
-                                 self.tun_if.remote_addr[p.addr_type],
-                                 self.tun_if.local_addr[p.addr_type])
+        p.tun_sa_in = VppIpsecSA(
+            self,
+            p.vpp_tun_sa_id,
+            p.vpp_tun_spi,
+            p.auth_algo_vpp_id,
+            p.auth_key,
+            p.crypt_algo_vpp_id,
+            p.crypt_key,
+            self.vpp_esp_protocol,
+            self.tun_if.remote_addr[p.addr_type],
+            self.tun_if.local_addr[p.addr_type],
+        )
         p.tun_sa_in.add_vpp_config()
 
     def config_protect(self, p):
         p.tun_sa_in.add_vpp_config()
 
     def config_protect(self, p):
-        p.tun_protect = VppIpsecTunProtect(self,
-                                           p.tun_if,
-                                           p.tun_sa_out,
-                                           [p.tun_sa_in])
+        p.tun_protect = VppIpsecTunProtect(self, p.tun_if, p.tun_sa_out, [p.tun_sa_in])
         p.tun_protect.add_vpp_config()
 
     def config_network(self, p):
         p.tun_protect.add_vpp_config()
 
     def config_network(self, p):
-        if hasattr(p, 'tun_dst'):
+        if hasattr(p, "tun_dst"):
             tun_dst = p.tun_dst
         else:
             tun_dst = self.pg0.remote_ip6
             tun_dst = p.tun_dst
         else:
             tun_dst = self.pg0.remote_ip6
-        p.tun_if = VppIpIpTunInterface(self, self.pg0,
-                                       self.pg0.local_ip6,
-                                       tun_dst)
+        p.tun_if = VppIpIpTunInterface(self, self.pg0, self.pg0.local_ip6, tun_dst)
         p.tun_if.add_vpp_config()
         p.tun_if.admin_up()
         p.tun_if.config_ip6()
         p.tun_if.config_ip4()
 
         p.tun_if.add_vpp_config()
         p.tun_if.admin_up()
         p.tun_if.config_ip6()
         p.tun_if.config_ip4()
 
-        p.route = VppIpRoute(self, p.remote_tun_if_host, 128,
-                             [VppRoutePath(p.tun_if.remote_ip6,
-                                           0xffffffff,
-                                           proto=DpoProto.DPO_PROTO_IP6)])
+        p.route = VppIpRoute(
+            self,
+            p.remote_tun_if_host,
+            128,
+            [
+                VppRoutePath(
+                    p.tun_if.remote_ip6, 0xFFFFFFFF, proto=DpoProto.DPO_PROTO_IP6
+                )
+            ],
+        )
         p.route.add_vpp_config()
         p.route.add_vpp_config()
-        r = VppIpRoute(self, p.remote_tun_if_host4, 32,
-                       [VppRoutePath(p.tun_if.remote_ip4,
-                                     0xffffffff)])
+        r = VppIpRoute(
+            self,
+            p.remote_tun_if_host4,
+            32,
+            [VppRoutePath(p.tun_if.remote_ip4, 0xFFFFFFFF)],
+        )
         r.add_vpp_config()
 
     def unconfig_network(self, p):
         r.add_vpp_config()
 
     def unconfig_network(self, p):
@@ -452,9 +542,8 @@ class TemplateIpsec6TunProtect(object):
         p.tun_sa_in.remove_vpp_config()
 
 
         p.tun_sa_in.remove_vpp_config()
 
 
-class TemplateIpsec6TunIfEsp(TemplateIpsec6TunProtect,
-                             TemplateIpsec):
-    """ IPsec tunnel interface tests """
+class TemplateIpsec6TunIfEsp(TemplateIpsec6TunProtect, TemplateIpsec):
+    """IPsec tunnel interface tests"""
 
     encryption_type = ESP
 
 
     encryption_type = ESP
 
@@ -472,31 +561,31 @@ class TemplateIpsec6TunIfEsp(TemplateIpsec6TunProtect,
         super(TemplateIpsec6TunIfEsp, self).tearDown()
 
 
         super(TemplateIpsec6TunIfEsp, self).tearDown()
 
 
-class TestIpsec6TunIfEsp1(TemplateIpsec6TunIfEsp,
-                          IpsecTun6Tests):
-    """ Ipsec ESP - TUN tests """
+class TestIpsec6TunIfEsp1(TemplateIpsec6TunIfEsp, IpsecTun6Tests):
+    """Ipsec ESP - TUN tests"""
+
     tun6_encrypt_node_name = "esp6-encrypt-tun"
     tun6_decrypt_node_name = ["esp6-decrypt-tun", "esp6-decrypt-tun-post"]
 
     def test_tun_basic46(self):
     tun6_encrypt_node_name = "esp6-encrypt-tun"
     tun6_decrypt_node_name = ["esp6-decrypt-tun", "esp6-decrypt-tun-post"]
 
     def test_tun_basic46(self):
-        """ ipsec 4o6 tunnel basic test """
+        """ipsec 4o6 tunnel basic test"""
         self.tun6_encrypt_node_name = "esp6-encrypt-tun"
         self.verify_tun_46(self.params[socket.AF_INET6], count=1)
 
     def test_tun_burst46(self):
         self.tun6_encrypt_node_name = "esp6-encrypt-tun"
         self.verify_tun_46(self.params[socket.AF_INET6], count=1)
 
     def test_tun_burst46(self):
-        """ ipsec 4o6 tunnel burst test """
+        """ipsec 4o6 tunnel burst test"""
         self.tun6_encrypt_node_name = "esp6-encrypt-tun"
         self.verify_tun_46(self.params[socket.AF_INET6], count=257)
 
 
         self.tun6_encrypt_node_name = "esp6-encrypt-tun"
         self.verify_tun_46(self.params[socket.AF_INET6], count=257)
 
 
-class TestIpsec6TunIfEspHandoff(TemplateIpsec6TunIfEsp,
-                                IpsecTun6HandoffTests):
-    """ Ipsec ESP 6 Handoff tests """
+class TestIpsec6TunIfEspHandoff(TemplateIpsec6TunIfEsp, IpsecTun6HandoffTests):
+    """Ipsec ESP 6 Handoff tests"""
+
     tun6_encrypt_node_name = "esp6-encrypt-tun"
     tun6_decrypt_node_name = ["esp6-decrypt-tun", "esp6-decrypt-tun-post"]
 
     def test_tun_handoff_66_police(self):
     tun6_encrypt_node_name = "esp6-encrypt-tun"
     tun6_decrypt_node_name = ["esp6-decrypt-tun", "esp6-decrypt-tun-post"]
 
     def test_tun_handoff_66_police(self):
-        """ ESP 6o6 tunnel with policer worker hand-off test """
+        """ESP 6o6 tunnel with policer worker hand-off test"""
         self.vapi.cli("clear errors")
         self.vapi.cli("clear ipsec sa")
 
         self.vapi.cli("clear errors")
         self.vapi.cli("clear ipsec sa")
 
@@ -504,12 +593,19 @@ class TestIpsec6TunIfEspHandoff(TemplateIpsec6TunIfEsp,
         p = self.params[socket.AF_INET6]
 
         action_tx = PolicerAction(
         p = self.params[socket.AF_INET6]
 
         action_tx = PolicerAction(
-            VppEnum.vl_api_sse2_qos_action_type_t.SSE2_QOS_ACTION_API_TRANSMIT,
-            0)
-        policer = VppPolicer(self, "pol1", 80, 0, 1000, 0,
-                             conform_action=action_tx,
-                             exceed_action=action_tx,
-                             violate_action=action_tx)
+            VppEnum.vl_api_sse2_qos_action_type_t.SSE2_QOS_ACTION_API_TRANSMIT, 0
+        )
+        policer = VppPolicer(
+            self,
+            "pol1",
+            80,
+            0,
+            1000,
+            0,
+            conform_action=action_tx,
+            exceed_action=action_tx,
+            violate_action=action_tx,
+        )
         policer.add_vpp_config()
 
         # Start policing on tun
         policer.add_vpp_config()
 
         # Start policing on tun
@@ -520,13 +616,17 @@ class TestIpsec6TunIfEspHandoff(TemplateIpsec6TunIfEsp,
 
             # inject alternately on worker 0 and 1.
             for worker in [0, 1, 0, 1]:
 
             # inject alternately on worker 0 and 1.
             for worker in [0, 1, 0, 1]:
-                send_pkts = self.gen_encrypt_pkts6(p, p.scapy_tun_sa,
-                                                   self.tun_if,
-                                                   src=p.remote_tun_if_host,
-                                                   dst=self.pg1.remote_ip6,
-                                                   count=N_PKTS)
-                recv_pkts = self.send_and_expect(self.tun_if, send_pkts,
-                                                 self.pg1, worker=worker)
+                send_pkts = self.gen_encrypt_pkts6(
+                    p,
+                    p.scapy_tun_sa,
+                    self.tun_if,
+                    src=p.remote_tun_if_host,
+                    dst=self.pg1.remote_ip6,
+                    count=N_PKTS,
+                )
+                recv_pkts = self.send_and_expect(
+                    self.tun_if, send_pkts, self.pg1, worker=worker
+                )
                 self.verify_decrypted6(p, recv_pkts)
                 self.logger.debug(self.vapi.cli("show trace max 100"))
 
                 self.verify_decrypted6(p, recv_pkts)
                 self.logger.debug(self.vapi.cli("show trace max 100"))
 
@@ -539,36 +639,36 @@ class TestIpsec6TunIfEspHandoff(TemplateIpsec6TunIfEsp,
                 self.assertEqual(stats, stats1)
 
                 # Worker 0, should have handed everything off
                 self.assertEqual(stats, stats1)
 
                 # Worker 0, should have handed everything off
-                self.assertEqual(stats0['conform_packets'], 0)
-                self.assertEqual(stats0['exceed_packets'], 0)
-                self.assertEqual(stats0['violate_packets'], 0)
+                self.assertEqual(stats0["conform_packets"], 0)
+                self.assertEqual(stats0["exceed_packets"], 0)
+                self.assertEqual(stats0["violate_packets"], 0)
             else:
                 # Second pass: both workers should have policed equal amounts
             else:
                 # Second pass: both workers should have policed equal amounts
-                self.assertGreater(stats1['conform_packets'], 0)
-                self.assertEqual(stats1['exceed_packets'], 0)
-                self.assertGreater(stats1['violate_packets'], 0)
+                self.assertGreater(stats1["conform_packets"], 0)
+                self.assertEqual(stats1["exceed_packets"], 0)
+                self.assertGreater(stats1["violate_packets"], 0)
 
 
-                self.assertGreater(stats0['conform_packets'], 0)
-                self.assertEqual(stats0['exceed_packets'], 0)
-                self.assertGreater(stats0['violate_packets'], 0)
+                self.assertGreater(stats0["conform_packets"], 0)
+                self.assertEqual(stats0["exceed_packets"], 0)
+                self.assertGreater(stats0["violate_packets"], 0)
 
 
-                self.assertEqual(stats0['conform_packets'] +
-                                 stats0['violate_packets'],
-                                 stats1['conform_packets'] +
-                                 stats1['violate_packets'])
+                self.assertEqual(
+                    stats0["conform_packets"] + stats0["violate_packets"],
+                    stats1["conform_packets"] + stats1["violate_packets"],
+                )
 
         policer.apply_vpp_config(p.tun_if.sw_if_index, Dir.RX, False)
         policer.remove_vpp_config()
 
 
 
         policer.apply_vpp_config(p.tun_if.sw_if_index, Dir.RX, False)
         policer.remove_vpp_config()
 
 
-class TestIpsec4TunIfEspHandoff(TemplateIpsec4TunIfEsp,
-                                IpsecTun4HandoffTests):
-    """ Ipsec ESP 4 Handoff tests """
+class TestIpsec4TunIfEspHandoff(TemplateIpsec4TunIfEsp, IpsecTun4HandoffTests):
+    """Ipsec ESP 4 Handoff tests"""
+
     tun4_encrypt_node_name = "esp4-encrypt-tun"
     tun4_decrypt_node_name = ["esp4-decrypt-tun", "esp4-decrypt-tun-post"]
 
     def test_tun_handoff_44_police(self):
     tun4_encrypt_node_name = "esp4-encrypt-tun"
     tun4_decrypt_node_name = ["esp4-decrypt-tun", "esp4-decrypt-tun-post"]
 
     def test_tun_handoff_44_police(self):
-        """ ESP 4o4 tunnel with policer worker hand-off test """
+        """ESP 4o4 tunnel with policer worker hand-off test"""
         self.vapi.cli("clear errors")
         self.vapi.cli("clear ipsec sa")
 
         self.vapi.cli("clear errors")
         self.vapi.cli("clear ipsec sa")
 
@@ -576,12 +676,19 @@ class TestIpsec4TunIfEspHandoff(TemplateIpsec4TunIfEsp,
         p = self.params[socket.AF_INET]
 
         action_tx = PolicerAction(
         p = self.params[socket.AF_INET]
 
         action_tx = PolicerAction(
-            VppEnum.vl_api_sse2_qos_action_type_t.SSE2_QOS_ACTION_API_TRANSMIT,
-            0)
-        policer = VppPolicer(self, "pol1", 80, 0, 1000, 0,
-                             conform_action=action_tx,
-                             exceed_action=action_tx,
-                             violate_action=action_tx)
+            VppEnum.vl_api_sse2_qos_action_type_t.SSE2_QOS_ACTION_API_TRANSMIT, 0
+        )
+        policer = VppPolicer(
+            self,
+            "pol1",
+            80,
+            0,
+            1000,
+            0,
+            conform_action=action_tx,
+            exceed_action=action_tx,
+            violate_action=action_tx,
+        )
         policer.add_vpp_config()
 
         # Start policing on tun
         policer.add_vpp_config()
 
         # Start policing on tun
@@ -592,13 +699,17 @@ class TestIpsec4TunIfEspHandoff(TemplateIpsec4TunIfEsp,
 
             # inject alternately on worker 0 and 1.
             for worker in [0, 1, 0, 1]:
 
             # inject alternately on worker 0 and 1.
             for worker in [0, 1, 0, 1]:
-                send_pkts = self.gen_encrypt_pkts(p, p.scapy_tun_sa,
-                                                  self.tun_if,
-                                                  src=p.remote_tun_if_host,
-                                                  dst=self.pg1.remote_ip4,
-                                                  count=N_PKTS)
-                recv_pkts = self.send_and_expect(self.tun_if, send_pkts,
-                                                 self.pg1, worker=worker)
+                send_pkts = self.gen_encrypt_pkts(
+                    p,
+                    p.scapy_tun_sa,
+                    self.tun_if,
+                    src=p.remote_tun_if_host,
+                    dst=self.pg1.remote_ip4,
+                    count=N_PKTS,
+                )
+                recv_pkts = self.send_and_expect(
+                    self.tun_if, send_pkts, self.pg1, worker=worker
+                )
                 self.verify_decrypted(p, recv_pkts)
                 self.logger.debug(self.vapi.cli("show trace max 100"))
 
                 self.verify_decrypted(p, recv_pkts)
                 self.logger.debug(self.vapi.cli("show trace max 100"))
 
@@ -611,33 +722,31 @@ class TestIpsec4TunIfEspHandoff(TemplateIpsec4TunIfEsp,
                 self.assertEqual(stats, stats1)
 
                 # Worker 0, should have handed everything off
                 self.assertEqual(stats, stats1)
 
                 # Worker 0, should have handed everything off
-                self.assertEqual(stats0['conform_packets'], 0)
-                self.assertEqual(stats0['exceed_packets'], 0)
-                self.assertEqual(stats0['violate_packets'], 0)
+                self.assertEqual(stats0["conform_packets"], 0)
+                self.assertEqual(stats0["exceed_packets"], 0)
+                self.assertEqual(stats0["violate_packets"], 0)
             else:
                 # Second pass: both workers should have policed equal amounts
             else:
                 # Second pass: both workers should have policed equal amounts
-                self.assertGreater(stats1['conform_packets'], 0)
-                self.assertEqual(stats1['exceed_packets'], 0)
-                self.assertGreater(stats1['violate_packets'], 0)
+                self.assertGreater(stats1["conform_packets"], 0)
+                self.assertEqual(stats1["exceed_packets"], 0)
+                self.assertGreater(stats1["violate_packets"], 0)
 
 
-                self.assertGreater(stats0['conform_packets'], 0)
-                self.assertEqual(stats0['exceed_packets'], 0)
-                self.assertGreater(stats0['violate_packets'], 0)
+                self.assertGreater(stats0["conform_packets"], 0)
+                self.assertEqual(stats0["exceed_packets"], 0)
+                self.assertGreater(stats0["violate_packets"], 0)
 
 
-                self.assertEqual(stats0['conform_packets'] +
-                                 stats0['violate_packets'],
-                                 stats1['conform_packets'] +
-                                 stats1['violate_packets'])
+                self.assertEqual(
+                    stats0["conform_packets"] + stats0["violate_packets"],
+                    stats1["conform_packets"] + stats1["violate_packets"],
+                )
 
         policer.apply_vpp_config(p.tun_if.sw_if_index, Dir.RX, False)
         policer.remove_vpp_config()
 
 
 @tag_fixme_vpp_workers
 
         policer.apply_vpp_config(p.tun_if.sw_if_index, Dir.RX, False)
         policer.remove_vpp_config()
 
 
 @tag_fixme_vpp_workers
-class TestIpsec4MultiTunIfEsp(TemplateIpsec4TunProtect,
-                              TemplateIpsec,
-                              IpsecTun4):
-    """ IPsec IPv4 Multi Tunnel interface """
+class TestIpsec4MultiTunIfEsp(TemplateIpsec4TunProtect, TemplateIpsec, IpsecTun4):
+    """IPsec IPv4 Multi Tunnel interface"""
 
     encryption_type = ESP
     tun4_encrypt_node_name = "esp4-encrypt-tun"
 
     encryption_type = ESP
     tun4_encrypt_node_name = "esp4-encrypt-tun"
@@ -676,19 +785,23 @@ class TestIpsec4MultiTunIfEsp(TemplateIpsec4TunProtect,
         super(TestIpsec4MultiTunIfEsp, self).tearDown()
 
     def test_tun_44(self):
         super(TestIpsec4MultiTunIfEsp, self).tearDown()
 
     def test_tun_44(self):
-        """Multiple IPSEC tunnel interfaces """
+        """Multiple IPSEC tunnel interfaces"""
         for p in self.multi_params:
             self.verify_tun_44(p, count=127)
             self.assertEqual(p.tun_if.get_rx_stats(), 127)
             self.assertEqual(p.tun_if.get_tx_stats(), 127)
 
     def test_tun_rr_44(self):
         for p in self.multi_params:
             self.verify_tun_44(p, count=127)
             self.assertEqual(p.tun_if.get_rx_stats(), 127)
             self.assertEqual(p.tun_if.get_tx_stats(), 127)
 
     def test_tun_rr_44(self):
-        """ Round-robin packets acrros multiple interface """
+        """Round-robin packets acrros multiple interface"""
         tx = []
         for p in self.multi_params:
         tx = []
         for p in self.multi_params:
-            tx = tx + self.gen_encrypt_pkts(p, p.scapy_tun_sa, self.tun_if,
-                                            src=p.remote_tun_if_host,
-                                            dst=self.pg1.remote_ip4)
+            tx = tx + self.gen_encrypt_pkts(
+                p,
+                p.scapy_tun_sa,
+                self.tun_if,
+                src=p.remote_tun_if_host,
+                dst=self.pg1.remote_ip4,
+            )
         rxs = self.send_and_expect(self.tun_if, tx, self.pg1)
 
         for rx, p in zip(rxs, self.multi_params):
         rxs = self.send_and_expect(self.tun_if, tx, self.pg1)
 
         for rx, p in zip(rxs, self.multi_params):
@@ -696,18 +809,17 @@ class TestIpsec4MultiTunIfEsp(TemplateIpsec4TunProtect,
 
         tx = []
         for p in self.multi_params:
 
         tx = []
         for p in self.multi_params:
-            tx = tx + self.gen_pkts(self.pg1, src=self.pg1.remote_ip4,
-                                    dst=p.remote_tun_if_host)
+            tx = tx + self.gen_pkts(
+                self.pg1, src=self.pg1.remote_ip4, dst=p.remote_tun_if_host
+            )
         rxs = self.send_and_expect(self.pg1, tx, self.tun_if)
 
         for rx, p in zip(rxs, self.multi_params):
             self.verify_encrypted(p, p.vpp_tun_sa, [rx])
 
 
         rxs = self.send_and_expect(self.pg1, tx, self.tun_if)
 
         for rx, p in zip(rxs, self.multi_params):
             self.verify_encrypted(p, p.vpp_tun_sa, [rx])
 
 
-class TestIpsec4TunIfEspAll(TemplateIpsec4TunProtect,
-                            TemplateIpsec,
-                            IpsecTun4):
-    """ IPsec IPv4 Tunnel interface all Algos """
+class TestIpsec4TunIfEspAll(TemplateIpsec4TunProtect, TemplateIpsec, IpsecTun4):
+    """IPsec IPv4 Tunnel interface all Algos"""
 
     encryption_type = ESP
     tun4_encrypt_node_name = "esp4-encrypt-tun"
 
     encryption_type = ESP
     tun4_encrypt_node_name = "esp4-encrypt-tun"
@@ -736,7 +848,7 @@ class TestIpsec4TunIfEspAll(TemplateIpsec4TunProtect,
         # change the key and the SPI
         #
         np = copy.copy(p)
         # change the key and the SPI
         #
         np = copy.copy(p)
-        p.crypt_key = b'X' + p.crypt_key[1:]
+        p.crypt_key = b"X" + p.crypt_key[1:]
         p.scapy_tun_spi += 1
         p.scapy_tun_sa_id += 1
         p.vpp_tun_spi += 1
         p.scapy_tun_spi += 1
         p.scapy_tun_sa_id += 1
         p.vpp_tun_spi += 1
@@ -746,26 +858,30 @@ class TestIpsec4TunIfEspAll(TemplateIpsec4TunProtect,
 
         config_tun_params(p, self.encryption_type, p.tun_if)
 
 
         config_tun_params(p, self.encryption_type, p.tun_if)
 
-        p.tun_sa_out = VppIpsecSA(self,
-                                  p.scapy_tun_sa_id,
-                                  p.scapy_tun_spi,
-                                  p.auth_algo_vpp_id,
-                                  p.auth_key,
-                                  p.crypt_algo_vpp_id,
-                                  p.crypt_key,
-                                  self.vpp_esp_protocol,
-                                  flags=p.flags,
-                                  salt=p.salt)
-        p.tun_sa_in = VppIpsecSA(self,
-                                 p.vpp_tun_sa_id,
-                                 p.vpp_tun_spi,
-                                 p.auth_algo_vpp_id,
-                                 p.auth_key,
-                                 p.crypt_algo_vpp_id,
-                                 p.crypt_key,
-                                 self.vpp_esp_protocol,
-                                 flags=p.flags,
-                                 salt=p.salt)
+        p.tun_sa_out = VppIpsecSA(
+            self,
+            p.scapy_tun_sa_id,
+            p.scapy_tun_spi,
+            p.auth_algo_vpp_id,
+            p.auth_key,
+            p.crypt_algo_vpp_id,
+            p.crypt_key,
+            self.vpp_esp_protocol,
+            flags=p.flags,
+            salt=p.salt,
+        )
+        p.tun_sa_in = VppIpsecSA(
+            self,
+            p.vpp_tun_sa_id,
+            p.vpp_tun_spi,
+            p.auth_algo_vpp_id,
+            p.auth_key,
+            p.crypt_algo_vpp_id,
+            p.crypt_key,
+            self.vpp_esp_protocol,
+            flags=p.flags,
+            salt=p.salt,
+        )
         p.tun_sa_in.add_vpp_config()
         p.tun_sa_out.add_vpp_config()
 
         p.tun_sa_in.add_vpp_config()
         p.tun_sa_out.add_vpp_config()
 
@@ -775,68 +891,98 @@ class TestIpsec4TunIfEspAll(TemplateIpsec4TunProtect,
         self.logger.info(self.vapi.cli("sh ipsec sa"))
 
     def test_tun_44(self):
         self.logger.info(self.vapi.cli("sh ipsec sa"))
 
     def test_tun_44(self):
-        """IPSEC tunnel all algos """
+        """IPSEC tunnel all algos"""
 
         # foreach VPP crypto engine
         engines = ["ia32", "ipsecmb", "openssl"]
 
         # foreach crypto algorithm
 
         # foreach VPP crypto engine
         engines = ["ia32", "ipsecmb", "openssl"]
 
         # foreach crypto algorithm
-        algos = [{'vpp-crypto': (VppEnum.vl_api_ipsec_crypto_alg_t.
-                                 IPSEC_API_CRYPTO_ALG_AES_GCM_128),
-                  'vpp-integ': (VppEnum.vl_api_ipsec_integ_alg_t.
-                                IPSEC_API_INTEG_ALG_NONE),
-                  'scapy-crypto': "AES-GCM",
-                  'scapy-integ': "NULL",
-                  'key': b"JPjyOWBeVEQiMe7h",
-                  'salt': 3333},
-                 {'vpp-crypto': (VppEnum.vl_api_ipsec_crypto_alg_t.
-                                 IPSEC_API_CRYPTO_ALG_AES_GCM_192),
-                  'vpp-integ': (VppEnum.vl_api_ipsec_integ_alg_t.
-                                IPSEC_API_INTEG_ALG_NONE),
-                  'scapy-crypto': "AES-GCM",
-                  'scapy-integ': "NULL",
-                  'key': b"JPjyOWBeVEQiMe7hJPjyOWBe",
-                  'salt': 0},
-                 {'vpp-crypto': (VppEnum.vl_api_ipsec_crypto_alg_t.
-                                 IPSEC_API_CRYPTO_ALG_AES_GCM_256),
-                  'vpp-integ': (VppEnum.vl_api_ipsec_integ_alg_t.
-                                IPSEC_API_INTEG_ALG_NONE),
-                  'scapy-crypto': "AES-GCM",
-                  'scapy-integ': "NULL",
-                  'key': b"JPjyOWBeVEQiMe7hJPjyOWBeVEQiMe7h",
-                  'salt': 9999},
-                 {'vpp-crypto': (VppEnum.vl_api_ipsec_crypto_alg_t.
-                                 IPSEC_API_CRYPTO_ALG_AES_CBC_128),
-                  'vpp-integ': (VppEnum.vl_api_ipsec_integ_alg_t.
-                                IPSEC_API_INTEG_ALG_SHA1_96),
-                  'scapy-crypto': "AES-CBC",
-                  'scapy-integ': "HMAC-SHA1-96",
-                  'salt': 0,
-                  'key': b"JPjyOWBeVEQiMe7h"},
-                 {'vpp-crypto': (VppEnum.vl_api_ipsec_crypto_alg_t.
-                                 IPSEC_API_CRYPTO_ALG_AES_CBC_192),
-                  'vpp-integ': (VppEnum.vl_api_ipsec_integ_alg_t.
-                                IPSEC_API_INTEG_ALG_SHA_512_256),
-                  'scapy-crypto': "AES-CBC",
-                  'scapy-integ': "SHA2-512-256",
-                  'salt': 0,
-                  'key': b"JPjyOWBeVEQiMe7hJPjyOWBe"},
-                 {'vpp-crypto': (VppEnum.vl_api_ipsec_crypto_alg_t.
-                                 IPSEC_API_CRYPTO_ALG_AES_CBC_256),
-                  'vpp-integ': (VppEnum.vl_api_ipsec_integ_alg_t.
-                                IPSEC_API_INTEG_ALG_SHA_256_128),
-                  'scapy-crypto': "AES-CBC",
-                  'scapy-integ': "SHA2-256-128",
-                  'salt': 0,
-                  'key': b"JPjyOWBeVEQiMe7hJPjyOWBeVEQiMe7h"},
-                 {'vpp-crypto': (VppEnum.vl_api_ipsec_crypto_alg_t.
-                                 IPSEC_API_CRYPTO_ALG_NONE),
-                  'vpp-integ': (VppEnum.vl_api_ipsec_integ_alg_t.
-                                IPSEC_API_INTEG_ALG_SHA1_96),
-                  'scapy-crypto': "NULL",
-                  'scapy-integ': "HMAC-SHA1-96",
-                  'salt': 0,
-                  'key': b"JPjyOWBeVEQiMe7hJPjyOWBeVEQiMe7h"}]
+        algos = [
+            {
+                "vpp-crypto": (
+                    VppEnum.vl_api_ipsec_crypto_alg_t.IPSEC_API_CRYPTO_ALG_AES_GCM_128
+                ),
+                "vpp-integ": (
+                    VppEnum.vl_api_ipsec_integ_alg_t.IPSEC_API_INTEG_ALG_NONE
+                ),
+                "scapy-crypto": "AES-GCM",
+                "scapy-integ": "NULL",
+                "key": b"JPjyOWBeVEQiMe7h",
+                "salt": 3333,
+            },
+            {
+                "vpp-crypto": (
+                    VppEnum.vl_api_ipsec_crypto_alg_t.IPSEC_API_CRYPTO_ALG_AES_GCM_192
+                ),
+                "vpp-integ": (
+                    VppEnum.vl_api_ipsec_integ_alg_t.IPSEC_API_INTEG_ALG_NONE
+                ),
+                "scapy-crypto": "AES-GCM",
+                "scapy-integ": "NULL",
+                "key": b"JPjyOWBeVEQiMe7hJPjyOWBe",
+                "salt": 0,
+            },
+            {
+                "vpp-crypto": (
+                    VppEnum.vl_api_ipsec_crypto_alg_t.IPSEC_API_CRYPTO_ALG_AES_GCM_256
+                ),
+                "vpp-integ": (
+                    VppEnum.vl_api_ipsec_integ_alg_t.IPSEC_API_INTEG_ALG_NONE
+                ),
+                "scapy-crypto": "AES-GCM",
+                "scapy-integ": "NULL",
+                "key": b"JPjyOWBeVEQiMe7hJPjyOWBeVEQiMe7h",
+                "salt": 9999,
+            },
+            {
+                "vpp-crypto": (
+                    VppEnum.vl_api_ipsec_crypto_alg_t.IPSEC_API_CRYPTO_ALG_AES_CBC_128
+                ),
+                "vpp-integ": (
+                    VppEnum.vl_api_ipsec_integ_alg_t.IPSEC_API_INTEG_ALG_SHA1_96
+                ),
+                "scapy-crypto": "AES-CBC",
+                "scapy-integ": "HMAC-SHA1-96",
+                "salt": 0,
+                "key": b"JPjyOWBeVEQiMe7h",
+            },
+            {
+                "vpp-crypto": (
+                    VppEnum.vl_api_ipsec_crypto_alg_t.IPSEC_API_CRYPTO_ALG_AES_CBC_192
+                ),
+                "vpp-integ": (
+                    VppEnum.vl_api_ipsec_integ_alg_t.IPSEC_API_INTEG_ALG_SHA_512_256
+                ),
+                "scapy-crypto": "AES-CBC",
+                "scapy-integ": "SHA2-512-256",
+                "salt": 0,
+                "key": b"JPjyOWBeVEQiMe7hJPjyOWBe",
+            },
+            {
+                "vpp-crypto": (
+                    VppEnum.vl_api_ipsec_crypto_alg_t.IPSEC_API_CRYPTO_ALG_AES_CBC_256
+                ),
+                "vpp-integ": (
+                    VppEnum.vl_api_ipsec_integ_alg_t.IPSEC_API_INTEG_ALG_SHA_256_128
+                ),
+                "scapy-crypto": "AES-CBC",
+                "scapy-integ": "SHA2-256-128",
+                "salt": 0,
+                "key": b"JPjyOWBeVEQiMe7hJPjyOWBeVEQiMe7h",
+            },
+            {
+                "vpp-crypto": (
+                    VppEnum.vl_api_ipsec_crypto_alg_t.IPSEC_API_CRYPTO_ALG_NONE
+                ),
+                "vpp-integ": (
+                    VppEnum.vl_api_ipsec_integ_alg_t.IPSEC_API_INTEG_ALG_SHA1_96
+                ),
+                "scapy-crypto": "NULL",
+                "scapy-integ": "HMAC-SHA1-96",
+                "salt": 0,
+                "key": b"JPjyOWBeVEQiMe7hJPjyOWBeVEQiMe7h",
+            },
+        ]
 
         for engine in engines:
             self.vapi.cli("set crypto handler all %s" % engine)
 
         for engine in engines:
             self.vapi.cli("set crypto handler all %s" % engine)
@@ -848,12 +994,12 @@ class TestIpsec4TunIfEspAll(TemplateIpsec4TunProtect,
                 # with self.subTest(algo=algo['scapy']):
 
                 p = self.ipv4_params
                 # with self.subTest(algo=algo['scapy']):
 
                 p = self.ipv4_params
-                p.auth_algo_vpp_id = algo['vpp-integ']
-                p.crypt_algo_vpp_id = algo['vpp-crypto']
-                p.crypt_algo = algo['scapy-crypto']
-                p.auth_algo = algo['scapy-integ']
-                p.crypt_key = algo['key']
-                p.salt = algo['salt']
+                p.auth_algo_vpp_id = algo["vpp-integ"]
+                p.crypt_algo_vpp_id = algo["vpp-crypto"]
+                p.crypt_algo = algo["scapy-crypto"]
+                p.auth_algo = algo["scapy-integ"]
+                p.crypt_key = algo["key"]
+                p.salt = algo["salt"]
 
                 #
                 # rekey the tunnel
 
                 #
                 # rekey the tunnel
@@ -862,10 +1008,8 @@ class TestIpsec4TunIfEspAll(TemplateIpsec4TunProtect,
                 self.verify_tun_44(p, count=127)
 
 
                 self.verify_tun_44(p, count=127)
 
 
-class TestIpsec4TunIfEspNoAlgo(TemplateIpsec4TunProtect,
-                               TemplateIpsec,
-                               IpsecTun4):
-    """ IPsec IPv4 Tunnel interface no Algos """
+class TestIpsec4TunIfEspNoAlgo(TemplateIpsec4TunProtect, TemplateIpsec, IpsecTun4):
+    """IPsec IPv4 Tunnel interface no Algos"""
 
     encryption_type = ESP
     tun4_encrypt_node_name = "esp4-encrypt-tun"
 
     encryption_type = ESP
     tun4_encrypt_node_name = "esp4-encrypt-tun"
@@ -876,29 +1020,28 @@ class TestIpsec4TunIfEspNoAlgo(TemplateIpsec4TunProtect,
 
         self.tun_if = self.pg0
         p = self.ipv4_params
 
         self.tun_if = self.pg0
         p = self.ipv4_params
-        p.auth_algo_vpp_id = (VppEnum.vl_api_ipsec_integ_alg_t.
-                              IPSEC_API_INTEG_ALG_NONE)
-        p.auth_algo = 'NULL'
+        p.auth_algo_vpp_id = VppEnum.vl_api_ipsec_integ_alg_t.IPSEC_API_INTEG_ALG_NONE
+        p.auth_algo = "NULL"
         p.auth_key = []
 
         p.auth_key = []
 
-        p.crypt_algo_vpp_id = (VppEnum.vl_api_ipsec_crypto_alg_t.
-                               IPSEC_API_CRYPTO_ALG_NONE)
-        p.crypt_algo = 'NULL'
+        p.crypt_algo_vpp_id = (
+            VppEnum.vl_api_ipsec_crypto_alg_t.IPSEC_API_CRYPTO_ALG_NONE
+        )
+        p.crypt_algo = "NULL"
         p.crypt_key = []
 
     def tearDown(self):
         super(TestIpsec4TunIfEspNoAlgo, self).tearDown()
 
     def test_tun_44(self):
         p.crypt_key = []
 
     def tearDown(self):
         super(TestIpsec4TunIfEspNoAlgo, self).tearDown()
 
     def test_tun_44(self):
-        """ IPSec SA with NULL algos """
+        """IPSec SA with NULL algos"""
         p = self.ipv4_params
 
         self.config_network(p)
         self.config_sa_tra(p)
         self.config_protect(p)
 
         p = self.ipv4_params
 
         self.config_network(p)
         self.config_sa_tra(p)
         self.config_protect(p)
 
-        tx = self.gen_pkts(self.pg1, src=self.pg1.remote_ip4,
-                           dst=p.remote_tun_if_host)
+        tx = self.gen_pkts(self.pg1, src=self.pg1.remote_ip4, dst=p.remote_tun_if_host)
         self.send_and_assert_no_replies(self.pg1, tx)
 
         self.unconfig_protect(p)
         self.send_and_assert_no_replies(self.pg1, tx)
 
         self.unconfig_protect(p)
@@ -907,10 +1050,8 @@ class TestIpsec4TunIfEspNoAlgo(TemplateIpsec4TunProtect,
 
 
 @tag_fixme_vpp_workers
 
 
 @tag_fixme_vpp_workers
-class TestIpsec6MultiTunIfEsp(TemplateIpsec6TunProtect,
-                              TemplateIpsec,
-                              IpsecTun6):
-    """ IPsec IPv6 Multi Tunnel interface """
+class TestIpsec6MultiTunIfEsp(TemplateIpsec6TunProtect, TemplateIpsec, IpsecTun6):
+    """IPsec IPv6 Multi Tunnel interface"""
 
     encryption_type = ESP
     tun6_encrypt_node_name = "esp6-encrypt-tun"
 
     encryption_type = ESP
     tun6_encrypt_node_name = "esp6-encrypt-tun"
@@ -949,40 +1090,43 @@ class TestIpsec6MultiTunIfEsp(TemplateIpsec6TunProtect,
         super(TestIpsec6MultiTunIfEsp, self).tearDown()
 
     def test_tun_66(self):
         super(TestIpsec6MultiTunIfEsp, self).tearDown()
 
     def test_tun_66(self):
-        """Multiple IPSEC tunnel interfaces """
+        """Multiple IPSEC tunnel interfaces"""
         for p in self.multi_params:
             self.verify_tun_66(p, count=127)
             self.assertEqual(p.tun_if.get_rx_stats(), 127)
             self.assertEqual(p.tun_if.get_tx_stats(), 127)
 
 
         for p in self.multi_params:
             self.verify_tun_66(p, count=127)
             self.assertEqual(p.tun_if.get_rx_stats(), 127)
             self.assertEqual(p.tun_if.get_tx_stats(), 127)
 
 
-class TestIpsecGreTebIfEsp(TemplateIpsec,
-                           IpsecTun4Tests):
-    """ Ipsec GRE TEB ESP - TUN tests """
+class TestIpsecGreTebIfEsp(TemplateIpsec, IpsecTun4Tests):
+    """Ipsec GRE TEB ESP - TUN tests"""
+
     tun4_encrypt_node_name = "esp4-encrypt-tun"
     tun4_decrypt_node_name = ["esp4-decrypt-tun", "esp4-decrypt-tun-post"]
     encryption_type = ESP
     omac = "00:11:22:33:44:55"
 
     tun4_encrypt_node_name = "esp4-encrypt-tun"
     tun4_decrypt_node_name = ["esp4-decrypt-tun", "esp4-decrypt-tun-post"]
     encryption_type = ESP
     omac = "00:11:22:33:44:55"
 
-    def gen_encrypt_pkts(self, p, sa, sw_intf, src, dst, count=1,
-                         payload_size=100):
-        return [Ether(src=sw_intf.remote_mac, dst=sw_intf.local_mac) /
-                sa.encrypt(IP(src=self.pg0.remote_ip4,
-                              dst=self.pg0.local_ip4) /
-                           GRE() /
-                           Ether(dst=self.omac) /
-                           IP(src="1.1.1.1", dst="1.1.1.2") /
-                           UDP(sport=1144, dport=2233) /
-                           Raw(b'X' * payload_size))
-                for i in range(count)]
-
-    def gen_pkts(self, sw_intf, src, dst, count=1,
-                 payload_size=100):
-        return [Ether(dst=self.omac) /
-                IP(src="1.1.1.1", dst="1.1.1.2") /
-                UDP(sport=1144, dport=2233) /
-                Raw(b'X' * payload_size)
-                for i in range(count)]
+    def gen_encrypt_pkts(self, p, sa, sw_intf, src, dst, count=1, payload_size=100):
+        return [
+            Ether(src=sw_intf.remote_mac, dst=sw_intf.local_mac)
+            / sa.encrypt(
+                IP(src=self.pg0.remote_ip4, dst=self.pg0.local_ip4)
+                / GRE()
+                / Ether(dst=self.omac)
+                / IP(src="1.1.1.1", dst="1.1.1.2")
+                / UDP(sport=1144, dport=2233)
+                / Raw(b"X" * payload_size)
+            )
+            for i in range(count)
+        ]
+
+    def gen_pkts(self, sw_intf, src, dst, count=1, payload_size=100):
+        return [
+            Ether(dst=self.omac)
+            / IP(src="1.1.1.1", dst="1.1.1.2")
+            / UDP(sport=1144, dport=2233)
+            / Raw(b"X" * payload_size)
+            for i in range(count)
+        ]
 
     def verify_decrypted(self, p, rxs):
         for rx in rxs:
 
     def verify_decrypted(self, p, rxs):
         for rx in rxs:
@@ -1020,33 +1164,43 @@ class TestIpsecGreTebIfEsp(TemplateIpsec,
         bd1 = VppBridgeDomain(self, 1)
         bd1.add_vpp_config()
 
         bd1 = VppBridgeDomain(self, 1)
         bd1.add_vpp_config()
 
-        p.tun_sa_out = VppIpsecSA(self, p.scapy_tun_sa_id, p.scapy_tun_spi,
-                                  p.auth_algo_vpp_id, p.auth_key,
-                                  p.crypt_algo_vpp_id, p.crypt_key,
-                                  self.vpp_esp_protocol,
-                                  self.pg0.local_ip4,
-                                  self.pg0.remote_ip4)
+        p.tun_sa_out = VppIpsecSA(
+            self,
+            p.scapy_tun_sa_id,
+            p.scapy_tun_spi,
+            p.auth_algo_vpp_id,
+            p.auth_key,
+            p.crypt_algo_vpp_id,
+            p.crypt_key,
+            self.vpp_esp_protocol,
+            self.pg0.local_ip4,
+            self.pg0.remote_ip4,
+        )
         p.tun_sa_out.add_vpp_config()
 
         p.tun_sa_out.add_vpp_config()
 
-        p.tun_sa_in = VppIpsecSA(self, p.vpp_tun_sa_id, p.vpp_tun_spi,
-                                 p.auth_algo_vpp_id, p.auth_key,
-                                 p.crypt_algo_vpp_id, p.crypt_key,
-                                 self.vpp_esp_protocol,
-                                 self.pg0.remote_ip4,
-                                 self.pg0.local_ip4)
+        p.tun_sa_in = VppIpsecSA(
+            self,
+            p.vpp_tun_sa_id,
+            p.vpp_tun_spi,
+            p.auth_algo_vpp_id,
+            p.auth_key,
+            p.crypt_algo_vpp_id,
+            p.crypt_key,
+            self.vpp_esp_protocol,
+            self.pg0.remote_ip4,
+            self.pg0.local_ip4,
+        )
         p.tun_sa_in.add_vpp_config()
 
         p.tun_sa_in.add_vpp_config()
 
-        p.tun_if = VppGreInterface(self,
-                                   self.pg0.local_ip4,
-                                   self.pg0.remote_ip4,
-                                   type=(VppEnum.vl_api_gre_tunnel_type_t.
-                                         GRE_API_TUNNEL_TYPE_TEB))
+        p.tun_if = VppGreInterface(
+            self,
+            self.pg0.local_ip4,
+            self.pg0.remote_ip4,
+            type=(VppEnum.vl_api_gre_tunnel_type_t.GRE_API_TUNNEL_TYPE_TEB),
+        )
         p.tun_if.add_vpp_config()
 
         p.tun_if.add_vpp_config()
 
-        p.tun_protect = VppIpsecTunProtect(self,
-                                           p.tun_if,
-                                           p.tun_sa_out,
-                                           [p.tun_sa_in])
+        p.tun_protect = VppIpsecTunProtect(self, p.tun_if, p.tun_sa_out, [p.tun_sa_in])
 
         p.tun_protect.add_vpp_config()
 
 
         p.tun_protect.add_vpp_config()
 
@@ -1067,34 +1221,37 @@ class TestIpsecGreTebIfEsp(TemplateIpsec,
         super(TestIpsecGreTebIfEsp, self).tearDown()
 
 
         super(TestIpsecGreTebIfEsp, self).tearDown()
 
 
-class TestIpsecGreTebVlanIfEsp(TemplateIpsec,
-                               IpsecTun4Tests):
-    """ Ipsec GRE TEB ESP - TUN tests """
+class TestIpsecGreTebVlanIfEsp(TemplateIpsec, IpsecTun4Tests):
+    """Ipsec GRE TEB ESP - TUN tests"""
+
     tun4_encrypt_node_name = "esp4-encrypt-tun"
     tun4_decrypt_node_name = ["esp4-decrypt-tun", "esp4-decrypt-tun-post"]
     encryption_type = ESP
     omac = "00:11:22:33:44:55"
 
     tun4_encrypt_node_name = "esp4-encrypt-tun"
     tun4_decrypt_node_name = ["esp4-decrypt-tun", "esp4-decrypt-tun-post"]
     encryption_type = ESP
     omac = "00:11:22:33:44:55"
 
-    def gen_encrypt_pkts(self, p, sa, sw_intf, src, dst, count=1,
-                         payload_size=100):
-        return [Ether(src=sw_intf.remote_mac, dst=sw_intf.local_mac) /
-                sa.encrypt(IP(src=self.pg0.remote_ip4,
-                              dst=self.pg0.local_ip4) /
-                           GRE() /
-                           Ether(dst=self.omac) /
-                           IP(src="1.1.1.1", dst="1.1.1.2") /
-                           UDP(sport=1144, dport=2233) /
-                           Raw(b'X' * payload_size))
-                for i in range(count)]
-
-    def gen_pkts(self, sw_intf, src, dst, count=1,
-                 payload_size=100):
-        return [Ether(dst=self.omac) /
-                Dot1Q(vlan=11) /
-                IP(src="1.1.1.1", dst="1.1.1.2") /
-                UDP(sport=1144, dport=2233) /
-                Raw(b'X' * payload_size)
-                for i in range(count)]
+    def gen_encrypt_pkts(self, p, sa, sw_intf, src, dst, count=1, payload_size=100):
+        return [
+            Ether(src=sw_intf.remote_mac, dst=sw_intf.local_mac)
+            / sa.encrypt(
+                IP(src=self.pg0.remote_ip4, dst=self.pg0.local_ip4)
+                / GRE()
+                / Ether(dst=self.omac)
+                / IP(src="1.1.1.1", dst="1.1.1.2")
+                / UDP(sport=1144, dport=2233)
+                / Raw(b"X" * payload_size)
+            )
+            for i in range(count)
+        ]
+
+    def gen_pkts(self, sw_intf, src, dst, count=1, payload_size=100):
+        return [
+            Ether(dst=self.omac)
+            / Dot1Q(vlan=11)
+            / IP(src="1.1.1.1", dst="1.1.1.2")
+            / UDP(sport=1144, dport=2233)
+            / Raw(b"X" * payload_size)
+            for i in range(count)
+        ]
 
     def verify_decrypted(self, p, rxs):
         for rx in rxs:
 
     def verify_decrypted(self, p, rxs):
         for rx in rxs:
@@ -1136,37 +1293,49 @@ class TestIpsecGreTebVlanIfEsp(TemplateIpsec,
 
         self.pg1_11 = VppDot1QSubint(self, self.pg1, 11)
         self.vapi.l2_interface_vlan_tag_rewrite(
 
         self.pg1_11 = VppDot1QSubint(self, self.pg1, 11)
         self.vapi.l2_interface_vlan_tag_rewrite(
-            sw_if_index=self.pg1_11.sw_if_index, vtr_op=L2_VTR_OP.L2_POP_1,
-            push_dot1q=11)
+            sw_if_index=self.pg1_11.sw_if_index,
+            vtr_op=L2_VTR_OP.L2_POP_1,
+            push_dot1q=11,
+        )
         self.pg1_11.admin_up()
 
         self.pg1_11.admin_up()
 
-        p.tun_sa_out = VppIpsecSA(self, p.scapy_tun_sa_id, p.scapy_tun_spi,
-                                  p.auth_algo_vpp_id, p.auth_key,
-                                  p.crypt_algo_vpp_id, p.crypt_key,
-                                  self.vpp_esp_protocol,
-                                  self.pg0.local_ip4,
-                                  self.pg0.remote_ip4)
+        p.tun_sa_out = VppIpsecSA(
+            self,
+            p.scapy_tun_sa_id,
+            p.scapy_tun_spi,
+            p.auth_algo_vpp_id,
+            p.auth_key,
+            p.crypt_algo_vpp_id,
+            p.crypt_key,
+            self.vpp_esp_protocol,
+            self.pg0.local_ip4,
+            self.pg0.remote_ip4,
+        )
         p.tun_sa_out.add_vpp_config()
 
         p.tun_sa_out.add_vpp_config()
 
-        p.tun_sa_in = VppIpsecSA(self, p.vpp_tun_sa_id, p.vpp_tun_spi,
-                                 p.auth_algo_vpp_id, p.auth_key,
-                                 p.crypt_algo_vpp_id, p.crypt_key,
-                                 self.vpp_esp_protocol,
-                                 self.pg0.remote_ip4,
-                                 self.pg0.local_ip4)
+        p.tun_sa_in = VppIpsecSA(
+            self,
+            p.vpp_tun_sa_id,
+            p.vpp_tun_spi,
+            p.auth_algo_vpp_id,
+            p.auth_key,
+            p.crypt_algo_vpp_id,
+            p.crypt_key,
+            self.vpp_esp_protocol,
+            self.pg0.remote_ip4,
+            self.pg0.local_ip4,
+        )
         p.tun_sa_in.add_vpp_config()
 
         p.tun_sa_in.add_vpp_config()
 
-        p.tun_if = VppGreInterface(self,
-                                   self.pg0.local_ip4,
-                                   self.pg0.remote_ip4,
-                                   type=(VppEnum.vl_api_gre_tunnel_type_t.
-                                         GRE_API_TUNNEL_TYPE_TEB))
+        p.tun_if = VppGreInterface(
+            self,
+            self.pg0.local_ip4,
+            self.pg0.remote_ip4,
+            type=(VppEnum.vl_api_gre_tunnel_type_t.GRE_API_TUNNEL_TYPE_TEB),
+        )
         p.tun_if.add_vpp_config()
 
         p.tun_if.add_vpp_config()
 
-        p.tun_protect = VppIpsecTunProtect(self,
-                                           p.tun_if,
-                                           p.tun_sa_out,
-                                           [p.tun_sa_in])
+        p.tun_protect = VppIpsecTunProtect(self, p.tun_if, p.tun_sa_out, [p.tun_sa_in])
 
         p.tun_protect.add_vpp_config()
 
 
         p.tun_protect.add_vpp_config()
 
@@ -1187,33 +1356,36 @@ class TestIpsecGreTebVlanIfEsp(TemplateIpsec,
         self.pg1_11.remove_vpp_config()
 
 
         self.pg1_11.remove_vpp_config()
 
 
-class TestIpsecGreTebIfEspTra(TemplateIpsec,
-                              IpsecTun4Tests):
-    """ Ipsec GRE TEB ESP - Tra tests """
+class TestIpsecGreTebIfEspTra(TemplateIpsec, IpsecTun4Tests):
+    """Ipsec GRE TEB ESP - Tra tests"""
+
     tun4_encrypt_node_name = "esp4-encrypt-tun"
     tun4_decrypt_node_name = ["esp4-decrypt-tun", "esp4-decrypt-tun-post"]
     encryption_type = ESP
     omac = "00:11:22:33:44:55"
 
     tun4_encrypt_node_name = "esp4-encrypt-tun"
     tun4_decrypt_node_name = ["esp4-decrypt-tun", "esp4-decrypt-tun-post"]
     encryption_type = ESP
     omac = "00:11:22:33:44:55"
 
-    def gen_encrypt_pkts(self, p, sa, sw_intf, src, dst, count=1,
-                         payload_size=100):
-        return [Ether(src=sw_intf.remote_mac, dst=sw_intf.local_mac) /
-                sa.encrypt(IP(src=self.pg0.remote_ip4,
-                              dst=self.pg0.local_ip4) /
-                           GRE() /
-                           Ether(dst=self.omac) /
-                           IP(src="1.1.1.1", dst="1.1.1.2") /
-                           UDP(sport=1144, dport=2233) /
-                           Raw(b'X' * payload_size))
-                for i in range(count)]
-
-    def gen_pkts(self, sw_intf, src, dst, count=1,
-                 payload_size=100):
-        return [Ether(dst=self.omac) /
-                IP(src="1.1.1.1", dst="1.1.1.2") /
-                UDP(sport=1144, dport=2233) /
-                Raw(b'X' * payload_size)
-                for i in range(count)]
+    def gen_encrypt_pkts(self, p, sa, sw_intf, src, dst, count=1, payload_size=100):
+        return [
+            Ether(src=sw_intf.remote_mac, dst=sw_intf.local_mac)
+            / sa.encrypt(
+                IP(src=self.pg0.remote_ip4, dst=self.pg0.local_ip4)
+                / GRE()
+                / Ether(dst=self.omac)
+                / IP(src="1.1.1.1", dst="1.1.1.2")
+                / UDP(sport=1144, dport=2233)
+                / Raw(b"X" * payload_size)
+            )
+            for i in range(count)
+        ]
+
+    def gen_pkts(self, sw_intf, src, dst, count=1, payload_size=100):
+        return [
+            Ether(dst=self.omac)
+            / IP(src="1.1.1.1", dst="1.1.1.2")
+            / UDP(sport=1144, dport=2233)
+            / Raw(b"X" * payload_size)
+            for i in range(count)
+        ]
 
     def verify_decrypted(self, p, rxs):
         for rx in rxs:
 
     def verify_decrypted(self, p, rxs):
         for rx in rxs:
@@ -1251,29 +1423,39 @@ class TestIpsecGreTebIfEspTra(TemplateIpsec,
         bd1 = VppBridgeDomain(self, 1)
         bd1.add_vpp_config()
 
         bd1 = VppBridgeDomain(self, 1)
         bd1.add_vpp_config()
 
-        p.tun_sa_out = VppIpsecSA(self, p.scapy_tun_sa_id, p.scapy_tun_spi,
-                                  p.auth_algo_vpp_id, p.auth_key,
-                                  p.crypt_algo_vpp_id, p.crypt_key,
-                                  self.vpp_esp_protocol)
+        p.tun_sa_out = VppIpsecSA(
+            self,
+            p.scapy_tun_sa_id,
+            p.scapy_tun_spi,
+            p.auth_algo_vpp_id,
+            p.auth_key,
+            p.crypt_algo_vpp_id,
+            p.crypt_key,
+            self.vpp_esp_protocol,
+        )
         p.tun_sa_out.add_vpp_config()
 
         p.tun_sa_out.add_vpp_config()
 
-        p.tun_sa_in = VppIpsecSA(self, p.vpp_tun_sa_id, p.vpp_tun_spi,
-                                 p.auth_algo_vpp_id, p.auth_key,
-                                 p.crypt_algo_vpp_id, p.crypt_key,
-                                 self.vpp_esp_protocol)
+        p.tun_sa_in = VppIpsecSA(
+            self,
+            p.vpp_tun_sa_id,
+            p.vpp_tun_spi,
+            p.auth_algo_vpp_id,
+            p.auth_key,
+            p.crypt_algo_vpp_id,
+            p.crypt_key,
+            self.vpp_esp_protocol,
+        )
         p.tun_sa_in.add_vpp_config()
 
         p.tun_sa_in.add_vpp_config()
 
-        p.tun_if = VppGreInterface(self,
-                                   self.pg0.local_ip4,
-                                   self.pg0.remote_ip4,
-                                   type=(VppEnum.vl_api_gre_tunnel_type_t.
-                                         GRE_API_TUNNEL_TYPE_TEB))
+        p.tun_if = VppGreInterface(
+            self,
+            self.pg0.local_ip4,
+            self.pg0.remote_ip4,
+            type=(VppEnum.vl_api_gre_tunnel_type_t.GRE_API_TUNNEL_TYPE_TEB),
+        )
         p.tun_if.add_vpp_config()
 
         p.tun_if.add_vpp_config()
 
-        p.tun_protect = VppIpsecTunProtect(self,
-                                           p.tun_if,
-                                           p.tun_sa_out,
-                                           [p.tun_sa_in])
+        p.tun_protect = VppIpsecTunProtect(self, p.tun_if, p.tun_sa_out, [p.tun_sa_in])
 
         p.tun_protect.add_vpp_config()
 
 
         p.tun_protect.add_vpp_config()
 
@@ -1292,33 +1474,36 @@ class TestIpsecGreTebIfEspTra(TemplateIpsec,
         super(TestIpsecGreTebIfEspTra, self).tearDown()
 
 
         super(TestIpsecGreTebIfEspTra, self).tearDown()
 
 
-class TestIpsecGreTebUdpIfEspTra(TemplateIpsec,
-                                 IpsecTun4Tests):
-    """ Ipsec GRE TEB UDP ESP - Tra tests """
+class TestIpsecGreTebUdpIfEspTra(TemplateIpsec, IpsecTun4Tests):
+    """Ipsec GRE TEB UDP ESP - Tra tests"""
+
     tun4_encrypt_node_name = "esp4-encrypt-tun"
     tun4_decrypt_node_name = ["esp4-decrypt-tun", "esp4-decrypt-tun-post"]
     encryption_type = ESP
     omac = "00:11:22:33:44:55"
 
     tun4_encrypt_node_name = "esp4-encrypt-tun"
     tun4_decrypt_node_name = ["esp4-decrypt-tun", "esp4-decrypt-tun-post"]
     encryption_type = ESP
     omac = "00:11:22:33:44:55"
 
-    def gen_encrypt_pkts(self, p, sa, sw_intf, src, dst, count=1,
-                         payload_size=100):
-        return [Ether(src=sw_intf.remote_mac, dst=sw_intf.local_mac) /
-                sa.encrypt(IP(src=self.pg0.remote_ip4,
-                              dst=self.pg0.local_ip4) /
-                           GRE() /
-                           Ether(dst=self.omac) /
-                           IP(src="1.1.1.1", dst="1.1.1.2") /
-                           UDP(sport=1144, dport=2233) /
-                           Raw(b'X' * payload_size))
-                for i in range(count)]
-
-    def gen_pkts(self, sw_intf, src, dst, count=1,
-                 payload_size=100):
-        return [Ether(dst=self.omac) /
-                IP(src="1.1.1.1", dst="1.1.1.2") /
-                UDP(sport=1144, dport=2233) /
-                Raw(b'X' * payload_size)
-                for i in range(count)]
+    def gen_encrypt_pkts(self, p, sa, sw_intf, src, dst, count=1, payload_size=100):
+        return [
+            Ether(src=sw_intf.remote_mac, dst=sw_intf.local_mac)
+            / sa.encrypt(
+                IP(src=self.pg0.remote_ip4, dst=self.pg0.local_ip4)
+                / GRE()
+                / Ether(dst=self.omac)
+                / IP(src="1.1.1.1", dst="1.1.1.2")
+                / UDP(sport=1144, dport=2233)
+                / Raw(b"X" * payload_size)
+            )
+            for i in range(count)
+        ]
+
+    def gen_pkts(self, sw_intf, src, dst, count=1, payload_size=100):
+        return [
+            Ether(dst=self.omac)
+            / IP(src="1.1.1.1", dst="1.1.1.2")
+            / UDP(sport=1144, dport=2233)
+            / Raw(b"X" * payload_size)
+            for i in range(count)
+        ]
 
     def verify_decrypted(self, p, rxs):
         for rx in rxs:
 
     def verify_decrypted(self, p, rxs):
         for rx in rxs:
@@ -1356,44 +1541,53 @@ class TestIpsecGreTebUdpIfEspTra(TemplateIpsec,
 
         p = self.ipv4_params
         p = self.ipv4_params
 
         p = self.ipv4_params
         p = self.ipv4_params
-        p.flags = (VppEnum.vl_api_ipsec_sad_flags_t.
-                   IPSEC_API_SAD_FLAG_UDP_ENCAP)
+        p.flags = VppEnum.vl_api_ipsec_sad_flags_t.IPSEC_API_SAD_FLAG_UDP_ENCAP
         p.nat_header = UDP(sport=5454, dport=4545)
 
         bd1 = VppBridgeDomain(self, 1)
         bd1.add_vpp_config()
 
         p.nat_header = UDP(sport=5454, dport=4545)
 
         bd1 = VppBridgeDomain(self, 1)
         bd1.add_vpp_config()
 
-        p.tun_sa_out = VppIpsecSA(self, p.scapy_tun_sa_id, p.scapy_tun_spi,
-                                  p.auth_algo_vpp_id, p.auth_key,
-                                  p.crypt_algo_vpp_id, p.crypt_key,
-                                  self.vpp_esp_protocol,
-                                  flags=p.flags,
-                                  udp_src=5454,
-                                  udp_dst=4545)
+        p.tun_sa_out = VppIpsecSA(
+            self,
+            p.scapy_tun_sa_id,
+            p.scapy_tun_spi,
+            p.auth_algo_vpp_id,
+            p.auth_key,
+            p.crypt_algo_vpp_id,
+            p.crypt_key,
+            self.vpp_esp_protocol,
+            flags=p.flags,
+            udp_src=5454,
+            udp_dst=4545,
+        )
         p.tun_sa_out.add_vpp_config()
 
         p.tun_sa_out.add_vpp_config()
 
-        p.tun_sa_in = VppIpsecSA(self, p.vpp_tun_sa_id, p.vpp_tun_spi,
-                                 p.auth_algo_vpp_id, p.auth_key,
-                                 p.crypt_algo_vpp_id, p.crypt_key,
-                                 self.vpp_esp_protocol,
-                                 flags=(p.flags |
-                                        VppEnum.vl_api_ipsec_sad_flags_t.
-                                        IPSEC_API_SAD_FLAG_IS_INBOUND),
-                                 udp_src=4545,
-                                 udp_dst=5454)
+        p.tun_sa_in = VppIpsecSA(
+            self,
+            p.vpp_tun_sa_id,
+            p.vpp_tun_spi,
+            p.auth_algo_vpp_id,
+            p.auth_key,
+            p.crypt_algo_vpp_id,
+            p.crypt_key,
+            self.vpp_esp_protocol,
+            flags=(
+                p.flags | VppEnum.vl_api_ipsec_sad_flags_t.IPSEC_API_SAD_FLAG_IS_INBOUND
+            ),
+            udp_src=4545,
+            udp_dst=5454,
+        )
         p.tun_sa_in.add_vpp_config()
 
         p.tun_sa_in.add_vpp_config()
 
-        p.tun_if = VppGreInterface(self,
-                                   self.pg0.local_ip4,
-                                   self.pg0.remote_ip4,
-                                   type=(VppEnum.vl_api_gre_tunnel_type_t.
-                                         GRE_API_TUNNEL_TYPE_TEB))
+        p.tun_if = VppGreInterface(
+            self,
+            self.pg0.local_ip4,
+            self.pg0.remote_ip4,
+            type=(VppEnum.vl_api_gre_tunnel_type_t.GRE_API_TUNNEL_TYPE_TEB),
+        )
         p.tun_if.add_vpp_config()
 
         p.tun_if.add_vpp_config()
 
-        p.tun_protect = VppIpsecTunProtect(self,
-                                           p.tun_if,
-                                           p.tun_sa_out,
-                                           [p.tun_sa_in])
+        p.tun_protect = VppIpsecTunProtect(self, p.tun_if, p.tun_sa_out, [p.tun_sa_in])
 
         p.tun_protect.add_vpp_config()
 
 
         p.tun_protect.add_vpp_config()
 
@@ -1413,32 +1607,34 @@ class TestIpsecGreTebUdpIfEspTra(TemplateIpsec,
         super(TestIpsecGreTebUdpIfEspTra, self).tearDown()
 
 
         super(TestIpsecGreTebUdpIfEspTra, self).tearDown()
 
 
-class TestIpsecGreIfEsp(TemplateIpsec,
-                        IpsecTun4Tests):
-    """ Ipsec GRE ESP - TUN tests """
+class TestIpsecGreIfEsp(TemplateIpsec, IpsecTun4Tests):
+    """Ipsec GRE ESP - TUN tests"""
+
     tun4_encrypt_node_name = "esp4-encrypt-tun"
     tun4_decrypt_node_name = ["esp4-decrypt-tun", "esp4-decrypt-tun-post"]
     encryption_type = ESP
 
     tun4_encrypt_node_name = "esp4-encrypt-tun"
     tun4_decrypt_node_name = ["esp4-decrypt-tun", "esp4-decrypt-tun-post"]
     encryption_type = ESP
 
-    def gen_encrypt_pkts(self, p, sa, sw_intf, src, dst, count=1,
-                         payload_size=100):
-        return [Ether(src=sw_intf.remote_mac, dst=sw_intf.local_mac) /
-                sa.encrypt(IP(src=self.pg0.remote_ip4,
-                              dst=self.pg0.local_ip4) /
-                           GRE() /
-                           IP(src=self.pg1.local_ip4,
-                              dst=self.pg1.remote_ip4) /
-                           UDP(sport=1144, dport=2233) /
-                           Raw(b'X' * payload_size))
-                for i in range(count)]
-
-    def gen_pkts(self, sw_intf, src, dst, count=1,
-                 payload_size=100):
-        return [Ether(src=sw_intf.remote_mac, dst=sw_intf.local_mac) /
-                IP(src="1.1.1.1", dst="1.1.1.2") /
-                UDP(sport=1144, dport=2233) /
-                Raw(b'X' * payload_size)
-                for i in range(count)]
+    def gen_encrypt_pkts(self, p, sa, sw_intf, src, dst, count=1, payload_size=100):
+        return [
+            Ether(src=sw_intf.remote_mac, dst=sw_intf.local_mac)
+            / sa.encrypt(
+                IP(src=self.pg0.remote_ip4, dst=self.pg0.local_ip4)
+                / GRE()
+                / IP(src=self.pg1.local_ip4, dst=self.pg1.remote_ip4)
+                / UDP(sport=1144, dport=2233)
+                / Raw(b"X" * payload_size)
+            )
+            for i in range(count)
+        ]
+
+    def gen_pkts(self, sw_intf, src, dst, count=1, payload_size=100):
+        return [
+            Ether(src=sw_intf.remote_mac, dst=sw_intf.local_mac)
+            / IP(src="1.1.1.1", dst="1.1.1.2")
+            / UDP(sport=1144, dport=2233)
+            / Raw(b"X" * payload_size)
+            for i in range(count)
+        ]
 
     def verify_decrypted(self, p, rxs):
         for rx in rxs:
 
     def verify_decrypted(self, p, rxs):
         for rx in rxs:
@@ -1475,40 +1671,47 @@ class TestIpsecGreIfEsp(TemplateIpsec,
         bd1 = VppBridgeDomain(self, 1)
         bd1.add_vpp_config()
 
         bd1 = VppBridgeDomain(self, 1)
         bd1.add_vpp_config()
 
-        p.tun_sa_out = VppIpsecSA(self, p.scapy_tun_sa_id, p.scapy_tun_spi,
-                                  p.auth_algo_vpp_id, p.auth_key,
-                                  p.crypt_algo_vpp_id, p.crypt_key,
-                                  self.vpp_esp_protocol,
-                                  self.pg0.local_ip4,
-                                  self.pg0.remote_ip4)
+        p.tun_sa_out = VppIpsecSA(
+            self,
+            p.scapy_tun_sa_id,
+            p.scapy_tun_spi,
+            p.auth_algo_vpp_id,
+            p.auth_key,
+            p.crypt_algo_vpp_id,
+            p.crypt_key,
+            self.vpp_esp_protocol,
+            self.pg0.local_ip4,
+            self.pg0.remote_ip4,
+        )
         p.tun_sa_out.add_vpp_config()
 
         p.tun_sa_out.add_vpp_config()
 
-        p.tun_sa_in = VppIpsecSA(self, p.vpp_tun_sa_id, p.vpp_tun_spi,
-                                 p.auth_algo_vpp_id, p.auth_key,
-                                 p.crypt_algo_vpp_id, p.crypt_key,
-                                 self.vpp_esp_protocol,
-                                 self.pg0.remote_ip4,
-                                 self.pg0.local_ip4)
+        p.tun_sa_in = VppIpsecSA(
+            self,
+            p.vpp_tun_sa_id,
+            p.vpp_tun_spi,
+            p.auth_algo_vpp_id,
+            p.auth_key,
+            p.crypt_algo_vpp_id,
+            p.crypt_key,
+            self.vpp_esp_protocol,
+            self.pg0.remote_ip4,
+            self.pg0.local_ip4,
+        )
         p.tun_sa_in.add_vpp_config()
 
         p.tun_sa_in.add_vpp_config()
 
-        p.tun_if = VppGreInterface(self,
-                                   self.pg0.local_ip4,
-                                   self.pg0.remote_ip4)
+        p.tun_if = VppGreInterface(self, self.pg0.local_ip4, self.pg0.remote_ip4)
         p.tun_if.add_vpp_config()
 
         p.tun_if.add_vpp_config()
 
-        p.tun_protect = VppIpsecTunProtect(self,
-                                           p.tun_if,
-                                           p.tun_sa_out,
-                                           [p.tun_sa_in])
+        p.tun_protect = VppIpsecTunProtect(self, p.tun_if, p.tun_sa_out, [p.tun_sa_in])
         p.tun_protect.add_vpp_config()
 
         p.tun_if.admin_up()
         p.tun_if.config_ip4()
         config_tun_params(p, self.encryption_type, p.tun_if)
 
         p.tun_protect.add_vpp_config()
 
         p.tun_if.admin_up()
         p.tun_if.config_ip4()
         config_tun_params(p, self.encryption_type, p.tun_if)
 
-        VppIpRoute(self, "1.1.1.2", 32,
-                   [VppRoutePath(p.tun_if.remote_ip4,
-                                 0xffffffff)]).add_vpp_config()
+        VppIpRoute(
+            self, "1.1.1.2", 32, [VppRoutePath(p.tun_if.remote_ip4, 0xFFFFFFFF)]
+        ).add_vpp_config()
 
     def tearDown(self):
         p = self.ipv4_params
 
     def tearDown(self):
         p = self.ipv4_params
@@ -1516,42 +1719,46 @@ class TestIpsecGreIfEsp(TemplateIpsec,
         super(TestIpsecGreIfEsp, self).tearDown()
 
 
         super(TestIpsecGreIfEsp, self).tearDown()
 
 
-class TestIpsecGreIfEspTra(TemplateIpsec,
-                           IpsecTun4Tests):
-    """ Ipsec GRE ESP - TRA tests """
+class TestIpsecGreIfEspTra(TemplateIpsec, IpsecTun4Tests):
+    """Ipsec GRE ESP - TRA tests"""
+
     tun4_encrypt_node_name = "esp4-encrypt-tun"
     tun4_decrypt_node_name = ["esp4-decrypt-tun", "esp4-decrypt-tun-post"]
     encryption_type = ESP
 
     tun4_encrypt_node_name = "esp4-encrypt-tun"
     tun4_decrypt_node_name = ["esp4-decrypt-tun", "esp4-decrypt-tun-post"]
     encryption_type = ESP
 
-    def gen_encrypt_pkts(self, p, sa, sw_intf, src, dst, count=1,
-                         payload_size=100):
-        return [Ether(src=sw_intf.remote_mac, dst=sw_intf.local_mac) /
-                sa.encrypt(IP(src=self.pg0.remote_ip4,
-                              dst=self.pg0.local_ip4) /
-                           GRE() /
-                           IP(src=self.pg1.local_ip4,
-                              dst=self.pg1.remote_ip4) /
-                           UDP(sport=1144, dport=2233) /
-                           Raw(b'X' * payload_size))
-                for i in range(count)]
-
-    def gen_encrypt_non_ip_pkts(self, sa, sw_intf, src, dst, count=1,
-                                payload_size=100):
-        return [Ether(src=sw_intf.remote_mac, dst=sw_intf.local_mac) /
-                sa.encrypt(IP(src=self.pg0.remote_ip4,
-                              dst=self.pg0.local_ip4) /
-                           GRE() /
-                           UDP(sport=1144, dport=2233) /
-                           Raw(b'X' * payload_size))
-                for i in range(count)]
-
-    def gen_pkts(self, sw_intf, src, dst, count=1,
-                 payload_size=100):
-        return [Ether(src=sw_intf.remote_mac, dst=sw_intf.local_mac) /
-                IP(src="1.1.1.1", dst="1.1.1.2") /
-                UDP(sport=1144, dport=2233) /
-                Raw(b'X' * payload_size)
-                for i in range(count)]
+    def gen_encrypt_pkts(self, p, sa, sw_intf, src, dst, count=1, payload_size=100):
+        return [
+            Ether(src=sw_intf.remote_mac, dst=sw_intf.local_mac)
+            / sa.encrypt(
+                IP(src=self.pg0.remote_ip4, dst=self.pg0.local_ip4)
+                / GRE()
+                / IP(src=self.pg1.local_ip4, dst=self.pg1.remote_ip4)
+                / UDP(sport=1144, dport=2233)
+                / Raw(b"X" * payload_size)
+            )
+            for i in range(count)
+        ]
+
+    def gen_encrypt_non_ip_pkts(self, sa, sw_intf, src, dst, count=1, payload_size=100):
+        return [
+            Ether(src=sw_intf.remote_mac, dst=sw_intf.local_mac)
+            / sa.encrypt(
+                IP(src=self.pg0.remote_ip4, dst=self.pg0.local_ip4)
+                / GRE()
+                / UDP(sport=1144, dport=2233)
+                / Raw(b"X" * payload_size)
+            )
+            for i in range(count)
+        ]
+
+    def gen_pkts(self, sw_intf, src, dst, count=1, payload_size=100):
+        return [
+            Ether(src=sw_intf.remote_mac, dst=sw_intf.local_mac)
+            / IP(src="1.1.1.1", dst="1.1.1.2")
+            / UDP(sport=1144, dport=2233)
+            / Raw(b"X" * payload_size)
+            for i in range(count)
+        ]
 
     def verify_decrypted(self, p, rxs):
         for rx in rxs:
 
     def verify_decrypted(self, p, rxs):
         for rx in rxs:
@@ -1583,36 +1790,43 @@ class TestIpsecGreIfEspTra(TemplateIpsec,
 
         p = self.ipv4_params
 
 
         p = self.ipv4_params
 
-        p.tun_sa_out = VppIpsecSA(self, p.scapy_tun_sa_id, p.scapy_tun_spi,
-                                  p.auth_algo_vpp_id, p.auth_key,
-                                  p.crypt_algo_vpp_id, p.crypt_key,
-                                  self.vpp_esp_protocol)
+        p.tun_sa_out = VppIpsecSA(
+            self,
+            p.scapy_tun_sa_id,
+            p.scapy_tun_spi,
+            p.auth_algo_vpp_id,
+            p.auth_key,
+            p.crypt_algo_vpp_id,
+            p.crypt_key,
+            self.vpp_esp_protocol,
+        )
         p.tun_sa_out.add_vpp_config()
 
         p.tun_sa_out.add_vpp_config()
 
-        p.tun_sa_in = VppIpsecSA(self, p.vpp_tun_sa_id, p.vpp_tun_spi,
-                                 p.auth_algo_vpp_id, p.auth_key,
-                                 p.crypt_algo_vpp_id, p.crypt_key,
-                                 self.vpp_esp_protocol)
+        p.tun_sa_in = VppIpsecSA(
+            self,
+            p.vpp_tun_sa_id,
+            p.vpp_tun_spi,
+            p.auth_algo_vpp_id,
+            p.auth_key,
+            p.crypt_algo_vpp_id,
+            p.crypt_key,
+            self.vpp_esp_protocol,
+        )
         p.tun_sa_in.add_vpp_config()
 
         p.tun_sa_in.add_vpp_config()
 
-        p.tun_if = VppGreInterface(self,
-                                   self.pg0.local_ip4,
-                                   self.pg0.remote_ip4)
+        p.tun_if = VppGreInterface(self, self.pg0.local_ip4, self.pg0.remote_ip4)
         p.tun_if.add_vpp_config()
 
         p.tun_if.add_vpp_config()
 
-        p.tun_protect = VppIpsecTunProtect(self,
-                                           p.tun_if,
-                                           p.tun_sa_out,
-                                           [p.tun_sa_in])
+        p.tun_protect = VppIpsecTunProtect(self, p.tun_if, p.tun_sa_out, [p.tun_sa_in])
         p.tun_protect.add_vpp_config()
 
         p.tun_if.admin_up()
         p.tun_if.config_ip4()
         config_tra_params(p, self.encryption_type, p.tun_if)
 
         p.tun_protect.add_vpp_config()
 
         p.tun_if.admin_up()
         p.tun_if.config_ip4()
         config_tra_params(p, self.encryption_type, p.tun_if)
 
-        VppIpRoute(self, "1.1.1.2", 32,
-                   [VppRoutePath(p.tun_if.remote_ip4,
-                                 0xffffffff)]).add_vpp_config()
+        VppIpRoute(
+            self, "1.1.1.2", 32, [VppRoutePath(p.tun_if.remote_ip4, 0xFFFFFFFF)]
+        ).add_vpp_config()
 
     def tearDown(self):
         p = self.ipv4_params
 
     def tearDown(self):
         p = self.ipv4_params
@@ -1621,41 +1835,45 @@ class TestIpsecGreIfEspTra(TemplateIpsec,
 
     def test_gre_non_ip(self):
         p = self.ipv4_params
 
     def test_gre_non_ip(self):
         p = self.ipv4_params
-        tx = self.gen_encrypt_non_ip_pkts(p.scapy_tun_sa, self.tun_if,
-                                          src=p.remote_tun_if_host,
-                                          dst=self.pg1.remote_ip6)
+        tx = self.gen_encrypt_non_ip_pkts(
+            p.scapy_tun_sa,
+            self.tun_if,
+            src=p.remote_tun_if_host,
+            dst=self.pg1.remote_ip6,
+        )
         self.send_and_assert_no_replies(self.tun_if, tx)
         self.send_and_assert_no_replies(self.tun_if, tx)
-        node_name = ('/err/%s/unsupported payload' %
-                     self.tun4_decrypt_node_name[0])
+        node_name = "/err/%s/unsupported payload" % self.tun4_decrypt_node_name[0]
         self.assertEqual(1, self.statistics.get_err_counter(node_name))
 
 
         self.assertEqual(1, self.statistics.get_err_counter(node_name))
 
 
-class TestIpsecGre6IfEspTra(TemplateIpsec,
-                            IpsecTun6Tests):
-    """ Ipsec GRE ESP - TRA tests """
+class TestIpsecGre6IfEspTra(TemplateIpsec, IpsecTun6Tests):
+    """Ipsec GRE ESP - TRA tests"""
+
     tun6_encrypt_node_name = "esp6-encrypt-tun"
     tun6_decrypt_node_name = ["esp6-decrypt-tun", "esp6-decrypt-tun-post"]
     encryption_type = ESP
 
     tun6_encrypt_node_name = "esp6-encrypt-tun"
     tun6_decrypt_node_name = ["esp6-decrypt-tun", "esp6-decrypt-tun-post"]
     encryption_type = ESP
 
-    def gen_encrypt_pkts6(self, p, sa, sw_intf, src, dst, count=1,
-                          payload_size=100):
-        return [Ether(src=sw_intf.remote_mac, dst=sw_intf.local_mac) /
-                sa.encrypt(IPv6(src=self.pg0.remote_ip6,
-                                dst=self.pg0.local_ip6) /
-                           GRE() /
-                           IPv6(src=self.pg1.local_ip6,
-                                dst=self.pg1.remote_ip6) /
-                           UDP(sport=1144, dport=2233) /
-                           Raw(b'X' * payload_size))
-                for i in range(count)]
-
-    def gen_pkts6(self, p, sw_intf, src, dst, count=1,
-                  payload_size=100):
-        return [Ether(src=sw_intf.remote_mac, dst=sw_intf.local_mac) /
-                IPv6(src="1::1", dst="1::2") /
-                UDP(sport=1144, dport=2233) /
-                Raw(b'X' * payload_size)
-                for i in range(count)]
+    def gen_encrypt_pkts6(self, p, sa, sw_intf, src, dst, count=1, payload_size=100):
+        return [
+            Ether(src=sw_intf.remote_mac, dst=sw_intf.local_mac)
+            / sa.encrypt(
+                IPv6(src=self.pg0.remote_ip6, dst=self.pg0.local_ip6)
+                / GRE()
+                / IPv6(src=self.pg1.local_ip6, dst=self.pg1.remote_ip6)
+                / UDP(sport=1144, dport=2233)
+                / Raw(b"X" * payload_size)
+            )
+            for i in range(count)
+        ]
+
+    def gen_pkts6(self, p, sw_intf, src, dst, count=1, payload_size=100):
+        return [
+            Ether(src=sw_intf.remote_mac, dst=sw_intf.local_mac)
+            / IPv6(src="1::1", dst="1::2")
+            / UDP(sport=1144, dport=2233)
+            / Raw(b"X" * payload_size)
+            for i in range(count)
+        ]
 
     def verify_decrypted6(self, p, rxs):
         for rx in rxs:
 
     def verify_decrypted6(self, p, rxs):
         for rx in rxs:
@@ -1690,37 +1908,50 @@ class TestIpsecGre6IfEspTra(TemplateIpsec,
         bd1 = VppBridgeDomain(self, 1)
         bd1.add_vpp_config()
 
         bd1 = VppBridgeDomain(self, 1)
         bd1.add_vpp_config()
 
-        p.tun_sa_out = VppIpsecSA(self, p.scapy_tun_sa_id, p.scapy_tun_spi,
-                                  p.auth_algo_vpp_id, p.auth_key,
-                                  p.crypt_algo_vpp_id, p.crypt_key,
-                                  self.vpp_esp_protocol)
+        p.tun_sa_out = VppIpsecSA(
+            self,
+            p.scapy_tun_sa_id,
+            p.scapy_tun_spi,
+            p.auth_algo_vpp_id,
+            p.auth_key,
+            p.crypt_algo_vpp_id,
+            p.crypt_key,
+            self.vpp_esp_protocol,
+        )
         p.tun_sa_out.add_vpp_config()
 
         p.tun_sa_out.add_vpp_config()
 
-        p.tun_sa_in = VppIpsecSA(self, p.vpp_tun_sa_id, p.vpp_tun_spi,
-                                 p.auth_algo_vpp_id, p.auth_key,
-                                 p.crypt_algo_vpp_id, p.crypt_key,
-                                 self.vpp_esp_protocol)
+        p.tun_sa_in = VppIpsecSA(
+            self,
+            p.vpp_tun_sa_id,
+            p.vpp_tun_spi,
+            p.auth_algo_vpp_id,
+            p.auth_key,
+            p.crypt_algo_vpp_id,
+            p.crypt_key,
+            self.vpp_esp_protocol,
+        )
         p.tun_sa_in.add_vpp_config()
 
         p.tun_sa_in.add_vpp_config()
 
-        p.tun_if = VppGreInterface(self,
-                                   self.pg0.local_ip6,
-                                   self.pg0.remote_ip6)
+        p.tun_if = VppGreInterface(self, self.pg0.local_ip6, self.pg0.remote_ip6)
         p.tun_if.add_vpp_config()
 
         p.tun_if.add_vpp_config()
 
-        p.tun_protect = VppIpsecTunProtect(self,
-                                           p.tun_if,
-                                           p.tun_sa_out,
-                                           [p.tun_sa_in])
+        p.tun_protect = VppIpsecTunProtect(self, p.tun_if, p.tun_sa_out, [p.tun_sa_in])
         p.tun_protect.add_vpp_config()
 
         p.tun_if.admin_up()
         p.tun_if.config_ip6()
         config_tra_params(p, self.encryption_type, p.tun_if)
 
         p.tun_protect.add_vpp_config()
 
         p.tun_if.admin_up()
         p.tun_if.config_ip6()
         config_tra_params(p, self.encryption_type, p.tun_if)
 
-        r = VppIpRoute(self, "1::2", 128,
-                       [VppRoutePath(p.tun_if.remote_ip6,
-                                     0xffffffff,
-                                     proto=DpoProto.DPO_PROTO_IP6)])
+        r = VppIpRoute(
+            self,
+            "1::2",
+            128,
+            [
+                VppRoutePath(
+                    p.tun_if.remote_ip6, 0xFFFFFFFF, proto=DpoProto.DPO_PROTO_IP6
+                )
+            ],
+        )
         r.add_vpp_config()
 
     def tearDown(self):
         r.add_vpp_config()
 
     def tearDown(self):
@@ -1730,30 +1961,33 @@ class TestIpsecGre6IfEspTra(TemplateIpsec,
 
 
 class TestIpsecMGreIfEspTra4(TemplateIpsec, IpsecTun4):
 
 
 class TestIpsecMGreIfEspTra4(TemplateIpsec, IpsecTun4):
-    """ Ipsec mGRE ESP v4 TRA tests """
+    """Ipsec mGRE ESP v4 TRA tests"""
+
     tun4_encrypt_node_name = "esp4-encrypt-tun"
     tun4_decrypt_node_name = ["esp4-decrypt-tun", "esp4-decrypt-tun-post"]
     encryption_type = ESP
 
     tun4_encrypt_node_name = "esp4-encrypt-tun"
     tun4_decrypt_node_name = ["esp4-decrypt-tun", "esp4-decrypt-tun-post"]
     encryption_type = ESP
 
-    def gen_encrypt_pkts(self, p, sa, sw_intf, src, dst, count=1,
-                         payload_size=100):
-        return [Ether(src=sw_intf.remote_mac, dst=sw_intf.local_mac) /
-                sa.encrypt(IP(src=p.tun_dst,
-                              dst=self.pg0.local_ip4) /
-                           GRE() /
-                           IP(src=self.pg1.local_ip4,
-                              dst=self.pg1.remote_ip4) /
-                           UDP(sport=1144, dport=2233) /
-                           Raw(b'X' * payload_size))
-                for i in range(count)]
-
-    def gen_pkts(self, sw_intf, src, dst, count=1,
-                 payload_size=100):
-        return [Ether(src=sw_intf.remote_mac, dst=sw_intf.local_mac) /
-                IP(src="1.1.1.1", dst=dst) /
-                UDP(sport=1144, dport=2233) /
-                Raw(b'X' * payload_size)
-                for i in range(count)]
+    def gen_encrypt_pkts(self, p, sa, sw_intf, src, dst, count=1, payload_size=100):
+        return [
+            Ether(src=sw_intf.remote_mac, dst=sw_intf.local_mac)
+            / sa.encrypt(
+                IP(src=p.tun_dst, dst=self.pg0.local_ip4)
+                / GRE()
+                / IP(src=self.pg1.local_ip4, dst=self.pg1.remote_ip4)
+                / UDP(sport=1144, dport=2233)
+                / Raw(b"X" * payload_size)
+            )
+            for i in range(count)
+        ]
+
+    def gen_pkts(self, sw_intf, src, dst, count=1, payload_size=100):
+        return [
+            Ether(src=sw_intf.remote_mac, dst=sw_intf.local_mac)
+            / IP(src="1.1.1.1", dst=dst)
+            / UDP(sport=1144, dport=2233)
+            / Raw(b"X" * payload_size)
+            for i in range(count)
+        ]
 
     def verify_decrypted(self, p, rxs):
         for rx in rxs:
 
     def verify_decrypted(self, p, rxs):
         for rx in rxs:
@@ -1784,11 +2018,12 @@ class TestIpsecMGreIfEspTra4(TemplateIpsec, IpsecTun4):
         N_NHS = 16
         self.tun_if = self.pg0
         p = self.ipv4_params
         N_NHS = 16
         self.tun_if = self.pg0
         p = self.ipv4_params
-        p.tun_if = VppGreInterface(self,
-                                   self.pg0.local_ip4,
-                                   "0.0.0.0",
-                                   mode=(VppEnum.vl_api_tunnel_mode_t.
-                                         TUNNEL_API_MODE_MP))
+        p.tun_if = VppGreInterface(
+            self,
+            self.pg0.local_ip4,
+            "0.0.0.0",
+            mode=(VppEnum.vl_api_tunnel_mode_t.TUNNEL_API_MODE_MP),
+        )
         p.tun_if.add_vpp_config()
         p.tun_if.admin_up()
         p.tun_if.config_ip4()
         p.tun_if.add_vpp_config()
         p.tun_if.admin_up()
         p.tun_if.config_ip4()
@@ -1812,16 +2047,28 @@ class TestIpsecMGreIfEspTra4(TemplateIpsec, IpsecTun4):
             p.scapy_tra_spi = p.scapy_tra_spi + ii
             p.vpp_tra_sa_id = p.vpp_tra_sa_id + ii
             p.vpp_tra_spi = p.vpp_tra_spi + ii
             p.scapy_tra_spi = p.scapy_tra_spi + ii
             p.vpp_tra_sa_id = p.vpp_tra_sa_id + ii
             p.vpp_tra_spi = p.vpp_tra_spi + ii
-            p.tun_sa_out = VppIpsecSA(self, p.scapy_tun_sa_id, p.scapy_tun_spi,
-                                      p.auth_algo_vpp_id, p.auth_key,
-                                      p.crypt_algo_vpp_id, p.crypt_key,
-                                      self.vpp_esp_protocol)
+            p.tun_sa_out = VppIpsecSA(
+                self,
+                p.scapy_tun_sa_id,
+                p.scapy_tun_spi,
+                p.auth_algo_vpp_id,
+                p.auth_key,
+                p.crypt_algo_vpp_id,
+                p.crypt_key,
+                self.vpp_esp_protocol,
+            )
             p.tun_sa_out.add_vpp_config()
 
             p.tun_sa_out.add_vpp_config()
 
-            p.tun_sa_in = VppIpsecSA(self, p.vpp_tun_sa_id, p.vpp_tun_spi,
-                                     p.auth_algo_vpp_id, p.auth_key,
-                                     p.crypt_algo_vpp_id, p.crypt_key,
-                                     self.vpp_esp_protocol)
+            p.tun_sa_in = VppIpsecSA(
+                self,
+                p.vpp_tun_sa_id,
+                p.vpp_tun_spi,
+                p.auth_algo_vpp_id,
+                p.auth_key,
+                p.crypt_algo_vpp_id,
+                p.crypt_key,
+                self.vpp_esp_protocol,
+            )
             p.tun_sa_in.add_vpp_config()
 
             p.tun_protect = VppIpsecTunProtect(
             p.tun_sa_in.add_vpp_config()
 
             p.tun_protect = VppIpsecTunProtect(
@@ -1829,19 +2076,26 @@ class TestIpsecMGreIfEspTra4(TemplateIpsec, IpsecTun4):
                 p.tun_if,
                 p.tun_sa_out,
                 [p.tun_sa_in],
                 p.tun_if,
                 p.tun_sa_out,
                 [p.tun_sa_in],
-                nh=p.tun_if.remote_hosts[ii].ip4)
+                nh=p.tun_if.remote_hosts[ii].ip4,
+            )
             p.tun_protect.add_vpp_config()
             config_tra_params(p, self.encryption_type, p.tun_if)
             self.multi_params.append(p)
 
             p.tun_protect.add_vpp_config()
             config_tra_params(p, self.encryption_type, p.tun_if)
             self.multi_params.append(p)
 
-            VppIpRoute(self, p.remote_tun_if_host, 32,
-                       [VppRoutePath(p.tun_if.remote_hosts[ii].ip4,
-                                     p.tun_if.sw_if_index)]).add_vpp_config()
+            VppIpRoute(
+                self,
+                p.remote_tun_if_host,
+                32,
+                [VppRoutePath(p.tun_if.remote_hosts[ii].ip4, p.tun_if.sw_if_index)],
+            ).add_vpp_config()
 
             # in this v4 variant add the teibs after the protect
 
             # in this v4 variant add the teibs after the protect
-            p.teib = VppTeib(self, p.tun_if,
-                             p.tun_if.remote_hosts[ii].ip4,
-                             self.pg0.remote_hosts[ii].ip4).add_vpp_config()
+            p.teib = VppTeib(
+                self,
+                p.tun_if,
+                p.tun_if.remote_hosts[ii].ip4,
+                self.pg0.remote_hosts[ii].ip4,
+            ).add_vpp_config()
             p.tun_dst = self.pg0.remote_hosts[ii].ip4
         self.logger.info(self.vapi.cli("sh ipsec protect-hash"))
 
             p.tun_dst = self.pg0.remote_hosts[ii].ip4
         self.logger.info(self.vapi.cli("sh ipsec protect-hash"))
 
@@ -1862,30 +2116,33 @@ class TestIpsecMGreIfEspTra4(TemplateIpsec, IpsecTun4):
 
 
 class TestIpsecMGreIfEspTra6(TemplateIpsec, IpsecTun6):
 
 
 class TestIpsecMGreIfEspTra6(TemplateIpsec, IpsecTun6):
-    """ Ipsec mGRE ESP v6 TRA tests """
+    """Ipsec mGRE ESP v6 TRA tests"""
+
     tun6_encrypt_node_name = "esp6-encrypt-tun"
     tun6_decrypt_node_name = ["esp6-decrypt-tun", "esp6-decrypt-tun-post"]
     encryption_type = ESP
 
     tun6_encrypt_node_name = "esp6-encrypt-tun"
     tun6_decrypt_node_name = ["esp6-decrypt-tun", "esp6-decrypt-tun-post"]
     encryption_type = ESP
 
-    def gen_encrypt_pkts6(self, p, sa, sw_intf, src, dst, count=1,
-                          payload_size=100):
-        return [Ether(src=sw_intf.remote_mac, dst=sw_intf.local_mac) /
-                sa.encrypt(IPv6(src=p.tun_dst,
-                                dst=self.pg0.local_ip6) /
-                           GRE() /
-                           IPv6(src=self.pg1.local_ip6,
-                                dst=self.pg1.remote_ip6) /
-                           UDP(sport=1144, dport=2233) /
-                           Raw(b'X' * payload_size))
-                for i in range(count)]
-
-    def gen_pkts6(self, p, sw_intf, src, dst, count=1,
-                  payload_size=100):
-        return [Ether(src=sw_intf.remote_mac, dst=sw_intf.local_mac) /
-                IPv6(src="1::1", dst=dst) /
-                UDP(sport=1144, dport=2233) /
-                Raw(b'X' * payload_size)
-                for i in range(count)]
+    def gen_encrypt_pkts6(self, p, sa, sw_intf, src, dst, count=1, payload_size=100):
+        return [
+            Ether(src=sw_intf.remote_mac, dst=sw_intf.local_mac)
+            / sa.encrypt(
+                IPv6(src=p.tun_dst, dst=self.pg0.local_ip6)
+                / GRE()
+                / IPv6(src=self.pg1.local_ip6, dst=self.pg1.remote_ip6)
+                / UDP(sport=1144, dport=2233)
+                / Raw(b"X" * payload_size)
+            )
+            for i in range(count)
+        ]
+
+    def gen_pkts6(self, p, sw_intf, src, dst, count=1, payload_size=100):
+        return [
+            Ether(src=sw_intf.remote_mac, dst=sw_intf.local_mac)
+            / IPv6(src="1::1", dst=dst)
+            / UDP(sport=1144, dport=2233)
+            / Raw(b"X" * payload_size)
+            for i in range(count)
+        ]
 
     def verify_decrypted6(self, p, rxs):
         for rx in rxs:
 
     def verify_decrypted6(self, p, rxs):
         for rx in rxs:
@@ -1918,11 +2175,12 @@ class TestIpsecMGreIfEspTra6(TemplateIpsec, IpsecTun6):
         N_NHS = 16
         self.tun_if = self.pg0
         p = self.ipv6_params
         N_NHS = 16
         self.tun_if = self.pg0
         p = self.ipv6_params
-        p.tun_if = VppGreInterface(self,
-                                   self.pg0.local_ip6,
-                                   "::",
-                                   mode=(VppEnum.vl_api_tunnel_mode_t.
-                                         TUNNEL_API_MODE_MP))
+        p.tun_if = VppGreInterface(
+            self,
+            self.pg0.local_ip6,
+            "::",
+            mode=(VppEnum.vl_api_tunnel_mode_t.TUNNEL_API_MODE_MP),
+        )
         p.tun_if.add_vpp_config()
         p.tun_if.admin_up()
         p.tun_if.config_ip6()
         p.tun_if.add_vpp_config()
         p.tun_if.admin_up()
         p.tun_if.config_ip6()
@@ -1946,37 +2204,53 @@ class TestIpsecMGreIfEspTra6(TemplateIpsec, IpsecTun6):
             p.scapy_tra_spi = p.scapy_tra_spi + ii
             p.vpp_tra_sa_id = p.vpp_tra_sa_id + ii
             p.vpp_tra_spi = p.vpp_tra_spi + ii
             p.scapy_tra_spi = p.scapy_tra_spi + ii
             p.vpp_tra_sa_id = p.vpp_tra_sa_id + ii
             p.vpp_tra_spi = p.vpp_tra_spi + ii
-            p.tun_sa_out = VppIpsecSA(self, p.scapy_tun_sa_id, p.scapy_tun_spi,
-                                      p.auth_algo_vpp_id, p.auth_key,
-                                      p.crypt_algo_vpp_id, p.crypt_key,
-                                      self.vpp_esp_protocol)
+            p.tun_sa_out = VppIpsecSA(
+                self,
+                p.scapy_tun_sa_id,
+                p.scapy_tun_spi,
+                p.auth_algo_vpp_id,
+                p.auth_key,
+                p.crypt_algo_vpp_id,
+                p.crypt_key,
+                self.vpp_esp_protocol,
+            )
             p.tun_sa_out.add_vpp_config()
 
             p.tun_sa_out.add_vpp_config()
 
-            p.tun_sa_in = VppIpsecSA(self, p.vpp_tun_sa_id, p.vpp_tun_spi,
-                                     p.auth_algo_vpp_id, p.auth_key,
-                                     p.crypt_algo_vpp_id, p.crypt_key,
-                                     self.vpp_esp_protocol)
+            p.tun_sa_in = VppIpsecSA(
+                self,
+                p.vpp_tun_sa_id,
+                p.vpp_tun_spi,
+                p.auth_algo_vpp_id,
+                p.auth_key,
+                p.crypt_algo_vpp_id,
+                p.crypt_key,
+                self.vpp_esp_protocol,
+            )
             p.tun_sa_in.add_vpp_config()
 
             # in this v6 variant add the teibs first then the protection
             p.tun_dst = self.pg0.remote_hosts[ii].ip6
             p.tun_sa_in.add_vpp_config()
 
             # in this v6 variant add the teibs first then the protection
             p.tun_dst = self.pg0.remote_hosts[ii].ip6
-            VppTeib(self, p.tun_if,
-                    p.tun_if.remote_hosts[ii].ip6,
-                    p.tun_dst).add_vpp_config()
+            VppTeib(
+                self, p.tun_if, p.tun_if.remote_hosts[ii].ip6, p.tun_dst
+            ).add_vpp_config()
 
             p.tun_protect = VppIpsecTunProtect(
                 self,
                 p.tun_if,
                 p.tun_sa_out,
                 [p.tun_sa_in],
 
             p.tun_protect = VppIpsecTunProtect(
                 self,
                 p.tun_if,
                 p.tun_sa_out,
                 [p.tun_sa_in],
-                nh=p.tun_if.remote_hosts[ii].ip6)
+                nh=p.tun_if.remote_hosts[ii].ip6,
+            )
             p.tun_protect.add_vpp_config()
             config_tra_params(p, self.encryption_type, p.tun_if)
             self.multi_params.append(p)
 
             p.tun_protect.add_vpp_config()
             config_tra_params(p, self.encryption_type, p.tun_if)
             self.multi_params.append(p)
 
-            VppIpRoute(self, p.remote_tun_if_host, 128,
-                       [VppRoutePath(p.tun_if.remote_hosts[ii].ip6,
-                                     p.tun_if.sw_if_index)]).add_vpp_config()
+            VppIpRoute(
+                self,
+                p.remote_tun_if_host,
+                128,
+                [VppRoutePath(p.tun_if.remote_hosts[ii].ip6, p.tun_if.sw_if_index)],
+            ).add_vpp_config()
             p.tun_dst = self.pg0.remote_hosts[ii].ip6
 
         self.logger.info(self.vapi.cli("sh log"))
             p.tun_dst = self.pg0.remote_hosts[ii].ip6
 
         self.logger.info(self.vapi.cli("sh log"))
@@ -1995,10 +2269,8 @@ class TestIpsecMGreIfEspTra6(TemplateIpsec, IpsecTun6):
 
 
 @tag_fixme_vpp_workers
 
 
 @tag_fixme_vpp_workers
-class TestIpsec4TunProtect(TemplateIpsec,
-                           TemplateIpsec4TunProtect,
-                           IpsecTun4):
-    """ IPsec IPv4 Tunnel protect - transport mode"""
+class TestIpsec4TunProtect(TemplateIpsec, TemplateIpsec4TunProtect, IpsecTun4):
+    """IPsec IPv4 Tunnel protect - transport mode"""
 
     def setUp(self):
         super(TestIpsec4TunProtect, self).setUp()
 
     def setUp(self):
         super(TestIpsec4TunProtect, self).setUp()
@@ -2028,7 +2300,7 @@ class TestIpsec4TunProtect(TemplateIpsec,
 
         # rekey - create new SAs and update the tunnel protection
         np = copy.copy(p)
 
         # rekey - create new SAs and update the tunnel protection
         np = copy.copy(p)
-        np.crypt_key = b'X' + p.crypt_key[1:]
+        np.crypt_key = b"X" + p.crypt_key[1:]
         np.scapy_tun_spi += 100
         np.scapy_tun_sa_id += 1
         np.vpp_tun_spi += 100
         np.scapy_tun_spi += 100
         np.scapy_tun_sa_id += 1
         np.vpp_tun_spi += 100
@@ -2051,10 +2323,8 @@ class TestIpsec4TunProtect(TemplateIpsec,
 
 
 @tag_fixme_vpp_workers
 
 
 @tag_fixme_vpp_workers
-class TestIpsec4TunProtectUdp(TemplateIpsec,
-                              TemplateIpsec4TunProtect,
-                              IpsecTun4):
-    """ IPsec IPv4 Tunnel protect - transport mode"""
+class TestIpsec4TunProtectUdp(TemplateIpsec, TemplateIpsec4TunProtect, IpsecTun4):
+    """IPsec IPv4 Tunnel protect - transport mode"""
 
     def setUp(self):
         super(TestIpsec4TunProtectUdp, self).setUp()
 
     def setUp(self):
         super(TestIpsec4TunProtectUdp, self).setUp()
@@ -2062,8 +2332,7 @@ class TestIpsec4TunProtectUdp(TemplateIpsec,
         self.tun_if = self.pg0
 
         p = self.ipv4_params
         self.tun_if = self.pg0
 
         p = self.ipv4_params
-        p.flags = (VppEnum.vl_api_ipsec_sad_flags_t.
-                   IPSEC_API_SAD_FLAG_UDP_ENCAP)
+        p.flags = VppEnum.vl_api_ipsec_sad_flags_t.IPSEC_API_SAD_FLAG_UDP_ENCAP
         p.nat_header = UDP(sport=4500, dport=4500)
         self.config_network(p)
         self.config_sa_tra(p)
         p.nat_header = UDP(sport=4500, dport=4500)
         self.config_network(p)
         self.config_sa_tra(p)
@@ -2093,15 +2362,13 @@ class TestIpsec4TunProtectUdp(TemplateIpsec,
         self.assertEqual(p.tun_if.get_tx_stats(), 127)
 
     def test_keepalive(self):
         self.assertEqual(p.tun_if.get_tx_stats(), 127)
 
     def test_keepalive(self):
-        """ IPSEC NAT Keepalive """
+        """IPSEC NAT Keepalive"""
         self.verify_keepalive(self.ipv4_params)
 
 
 @tag_fixme_vpp_workers
         self.verify_keepalive(self.ipv4_params)
 
 
 @tag_fixme_vpp_workers
-class TestIpsec4TunProtectTun(TemplateIpsec,
-                              TemplateIpsec4TunProtect,
-                              IpsecTun4):
-    """ IPsec IPv4 Tunnel protect - tunnel mode"""
+class TestIpsec4TunProtectTun(TemplateIpsec, TemplateIpsec4TunProtect, IpsecTun4):
+    """IPsec IPv4 Tunnel protect - tunnel mode"""
 
     encryption_type = ESP
     tun4_encrypt_node_name = "esp4-encrypt-tun"
 
     encryption_type = ESP
     tun4_encrypt_node_name = "esp4-encrypt-tun"
@@ -2115,23 +2382,26 @@ class TestIpsec4TunProtectTun(TemplateIpsec,
     def tearDown(self):
         super(TestIpsec4TunProtectTun, self).tearDown()
 
     def tearDown(self):
         super(TestIpsec4TunProtectTun, self).tearDown()
 
-    def gen_encrypt_pkts(self, p, sa, sw_intf, src, dst, count=1,
-                         payload_size=100):
-        return [Ether(src=sw_intf.remote_mac, dst=sw_intf.local_mac) /
-                sa.encrypt(IP(src=sw_intf.remote_ip4,
-                              dst=sw_intf.local_ip4) /
-                           IP(src=src, dst=dst) /
-                           UDP(sport=1144, dport=2233) /
-                           Raw(b'X' * payload_size))
-                for i in range(count)]
-
-    def gen_pkts(self, sw_intf, src, dst, count=1,
-                 payload_size=100):
-        return [Ether(src=sw_intf.remote_mac, dst=sw_intf.local_mac) /
-                IP(src=src, dst=dst) /
-                UDP(sport=1144, dport=2233) /
-                Raw(b'X' * payload_size)
-                for i in range(count)]
+    def gen_encrypt_pkts(self, p, sa, sw_intf, src, dst, count=1, payload_size=100):
+        return [
+            Ether(src=sw_intf.remote_mac, dst=sw_intf.local_mac)
+            / sa.encrypt(
+                IP(src=sw_intf.remote_ip4, dst=sw_intf.local_ip4)
+                / IP(src=src, dst=dst)
+                / UDP(sport=1144, dport=2233)
+                / Raw(b"X" * payload_size)
+            )
+            for i in range(count)
+        ]
+
+    def gen_pkts(self, sw_intf, src, dst, count=1, payload_size=100):
+        return [
+            Ether(src=sw_intf.remote_mac, dst=sw_intf.local_mac)
+            / IP(src=src, dst=dst)
+            / UDP(sport=1144, dport=2233)
+            / Raw(b"X" * payload_size)
+            for i in range(count)
+        ]
 
     def verify_decrypted(self, p, rxs):
         for rx in rxs:
 
     def verify_decrypted(self, p, rxs):
         for rx in rxs:
@@ -2160,7 +2430,7 @@ class TestIpsec4TunProtectTun(TemplateIpsec,
                 raise
 
     def test_tun_44(self):
                 raise
 
     def test_tun_44(self):
-        """IPSEC tunnel protect """
+        """IPSEC tunnel protect"""
 
         p = self.ipv4_params
 
 
         p = self.ipv4_params
 
@@ -2170,10 +2440,7 @@ class TestIpsec4TunProtectTun(TemplateIpsec,
 
         # also add an output features on the tunnel and physical interface
         # so we test they still work
 
         # also add an output features on the tunnel and physical interface
         # so we test they still work
-        r_all = AclRule(True,
-                        src_prefix="0.0.0.0/0",
-                        dst_prefix="0.0.0.0/0",
-                        proto=0)
+        r_all = AclRule(True, src_prefix="0.0.0.0/0", dst_prefix="0.0.0.0/0", proto=0)
         a = VppAcl(self, [r_all]).add_vpp_config()
 
         VppAclInterface(self, self.pg0.sw_if_index, [a]).add_vpp_config()
         a = VppAcl(self, [r_all]).add_vpp_config()
 
         VppAclInterface(self, self.pg0.sw_if_index, [a]).add_vpp_config()
@@ -2186,7 +2453,7 @@ class TestIpsec4TunProtectTun(TemplateIpsec,
 
         # rekey - create new SAs and update the tunnel protection
         np = copy.copy(p)
 
         # rekey - create new SAs and update the tunnel protection
         np = copy.copy(p)
-        np.crypt_key = b'X' + p.crypt_key[1:]
+        np.crypt_key = b"X" + p.crypt_key[1:]
         np.scapy_tun_spi += 100
         np.scapy_tun_sa_id += 1
         np.vpp_tun_spi += 100
         np.scapy_tun_spi += 100
         np.scapy_tun_sa_id += 1
         np.vpp_tun_spi += 100
@@ -2208,10 +2475,8 @@ class TestIpsec4TunProtectTun(TemplateIpsec,
         self.unconfig_network(p)
 
 
         self.unconfig_network(p)
 
 
-class TestIpsec4TunProtectTunDrop(TemplateIpsec,
-                                  TemplateIpsec4TunProtect,
-                                  IpsecTun4):
-    """ IPsec IPv4 Tunnel protect - tunnel mode - drop"""
+class TestIpsec4TunProtectTunDrop(TemplateIpsec, TemplateIpsec4TunProtect, IpsecTun4):
+    """IPsec IPv4 Tunnel protect - tunnel mode - drop"""
 
     encryption_type = ESP
     tun4_encrypt_node_name = "esp4-encrypt-tun"
 
     encryption_type = ESP
     tun4_encrypt_node_name = "esp4-encrypt-tun"
@@ -2225,18 +2490,20 @@ class TestIpsec4TunProtectTunDrop(TemplateIpsec,
     def tearDown(self):
         super(TestIpsec4TunProtectTunDrop, self).tearDown()
 
     def tearDown(self):
         super(TestIpsec4TunProtectTunDrop, self).tearDown()
 
-    def gen_encrypt_pkts(self, p, sa, sw_intf, src, dst, count=1,
-                         payload_size=100):
-        return [Ether(src=sw_intf.remote_mac, dst=sw_intf.local_mac) /
-                sa.encrypt(IP(src=sw_intf.remote_ip4,
-                              dst="5.5.5.5") /
-                           IP(src=src, dst=dst) /
-                           UDP(sport=1144, dport=2233) /
-                           Raw(b'X' * payload_size))
-                for i in range(count)]
+    def gen_encrypt_pkts(self, p, sa, sw_intf, src, dst, count=1, payload_size=100):
+        return [
+            Ether(src=sw_intf.remote_mac, dst=sw_intf.local_mac)
+            / sa.encrypt(
+                IP(src=sw_intf.remote_ip4, dst="5.5.5.5")
+                / IP(src=src, dst=dst)
+                / UDP(sport=1144, dport=2233)
+                / Raw(b"X" * payload_size)
+            )
+            for i in range(count)
+        ]
 
     def test_tun_drop_44(self):
 
     def test_tun_drop_44(self):
-        """IPSEC tunnel protect bogus tunnel header """
+        """IPSEC tunnel protect bogus tunnel header"""
 
         p = self.ipv4_params
 
 
         p = self.ipv4_params
 
@@ -2244,10 +2511,14 @@ class TestIpsec4TunProtectTunDrop(TemplateIpsec,
         self.config_sa_tun(p)
         self.config_protect(p)
 
         self.config_sa_tun(p)
         self.config_protect(p)
 
-        tx = self.gen_encrypt_pkts(p, p.scapy_tun_sa, self.tun_if,
-                                   src=p.remote_tun_if_host,
-                                   dst=self.pg1.remote_ip4,
-                                   count=63)
+        tx = self.gen_encrypt_pkts(
+            p,
+            p.scapy_tun_sa,
+            self.tun_if,
+            src=p.remote_tun_if_host,
+            dst=self.pg1.remote_ip4,
+            count=63,
+        )
         self.send_and_assert_no_replies(self.tun_if, tx)
 
         # teardown
         self.send_and_assert_no_replies(self.tun_if, tx)
 
         # teardown
@@ -2257,10 +2528,8 @@ class TestIpsec4TunProtectTunDrop(TemplateIpsec,
 
 
 @tag_fixme_vpp_workers
 
 
 @tag_fixme_vpp_workers
-class TestIpsec6TunProtect(TemplateIpsec,
-                           TemplateIpsec6TunProtect,
-                           IpsecTun6):
-    """ IPsec IPv6 Tunnel protect - transport mode"""
+class TestIpsec6TunProtect(TemplateIpsec, TemplateIpsec6TunProtect, IpsecTun6):
+    """IPsec IPv6 Tunnel protect - transport mode"""
 
     encryption_type = ESP
     tun6_encrypt_node_name = "esp6-encrypt-tun"
 
     encryption_type = ESP
     tun6_encrypt_node_name = "esp6-encrypt-tun"
@@ -2289,7 +2558,7 @@ class TestIpsec6TunProtect(TemplateIpsec,
 
         # rekey - create new SAs and update the tunnel protection
         np = copy.copy(p)
 
         # rekey - create new SAs and update the tunnel protection
         np = copy.copy(p)
-        np.crypt_key = b'X' + p.crypt_key[1:]
+        np.crypt_key = b"X" + p.crypt_key[1:]
         np.scapy_tun_spi += 100
         np.scapy_tun_sa_id += 1
         np.vpp_tun_spi += 100
         np.scapy_tun_spi += 100
         np.scapy_tun_sa_id += 1
         np.vpp_tun_spi += 100
@@ -2308,8 +2577,9 @@ class TestIpsec6TunProtect(TemplateIpsec,
         # bounce the interface state
         p.tun_if.admin_down()
         self.verify_drop_tun_66(np, count=127)
         # bounce the interface state
         p.tun_if.admin_down()
         self.verify_drop_tun_66(np, count=127)
-        node = ('/err/ipsec6-tun-input/%s' %
-                'ipsec packets received on disabled interface')
+        node = (
+            "/err/ipsec6-tun-input/%s" % "ipsec packets received on disabled interface"
+        )
         self.assertEqual(127, self.statistics.get_err_counter(node))
         p.tun_if.admin_up()
         self.verify_tun_66(np, count=127)
         self.assertEqual(127, self.statistics.get_err_counter(node))
         p.tun_if.admin_up()
         self.verify_tun_66(np, count=127)
@@ -2319,7 +2589,7 @@ class TestIpsec6TunProtect(TemplateIpsec,
         #  2) swap output SA to [new]
         #  3) use only [new] input SA
         np3 = copy.copy(np)
         #  2) swap output SA to [new]
         #  3) use only [new] input SA
         np3 = copy.copy(np)
-        np3.crypt_key = b'Z' + p.crypt_key[1:]
+        np3.crypt_key = b"Z" + p.crypt_key[1:]
         np3.scapy_tun_spi += 100
         np3.scapy_tun_sa_id += 1
         np3.vpp_tun_spi += 100
         np3.scapy_tun_spi += 100
         np3.scapy_tun_sa_id += 1
         np3.vpp_tun_spi += 100
@@ -2330,25 +2600,22 @@ class TestIpsec6TunProtect(TemplateIpsec,
         self.config_sa_tra(np3)
 
         # step 1;
         self.config_sa_tra(np3)
 
         # step 1;
-        p.tun_protect.update_vpp_config(np.tun_sa_out,
-                                        [np.tun_sa_in, np3.tun_sa_in])
+        p.tun_protect.update_vpp_config(np.tun_sa_out, [np.tun_sa_in, np3.tun_sa_in])
         self.verify_tun_66(np, np, count=127)
         self.verify_tun_66(np3, np, count=127)
 
         # step 2;
         self.verify_tun_66(np, np, count=127)
         self.verify_tun_66(np3, np, count=127)
 
         # step 2;
-        p.tun_protect.update_vpp_config(np3.tun_sa_out,
-                                        [np.tun_sa_in, np3.tun_sa_in])
+        p.tun_protect.update_vpp_config(np3.tun_sa_out, [np.tun_sa_in, np3.tun_sa_in])
         self.verify_tun_66(np, np3, count=127)
         self.verify_tun_66(np3, np3, count=127)
 
         # step 1;
         self.verify_tun_66(np, np3, count=127)
         self.verify_tun_66(np3, np3, count=127)
 
         # step 1;
-        p.tun_protect.update_vpp_config(np3.tun_sa_out,
-                                        [np3.tun_sa_in])
+        p.tun_protect.update_vpp_config(np3.tun_sa_out, [np3.tun_sa_in])
         self.verify_tun_66(np3, np3, count=127)
         self.verify_drop_tun_rx_66(np, count=127)
 
         self.verify_tun_66(np3, np3, count=127)
         self.verify_drop_tun_rx_66(np, count=127)
 
-        self.assertEqual(p.tun_if.get_rx_stats(), 127*9)
-        self.assertEqual(p.tun_if.get_tx_stats(), 127*8)
+        self.assertEqual(p.tun_if.get_rx_stats(), 127 * 9)
+        self.assertEqual(p.tun_if.get_tx_stats(), 127 * 8)
         self.unconfig_sa(np)
 
         # teardown
         self.unconfig_sa(np)
 
         # teardown
@@ -2376,10 +2643,8 @@ class TestIpsec6TunProtect(TemplateIpsec,
 
 
 @tag_fixme_vpp_workers
 
 
 @tag_fixme_vpp_workers
-class TestIpsec6TunProtectTun(TemplateIpsec,
-                              TemplateIpsec6TunProtect,
-                              IpsecTun6):
-    """ IPsec IPv6 Tunnel protect - tunnel mode"""
+class TestIpsec6TunProtectTun(TemplateIpsec, TemplateIpsec6TunProtect, IpsecTun6):
+    """IPsec IPv6 Tunnel protect - tunnel mode"""
 
     encryption_type = ESP
     tun6_encrypt_node_name = "esp6-encrypt-tun"
 
     encryption_type = ESP
     tun6_encrypt_node_name = "esp6-encrypt-tun"
@@ -2393,23 +2658,26 @@ class TestIpsec6TunProtectTun(TemplateIpsec,
     def tearDown(self):
         super(TestIpsec6TunProtectTun, self).tearDown()
 
     def tearDown(self):
         super(TestIpsec6TunProtectTun, self).tearDown()
 
-    def gen_encrypt_pkts6(self, p, sa, sw_intf, src, dst, count=1,
-                          payload_size=100):
-        return [Ether(src=sw_intf.remote_mac, dst=sw_intf.local_mac) /
-                sa.encrypt(IPv6(src=sw_intf.remote_ip6,
-                                dst=sw_intf.local_ip6) /
-                           IPv6(src=src, dst=dst) /
-                           UDP(sport=1166, dport=2233) /
-                           Raw(b'X' * payload_size))
-                for i in range(count)]
-
-    def gen_pkts6(self, p, sw_intf, src, dst, count=1,
-                  payload_size=100):
-        return [Ether(src=sw_intf.remote_mac, dst=sw_intf.local_mac) /
-                IPv6(src=src, dst=dst) /
-                UDP(sport=1166, dport=2233) /
-                Raw(b'X' * payload_size)
-                for i in range(count)]
+    def gen_encrypt_pkts6(self, p, sa, sw_intf, src, dst, count=1, payload_size=100):
+        return [
+            Ether(src=sw_intf.remote_mac, dst=sw_intf.local_mac)
+            / sa.encrypt(
+                IPv6(src=sw_intf.remote_ip6, dst=sw_intf.local_ip6)
+                / IPv6(src=src, dst=dst)
+                / UDP(sport=1166, dport=2233)
+                / Raw(b"X" * payload_size)
+            )
+            for i in range(count)
+        ]
+
+    def gen_pkts6(self, p, sw_intf, src, dst, count=1, payload_size=100):
+        return [
+            Ether(src=sw_intf.remote_mac, dst=sw_intf.local_mac)
+            / IPv6(src=src, dst=dst)
+            / UDP(sport=1166, dport=2233)
+            / Raw(b"X" * payload_size)
+            for i in range(count)
+        ]
 
     def verify_decrypted6(self, p, rxs):
         for rx in rxs:
 
     def verify_decrypted6(self, p, rxs):
         for rx in rxs:
@@ -2438,7 +2706,7 @@ class TestIpsec6TunProtectTun(TemplateIpsec,
                 raise
 
     def test_tun_66(self):
                 raise
 
     def test_tun_66(self):
-        """IPSEC tunnel protect """
+        """IPSEC tunnel protect"""
 
         p = self.ipv6_params
 
 
         p = self.ipv6_params
 
@@ -2453,7 +2721,7 @@ class TestIpsec6TunProtectTun(TemplateIpsec,
 
         # rekey - create new SAs and update the tunnel protection
         np = copy.copy(p)
 
         # rekey - create new SAs and update the tunnel protection
         np = copy.copy(p)
-        np.crypt_key = b'X' + p.crypt_key[1:]
+        np.crypt_key = b"X" + p.crypt_key[1:]
         np.scapy_tun_spi += 100
         np.scapy_tun_sa_id += 1
         np.vpp_tun_spi += 100
         np.scapy_tun_spi += 100
         np.scapy_tun_sa_id += 1
         np.vpp_tun_spi += 100
@@ -2475,10 +2743,8 @@ class TestIpsec6TunProtectTun(TemplateIpsec,
         self.unconfig_network(p)
 
 
         self.unconfig_network(p)
 
 
-class TestIpsec6TunProtectTunDrop(TemplateIpsec,
-                                  TemplateIpsec6TunProtect,
-                                  IpsecTun6):
-    """ IPsec IPv6 Tunnel protect - tunnel mode - drop"""
+class TestIpsec6TunProtectTunDrop(TemplateIpsec, TemplateIpsec6TunProtect, IpsecTun6):
+    """IPsec IPv6 Tunnel protect - tunnel mode - drop"""
 
     encryption_type = ESP
     tun6_encrypt_node_name = "esp6-encrypt-tun"
 
     encryption_type = ESP
     tun6_encrypt_node_name = "esp6-encrypt-tun"
@@ -2492,20 +2758,22 @@ class TestIpsec6TunProtectTunDrop(TemplateIpsec,
     def tearDown(self):
         super(TestIpsec6TunProtectTunDrop, self).tearDown()
 
     def tearDown(self):
         super(TestIpsec6TunProtectTunDrop, self).tearDown()
 
-    def gen_encrypt_pkts6(self, p, sa, sw_intf, src, dst, count=1,
-                          payload_size=100):
+    def gen_encrypt_pkts6(self, p, sa, sw_intf, src, dst, count=1, payload_size=100):
         # the IP destination of the revelaed packet does not match
         # that assigned to the tunnel
         # the IP destination of the revelaed packet does not match
         # that assigned to the tunnel
-        return [Ether(src=sw_intf.remote_mac, dst=sw_intf.local_mac) /
-                sa.encrypt(IPv6(src=sw_intf.remote_ip6,
-                                dst="5::5") /
-                           IPv6(src=src, dst=dst) /
-                           UDP(sport=1144, dport=2233) /
-                           Raw(b'X' * payload_size))
-                for i in range(count)]
+        return [
+            Ether(src=sw_intf.remote_mac, dst=sw_intf.local_mac)
+            / sa.encrypt(
+                IPv6(src=sw_intf.remote_ip6, dst="5::5")
+                / IPv6(src=src, dst=dst)
+                / UDP(sport=1144, dport=2233)
+                / Raw(b"X" * payload_size)
+            )
+            for i in range(count)
+        ]
 
     def test_tun_drop_66(self):
 
     def test_tun_drop_66(self):
-        """IPSEC 6 tunnel protect bogus tunnel header """
+        """IPSEC 6 tunnel protect bogus tunnel header"""
 
         p = self.ipv6_params
 
 
         p = self.ipv6_params
 
@@ -2513,10 +2781,14 @@ class TestIpsec6TunProtectTunDrop(TemplateIpsec,
         self.config_sa_tun(p)
         self.config_protect(p)
 
         self.config_sa_tun(p)
         self.config_protect(p)
 
-        tx = self.gen_encrypt_pkts6(p, p.scapy_tun_sa, self.tun_if,
-                                    src=p.remote_tun_if_host,
-                                    dst=self.pg1.remote_ip6,
-                                    count=63)
+        tx = self.gen_encrypt_pkts6(
+            p,
+            p.scapy_tun_sa,
+            self.tun_if,
+            src=p.remote_tun_if_host,
+            dst=self.pg1.remote_ip6,
+            count=63,
+        )
         self.send_and_assert_no_replies(self.tun_if, tx)
 
         self.unconfig_protect(p)
         self.send_and_assert_no_replies(self.tun_if, tx)
 
         self.unconfig_protect(p)
@@ -2525,7 +2797,7 @@ class TestIpsec6TunProtectTunDrop(TemplateIpsec,
 
 
 class TemplateIpsecItf4(object):
 
 
 class TemplateIpsecItf4(object):
-    """ IPsec Interface IPv4 """
+    """IPsec Interface IPv4"""
 
     encryption_type = ESP
     tun4_encrypt_node_name = "esp4-encrypt-tun"
 
     encryption_type = ESP
     tun4_encrypt_node_name = "esp4-encrypt-tun"
@@ -2535,30 +2807,41 @@ class TemplateIpsecItf4(object):
     def config_sa_tun(self, p, src, dst):
         config_tun_params(p, self.encryption_type, None, src, dst)
 
     def config_sa_tun(self, p, src, dst):
         config_tun_params(p, self.encryption_type, None, src, dst)
 
-        p.tun_sa_out = VppIpsecSA(self, p.scapy_tun_sa_id, p.scapy_tun_spi,
-                                  p.auth_algo_vpp_id, p.auth_key,
-                                  p.crypt_algo_vpp_id, p.crypt_key,
-                                  self.vpp_esp_protocol,
-                                  src, dst,
-                                  flags=p.flags)
+        p.tun_sa_out = VppIpsecSA(
+            self,
+            p.scapy_tun_sa_id,
+            p.scapy_tun_spi,
+            p.auth_algo_vpp_id,
+            p.auth_key,
+            p.crypt_algo_vpp_id,
+            p.crypt_key,
+            self.vpp_esp_protocol,
+            src,
+            dst,
+            flags=p.flags,
+        )
         p.tun_sa_out.add_vpp_config()
 
         p.tun_sa_out.add_vpp_config()
 
-        p.tun_sa_in = VppIpsecSA(self, p.vpp_tun_sa_id, p.vpp_tun_spi,
-                                 p.auth_algo_vpp_id, p.auth_key,
-                                 p.crypt_algo_vpp_id, p.crypt_key,
-                                 self.vpp_esp_protocol,
-                                 dst, src,
-                                 flags=p.flags)
+        p.tun_sa_in = VppIpsecSA(
+            self,
+            p.vpp_tun_sa_id,
+            p.vpp_tun_spi,
+            p.auth_algo_vpp_id,
+            p.auth_key,
+            p.crypt_algo_vpp_id,
+            p.crypt_key,
+            self.vpp_esp_protocol,
+            dst,
+            src,
+            flags=p.flags,
+        )
         p.tun_sa_in.add_vpp_config()
 
     def config_protect(self, p):
         p.tun_sa_in.add_vpp_config()
 
     def config_protect(self, p):
-        p.tun_protect = VppIpsecTunProtect(self,
-                                           p.tun_if,
-                                           p.tun_sa_out,
-                                           [p.tun_sa_in])
+        p.tun_protect = VppIpsecTunProtect(self, p.tun_if, p.tun_sa_out, [p.tun_sa_in])
         p.tun_protect.add_vpp_config()
 
         p.tun_protect.add_vpp_config()
 
-    def config_network(self, p, instance=0xffffffff):
+    def config_network(self, p, instance=0xFFFFFFFF):
         p.tun_if = VppIpsecInterface(self, instance=instance)
 
         p.tun_if.add_vpp_config()
         p.tun_if = VppIpsecInterface(self, instance=instance)
 
         p.tun_if.add_vpp_config()
@@ -2566,14 +2849,23 @@ class TemplateIpsecItf4(object):
         p.tun_if.config_ip4()
         p.tun_if.config_ip6()
 
         p.tun_if.config_ip4()
         p.tun_if.config_ip6()
 
-        p.route = VppIpRoute(self, p.remote_tun_if_host, 32,
-                             [VppRoutePath(p.tun_if.remote_ip4,
-                                           0xffffffff)])
+        p.route = VppIpRoute(
+            self,
+            p.remote_tun_if_host,
+            32,
+            [VppRoutePath(p.tun_if.remote_ip4, 0xFFFFFFFF)],
+        )
         p.route.add_vpp_config()
         p.route.add_vpp_config()
-        r = VppIpRoute(self, p.remote_tun_if_host6, 128,
-                       [VppRoutePath(p.tun_if.remote_ip6,
-                                     0xffffffff,
-                                     proto=DpoProto.DPO_PROTO_IP6)])
+        r = VppIpRoute(
+            self,
+            p.remote_tun_if_host6,
+            128,
+            [
+                VppRoutePath(
+                    p.tun_if.remote_ip6, 0xFFFFFFFF, proto=DpoProto.DPO_PROTO_IP6
+                )
+            ],
+        )
         r.add_vpp_config()
 
     def unconfig_network(self, p):
         r.add_vpp_config()
 
     def unconfig_network(self, p):
@@ -2589,10 +2881,8 @@ class TemplateIpsecItf4(object):
 
 
 @tag_fixme_vpp_workers
 
 
 @tag_fixme_vpp_workers
-class TestIpsecItf4(TemplateIpsec,
-                    TemplateIpsecItf4,
-                    IpsecTun4):
-    """ IPsec Interface IPv4 """
+class TestIpsecItf4(TemplateIpsec, TemplateIpsecItf4, IpsecTun4):
+    """IPsec Interface IPv4"""
 
     def setUp(self):
         super(TestIpsecItf4, self).setUp()
 
     def setUp(self):
         super(TestIpsecItf4, self).setUp()
@@ -2621,13 +2911,11 @@ class TestIpsecItf4(TemplateIpsec,
         p = self.ipv4_params
 
         self.config_network(p)
         p = self.ipv4_params
 
         self.config_network(p)
-        config_tun_params(p, self.encryption_type, None,
-                          self.pg0.local_ip4,
-                          self.pg0.remote_ip4)
+        config_tun_params(
+            p, self.encryption_type, None, self.pg0.local_ip4, self.pg0.remote_ip4
+        )
         self.verify_tun_dropped_44(p, count=n_pkts)
         self.verify_tun_dropped_44(p, count=n_pkts)
-        self.config_sa_tun(p,
-                           self.pg0.local_ip4,
-                           self.pg0.remote_ip4)
+        self.config_sa_tun(p, self.pg0.local_ip4, self.pg0.remote_ip4)
         self.config_protect(p)
 
         self.verify_tun_44(p, count=n_pkts)
         self.config_protect(p)
 
         self.verify_tun_44(p, count=n_pkts)
@@ -2639,15 +2927,15 @@ class TestIpsecItf4(TemplateIpsec,
         p.tun_if.admin_up()
         self.verify_tun_44(p, count=n_pkts)
 
         p.tun_if.admin_up()
         self.verify_tun_44(p, count=n_pkts)
 
-        self.assertEqual(p.tun_if.get_rx_stats(), 3*n_pkts)
-        self.assertEqual(p.tun_if.get_tx_stats(), 2*n_pkts)
+        self.assertEqual(p.tun_if.get_rx_stats(), 3 * n_pkts)
+        self.assertEqual(p.tun_if.get_tx_stats(), 2 * n_pkts)
 
         # it's a v6 packet when its encrypted
         self.tun4_encrypt_node_name = "esp6-encrypt-tun"
 
         self.verify_tun_64(p, count=n_pkts)
 
         # it's a v6 packet when its encrypted
         self.tun4_encrypt_node_name = "esp6-encrypt-tun"
 
         self.verify_tun_64(p, count=n_pkts)
-        self.assertEqual(p.tun_if.get_rx_stats(), 4*n_pkts)
-        self.assertEqual(p.tun_if.get_tx_stats(), 3*n_pkts)
+        self.assertEqual(p.tun_if.get_rx_stats(), 4 * n_pkts)
+        self.assertEqual(p.tun_if.get_tx_stats(), 3 * n_pkts)
 
         self.tun4_encrypt_node_name = "esp4-encrypt-tun"
 
 
         self.tun4_encrypt_node_name = "esp4-encrypt-tun"
 
@@ -2655,7 +2943,7 @@ class TestIpsecItf4(TemplateIpsec,
 
         # rekey - create new SAs and update the tunnel protection
         np = copy.copy(p)
 
         # rekey - create new SAs and update the tunnel protection
         np = copy.copy(p)
-        np.crypt_key = b'X' + p.crypt_key[1:]
+        np.crypt_key = b"X" + p.crypt_key[1:]
         np.scapy_tun_spi += 100
         np.scapy_tun_sa_id += 1
         np.vpp_tun_spi += 100
         np.scapy_tun_spi += 100
         np.scapy_tun_sa_id += 1
         np.vpp_tun_spi += 100
@@ -2663,9 +2951,7 @@ class TestIpsecItf4(TemplateIpsec,
         np.tun_if.local_spi = p.vpp_tun_spi
         np.tun_if.remote_spi = p.scapy_tun_spi
 
         np.tun_if.local_spi = p.vpp_tun_spi
         np.tun_if.remote_spi = p.scapy_tun_spi
 
-        self.config_sa_tun(np,
-                           self.pg0.local_ip4,
-                           self.pg0.remote_ip4)
+        self.config_sa_tun(np, self.pg0.local_ip4, self.pg0.remote_ip4)
         self.config_protect(np)
         self.unconfig_sa(p)
 
         self.config_protect(np)
         self.unconfig_sa(p)
 
@@ -2684,17 +2970,15 @@ class TestIpsecItf4(TemplateIpsec,
         n_pkts = 127
         p = copy.copy(self.ipv4_params)
 
         n_pkts = 127
         p = copy.copy(self.ipv4_params)
 
-        p.auth_algo_vpp_id = (VppEnum.vl_api_ipsec_integ_alg_t.
-                              IPSEC_API_INTEG_ALG_NONE)
-        p.crypt_algo_vpp_id = (VppEnum.vl_api_ipsec_crypto_alg_t.
-                               IPSEC_API_CRYPTO_ALG_NONE)
+        p.auth_algo_vpp_id = VppEnum.vl_api_ipsec_integ_alg_t.IPSEC_API_INTEG_ALG_NONE
+        p.crypt_algo_vpp_id = (
+            VppEnum.vl_api_ipsec_crypto_alg_t.IPSEC_API_CRYPTO_ALG_NONE
+        )
         p.crypt_algo = "NULL"
         p.auth_algo = "NULL"
 
         self.config_network(p)
         p.crypt_algo = "NULL"
         p.auth_algo = "NULL"
 
         self.config_network(p)
-        self.config_sa_tun(p,
-                           self.pg0.local_ip4,
-                           self.pg0.remote_ip4)
+        self.config_sa_tun(p, self.pg0.local_ip4, self.pg0.remote_ip4)
         self.config_protect(p)
 
         self.logger.info(self.vapi.cli("sh ipsec sa"))
         self.config_protect(p)
 
         self.logger.info(self.vapi.cli("sh ipsec sa"))
@@ -2711,18 +2995,23 @@ class TestIpsecItf4(TemplateIpsec,
         p = self.ipv4_params
 
         self.config_network(p)
         p = self.ipv4_params
 
         self.config_network(p)
-        self.config_sa_tun(p,
-                           self.pg0.local_ip4,
-                           self.pg0.remote_ip4)
+        self.config_sa_tun(p, self.pg0.local_ip4, self.pg0.remote_ip4)
         self.config_protect(p)
 
         action_tx = PolicerAction(
         self.config_protect(p)
 
         action_tx = PolicerAction(
-            VppEnum.vl_api_sse2_qos_action_type_t.SSE2_QOS_ACTION_API_TRANSMIT,
-            0)
-        policer = VppPolicer(self, "pol1", 80, 0, 1000, 0,
-                             conform_action=action_tx,
-                             exceed_action=action_tx,
-                             violate_action=action_tx)
+            VppEnum.vl_api_sse2_qos_action_type_t.SSE2_QOS_ACTION_API_TRANSMIT, 0
+        )
+        policer = VppPolicer(
+            self,
+            "pol1",
+            80,
+            0,
+            1000,
+            0,
+            conform_action=action_tx,
+            exceed_action=action_tx,
+            violate_action=action_tx,
+        )
         policer.add_vpp_config()
 
         # Start policing on tun
         policer.add_vpp_config()
 
         # Start policing on tun
@@ -2735,9 +3024,9 @@ class TestIpsecItf4(TemplateIpsec,
         stats = policer.get_stats()
 
         # Single rate, 2 colour policer - expect conform, violate but no exceed
         stats = policer.get_stats()
 
         # Single rate, 2 colour policer - expect conform, violate but no exceed
-        self.assertGreater(stats['conform_packets'], 0)
-        self.assertEqual(stats['exceed_packets'], 0)
-        self.assertGreater(stats['violate_packets'], 0)
+        self.assertGreater(stats["conform_packets"], 0)
+        self.assertEqual(stats["exceed_packets"], 0)
+        self.assertGreater(stats["violate_packets"], 0)
 
         # Stop policing on tun
         policer.apply_vpp_config(p.tun_if.sw_if_index, Dir.RX, False)
 
         # Stop policing on tun
         policer.apply_vpp_config(p.tun_if.sw_if_index, Dir.RX, False)
@@ -2754,10 +3043,8 @@ class TestIpsecItf4(TemplateIpsec,
         self.unconfig_network(p)
 
 
         self.unconfig_network(p)
 
 
-class TestIpsecItf4MPLS(TemplateIpsec,
-                        TemplateIpsecItf4,
-                        IpsecTun4):
-    """ IPsec Interface MPLSoIPv4 """
+class TestIpsecItf4MPLS(TemplateIpsec, TemplateIpsecItf4, IpsecTun4):
+    """IPsec Interface MPLSoIPv4"""
 
     tun4_encrypt_node_name = "esp-mpls-encrypt-tun"
 
 
     tun4_encrypt_node_name = "esp-mpls-encrypt-tun"
 
@@ -2769,14 +3056,17 @@ class TestIpsecItf4MPLS(TemplateIpsec,
     def tearDown(self):
         super(TestIpsecItf4MPLS, self).tearDown()
 
     def tearDown(self):
         super(TestIpsecItf4MPLS, self).tearDown()
 
-    def gen_encrypt_pkts(self, p, sa, sw_intf, src, dst, count=1,
-                         payload_size=100):
-        return [Ether(src=sw_intf.remote_mac, dst=sw_intf.local_mac) /
-                sa.encrypt(MPLS(label=44, ttl=3) /
-                           IP(src=src, dst=dst) /
-                           UDP(sport=1166, dport=2233) /
-                           Raw(b'X' * payload_size))
-                for i in range(count)]
+    def gen_encrypt_pkts(self, p, sa, sw_intf, src, dst, count=1, payload_size=100):
+        return [
+            Ether(src=sw_intf.remote_mac, dst=sw_intf.local_mac)
+            / sa.encrypt(
+                MPLS(label=44, ttl=3)
+                / IP(src=src, dst=dst)
+                / UDP(sport=1166, dport=2233)
+                / Raw(b"X" * payload_size)
+            )
+            for i in range(count)
+        ]
 
     def verify_encrypted(self, p, sa, rxs):
         for rx in rxs:
 
     def verify_encrypted(self, p, sa, rxs):
         for rx in rxs:
@@ -2807,18 +3097,19 @@ class TestIpsecItf4MPLS(TemplateIpsec,
 
         self.config_network(p)
         # deag MPLS routes from the tunnel
 
         self.config_network(p)
         # deag MPLS routes from the tunnel
-        r4 = VppMplsRoute(self, 44, 1,
-                          [VppRoutePath(
-                              self.pg1.remote_ip4,
-                              self.pg1.sw_if_index)]).add_vpp_config()
-        p.route.modify([VppRoutePath(p.tun_if.remote_ip4,
-                                     p.tun_if.sw_if_index,
-                                     labels=[VppMplsLabel(44)])])
+        r4 = VppMplsRoute(
+            self, 44, 1, [VppRoutePath(self.pg1.remote_ip4, self.pg1.sw_if_index)]
+        ).add_vpp_config()
+        p.route.modify(
+            [
+                VppRoutePath(
+                    p.tun_if.remote_ip4, p.tun_if.sw_if_index, labels=[VppMplsLabel(44)]
+                )
+            ]
+        )
         p.tun_if.enable_mpls()
 
         p.tun_if.enable_mpls()
 
-        self.config_sa_tun(p,
-                           self.pg0.local_ip4,
-                           self.pg0.remote_ip4)
+        self.config_sa_tun(p, self.pg0.local_ip4, self.pg0.remote_ip4)
         self.config_protect(p)
 
         self.verify_tun_44(p, count=n_pkts)
         self.config_protect(p)
 
         self.verify_tun_44(p, count=n_pkts)
@@ -2831,7 +3122,7 @@ class TestIpsecItf4MPLS(TemplateIpsec,
 
 
 class TemplateIpsecItf6(object):
 
 
 class TemplateIpsecItf6(object):
-    """ IPsec Interface IPv6 """
+    """IPsec Interface IPv6"""
 
     encryption_type = ESP
     tun6_encrypt_node_name = "esp6-encrypt-tun"
 
     encryption_type = ESP
     tun6_encrypt_node_name = "esp6-encrypt-tun"
@@ -2841,34 +3132,45 @@ class TemplateIpsecItf6(object):
     def config_sa_tun(self, p, src, dst):
         config_tun_params(p, self.encryption_type, None, src, dst)
 
     def config_sa_tun(self, p, src, dst):
         config_tun_params(p, self.encryption_type, None, src, dst)
 
-        if not hasattr(p, 'tun_flags'):
+        if not hasattr(p, "tun_flags"):
             p.tun_flags = None
             p.tun_flags = None
-        if not hasattr(p, 'hop_limit'):
+        if not hasattr(p, "hop_limit"):
             p.hop_limit = 255
 
             p.hop_limit = 255
 
-        p.tun_sa_out = VppIpsecSA(self, p.scapy_tun_sa_id, p.scapy_tun_spi,
-                                  p.auth_algo_vpp_id, p.auth_key,
-                                  p.crypt_algo_vpp_id, p.crypt_key,
-                                  self.vpp_esp_protocol,
-                                  src, dst,
-                                  flags=p.flags,
-                                  tun_flags=p.tun_flags,
-                                  hop_limit=p.hop_limit)
+        p.tun_sa_out = VppIpsecSA(
+            self,
+            p.scapy_tun_sa_id,
+            p.scapy_tun_spi,
+            p.auth_algo_vpp_id,
+            p.auth_key,
+            p.crypt_algo_vpp_id,
+            p.crypt_key,
+            self.vpp_esp_protocol,
+            src,
+            dst,
+            flags=p.flags,
+            tun_flags=p.tun_flags,
+            hop_limit=p.hop_limit,
+        )
         p.tun_sa_out.add_vpp_config()
 
         p.tun_sa_out.add_vpp_config()
 
-        p.tun_sa_in = VppIpsecSA(self, p.vpp_tun_sa_id, p.vpp_tun_spi,
-                                 p.auth_algo_vpp_id, p.auth_key,
-                                 p.crypt_algo_vpp_id, p.crypt_key,
-                                 self.vpp_esp_protocol,
-                                 dst, src,
-                                 flags=p.flags)
+        p.tun_sa_in = VppIpsecSA(
+            self,
+            p.vpp_tun_sa_id,
+            p.vpp_tun_spi,
+            p.auth_algo_vpp_id,
+            p.auth_key,
+            p.crypt_algo_vpp_id,
+            p.crypt_key,
+            self.vpp_esp_protocol,
+            dst,
+            src,
+            flags=p.flags,
+        )
         p.tun_sa_in.add_vpp_config()
 
     def config_protect(self, p):
         p.tun_sa_in.add_vpp_config()
 
     def config_protect(self, p):
-        p.tun_protect = VppIpsecTunProtect(self,
-                                           p.tun_if,
-                                           p.tun_sa_out,
-                                           [p.tun_sa_in])
+        p.tun_protect = VppIpsecTunProtect(self, p.tun_if, p.tun_sa_out, [p.tun_sa_in])
         p.tun_protect.add_vpp_config()
 
     def config_network(self, p):
         p.tun_protect.add_vpp_config()
 
     def config_network(self, p):
@@ -2879,15 +3181,24 @@ class TemplateIpsecItf6(object):
         p.tun_if.config_ip4()
         p.tun_if.config_ip6()
 
         p.tun_if.config_ip4()
         p.tun_if.config_ip6()
 
-        r = VppIpRoute(self, p.remote_tun_if_host4, 32,
-                       [VppRoutePath(p.tun_if.remote_ip4,
-                                     0xffffffff)])
+        r = VppIpRoute(
+            self,
+            p.remote_tun_if_host4,
+            32,
+            [VppRoutePath(p.tun_if.remote_ip4, 0xFFFFFFFF)],
+        )
         r.add_vpp_config()
 
         r.add_vpp_config()
 
-        p.route = VppIpRoute(self, p.remote_tun_if_host, 128,
-                             [VppRoutePath(p.tun_if.remote_ip6,
-                                           0xffffffff,
-                                           proto=DpoProto.DPO_PROTO_IP6)])
+        p.route = VppIpRoute(
+            self,
+            p.remote_tun_if_host,
+            128,
+            [
+                VppRoutePath(
+                    p.tun_if.remote_ip6, 0xFFFFFFFF, proto=DpoProto.DPO_PROTO_IP6
+                )
+            ],
+        )
         p.route.add_vpp_config()
 
     def unconfig_network(self, p):
         p.route.add_vpp_config()
 
     def unconfig_network(self, p):
@@ -2903,10 +3214,8 @@ class TemplateIpsecItf6(object):
 
 
 @tag_fixme_vpp_workers
 
 
 @tag_fixme_vpp_workers
-class TestIpsecItf6(TemplateIpsec,
-                    TemplateIpsecItf6,
-                    IpsecTun6):
-    """ IPsec Interface IPv6 """
+class TestIpsecItf6(TemplateIpsec, TemplateIpsecItf6, IpsecTun6):
+    """IPsec Interface IPv6"""
 
     def setUp(self):
         super(TestIpsecItf6, self).setUp()
 
     def setUp(self):
         super(TestIpsecItf6, self).setUp()
@@ -2928,13 +3237,11 @@ class TestIpsecItf6(TemplateIpsec,
         p.tun_flags = tf.TUNNEL_API_ENCAP_DECAP_FLAG_ENCAP_COPY_HOP_LIMIT
 
         self.config_network(p)
         p.tun_flags = tf.TUNNEL_API_ENCAP_DECAP_FLAG_ENCAP_COPY_HOP_LIMIT
 
         self.config_network(p)
-        config_tun_params(p, self.encryption_type, None,
-                          self.pg0.local_ip6,
-                          self.pg0.remote_ip6)
+        config_tun_params(
+            p, self.encryption_type, None, self.pg0.local_ip6, self.pg0.remote_ip6
+        )
         self.verify_drop_tun_66(p, count=n_pkts)
         self.verify_drop_tun_66(p, count=n_pkts)
-        self.config_sa_tun(p,
-                           self.pg0.local_ip6,
-                           self.pg0.remote_ip6)
+        self.config_sa_tun(p, self.pg0.local_ip6, self.pg0.remote_ip6)
         self.config_protect(p)
 
         self.verify_tun_66(p, count=n_pkts)
         self.config_protect(p)
 
         self.verify_tun_66(p, count=n_pkts)
@@ -2946,15 +3253,15 @@ class TestIpsecItf6(TemplateIpsec,
         p.tun_if.admin_up()
         self.verify_tun_66(p, count=n_pkts)
 
         p.tun_if.admin_up()
         self.verify_tun_66(p, count=n_pkts)
 
-        self.assertEqual(p.tun_if.get_rx_stats(), 3*n_pkts)
-        self.assertEqual(p.tun_if.get_tx_stats(), 2*n_pkts)
+        self.assertEqual(p.tun_if.get_rx_stats(), 3 * n_pkts)
+        self.assertEqual(p.tun_if.get_tx_stats(), 2 * n_pkts)
 
         # it's a v4 packet when its encrypted
         self.tun6_encrypt_node_name = "esp4-encrypt-tun"
 
         self.verify_tun_46(p, count=n_pkts)
 
         # it's a v4 packet when its encrypted
         self.tun6_encrypt_node_name = "esp4-encrypt-tun"
 
         self.verify_tun_46(p, count=n_pkts)
-        self.assertEqual(p.tun_if.get_rx_stats(), 4*n_pkts)
-        self.assertEqual(p.tun_if.get_tx_stats(), 3*n_pkts)
+        self.assertEqual(p.tun_if.get_rx_stats(), 4 * n_pkts)
+        self.assertEqual(p.tun_if.get_tx_stats(), 3 * n_pkts)
 
         self.tun6_encrypt_node_name = "esp6-encrypt-tun"
 
 
         self.tun6_encrypt_node_name = "esp6-encrypt-tun"
 
@@ -2962,7 +3269,7 @@ class TestIpsecItf6(TemplateIpsec,
 
         # rekey - create new SAs and update the tunnel protection
         np = copy.copy(p)
 
         # rekey - create new SAs and update the tunnel protection
         np = copy.copy(p)
-        np.crypt_key = b'X' + p.crypt_key[1:]
+        np.crypt_key = b"X" + p.crypt_key[1:]
         np.scapy_tun_spi += 100
         np.scapy_tun_sa_id += 1
         np.vpp_tun_spi += 100
         np.scapy_tun_spi += 100
         np.scapy_tun_sa_id += 1
         np.vpp_tun_spi += 100
@@ -2971,14 +3278,12 @@ class TestIpsecItf6(TemplateIpsec,
         np.tun_if.remote_spi = p.scapy_tun_spi
         np.inner_hop_limit = 24
         np.outer_hop_limit = 128
         np.tun_if.remote_spi = p.scapy_tun_spi
         np.inner_hop_limit = 24
         np.outer_hop_limit = 128
-        np.inner_flow_label = 0xabcde
-        np.outer_flow_label = 0xabcde
+        np.inner_flow_label = 0xABCDE
+        np.outer_flow_label = 0xABCDE
         np.hop_limit = 128
         np.tun_flags = tf.TUNNEL_API_ENCAP_DECAP_FLAG_ENCAP_COPY_FLOW_LABEL
 
         np.hop_limit = 128
         np.tun_flags = tf.TUNNEL_API_ENCAP_DECAP_FLAG_ENCAP_COPY_FLOW_LABEL
 
-        self.config_sa_tun(np,
-                           self.pg0.local_ip6,
-                           self.pg0.remote_ip6)
+        self.config_sa_tun(np, self.pg0.local_ip6, self.pg0.remote_ip6)
         self.config_protect(np)
         self.unconfig_sa(p)
 
         self.config_protect(np)
         self.unconfig_sa(p)
 
@@ -3002,18 +3307,23 @@ class TestIpsecItf6(TemplateIpsec,
         p.tun_flags = tf.TUNNEL_API_ENCAP_DECAP_FLAG_ENCAP_COPY_HOP_LIMIT
 
         self.config_network(p)
         p.tun_flags = tf.TUNNEL_API_ENCAP_DECAP_FLAG_ENCAP_COPY_HOP_LIMIT
 
         self.config_network(p)
-        self.config_sa_tun(p,
-                           self.pg0.local_ip6,
-                           self.pg0.remote_ip6)
+        self.config_sa_tun(p, self.pg0.local_ip6, self.pg0.remote_ip6)
         self.config_protect(p)
 
         action_tx = PolicerAction(
         self.config_protect(p)
 
         action_tx = PolicerAction(
-            VppEnum.vl_api_sse2_qos_action_type_t.SSE2_QOS_ACTION_API_TRANSMIT,
-            0)
-        policer = VppPolicer(self, "pol1", 80, 0, 1000, 0,
-                             conform_action=action_tx,
-                             exceed_action=action_tx,
-                             violate_action=action_tx)
+            VppEnum.vl_api_sse2_qos_action_type_t.SSE2_QOS_ACTION_API_TRANSMIT, 0
+        )
+        policer = VppPolicer(
+            self,
+            "pol1",
+            80,
+            0,
+            1000,
+            0,
+            conform_action=action_tx,
+            exceed_action=action_tx,
+            violate_action=action_tx,
+        )
         policer.add_vpp_config()
 
         # Start policing on tun
         policer.add_vpp_config()
 
         # Start policing on tun
@@ -3026,9 +3336,9 @@ class TestIpsecItf6(TemplateIpsec,
         stats = policer.get_stats()
 
         # Single rate, 2 colour policer - expect conform, violate but no exceed
         stats = policer.get_stats()
 
         # Single rate, 2 colour policer - expect conform, violate but no exceed
-        self.assertGreater(stats['conform_packets'], 0)
-        self.assertEqual(stats['exceed_packets'], 0)
-        self.assertGreater(stats['violate_packets'], 0)
+        self.assertGreater(stats["conform_packets"], 0)
+        self.assertEqual(stats["exceed_packets"], 0)
+        self.assertGreater(stats["violate_packets"], 0)
 
         # Stop policing on tun
         policer.apply_vpp_config(p.tun_if.sw_if_index, Dir.RX, False)
 
         # Stop policing on tun
         policer.apply_vpp_config(p.tun_if.sw_if_index, Dir.RX, False)
@@ -3046,27 +3356,31 @@ class TestIpsecItf6(TemplateIpsec,
 
 
 class TestIpsecMIfEsp4(TemplateIpsec, IpsecTun4):
 
 
 class TestIpsecMIfEsp4(TemplateIpsec, IpsecTun4):
-    """ Ipsec P2MP ESP v4 tests """
+    """Ipsec P2MP ESP v4 tests"""
+
     tun4_encrypt_node_name = "esp4-encrypt-tun"
     tun4_decrypt_node_name = ["esp4-decrypt-tun", "esp4-decrypt-tun-post"]
     encryption_type = ESP
 
     tun4_encrypt_node_name = "esp4-encrypt-tun"
     tun4_decrypt_node_name = ["esp4-decrypt-tun", "esp4-decrypt-tun-post"]
     encryption_type = ESP
 
-    def gen_encrypt_pkts(self, p, sa, sw_intf, src, dst, count=1,
-                         payload_size=100):
-        return [Ether(src=sw_intf.remote_mac, dst=sw_intf.local_mac) /
-                sa.encrypt(IP(src=self.pg1.local_ip4,
-                              dst=self.pg1.remote_ip4) /
-                           UDP(sport=1144, dport=2233) /
-                           Raw(b'X' * payload_size))
-                for i in range(count)]
-
-    def gen_pkts(self, sw_intf, src, dst, count=1,
-                 payload_size=100):
-        return [Ether(src=sw_intf.remote_mac, dst=sw_intf.local_mac) /
-                IP(src="1.1.1.1", dst=dst) /
-                UDP(sport=1144, dport=2233) /
-                Raw(b'X' * payload_size)
-                for i in range(count)]
+    def gen_encrypt_pkts(self, p, sa, sw_intf, src, dst, count=1, payload_size=100):
+        return [
+            Ether(src=sw_intf.remote_mac, dst=sw_intf.local_mac)
+            / sa.encrypt(
+                IP(src=self.pg1.local_ip4, dst=self.pg1.remote_ip4)
+                / UDP(sport=1144, dport=2233)
+                / Raw(b"X" * payload_size)
+            )
+            for i in range(count)
+        ]
+
+    def gen_pkts(self, sw_intf, src, dst, count=1, payload_size=100):
+        return [
+            Ether(src=sw_intf.remote_mac, dst=sw_intf.local_mac)
+            / IP(src="1.1.1.1", dst=dst)
+            / UDP(sport=1144, dport=2233)
+            / Raw(b"X" * payload_size)
+            for i in range(count)
+        ]
 
     def verify_decrypted(self, p, rxs):
         for rx in rxs:
 
     def verify_decrypted(self, p, rxs):
         for rx in rxs:
@@ -3076,8 +3390,9 @@ class TestIpsecMIfEsp4(TemplateIpsec, IpsecTun4):
     def verify_encrypted(self, p, sa, rxs):
         for rx in rxs:
             try:
     def verify_encrypted(self, p, sa, rxs):
         for rx in rxs:
             try:
-                self.assertEqual(rx[IP].tos,
-                                 VppEnum.vl_api_ip_dscp_t.IP_API_DSCP_EF << 2)
+                self.assertEqual(
+                    rx[IP].tos, VppEnum.vl_api_ip_dscp_t.IP_API_DSCP_EF << 2
+                )
                 self.assertEqual(rx[IP].ttl, p.hop_limit)
                 pkt = sa.decrypt(rx[IP])
                 if not pkt.haslayer(IP):
                 self.assertEqual(rx[IP].ttl, p.hop_limit)
                 pkt = sa.decrypt(rx[IP])
                 if not pkt.haslayer(IP):
@@ -3099,9 +3414,9 @@ class TestIpsecMIfEsp4(TemplateIpsec, IpsecTun4):
         N_NHS = 16
         self.tun_if = self.pg0
         p = self.ipv4_params
         N_NHS = 16
         self.tun_if = self.pg0
         p = self.ipv4_params
-        p.tun_if = VppIpsecInterface(self,
-                                     mode=(VppEnum.vl_api_tunnel_mode_t.
-                                           TUNNEL_API_MODE_MP))
+        p.tun_if = VppIpsecInterface(
+            self, mode=(VppEnum.vl_api_tunnel_mode_t.TUNNEL_API_MODE_MP)
+        )
         p.tun_if.add_vpp_config()
         p.tun_if.admin_up()
         p.tun_if.config_ip4()
         p.tun_if.add_vpp_config()
         p.tun_if.admin_up()
         p.tun_if.config_ip4()
@@ -3111,10 +3426,7 @@ class TestIpsecMIfEsp4(TemplateIpsec, IpsecTun4):
         self.pg0.generate_remote_hosts(N_NHS)
         self.pg0.configure_ipv4_neighbors()
 
         self.pg0.generate_remote_hosts(N_NHS)
         self.pg0.configure_ipv4_neighbors()
 
-        r_all = AclRule(True,
-                        src_prefix="0.0.0.0/0",
-                        dst_prefix="0.0.0.0/0",
-                        proto=0)
+        r_all = AclRule(True, src_prefix="0.0.0.0/0", dst_prefix="0.0.0.0/0", proto=0)
         a = VppAcl(self, [r_all]).add_vpp_config()
 
         VppAclInterface(self, self.pg0.sw_if_index, [a]).add_vpp_config()
         a = VppAcl(self, [r_all]).add_vpp_config()
 
         VppAclInterface(self, self.pg0.sw_if_index, [a]).add_vpp_config()
@@ -3136,27 +3448,37 @@ class TestIpsecMIfEsp4(TemplateIpsec, IpsecTun4):
             p.scapy_tra_spi = p.scapy_tra_spi + ii
             p.vpp_tra_sa_id = p.vpp_tra_sa_id + ii
             p.vpp_tra_spi = p.vpp_tra_spi + ii
             p.scapy_tra_spi = p.scapy_tra_spi + ii
             p.vpp_tra_sa_id = p.vpp_tra_sa_id + ii
             p.vpp_tra_spi = p.vpp_tra_spi + ii
-            p.hop_limit = ii+10
+            p.hop_limit = ii + 10
             p.tun_sa_out = VppIpsecSA(
             p.tun_sa_out = VppIpsecSA(
-                self, p.scapy_tun_sa_id, p.scapy_tun_spi,
-                p.auth_algo_vpp_id, p.auth_key,
-                p.crypt_algo_vpp_id, p.crypt_key,
+                self,
+                p.scapy_tun_sa_id,
+                p.scapy_tun_spi,
+                p.auth_algo_vpp_id,
+                p.auth_key,
+                p.crypt_algo_vpp_id,
+                p.crypt_key,
                 self.vpp_esp_protocol,
                 self.pg0.local_ip4,
                 self.pg0.remote_hosts[ii].ip4,
                 dscp=VppEnum.vl_api_ip_dscp_t.IP_API_DSCP_EF,
                 self.vpp_esp_protocol,
                 self.pg0.local_ip4,
                 self.pg0.remote_hosts[ii].ip4,
                 dscp=VppEnum.vl_api_ip_dscp_t.IP_API_DSCP_EF,
-                hop_limit=p.hop_limit)
+                hop_limit=p.hop_limit,
+            )
             p.tun_sa_out.add_vpp_config()
 
             p.tun_sa_in = VppIpsecSA(
             p.tun_sa_out.add_vpp_config()
 
             p.tun_sa_in = VppIpsecSA(
-                self, p.vpp_tun_sa_id, p.vpp_tun_spi,
-                p.auth_algo_vpp_id, p.auth_key,
-                p.crypt_algo_vpp_id, p.crypt_key,
+                self,
+                p.vpp_tun_sa_id,
+                p.vpp_tun_spi,
+                p.auth_algo_vpp_id,
+                p.auth_key,
+                p.crypt_algo_vpp_id,
+                p.crypt_key,
                 self.vpp_esp_protocol,
                 self.pg0.remote_hosts[ii].ip4,
                 self.pg0.local_ip4,
                 dscp=VppEnum.vl_api_ip_dscp_t.IP_API_DSCP_EF,
                 self.vpp_esp_protocol,
                 self.pg0.remote_hosts[ii].ip4,
                 self.pg0.local_ip4,
                 dscp=VppEnum.vl_api_ip_dscp_t.IP_API_DSCP_EF,
-                hop_limit=p.hop_limit)
+                hop_limit=p.hop_limit,
+            )
             p.tun_sa_in.add_vpp_config()
 
             p.tun_protect = VppIpsecTunProtect(
             p.tun_sa_in.add_vpp_config()
 
             p.tun_protect = VppIpsecTunProtect(
@@ -3164,17 +3486,24 @@ class TestIpsecMIfEsp4(TemplateIpsec, IpsecTun4):
                 p.tun_if,
                 p.tun_sa_out,
                 [p.tun_sa_in],
                 p.tun_if,
                 p.tun_sa_out,
                 [p.tun_sa_in],
-                nh=p.tun_if.remote_hosts[ii].ip4)
+                nh=p.tun_if.remote_hosts[ii].ip4,
+            )
             p.tun_protect.add_vpp_config()
             p.tun_protect.add_vpp_config()
-            config_tun_params(p, self.encryption_type, None,
-                              self.pg0.local_ip4,
-                              self.pg0.remote_hosts[ii].ip4)
+            config_tun_params(
+                p,
+                self.encryption_type,
+                None,
+                self.pg0.local_ip4,
+                self.pg0.remote_hosts[ii].ip4,
+            )
             self.multi_params.append(p)
 
             p.via_tun_route = VppIpRoute(
             self.multi_params.append(p)
 
             p.via_tun_route = VppIpRoute(
-                self, p.remote_tun_if_host, 32,
-                [VppRoutePath(p.tun_if.remote_hosts[ii].ip4,
-                              p.tun_if.sw_if_index)]).add_vpp_config()
+                self,
+                p.remote_tun_if_host,
+                32,
+                [VppRoutePath(p.tun_if.remote_hosts[ii].ip4, p.tun_if.sw_if_index)],
+            ).add_vpp_config()
 
             p.tun_dst = self.pg0.remote_hosts[ii].ip4
 
 
             p.tun_dst = self.pg0.remote_hosts[ii].ip4
 
@@ -3205,10 +3534,8 @@ class TestIpsecMIfEsp4(TemplateIpsec, IpsecTun4):
             self.verify_tun_44(p, count=N_PKTS)
 
 
             self.verify_tun_44(p, count=N_PKTS)
 
 
-class TestIpsecItf6MPLS(TemplateIpsec,
-                        TemplateIpsecItf6,
-                        IpsecTun6):
-    """ IPsec Interface MPLSoIPv6 """
+class TestIpsecItf6MPLS(TemplateIpsec, TemplateIpsecItf6, IpsecTun6):
+    """IPsec Interface MPLSoIPv6"""
 
     tun6_encrypt_node_name = "esp-mpls-encrypt-tun"
 
 
     tun6_encrypt_node_name = "esp-mpls-encrypt-tun"
 
@@ -3220,14 +3547,17 @@ class TestIpsecItf6MPLS(TemplateIpsec,
     def tearDown(self):
         super(TestIpsecItf6MPLS, self).tearDown()
 
     def tearDown(self):
         super(TestIpsecItf6MPLS, self).tearDown()
 
-    def gen_encrypt_pkts6(self, p, sa, sw_intf, src, dst, count=1,
-                          payload_size=100):
-        return [Ether(src=sw_intf.remote_mac, dst=sw_intf.local_mac) /
-                sa.encrypt(MPLS(label=66, ttl=3) /
-                           IPv6(src=src, dst=dst) /
-                           UDP(sport=1166, dport=2233) /
-                           Raw(b'X' * payload_size))
-                for i in range(count)]
+    def gen_encrypt_pkts6(self, p, sa, sw_intf, src, dst, count=1, payload_size=100):
+        return [
+            Ether(src=sw_intf.remote_mac, dst=sw_intf.local_mac)
+            / sa.encrypt(
+                MPLS(label=66, ttl=3)
+                / IPv6(src=src, dst=dst)
+                / UDP(sport=1166, dport=2233)
+                / Raw(b"X" * payload_size)
+            )
+            for i in range(count)
+        ]
 
     def verify_encrypted6(self, p, sa, rxs):
         for rx in rxs:
 
     def verify_encrypted6(self, p, sa, rxs):
         for rx in rxs:
@@ -3258,19 +3588,23 @@ class TestIpsecItf6MPLS(TemplateIpsec,
 
         self.config_network(p)
         # deag MPLS routes from the tunnel
 
         self.config_network(p)
         # deag MPLS routes from the tunnel
-        r6 = VppMplsRoute(self, 66, 1,
-                          [VppRoutePath(
-                              self.pg1.remote_ip6,
-                              self.pg1.sw_if_index)],
-                          eos_proto=f.FIB_PATH_NH_PROTO_IP6).add_vpp_config()
-        p.route.modify([VppRoutePath(p.tun_if.remote_ip6,
-                                     p.tun_if.sw_if_index,
-                                     labels=[VppMplsLabel(66)])])
+        r6 = VppMplsRoute(
+            self,
+            66,
+            1,
+            [VppRoutePath(self.pg1.remote_ip6, self.pg1.sw_if_index)],
+            eos_proto=f.FIB_PATH_NH_PROTO_IP6,
+        ).add_vpp_config()
+        p.route.modify(
+            [
+                VppRoutePath(
+                    p.tun_if.remote_ip6, p.tun_if.sw_if_index, labels=[VppMplsLabel(66)]
+                )
+            ]
+        )
         p.tun_if.enable_mpls()
 
         p.tun_if.enable_mpls()
 
-        self.config_sa_tun(p,
-                           self.pg0.local_ip6,
-                           self.pg0.remote_ip6)
+        self.config_sa_tun(p, self.pg0.local_ip6, self.pg0.remote_ip6)
         self.config_protect(p)
 
         self.verify_tun_66(p, count=n_pkts)
         self.config_protect(p)
 
         self.verify_tun_66(p, count=n_pkts)
@@ -3282,5 +3616,5 @@ class TestIpsecItf6MPLS(TemplateIpsec,
         self.unconfig_network(p)
 
 
         self.unconfig_network(p)
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index 065e57e..fe1ea45 100644 (file)
@@ -73,12 +73,11 @@ from vpp_papi import mac_pton, VppEnum
 
 
 class TestL2fib(VppTestCase):
 
 
 class TestL2fib(VppTestCase):
-    """ L2 FIB Test Case """
+    """L2 FIB Test Case"""
 
     @classmethod
     def bd_ifs(cls, bd_id):
 
     @classmethod
     def bd_ifs(cls, bd_id):
-        return range((bd_id - 1) * cls.n_ifs_per_bd,
-                     bd_id * cls.n_ifs_per_bd - 1)
+        return range((bd_id - 1) * cls.n_ifs_per_bd, bd_id * cls.n_ifs_per_bd - 1)
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -104,7 +103,8 @@ class TestL2fib(VppTestCase):
                 ifs = cls.bd_ifs(bd_id)
                 for j in ifs:
                     cls.flows[cls.pg_interfaces[j]] = [
                 ifs = cls.bd_ifs(bd_id)
                 for j in ifs:
                     cls.flows[cls.pg_interfaces[j]] = [
-                        cls.pg_interfaces[x] for x in ifs if x != j]
+                        cls.pg_interfaces[x] for x in ifs if x != j
+                    ]
 
             # Packet sizes
             cls.pg_if_packet_sizes = [64, 512, 1518, 9018]
 
             # Packet sizes
             cls.pg_if_packet_sizes = [64, 512, 1518, 9018]
@@ -112,12 +112,12 @@ class TestL2fib(VppTestCase):
             for bd_id in n_brs:
                 # Create BD with MAC learning and unknown unicast flooding
                 # disabled and put interfaces to this BD
             for bd_id in n_brs:
                 # Create BD with MAC learning and unknown unicast flooding
                 # disabled and put interfaces to this BD
-                cls.vapi.bridge_domain_add_del(bd_id=bd_id, uu_flood=0,
-                                               learn=0)
+                cls.vapi.bridge_domain_add_del(bd_id=bd_id, uu_flood=0, learn=0)
                 ifs = [cls.pg_interfaces[i] for i in cls.bd_ifs(bd_id)]
                 for pg_if in ifs:
                     cls.vapi.sw_interface_set_l2_bridge(
                 ifs = [cls.pg_interfaces[i] for i in cls.bd_ifs(bd_id)]
                 for pg_if in ifs:
                     cls.vapi.sw_interface_set_l2_bridge(
-                        rx_sw_if_index=pg_if.sw_if_index, bd_id=bd_id)
+                        rx_sw_if_index=pg_if.sw_if_index, bd_id=bd_id
+                    )
 
             # Set up all interfaces
             for i in cls.pg_interfaces:
 
             # Set up all interfaces
             for i in cls.pg_interfaces:
@@ -141,8 +141,9 @@ class TestL2fib(VppTestCase):
         super(TestL2fib, self).tearDown()
         if not self.vpp_dead:
             for bd_id in self.n_brs:
         super(TestL2fib, self).tearDown()
         if not self.vpp_dead:
             for bd_id in self.n_brs:
-                self.logger.info(self.vapi.ppcli("show bridge-domain %s detail"
-                                                 % bd_id))
+                self.logger.info(
+                    self.vapi.ppcli("show bridge-domain %s detail" % bd_id)
+                )
 
     def show_commands_at_teardown(self):
         self.logger.info(self.vapi.ppcli("show l2fib verbose"))
 
     def show_commands_at_teardown(self):
         self.logger.info(self.vapi.ppcli("show l2fib verbose"))
@@ -160,11 +161,15 @@ class TestL2fib(VppTestCase):
         for pg_if in self.pg_interfaces:
             swif = pg_if.sw_if_index
 
         for pg_if in self.pg_interfaces:
             swif = pg_if.sw_if_index
 
-            def mac(j): return "00:00:%02x:ff:%02x:%02x" % (subnet, swif, j)
+            def mac(j):
+                return "00:00:%02x:ff:%02x:%02x" % (subnet, swif, j)
 
 
-            def ip(j): return "172.%02u.1%02x.%u" % (subnet, swif, j)
+            def ip(j):
+                return "172.%02u.1%02x.%u" % (subnet, swif, j)
+
+            def h(j):
+                return Host(mac(j), ip(j))
 
 
-            def h(j): return Host(mac(j), ip(j))
             hosts[swif] = [h(j) for j in range(n_hosts_per_if)]
         return hosts
 
             hosts[swif] = [h(j) for j in range(n_hosts_per_if)]
         return hosts
 
@@ -188,8 +193,9 @@ class TestL2fib(VppTestCase):
         ifs = [self.pg_interfaces[i] for i in self.bd_ifs(bd_id)]
         for pg_if in ifs:
             swif = pg_if.sw_if_index
         ifs = [self.pg_interfaces[i] for i in self.bd_ifs(bd_id)]
         for pg_if in ifs:
             swif = pg_if.sw_if_index
-            packets = [Ether(dst="ff:ff:ff:ff:ff:ff", src=host.mac)
-                       for host in hosts[swif]]
+            packets = [
+                Ether(dst="ff:ff:ff:ff:ff:ff", src=host.mac) for host in hosts[swif]
+            ]
             pg_if.add_stream(packets)
         self.logger.info("Sending broadcast eth frames for MAC learning")
         self.pg_start()
             pg_if.add_stream(packets)
         self.logger.info("Sending broadcast eth frames for MAC learning")
         self.pg_start()
@@ -206,8 +212,7 @@ class TestL2fib(VppTestCase):
         for pg_if in ifs:
             swif = pg_if.sw_if_index
             for host in hosts[swif]:
         for pg_if in ifs:
             swif = pg_if.sw_if_index
             for host in hosts[swif]:
-                self.vapi.l2fib_add_del(
-                    mac_pton(host.mac), bd_id, swif, static_mac=1)
+                self.vapi.l2fib_add_del(mac_pton(host.mac), bd_id, swif, static_mac=1)
 
     def delete_l2_fib_entry(self, bd_id, hosts):
         """
 
     def delete_l2_fib_entry(self, bd_id, hosts):
         """
@@ -219,8 +224,7 @@ class TestL2fib(VppTestCase):
         for pg_if in ifs:
             swif = pg_if.sw_if_index
             for host in hosts[swif]:
         for pg_if in ifs:
             swif = pg_if.sw_if_index
             for host in hosts[swif]:
-                self.vapi.l2fib_add_del(
-                    mac_pton(host.mac), bd_id, swif, is_add=0)
+                self.vapi.l2fib_add_del(mac_pton(host.mac), bd_id, swif, is_add=0)
 
     def flush_int(self, swif, learned_hosts):
         """
 
     def flush_int(self, swif, learned_hosts):
         """
@@ -278,10 +282,12 @@ class TestL2fib(VppTestCase):
                 src_host = random.choice(src_hosts)
                 pkt_info = self.create_packet_info(src_if, dst_if)
                 payload = self.info_to_payload(pkt_info)
                 src_host = random.choice(src_hosts)
                 pkt_info = self.create_packet_info(src_if, dst_if)
                 payload = self.info_to_payload(pkt_info)
-                p = (Ether(dst=dst_host.mac, src=src_host.mac) /
-                     IP(src=src_host.ip4, dst=dst_host.ip4) /
-                     UDP(sport=1234, dport=1234) /
-                     Raw(payload))
+                p = (
+                    Ether(dst=dst_host.mac, src=src_host.mac)
+                    / IP(src=src_host.ip4, dst=dst_host.ip4)
+                    / UDP(sport=1234, dport=1234)
+                    / Raw(payload)
+                )
                 pkt_info.data = p.copy()
                 size = random.choice(packet_sizes)
                 self.extend_packet(p, size)
                 pkt_info.data = p.copy()
                 size = random.choice(packet_sizes)
                 self.extend_packet(p, size)
@@ -306,11 +312,13 @@ class TestL2fib(VppTestCase):
                 udp = packet[UDP]
                 packet_index = payload_info.index
                 self.assertEqual(payload_info.dst, dst_sw_if_index)
                 udp = packet[UDP]
                 packet_index = payload_info.index
                 self.assertEqual(payload_info.dst, dst_sw_if_index)
-                self.logger.debug("Got packet on port %s: src=%u (id=%u)" %
-                                  (pg_if.name, payload_info.src, packet_index))
+                self.logger.debug(
+                    "Got packet on port %s: src=%u (id=%u)"
+                    % (pg_if.name, payload_info.src, packet_index)
+                )
                 next_info = self.get_next_packet_info_for_interface2(
                 next_info = self.get_next_packet_info_for_interface2(
-                    payload_info.src, dst_sw_if_index,
-                    last_info[payload_info.src])
+                    payload_info.src, dst_sw_if_index, last_info[payload_info.src]
+                )
                 last_info[payload_info.src] = next_info
                 self.assertTrue(next_info is not None)
                 self.assertEqual(packet_index, next_info.index)
                 last_info[payload_info.src] = next_info
                 self.assertTrue(next_info is not None)
                 self.assertEqual(packet_index, next_info.index)
@@ -325,11 +333,13 @@ class TestL2fib(VppTestCase):
                 raise
         for i in self.pg_interfaces:
             remaining_packet = self.get_next_packet_info_for_interface2(
                 raise
         for i in self.pg_interfaces:
             remaining_packet = self.get_next_packet_info_for_interface2(
-                i, dst_sw_if_index, last_info[i.sw_if_index])
+                i, dst_sw_if_index, last_info[i.sw_if_index]
+            )
             self.assertTrue(
                 remaining_packet is None,
             self.assertTrue(
                 remaining_packet is None,
-                "Port %u: Packet expected from source %u didn't arrive" %
-                (dst_sw_if_index, i.sw_if_index))
+                "Port %u: Packet expected from source %u didn't arrive"
+                % (dst_sw_if_index, i.sw_if_index),
+            )
 
     def run_verify_test(self, bd_id, src_hosts, dst_hosts):
         # Test
 
     def run_verify_test(self, bd_id, src_hosts, dst_hosts):
         # Test
@@ -338,9 +348,11 @@ class TestL2fib(VppTestCase):
         ifs = [self.pg_interfaces[i] for i in self.bd_ifs(bd_id)]
         for i in ifs:
             pkts = self.create_stream(
         ifs = [self.pg_interfaces[i] for i in self.bd_ifs(bd_id)]
         for i in ifs:
             pkts = self.create_stream(
-                i, self.pg_if_packet_sizes,
+                i,
+                self.pg_if_packet_sizes,
                 if_src_hosts=src_hosts,
                 if_src_hosts=src_hosts,
-                if_dst_hosts=dst_hosts)
+                if_dst_hosts=dst_hosts,
+            )
             if pkts:
                 i.add_stream(pkts)
 
             if pkts:
                 i.add_stream(pkts)
 
@@ -366,9 +378,11 @@ class TestL2fib(VppTestCase):
         ifs = [self.pg_interfaces[i] for i in self.bd_ifs(bd_id)]
         for i in ifs:
             pkts = self.create_stream(
         ifs = [self.pg_interfaces[i] for i in self.bd_ifs(bd_id)]
         for i in ifs:
             pkts = self.create_stream(
-                i, self.pg_if_packet_sizes,
+                i,
+                self.pg_if_packet_sizes,
                 if_src_hosts=src_hosts,
                 if_src_hosts=src_hosts,
-                if_dst_hosts=dst_hosts)
+                if_dst_hosts=dst_hosts,
+            )
             if pkts:
                 i.add_stream(pkts)
 
             if pkts:
                 i.add_stream(pkts)
 
@@ -386,16 +400,14 @@ class TestL2fib(VppTestCase):
             timeout = 0.1
 
     def test_l2_fib_program100(self):
             timeout = 0.1
 
     def test_l2_fib_program100(self):
-        """ L2 FIB - program 100 MACs
-        """
+        """L2 FIB - program 100 MACs"""
         bd_id = 1
         hosts = self.create_hosts(100, subnet=17)
         self.config_l2_fib_entries(bd_id, hosts)
         self.run_verify_test(bd_id, hosts, hosts)
 
     def test_l2_fib_program100_delete12(self):
         bd_id = 1
         hosts = self.create_hosts(100, subnet=17)
         self.config_l2_fib_entries(bd_id, hosts)
         self.run_verify_test(bd_id, hosts, hosts)
 
     def test_l2_fib_program100_delete12(self):
-        """ L2 FIB - program 100, delete 12 MACs
-        """
+        """L2 FIB - program 100, delete 12 MACs"""
         bd_id = 1
         hosts = self.create_hosts(100, subnet=17)
         self.config_l2_fib_entries(bd_id, hosts)
         bd_id = 1
         hosts = self.create_hosts(100, subnet=17)
         self.config_l2_fib_entries(bd_id, hosts)
@@ -406,8 +418,7 @@ class TestL2fib(VppTestCase):
         self.run_verify_negat_test(bd_id, hosts, del_hosts)
 
     def test_l2_fib_program100_add100(self):
         self.run_verify_negat_test(bd_id, hosts, del_hosts)
 
     def test_l2_fib_program100_add100(self):
-        """ L2 FIB - program 100, add 100 MACs
-        """
+        """L2 FIB - program 100, add 100 MACs"""
         bd_id = 1
         hosts = self.create_hosts(100, subnet=17)
         self.config_l2_fib_entries(bd_id, hosts)
         bd_id = 1
         hosts = self.create_hosts(100, subnet=17)
         self.config_l2_fib_entries(bd_id, hosts)
@@ -416,8 +427,7 @@ class TestL2fib(VppTestCase):
         self.run_verify_test(bd_id, hosts, hosts2)
 
     def test_l2_fib_program10_learn10(self):
         self.run_verify_test(bd_id, hosts, hosts2)
 
     def test_l2_fib_program10_learn10(self):
-        """ L2 FIB - program 10 MACs, learn 10
-        """
+        """L2 FIB - program 10 MACs, learn 10"""
         hosts = self.create_hosts(20, subnet=35)
         lhosts = self.split_hosts(hosts, 10)
 
         hosts = self.create_hosts(20, subnet=35)
         lhosts = self.split_hosts(hosts, 10)
 
@@ -431,8 +441,7 @@ class TestL2fib(VppTestCase):
         self.run_verify_test(bd2, lhosts, hosts)
 
     def test_l2_fib_flush_int(self):
         self.run_verify_test(bd2, lhosts, hosts)
 
     def test_l2_fib_flush_int(self):
-        """ L2 FIB - flush interface
-        """
+        """L2 FIB - flush interface"""
         hosts = self.create_hosts(20, subnet=36)
         lhosts = self.split_hosts(hosts, 10)
 
         hosts = self.create_hosts(20, subnet=36)
         lhosts = self.split_hosts(hosts, 10)
 
@@ -445,8 +454,7 @@ class TestL2fib(VppTestCase):
         self.run_verify_negat_test(bd1, hosts, flushed)
 
     def test_l2_fib_flush_bd(self):
         self.run_verify_negat_test(bd1, hosts, flushed)
 
     def test_l2_fib_flush_bd(self):
-        """ L2 FIB - flush BD
-        """
+        """L2 FIB - flush BD"""
         hosts = self.create_hosts(20, subnet=37)
         lhosts = self.split_hosts(hosts, 10)
 
         hosts = self.create_hosts(20, subnet=37)
         lhosts = self.split_hosts(hosts, 10)
 
@@ -458,8 +466,7 @@ class TestL2fib(VppTestCase):
         self.run_verify_negat_test(bd1, hosts, flushed)
 
     def test_l2_fib_flush_all(self):
         self.run_verify_negat_test(bd1, hosts, flushed)
 
     def test_l2_fib_flush_all(self):
-        """ L2 FIB - flush all
-        """
+        """L2 FIB - flush all"""
         hosts = self.create_hosts(20, subnet=38)
         lhosts = self.split_hosts(hosts, 10)
 
         hosts = self.create_hosts(20, subnet=38)
         lhosts = self.split_hosts(hosts, 10)
 
@@ -478,8 +485,7 @@ class TestL2fib(VppTestCase):
         self.run_verify_negat_test(bd2, hosts, lhosts)
 
     def test_l2_fib_mac_learn_evs(self):
         self.run_verify_negat_test(bd2, hosts, lhosts)
 
     def test_l2_fib_mac_learn_evs(self):
-        """ L2 FIB - mac learning events
-        """
+        """L2 FIB - mac learning events"""
         bd1 = 1
         hosts = self.create_hosts(10, subnet=39)
 
         bd1 = 1
         hosts = self.create_hosts(10, subnet=39)
 
@@ -491,16 +497,21 @@ class TestL2fib(VppTestCase):
         evs = self.vapi.collect_events()
         action = VppEnum.vl_api_mac_event_action_t.MAC_EVENT_ACTION_API_ADD
         learned_macs = {
         evs = self.vapi.collect_events()
         action = VppEnum.vl_api_mac_event_action_t.MAC_EVENT_ACTION_API_ADD
         learned_macs = {
-            e.mac[i].mac_addr.packed for e in evs for i in range(e.n_macs)
-            if e.mac[i].action == action}
-        macs = {h.bin_mac for swif in self.bd_ifs(bd1)
-                for h in hosts[self.pg_interfaces[swif].sw_if_index]}
+            e.mac[i].mac_addr.packed
+            for e in evs
+            for i in range(e.n_macs)
+            if e.mac[i].action == action
+        }
+        macs = {
+            h.bin_mac
+            for swif in self.bd_ifs(bd1)
+            for h in hosts[self.pg_interfaces[swif].sw_if_index]
+        }
         self.vapi.want_l2_macs_events(enable_disable=0)
         self.assertEqual(len(learned_macs ^ macs), 0)
 
     def test_l2_fib_mac_learn_evs2(self):
         self.vapi.want_l2_macs_events(enable_disable=0)
         self.assertEqual(len(learned_macs ^ macs), 0)
 
     def test_l2_fib_mac_learn_evs2(self):
-        """ L2 FIB - mac learning events using want_l2_macs_events2
-        """
+        """L2 FIB - mac learning events using want_l2_macs_events2"""
         bd1 = 1
         hosts = self.create_hosts(10, subnet=39)
 
         bd1 = 1
         hosts = self.create_hosts(10, subnet=39)
 
@@ -514,16 +525,21 @@ class TestL2fib(VppTestCase):
         evs = self.vapi.collect_events()
         action = VppEnum.vl_api_mac_event_action_t.MAC_EVENT_ACTION_API_ADD
         learned_macs = {
         evs = self.vapi.collect_events()
         action = VppEnum.vl_api_mac_event_action_t.MAC_EVENT_ACTION_API_ADD
         learned_macs = {
-            e.mac[i].mac_addr.packed for e in evs for i in range(e.n_macs)
-            if e.mac[i].action == action}
-        macs = {h.bin_mac for swif in self.bd_ifs(bd1)
-                for h in hosts[self.pg_interfaces[swif].sw_if_index]}
+            e.mac[i].mac_addr.packed
+            for e in evs
+            for i in range(e.n_macs)
+            if e.mac[i].action == action
+        }
+        macs = {
+            h.bin_mac
+            for swif in self.bd_ifs(bd1)
+            for h in hosts[self.pg_interfaces[swif].sw_if_index]
+        }
         self.vapi.want_l2_macs_events2(enable_disable=0)
         self.assertEqual(len(learned_macs ^ macs), 0)
 
     def test_l2_fib_macs_learn_max(self):
         self.vapi.want_l2_macs_events2(enable_disable=0)
         self.assertEqual(len(learned_macs ^ macs), 0)
 
     def test_l2_fib_macs_learn_max(self):
-        """ L2 FIB - mac learning max macs in event
-        """
+        """L2 FIB - mac learning max macs in event"""
         bd1 = 1
         hosts = self.create_hosts(10, subnet=40)
 
         bd1 = 1
         hosts = self.create_hosts(10, subnet=40)
 
@@ -539,18 +555,23 @@ class TestL2fib(VppTestCase):
         self.assertGreater(len(evs), 0)
         action = VppEnum.vl_api_mac_event_action_t.MAC_EVENT_ACTION_API_ADD
         learned_macs = {
         self.assertGreater(len(evs), 0)
         action = VppEnum.vl_api_mac_event_action_t.MAC_EVENT_ACTION_API_ADD
         learned_macs = {
-            e.mac[i].mac_addr.packed for e in evs for i in range(e.n_macs)
-            if e.mac[i].action == action}
-        macs = {h.bin_mac for swif in self.bd_ifs(bd1)
-                for h in hosts[self.pg_interfaces[swif].sw_if_index]}
+            e.mac[i].mac_addr.packed
+            for e in evs
+            for i in range(e.n_macs)
+            if e.mac[i].action == action
+        }
+        macs = {
+            h.bin_mac
+            for swif in self.bd_ifs(bd1)
+            for h in hosts[self.pg_interfaces[swif].sw_if_index]
+        }
 
         for e in evs:
             self.assertLess(len(e), ev_macs * 10)
         self.assertEqual(len(learned_macs ^ macs), 0)
 
     def test_l2_fib_macs_learn_max2(self):
 
         for e in evs:
             self.assertLess(len(e), ev_macs * 10)
         self.assertEqual(len(learned_macs ^ macs), 0)
 
     def test_l2_fib_macs_learn_max2(self):
-        """ L2 FIB - mac learning max macs in event using want_l2_macs_events2
-        """
+        """L2 FIB - mac learning max macs in event using want_l2_macs_events2"""
         bd1 = 1
         hosts = self.create_hosts(10, subnet=40)
 
         bd1 = 1
         hosts = self.create_hosts(10, subnet=40)
 
@@ -568,14 +589,21 @@ class TestL2fib(VppTestCase):
         self.assertGreater(len(evs), 0)
         action = VppEnum.vl_api_mac_event_action_t.MAC_EVENT_ACTION_API_ADD
         learned_macs = {
         self.assertGreater(len(evs), 0)
         action = VppEnum.vl_api_mac_event_action_t.MAC_EVENT_ACTION_API_ADD
         learned_macs = {
-            e.mac[i].mac_addr.packed for e in evs for i in range(e.n_macs)
-            if e.mac[i].action == action}
-        macs = {h.bin_mac for swif in self.bd_ifs(bd1)
-                for h in hosts[self.pg_interfaces[swif].sw_if_index]}
+            e.mac[i].mac_addr.packed
+            for e in evs
+            for i in range(e.n_macs)
+            if e.mac[i].action == action
+        }
+        macs = {
+            h.bin_mac
+            for swif in self.bd_ifs(bd1)
+            for h in hosts[self.pg_interfaces[swif].sw_if_index]
+        }
 
         for e in evs:
             self.assertLess(len(e), ev_macs * 10)
         self.assertEqual(len(learned_macs ^ macs), 0)
 
 
         for e in evs:
             self.assertLess(len(e), ev_macs * 10)
         self.assertEqual(len(learned_macs ^ macs), 0)
 
-if __name__ == '__main__':
+
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index 7f3c57a..db4af60 100644 (file)
@@ -15,7 +15,7 @@ NUM_PKTS = 67
 
 
 class TestL2Flood(VppTestCase):
 
 
 class TestL2Flood(VppTestCase):
-    """ L2-flood """
+    """L2-flood"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -52,7 +52,7 @@ class TestL2Flood(VppTestCase):
         super(TestL2Flood, self).tearDown()
 
     def test_flood(self):
         super(TestL2Flood, self).tearDown()
 
     def test_flood(self):
-        """ L2 Flood Tests """
+        """L2 Flood Tests"""
 
         #
         # Create a single bridge Domain
 
         #
         # Create a single bridge Domain
@@ -63,31 +63,35 @@ class TestL2Flood(VppTestCase):
         # add each interface to the BD. 3 interfaces per split horizon group
         #
         for i in self.pg_interfaces[0:4]:
         # add each interface to the BD. 3 interfaces per split horizon group
         #
         for i in self.pg_interfaces[0:4]:
-            self.vapi.sw_interface_set_l2_bridge(rx_sw_if_index=i.sw_if_index,
-                                                 bd_id=1, shg=0)
+            self.vapi.sw_interface_set_l2_bridge(
+                rx_sw_if_index=i.sw_if_index, bd_id=1, shg=0
+            )
         for i in self.pg_interfaces[4:8]:
         for i in self.pg_interfaces[4:8]:
-            self.vapi.sw_interface_set_l2_bridge(rx_sw_if_index=i.sw_if_index,
-                                                 bd_id=1, shg=1)
+            self.vapi.sw_interface_set_l2_bridge(
+                rx_sw_if_index=i.sw_if_index, bd_id=1, shg=1
+            )
         for i in self.pg_interfaces[8:12]:
         for i in self.pg_interfaces[8:12]:
-            self.vapi.sw_interface_set_l2_bridge(rx_sw_if_index=i.sw_if_index,
-                                                 bd_id=1, shg=2)
+            self.vapi.sw_interface_set_l2_bridge(
+                rx_sw_if_index=i.sw_if_index, bd_id=1, shg=2
+            )
         for i in self.bvi_interfaces:
         for i in self.bvi_interfaces:
-            self.vapi.sw_interface_set_l2_bridge(rx_sw_if_index=i.sw_if_index,
-                                                 bd_id=1, shg=2,
-                                                 port_type=L2_PORT_TYPE.BVI)
+            self.vapi.sw_interface_set_l2_bridge(
+                rx_sw_if_index=i.sw_if_index, bd_id=1, shg=2, port_type=L2_PORT_TYPE.BVI
+            )
 
 
-        p = (Ether(dst="ff:ff:ff:ff:ff:ff",
-                   src="00:00:de:ad:be:ef") /
-             IP(src="10.10.10.10", dst="1.1.1.1") /
-             UDP(sport=1234, dport=1234) /
-             Raw(b'\xa5' * 100))
+        p = (
+            Ether(dst="ff:ff:ff:ff:ff:ff", src="00:00:de:ad:be:ef")
+            / IP(src="10.10.10.10", dst="1.1.1.1")
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
 
         #
         # input on pg0 expect copies on pg1->11
         # this is in SHG=0 so its flooded to all, expect the pg0 since that's
         # the ingress link
         #
 
         #
         # input on pg0 expect copies on pg1->11
         # this is in SHG=0 so its flooded to all, expect the pg0 since that's
         # the ingress link
         #
-        self.pg0.add_stream(p*NUM_PKTS)
+        self.pg0.add_stream(p * NUM_PKTS)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
@@ -98,7 +102,7 @@ class TestL2Flood(VppTestCase):
         # input on pg4 (SHG=1) expect copies on pg0->3 (SHG=0)
         # and pg8->11 (SHG=2)
         #
         # input on pg4 (SHG=1) expect copies on pg0->3 (SHG=0)
         # and pg8->11 (SHG=2)
         #
-        self.pg4.add_stream(p*NUM_PKTS)
+        self.pg4.add_stream(p * NUM_PKTS)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
@@ -112,9 +116,12 @@ class TestL2Flood(VppTestCase):
         #
         # An IP route so the packet that hits the BVI is sent out of pg12
         #
         #
         # An IP route so the packet that hits the BVI is sent out of pg12
         #
-        ip_route = VppIpRoute(self, "1.1.1.1", 32,
-                              [VppRoutePath(self.pg12.remote_ip4,
-                                            self.pg12.sw_if_index)])
+        ip_route = VppIpRoute(
+            self,
+            "1.1.1.1",
+            32,
+            [VppRoutePath(self.pg12.remote_ip4, self.pg12.sw_if_index)],
+        )
         ip_route.add_vpp_config()
 
         self.logger.info(self.vapi.cli("sh bridge 1 detail"))
         ip_route.add_vpp_config()
 
         self.logger.info(self.vapi.cli("sh bridge 1 detail"))
@@ -124,7 +131,7 @@ class TestL2Flood(VppTestCase):
         # this is in SHG=0 so its flooded to all, expect the pg0 since that's
         # the ingress link
         #
         # this is in SHG=0 so its flooded to all, expect the pg0 since that's
         # the ingress link
         #
-        self.pg0.add_stream(p*NUM_PKTS)
+        self.pg0.add_stream(p * NUM_PKTS)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
@@ -135,7 +142,7 @@ class TestL2Flood(VppTestCase):
         # input on pg4 (SHG=1) expect copies on pg0->3 (SHG=0)
         # and pg8->12 (SHG=2)
         #
         # input on pg4 (SHG=1) expect copies on pg0->3 (SHG=0)
         # and pg8->12 (SHG=2)
         #
-        self.pg4.add_stream(p*NUM_PKTS)
+        self.pg4.add_stream(p * NUM_PKTS)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
@@ -150,18 +157,22 @@ class TestL2Flood(VppTestCase):
         # cleanup
         #
         for i in self.pg_interfaces[:12]:
         # cleanup
         #
         for i in self.pg_interfaces[:12]:
-            self.vapi.sw_interface_set_l2_bridge(rx_sw_if_index=i.sw_if_index,
-                                                 bd_id=1, enable=0)
+            self.vapi.sw_interface_set_l2_bridge(
+                rx_sw_if_index=i.sw_if_index, bd_id=1, enable=0
+            )
         for i in self.bvi_interfaces:
         for i in self.bvi_interfaces:
-            self.vapi.sw_interface_set_l2_bridge(rx_sw_if_index=i.sw_if_index,
-                                                 bd_id=1, shg=2,
-                                                 port_type=L2_PORT_TYPE.BVI,
-                                                 enable=0)
+            self.vapi.sw_interface_set_l2_bridge(
+                rx_sw_if_index=i.sw_if_index,
+                bd_id=1,
+                shg=2,
+                port_type=L2_PORT_TYPE.BVI,
+                enable=0,
+            )
 
         self.vapi.bridge_domain_add_del(bd_id=1, is_add=0)
 
     def test_flood_one(self):
 
         self.vapi.bridge_domain_add_del(bd_id=1, is_add=0)
 
     def test_flood_one(self):
-        """ L2 no-Flood Test """
+        """L2 no-Flood Test"""
 
         #
         # Create a single bridge Domain
 
         #
         # Create a single bridge Domain
@@ -173,30 +184,33 @@ class TestL2Flood(VppTestCase):
         # one member
         #
         for i in self.pg_interfaces[:2]:
         # one member
         #
         for i in self.pg_interfaces[:2]:
-            self.vapi.sw_interface_set_l2_bridge(rx_sw_if_index=i.sw_if_index,
-                                                 bd_id=1, shg=0)
+            self.vapi.sw_interface_set_l2_bridge(
+                rx_sw_if_index=i.sw_if_index, bd_id=1, shg=0
+            )
 
 
-        p = (Ether(dst="ff:ff:ff:ff:ff:ff",
-                   src="00:00:de:ad:be:ef") /
-             IP(src="10.10.10.10", dst="1.1.1.1") /
-             UDP(sport=1234, dport=1234) /
-             Raw(b'\xa5' * 100))
+        p = (
+            Ether(dst="ff:ff:ff:ff:ff:ff", src="00:00:de:ad:be:ef")
+            / IP(src="10.10.10.10", dst="1.1.1.1")
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
 
         #
         # input on pg0 expect copies on pg1
         #
 
         #
         # input on pg0 expect copies on pg1
         #
-        self.send_and_expect(self.pg0, p*NUM_PKTS, self.pg1)
+        self.send_and_expect(self.pg0, p * NUM_PKTS, self.pg1)
 
         #
         # cleanup
         #
         for i in self.pg_interfaces[:2]:
 
         #
         # cleanup
         #
         for i in self.pg_interfaces[:2]:
-            self.vapi.sw_interface_set_l2_bridge(rx_sw_if_index=i.sw_if_index,
-                                                 bd_id=1, enable=0)
+            self.vapi.sw_interface_set_l2_bridge(
+                rx_sw_if_index=i.sw_if_index, bd_id=1, enable=0
+            )
         self.vapi.bridge_domain_add_del(bd_id=1, is_add=0)
 
     def test_uu_fwd(self):
         self.vapi.bridge_domain_add_del(bd_id=1, is_add=0)
 
     def test_uu_fwd(self):
-        """ UU Flood """
+        """UU Flood"""
 
         #
         # Create a single bridge Domain
 
         #
         # Create a single bridge Domain
@@ -207,34 +221,37 @@ class TestL2Flood(VppTestCase):
         # add each interface to the BD. 3 interfaces per split horizon group
         #
         for i in self.pg_interfaces[0:4]:
         # add each interface to the BD. 3 interfaces per split horizon group
         #
         for i in self.pg_interfaces[0:4]:
-            self.vapi.sw_interface_set_l2_bridge(rx_sw_if_index=i.sw_if_index,
-                                                 bd_id=1, shg=0)
+            self.vapi.sw_interface_set_l2_bridge(
+                rx_sw_if_index=i.sw_if_index, bd_id=1, shg=0
+            )
 
         #
         # an unknown unicast and broadcast packets
         #
 
         #
         # an unknown unicast and broadcast packets
         #
-        p_uu = (Ether(dst="00:00:00:c1:5c:00",
-                      src="00:00:de:ad:be:ef") /
-                IP(src="10.10.10.10", dst="1.1.1.1") /
-                UDP(sport=1234, dport=1234) /
-                Raw(b'\xa5' * 100))
-        p_bm = (Ether(dst="ff:ff:ff:ff:ff:ff",
-                      src="00:00:de:ad:be:ef") /
-                IP(src="10.10.10.10", dst="1.1.1.1") /
-                UDP(sport=1234, dport=1234) /
-                Raw(b'\xa5' * 100))
+        p_uu = (
+            Ether(dst="00:00:00:c1:5c:00", src="00:00:de:ad:be:ef")
+            / IP(src="10.10.10.10", dst="1.1.1.1")
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
+        p_bm = (
+            Ether(dst="ff:ff:ff:ff:ff:ff", src="00:00:de:ad:be:ef")
+            / IP(src="10.10.10.10", dst="1.1.1.1")
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
 
         #
         # input on pg0, expected copies on pg1->4
         #
 
         #
         # input on pg0, expected copies on pg1->4
         #
-        self.pg0.add_stream(p_uu*NUM_PKTS)
+        self.pg0.add_stream(p_uu * NUM_PKTS)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
         for i in self.pg_interfaces[1:4]:
             rx0 = i.get_capture(NUM_PKTS, timeout=1)
 
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
         for i in self.pg_interfaces[1:4]:
             rx0 = i.get_capture(NUM_PKTS, timeout=1)
 
-        self.pg0.add_stream(p_bm*NUM_PKTS)
+        self.pg0.add_stream(p_bm * NUM_PKTS)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
@@ -245,13 +262,16 @@ class TestL2Flood(VppTestCase):
         # use pg8 as the uu-fwd interface
         #
         self.vapi.sw_interface_set_l2_bridge(
         # use pg8 as the uu-fwd interface
         #
         self.vapi.sw_interface_set_l2_bridge(
-            rx_sw_if_index=self.pg8.sw_if_index, bd_id=1, shg=0,
-            port_type=L2_PORT_TYPE.UU_FWD)
+            rx_sw_if_index=self.pg8.sw_if_index,
+            bd_id=1,
+            shg=0,
+            port_type=L2_PORT_TYPE.UU_FWD,
+        )
 
         #
         # expect the UU packet on the uu-fwd interface and not be flooded
         #
 
         #
         # expect the UU packet on the uu-fwd interface and not be flooded
         #
-        self.pg0.add_stream(p_uu*NUM_PKTS)
+        self.pg0.add_stream(p_uu * NUM_PKTS)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
@@ -260,7 +280,7 @@ class TestL2Flood(VppTestCase):
         for i in self.pg_interfaces[0:4]:
             i.assert_nothing_captured(remark="UU not flooded")
 
         for i in self.pg_interfaces[0:4]:
             i.assert_nothing_captured(remark="UU not flooded")
 
-        self.pg0.add_stream(p_bm*NUM_PKTS)
+        self.pg0.add_stream(p_bm * NUM_PKTS)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
@@ -271,10 +291,14 @@ class TestL2Flood(VppTestCase):
         # remove the uu-fwd interface and expect UU to be flooded again
         #
         self.vapi.sw_interface_set_l2_bridge(
         # remove the uu-fwd interface and expect UU to be flooded again
         #
         self.vapi.sw_interface_set_l2_bridge(
-            rx_sw_if_index=self.pg8.sw_if_index, bd_id=1, shg=0,
-            port_type=L2_PORT_TYPE.UU_FWD, enable=0)
-
-        self.pg0.add_stream(p_uu*NUM_PKTS)
+            rx_sw_if_index=self.pg8.sw_if_index,
+            bd_id=1,
+            shg=0,
+            port_type=L2_PORT_TYPE.UU_FWD,
+            enable=0,
+        )
+
+        self.pg0.add_stream(p_uu * NUM_PKTS)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
@@ -292,11 +316,14 @@ class TestL2Flood(VppTestCase):
         # re-add the uu-fwd interface
         #
         self.vapi.sw_interface_set_l2_bridge(
         # re-add the uu-fwd interface
         #
         self.vapi.sw_interface_set_l2_bridge(
-            rx_sw_if_index=self.pg8.sw_if_index, bd_id=1, shg=0,
-            port_type=L2_PORT_TYPE.UU_FWD)
+            rx_sw_if_index=self.pg8.sw_if_index,
+            bd_id=1,
+            shg=0,
+            port_type=L2_PORT_TYPE.UU_FWD,
+        )
         self.logger.info(self.vapi.cli("sh bridge 1 detail"))
 
         self.logger.info(self.vapi.cli("sh bridge 1 detail"))
 
-        self.pg0.add_stream(p_uu*NUM_PKTS)
+        self.pg0.add_stream(p_uu * NUM_PKTS)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
@@ -309,19 +336,24 @@ class TestL2Flood(VppTestCase):
         # remove the uu-fwd interface
         #
         self.vapi.sw_interface_set_l2_bridge(
         # remove the uu-fwd interface
         #
         self.vapi.sw_interface_set_l2_bridge(
-            rx_sw_if_index=self.pg8.sw_if_index, bd_id=1, shg=0,
-            port_type=L2_PORT_TYPE.UU_FWD, enable=0)
+            rx_sw_if_index=self.pg8.sw_if_index,
+            bd_id=1,
+            shg=0,
+            port_type=L2_PORT_TYPE.UU_FWD,
+            enable=0,
+        )
         self.send_and_assert_no_replies(self.pg0, p_uu)
 
         #
         # cleanup
         #
         for i in self.pg_interfaces[:4]:
         self.send_and_assert_no_replies(self.pg0, p_uu)
 
         #
         # cleanup
         #
         for i in self.pg_interfaces[:4]:
-            self.vapi.sw_interface_set_l2_bridge(rx_sw_if_index=i.sw_if_index,
-                                                 bd_id=1, enable=0)
+            self.vapi.sw_interface_set_l2_bridge(
+                rx_sw_if_index=i.sw_if_index, bd_id=1, enable=0
+            )
 
         self.vapi.bridge_domain_add_del(bd_id=1, is_add=0)
 
 
 
         self.vapi.bridge_domain_add_del(bd_id=1, is_add=0)
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index 5eca48c..63ed2de 100644 (file)
@@ -13,7 +13,7 @@ from vpp_sub_interface import VppDot1QSubint, VppDot1ADSubint
 
 
 class TestL2bd(VppTestCase):
 
 
 class TestL2bd(VppTestCase):
-    """ L2BD Test Case """
+    """L2BD Test Case"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -54,8 +54,14 @@ class TestL2bd(VppTestCase):
             # create 2 sub-interfaces for pg1 and pg2
             cls.sub_interfaces = [
                 VppDot1QSubint(cls, cls.pg1, cls.dot1q_tag),
             # create 2 sub-interfaces for pg1 and pg2
             cls.sub_interfaces = [
                 VppDot1QSubint(cls, cls.pg1, cls.dot1q_tag),
-                VppDot1ADSubint(cls, cls.pg2, cls.dot1ad_sub_id,
-                                cls.dot1ad_outer_tag, cls.dot1ad_inner_tag)]
+                VppDot1ADSubint(
+                    cls,
+                    cls.pg2,
+                    cls.dot1ad_sub_id,
+                    cls.dot1ad_outer_tag,
+                    cls.dot1ad_inner_tag,
+                ),
+            ]
 
             # packet flows mapping pg0 -> pg1, pg2, etc.
             cls.flows = dict()
 
             # packet flows mapping pg0 -> pg1, pg2, etc.
             cls.flows = dict()
@@ -73,10 +79,14 @@ class TestL2bd(VppTestCase):
             # Create BD with MAC learning enabled and put interfaces and
             #  sub-interfaces to this BD
             for pg_if in cls.pg_interfaces:
             # Create BD with MAC learning enabled and put interfaces and
             #  sub-interfaces to this BD
             for pg_if in cls.pg_interfaces:
-                sw_if_index = pg_if.sub_if.sw_if_index \
-                    if hasattr(pg_if, 'sub_if') else pg_if.sw_if_index
-                cls.vapi.sw_interface_set_l2_bridge(rx_sw_if_index=sw_if_index,
-                                                    bd_id=cls.bd_id)
+                sw_if_index = (
+                    pg_if.sub_if.sw_if_index
+                    if hasattr(pg_if, "sub_if")
+                    else pg_if.sw_if_index
+                )
+                cls.vapi.sw_interface_set_l2_bridge(
+                    rx_sw_if_index=sw_if_index, bd_id=cls.bd_id
+                )
 
             # setup all interfaces
             for i in cls.interfaces:
 
             # setup all interfaces
             for i in cls.interfaces:
@@ -112,8 +122,9 @@ class TestL2bd(VppTestCase):
         super(TestL2bd, self).tearDown()
         if not self.vpp_dead:
             self.logger.info(self.vapi.ppcli("show l2fib verbose"))
         super(TestL2bd, self).tearDown()
         if not self.vpp_dead:
             self.logger.info(self.vapi.ppcli("show l2fib verbose"))
-            self.logger.info(self.vapi.ppcli("show bridge-domain %s detail" %
-                                             self.bd_id))
+            self.logger.info(
+                self.vapi.ppcli("show bridge-domain %s detail" % self.bd_id)
+            )
 
     @classmethod
     def create_hosts_and_learn(cls, count):
 
     @classmethod
     def create_hosts_and_learn(cls, count):
@@ -138,10 +149,11 @@ class TestL2bd(VppTestCase):
             for j in range(start_nr, end_nr):
                 host = Host(
                     "00:00:00:ff:%02x:%02x" % (pg_if.sw_if_index, j),
             for j in range(start_nr, end_nr):
                 host = Host(
                     "00:00:00:ff:%02x:%02x" % (pg_if.sw_if_index, j),
-                    "172.17.1%02x.%u" % (pg_if.sw_if_index, j))
-                packet = (Ether(dst="ff:ff:ff:ff:ff:ff", src=host.mac))
+                    "172.17.1%02x.%u" % (pg_if.sw_if_index, j),
+                )
+                packet = Ether(dst="ff:ff:ff:ff:ff:ff", src=host.mac)
                 hosts.append(host)
                 hosts.append(host)
-                if hasattr(pg_if, 'sub_if'):
+                if hasattr(pg_if, "sub_if"):
                     packet = pg_if.sub_if.add_dot1_layer(packet)
                 packets.append(packet)
             pg_if.add_stream(packets)
                     packet = pg_if.sub_if.add_dot1_layer(packet)
                 packets.append(packet)
             pg_if.add_stream(packets)
@@ -164,12 +176,14 @@ class TestL2bd(VppTestCase):
             src_host = random.choice(self.hosts_by_pg_idx[src_if.sw_if_index])
             pkt_info = self.create_packet_info(src_if, dst_if)
             payload = self.info_to_payload(pkt_info)
             src_host = random.choice(self.hosts_by_pg_idx[src_if.sw_if_index])
             pkt_info = self.create_packet_info(src_if, dst_if)
             payload = self.info_to_payload(pkt_info)
-            p = (Ether(dst=dst_host.mac, src=src_host.mac) /
-                 IP(src=src_host.ip4, dst=dst_host.ip4) /
-                 UDP(sport=1234, dport=1234) /
-                 Raw(payload))
+            p = (
+                Ether(dst=dst_host.mac, src=src_host.mac)
+                / IP(src=src_host.ip4, dst=dst_host.ip4)
+                / UDP(sport=1234, dport=1234)
+                / Raw(payload)
+            )
             pkt_info.data = p.copy()
             pkt_info.data = p.copy()
-            if hasattr(src_if, 'sub_if'):
+            if hasattr(src_if, "sub_if"):
                 p = src_if.sub_if.add_dot1_layer(p)
             size = random.choice(packet_sizes)
             self.extend_packet(p, size)
                 p = src_if.sub_if.add_dot1_layer(p)
             size = random.choice(packet_sizes)
             self.extend_packet(p, size)
@@ -196,7 +210,7 @@ class TestL2bd(VppTestCase):
                     if ifc.sw_if_index == src_sw_if_index:
                         src_if = ifc
                         break
                     if ifc.sw_if_index == src_sw_if_index:
                         src_if = ifc
                         break
-            if hasattr(src_if, 'sub_if'):
+            if hasattr(src_if, "sub_if"):
                 # Check VLAN tags and Ethernet header
                 packet = src_if.sub_if.remove_dot1_layer(packet)
             self.assertTrue(Dot1Q not in packet)
                 # Check VLAN tags and Ethernet header
                 packet = src_if.sub_if.remove_dot1_layer(packet)
             self.assertTrue(Dot1Q not in packet)
@@ -205,11 +219,13 @@ class TestL2bd(VppTestCase):
                 udp = packet[UDP]
                 packet_index = payload_info.index
                 self.assertEqual(payload_info.dst, dst_sw_if_index)
                 udp = packet[UDP]
                 packet_index = payload_info.index
                 self.assertEqual(payload_info.dst, dst_sw_if_index)
-                self.logger.debug("Got packet on port %s: src=%u (id=%u)" %
-                                  (pg_if.name, payload_info.src, packet_index))
+                self.logger.debug(
+                    "Got packet on port %s: src=%u (id=%u)"
+                    % (pg_if.name, payload_info.src, packet_index)
+                )
                 next_info = self.get_next_packet_info_for_interface2(
                 next_info = self.get_next_packet_info_for_interface2(
-                    payload_info.src, dst_sw_if_index,
-                    last_info[payload_info.src])
+                    payload_info.src, dst_sw_if_index, last_info[payload_info.src]
+                )
                 last_info[payload_info.src] = next_info
                 self.assertTrue(next_info is not None)
                 self.assertEqual(packet_index, next_info.index)
                 last_info[payload_info.src] = next_info
                 self.assertTrue(next_info is not None)
                 self.assertEqual(packet_index, next_info.index)
@@ -224,19 +240,24 @@ class TestL2bd(VppTestCase):
                 raise
         for i in self.pg_interfaces:
             remaining_packet = self.get_next_packet_info_for_interface2(
                 raise
         for i in self.pg_interfaces:
             remaining_packet = self.get_next_packet_info_for_interface2(
-                i, dst_sw_if_index, last_info[i.sw_if_index])
+                i, dst_sw_if_index, last_info[i.sw_if_index]
+            )
             self.assertTrue(
                 remaining_packet is None,
             self.assertTrue(
                 remaining_packet is None,
-                "Port %u: Packet expected from source %u didn't arrive" %
-                (dst_sw_if_index, i.sw_if_index))
+                "Port %u: Packet expected from source %u didn't arrive"
+                % (dst_sw_if_index, i.sw_if_index),
+            )
 
     def run_l2bd_test(self, pkts_per_burst):
 
     def run_l2bd_test(self, pkts_per_burst):
-        """ L2BD MAC learning test """
+        """L2BD MAC learning test"""
 
         # Create incoming packet streams for packet-generator interfaces
         for i in self.pg_interfaces:
 
         # Create incoming packet streams for packet-generator interfaces
         for i in self.pg_interfaces:
-            packet_sizes = self.sub_if_packet_sizes if hasattr(i, 'sub_if') \
+            packet_sizes = (
+                self.sub_if_packet_sizes
+                if hasattr(i, "sub_if")
                 else self.pg_if_packet_sizes
                 else self.pg_if_packet_sizes
+            )
             pkts = self.create_stream(i, packet_sizes, pkts_per_burst)
             i.add_stream(pkts)
 
             pkts = self.create_stream(i, packet_sizes, pkts_per_burst)
             i.add_stream(pkts)
 
@@ -251,7 +272,7 @@ class TestL2bd(VppTestCase):
             self.verify_capture(i, capture)
 
     def test_l2bd_sl(self):
             self.verify_capture(i, capture)
 
     def test_l2bd_sl(self):
-        """ L2BD MAC learning single-loop test
+        """L2BD MAC learning single-loop test
 
         Test scenario:
             1.config
 
         Test scenario:
             1.config
@@ -268,22 +289,22 @@ class TestL2bd(VppTestCase):
         self.run_l2bd_test(self.sl_pkts_per_burst)
 
     def test_l2bd_dl(self):
         self.run_l2bd_test(self.sl_pkts_per_burst)
 
     def test_l2bd_dl(self):
-        """ L2BD MAC learning dual-loop test
+        """L2BD MAC learning dual-loop test
 
 
-         Test scenario:
-            1.config
-                MAC learning enabled
-                learn 100 MAC entries
-                3 interfaces: untagged, dot1q, dot1ad (dot1q used instead of
-                dot1ad in the first version)
-
-            2.sending l2 eth pkts between 3 interface
-                64B, 512B, 1518B, 9200B (ether_size)
-                burst of 257 pkts per interface
+        Test scenario:
+           1.config
+               MAC learning enabled
+               learn 100 MAC entries
+               3 interfaces: untagged, dot1q, dot1ad (dot1q used instead of
+               dot1ad in the first version)
+
+           2.sending l2 eth pkts between 3 interface
+               64B, 512B, 1518B, 9200B (ether_size)
+               burst of 257 pkts per interface
         """
 
         self.run_l2bd_test(self.dl_pkts_per_burst)
 
 
         """
 
         self.run_l2bd_test(self.dl_pkts_per_burst)
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index c64d5d4..5982039 100644 (file)
@@ -10,19 +10,38 @@ from socket import AF_INET, AF_INET6, inet_pton, inet_ntop
 from scapy.packet import Raw
 from scapy.layers.l2 import Ether, ARP
 from scapy.layers.inet import IP
 from scapy.packet import Raw
 from scapy.layers.l2 import Ether, ARP
 from scapy.layers.inet import IP
-from scapy.utils6 import in6_getnsma, in6_getnsmac, in6_ptop, in6_islladdr, \
-    in6_mactoifaceid, in6_ismaddr
-from scapy.layers.inet6 import IPv6, UDP, ICMPv6ND_NS, ICMPv6ND_RS, \
-    ICMPv6ND_RA, ICMPv6NDOptSrcLLAddr, getmacbyip6, ICMPv6MRD_Solicitation, \
-    ICMPv6NDOptMTU, ICMPv6NDOptSrcLLAddr, ICMPv6NDOptPrefixInfo, \
-    ICMPv6ND_NA, ICMPv6NDOptDstLLAddr, ICMPv6DestUnreach, icmp6types
+from scapy.utils6 import (
+    in6_getnsma,
+    in6_getnsmac,
+    in6_ptop,
+    in6_islladdr,
+    in6_mactoifaceid,
+    in6_ismaddr,
+)
+from scapy.layers.inet6 import (
+    IPv6,
+    UDP,
+    ICMPv6ND_NS,
+    ICMPv6ND_RS,
+    ICMPv6ND_RA,
+    ICMPv6NDOptSrcLLAddr,
+    getmacbyip6,
+    ICMPv6MRD_Solicitation,
+    ICMPv6NDOptMTU,
+    ICMPv6NDOptSrcLLAddr,
+    ICMPv6NDOptPrefixInfo,
+    ICMPv6ND_NA,
+    ICMPv6NDOptDstLLAddr,
+    ICMPv6DestUnreach,
+    icmp6types,
+)
 
 from framework import VppTestCase, VppTestRunner
 from util import Host, ppp
 
 
 class TestL2bdArpTerm(VppTestCase):
 
 from framework import VppTestCase, VppTestRunner
 from util import Host, ppp
 
 
 class TestL2bdArpTerm(VppTestCase):
-    """ L2BD arp termination Test Case """
+    """L2BD arp termination Test Case"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -77,11 +96,9 @@ class TestL2bdArpTerm(VppTestCase):
     def add_del_arp_term_hosts(self, entries, bd_id=1, is_add=1, is_ipv6=0):
         for e in entries:
             ip = e.ip4 if is_ipv6 == 0 else e.ip6
     def add_del_arp_term_hosts(self, entries, bd_id=1, is_add=1, is_ipv6=0):
         for e in entries:
             ip = e.ip4 if is_ipv6 == 0 else e.ip6
-            self.vapi.bd_ip_mac_add_del(is_add=is_add,
-                                        entry={
-                                            'bd_id': bd_id,
-                                            'ip': ip,
-                                            'mac': e.mac})
+            self.vapi.bd_ip_mac_add_del(
+                is_add=is_add, entry={"bd_id": bd_id, "ip": ip, "mac": e.mac}
+            )
 
     @classmethod
     def mac_list(cls, b6_range):
 
     @classmethod
     def mac_list(cls, b6_range):
@@ -89,23 +106,23 @@ class TestL2bdArpTerm(VppTestCase):
 
     @classmethod
     def ip4_host(cls, subnet, host, mac):
 
     @classmethod
     def ip4_host(cls, subnet, host, mac):
-        return Host(mac=mac,
-                    ip4="172.17.1%02u.%u" % (subnet, host))
+        return Host(mac=mac, ip4="172.17.1%02u.%u" % (subnet, host))
 
     @classmethod
     def ip4_hosts(cls, subnet, start, mac_list):
 
     @classmethod
     def ip4_hosts(cls, subnet, start, mac_list):
-        return {cls.ip4_host(subnet, start + j, mac_list[j])
-                for j in range(len(mac_list))}
+        return {
+            cls.ip4_host(subnet, start + j, mac_list[j]) for j in range(len(mac_list))
+        }
 
     @classmethod
     def ip6_host(cls, subnet, host, mac):
 
     @classmethod
     def ip6_host(cls, subnet, host, mac):
-        return Host(mac=mac,
-                    ip6="fd01:%x::%x" % (subnet, host))
+        return Host(mac=mac, ip6="fd01:%x::%x" % (subnet, host))
 
     @classmethod
     def ip6_hosts(cls, subnet, start, mac_list):
 
     @classmethod
     def ip6_hosts(cls, subnet, start, mac_list):
-        return {cls.ip6_host(subnet, start + j, mac_list[j])
-                for j in range(len(mac_list))}
+        return {
+            cls.ip6_host(subnet, start + j, mac_list[j]) for j in range(len(mac_list))
+        }
 
     @classmethod
     def bd_swifs(cls, b):
 
     @classmethod
     def bd_swifs(cls, b):
@@ -118,18 +135,17 @@ class TestL2bdArpTerm(VppTestCase):
             self.vapi.bridge_domain_add_del(bd_id=bd_id, is_add=is_add)
         for swif in self.bd_swifs(bd_id):
             swif_idx = swif.sw_if_index
             self.vapi.bridge_domain_add_del(bd_id=bd_id, is_add=is_add)
         for swif in self.bd_swifs(bd_id):
             swif_idx = swif.sw_if_index
-            self.vapi.sw_interface_set_l2_bridge(rx_sw_if_index=swif_idx,
-                                                 bd_id=bd_id, enable=is_add)
+            self.vapi.sw_interface_set_l2_bridge(
+                rx_sw_if_index=swif_idx, bd_id=bd_id, enable=is_add
+            )
         if not is_add:
             self.vapi.bridge_domain_add_del(bd_id=bd_id, is_add=is_add)
 
     @classmethod
     def arp_req(cls, src_host, host):
         if not is_add:
             self.vapi.bridge_domain_add_del(bd_id=bd_id, is_add=is_add)
 
     @classmethod
     def arp_req(cls, src_host, host):
-        return (Ether(dst="ff:ff:ff:ff:ff:ff", src=src_host.mac) /
-                ARP(op="who-has",
-                    hwsrc=src_host.bin_mac,
-                    pdst=host.ip4,
-                    psrc=src_host.ip4))
+        return Ether(dst="ff:ff:ff:ff:ff:ff", src=src_host.mac) / ARP(
+            op="who-has", hwsrc=src_host.bin_mac, pdst=host.ip4, psrc=src_host.ip4
+        )
 
     @classmethod
     def arp_reqs(cls, src_host, entries):
 
     @classmethod
     def arp_reqs(cls, src_host, entries):
@@ -167,7 +183,7 @@ class TestL2bdArpTerm(VppTestCase):
         o2 = int(ip / 65536) % 256
         o3 = int(ip / 256) % 256
         o4 = int(ip) % 256
         o2 = int(ip / 65536) % 256
         o3 = int(ip / 256) % 256
         o4 = int(ip) % 256
-        return '%s.%s.%s.%s' % (o1, o2, o3, o4)
+        return "%s.%s.%s.%s" % (o1, o2, o3, o4)
 
     def arp_event_host(self, e):
         return Host(str(e.mac), ip4=str(e.ip))
 
     def arp_event_host(self, e):
         return Host(str(e.mac), ip4=str(e.ip))
@@ -185,10 +201,12 @@ class TestL2bdArpTerm(VppTestCase):
     def ns_req(cls, src_host, host):
         nsma = in6_getnsma(inet_pton(AF_INET6, "fd10::ffff"))
         d = inet_ntop(AF_INET6, nsma)
     def ns_req(cls, src_host, host):
         nsma = in6_getnsma(inet_pton(AF_INET6, "fd10::ffff"))
         d = inet_ntop(AF_INET6, nsma)
-        return (Ether(dst="ff:ff:ff:ff:ff:ff", src=src_host.mac) /
-                IPv6(dst=d, src=src_host.ip6) /
-                ICMPv6ND_NS(tgt=host.ip6) /
-                ICMPv6NDOptSrcLLAddr(lladdr=src_host.mac))
+        return (
+            Ether(dst="ff:ff:ff:ff:ff:ff", src=src_host.mac)
+            / IPv6(dst=d, src=src_host.ip6)
+            / ICMPv6ND_NS(tgt=host.ip6)
+            / ICMPv6NDOptSrcLLAddr(lladdr=src_host.mac)
+        )
 
     @classmethod
     def ns_reqs_dst(cls, entries, dst_host):
 
     @classmethod
     def ns_reqs_dst(cls, entries, dst_host):
@@ -200,8 +218,7 @@ class TestL2bdArpTerm(VppTestCase):
 
     def na_resp_host(self, src_host, rx):
         self.assertEqual(rx[Ether].dst, src_host.mac)
 
     def na_resp_host(self, src_host, rx):
         self.assertEqual(rx[Ether].dst, src_host.mac)
-        self.assertEqual(in6_ptop(rx[IPv6].dst),
-                         in6_ptop(src_host.ip6))
+        self.assertEqual(in6_ptop(rx[IPv6].dst), in6_ptop(src_host.ip6))
 
         self.assertTrue(rx.haslayer(ICMPv6ND_NA))
         self.assertTrue(rx.haslayer(ICMPv6NDOptDstLLAddr))
 
         self.assertTrue(rx.haslayer(ICMPv6ND_NA))
         self.assertTrue(rx.haslayer(ICMPv6NDOptDstLLAddr))
@@ -236,8 +253,7 @@ class TestL2bdArpTerm(VppTestCase):
             else:
                 raise ValueError("Unknown feature used: %s" % flag)
             is_set = 1 if args[flag] else 0
             else:
                 raise ValueError("Unknown feature used: %s" % flag)
             is_set = 1 if args[flag] else 0
-            self.vapi.bridge_flags(bd_id=bd_id, is_set=is_set,
-                                   flags=feature_bitmap)
+            self.vapi.bridge_flags(bd_id=bd_id, is_set=is_set, flags=feature_bitmap)
         self.logger.info("Bridge domain ID %d updated" % bd_id)
 
     def verify_arp(self, src_host, req_hosts, resp_hosts, bd_id=1):
         self.logger.info("Bridge domain ID %d updated" % bd_id)
 
     def verify_arp(self, src_host, req_hosts, resp_hosts, bd_id=1):
@@ -269,12 +285,10 @@ class TestL2bdArpTerm(VppTestCase):
             self.assertEqual(len(resps ^ resp_hosts), 0)
 
     def test_l2bd_arp_term_01(self):
             self.assertEqual(len(resps ^ resp_hosts), 0)
 
     def test_l2bd_arp_term_01(self):
-        """ L2BD arp term - add 5 hosts, verify arp responses
-        """
+        """L2BD arp term - add 5 hosts, verify arp responses"""
         src_host = self.ip4_host(50, 50, "00:00:11:22:33:44")
         self.bd_add_del(1, is_add=1)
         src_host = self.ip4_host(50, 50, "00:00:11:22:33:44")
         self.bd_add_del(1, is_add=1)
-        self.set_bd_flags(1, arp_term=True, flood=False,
-                          uu_flood=False, learn=False)
+        self.set_bd_flags(1, arp_term=True, flood=False, uu_flood=False, learn=False)
         macs = self.mac_list(range(1, 5))
         hosts = self.ip4_hosts(4, 1, macs)
         self.add_del_arp_term_hosts(hosts, is_add=1)
         macs = self.mac_list(range(1, 5))
         hosts = self.ip4_hosts(4, 1, macs)
         self.add_del_arp_term_hosts(hosts, is_add=1)
@@ -283,8 +297,7 @@ class TestL2bdArpTerm(VppTestCase):
         type(self).hosts = hosts
 
     def test_l2bd_arp_term_02(self):
         type(self).hosts = hosts
 
     def test_l2bd_arp_term_02(self):
-        """ L2BD arp term - delete 3 hosts, verify arp responses
-        """
+        """L2BD arp term - delete 3 hosts, verify arp responses"""
         src_host = self.ip4_host(50, 50, "00:00:11:22:33:44")
         macs = self.mac_list(range(1, 3))
         deleted = self.ip4_hosts(4, 1, macs)
         src_host = self.ip4_host(50, 50, "00:00:11:22:33:44")
         macs = self.mac_list(range(1, 3))
         deleted = self.ip4_hosts(4, 1, macs)
@@ -295,12 +308,10 @@ class TestL2bdArpTerm(VppTestCase):
         self.bd_add_del(1, is_add=0)
 
     def test_l2bd_arp_term_03(self):
         self.bd_add_del(1, is_add=0)
 
     def test_l2bd_arp_term_03(self):
-        """ L2BD arp term - recreate BD1, readd 3 hosts, verify arp responses
-        """
+        """L2BD arp term - recreate BD1, readd 3 hosts, verify arp responses"""
         src_host = self.ip4_host(50, 50, "00:00:11:22:33:44")
         self.bd_add_del(1, is_add=1)
         src_host = self.ip4_host(50, 50, "00:00:11:22:33:44")
         self.bd_add_del(1, is_add=1)
-        self.set_bd_flags(1, arp_term=True, flood=False,
-                          uu_flood=False, learn=False)
+        self.set_bd_flags(1, arp_term=True, flood=False, uu_flood=False, learn=False)
         macs = self.mac_list(range(1, 3))
         readded = self.ip4_hosts(4, 1, macs)
         self.add_del_arp_term_hosts(readded, is_add=1)
         macs = self.mac_list(range(1, 3))
         readded = self.ip4_hosts(4, 1, macs)
         self.add_del_arp_term_hosts(readded, is_add=1)
@@ -308,8 +319,7 @@ class TestL2bdArpTerm(VppTestCase):
         type(self).hosts = readded
 
     def test_l2bd_arp_term_04(self):
         type(self).hosts = readded
 
     def test_l2bd_arp_term_04(self):
-        """ L2BD arp term - 2 IP4 addrs per host
-        """
+        """L2BD arp term - 2 IP4 addrs per host"""
         src_host = self.ip4_host(50, 50, "00:00:11:22:33:44")
         macs = self.mac_list(range(1, 3))
         sub5_hosts = self.ip4_hosts(5, 1, macs)
         src_host = self.ip4_host(50, 50, "00:00:11:22:33:44")
         macs = self.mac_list(range(1, 3))
         sub5_hosts = self.ip4_hosts(5, 1, macs)
@@ -320,12 +330,10 @@ class TestL2bdArpTerm(VppTestCase):
         self.bd_add_del(1, is_add=0)
 
     def test_l2bd_arp_term_05(self):
         self.bd_add_del(1, is_add=0)
 
     def test_l2bd_arp_term_05(self):
-        """ L2BD arp term - create and update 10 IP4-mac pairs
-        """
+        """L2BD arp term - create and update 10 IP4-mac pairs"""
         src_host = self.ip4_host(50, 50, "00:00:11:22:33:44")
         self.bd_add_del(1, is_add=1)
         src_host = self.ip4_host(50, 50, "00:00:11:22:33:44")
         self.bd_add_del(1, is_add=1)
-        self.set_bd_flags(1, arp_term=True, flood=False,
-                          uu_flood=False, learn=False)
+        self.set_bd_flags(1, arp_term=True, flood=False, uu_flood=False, learn=False)
         macs1 = self.mac_list(range(10, 20))
         hosts1 = self.ip4_hosts(5, 1, macs1)
         self.add_del_arp_term_hosts(hosts1, is_add=1)
         macs1 = self.mac_list(range(10, 20))
         hosts1 = self.ip4_hosts(5, 1, macs1)
         self.add_del_arp_term_hosts(hosts1, is_add=1)
@@ -337,14 +345,12 @@ class TestL2bdArpTerm(VppTestCase):
         self.bd_add_del(1, is_add=0)
 
     def test_l2bd_arp_term_06(self):
         self.bd_add_del(1, is_add=0)
 
     def test_l2bd_arp_term_06(self):
-        """ L2BD arp/ND term - hosts with both ip4/ip6
-        """
+        """L2BD arp/ND term - hosts with both ip4/ip6"""
         src_host4 = self.ip4_host(50, 50, "00:00:11:22:33:44")
         src_host6 = self.ip6_host(50, 50, "00:00:11:22:33:44")
         self.bd_add_del(1, is_add=1)
         # enable flood to make sure requests are not flooded
         src_host4 = self.ip4_host(50, 50, "00:00:11:22:33:44")
         src_host6 = self.ip6_host(50, 50, "00:00:11:22:33:44")
         self.bd_add_del(1, is_add=1)
         # enable flood to make sure requests are not flooded
-        self.set_bd_flags(1, arp_term=True, flood=True,
-                          uu_flood=False, learn=False)
+        self.set_bd_flags(1, arp_term=True, flood=True, uu_flood=False, learn=False)
         macs = self.mac_list(range(10, 20))
         hosts6 = self.ip6_hosts(5, 1, macs)
         hosts4 = self.ip4_hosts(5, 1, macs)
         macs = self.mac_list(range(10, 20))
         hosts6 = self.ip6_hosts(5, 1, macs)
         hosts4 = self.ip4_hosts(5, 1, macs)
@@ -355,12 +361,10 @@ class TestL2bdArpTerm(VppTestCase):
         self.bd_add_del(1, is_add=0)
 
     def test_l2bd_arp_term_07(self):
         self.bd_add_del(1, is_add=0)
 
     def test_l2bd_arp_term_07(self):
-        """ L2BD ND term - Add and Del hosts, verify ND replies
-        """
+        """L2BD ND term - Add and Del hosts, verify ND replies"""
         src_host6 = self.ip6_host(50, 50, "00:00:11:22:33:44")
         self.bd_add_del(1, is_add=1)
         src_host6 = self.ip6_host(50, 50, "00:00:11:22:33:44")
         self.bd_add_del(1, is_add=1)
-        self.set_bd_flags(1, arp_term=True, flood=False,
-                          uu_flood=False, learn=False)
+        self.set_bd_flags(1, arp_term=True, flood=False, uu_flood=False, learn=False)
         macs = self.mac_list(range(10, 20))
         hosts6 = self.ip6_hosts(5, 1, macs)
         self.add_del_arp_term_hosts(hosts6, is_add=1, is_ipv6=1)
         macs = self.mac_list(range(10, 20))
         hosts6 = self.ip6_hosts(5, 1, macs)
         self.add_del_arp_term_hosts(hosts6, is_add=1, is_ipv6=1)
@@ -372,12 +376,10 @@ class TestL2bdArpTerm(VppTestCase):
         self.bd_add_del(1, is_add=0)
 
     def test_l2bd_arp_term_08(self):
         self.bd_add_del(1, is_add=0)
 
     def test_l2bd_arp_term_08(self):
-        """ L2BD ND term - Add and update IP+mac, verify ND replies
-        """
+        """L2BD ND term - Add and update IP+mac, verify ND replies"""
         src_host = self.ip6_host(50, 50, "00:00:11:22:33:44")
         self.bd_add_del(1, is_add=1)
         src_host = self.ip6_host(50, 50, "00:00:11:22:33:44")
         self.bd_add_del(1, is_add=1)
-        self.set_bd_flags(1, arp_term=True, flood=False,
-                          uu_flood=False, learn=False)
+        self.set_bd_flags(1, arp_term=True, flood=False, uu_flood=False, learn=False)
         macs1 = self.mac_list(range(10, 20))
         hosts = self.ip6_hosts(5, 1, macs1)
         self.add_del_arp_term_hosts(hosts, is_add=1, is_ipv6=1)
         macs1 = self.mac_list(range(10, 20))
         hosts = self.ip6_hosts(5, 1, macs1)
         self.add_del_arp_term_hosts(hosts, is_add=1, is_ipv6=1)
@@ -389,12 +391,10 @@ class TestL2bdArpTerm(VppTestCase):
         self.bd_add_del(1, is_add=0)
 
     def test_l2bd_arp_term_09(self):
         self.bd_add_del(1, is_add=0)
 
     def test_l2bd_arp_term_09(self):
-        """ L2BD arp term - send garps, verify arp event reports
-        """
+        """L2BD arp term - send garps, verify arp event reports"""
         self.vapi.want_l2_arp_term_events(enable=1)
         self.bd_add_del(1, is_add=1)
         self.vapi.want_l2_arp_term_events(enable=1)
         self.bd_add_del(1, is_add=1)
-        self.set_bd_flags(1, arp_term=True, flood=False,
-                          uu_flood=False, learn=False)
+        self.set_bd_flags(1, arp_term=True, flood=False, uu_flood=False, learn=False)
         macs = self.mac_list(range(90, 95))
         hosts = self.ip4_hosts(5, 1, macs)
 
         macs = self.mac_list(range(90, 95))
         hosts = self.ip4_hosts(5, 1, macs)
 
@@ -403,14 +403,14 @@ class TestL2bdArpTerm(VppTestCase):
 
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
-        evs = [self.vapi.wait_for_event(1, "l2_arp_term_event")
-               for i in range(len(hosts))]
+        evs = [
+            self.vapi.wait_for_event(1, "l2_arp_term_event") for i in range(len(hosts))
+        ]
         ev_hosts = self.arp_event_hosts(evs)
         self.assertEqual(len(ev_hosts ^ hosts), 0)
 
     def test_l2bd_arp_term_10(self):
         ev_hosts = self.arp_event_hosts(evs)
         self.assertEqual(len(ev_hosts ^ hosts), 0)
 
     def test_l2bd_arp_term_10(self):
-        """ L2BD arp term - send duplicate garps, verify suppression
-        """
+        """L2BD arp term - send duplicate garps, verify suppression"""
         macs = self.mac_list(range(70, 71))
         hosts = self.ip4_hosts(6, 1, macs)
 
         macs = self.mac_list(range(70, 71))
         hosts = self.ip4_hosts(6, 1, macs)
 
@@ -421,14 +421,14 @@ class TestL2bdArpTerm(VppTestCase):
 
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
-        evs = [self.vapi.wait_for_event(1, "l2_arp_term_event")
-               for i in range(len(hosts))]
+        evs = [
+            self.vapi.wait_for_event(1, "l2_arp_term_event") for i in range(len(hosts))
+        ]
         ev_hosts = self.arp_event_hosts(evs)
         self.assertEqual(len(ev_hosts ^ hosts), 0)
 
     def test_l2bd_arp_term_11(self):
         ev_hosts = self.arp_event_hosts(evs)
         self.assertEqual(len(ev_hosts ^ hosts), 0)
 
     def test_l2bd_arp_term_11(self):
-        """ L2BD arp term - disable ip4 arp events,send garps, verify no events
-        """
+        """L2BD arp term - disable ip4 arp events,send garps, verify no events"""
         self.vapi.want_l2_arp_term_events(enable=0)
         macs = self.mac_list(range(90, 95))
         hosts = self.ip4_hosts(5, 1, macs)
         self.vapi.want_l2_arp_term_events(enable=0)
         macs = self.mac_list(range(90, 95))
         hosts = self.ip4_hosts(5, 1, macs)
@@ -443,13 +443,11 @@ class TestL2bdArpTerm(VppTestCase):
         self.bd_add_del(1, is_add=0)
 
     def test_l2bd_arp_term_12(self):
         self.bd_add_del(1, is_add=0)
 
     def test_l2bd_arp_term_12(self):
-        """ L2BD ND term - send NS packets verify reports
-        """
+        """L2BD ND term - send NS packets verify reports"""
         self.vapi.want_l2_arp_term_events(enable=1)
         dst_host = self.ip6_host(50, 50, "00:00:11:22:33:44")
         self.bd_add_del(1, is_add=1)
         self.vapi.want_l2_arp_term_events(enable=1)
         dst_host = self.ip6_host(50, 50, "00:00:11:22:33:44")
         self.bd_add_del(1, is_add=1)
-        self.set_bd_flags(1, arp_term=True, flood=False,
-                          uu_flood=False, learn=False)
+        self.set_bd_flags(1, arp_term=True, flood=False, uu_flood=False, learn=False)
         macs = self.mac_list(range(10, 15))
         hosts = self.ip6_hosts(5, 1, macs)
         reqs = self.ns_reqs_dst(hosts, dst_host)
         macs = self.mac_list(range(10, 15))
         hosts = self.ip6_hosts(5, 1, macs)
         reqs = self.ns_reqs_dst(hosts, dst_host)
@@ -457,14 +455,14 @@ class TestL2bdArpTerm(VppTestCase):
 
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
-        evs = [self.vapi.wait_for_event(2, "l2_arp_term_event")
-               for i in range(len(hosts))]
+        evs = [
+            self.vapi.wait_for_event(2, "l2_arp_term_event") for i in range(len(hosts))
+        ]
         ev_hosts = self.nd_event_hosts(evs)
         self.assertEqual(len(ev_hosts ^ hosts), 0)
 
     def test_l2bd_arp_term_13(self):
         ev_hosts = self.nd_event_hosts(evs)
         self.assertEqual(len(ev_hosts ^ hosts), 0)
 
     def test_l2bd_arp_term_13(self):
-        """ L2BD ND term - send duplicate ns, verify suppression
-        """
+        """L2BD ND term - send duplicate ns, verify suppression"""
         dst_host = self.ip6_host(50, 50, "00:00:11:22:33:44")
         macs = self.mac_list(range(16, 17))
         hosts = self.ip6_hosts(5, 1, macs)
         dst_host = self.ip6_host(50, 50, "00:00:11:22:33:44")
         macs = self.mac_list(range(16, 17))
         hosts = self.ip6_hosts(5, 1, macs)
@@ -473,14 +471,14 @@ class TestL2bdArpTerm(VppTestCase):
 
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
-        evs = [self.vapi.wait_for_event(2, "l2_arp_term_event")
-               for i in range(len(hosts))]
+        evs = [
+            self.vapi.wait_for_event(2, "l2_arp_term_event") for i in range(len(hosts))
+        ]
         ev_hosts = self.nd_event_hosts(evs)
         self.assertEqual(len(ev_hosts ^ hosts), 0)
 
     def test_l2bd_arp_term_14(self):
         ev_hosts = self.nd_event_hosts(evs)
         self.assertEqual(len(ev_hosts ^ hosts), 0)
 
     def test_l2bd_arp_term_14(self):
-        """ L2BD ND term - disable ip4 arp events,send ns, verify no events
-        """
+        """L2BD ND term - disable ip4 arp events,send ns, verify no events"""
         self.vapi.want_l2_arp_term_events(enable=0)
         dst_host = self.ip6_host(50, 50, "00:00:11:22:33:44")
         macs = self.mac_list(range(10, 15))
         self.vapi.want_l2_arp_term_events(enable=0)
         dst_host = self.ip6_host(50, 50, "00:00:11:22:33:44")
         macs = self.mac_list(range(10, 15))
@@ -495,5 +493,5 @@ class TestL2bdArpTerm(VppTestCase):
         self.bd_add_del(1, is_add=0)
 
 
         self.bd_add_del(1, is_add=0)
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index 9174059..1ae25da 100644 (file)
@@ -12,7 +12,7 @@ from util import Host, ppp
 
 
 class TestL2LearnLimit(VppTestCase):
 
 
 class TestL2LearnLimit(VppTestCase):
-    """ L2 Learn no limit Test Case """
+    """L2 Learn no limit Test Case"""
 
     @classmethod
     def setUpClass(self):
 
     @classmethod
     def setUpClass(self):
@@ -35,11 +35,15 @@ class TestL2LearnLimit(VppTestCase):
         hosts = dict()
         swif = pg_if.sw_if_index
 
         hosts = dict()
         swif = pg_if.sw_if_index
 
-        def mac(j): return "00:00:%02x:ff:%02x:%02x" % (subnet, swif, j)
+        def mac(j):
+            return "00:00:%02x:ff:%02x:%02x" % (subnet, swif, j)
 
 
-        def ip(j): return "172.%02u.1%02x.%u" % (subnet, swif, j)
+        def ip(j):
+            return "172.%02u.1%02x.%u" % (subnet, swif, j)
+
+        def h(j):
+            return Host(mac(j), ip(j))
 
 
-        def h(j): return Host(mac(j), ip(j))
         hosts[swif] = [h(j) for j in range(n_hosts_per_if)]
 
         return hosts
         hosts[swif] = [h(j) for j in range(n_hosts_per_if)]
 
         return hosts
@@ -56,15 +60,13 @@ class TestL2LearnLimit(VppTestCase):
         self.vapi.bridge_flags(bd_id=bd_id, is_set=1, flags=1)
 
         swif = pg_if.sw_if_index
         self.vapi.bridge_flags(bd_id=bd_id, is_set=1, flags=1)
 
         swif = pg_if.sw_if_index
-        packets = [Ether(dst="ff:ff:ff:ff:ff:ff", src=host.mac)
-                   for host in hosts[swif]]
+        packets = [Ether(dst="ff:ff:ff:ff:ff:ff", src=host.mac) for host in hosts[swif]]
         pg_if.add_stream(packets)
         self.logger.info("Sending broadcast eth frames for MAC learning")
         self.pg_start()
 
     def test_l2bd_learnlimit(self):
         pg_if.add_stream(packets)
         self.logger.info("Sending broadcast eth frames for MAC learning")
         self.pg_start()
 
     def test_l2bd_learnlimit(self):
-        """ L2BD test without learn Limit
-        """
+        """L2BD test without learn Limit"""
         hosts = self.create_hosts(self.pg_interfaces[0], 20, 1)
         self.learn_hosts(self.pg_interfaces[0], 1, hosts)
         lfs = self.vapi.l2_fib_table_dump(1)
         hosts = self.create_hosts(self.pg_interfaces[0], 20, 1)
         self.learn_hosts(self.pg_interfaces[0], 1, hosts)
         lfs = self.vapi.l2_fib_table_dump(1)
@@ -78,22 +80,20 @@ class TestL2LearnLimit(VppTestCase):
         self.vapi.bridge_domain_add_del(bd_id=1)
         self.vapi.bridge_domain_add_del(bd_id=2)
 
         self.vapi.bridge_domain_add_del(bd_id=1)
         self.vapi.bridge_domain_add_del(bd_id=2)
 
-        self.vapi.sw_interface_set_l2_bridge(
-            self.pg_interfaces[0].sw_if_index, bd_id=1)
-        self.vapi.sw_interface_set_l2_bridge(
-            self.pg_interfaces[1].sw_if_index, bd_id=2)
+        self.vapi.sw_interface_set_l2_bridge(self.pg_interfaces[0].sw_if_index, bd_id=1)
+        self.vapi.sw_interface_set_l2_bridge(self.pg_interfaces[1].sw_if_index, bd_id=2)
 
     def tearDown(self):
         super(TestL2LearnLimit, self).tearDown()
         self.vapi.sw_interface_set_l2_bridge(
 
     def tearDown(self):
         super(TestL2LearnLimit, self).tearDown()
         self.vapi.sw_interface_set_l2_bridge(
-            rx_sw_if_index=self.pg_interfaces[0].sw_if_index,
-            bd_id=1, enable=0)
+            rx_sw_if_index=self.pg_interfaces[0].sw_if_index, bd_id=1, enable=0
+        )
         self.vapi.sw_interface_set_l2_bridge(
         self.vapi.sw_interface_set_l2_bridge(
-            rx_sw_if_index=self.pg_interfaces[1].sw_if_index,
-            bd_id=2, enable=0)
+            rx_sw_if_index=self.pg_interfaces[1].sw_if_index, bd_id=2, enable=0
+        )
         self.vapi.bridge_domain_add_del(bd_id=1, is_add=0)
         self.vapi.bridge_domain_add_del(bd_id=2, is_add=0)
 
 
         self.vapi.bridge_domain_add_del(bd_id=1, is_add=0)
         self.vapi.bridge_domain_add_del(bd_id=2, is_add=0)
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index 63dc5d1..0578ced 100644 (file)
@@ -12,7 +12,7 @@ from util import Host, ppp
 
 
 class TestL2LearnLimitBdEnable(VppTestCase):
 
 
 class TestL2LearnLimitBdEnable(VppTestCase):
-    """ L2 Bridge Domain Learn limit Test Case """
+    """L2 Bridge Domain Learn limit Test Case"""
 
     @classmethod
     def setUpClass(self):
 
     @classmethod
     def setUpClass(self):
@@ -35,11 +35,15 @@ class TestL2LearnLimitBdEnable(VppTestCase):
         hosts = dict()
         swif = pg_if.sw_if_index
 
         hosts = dict()
         swif = pg_if.sw_if_index
 
-        def mac(j): return "00:00:%02x:ff:%02x:%02x" % (subnet, swif, j)
+        def mac(j):
+            return "00:00:%02x:ff:%02x:%02x" % (subnet, swif, j)
 
 
-        def ip(j): return "172.%02u.1%02x.%u" % (subnet, swif, j)
+        def ip(j):
+            return "172.%02u.1%02x.%u" % (subnet, swif, j)
+
+        def h(j):
+            return Host(mac(j), ip(j))
 
 
-        def h(j): return Host(mac(j), ip(j))
         hosts[swif] = [h(j) for j in range(n_hosts_per_if)]
 
         return hosts
         hosts[swif] = [h(j) for j in range(n_hosts_per_if)]
 
         return hosts
@@ -56,20 +60,17 @@ class TestL2LearnLimitBdEnable(VppTestCase):
         self.vapi.bridge_flags(bd_id=bd_id, is_set=1, flags=1)
 
         swif = pg_if.sw_if_index
         self.vapi.bridge_flags(bd_id=bd_id, is_set=1, flags=1)
 
         swif = pg_if.sw_if_index
-        packets = [Ether(dst="ff:ff:ff:ff:ff:ff", src=host.mac)
-                   for host in hosts[swif]]
+        packets = [Ether(dst="ff:ff:ff:ff:ff:ff", src=host.mac) for host in hosts[swif]]
         pg_if.add_stream(packets)
         self.logger.info("Sending broadcast eth frames for MAC learning")
         self.pg_start()
 
     def test_l2bd_learnlimit(self):
         pg_if.add_stream(packets)
         self.logger.info("Sending broadcast eth frames for MAC learning")
         self.pg_start()
 
     def test_l2bd_learnlimit(self):
-        """ L2BD test with bridge domain limit
-        """
+        """L2BD test with bridge domain limit"""
         self.vapi.want_l2_macs_events(enable_disable=1, learn_limit=1000)
         self.vapi.bridge_domain_set_default_learn_limit(4)
         self.vapi.bridge_domain_add_del(bd_id=3)
         self.vapi.want_l2_macs_events(enable_disable=1, learn_limit=1000)
         self.vapi.bridge_domain_set_default_learn_limit(4)
         self.vapi.bridge_domain_add_del(bd_id=3)
-        self.vapi.sw_interface_set_l2_bridge(
-            self.pg_interfaces[2].sw_if_index, bd_id=3)
+        self.vapi.sw_interface_set_l2_bridge(self.pg_interfaces[2].sw_if_index, bd_id=3)
 
         self.vapi.bridge_domain_set_learn_limit(2, 5)
 
 
         self.vapi.bridge_domain_set_learn_limit(2, 5)
 
@@ -92,8 +93,8 @@ class TestL2LearnLimitBdEnable(VppTestCase):
         self.assertEqual(len(lfs2), 4)
 
         self.vapi.sw_interface_set_l2_bridge(
         self.assertEqual(len(lfs2), 4)
 
         self.vapi.sw_interface_set_l2_bridge(
-            rx_sw_if_index=self.pg_interfaces[2].sw_if_index,
-            bd_id=3, enable=0)
+            rx_sw_if_index=self.pg_interfaces[2].sw_if_index, bd_id=3, enable=0
+        )
         self.vapi.bridge_domain_add_del(is_add=0, bd_id=3)
 
     def setUp(self):
         self.vapi.bridge_domain_add_del(is_add=0, bd_id=3)
 
     def setUp(self):
@@ -102,22 +103,20 @@ class TestL2LearnLimitBdEnable(VppTestCase):
         self.vapi.bridge_domain_add_del(bd_id=1)
         self.vapi.bridge_domain_add_del(bd_id=2)
 
         self.vapi.bridge_domain_add_del(bd_id=1)
         self.vapi.bridge_domain_add_del(bd_id=2)
 
-        self.vapi.sw_interface_set_l2_bridge(
-            self.pg_interfaces[0].sw_if_index, bd_id=1)
-        self.vapi.sw_interface_set_l2_bridge(
-            self.pg_interfaces[1].sw_if_index, bd_id=2)
+        self.vapi.sw_interface_set_l2_bridge(self.pg_interfaces[0].sw_if_index, bd_id=1)
+        self.vapi.sw_interface_set_l2_bridge(self.pg_interfaces[1].sw_if_index, bd_id=2)
 
     def tearDown(self):
         super(TestL2LearnLimitBdEnable, self).tearDown()
         self.vapi.sw_interface_set_l2_bridge(
 
     def tearDown(self):
         super(TestL2LearnLimitBdEnable, self).tearDown()
         self.vapi.sw_interface_set_l2_bridge(
-            rx_sw_if_index=self.pg_interfaces[0].sw_if_index,
-            bd_id=1, enable=0)
+            rx_sw_if_index=self.pg_interfaces[0].sw_if_index, bd_id=1, enable=0
+        )
         self.vapi.sw_interface_set_l2_bridge(
         self.vapi.sw_interface_set_l2_bridge(
-            rx_sw_if_index=self.pg_interfaces[1].sw_if_index,
-            bd_id=2, enable=0)
+            rx_sw_if_index=self.pg_interfaces[1].sw_if_index, bd_id=2, enable=0
+        )
         self.vapi.bridge_domain_add_del(bd_id=1, is_add=0)
         self.vapi.bridge_domain_add_del(bd_id=2, is_add=0)
 
 
         self.vapi.bridge_domain_add_del(bd_id=1, is_add=0)
         self.vapi.bridge_domain_add_del(bd_id=2, is_add=0)
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index 5fcd54c..8bb3b40 100644 (file)
@@ -12,7 +12,7 @@ from util import Host, ppp
 
 
 class TestL2LearnLimitEnable(VppTestCase):
 
 
 class TestL2LearnLimitEnable(VppTestCase):
-    """ L2 Global Learn limit Test Case """
+    """L2 Global Learn limit Test Case"""
 
     @classmethod
     def setUpClass(self):
 
     @classmethod
     def setUpClass(self):
@@ -35,11 +35,15 @@ class TestL2LearnLimitEnable(VppTestCase):
         hosts = dict()
         swif = pg_if.sw_if_index
 
         hosts = dict()
         swif = pg_if.sw_if_index
 
-        def mac(j): return "00:00:%02x:ff:%02x:%02x" % (subnet, swif, j)
+        def mac(j):
+            return "00:00:%02x:ff:%02x:%02x" % (subnet, swif, j)
 
 
-        def ip(j): return "172.%02u.1%02x.%u" % (subnet, swif, j)
+        def ip(j):
+            return "172.%02u.1%02x.%u" % (subnet, swif, j)
+
+        def h(j):
+            return Host(mac(j), ip(j))
 
 
-        def h(j): return Host(mac(j), ip(j))
         hosts[swif] = [h(j) for j in range(n_hosts_per_if)]
 
         return hosts
         hosts[swif] = [h(j) for j in range(n_hosts_per_if)]
 
         return hosts
@@ -56,15 +60,13 @@ class TestL2LearnLimitEnable(VppTestCase):
         self.vapi.bridge_flags(bd_id=bd_id, is_set=1, flags=1)
 
         swif = pg_if.sw_if_index
         self.vapi.bridge_flags(bd_id=bd_id, is_set=1, flags=1)
 
         swif = pg_if.sw_if_index
-        packets = [Ether(dst="ff:ff:ff:ff:ff:ff", src=host.mac)
-                   for host in hosts[swif]]
+        packets = [Ether(dst="ff:ff:ff:ff:ff:ff", src=host.mac) for host in hosts[swif]]
         pg_if.add_stream(packets)
         self.logger.info("Sending broadcast eth frames for MAC learning")
         self.pg_start()
 
     def test_l2bd_learnlimit01(self):
         pg_if.add_stream(packets)
         self.logger.info("Sending broadcast eth frames for MAC learning")
         self.pg_start()
 
     def test_l2bd_learnlimit01(self):
-        """ L2BD test with learn Limit
-        """
+        """L2BD test with learn Limit"""
         self.vapi.want_l2_macs_events(enable_disable=1, learn_limit=10)
         hosts = self.create_hosts(self.pg_interfaces[0], 20, 1)
         fhosts = self.create_hosts(self.pg_interfaces[1], 1, 2)
         self.vapi.want_l2_macs_events(enable_disable=1, learn_limit=10)
         hosts = self.create_hosts(self.pg_interfaces[0], 20, 1)
         fhosts = self.create_hosts(self.pg_interfaces[1], 1, 2)
@@ -90,22 +92,20 @@ class TestL2LearnLimitEnable(VppTestCase):
         self.vapi.bridge_domain_add_del(bd_id=1)
         self.vapi.bridge_domain_add_del(bd_id=2)
 
         self.vapi.bridge_domain_add_del(bd_id=1)
         self.vapi.bridge_domain_add_del(bd_id=2)
 
-        self.vapi.sw_interface_set_l2_bridge(
-            self.pg_interfaces[0].sw_if_index, bd_id=1)
-        self.vapi.sw_interface_set_l2_bridge(
-            self.pg_interfaces[1].sw_if_index, bd_id=2)
+        self.vapi.sw_interface_set_l2_bridge(self.pg_interfaces[0].sw_if_index, bd_id=1)
+        self.vapi.sw_interface_set_l2_bridge(self.pg_interfaces[1].sw_if_index, bd_id=2)
 
     def tearDown(self):
         super(TestL2LearnLimitEnable, self).tearDown()
         self.vapi.sw_interface_set_l2_bridge(
 
     def tearDown(self):
         super(TestL2LearnLimitEnable, self).tearDown()
         self.vapi.sw_interface_set_l2_bridge(
-            rx_sw_if_index=self.pg_interfaces[0].sw_if_index,
-            bd_id=1, enable=0)
+            rx_sw_if_index=self.pg_interfaces[0].sw_if_index, bd_id=1, enable=0
+        )
         self.vapi.sw_interface_set_l2_bridge(
         self.vapi.sw_interface_set_l2_bridge(
-            rx_sw_if_index=self.pg_interfaces[1].sw_if_index,
-            bd_id=2, enable=0)
+            rx_sw_if_index=self.pg_interfaces[1].sw_if_index, bd_id=2, enable=0
+        )
         self.vapi.bridge_domain_add_del(bd_id=1, is_add=0)
         self.vapi.bridge_domain_add_del(bd_id=2, is_add=0)
 
 
         self.vapi.bridge_domain_add_del(bd_id=1, is_add=0)
         self.vapi.bridge_domain_add_del(bd_id=2, is_add=0)
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index c4692d6..1266afc 100644 (file)
@@ -74,7 +74,7 @@ from util import Host, ppp
 
 
 class TestL2bdMultiInst(VppTestCase):
 
 
 class TestL2bdMultiInst(VppTestCase):
-    """ L2BD Multi-instance Test Case """
+    """L2BD Multi-instance Test Case"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -98,9 +98,9 @@ class TestL2bdMultiInst(VppTestCase):
                 bd_ifs = cls.bd_if_range(b + 1)
                 for j in bd_ifs:
                     cls.flows[cls.pg_interfaces[j]] = [
                 bd_ifs = cls.bd_if_range(b + 1)
                 for j in bd_ifs:
                     cls.flows[cls.pg_interfaces[j]] = [
-                        cls.pg_interfaces[x] for x in bd_ifs if x != j]
-                    assert(
-                        len(cls.flows[cls.pg_interfaces[j]]) == ifs_per_bd - 1)
+                        cls.pg_interfaces[x] for x in bd_ifs if x != j
+                    ]
+                    assert len(cls.flows[cls.pg_interfaces[j]]) == ifs_per_bd - 1
 
             # Mapping between packet-generator index and lists of test hosts
             cls.hosts_by_pg_idx = dict()
 
             # Mapping between packet-generator index and lists of test hosts
             cls.hosts_by_pg_idx = dict()
@@ -158,12 +158,16 @@ class TestL2bdMultiInst(VppTestCase):
                                  addresses for.
         """
         c = hosts_per_if
                                  addresses for.
         """
         c = hosts_per_if
-        assert(not cls.hosts_by_pg_idx)
+        assert not cls.hosts_by_pg_idx
         for i in range(len(cls.pg_interfaces)):
             pg_idx = cls.pg_interfaces[i].sw_if_index
         for i in range(len(cls.pg_interfaces)):
             pg_idx = cls.pg_interfaces[i].sw_if_index
-            cls.hosts_by_pg_idx[pg_idx] = [Host(
-                "00:00:00:ff:%02x:%02x" % (pg_idx, j + 1),
-                "172.17.1%02u.%u" % (pg_idx, j + 1)) for j in range(c)]
+            cls.hosts_by_pg_idx[pg_idx] = [
+                Host(
+                    "00:00:00:ff:%02x:%02x" % (pg_idx, j + 1),
+                    "172.17.1%02u.%u" % (pg_idx, j + 1),
+                )
+                for j in range(c)
+            ]
 
     @classmethod
     def bd_if_range(cls, b):
 
     @classmethod
     def bd_if_range(cls, b):
@@ -191,13 +195,16 @@ class TestL2bdMultiInst(VppTestCase):
             for j in self.bd_if_range(b):
                 pg_if = self.pg_interfaces[j]
                 self.vapi.sw_interface_set_l2_bridge(
             for j in self.bd_if_range(b):
                 pg_if = self.pg_interfaces[j]
                 self.vapi.sw_interface_set_l2_bridge(
-                    rx_sw_if_index=pg_if.sw_if_index, bd_id=b)
-                self.logger.info("pg-interface %s added to bridge domain ID %d"
-                                 % (pg_if.name, b))
+                    rx_sw_if_index=pg_if.sw_if_index, bd_id=b
+                )
+                self.logger.info(
+                    "pg-interface %s added to bridge domain ID %d" % (pg_if.name, b)
+                )
                 self.pg_in_bd.append(pg_if)
                 hosts = self.hosts_by_pg_idx[pg_if.sw_if_index]
                 self.pg_in_bd.append(pg_if)
                 hosts = self.hosts_by_pg_idx[pg_if.sw_if_index]
-                packets = [Ether(dst="ff:ff:ff:ff:ff:ff", src=host.mac)
-                           for host in hosts]
+                packets = [
+                    Ether(dst="ff:ff:ff:ff:ff:ff", src=host.mac) for host in hosts
+                ]
                 pg_if.add_stream(packets)
         self.logger.info("Sending broadcast eth frames for MAC learning")
         self.pg_start()
                 pg_if.add_stream(packets)
         self.logger.info("Sending broadcast eth frames for MAC learning")
         self.pg_start()
@@ -216,7 +223,8 @@ class TestL2bdMultiInst(VppTestCase):
             for j in self.bd_if_range(b):
                 pg_if = self.pg_interfaces[j]
                 self.vapi.sw_interface_set_l2_bridge(
             for j in self.bd_if_range(b):
                 pg_if = self.pg_interfaces[j]
                 self.vapi.sw_interface_set_l2_bridge(
-                    rx_sw_if_index=pg_if.sw_if_index, bd_id=b, enable=0)
+                    rx_sw_if_index=pg_if.sw_if_index, bd_id=b, enable=0
+                )
                 self.pg_in_bd.remove(pg_if)
             self.vapi.bridge_domain_add_del(bd_id=b, is_add=0)
             self.bd_list.remove(b)
                 self.pg_in_bd.remove(pg_if)
             self.vapi.bridge_domain_add_del(bd_id=b, is_add=0)
             self.bd_list.remove(b)
@@ -240,16 +248,20 @@ class TestL2bdMultiInst(VppTestCase):
                 pkt_info = self.create_packet_info(src_if, dst_if)
                 payload = self.info_to_payload(pkt_info)
                 src_host = random.choice(src_hosts)
                 pkt_info = self.create_packet_info(src_if, dst_if)
                 payload = self.info_to_payload(pkt_info)
                 src_host = random.choice(src_hosts)
-                p = (Ether(dst=dst_host.mac, src=src_host.mac) /
-                     IP(src=src_host.ip4, dst=dst_host.ip4) /
-                     UDP(sport=1234, dport=1234) /
-                     Raw(payload))
+                p = (
+                    Ether(dst=dst_host.mac, src=src_host.mac)
+                    / IP(src=src_host.ip4, dst=dst_host.ip4)
+                    / UDP(sport=1234, dport=1234)
+                    / Raw(payload)
+                )
                 pkt_info.data = p.copy()
                 size = random.choice(packet_sizes)
                 self.extend_packet(p, size)
                 pkts.append(p)
                 pkt_info.data = p.copy()
                 size = random.choice(packet_sizes)
                 self.extend_packet(p, size)
                 pkts.append(p)
-        self.logger.debug("Input stream created for port %s. Length: %u pkt(s)"
-                          % (src_if.name, len(pkts)))
+        self.logger.debug(
+            "Input stream created for port %s. Length: %u pkt(s)"
+            % (src_if.name, len(pkts))
+        )
         return pkts
 
     def verify_capture(self, dst_if):
         return pkts
 
     def verify_capture(self, dst_if):
@@ -268,10 +280,13 @@ class TestL2bdMultiInst(VppTestCase):
                 udp = packet[UDP]
                 info = self.payload_to_info(packet[Raw])
                 self.assertEqual(info.dst, dst)
                 udp = packet[UDP]
                 info = self.payload_to_info(packet[Raw])
                 self.assertEqual(info.dst, dst)
-                self.logger.debug("Got packet on port %s: src=%u (id=%u)" %
-                                  (dst_if.name, info.src, info.index))
+                self.logger.debug(
+                    "Got packet on port %s: src=%u (id=%u)"
+                    % (dst_if.name, info.src, info.index)
+                )
                 last_info[info.src] = self.get_next_packet_info_for_interface2(
                 last_info[info.src] = self.get_next_packet_info_for_interface2(
-                    info.src, dst, last_info[info.src])
+                    info.src, dst, last_info[info.src]
+                )
                 pkt_info = last_info[info.src]
                 self.assertTrue(pkt_info is not None)
                 self.assertEqual(info.index, pkt_info.index)
                 pkt_info = last_info[info.src]
                 self.assertTrue(pkt_info is not None)
                 self.assertEqual(info.index, pkt_info.index)
@@ -288,10 +303,13 @@ class TestL2bdMultiInst(VppTestCase):
         remaining = 0
         for src in self.flows[dst_if]:
             remaining_packet = self.get_next_packet_info_for_interface2(
         remaining = 0
         for src in self.flows[dst_if]:
             remaining_packet = self.get_next_packet_info_for_interface2(
-                src.sw_if_index, dst, last_info[src.sw_if_index])
+                src.sw_if_index, dst, last_info[src.sw_if_index]
+            )
             if remaining_packet is None:
             if remaining_packet is None:
-                s += "Port %u: Packet expected from source %u didn't arrive\n"\
-                     % (dst, src.sw_if_index)
+                s += "Port %u: Packet expected from source %u didn't arrive\n" % (
+                    dst,
+                    src.sw_if_index,
+                )
                 remaining += 1
             self.assertNotEqual(0, remaining, s)
 
                 remaining += 1
             self.assertNotEqual(0, remaining, s)
 
@@ -319,8 +337,7 @@ class TestL2bdMultiInst(VppTestCase):
             else:
                 raise ValueError("Unknown feature used: %s" % flag)
             is_set = 1 if args[flag] else 0
             else:
                 raise ValueError("Unknown feature used: %s" % flag)
             is_set = 1 if args[flag] else 0
-            self.vapi.bridge_flags(bd_id=bd_id, is_set=is_set,
-                                   flags=feature_bitmap)
+            self.vapi.bridge_flags(bd_id=bd_id, is_set=is_set, flags=feature_bitmap)
         self.logger.info("Bridge domain ID %d updated" % bd_id)
 
     def verify_bd(self, bd_id, **args):
         self.logger.info("Bridge domain ID %d updated" % bd_id)
 
     def verify_bd(self, bd_id, **args):
@@ -376,7 +393,7 @@ class TestL2bdMultiInst(VppTestCase):
         # Test
         # Create incoming packet streams for packet-generator interfaces
         # for pg_if in self.pg_interfaces:
         # Test
         # Create incoming packet streams for packet-generator interfaces
         # for pg_if in self.pg_interfaces:
-        assert(len(self._packet_count_for_dst_if_idx) == 0)
+        assert len(self._packet_count_for_dst_if_idx) == 0
         for pg_if in self.pg_in_bd:
             pkts = self.create_stream(pg_if)
             pg_if.add_stream(pkts)
         for pg_if in self.pg_in_bd:
             pkts = self.create_stream(pg_if)
             pg_if.add_stream(pkts)
@@ -391,8 +408,7 @@ class TestL2bdMultiInst(VppTestCase):
             self.verify_capture(pg_if)
 
     def test_l2bd_inst_01(self):
             self.verify_capture(pg_if)
 
     def test_l2bd_inst_01(self):
-        """ L2BD Multi-instance test 1 - create 5 BDs
-        """
+        """L2BD Multi-instance test 1 - create 5 BDs"""
         # Config 1
         # Create 5 BDs, put interfaces to these BDs and send MAC learning
         # packets
         # Config 1
         # Create 5 BDs, put interfaces to these BDs and send MAC learning
         # packets
@@ -408,13 +424,13 @@ class TestL2bdMultiInst(VppTestCase):
         self.delete_bd(5)
 
     def test_l2bd_inst_02(self):
         self.delete_bd(5)
 
     def test_l2bd_inst_02(self):
-        """ L2BD Multi-instance test 2 - update data of 5 BDs
-        """
+        """L2BD Multi-instance test 2 - update data of 5 BDs"""
         # Config 2
         # Update data of 5 BDs (disable learn, forward, flood, uu-flood)
         self.create_bd_and_mac_learn(5)
         # Config 2
         # Update data of 5 BDs (disable learn, forward, flood, uu-flood)
         self.create_bd_and_mac_learn(5)
-        self.set_bd_flags(self.bd_list[0], learn=False, forward=False,
-                          flood=False, uu_flood=False)
+        self.set_bd_flags(
+            self.bd_list[0], learn=False, forward=False, flood=False, uu_flood=False
+        )
         self.set_bd_flags(self.bd_list[1], forward=False)
         self.set_bd_flags(self.bd_list[2], flood=False)
         self.set_bd_flags(self.bd_list[3], uu_flood=False)
         self.set_bd_flags(self.bd_list[1], forward=False)
         self.set_bd_flags(self.bd_list[2], flood=False)
         self.set_bd_flags(self.bd_list[3], uu_flood=False)
@@ -423,21 +439,25 @@ class TestL2bdMultiInst(VppTestCase):
         # Verify 2
         # Skipping check of uu_flood as it is not returned by
         # bridge_domain_dump api command
         # Verify 2
         # Skipping check of uu_flood as it is not returned by
         # bridge_domain_dump api command
-        self.verify_bd(self.bd_list[0], learn=False, forward=False,
-                       flood=False, uu_flood=False)
-        self.verify_bd(self.bd_list[1], learn=True, forward=False,
-                       flood=True, uu_flood=True)
-        self.verify_bd(self.bd_list[2], learn=True, forward=True,
-                       flood=False, uu_flood=True)
-        self.verify_bd(self.bd_list[3], learn=True, forward=True,
-                       flood=True, uu_flood=False)
-        self.verify_bd(self.bd_list[4], learn=False, forward=True,
-                       flood=True, uu_flood=True)
+        self.verify_bd(
+            self.bd_list[0], learn=False, forward=False, flood=False, uu_flood=False
+        )
+        self.verify_bd(
+            self.bd_list[1], learn=True, forward=False, flood=True, uu_flood=True
+        )
+        self.verify_bd(
+            self.bd_list[2], learn=True, forward=True, flood=False, uu_flood=True
+        )
+        self.verify_bd(
+            self.bd_list[3], learn=True, forward=True, flood=True, uu_flood=False
+        )
+        self.verify_bd(
+            self.bd_list[4], learn=False, forward=True, flood=True, uu_flood=True
+        )
         self.delete_bd(5)
 
     def test_l2bd_inst_03(self):
         self.delete_bd(5)
 
     def test_l2bd_inst_03(self):
-        """ L2BD Multi-instance test 3 - delete 2 BDs
-        """
+        """L2BD Multi-instance test 3 - delete 2 BDs"""
         # Config 3
         # Delete 2 BDs
         self.create_bd_and_mac_learn(5)
         # Config 3
         # Delete 2 BDs
         self.create_bd_and_mac_learn(5)
@@ -454,8 +474,7 @@ class TestL2bdMultiInst(VppTestCase):
         self.delete_bd(3, 3)
 
     def test_l2bd_inst_04(self):
         self.delete_bd(3, 3)
 
     def test_l2bd_inst_04(self):
-        """ L2BD Multi-instance test 4 - add 2 BDs
-        """
+        """L2BD Multi-instance test 4 - add 2 BDs"""
         # Config 4
         # Create 5 BDs, put interfaces to these BDs and send MAC learning
         # packets
         # Config 4
         # Create 5 BDs, put interfaces to these BDs and send MAC learning
         # packets
@@ -471,8 +490,7 @@ class TestL2bdMultiInst(VppTestCase):
         self.delete_bd(2)
 
     def test_l2bd_inst_05(self):
         self.delete_bd(2)
 
     def test_l2bd_inst_05(self):
-        """ L2BD Multi-instance test 5 - delete 5 BDs
-        """
+        """L2BD Multi-instance test 5 - delete 5 BDs"""
         # Config 5
         # Delete 5 BDs
         self.create_bd_and_mac_learn(5)
         # Config 5
         # Delete 5 BDs
         self.create_bd_and_mac_learn(5)
@@ -485,5 +503,5 @@ class TestL2bdMultiInst(VppTestCase):
             self.assertEqual(self.verify_bd(bd_id), 1)
 
 
             self.assertEqual(self.verify_bd(bd_id), 1)
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index 5a66523..13fa02e 100644 (file)
@@ -11,7 +11,7 @@ from framework import VppTestCase
 
 @tag_fixme_vpp_workers
 class TestL2tp(VppTestCase):
 
 @tag_fixme_vpp_workers
 class TestL2tp(VppTestCase):
-    """ L2TP Test Case """
+    """L2TP Test Case"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -22,28 +22,32 @@ class TestL2tp(VppTestCase):
         cls.pg0.config_ip6()
 
     def test_l2tp_decap_local(self):
         cls.pg0.config_ip6()
 
     def test_l2tp_decap_local(self):
-        """ L2TP don't accept packets unless configured """
+        """L2TP don't accept packets unless configured"""
 
 
-        pkt = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-               IPv6(src=self.pg0.remote_ip6, dst=self.pg0.local_ip6, nh=115))
+        pkt = Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) / IPv6(
+            src=self.pg0.remote_ip6, dst=self.pg0.local_ip6, nh=115
+        )
 
         self.pg0.add_stream(pkt)
         self.pg_start()
 
         # l2tp should not accept packets
         err = self.statistics.get_counter(
 
         self.pg0.add_stream(pkt)
         self.pg_start()
 
         # l2tp should not accept packets
         err = self.statistics.get_counter(
-            '/err/l2tp-decap-local/l2tpv3 session not found')[0]
+            "/err/l2tp-decap-local/l2tpv3 session not found"
+        )[0]
         self.assertEqual(err, 0)
         err_count = err
 
         self.assertEqual(err, 0)
         err_count = err
 
-        self.vapi.l2tpv3_create_tunnel(client_address=self.pg0.local_ip6,
-                                       our_address=self.pg0.remote_ip6)
+        self.vapi.l2tpv3_create_tunnel(
+            client_address=self.pg0.local_ip6, our_address=self.pg0.remote_ip6
+        )
 
         self.pg0.add_stream(pkt)
         self.pg_start()
 
         # l2tp accepts packets
         err = self.statistics.get_counter(
 
         self.pg0.add_stream(pkt)
         self.pg_start()
 
         # l2tp accepts packets
         err = self.statistics.get_counter(
-            '/err/l2tp-decap-local/l2tpv3 session not found')[0]
+            "/err/l2tp-decap-local/l2tpv3 session not found"
+        )[0]
         self.assertEqual(err, 1)
         err_count = err
         self.assertEqual(err, 1)
         err_count = err
index bc653f0..eba349a 100644 (file)
@@ -12,7 +12,7 @@ from util import Host, ppp
 
 
 class TestL2xc(VppTestCase):
 
 
 class TestL2xc(VppTestCase):
-    """ L2XC Test Case """
+    """L2XC Test Case"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -52,15 +52,19 @@ class TestL2xc(VppTestCase):
 
             # Create bi-directional cross-connects between pg0 and pg1
             cls.vapi.sw_interface_set_l2_xconnect(
 
             # Create bi-directional cross-connects between pg0 and pg1
             cls.vapi.sw_interface_set_l2_xconnect(
-                cls.pg0.sw_if_index, cls.pg1.sw_if_index, enable=1)
+                cls.pg0.sw_if_index, cls.pg1.sw_if_index, enable=1
+            )
             cls.vapi.sw_interface_set_l2_xconnect(
             cls.vapi.sw_interface_set_l2_xconnect(
-                cls.pg1.sw_if_index, cls.pg0.sw_if_index, enable=1)
+                cls.pg1.sw_if_index, cls.pg0.sw_if_index, enable=1
+            )
 
             # Create bi-directional cross-connects between pg2 and pg3
             cls.vapi.sw_interface_set_l2_xconnect(
 
             # Create bi-directional cross-connects between pg2 and pg3
             cls.vapi.sw_interface_set_l2_xconnect(
-                cls.pg2.sw_if_index, cls.pg3.sw_if_index, enable=1)
+                cls.pg2.sw_if_index, cls.pg3.sw_if_index, enable=1
+            )
             cls.vapi.sw_interface_set_l2_xconnect(
             cls.vapi.sw_interface_set_l2_xconnect(
-                cls.pg3.sw_if_index, cls.pg2.sw_if_index, enable=1)
+                cls.pg3.sw_if_index, cls.pg2.sw_if_index, enable=1
+            )
 
             # mapping between packet-generator index and lists of test hosts
             cls.hosts_by_pg_idx = dict()
 
             # mapping between packet-generator index and lists of test hosts
             cls.hosts_by_pg_idx = dict()
@@ -108,7 +112,8 @@ class TestL2xc(VppTestCase):
             for j in range(0, count):
                 host = Host(
                     "00:00:00:ff:%02x:%02x" % (pg_if.sw_if_index, j),
             for j in range(0, count):
                 host = Host(
                     "00:00:00:ff:%02x:%02x" % (pg_if.sw_if_index, j),
-                    "172.17.1%02x.%u" % (pg_if.sw_if_index, j))
+                    "172.17.1%02x.%u" % (pg_if.sw_if_index, j),
+                )
                 hosts.append(host)
 
     def create_stream(self, src_if, packet_sizes, packets_per_burst):
                 hosts.append(host)
 
     def create_stream(self, src_if, packet_sizes, packets_per_burst):
@@ -127,10 +132,12 @@ class TestL2xc(VppTestCase):
             src_host = random.choice(self.hosts_by_pg_idx[src_if.sw_if_index])
             pkt_info = self.create_packet_info(src_if, dst_if)
             payload = self.info_to_payload(pkt_info)
             src_host = random.choice(self.hosts_by_pg_idx[src_if.sw_if_index])
             pkt_info = self.create_packet_info(src_if, dst_if)
             payload = self.info_to_payload(pkt_info)
-            p = (Ether(dst=dst_host.mac, src=src_host.mac) /
-                 IP(src=src_host.ip4, dst=dst_host.ip4) /
-                 UDP(sport=1234, dport=1234) /
-                 Raw(payload))
+            p = (
+                Ether(dst=dst_host.mac, src=src_host.mac)
+                / IP(src=src_host.ip4, dst=dst_host.ip4)
+                / UDP(sport=1234, dport=1234)
+                / Raw(payload)
+            )
             pkt_info.data = p.copy()
             size = random.choice(packet_sizes)
             self.extend_packet(p, size)
             pkt_info.data = p.copy()
             size = random.choice(packet_sizes)
             self.extend_packet(p, size)
@@ -155,11 +162,13 @@ class TestL2xc(VppTestCase):
                 payload_info = self.payload_to_info(packet[Raw])
                 packet_index = payload_info.index
                 self.assertEqual(payload_info.dst, dst_sw_if_index)
                 payload_info = self.payload_to_info(packet[Raw])
                 packet_index = payload_info.index
                 self.assertEqual(payload_info.dst, dst_sw_if_index)
-                self.logger.debug("Got packet on port %s: src=%u (id=%u)" %
-                                  (pg_if.name, payload_info.src, packet_index))
+                self.logger.debug(
+                    "Got packet on port %s: src=%u (id=%u)"
+                    % (pg_if.name, payload_info.src, packet_index)
+                )
                 next_info = self.get_next_packet_info_for_interface2(
                 next_info = self.get_next_packet_info_for_interface2(
-                    payload_info.src, dst_sw_if_index,
-                    last_info[payload_info.src])
+                    payload_info.src, dst_sw_if_index, last_info[payload_info.src]
+                )
                 last_info[payload_info.src] = next_info
                 self.assertTrue(next_info is not None)
                 self.assertEqual(packet_index, next_info.index)
                 last_info[payload_info.src] = next_info
                 self.assertTrue(next_info is not None)
                 self.assertEqual(packet_index, next_info.index)
@@ -174,18 +183,20 @@ class TestL2xc(VppTestCase):
                 raise
         for i in self.interfaces:
             remaining_packet = self.get_next_packet_info_for_interface2(
                 raise
         for i in self.interfaces:
             remaining_packet = self.get_next_packet_info_for_interface2(
-                i, dst_sw_if_index, last_info[i.sw_if_index])
-            self.assertTrue(remaining_packet is None,
-                            "Port %u: Packet expected from source %u didn't"
-                            " arrive" % (dst_sw_if_index, i.sw_if_index))
+                i, dst_sw_if_index, last_info[i.sw_if_index]
+            )
+            self.assertTrue(
+                remaining_packet is None,
+                "Port %u: Packet expected from source %u didn't"
+                " arrive" % (dst_sw_if_index, i.sw_if_index),
+            )
 
     def run_l2xc_test(self, pkts_per_burst):
 
     def run_l2xc_test(self, pkts_per_burst):
-        """ L2XC test """
+        """L2XC test"""
 
         # Create incoming packet streams for packet-generator interfaces
         for i in self.interfaces:
 
         # Create incoming packet streams for packet-generator interfaces
         for i in self.interfaces:
-            pkts = self.create_stream(i, self.pg_if_packet_sizes,
-                                      pkts_per_burst)
+            pkts = self.create_stream(i, self.pg_if_packet_sizes, pkts_per_burst)
             i.add_stream(pkts)
 
         # Enable packet capturing and start packet sending
             i.add_stream(pkts)
 
         # Enable packet capturing and start packet sending
@@ -199,7 +210,7 @@ class TestL2xc(VppTestCase):
             self.verify_capture(i, capture)
 
     def test_l2xc_sl(self):
             self.verify_capture(i, capture)
 
     def test_l2xc_sl(self):
-        """ L2XC single-loop test
+        """L2XC single-loop test
 
         Test scenario:
             1. config
 
         Test scenario:
             1. config
@@ -213,7 +224,7 @@ class TestL2xc(VppTestCase):
         self.run_l2xc_test(self.sl_pkts_per_burst)
 
     def test_l2xc_dl(self):
         self.run_l2xc_test(self.sl_pkts_per_burst)
 
     def test_l2xc_dl(self):
-        """ L2XC dual-loop test
+        """L2XC dual-loop test
 
         Test scenario:
             1. config
 
         Test scenario:
             1. config
@@ -227,5 +238,5 @@ class TestL2xc(VppTestCase):
         self.run_l2xc_test(self.dl_pkts_per_burst)
 
 
         self.run_l2xc_test(self.dl_pkts_per_burst)
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index 2a6e41c..8019516 100644 (file)
@@ -63,7 +63,7 @@ from util import Host, ppp
 
 
 class TestL2xcMultiInst(VppTestCase):
 
 
 class TestL2xcMultiInst(VppTestCase):
-    """ L2XC Multi-instance Test Case """
+    """L2XC Multi-instance Test Case"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -82,8 +82,7 @@ class TestL2xcMultiInst(VppTestCase):
             cls.flows = dict()
             for i in range(len(cls.pg_interfaces)):
                 delta = 1 if i % 2 == 0 else -1
             cls.flows = dict()
             for i in range(len(cls.pg_interfaces)):
                 delta = 1 if i % 2 == 0 else -1
-                cls.flows[cls.pg_interfaces[i]] =\
-                    [cls.pg_interfaces[i + delta]]
+                cls.flows[cls.pg_interfaces[i]] = [cls.pg_interfaces[i + delta]]
 
             # Mapping between packet-generator index and lists of test hosts
             cls.hosts_by_pg_idx = dict()
 
             # Mapping between packet-generator index and lists of test hosts
             cls.hosts_by_pg_idx = dict()
@@ -151,7 +150,8 @@ class TestL2xcMultiInst(VppTestCase):
             for j in range(start_nr, end_nr):
                 host = Host(
                     "00:00:00:ff:%02x:%02x" % (pg_if.sw_if_index, j),
             for j in range(start_nr, end_nr):
                 host = Host(
                     "00:00:00:ff:%02x:%02x" % (pg_if.sw_if_index, j),
-                    "172.17.1%02u.%u" % (pg_if.sw_if_index, j))
+                    "172.17.1%02u.%u" % (pg_if.sw_if_index, j),
+                )
                 hosts.append(host)
 
     def create_xconnects(self, count, start=0):
                 hosts.append(host)
 
     def create_xconnects(self, count, start=0):
@@ -167,10 +167,12 @@ class TestL2xcMultiInst(VppTestCase):
             rx_if = self.pg_interfaces[i + start]
             delta = 1 if i % 2 == 0 else -1
             tx_if = self.pg_interfaces[i + start + delta]
             rx_if = self.pg_interfaces[i + start]
             delta = 1 if i % 2 == 0 else -1
             tx_if = self.pg_interfaces[i + start + delta]
-            self.vapi.sw_interface_set_l2_xconnect(rx_if.sw_if_index,
-                                                   tx_if.sw_if_index, 1)
-            self.logger.info("Cross-connect from %s to %s created"
-                             % (tx_if.name, rx_if.name))
+            self.vapi.sw_interface_set_l2_xconnect(
+                rx_if.sw_if_index, tx_if.sw_if_index, 1
+            )
+            self.logger.info(
+                "Cross-connect from %s to %s created" % (tx_if.name, rx_if.name)
+            )
             if self.pg_in_xc.count(rx_if) == 0:
                 self.pg_in_xc.append(rx_if)
             if self.pg_not_in_xc.count(rx_if) == 1:
             if self.pg_in_xc.count(rx_if) == 0:
                 self.pg_in_xc.append(rx_if)
             if self.pg_not_in_xc.count(rx_if) == 1:
@@ -189,10 +191,12 @@ class TestL2xcMultiInst(VppTestCase):
             rx_if = self.pg_interfaces[i + start]
             delta = 1 if i % 2 == 0 else -1
             tx_if = self.pg_interfaces[i + start + delta]
             rx_if = self.pg_interfaces[i + start]
             delta = 1 if i % 2 == 0 else -1
             tx_if = self.pg_interfaces[i + start + delta]
-            self.vapi.sw_interface_set_l2_xconnect(rx_if.sw_if_index,
-                                                   tx_if.sw_if_index, 0)
-            self.logger.info("Cross-connect from %s to %s deleted"
-                             % (tx_if.name, rx_if.name))
+            self.vapi.sw_interface_set_l2_xconnect(
+                rx_if.sw_if_index, tx_if.sw_if_index, 0
+            )
+            self.logger.info(
+                "Cross-connect from %s to %s deleted" % (tx_if.name, rx_if.name)
+            )
             if self.pg_not_in_xc.count(rx_if) == 0:
                 self.pg_not_in_xc.append(rx_if)
             if self.pg_in_xc.count(rx_if) == 1:
             if self.pg_not_in_xc.count(rx_if) == 0:
                 self.pg_not_in_xc.append(rx_if)
             if self.pg_in_xc.count(rx_if) == 1:
@@ -216,16 +220,20 @@ class TestL2xcMultiInst(VppTestCase):
                 src_host = random.choice(src_hosts)
                 pkt_info = self.create_packet_info(src_if, dst_if)
                 payload = self.info_to_payload(pkt_info)
                 src_host = random.choice(src_hosts)
                 pkt_info = self.create_packet_info(src_if, dst_if)
                 payload = self.info_to_payload(pkt_info)
-                p = (Ether(dst=dst_host.mac, src=src_host.mac) /
-                     IP(src=src_host.ip4, dst=dst_host.ip4) /
-                     UDP(sport=1234, dport=1234) /
-                     Raw(payload))
+                p = (
+                    Ether(dst=dst_host.mac, src=src_host.mac)
+                    / IP(src=src_host.ip4, dst=dst_host.ip4)
+                    / UDP(sport=1234, dport=1234)
+                    / Raw(payload)
+                )
                 pkt_info.data = p.copy()
                 size = random.choice(packet_sizes)
                 self.extend_packet(p, size)
                 pkts.append(p)
                 pkt_info.data = p.copy()
                 size = random.choice(packet_sizes)
                 self.extend_packet(p, size)
                 pkts.append(p)
-        self.logger.debug("Input stream created for port %s. Length: %u pkt(s)"
-                          % (src_if.name, len(pkts)))
+        self.logger.debug(
+            "Input stream created for port %s. Length: %u pkt(s)"
+            % (src_if.name, len(pkts))
+        )
         return pkts
 
     def verify_capture(self, pg_if, capture):
         return pkts
 
     def verify_capture(self, pg_if, capture):
@@ -246,11 +254,13 @@ class TestL2xcMultiInst(VppTestCase):
                 udp = packet[UDP]
                 packet_index = payload_info.index
                 self.assertEqual(payload_info.dst, dst_sw_if_index)
                 udp = packet[UDP]
                 packet_index = payload_info.index
                 self.assertEqual(payload_info.dst, dst_sw_if_index)
-                self.logger.debug("Got packet on port %s: src=%u (id=%u)" %
-                                  (pg_if.name, payload_info.src, packet_index))
+                self.logger.debug(
+                    "Got packet on port %s: src=%u (id=%u)"
+                    % (pg_if.name, payload_info.src, packet_index)
+                )
                 next_info = self.get_next_packet_info_for_interface2(
                 next_info = self.get_next_packet_info_for_interface2(
-                    payload_info.src, dst_sw_if_index,
-                    last_info[payload_info.src])
+                    payload_info.src, dst_sw_if_index, last_info[payload_info.src]
+                )
                 last_info[payload_info.src] = next_info
                 self.assertTrue(next_info is not None)
                 self.assertEqual(packet_index, next_info.index)
                 last_info[payload_info.src] = next_info
                 self.assertTrue(next_info is not None)
                 self.assertEqual(packet_index, next_info.index)
@@ -265,11 +275,13 @@ class TestL2xcMultiInst(VppTestCase):
                 raise
         for i in self.pg_interfaces:
             remaining_packet = self.get_next_packet_info_for_interface2(
                 raise
         for i in self.pg_interfaces:
             remaining_packet = self.get_next_packet_info_for_interface2(
-                i, dst_sw_if_index, last_info[i.sw_if_index])
+                i, dst_sw_if_index, last_info[i.sw_if_index]
+            )
             self.assertTrue(
                 remaining_packet is None,
             self.assertTrue(
                 remaining_packet is None,
-                "Port %u: Packet expected from source %u didn't arrive" %
-                (dst_sw_if_index, i.sw_if_index))
+                "Port %u: Packet expected from source %u didn't arrive"
+                % (dst_sw_if_index, i.sw_if_index),
+            )
 
     def run_verify_test(self):
         """
 
     def run_verify_test(self):
         """
@@ -299,18 +311,17 @@ class TestL2xcMultiInst(VppTestCase):
         # Verify outgoing packet streams per packet-generator interface
         for pg_if in self.pg_interfaces:
             if pg_if in self.pg_in_xc:
         # Verify outgoing packet streams per packet-generator interface
         for pg_if in self.pg_interfaces:
             if pg_if in self.pg_in_xc:
-                capture = pg_if.get_capture(
-                    remark="interface is a cross-connect sink")
+                capture = pg_if.get_capture(remark="interface is a cross-connect sink")
                 self.verify_capture(pg_if, capture)
             elif pg_if in self.pg_not_in_xc:
                 pg_if.assert_nothing_captured(
                 self.verify_capture(pg_if, capture)
             elif pg_if in self.pg_not_in_xc:
                 pg_if.assert_nothing_captured(
-                    remark="interface is not a cross-connect sink")
+                    remark="interface is not a cross-connect sink"
+                )
             else:
                 raise Exception("Unexpected interface: %s" % pg_if.name)
 
     def test_l2xc_inst_01(self):
             else:
                 raise Exception("Unexpected interface: %s" % pg_if.name)
 
     def test_l2xc_inst_01(self):
-        """ L2XC Multi-instance test 1 - create 10 cross-connects
-        """
+        """L2XC Multi-instance test 1 - create 10 cross-connects"""
         # Config 1
         # Create 10 cross-connects
         self.create_xconnects(10)
         # Config 1
         # Create 10 cross-connects
         self.create_xconnects(10)
@@ -319,8 +330,7 @@ class TestL2xcMultiInst(VppTestCase):
         self.run_verify_test()
 
     def test_l2xc_inst_02(self):
         self.run_verify_test()
 
     def test_l2xc_inst_02(self):
-        """ L2XC Multi-instance test 2 - delete 4 cross-connects
-        """
+        """L2XC Multi-instance test 2 - delete 4 cross-connects"""
         # Config 2
         # Delete 4 cross-connects
         self.delete_xconnects(4)
         # Config 2
         # Delete 4 cross-connects
         self.delete_xconnects(4)
@@ -329,8 +339,7 @@ class TestL2xcMultiInst(VppTestCase):
         self.run_verify_test()
 
     def test_l2xc_inst_03(self):
         self.run_verify_test()
 
     def test_l2xc_inst_03(self):
-        """ L2BD Multi-instance 3 - add new 4 cross-connects
-        """
+        """L2BD Multi-instance 3 - add new 4 cross-connects"""
         # Config 3
         # Add new 4 cross-connects
         self.create_xconnects(4, start=10)
         # Config 3
         # Add new 4 cross-connects
         self.create_xconnects(4, start=10)
@@ -339,8 +348,7 @@ class TestL2xcMultiInst(VppTestCase):
         self.run_verify_test()
 
     def test_l2xc_inst_04(self):
         self.run_verify_test()
 
     def test_l2xc_inst_04(self):
-        """ L2XC Multi-instance test 4 - delete 10 cross-connects
-        """
+        """L2XC Multi-instance test 4 - delete 10 cross-connects"""
         # Config 4
         # Delete 10 cross-connects
         self.delete_xconnects(10, start=4)
         # Config 4
         # Delete 10 cross-connects
         self.delete_xconnects(10, start=4)
@@ -349,5 +357,5 @@ class TestL2xcMultiInst(VppTestCase):
         self.run_verify_test()
 
 
         self.run_verify_test()
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index 2bcb6d5..66eb242 100644 (file)
@@ -28,8 +28,7 @@ def find_l3xc(test, sw_if_index, dump_sw_if_index=None):
 
 
 class VppL3xc(VppObject):
 
 
 class VppL3xc(VppObject):
-
-    def __init__(self,  test, intf, paths, is_ip6=False):
+    def __init__(self, test, intf, paths, is_ip6=False):
         self._test = test
         self.intf = intf
         self.is_ip6 = is_ip6
         self._test = test
         self.intf = intf
         self.is_ip6 = is_ip6
@@ -41,27 +40,26 @@ class VppL3xc(VppObject):
     def add_vpp_config(self):
         self._test.vapi.l3xc_update(
             l3xc={
     def add_vpp_config(self):
         self._test.vapi.l3xc_update(
             l3xc={
-                'is_ip6': self.is_ip6,
-                'sw_if_index': self.intf.sw_if_index,
-                'n_paths': len(self.paths),
-                'paths': self.encoded_paths
-            })
+                "is_ip6": self.is_ip6,
+                "sw_if_index": self.intf.sw_if_index,
+                "n_paths": len(self.paths),
+                "paths": self.encoded_paths,
+            }
+        )
         self._test.registry.register(self, self._test.logger)
 
     def remove_vpp_config(self):
         self._test.registry.register(self, self._test.logger)
 
     def remove_vpp_config(self):
-        self._test.vapi.l3xc_del(
-            is_ip6=self.is_ip6,
-            sw_if_index=self.intf.sw_if_index)
+        self._test.vapi.l3xc_del(is_ip6=self.is_ip6, sw_if_index=self.intf.sw_if_index)
 
     def query_vpp_config(self):
         return find_l3xc(self._test, self.intf.sw_if_index)
 
     def object_id(self):
 
     def query_vpp_config(self):
         return find_l3xc(self._test, self.intf.sw_if_index)
 
     def object_id(self):
-        return ("l3xc-%d" % self.intf.sw_if_index)
+        return "l3xc-%d" % self.intf.sw_if_index
 
 
 class TestL3xc(VppTestCase):
 
 
 class TestL3xc(VppTestCase):
-    """ L3XC Test Case """
+    """L3XC Test Case"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -91,25 +89,27 @@ class TestL3xc(VppTestCase):
         super(TestL3xc, self).tearDown()
 
     def test_l3xc4(self):
         super(TestL3xc, self).tearDown()
 
     def test_l3xc4(self):
-        """ IPv4 X-Connect """
+        """IPv4 X-Connect"""
 
         #
         # x-connect pg0 to pg1 and pg2 to pg3->5
         #
 
         #
         # x-connect pg0 to pg1 and pg2 to pg3->5
         #
-        l3xc_1 = VppL3xc(self, self.pg0,
-                         [VppRoutePath(self.pg1.remote_ip4,
-                                       self.pg1.sw_if_index)])
+        l3xc_1 = VppL3xc(
+            self, self.pg0, [VppRoutePath(self.pg1.remote_ip4, self.pg1.sw_if_index)]
+        )
         l3xc_1.add_vpp_config()
         l3xc_1.add_vpp_config()
-        l3xc_2 = VppL3xc(self, self.pg2,
-                         [VppRoutePath(self.pg3.remote_ip4,
-                                       self.pg3.sw_if_index),
-                          VppRoutePath(self.pg4.remote_ip4,
-                                       self.pg4.sw_if_index),
-                          VppRoutePath(self.pg5.remote_ip4,
-                                       self.pg5.sw_if_index)])
+        l3xc_2 = VppL3xc(
+            self,
+            self.pg2,
+            [
+                VppRoutePath(self.pg3.remote_ip4, self.pg3.sw_if_index),
+                VppRoutePath(self.pg4.remote_ip4, self.pg4.sw_if_index),
+                VppRoutePath(self.pg5.remote_ip4, self.pg5.sw_if_index),
+            ],
+        )
         l3xc_2.add_vpp_config()
 
         l3xc_2.add_vpp_config()
 
-        self.assertTrue(find_l3xc(self, self.pg2.sw_if_index, 0xffffffff))
+        self.assertTrue(find_l3xc(self, self.pg2.sw_if_index, 0xFFFFFFFF))
 
         self.logger.info(self.vapi.cli("sh l3xc"))
 
 
         self.logger.info(self.vapi.cli("sh l3xc"))
 
@@ -117,26 +117,29 @@ class TestL3xc(VppTestCase):
         # fire in packets. If it's forwarded then the L3XC was successful,
         # since default routing will drop it
         #
         # fire in packets. If it's forwarded then the L3XC was successful,
         # since default routing will drop it
         #
-        p_1 = (Ether(src=self.pg0.remote_mac,
-                     dst=self.pg0.local_mac) /
-               IP(src="1.1.1.1", dst="1.1.1.2") /
-               UDP(sport=1234, dport=1234) /
-               Raw(b'\xa5' * 100))
+        p_1 = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src="1.1.1.1", dst="1.1.1.2")
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
         # self.send_and_expect(self.pg0, p_1*NUM_PKTS, self.pg1)
 
         p_2 = []
         for ii in range(NUM_PKTS):
         # self.send_and_expect(self.pg0, p_1*NUM_PKTS, self.pg1)
 
         p_2 = []
         for ii in range(NUM_PKTS):
-            p_2.append(Ether(src=self.pg0.remote_mac,
-                             dst=self.pg0.local_mac) /
-                       IP(src="1.1.1.1", dst="1.1.1.2") /
-                       UDP(sport=1000 + ii, dport=1234) /
-                       Raw(b'\xa5' * 100))
-        self.send_and_expect_load_balancing(self.pg2, p_2,
-                                            [self.pg3, self.pg4, self.pg5])
+            p_2.append(
+                Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+                / IP(src="1.1.1.1", dst="1.1.1.2")
+                / UDP(sport=1000 + ii, dport=1234)
+                / Raw(b"\xa5" * 100)
+            )
+        self.send_and_expect_load_balancing(
+            self.pg2, p_2, [self.pg3, self.pg4, self.pg5]
+        )
 
         l3xc_2.remove_vpp_config()
         self.send_and_assert_no_replies(self.pg2, p_2)
 
 
 
         l3xc_2.remove_vpp_config()
         self.send_and_assert_no_replies(self.pg2, p_2)
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index b5f2dae..016e8de 100644 (file)
@@ -12,20 +12,18 @@ from vpp_bond_interface import VppBondInterface
 from vpp_papi import VppEnum, MACAddress
 
 bond_mac = "02:02:02:02:02:02"
 from vpp_papi import VppEnum, MACAddress
 
 bond_mac = "02:02:02:02:02:02"
-lacp_dst_mac = '01:80:c2:00:00:02'
+lacp_dst_mac = "01:80:c2:00:00:02"
 LACP_COLLECTION_AND_DISTRIBUTION_STATE = 63
 
 
 class TestMarker(VppTestCase):
 LACP_COLLECTION_AND_DISTRIBUTION_STATE = 63
 
 
 class TestMarker(VppTestCase):
-    """LACP Marker Protocol Test Case
-
-    """
+    """LACP Marker Protocol Test Case"""
 
     @classmethod
     def setUpClass(cls):
         super().setUpClass()
         # Test variables
 
     @classmethod
     def setUpClass(cls):
         super().setUpClass()
         # Test variables
-        cls.pkts_per_burst = 257    # Number of packets per burst
+        cls.pkts_per_burst = 257  # Number of packets per burst
         # create 3 pg interfaces
         cls.create_pg_interfaces(range(1))
 
         # create 3 pg interfaces
         cls.create_pg_interfaces(range(1))
 
@@ -50,7 +48,7 @@ class TestMarker(VppTestCase):
         self.logger.info(self.vapi.ppcli("show interface"))
 
     def test_marker_request(self):
         self.logger.info(self.vapi.ppcli("show interface"))
 
     def test_marker_request(self):
-        """ Marker Request test """
+        """Marker Request test"""
 
         # topology
         #
 
         # topology
         #
@@ -63,22 +61,21 @@ class TestMarker(VppTestCase):
         #             +-+      +-+
 
         socket1 = VppSocketFilename(
         #             +-+      +-+
 
         socket1 = VppSocketFilename(
-            self,
-            socket_id=1,
-            socket_filename="%s/memif.sock1" % self.tempdir)
+            self, socket_id=1, socket_filename="%s/memif.sock1" % self.tempdir
+        )
         socket1.add_vpp_config()
 
         socket11 = VppSocketFilename(
         socket1.add_vpp_config()
 
         socket11 = VppSocketFilename(
-            self,
-            socket_id=2,
-            socket_filename="%s/memif.sock1" % self.tempdir)
+            self, socket_id=2, socket_filename="%s/memif.sock1" % self.tempdir
+        )
         socket11.add_vpp_config()
 
         memif1 = VppMemif(
             self,
             role=VppEnum.vl_api_memif_role_t.MEMIF_ROLE_API_MASTER,
             mode=VppEnum.vl_api_memif_mode_t.MEMIF_MODE_API_ETHERNET,
         socket11.add_vpp_config()
 
         memif1 = VppMemif(
             self,
             role=VppEnum.vl_api_memif_role_t.MEMIF_ROLE_API_MASTER,
             mode=VppEnum.vl_api_memif_mode_t.MEMIF_MODE_API_ETHERNET,
-            socket_id=1)
+            socket_id=1,
+        )
         memif1.add_vpp_config()
         memif1.admin_up()
 
         memif1.add_vpp_config()
         memif1.admin_up()
 
@@ -86,7 +83,8 @@ class TestMarker(VppTestCase):
             self,
             role=VppEnum.vl_api_memif_role_t.MEMIF_ROLE_API_SLAVE,
             mode=VppEnum.vl_api_memif_mode_t.MEMIF_MODE_API_ETHERNET,
             self,
             role=VppEnum.vl_api_memif_role_t.MEMIF_ROLE_API_SLAVE,
             mode=VppEnum.vl_api_memif_mode_t.MEMIF_MODE_API_ETHERNET,
-            socket_id=2)
+            socket_id=2,
+        )
         memif11.add_vpp_config()
         memif11.admin_up()
 
         memif11.add_vpp_config()
         memif11.admin_up()
 
@@ -94,14 +92,15 @@ class TestMarker(VppTestCase):
             self,
             mode=VppEnum.vl_api_bond_mode_t.BOND_API_MODE_LACP,
             use_custom_mac=1,
             self,
             mode=VppEnum.vl_api_bond_mode_t.BOND_API_MODE_LACP,
             use_custom_mac=1,
-            mac_address=bond_mac)
+            mac_address=bond_mac,
+        )
 
         bond0.add_vpp_config()
         bond0.admin_up()
 
         bond1 = VppBondInterface(
 
         bond0.add_vpp_config()
         bond0.admin_up()
 
         bond1 = VppBondInterface(
-            self,
-            mode=VppEnum.vl_api_bond_mode_t.BOND_API_MODE_LACP)
+            self, mode=VppEnum.vl_api_bond_mode_t.BOND_API_MODE_LACP
+        )
         bond1.add_vpp_config()
         bond1.admin_up()
 
         bond1.add_vpp_config()
         bond1.admin_up()
 
@@ -113,26 +112,28 @@ class TestMarker(VppTestCase):
         self.assertEqual(memif11.wait_for_link_up(10), True)
 
         # verify memif1 in bond0
         self.assertEqual(memif11.wait_for_link_up(10), True)
 
         # verify memif1 in bond0
-        intfs = self.vapi.sw_member_interface_dump(
-            sw_if_index=bond0.sw_if_index)
+        intfs = self.vapi.sw_member_interface_dump(sw_if_index=bond0.sw_if_index)
         for intf in intfs:
             self.assertEqual(intf.sw_if_index, memif1.sw_if_index)
 
         # verify memif11 in bond1
         for intf in intfs:
             self.assertEqual(intf.sw_if_index, memif1.sw_if_index)
 
         # verify memif11 in bond1
-        intfs = self.vapi.sw_member_interface_dump(
-            sw_if_index=bond1.sw_if_index)
+        intfs = self.vapi.sw_member_interface_dump(sw_if_index=bond1.sw_if_index)
         for intf in intfs:
             self.assertEqual(intf.sw_if_index, memif11.sw_if_index)
 
         self.vapi.ppcli("trace add memif-input 100")
 
         # create marker request
         for intf in intfs:
             self.assertEqual(intf.sw_if_index, memif11.sw_if_index)
 
         self.vapi.ppcli("trace add memif-input 100")
 
         # create marker request
-        marker = (Ether(src=bond_mac, dst=lacp_dst_mac) /
-                  SlowProtocol() /
-                  MarkerProtocol(marker_type=1,
-                                 requester_port=1,
-                                 requester_system=bond_mac,
-                                 requester_transaction_id=1))
+        marker = (
+            Ether(src=bond_mac, dst=lacp_dst_mac)
+            / SlowProtocol()
+            / MarkerProtocol(
+                marker_type=1,
+                requester_port=1,
+                requester_system=bond_mac,
+                requester_transaction_id=1,
+            )
+        )
 
         bond1.add_member_vpp_bond_interface(sw_if_index=self.pg0.sw_if_index)
         self.pg0.add_stream(marker)
 
         bond1.add_member_vpp_bond_interface(sw_if_index=self.pg0.sw_if_index)
         self.pg0.add_stream(marker)
@@ -147,9 +148,7 @@ class TestMarker(VppTestCase):
 
 
 class TestLACP(VppTestCase):
 
 
 class TestLACP(VppTestCase):
-    """LACP Test Case
-
-    """
+    """LACP Test Case"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -173,12 +172,11 @@ class TestLACP(VppTestCase):
             intfs = self.vapi.sw_interface_lacp_dump()
             all_good = 1
             for intf in intfs:
             intfs = self.vapi.sw_interface_lacp_dump()
             all_good = 1
             for intf in intfs:
-                if ((intf.actor_state !=
-                     LACP_COLLECTION_AND_DISTRIBUTION_STATE) or
-                    (intf.partner_state !=
-                     LACP_COLLECTION_AND_DISTRIBUTION_STATE)):
+                if (intf.actor_state != LACP_COLLECTION_AND_DISTRIBUTION_STATE) or (
+                    intf.partner_state != LACP_COLLECTION_AND_DISTRIBUTION_STATE
+                ):
                     all_good = 0
                     all_good = 0
-            if (all_good == 1):
+            if all_good == 1:
                 return 1
             self.sleep(step)
             timeout -= step
                 return 1
             self.sleep(step)
             timeout -= step
@@ -187,20 +185,18 @@ class TestLACP(VppTestCase):
 
     def wait_for_member_detach(self, bond, timeout, count, step=1):
         while 1:
 
     def wait_for_member_detach(self, bond, timeout, count, step=1):
         while 1:
-            intfs = self.vapi.sw_bond_interface_dump(
-                sw_if_index=bond.sw_if_index)
+            intfs = self.vapi.sw_bond_interface_dump(sw_if_index=bond.sw_if_index)
             for intf in intfs:
             for intf in intfs:
-                if ((intf.members == count) and
-                        (intf.active_members == count)):
+                if (intf.members == count) and (intf.active_members == count):
                     return 1
                 else:
                     self.sleep(1)
                     timeout -= step
                     return 1
                 else:
                     self.sleep(1)
                     timeout -= step
-                    if (timeouut <= 0):
+                    if timeouut <= 0:
                         return 0
 
     def test_lacp_connect(self):
                         return 0
 
     def test_lacp_connect(self):
-        """ LACP protocol connect test """
+        """LACP protocol connect test"""
 
         # topology
         #
 
         # topology
         #
@@ -213,34 +209,31 @@ class TestLACP(VppTestCase):
         #             +-+      +-+
 
         socket1 = VppSocketFilename(
         #             +-+      +-+
 
         socket1 = VppSocketFilename(
-            self,
-            socket_id=1,
-            socket_filename="%s/memif.sock1" % self.tempdir)
+            self, socket_id=1, socket_filename="%s/memif.sock1" % self.tempdir
+        )
         socket1.add_vpp_config()
 
         socket11 = VppSocketFilename(
         socket1.add_vpp_config()
 
         socket11 = VppSocketFilename(
-            self,
-            socket_id=2,
-            socket_filename="%s/memif.sock1" % self.tempdir)
+            self, socket_id=2, socket_filename="%s/memif.sock1" % self.tempdir
+        )
         socket11.add_vpp_config()
 
         socket2 = VppSocketFilename(
         socket11.add_vpp_config()
 
         socket2 = VppSocketFilename(
-            self,
-            socket_id=3,
-            socket_filename="%s/memif.sock2" % self.tempdir)
+            self, socket_id=3, socket_filename="%s/memif.sock2" % self.tempdir
+        )
         socket2.add_vpp_config()
 
         socket22 = VppSocketFilename(
         socket2.add_vpp_config()
 
         socket22 = VppSocketFilename(
-            self,
-            socket_id=4,
-            socket_filename="%s/memif.sock2" % self.tempdir)
+            self, socket_id=4, socket_filename="%s/memif.sock2" % self.tempdir
+        )
         socket22.add_vpp_config()
 
         memif1 = VppMemif(
             self,
             role=VppEnum.vl_api_memif_role_t.MEMIF_ROLE_API_MASTER,
             mode=VppEnum.vl_api_memif_mode_t.MEMIF_MODE_API_ETHERNET,
         socket22.add_vpp_config()
 
         memif1 = VppMemif(
             self,
             role=VppEnum.vl_api_memif_role_t.MEMIF_ROLE_API_MASTER,
             mode=VppEnum.vl_api_memif_mode_t.MEMIF_MODE_API_ETHERNET,
-            socket_id=1)
+            socket_id=1,
+        )
         memif1.add_vpp_config()
         memif1.admin_up()
 
         memif1.add_vpp_config()
         memif1.admin_up()
 
@@ -248,7 +241,8 @@ class TestLACP(VppTestCase):
             self,
             role=VppEnum.vl_api_memif_role_t.MEMIF_ROLE_API_SLAVE,
             mode=VppEnum.vl_api_memif_mode_t.MEMIF_MODE_API_ETHERNET,
             self,
             role=VppEnum.vl_api_memif_role_t.MEMIF_ROLE_API_SLAVE,
             mode=VppEnum.vl_api_memif_mode_t.MEMIF_MODE_API_ETHERNET,
-            socket_id=2)
+            socket_id=2,
+        )
         memif11.add_vpp_config()
         memif11.admin_up()
 
         memif11.add_vpp_config()
         memif11.admin_up()
 
@@ -256,7 +250,8 @@ class TestLACP(VppTestCase):
             self,
             role=VppEnum.vl_api_memif_role_t.MEMIF_ROLE_API_MASTER,
             mode=VppEnum.vl_api_memif_mode_t.MEMIF_MODE_API_ETHERNET,
             self,
             role=VppEnum.vl_api_memif_role_t.MEMIF_ROLE_API_MASTER,
             mode=VppEnum.vl_api_memif_mode_t.MEMIF_MODE_API_ETHERNET,
-            socket_id=3)
+            socket_id=3,
+        )
         memif2.add_vpp_config()
         memif2.admin_up()
 
         memif2.add_vpp_config()
         memif2.admin_up()
 
@@ -264,7 +259,8 @@ class TestLACP(VppTestCase):
             self,
             role=VppEnum.vl_api_memif_role_t.MEMIF_ROLE_API_SLAVE,
             mode=VppEnum.vl_api_memif_mode_t.MEMIF_MODE_API_ETHERNET,
             self,
             role=VppEnum.vl_api_memif_role_t.MEMIF_ROLE_API_SLAVE,
             mode=VppEnum.vl_api_memif_mode_t.MEMIF_MODE_API_ETHERNET,
-            socket_id=4)
+            socket_id=4,
+        )
         memif12.add_vpp_config()
         memif12.admin_up()
 
         memif12.add_vpp_config()
         memif12.admin_up()
 
@@ -273,14 +269,15 @@ class TestLACP(VppTestCase):
             self,
             mode=VppEnum.vl_api_bond_mode_t.BOND_API_MODE_LACP,
             use_custom_mac=1,
             self,
             mode=VppEnum.vl_api_bond_mode_t.BOND_API_MODE_LACP,
             use_custom_mac=1,
-            mac_address=bond_mac)
+            mac_address=bond_mac,
+        )
 
         bond0.add_vpp_config()
         bond0.admin_up()
 
         bond1 = VppBondInterface(
 
         bond0.add_vpp_config()
         bond0.admin_up()
 
         bond1 = VppBondInterface(
-            self,
-            mode=VppEnum.vl_api_bond_mode_t.BOND_API_MODE_LACP)
+            self, mode=VppEnum.vl_api_bond_mode_t.BOND_API_MODE_LACP
+        )
         bond1.add_vpp_config()
         bond1.admin_up()
 
         bond1.add_vpp_config()
         bond1.admin_up()
 
@@ -299,18 +296,14 @@ class TestLACP(VppTestCase):
         self.assertEqual(memif12.wait_for_link_up(10), True)
 
         # verify memif1 and memif2 in bond0
         self.assertEqual(memif12.wait_for_link_up(10), True)
 
         # verify memif1 and memif2 in bond0
-        intfs = self.vapi.sw_member_interface_dump(
-            sw_if_index=bond0.sw_if_index)
+        intfs = self.vapi.sw_member_interface_dump(sw_if_index=bond0.sw_if_index)
         for intf in intfs:
         for intf in intfs:
-            self.assertIn(
-                intf.sw_if_index, (memif1.sw_if_index, memif2.sw_if_index))
+            self.assertIn(intf.sw_if_index, (memif1.sw_if_index, memif2.sw_if_index))
 
         # verify memif11 and memif12 in bond1
 
         # verify memif11 and memif12 in bond1
-        intfs = self.vapi.sw_member_interface_dump(
-            sw_if_index=bond1.sw_if_index)
+        intfs = self.vapi.sw_member_interface_dump(sw_if_index=bond1.sw_if_index)
         for intf in intfs:
         for intf in intfs:
-            self.assertIn(
-                intf.sw_if_index, (memif11.sw_if_index, memif12.sw_if_index))
+            self.assertIn(intf.sw_if_index, (memif11.sw_if_index, memif12.sw_if_index))
             self.assertEqual(intf.is_long_timeout, 0)
             self.assertEqual(intf.is_passive, 0)
 
             self.assertEqual(intf.is_long_timeout, 0)
             self.assertEqual(intf.is_passive, 0)
 
@@ -319,17 +312,14 @@ class TestLACP(VppTestCase):
 
         intfs = self.vapi.sw_interface_lacp_dump()
         for intf in intfs:
 
         intfs = self.vapi.sw_interface_lacp_dump()
         for intf in intfs:
-            self.assertEqual(
-                intf.actor_state, LACP_COLLECTION_AND_DISTRIBUTION_STATE)
-            self.assertEqual(
-                intf.partner_state, LACP_COLLECTION_AND_DISTRIBUTION_STATE)
+            self.assertEqual(intf.actor_state, LACP_COLLECTION_AND_DISTRIBUTION_STATE)
+            self.assertEqual(intf.partner_state, LACP_COLLECTION_AND_DISTRIBUTION_STATE)
 
         intfs = self.vapi.sw_bond_interface_dump(sw_if_index=0xFFFFFFFF)
         for intf in intfs:
             self.assertEqual(intf.members, 2)
             self.assertEqual(intf.active_members, 2)
 
         intfs = self.vapi.sw_bond_interface_dump(sw_if_index=0xFFFFFFFF)
         for intf in intfs:
             self.assertEqual(intf.members, 2)
             self.assertEqual(intf.active_members, 2)
-            self.assertEqual(
-                intf.mode, VppEnum.vl_api_bond_mode_t.BOND_API_MODE_LACP)
+            self.assertEqual(intf.mode, VppEnum.vl_api_bond_mode_t.BOND_API_MODE_LACP)
 
         self.logger.info(self.vapi.ppcli("show lacp"))
         self.logger.info(self.vapi.ppcli("show lacp details"))
 
         self.logger.info(self.vapi.ppcli("show lacp"))
         self.logger.info(self.vapi.ppcli("show lacp details"))
@@ -338,20 +328,17 @@ class TestLACP(VppTestCase):
         bond0.detach_vpp_bond_interface(sw_if_index=memif1.sw_if_index)
 
         self.wait_for_member_detach(bond0, timeout=10, count=1)
         bond0.detach_vpp_bond_interface(sw_if_index=memif1.sw_if_index)
 
         self.wait_for_member_detach(bond0, timeout=10, count=1)
-        intfs = self.vapi.sw_bond_interface_dump(
-            sw_if_index=bond0.sw_if_index)
+        intfs = self.vapi.sw_bond_interface_dump(sw_if_index=bond0.sw_if_index)
         for intf in intfs:
             self.assertEqual(intf.members, 1)
             self.assertEqual(intf.active_members, 1)
         for intf in intfs:
             self.assertEqual(intf.members, 1)
             self.assertEqual(intf.active_members, 1)
-            self.assertEqual(
-                intf.mode, VppEnum.vl_api_bond_mode_t.BOND_API_MODE_LACP)
+            self.assertEqual(intf.mode, VppEnum.vl_api_bond_mode_t.BOND_API_MODE_LACP)
 
         # detach member memif2
         bond0.detach_vpp_bond_interface(sw_if_index=memif2.sw_if_index)
         self.wait_for_member_detach(bond0, timeout=10, count=0)
 
 
         # detach member memif2
         bond0.detach_vpp_bond_interface(sw_if_index=memif2.sw_if_index)
         self.wait_for_member_detach(bond0, timeout=10, count=0)
 
-        intfs = self.vapi.sw_bond_interface_dump(
-            sw_if_index=bond0.sw_if_index)
+        intfs = self.vapi.sw_bond_interface_dump(sw_if_index=bond0.sw_if_index)
         for intf in intfs:
             self.assertEqual(intf.members, 0)
             self.assertEqual(intf.active_members, 0)
         for intf in intfs:
             self.assertEqual(intf.members, 0)
             self.assertEqual(intf.active_members, 0)
@@ -360,5 +347,5 @@ class TestLACP(VppTestCase):
         bond1.remove_vpp_config()
 
 
         bond1.remove_vpp_config()
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index fafb87b..dca9ea3 100644 (file)
@@ -32,7 +32,7 @@ from vpp_ip import INVALID_INDEX
 
 
 class TestLB(VppTestCase):
 
 
 class TestLB(VppTestCase):
-    """ Load Balancer Test Case """
+    """Load Balancer Test Case"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -53,18 +53,23 @@ class TestLB(VppTestCase):
                 i.resolve_arp()
                 i.resolve_ndp()
 
                 i.resolve_arp()
                 i.resolve_ndp()
 
-            dst4 = VppIpRoute(cls, "10.0.0.0", 24,
-                              [VppRoutePath(cls.pg1.remote_ip4,
-                                            INVALID_INDEX)],
-                              register=False)
+            dst4 = VppIpRoute(
+                cls,
+                "10.0.0.0",
+                24,
+                [VppRoutePath(cls.pg1.remote_ip4, INVALID_INDEX)],
+                register=False,
+            )
             dst4.add_vpp_config()
             dst4.add_vpp_config()
-            dst6 = VppIpRoute(cls, "2002::", 16,
-                              [VppRoutePath(cls.pg1.remote_ip6,
-                                            INVALID_INDEX)],
-                              register=False)
+            dst6 = VppIpRoute(
+                cls,
+                "2002::",
+                16,
+                [VppRoutePath(cls.pg1.remote_ip6, INVALID_INDEX)],
+                register=False,
+            )
             dst6.add_vpp_config()
             dst6.add_vpp_config()
-            cls.vapi.lb_conf(ip4_src_address="39.40.41.42",
-                             ip6_src_address="2004::1")
+            cls.vapi.lb_conf(ip4_src_address="39.40.41.42", ip6_src_address="2004::1")
         except Exception:
             super(TestLB, cls).tearDownClass()
             raise
         except Exception:
             super(TestLB, cls).tearDownClass()
             raise
@@ -80,13 +85,15 @@ class TestLB(VppTestCase):
         self.logger.info(self.vapi.cli("show lb vip verbose"))
 
     def getIPv4Flow(self, id):
         self.logger.info(self.vapi.cli("show lb vip verbose"))
 
     def getIPv4Flow(self, id):
-        return (IP(dst="90.0.%u.%u" % (id / 255, id % 255),
-                   src="40.0.%u.%u" % (id / 255, id % 255)) /
-                UDP(sport=10000 + id, dport=20000))
+        return IP(
+            dst="90.0.%u.%u" % (id / 255, id % 255),
+            src="40.0.%u.%u" % (id / 255, id % 255),
+        ) / UDP(sport=10000 + id, dport=20000)
 
     def getIPv6Flow(self, id):
 
     def getIPv6Flow(self, id):
-        return (IPv6(dst="2001::%u" % (id), src="fd00:f00d:ffff::%u" % (id)) /
-                UDP(sport=10000 + id, dport=20000))
+        return IPv6(dst="2001::%u" % (id), src="fd00:f00d:ffff::%u" % (id)) / UDP(
+            sport=10000 + id, dport=20000
+        )
 
     def generatePackets(self, src_if, isv4):
         self.reset_packet_infos()
 
     def generatePackets(self, src_if, isv4):
         self.reset_packet_infos()
@@ -95,9 +102,9 @@ class TestLB(VppTestCase):
             info = self.create_packet_info(src_if, self.pg1)
             payload = self.info_to_payload(info)
             ip = self.getIPv4Flow(pktid) if isv4 else self.getIPv6Flow(pktid)
             info = self.create_packet_info(src_if, self.pg1)
             payload = self.info_to_payload(info)
             ip = self.getIPv4Flow(pktid) if isv4 else self.getIPv6Flow(pktid)
-            packet = (Ether(dst=src_if.local_mac, src=src_if.remote_mac) /
-                      ip /
-                      Raw(payload))
+            packet = (
+                Ether(dst=src_if.local_mac, src=src_if.remote_mac) / ip / Raw(payload)
+            )
             self.extend_packet(packet, 128)
             info.data = packet.copy()
             pkts.append(packet)
             self.extend_packet(packet, 128)
             info.data = packet.copy()
             pkts.append(packet)
@@ -112,8 +119,9 @@ class TestLB(VppTestCase):
         payload_info = self.payload_to_info(inner[Raw])
         self.info = self.packet_infos[payload_info.index]
         self.assertEqual(payload_info.src, self.pg0.sw_if_index)
         payload_info = self.payload_to_info(inner[Raw])
         self.info = self.packet_infos[payload_info.index]
         self.assertEqual(payload_info.src, self.pg0.sw_if_index)
-        self.assertEqual(scapy.compat.raw(inner),
-                         scapy.compat.raw(self.info.data[IPver]))
+        self.assertEqual(
+            scapy.compat.raw(inner), scapy.compat.raw(self.info.data[IPver])
+        )
 
     def checkCapture(self, encap, isv4):
         self.pg0.assert_nothing_captured()
 
     def checkCapture(self, encap, isv4):
         self.pg0.assert_nothing_captured()
@@ -125,7 +133,7 @@ class TestLB(VppTestCase):
             try:
                 asid = 0
                 gre = None
             try:
                 asid = 0
                 gre = None
-                if (encap == 'gre4'):
+                if encap == "gre4":
                     ip = p[IP]
                     asid = int(ip.dst.split(".")[3])
                     self.assertEqual(ip.version, 4)
                     ip = p[IP]
                     asid = int(ip.dst.split(".")[3])
                     self.assertEqual(ip.version, 4)
@@ -136,7 +144,7 @@ class TestLB(VppTestCase):
                     self.assertEqual(len(ip.options), 0)
                     gre = p[GRE]
                     self.checkInner(gre, isv4)
                     self.assertEqual(len(ip.options), 0)
                     gre = p[GRE]
                     self.checkInner(gre, isv4)
-                elif (encap == 'gre6'):
+                elif encap == "gre6":
                     ip = p[IPv6]
                     asid = ip.dst.split(":")
                     asid = asid[len(asid) - 1]
                     ip = p[IPv6]
                     asid = ip.dst.split(":")
                     asid = asid[len(asid) - 1]
@@ -147,26 +155,26 @@ class TestLB(VppTestCase):
                     self.assertEqual(ip.src, "2004::1")
                     self.assertEqual(
                         socket.inet_pton(socket.AF_INET6, ip.dst),
                     self.assertEqual(ip.src, "2004::1")
                     self.assertEqual(
                         socket.inet_pton(socket.AF_INET6, ip.dst),
-                        socket.inet_pton(socket.AF_INET6, "2002::%u" % asid)
+                        socket.inet_pton(socket.AF_INET6, "2002::%u" % asid),
                     )
                     self.assertEqual(ip.nh, 47)
                     # self.assertEqual(len(ip.options), 0)
                     gre = GRE(scapy.compat.raw(p[IPv6].payload))
                     self.checkInner(gre, isv4)
                     )
                     self.assertEqual(ip.nh, 47)
                     # self.assertEqual(len(ip.options), 0)
                     gre = GRE(scapy.compat.raw(p[IPv6].payload))
                     self.checkInner(gre, isv4)
-                elif (encap == 'l3dsr'):
+                elif encap == "l3dsr":
                     ip = p[IP]
                     asid = int(ip.dst.split(".")[3])
                     self.assertEqual(ip.version, 4)
                     self.assertEqual(ip.flags, 0)
                     self.assertEqual(ip.dst, "10.0.0.%u" % asid)
                     ip = p[IP]
                     asid = int(ip.dst.split(".")[3])
                     self.assertEqual(ip.version, 4)
                     self.assertEqual(ip.flags, 0)
                     self.assertEqual(ip.dst, "10.0.0.%u" % asid)
-                    self.assertEqual(ip.tos, 0x1c)
+                    self.assertEqual(ip.tos, 0x1C)
                     self.assertEqual(len(ip.options), 0)
                     self.assert_ip_checksum_valid(p)
                     if ip.proto == IP_PROTOS.tcp:
                         self.assert_tcp_checksum_valid(p)
                     elif ip.proto == IP_PROTOS.udp:
                         self.assert_udp_checksum_valid(p)
                     self.assertEqual(len(ip.options), 0)
                     self.assert_ip_checksum_valid(p)
                     if ip.proto == IP_PROTOS.tcp:
                         self.assert_tcp_checksum_valid(p)
                     elif ip.proto == IP_PROTOS.udp:
                         self.assert_udp_checksum_valid(p)
-                elif (encap == 'nat4'):
+                elif encap == "nat4":
                     ip = p[IP]
                     asid = int(ip.dst.split(".")[3])
                     self.assertEqual(ip.version, 4)
                     ip = p[IP]
                     asid = int(ip.dst.split(".")[3])
                     self.assertEqual(ip.version, 4)
@@ -176,7 +184,7 @@ class TestLB(VppTestCase):
                     self.assertEqual(len(ip.options), 0)
                     udp = p[UDP]
                     self.assertEqual(udp.dport, 3307)
                     self.assertEqual(len(ip.options), 0)
                     udp = p[UDP]
                     self.assertEqual(udp.dport, 3307)
-                elif (encap == 'nat6'):
+                elif encap == "nat6":
                     ip = p[IPv6]
                     asid = ip.dst.split(":")
                     asid = asid[len(asid) - 1]
                     ip = p[IPv6]
                     asid = ip.dst.split(":")
                     asid = asid[len(asid) - 1]
@@ -186,7 +194,7 @@ class TestLB(VppTestCase):
                     self.assertEqual(ip.fl, 0)
                     self.assertEqual(
                         socket.inet_pton(socket.AF_INET6, ip.dst),
                     self.assertEqual(ip.fl, 0)
                     self.assertEqual(
                         socket.inet_pton(socket.AF_INET6, ip.dst),
-                        socket.inet_pton(socket.AF_INET6, "2002::%u" % asid)
+                        socket.inet_pton(socket.AF_INET6, "2002::%u" % asid),
                     )
                     self.assertEqual(ip.nh, 17)
                     self.assertGreaterEqual(ip.hlim, 63)
                     )
                     self.assertEqual(ip.nh, 17)
                     self.assertGreaterEqual(ip.hlim, 63)
@@ -202,301 +210,268 @@ class TestLB(VppTestCase):
         for asid in self.ass:
             if load[asid] < int(len(self.packets) / (len(self.ass) * 2)):
                 self.logger.error(
         for asid in self.ass:
             if load[asid] < int(len(self.packets) / (len(self.ass) * 2)):
                 self.logger.error(
-                    "ASS is not balanced: load[%d] = %d" % (asid, load[asid]))
+                    "ASS is not balanced: load[%d] = %d" % (asid, load[asid])
+                )
                 raise Exception("Load Balancer algorithm is biased")
 
     def test_lb_ip4_gre4(self):
                 raise Exception("Load Balancer algorithm is biased")
 
     def test_lb_ip4_gre4(self):
-        """ Load Balancer IP4 GRE4 on vip case """
+        """Load Balancer IP4 GRE4 on vip case"""
         try:
         try:
-            self.vapi.cli(
-                "lb vip 90.0.0.0/8 encap gre4")
+            self.vapi.cli("lb vip 90.0.0.0/8 encap gre4")
             for asid in self.ass:
             for asid in self.ass:
-                self.vapi.cli(
-                    "lb as 90.0.0.0/8 10.0.0.%u"
-                    % (asid))
+                self.vapi.cli("lb as 90.0.0.0/8 10.0.0.%u" % (asid))
 
             self.pg0.add_stream(self.generatePackets(self.pg0, isv4=True))
             self.pg_enable_capture(self.pg_interfaces)
             self.pg_start()
 
             self.pg0.add_stream(self.generatePackets(self.pg0, isv4=True))
             self.pg_enable_capture(self.pg_interfaces)
             self.pg_start()
-            self.checkCapture(encap='gre4', isv4=True)
+            self.checkCapture(encap="gre4", isv4=True)
 
         finally:
             for asid in self.ass:
 
         finally:
             for asid in self.ass:
-                self.vapi.cli(
-                    "lb as 90.0.0.0/8 10.0.0.%u del"
-                    % (asid))
-            self.vapi.cli(
-                "lb vip 90.0.0.0/8 encap gre4 del")
+                self.vapi.cli("lb as 90.0.0.0/8 10.0.0.%u del" % (asid))
+            self.vapi.cli("lb vip 90.0.0.0/8 encap gre4 del")
             self.vapi.cli("test lb flowtable flush")
 
     def test_lb_ip6_gre4(self):
             self.vapi.cli("test lb flowtable flush")
 
     def test_lb_ip6_gre4(self):
-        """ Load Balancer IP6 GRE4 on vip case """
+        """Load Balancer IP6 GRE4 on vip case"""
 
         try:
 
         try:
-            self.vapi.cli(
-                "lb vip 2001::/16 encap gre4")
+            self.vapi.cli("lb vip 2001::/16 encap gre4")
             for asid in self.ass:
             for asid in self.ass:
-                self.vapi.cli(
-                    "lb as 2001::/16 10.0.0.%u"
-                    % (asid))
+                self.vapi.cli("lb as 2001::/16 10.0.0.%u" % (asid))
 
             self.pg0.add_stream(self.generatePackets(self.pg0, isv4=False))
             self.pg_enable_capture(self.pg_interfaces)
             self.pg_start()
 
 
             self.pg0.add_stream(self.generatePackets(self.pg0, isv4=False))
             self.pg_enable_capture(self.pg_interfaces)
             self.pg_start()
 
-            self.checkCapture(encap='gre4', isv4=False)
+            self.checkCapture(encap="gre4", isv4=False)
         finally:
             for asid in self.ass:
         finally:
             for asid in self.ass:
-                self.vapi.cli(
-                    "lb as 2001::/16 10.0.0.%u del"
-                    % (asid))
-            self.vapi.cli(
-                "lb vip 2001::/16 encap gre4 del")
+                self.vapi.cli("lb as 2001::/16 10.0.0.%u del" % (asid))
+            self.vapi.cli("lb vip 2001::/16 encap gre4 del")
             self.vapi.cli("test lb flowtable flush")
 
     def test_lb_ip4_gre6(self):
             self.vapi.cli("test lb flowtable flush")
 
     def test_lb_ip4_gre6(self):
-        """ Load Balancer IP4 GRE6 on vip case """
+        """Load Balancer IP4 GRE6 on vip case"""
         try:
         try:
-            self.vapi.cli(
-                "lb vip 90.0.0.0/8 encap gre6")
+            self.vapi.cli("lb vip 90.0.0.0/8 encap gre6")
             for asid in self.ass:
             for asid in self.ass:
-                self.vapi.cli(
-                    "lb as 90.0.0.0/8 2002::%u"
-                    % (asid))
+                self.vapi.cli("lb as 90.0.0.0/8 2002::%u" % (asid))
 
             self.pg0.add_stream(self.generatePackets(self.pg0, isv4=True))
             self.pg_enable_capture(self.pg_interfaces)
             self.pg_start()
 
 
             self.pg0.add_stream(self.generatePackets(self.pg0, isv4=True))
             self.pg_enable_capture(self.pg_interfaces)
             self.pg_start()
 
-            self.checkCapture(encap='gre6', isv4=True)
+            self.checkCapture(encap="gre6", isv4=True)
         finally:
             for asid in self.ass:
         finally:
             for asid in self.ass:
-                self.vapi.cli(
-                    "lb as 90.0.0.0/8 2002::%u del"
-                    % (asid))
-            self.vapi.cli(
-                "lb vip 90.0.0.0/8 encap gre6 del")
+                self.vapi.cli("lb as 90.0.0.0/8 2002::%u del" % (asid))
+            self.vapi.cli("lb vip 90.0.0.0/8 encap gre6 del")
             self.vapi.cli("test lb flowtable flush")
 
     def test_lb_ip6_gre6(self):
             self.vapi.cli("test lb flowtable flush")
 
     def test_lb_ip6_gre6(self):
-        """ Load Balancer IP6 GRE6 on vip case """
+        """Load Balancer IP6 GRE6 on vip case"""
         try:
         try:
-            self.vapi.cli(
-                "lb vip 2001::/16 encap gre6")
+            self.vapi.cli("lb vip 2001::/16 encap gre6")
             for asid in self.ass:
             for asid in self.ass:
-                self.vapi.cli(
-                    "lb as 2001::/16 2002::%u"
-                    % (asid))
+                self.vapi.cli("lb as 2001::/16 2002::%u" % (asid))
 
             self.pg0.add_stream(self.generatePackets(self.pg0, isv4=False))
             self.pg_enable_capture(self.pg_interfaces)
             self.pg_start()
 
 
             self.pg0.add_stream(self.generatePackets(self.pg0, isv4=False))
             self.pg_enable_capture(self.pg_interfaces)
             self.pg_start()
 
-            self.checkCapture(encap='gre6', isv4=False)
+            self.checkCapture(encap="gre6", isv4=False)
         finally:
             for asid in self.ass:
         finally:
             for asid in self.ass:
-                self.vapi.cli(
-                    "lb as 2001::/16 2002::%u del"
-                    % (asid))
-            self.vapi.cli(
-                "lb vip 2001::/16 encap gre6 del")
+                self.vapi.cli("lb as 2001::/16 2002::%u del" % (asid))
+            self.vapi.cli("lb vip 2001::/16 encap gre6 del")
             self.vapi.cli("test lb flowtable flush")
 
     def test_lb_ip4_gre4_port(self):
             self.vapi.cli("test lb flowtable flush")
 
     def test_lb_ip4_gre4_port(self):
-        """ Load Balancer IP4 GRE4 on per-port-vip case """
+        """Load Balancer IP4 GRE4 on per-port-vip case"""
         try:
         try:
-            self.vapi.cli(
-                "lb vip 90.0.0.0/8 protocol udp port 20000 encap gre4")
+            self.vapi.cli("lb vip 90.0.0.0/8 protocol udp port 20000 encap gre4")
             for asid in self.ass:
                 self.vapi.cli(
             for asid in self.ass:
                 self.vapi.cli(
-                    "lb as 90.0.0.0/8 protocol udp port 20000 10.0.0.%u"
-                    % (asid))
+                    "lb as 90.0.0.0/8 protocol udp port 20000 10.0.0.%u" % (asid)
+                )
 
             self.pg0.add_stream(self.generatePackets(self.pg0, isv4=True))
             self.pg_enable_capture(self.pg_interfaces)
             self.pg_start()
 
             self.pg0.add_stream(self.generatePackets(self.pg0, isv4=True))
             self.pg_enable_capture(self.pg_interfaces)
             self.pg_start()
-            self.checkCapture(encap='gre4', isv4=True)
+            self.checkCapture(encap="gre4", isv4=True)
 
         finally:
             for asid in self.ass:
                 self.vapi.cli(
 
         finally:
             for asid in self.ass:
                 self.vapi.cli(
-                    "lb as 90.0.0.0/8 protocol udp port 20000 10.0.0.%u del"
-                    % (asid))
-            self.vapi.cli(
-                "lb vip 90.0.0.0/8 protocol udp port 20000 encap gre4 del")
+                    "lb as 90.0.0.0/8 protocol udp port 20000 10.0.0.%u del" % (asid)
+                )
+            self.vapi.cli("lb vip 90.0.0.0/8 protocol udp port 20000 encap gre4 del")
             self.vapi.cli("test lb flowtable flush")
 
     def test_lb_ip6_gre4_port(self):
             self.vapi.cli("test lb flowtable flush")
 
     def test_lb_ip6_gre4_port(self):
-        """ Load Balancer IP6 GRE4 on per-port-vip case """
+        """Load Balancer IP6 GRE4 on per-port-vip case"""
 
         try:
 
         try:
-            self.vapi.cli(
-                "lb vip 2001::/16 protocol udp port 20000 encap gre4")
+            self.vapi.cli("lb vip 2001::/16 protocol udp port 20000 encap gre4")
             for asid in self.ass:
                 self.vapi.cli(
             for asid in self.ass:
                 self.vapi.cli(
-                    "lb as 2001::/16 protocol udp port 20000 10.0.0.%u"
-                    % (asid))
+                    "lb as 2001::/16 protocol udp port 20000 10.0.0.%u" % (asid)
+                )
 
             self.pg0.add_stream(self.generatePackets(self.pg0, isv4=False))
             self.pg_enable_capture(self.pg_interfaces)
             self.pg_start()
 
 
             self.pg0.add_stream(self.generatePackets(self.pg0, isv4=False))
             self.pg_enable_capture(self.pg_interfaces)
             self.pg_start()
 
-            self.checkCapture(encap='gre4', isv4=False)
+            self.checkCapture(encap="gre4", isv4=False)
         finally:
             for asid in self.ass:
                 self.vapi.cli(
         finally:
             for asid in self.ass:
                 self.vapi.cli(
-                    "lb as 2001::/16 protocol udp port 20000 10.0.0.%u del"
-                    % (asid))
-            self.vapi.cli(
-                "lb vip 2001::/16 protocol udp port 20000 encap gre4 del")
+                    "lb as 2001::/16 protocol udp port 20000 10.0.0.%u del" % (asid)
+                )
+            self.vapi.cli("lb vip 2001::/16 protocol udp port 20000 encap gre4 del")
             self.vapi.cli("test lb flowtable flush")
 
     def test_lb_ip4_gre6_port(self):
             self.vapi.cli("test lb flowtable flush")
 
     def test_lb_ip4_gre6_port(self):
-        """ Load Balancer IP4 GRE6 on per-port-vip case """
+        """Load Balancer IP4 GRE6 on per-port-vip case"""
         try:
         try:
-            self.vapi.cli(
-                "lb vip 90.0.0.0/8 protocol udp port 20000 encap gre6")
+            self.vapi.cli("lb vip 90.0.0.0/8 protocol udp port 20000 encap gre6")
             for asid in self.ass:
                 self.vapi.cli(
             for asid in self.ass:
                 self.vapi.cli(
-                    "lb as 90.0.0.0/8 protocol udp port 20000 2002::%u"
-                    % (asid))
+                    "lb as 90.0.0.0/8 protocol udp port 20000 2002::%u" % (asid)
+                )
 
             self.pg0.add_stream(self.generatePackets(self.pg0, isv4=True))
             self.pg_enable_capture(self.pg_interfaces)
             self.pg_start()
 
 
             self.pg0.add_stream(self.generatePackets(self.pg0, isv4=True))
             self.pg_enable_capture(self.pg_interfaces)
             self.pg_start()
 
-            self.checkCapture(encap='gre6', isv4=True)
+            self.checkCapture(encap="gre6", isv4=True)
         finally:
             for asid in self.ass:
                 self.vapi.cli(
         finally:
             for asid in self.ass:
                 self.vapi.cli(
-                    "lb as 90.0.0.0/8 protocol udp port 20000 2002::%u del"
-                    % (asid))
-            self.vapi.cli(
-                "lb vip 90.0.0.0/8 protocol udp port 20000 encap gre6 del")
+                    "lb as 90.0.0.0/8 protocol udp port 20000 2002::%u del" % (asid)
+                )
+            self.vapi.cli("lb vip 90.0.0.0/8 protocol udp port 20000 encap gre6 del")
             self.vapi.cli("test lb flowtable flush")
 
     def test_lb_ip6_gre6_port(self):
             self.vapi.cli("test lb flowtable flush")
 
     def test_lb_ip6_gre6_port(self):
-        """ Load Balancer IP6 GRE6 on per-port-vip case """
+        """Load Balancer IP6 GRE6 on per-port-vip case"""
         try:
         try:
-            self.vapi.cli(
-                "lb vip 2001::/16 protocol udp port 20000 encap gre6")
+            self.vapi.cli("lb vip 2001::/16 protocol udp port 20000 encap gre6")
             for asid in self.ass:
                 self.vapi.cli(
             for asid in self.ass:
                 self.vapi.cli(
-                    "lb as 2001::/16 protocol udp port 20000 2002::%u"
-                    % (asid))
+                    "lb as 2001::/16 protocol udp port 20000 2002::%u" % (asid)
+                )
 
             self.pg0.add_stream(self.generatePackets(self.pg0, isv4=False))
             self.pg_enable_capture(self.pg_interfaces)
             self.pg_start()
 
 
             self.pg0.add_stream(self.generatePackets(self.pg0, isv4=False))
             self.pg_enable_capture(self.pg_interfaces)
             self.pg_start()
 
-            self.checkCapture(encap='gre6', isv4=False)
+            self.checkCapture(encap="gre6", isv4=False)
         finally:
             for asid in self.ass:
                 self.vapi.cli(
         finally:
             for asid in self.ass:
                 self.vapi.cli(
-                    "lb as 2001::/16 protocol udp port 20000 2002::%u del"
-                    % (asid))
-            self.vapi.cli(
-                "lb vip 2001::/16 protocol udp port 20000 encap gre6 del")
+                    "lb as 2001::/16 protocol udp port 20000 2002::%u del" % (asid)
+                )
+            self.vapi.cli("lb vip 2001::/16 protocol udp port 20000 encap gre6 del")
             self.vapi.cli("test lb flowtable flush")
 
     def test_lb_ip4_l3dsr(self):
             self.vapi.cli("test lb flowtable flush")
 
     def test_lb_ip4_l3dsr(self):
-        """ Load Balancer IP4 L3DSR on vip case """
+        """Load Balancer IP4 L3DSR on vip case"""
         try:
         try:
-            self.vapi.cli(
-                "lb vip 90.0.0.0/8 encap l3dsr dscp 7")
+            self.vapi.cli("lb vip 90.0.0.0/8 encap l3dsr dscp 7")
             for asid in self.ass:
             for asid in self.ass:
-                self.vapi.cli(
-                    "lb as 90.0.0.0/8 10.0.0.%u"
-                    % (asid))
+                self.vapi.cli("lb as 90.0.0.0/8 10.0.0.%u" % (asid))
 
             self.pg0.add_stream(self.generatePackets(self.pg0, isv4=True))
             self.pg_enable_capture(self.pg_interfaces)
             self.pg_start()
 
             self.pg0.add_stream(self.generatePackets(self.pg0, isv4=True))
             self.pg_enable_capture(self.pg_interfaces)
             self.pg_start()
-            self.checkCapture(encap='l3dsr', isv4=True)
+            self.checkCapture(encap="l3dsr", isv4=True)
 
         finally:
             for asid in self.ass:
 
         finally:
             for asid in self.ass:
-                self.vapi.cli(
-                    "lb as 90.0.0.0/8 10.0.0.%u del"
-                    % (asid))
-            self.vapi.cli(
-                "lb vip 90.0.0.0/8 encap l3dsr"
-                " dscp 7 del")
+                self.vapi.cli("lb as 90.0.0.0/8 10.0.0.%u del" % (asid))
+            self.vapi.cli("lb vip 90.0.0.0/8 encap l3dsr dscp 7 del")
             self.vapi.cli("test lb flowtable flush")
 
     def test_lb_ip4_l3dsr_port(self):
             self.vapi.cli("test lb flowtable flush")
 
     def test_lb_ip4_l3dsr_port(self):
-        """ Load Balancer IP4 L3DSR on per-port-vip case """
+        """Load Balancer IP4 L3DSR on per-port-vip case"""
         try:
             self.vapi.cli(
         try:
             self.vapi.cli(
-                "lb vip 90.0.0.0/8 protocol udp port 20000 encap l3dsr dscp 7")
+                "lb vip 90.0.0.0/8 protocol udp port 20000 encap l3dsr dscp 7"
+            )
             for asid in self.ass:
                 self.vapi.cli(
             for asid in self.ass:
                 self.vapi.cli(
-                    "lb as 90.0.0.0/8 protocol udp port 20000 10.0.0.%u"
-                    % (asid))
+                    "lb as 90.0.0.0/8 protocol udp port 20000 10.0.0.%u" % (asid)
+                )
 
             self.pg0.add_stream(self.generatePackets(self.pg0, isv4=True))
             self.pg_enable_capture(self.pg_interfaces)
             self.pg_start()
 
             self.pg0.add_stream(self.generatePackets(self.pg0, isv4=True))
             self.pg_enable_capture(self.pg_interfaces)
             self.pg_start()
-            self.checkCapture(encap='l3dsr', isv4=True)
+            self.checkCapture(encap="l3dsr", isv4=True)
 
         finally:
             for asid in self.ass:
                 self.vapi.cli(
 
         finally:
             for asid in self.ass:
                 self.vapi.cli(
-                    "lb as 90.0.0.0/8 protocol udp port 20000 10.0.0.%u del"
-                    % (asid))
+                    "lb as 90.0.0.0/8 protocol udp port 20000 10.0.0.%u del" % (asid)
+                )
             self.vapi.cli(
             self.vapi.cli(
-                "lb vip 90.0.0.0/8 protocol udp port 20000 encap l3dsr"
-                " dscp 7 del")
+                "lb vip 90.0.0.0/8 protocol udp port 20000 encap l3dsr dscp 7 del"
+            )
             self.vapi.cli("test lb flowtable flush")
 
     def test_lb_ip4_nat4_port(self):
             self.vapi.cli("test lb flowtable flush")
 
     def test_lb_ip4_nat4_port(self):
-        """ Load Balancer IP4 NAT4 on per-port-vip case """
+        """Load Balancer IP4 NAT4 on per-port-vip case"""
         try:
             self.vapi.cli(
                 "lb vip 90.0.0.0/8 protocol udp port 20000 encap nat4"
         try:
             self.vapi.cli(
                 "lb vip 90.0.0.0/8 protocol udp port 20000 encap nat4"
-                " type clusterip target_port 3307")
+                " type clusterip target_port 3307"
+            )
             for asid in self.ass:
                 self.vapi.cli(
             for asid in self.ass:
                 self.vapi.cli(
-                    "lb as 90.0.0.0/8 protocol udp port 20000 10.0.0.%u"
-                    % (asid))
+                    "lb as 90.0.0.0/8 protocol udp port 20000 10.0.0.%u" % (asid)
+                )
 
             self.pg0.add_stream(self.generatePackets(self.pg0, isv4=True))
             self.pg_enable_capture(self.pg_interfaces)
             self.pg_start()
 
             self.pg0.add_stream(self.generatePackets(self.pg0, isv4=True))
             self.pg_enable_capture(self.pg_interfaces)
             self.pg_start()
-            self.checkCapture(encap='nat4', isv4=True)
+            self.checkCapture(encap="nat4", isv4=True)
 
         finally:
             for asid in self.ass:
                 self.vapi.cli(
 
         finally:
             for asid in self.ass:
                 self.vapi.cli(
-                    "lb as 90.0.0.0/8 protocol udp port 20000 10.0.0.%u del"
-                    % (asid))
+                    "lb as 90.0.0.0/8 protocol udp port 20000 10.0.0.%u del" % (asid)
+                )
             self.vapi.cli(
                 "lb vip 90.0.0.0/8 protocol udp port 20000 encap nat4"
             self.vapi.cli(
                 "lb vip 90.0.0.0/8 protocol udp port 20000 encap nat4"
-                " type clusterip target_port 3307 del")
+                " type clusterip target_port 3307 del"
+            )
             self.vapi.cli("test lb flowtable flush")
 
     def test_lb_ip6_nat6_port(self):
             self.vapi.cli("test lb flowtable flush")
 
     def test_lb_ip6_nat6_port(self):
-        """ Load Balancer IP6 NAT6 on per-port-vip case """
+        """Load Balancer IP6 NAT6 on per-port-vip case"""
         try:
             self.vapi.cli(
                 "lb vip 2001::/16 protocol udp port 20000 encap nat6"
         try:
             self.vapi.cli(
                 "lb vip 2001::/16 protocol udp port 20000 encap nat6"
-                " type clusterip target_port 3307")
+                " type clusterip target_port 3307"
+            )
             for asid in self.ass:
                 self.vapi.cli(
             for asid in self.ass:
                 self.vapi.cli(
-                    "lb as 2001::/16 protocol udp port 20000 2002::%u"
-                    % (asid))
+                    "lb as 2001::/16 protocol udp port 20000 2002::%u" % (asid)
+                )
 
             self.pg0.add_stream(self.generatePackets(self.pg0, isv4=False))
             self.pg_enable_capture(self.pg_interfaces)
             self.pg_start()
 
             self.pg0.add_stream(self.generatePackets(self.pg0, isv4=False))
             self.pg_enable_capture(self.pg_interfaces)
             self.pg_start()
-            self.checkCapture(encap='nat6', isv4=False)
+            self.checkCapture(encap="nat6", isv4=False)
 
         finally:
             for asid in self.ass:
                 self.vapi.cli(
 
         finally:
             for asid in self.ass:
                 self.vapi.cli(
-                    "lb as 2001::/16 protocol udp port 20000 2002::%u del"
-                    % (asid))
+                    "lb as 2001::/16 protocol udp port 20000 2002::%u del" % (asid)
+                )
             self.vapi.cli(
                 "lb vip 2001::/16 protocol udp port 20000 encap nat6"
             self.vapi.cli(
                 "lb vip 2001::/16 protocol udp port 20000 encap nat6"
-                " type clusterip target_port 3307 del")
+                " type clusterip target_port 3307 del"
+            )
             self.vapi.cli("test lb flowtable flush")
             self.vapi.cli("test lb flowtable flush")
index 70d41d4..048f7bf 100644 (file)
@@ -19,7 +19,7 @@ DEFAULT_VIP = "lb_vip_details(_0=978, context=12, vip=vl_api_lb_ip_addr_t(pfx=IP
 
 
 class TestLbEmptyApi(framework.VppTestCase):
 
 
 class TestLbEmptyApi(framework.VppTestCase):
-    """TestLbEmptyApi """
+    """TestLbEmptyApi"""
 
     def test_lb_empty_vip_dump(self):
 
 
     def test_lb_empty_vip_dump(self):
 
@@ -27,18 +27,18 @@ class TestLbEmptyApi(framework.VppTestCase):
         # lb initializes with a default VIP
         rv = self.vapi.lb_vip_dump()
         # print(rv)
         # lb initializes with a default VIP
         rv = self.vapi.lb_vip_dump()
         # print(rv)
-        self.assertEqual(rv, [], 'Expected: [] Received: %r.' % rv)
+        self.assertEqual(rv, [], "Expected: [] Received: %r." % rv)
 
     def test_lb_empty_as_dump(self):
 
         # no records should return []
         rv = self.vapi.lb_as_dump()
         # print(rv)
 
     def test_lb_empty_as_dump(self):
 
         # no records should return []
         rv = self.vapi.lb_as_dump()
         # print(rv)
-        self.assertEqual(rv, [], 'Expected: [] Received: %r.' % rv)
+        self.assertEqual(rv, [], "Expected: [] Received: %r." % rv)
 
 
 class TestLbApi(framework.VppTestCase):
 
 
 class TestLbApi(framework.VppTestCase):
-    """TestLbApi """
+    """TestLbApi"""
 
     def test_lb_vip_dump(self):
         # add some vips
 
     def test_lb_vip_dump(self):
         # add some vips
@@ -49,14 +49,17 @@ class TestLbApi(framework.VppTestCase):
         self.vapi.cli("lb vip 2001::/16 encap gre6")
         rv = self.vapi.lb_vip_dump()
         # print(rv)
         self.vapi.cli("lb vip 2001::/16 encap gre6")
         rv = self.vapi.lb_vip_dump()
         # print(rv)
-        self.assertEqual(str(rv[-1].vip.pfx), "2001::/16",
-                         'Expected: 2001::/16 Received: %r.' % rv[-1].vip.pfx)
+        self.assertEqual(
+            str(rv[-1].vip.pfx),
+            "2001::/16",
+            "Expected: 2001::/16 Received: %r." % rv[-1].vip.pfx,
+        )
 
         self.vapi.cli("lb vip 2001::/16 del")
 
 
 class TestLbAsApi(framework.VppTestCase):
 
         self.vapi.cli("lb vip 2001::/16 del")
 
 
 class TestLbAsApi(framework.VppTestCase):
-    """TestLbAsApi """
+    """TestLbAsApi"""
 
     def test_lb_as_dump(self):
         # add some vips
 
     def test_lb_as_dump(self):
         # add some vips
@@ -70,7 +73,13 @@ class TestLbAsApi(framework.VppTestCase):
         # print(rv)
         rv = self.vapi.lb_as_dump()
         # print(rv)
         # print(rv)
         rv = self.vapi.lb_as_dump()
         # print(rv)
-        self.assertEqual(str(rv[0].vip.pfx), "2001::/16",
-                         'Expected: "2001::/16" Received: %r.' % rv[0].vip.pfx)
-        self.assertEqual(str(rv[0].app_srv), "2000::1",
-                         'Expected: "2000::1" Received: %r.' % rv[0].app_srv)
+        self.assertEqual(
+            str(rv[0].vip.pfx),
+            "2001::/16",
+            'Expected: "2001::/16" Received: %r.' % rv[0].vip.pfx,
+        )
+        self.assertEqual(
+            str(rv[0].app_srv),
+            "2000::1",
+            'Expected: "2000::1" Received: %r.' % rv[0].app_srv,
+        )
index b683954..2d7669b 100644 (file)
@@ -10,10 +10,20 @@ from util import reassemble4
 from vpp_object import VppObject
 from framework import VppTestCase, VppTestRunner
 from vpp_ipip_tun_interface import VppIpIpTunInterface
 from vpp_object import VppObject
 from framework import VppTestCase, VppTestRunner
 from vpp_ipip_tun_interface import VppIpIpTunInterface
-from template_ipsec import TemplateIpsec, IpsecTun4Tests, \
-    IpsecTun4, mk_scapy_crypt_key, config_tun_params
-from template_ipsec import TemplateIpsec, IpsecTun4Tests, \
-    IpsecTun4, mk_scapy_crypt_key, config_tun_params
+from template_ipsec import (
+    TemplateIpsec,
+    IpsecTun4Tests,
+    IpsecTun4,
+    mk_scapy_crypt_key,
+    config_tun_params,
+)
+from template_ipsec import (
+    TemplateIpsec,
+    IpsecTun4Tests,
+    IpsecTun4,
+    mk_scapy_crypt_key,
+    config_tun_params,
+)
 from test_ipsec_tun_if_esp import TemplateIpsecItf4
 from vpp_ipsec import VppIpsecSA, VppIpsecTunProtect, VppIpsecInterface
 
 from test_ipsec_tun_if_esp import TemplateIpsecItf4
 from vpp_ipsec import VppIpsecSA, VppIpsecTunProtect, VppIpsecInterface
 
@@ -25,39 +35,43 @@ class VppLcpPair(VppObject):
         self.host = host
 
     def add_vpp_config(self):
         self.host = host
 
     def add_vpp_config(self):
-        self._test.vapi.cli("test lcp add phy %s host %s" %
-                            (self.phy, self.host))
+        self._test.vapi.cli("test lcp add phy %s host %s" % (self.phy, self.host))
         self._test.registry.register(self, self._test.logger)
         return self
 
     def remove_vpp_config(self):
         self._test.registry.register(self, self._test.logger)
         return self
 
     def remove_vpp_config(self):
-        self._test.vapi.cli("test lcp del phy %s host %s" %
-                            (self.phy, self.host))
+        self._test.vapi.cli("test lcp del phy %s host %s" % (self.phy, self.host))
 
     def object_id(self):
 
     def object_id(self):
-        return "lcp:%d:%d" % (self.phy.sw_if_index,
-                              self.host.sw_if_index)
+        return "lcp:%d:%d" % (self.phy.sw_if_index, self.host.sw_if_index)
 
     def query_vpp_config(self):
 
     def query_vpp_config(self):
-        pairs = list(self._test.vapi.vpp.details_iter(
-            self._test.vapi.lcp_itf_pair_get))
+        pairs = list(self._test.vapi.vpp.details_iter(self._test.vapi.lcp_itf_pair_get))
 
         for p in pairs:
 
         for p in pairs:
-            if p.phy_sw_if_index == self.phy.sw_if_index and \
-               p.host_sw_if_index == self.host.sw_if_index:
+            if (
+                p.phy_sw_if_index == self.phy.sw_if_index
+                and p.host_sw_if_index == self.host.sw_if_index
+            ):
                 return True
         return False
 
 
 class TestLinuxCP(VppTestCase):
                 return True
         return False
 
 
 class TestLinuxCP(VppTestCase):
-    """ Linux Control Plane """
-
-    extra_vpp_plugin_config = ["plugin",
-                               "linux_cp_plugin.so",
-                               "{", "enable", "}",
-                               "plugin",
-                               "linux_cp_unittest_plugin.so",
-                               "{", "enable", "}"]
+    """Linux Control Plane"""
+
+    extra_vpp_plugin_config = [
+        "plugin",
+        "linux_cp_plugin.so",
+        "{",
+        "enable",
+        "}",
+        "plugin",
+        "linux_cp_unittest_plugin.so",
+        "{",
+        "enable",
+        "}",
+    ]
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -86,7 +100,7 @@ class TestLinuxCP(VppTestCase):
         super(TestLinuxCP, self).tearDown()
 
     def test_linux_cp_tap(self):
         super(TestLinuxCP, self).tearDown()
 
     def test_linux_cp_tap(self):
-        """ Linux CP TAP """
+        """Linux CP TAP"""
 
         #
         # Setup
 
         #
         # Setup
@@ -117,12 +131,12 @@ class TestLinuxCP(VppTestCase):
         # hosts to phys
         for phy, host in zip(phys, hosts):
             for j in range(N_HOSTS):
         # hosts to phys
         for phy, host in zip(phys, hosts):
             for j in range(N_HOSTS):
-                p = (Ether(src=phy.local_mac,
-                           dst=phy.remote_hosts[j].mac) /
-                     IP(src=phy.local_ip4,
-                        dst=phy.remote_hosts[j].ip4) /
-                     UDP(sport=1234, dport=1234) /
-                     Raw())
+                p = (
+                    Ether(src=phy.local_mac, dst=phy.remote_hosts[j].mac)
+                    / IP(src=phy.local_ip4, dst=phy.remote_hosts[j].ip4)
+                    / UDP(sport=1234, dport=1234)
+                    / Raw()
+                )
 
                 rxs = self.send_and_expect(host, [p], phy)
 
 
                 rxs = self.send_and_expect(host, [p], phy)
 
@@ -131,13 +145,13 @@ class TestLinuxCP(VppTestCase):
                     self.assertEqual(p.show2(True), rx.show2(True))
 
                 # ARPs x-connect to phy
                     self.assertEqual(p.show2(True), rx.show2(True))
 
                 # ARPs x-connect to phy
-                p = (Ether(dst="ff:ff:ff:ff:ff:ff",
-                           src=phy.remote_hosts[j].mac) /
-                     ARP(op="who-has",
-                         hwdst=phy.remote_hosts[j].mac,
-                         hwsrc=phy.local_mac,
-                         psrc=phy.local_ip4,
-                         pdst=phy.remote_hosts[j].ip4))
+                p = Ether(dst="ff:ff:ff:ff:ff:ff", src=phy.remote_hosts[j].mac) / ARP(
+                    op="who-has",
+                    hwdst=phy.remote_hosts[j].mac,
+                    hwsrc=phy.local_mac,
+                    psrc=phy.local_ip4,
+                    pdst=phy.remote_hosts[j].ip4,
+                )
 
                 rxs = self.send_and_expect(host, [p], phy)
 
 
                 rxs = self.send_and_expect(host, [p], phy)
 
@@ -148,12 +162,12 @@ class TestLinuxCP(VppTestCase):
         # phy to host
         for phy, host in zip(phys, hosts):
             for j in range(N_HOSTS):
         # phy to host
         for phy, host in zip(phys, hosts):
             for j in range(N_HOSTS):
-                p = (Ether(dst=phy.local_mac,
-                           src=phy.remote_hosts[j].mac) /
-                     IP(dst=phy.local_ip4,
-                        src=phy.remote_hosts[j].ip4) /
-                     UDP(sport=1234, dport=1234) /
-                     Raw())
+                p = (
+                    Ether(dst=phy.local_mac, src=phy.remote_hosts[j].mac)
+                    / IP(dst=phy.local_ip4, src=phy.remote_hosts[j].ip4)
+                    / UDP(sport=1234, dport=1234)
+                    / Raw()
+                )
 
                 rxs = self.send_and_expect(phy, [p], host)
 
 
                 rxs = self.send_and_expect(phy, [p], host)
 
@@ -162,13 +176,13 @@ class TestLinuxCP(VppTestCase):
                     self.assertEqual(p.show2(True), rx.show2(True))
 
                 # ARPs rx'd on the phy are sent to the host
                     self.assertEqual(p.show2(True), rx.show2(True))
 
                 # ARPs rx'd on the phy are sent to the host
-                p = (Ether(dst="ff:ff:ff:ff:ff:ff",
-                           src=phy.remote_hosts[j].mac) /
-                     ARP(op="is-at",
-                         hwsrc=phy.remote_hosts[j].mac,
-                         hwdst=phy.local_mac,
-                         pdst=phy.local_ip4,
-                         psrc=phy.remote_hosts[j].ip4))
+                p = Ether(dst="ff:ff:ff:ff:ff:ff", src=phy.remote_hosts[j].mac) / ARP(
+                    op="is-at",
+                    hwsrc=phy.remote_hosts[j].mac,
+                    hwdst=phy.local_mac,
+                    pdst=phy.local_ip4,
+                    psrc=phy.remote_hosts[j].ip4,
+                )
 
                 rxs = self.send_and_expect(phy, [p], host)
 
 
                 rxs = self.send_and_expect(phy, [p], host)
 
@@ -181,7 +195,7 @@ class TestLinuxCP(VppTestCase):
             phy.unconfig_ip4()
 
     def test_linux_cp_tun(self):
             phy.unconfig_ip4()
 
     def test_linux_cp_tun(self):
-        """ Linux CP TUN """
+        """Linux CP TUN"""
 
         #
         # Setup
 
         #
         # Setup
@@ -198,15 +212,11 @@ class TestLinuxCP(VppTestCase):
         phy.resolve_ndp()
 
         tun4 = VppIpIpTunInterface(
         phy.resolve_ndp()
 
         tun4 = VppIpIpTunInterface(
-            self,
-            phy,
-            phy.local_ip4,
-            phy.remote_ip4).add_vpp_config()
+            self, phy, phy.local_ip4, phy.remote_ip4
+        ).add_vpp_config()
         tun6 = VppIpIpTunInterface(
         tun6 = VppIpIpTunInterface(
-            self,
-            phy,
-            phy.local_ip6,
-            phy.remote_ip6).add_vpp_config()
+            self, phy, phy.local_ip6, phy.remote_ip6
+        ).add_vpp_config()
         tuns = [tun4, tun6]
 
         tun4.admin_up()
         tuns = [tun4, tun6]
 
         tun4.admin_up()
@@ -226,9 +236,7 @@ class TestLinuxCP(VppTestCase):
         #
 
         # host to phy for v4
         #
 
         # host to phy for v4
-        p = (IP(src=tun4.local_ip4, dst="2.2.2.2") /
-             UDP(sport=1234, dport=1234) /
-             Raw())
+        p = IP(src=tun4.local_ip4, dst="2.2.2.2") / UDP(sport=1234, dport=1234) / Raw()
 
         rxs = self.send_and_expect(self.pg4, p * N_PKTS, phy)
 
 
         rxs = self.send_and_expect(self.pg4, p * N_PKTS, phy)
 
@@ -242,9 +250,7 @@ class TestLinuxCP(VppTestCase):
             self.assertEqual(inner.dst, "2.2.2.2")
 
         # host to phy for v6
             self.assertEqual(inner.dst, "2.2.2.2")
 
         # host to phy for v6
-        p = (IPv6(src=tun6.local_ip6, dst="2::2") /
-             UDP(sport=1234, dport=1234) /
-             Raw())
+        p = IPv6(src=tun6.local_ip6, dst="2::2") / UDP(sport=1234, dport=1234) / Raw()
 
         rxs = self.send_and_expect(self.pg5, p * N_PKTS, phy)
 
 
         rxs = self.send_and_expect(self.pg5, p * N_PKTS, phy)
 
@@ -257,11 +263,13 @@ class TestLinuxCP(VppTestCase):
             self.assertEqual(inner.dst, "2::2")
 
         # phy to host v4
             self.assertEqual(inner.dst, "2::2")
 
         # phy to host v4
-        p = (Ether(dst=phy.local_mac, src=phy.remote_mac) /
-             IP(dst=phy.local_ip4, src=phy.remote_ip4) /
-             IP(dst=tun4.local_ip4, src=tun4.remote_ip4) /
-             UDP(sport=1234, dport=1234) /
-             Raw())
+        p = (
+            Ether(dst=phy.local_mac, src=phy.remote_mac)
+            / IP(dst=phy.local_ip4, src=phy.remote_ip4)
+            / IP(dst=tun4.local_ip4, src=tun4.remote_ip4)
+            / UDP(sport=1234, dport=1234)
+            / Raw()
+        )
 
         rxs = self.send_and_expect(phy, p * N_PKTS, self.pg4)
         for rx in rxs:
 
         rxs = self.send_and_expect(phy, p * N_PKTS, self.pg4)
         for rx in rxs:
@@ -270,11 +278,13 @@ class TestLinuxCP(VppTestCase):
             self.assertEqual(rx[IP].src, tun4.remote_ip4)
 
         # phy to host v6
             self.assertEqual(rx[IP].src, tun4.remote_ip4)
 
         # phy to host v6
-        p = (Ether(dst=phy.local_mac, src=phy.remote_mac) /
-             IPv6(dst=phy.local_ip6, src=phy.remote_ip6) /
-             IPv6(dst=tun6.local_ip6, src=tun6.remote_ip6) /
-             UDP(sport=1234, dport=1234) /
-             Raw())
+        p = (
+            Ether(dst=phy.local_mac, src=phy.remote_mac)
+            / IPv6(dst=phy.local_ip6, src=phy.remote_ip6)
+            / IPv6(dst=tun6.local_ip6, src=tun6.remote_ip6)
+            / UDP(sport=1234, dport=1234)
+            / Raw()
+        )
 
         rxs = self.send_and_expect(phy, p * N_PKTS, self.pg5)
         for rx in rxs:
 
         rxs = self.send_and_expect(phy, p * N_PKTS, self.pg5)
         for rx in rxs:
@@ -290,17 +300,21 @@ class TestLinuxCP(VppTestCase):
         tun6.unconfig_ip6()
 
 
         tun6.unconfig_ip6()
 
 
-class TestLinuxCPIpsec(TemplateIpsec,
-                       TemplateIpsecItf4,
-                       IpsecTun4):
-    """ IPsec Interface IPv4 """
+class TestLinuxCPIpsec(TemplateIpsec, TemplateIpsecItf4, IpsecTun4):
+    """IPsec Interface IPv4"""
 
 
-    extra_vpp_plugin_config = ["plugin",
-                               "linux_cp_plugin.so",
-                               "{", "enable", "}",
-                               "plugin",
-                               "linux_cp_unittest_plugin.so",
-                               "{", "enable", "}"]
+    extra_vpp_plugin_config = [
+        "plugin",
+        "linux_cp_plugin.so",
+        "{",
+        "enable",
+        "}",
+        "plugin",
+        "linux_cp_unittest_plugin.so",
+        "{",
+        "enable",
+        "}",
+    ]
 
     def setUp(self):
         super(TestLinuxCPIpsec, self).setUp()
 
     def setUp(self):
         super(TestLinuxCPIpsec, self).setUp()
@@ -347,16 +361,19 @@ class TestLinuxCPIpsec(TemplateIpsec,
             self.assert_equal(rx[IP].dst, p.tun_if.local_ip4)
             self.assert_packet_checksums_valid(rx)
 
             self.assert_equal(rx[IP].dst, p.tun_if.local_ip4)
             self.assert_packet_checksums_valid(rx)
 
-    def gen_encrypt_pkts(self, p, sa, sw_intf, src, dst, count=1,
-                         payload_size=54):
-        return [Ether(src=sw_intf.remote_mac, dst=sw_intf.local_mac) /
-                sa.encrypt(IP(src=src, dst=dst) /
-                           UDP(sport=1111, dport=2222) /
-                           Raw(b'X' * payload_size))
-                for i in range(count)]
+    def gen_encrypt_pkts(self, p, sa, sw_intf, src, dst, count=1, payload_size=54):
+        return [
+            Ether(src=sw_intf.remote_mac, dst=sw_intf.local_mac)
+            / sa.encrypt(
+                IP(src=src, dst=dst)
+                / UDP(sport=1111, dport=2222)
+                / Raw(b"X" * payload_size)
+            )
+            for i in range(count)
+        ]
 
     def test_linux_cp_ipsec4_tun(self):
 
     def test_linux_cp_ipsec4_tun(self):
-        """ Linux CP Ipsec TUN """
+        """Linux CP Ipsec TUN"""
 
         #
         # Setup
 
         #
         # Setup
@@ -370,9 +387,7 @@ class TestLinuxCPIpsec(TemplateIpsec,
         p = self.ipv4_params
 
         self.config_network(p)
         p = self.ipv4_params
 
         self.config_network(p)
-        self.config_sa_tun(p,
-                           self.pg0.local_ip4,
-                           self.pg0.remote_ip4)
+        self.config_sa_tun(p, self.pg0.local_ip4, self.pg0.remote_ip4)
         self.config_protect(p)
 
         pair = VppLcpPair(self, p.tun_if, self.host).add_vpp_config()
         self.config_protect(p)
 
         pair = VppLcpPair(self, p.tun_if, self.host).add_vpp_config()
@@ -386,19 +401,24 @@ class TestLinuxCPIpsec(TemplateIpsec,
         #
 
         # host to phy for v4
         #
 
         # host to phy for v4
-        pkt = (IP(src=p.tun_if.local_ip4,
-                  dst=p.tun_if.remote_ip4) /
-               UDP(sport=1234, dport=1234) /
-               Raw())
+        pkt = (
+            IP(src=p.tun_if.local_ip4, dst=p.tun_if.remote_ip4)
+            / UDP(sport=1234, dport=1234)
+            / Raw()
+        )
 
         rxs = self.send_and_expect(self.host, pkt * N_PKTS, self.tun_if)
         self.verify_encrypted(p, p.vpp_tun_sa, rxs)
 
         # phy to host for v4
 
         rxs = self.send_and_expect(self.host, pkt * N_PKTS, self.tun_if)
         self.verify_encrypted(p, p.vpp_tun_sa, rxs)
 
         # phy to host for v4
-        pkts = self.gen_encrypt_pkts(p, p.scapy_tun_sa, self.tun_if,
-                                     src=p.tun_if.remote_ip4,
-                                     dst=p.tun_if.local_ip4,
-                                     count=N_PKTS)
+        pkts = self.gen_encrypt_pkts(
+            p,
+            p.scapy_tun_sa,
+            self.tun_if,
+            src=p.tun_if.remote_ip4,
+            dst=p.tun_if.local_ip4,
+            count=N_PKTS,
+        )
         rxs = self.send_and_expect(self.tun_if, pkts, self.host)
         self.verify_decrypted(p, rxs)
 
         rxs = self.send_and_expect(self.tun_if, pkts, self.host)
         self.verify_decrypted(p, rxs)
 
@@ -409,5 +429,5 @@ class TestLinuxCPIpsec(TemplateIpsec,
         self.unconfig_network(p)
 
 
         self.unconfig_network(p)
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index 0a6e752..5ff9de1 100644 (file)
@@ -9,8 +9,14 @@ from scapy.layers.inet import IP, UDP, Ether
 from scapy.layers.inet6 import IPv6
 
 from framework import VppTestCase, VppTestRunner
 from scapy.layers.inet6 import IPv6
 
 from framework import VppTestCase, VppTestRunner
-from lisp import VppLocalMapping, VppLispAdjacency, VppLispLocator, \
-    VppLispLocatorSet, VppRemoteMapping, LispRemoteLocator
+from lisp import (
+    VppLocalMapping,
+    VppLispAdjacency,
+    VppLispLocator,
+    VppLispLocatorSet,
+    VppRemoteMapping,
+    LispRemoteLocator,
+)
 from util import ppp
 
 # From py_lispnetworking.lisp.py:  # GNU General Public License v2.0
 from util import ppp
 
 # From py_lispnetworking.lisp.py:  # GNU General Public License v2.0
@@ -24,6 +30,8 @@ class LISP_GPE_Header(Packet):
         ByteField("next_proto", 0),
         IntField("iid", 0),
     ]
         ByteField("next_proto", 0),
         IntField("iid", 0),
     ]
+
+
 bind_layers(UDP, LISP_GPE_Header, dport=4341)
 bind_layers(UDP, LISP_GPE_Header, sport=4341)
 bind_layers(LISP_GPE_Header, IP, next_proto=1)
 bind_layers(UDP, LISP_GPE_Header, dport=4341)
 bind_layers(UDP, LISP_GPE_Header, sport=4341)
 bind_layers(LISP_GPE_Header, IP, next_proto=1)
@@ -34,8 +42,8 @@ bind_layers(LISP_GPE_Header, Ether, next_proto=3)
 class ForeignAddressFactory(object):
     count = 0
     prefix_len = 24
 class ForeignAddressFactory(object):
     count = 0
     prefix_len = 24
-    net_template = '10.10.10.{}'
-    net = net_template.format(0) + '/' + str(prefix_len)
+    net_template = "10.10.10.{}"
+    net = net_template.format(0) + "/" + str(prefix_len)
 
     def get_ip4(self):
         if self.count > 255:
 
     def get_ip4(self):
         if self.count > 255:
@@ -46,13 +54,16 @@ class ForeignAddressFactory(object):
 
 class Driver(metaclass=abc.ABCMeta):
 
 
 class Driver(metaclass=abc.ABCMeta):
 
-    config_order = ['locator-sets',
-                    'locators',
-                    'local-mappings',
-                    'remote-mappings',
-                    'adjacencies']
+    config_order = [
+        "locator-sets",
+        "locators",
+        "local-mappings",
+        "remote-mappings",
+        "adjacencies",
+    ]
 
     """ Basic class for data driven testing """
 
     """ Basic class for data driven testing """
+
     def __init__(self, test, test_cases):
         self._test_cases = test_cases
         self._test = test
     def __init__(self, test, test_cases):
         self._test_cases = test_cases
         self._test = test
@@ -65,26 +76,29 @@ class Driver(metaclass=abc.ABCMeta):
     def test(self):
         return self._test
 
     def test(self):
         return self._test
 
-    def create_packet(self, src_if, dst_if, deid, payload=''):
+    def create_packet(self, src_if, dst_if, deid, payload=""):
         """
         Create IPv4 packet
 
         param: src_if
         param: dst_if
         """
         """
         Create IPv4 packet
 
         param: src_if
         param: dst_if
         """
-        packet = (Ether(dst=src_if.local_mac, src=src_if.remote_mac) /
-                  IP(src=src_if.remote_ip4, dst=deid) /
-                  Raw(payload))
+        packet = (
+            Ether(dst=src_if.local_mac, src=src_if.remote_mac)
+            / IP(src=src_if.remote_ip4, dst=deid)
+            / Raw(payload)
+        )
         return packet
 
     @abc.abstractmethod
     def run(self):
         return packet
 
     @abc.abstractmethod
     def run(self):
-        """ testing procedure """
+        """testing procedure"""
         pass
 
 
 class SimpleDriver(Driver):
         pass
 
 
 class SimpleDriver(Driver):
-    """ Implements simple test procedure """
+    """Implements simple test procedure"""
+
     def __init__(self, test, test_cases):
         super(SimpleDriver, self).__init__(test, test_cases)
 
     def __init__(self, test, test_cases):
         super(SimpleDriver, self).__init__(test, test_cases)
 
@@ -96,27 +110,27 @@ class SimpleDriver(Driver):
         :param dst_loc: destination locator address
         :param capture: list of captured packets
         """
         :param dst_loc: destination locator address
         :param capture: list of captured packets
         """
-        self.test.assertEqual(len(capture), 1, "Unexpected number of "
-                              "packets! Expected 1 but {} received"
-                              .format(len(capture)))
+        self.test.assertEqual(
+            len(capture),
+            1,
+            "Unexpected number of "
+            "packets! Expected 1 but {} received".format(len(capture)),
+        )
         packet = capture[0]
         try:
             ip_hdr = packet[IP]
             # assert the values match
             self.test.assertEqual(ip_hdr.src, src_loc, "IP source address")
         packet = capture[0]
         try:
             ip_hdr = packet[IP]
             # assert the values match
             self.test.assertEqual(ip_hdr.src, src_loc, "IP source address")
-            self.test.assertEqual(ip_hdr.dst, dst_loc,
-                                  "IP destination address")
+            self.test.assertEqual(ip_hdr.dst, dst_loc, "IP destination address")
             gpe_hdr = packet[LISP_GPE_Header]
             gpe_hdr = packet[LISP_GPE_Header]
-            self.test.assertEqual(gpe_hdr.next_proto, 1,
-                                  "next_proto is not ipv4!")
+            self.test.assertEqual(gpe_hdr.next_proto, 1, "next_proto is not ipv4!")
             ih = gpe_hdr[IP]
             ih = gpe_hdr[IP]
-            self.test.assertEqual(ih.src, self.test.pg0.remote_ip4,
-                                  "unexpected source EID!")
-            self.test.assertEqual(ih.dst, self.test.deid_ip4,
-                                  "unexpected dest EID!")
+            self.test.assertEqual(
+                ih.src, self.test.pg0.remote_ip4, "unexpected source EID!"
+            )
+            self.test.assertEqual(ih.dst, self.test.deid_ip4, "unexpected dest EID!")
         except:
         except:
-            self.test.logger.error(ppp("Unexpected or invalid packet:",
-                                   packet))
+            self.test.logger.error(ppp("Unexpected or invalid packet:", packet))
             raise
 
     def configure_tc(self, tc):
             raise
 
     def configure_tc(self, tc):
@@ -125,26 +139,26 @@ class SimpleDriver(Driver):
                 vpp_object.add_vpp_config()
 
     def run(self, dest):
                 vpp_object.add_vpp_config()
 
     def run(self, dest):
-        """ Send traffic for each test case and verify that it
-            is encapsulated """
+        """Send traffic for each test case and verify that it
+        is encapsulated"""
         for tc in enumerate(self.test_cases):
         for tc in enumerate(self.test_cases):
-            self.test.logger.info('Running {}'.format(tc[1]['name']))
+            self.test.logger.info("Running {}".format(tc[1]["name"]))
             self.configure_tc(tc[1])
 
             self.configure_tc(tc[1])
 
-            packet = self.create_packet(self.test.pg0, self.test.pg1, dest,
-                                        'data')
+            packet = self.create_packet(self.test.pg0, self.test.pg1, dest, "data")
             self.test.pg0.add_stream(packet)
             self.test.pg0.enable_capture()
             self.test.pg1.enable_capture()
             self.test.pg_start()
             capture = self.test.pg1.get_capture(1)
             self.test.pg0.add_stream(packet)
             self.test.pg0.enable_capture()
             self.test.pg1.enable_capture()
             self.test.pg_start()
             capture = self.test.pg1.get_capture(1)
-            self.verify_capture(self.test.pg1.local_ip4,
-                                self.test.pg1.remote_ip4, capture)
+            self.verify_capture(
+                self.test.pg1.local_ip4, self.test.pg1.remote_ip4, capture
+            )
             self.test.pg0.assert_nothing_captured()
 
 
 class TestLisp(VppTestCase):
             self.test.pg0.assert_nothing_captured()
 
 
 class TestLisp(VppTestCase):
-    """ Basic LISP test """
+    """Basic LISP test"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -169,26 +183,23 @@ class TestLisp(VppTestCase):
 
         self.deid_ip4_net = self.faf.net
         self.deid_ip4 = self.faf.get_ip4()
 
         self.deid_ip4_net = self.faf.net
         self.deid_ip4 = self.faf.get_ip4()
-        self.seid_ip4 = '{!s}/{!s}'.format(self.pg0.local_ip4, 32)
+        self.seid_ip4 = "{!s}/{!s}".format(self.pg0.local_ip4, 32)
         self.rloc_ip4 = self.pg1.remote_ip4
 
         test_cases = [
             {
         self.rloc_ip4 = self.pg1.remote_ip4
 
         test_cases = [
             {
-                'name': 'basic ip4 over ip4',
-                'locator-sets': [VppLispLocatorSet(self, 'ls-4o4')],
-                'locators': [
-                    VppLispLocator(self, self.pg1.sw_if_index, 'ls-4o4')
-                ],
-                'local-mappings': [
-                    VppLocalMapping(self, self.seid_ip4, 'ls-4o4')
+                "name": "basic ip4 over ip4",
+                "locator-sets": [VppLispLocatorSet(self, "ls-4o4")],
+                "locators": [VppLispLocator(self, self.pg1.sw_if_index, "ls-4o4")],
+                "local-mappings": [VppLocalMapping(self, self.seid_ip4, "ls-4o4")],
+                "remote-mappings": [
+                    VppRemoteMapping(
+                        self, self.deid_ip4_net, [LispRemoteLocator(self.rloc_ip4)]
+                    )
                 ],
                 ],
-                'remote-mappings': [
-                    VppRemoteMapping(self, self.deid_ip4_net,
-                                     [LispRemoteLocator(self.rloc_ip4)])
-                ],
-                'adjacencies': [
+                "adjacencies": [
                     VppLispAdjacency(self, self.seid_ip4, self.deid_ip4_net)
                     VppLispAdjacency(self, self.seid_ip4, self.deid_ip4_net)
-                ]
+                ],
             }
         ]
         self.test_driver = SimpleDriver(self, test_cases)
             }
         ]
         self.test_driver = SimpleDriver(self, test_cases)
@@ -196,7 +207,7 @@ class TestLisp(VppTestCase):
 
 
 class TestLispUT(VppTestCase):
 
 
 class TestLispUT(VppTestCase):
-    """ Lisp UT """
+    """Lisp UT"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -207,7 +218,7 @@ class TestLispUT(VppTestCase):
         super(TestLispUT, cls).tearDownClass()
 
     def test_fib(self):
         super(TestLispUT, cls).tearDownClass()
 
     def test_fib(self):
-        """ LISP Unit Tests """
+        """LISP Unit Tests"""
         error = self.vapi.cli("test lisp cp")
 
         if error:
         error = self.vapi.cli("test lisp cp")
 
         if error:
@@ -215,5 +226,5 @@ class TestLispUT(VppTestCase):
         self.assertNotIn("Failed", error)
 
 
         self.assertNotIn("Failed", error)
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index 1eaeeb5..a9f981e 100644 (file)
@@ -8,7 +8,7 @@ from vpp_ip_route import VppIpTable, VppIpRoute, VppRoutePath
 
 
 class TestMactime(VppTestCase):
 
 
 class TestMactime(VppTestCase):
-    """ Mactime Unit Test Cases """
+    """Mactime Unit Test Cases"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -25,137 +25,140 @@ class TestMactime(VppTestCase):
         super(TestMactime, self).tearDown()
 
     def test_mactime_range_unittest(self):
         super(TestMactime, self).tearDown()
 
     def test_mactime_range_unittest(self):
-        """ Time Range Test """
+        """Time Range Test"""
         error = self.vapi.cli("test time-range")
 
         if error:
             self.logger.critical(error)
         error = self.vapi.cli("test time-range")
 
         if error:
             self.logger.critical(error)
-        self.assertNotIn('FAILED', error)
+        self.assertNotIn("FAILED", error)
 
     @unittest.skipUnless(config.gcov, "part of code coverage tests")
     def test_mactime_unittest(self):
 
     @unittest.skipUnless(config.gcov, "part of code coverage tests")
     def test_mactime_unittest(self):
-        """ Mactime Plugin Code Coverage Test """
-        cmds = ["loopback create",
-                "mactime enable-disable disable",
-                "mactime enable-disable loop0",
-                "mactime enable-disable loop0 disable",
-                "mactime enable-disable sw_if_index 9999",
-                "bin mactime_enable_disable loop0",
-                "bin mactime_enable_disable loop0 disable",
-                "bin mactime_enable_disable sw_if_index 1",
-                "set interface state loop0 up",
-                "clear mactime",
-                "set ip neighbor loop0 192.168.1.1 00:d0:2d:5e:86:85",
-                "bin mactime_add_del_range name sallow "
-                "mac 00:d0:2d:5e:86:85 allow-static del",
-                "bin mactime_add_del_range name sallow "
-                "mac 00:d0:2d:5e:86:85 allow-static",
-                "bin mactime_add_del_range name sallow "
-                "mac 00:d0:2d:5e:86:85 allow-static del",
-                "bin mactime_add_del_range name sallow "
-                "mac 00:d0:2d:5e:86:85 allow-static",
-                "bin mactime_add_del_range name sblock "
-                "mac 01:00:5e:7f:ff:fa drop-static",
-                "bin mactime_add_del_range name ddrop "
-                "mac c8:bc:c8:5a:ba:f3 drop-range Sun - Sat "
-                "00:00 - 23:59",
-                "bin mactime_add_del_range name dallow "
-                "mac c8:bc:c8:5a:ba:f4 allow-range Sun - Sat "
-                "00:00 - 23:59",
-                "bin mactime_add_del_range name multi "
-                "mac c8:bc:c8:f0:f0:f0 allow-range Sun - Mon "
-                "00:00 - 23:59 Tue - Sat 00:00 - 23:59",
-                "bin mactime_add_del_range bogus",
-                "bin mactime_add_del_range mac 01:00:5e:7f:f0:f0 allow-static",
-                "bin mactime_add_del_range "
-                "name tooloooooooooooooooooooooooooooooooooooooooooooooooo"
-                "nnnnnnnnnnnnnnnnnnnnnnnnnnnng mac 00:00:de:ad:be:ef "
-                "allow-static",
-                "packet-generator new {\n"
-                " name allow\n"
-                " limit 15\n"
-                " size 128-128\n"
-                " interface loop0\n"
-                " node ethernet-input\n"
-                " data {\n"
-                "   IP6: 00:d0:2d:5e:86:85 -> 00:0d:ea:d0:00:00\n"
-                "   ICMP: db00::1 -> db00::2\n"
-                "   incrementing 30\n"
-                "   }\n",
-                "}\n",
-                "packet-generator new {\n"
-                " name deny\n"
-                " limit 15\n"
-                " size 128-128\n"
-                " interface loop0\n"
-                " node ethernet-input\n"
-                " data {\n"
-                "   IP6: 01:00:5e:7f:ff:fa -> 00:0d:ea:d0:00:00\n"
-                "   ICMP: db00::1 -> db00::2\n"
-                "   incrementing 30\n"
-                "   }\n",
-                "}\n",
-                "packet-generator new {\n"
-                " name ddrop\n"
-                " limit 15\n"
-                " size 128-128\n"
-                " interface loop0\n"
-                " node ethernet-input\n"
-                " data {\n"
-                "   IP6: c8:bc:c8:5a:ba:f3 -> 00:0d:ea:d0:00:00\n"
-                "   ICMP: db00::1 -> db00::2\n"
-                "   incrementing 30\n"
-                "   }\n",
-                "}\n",
-                "packet-generator new {\n"
-                " name dallow\n"
-                " limit 15\n"
-                " size 128-128\n"
-                " interface loop0\n"
-                " node ethernet-input\n"
-                " data {\n"
-                "   IP6: c8:bc:c8:5a:ba:f4 -> 00:0d:ea:d0:00:00\n"
-                "   ICMP: db00::1 -> db00::2\n"
-                "   incrementing 30\n"
-                "   }\n"
-                "}\n"
-                "packet-generator new {\n"
-                " name makeentry\n"
-                " limit 15\n"
-                " size 128-128\n"
-                " interface loop0\n"
-                " node ethernet-input\n"
-                " data {\n"
-                "   IP6: c8:bc:c8:5a:b0:0b -> 00:0d:ea:d0:00:00\n"
-                "   ICMP: db00::1 -> db00::2\n"
-                "   incrementing 30\n"
-                "   }\n"
-                "}\n"
-                "packet-generator new {\n"
-                " name tx\n"
-                " limit 15\n"
-                " size 128-128\n"
-                " interface local0\n"
-                " tx-interface loop0\n"
-                " node loop0-output\n"
-                " data {\n"
-                "   hex 0x01005e7ffffa000dead000000800"
-                "0102030405060708090a0b0c0d0e0f0102030405\n"
-                "   }\n"
-                "}\n"
-                "trace add pg-input 2",
-                "pa en",
-                "show mactime verbose 2",
-                "show trace",
-                "show error"]
+        """Mactime Plugin Code Coverage Test"""
+        cmds = [
+            "loopback create",
+            "mactime enable-disable disable",
+            "mactime enable-disable loop0",
+            "mactime enable-disable loop0 disable",
+            "mactime enable-disable sw_if_index 9999",
+            "bin mactime_enable_disable loop0",
+            "bin mactime_enable_disable loop0 disable",
+            "bin mactime_enable_disable sw_if_index 1",
+            "set interface state loop0 up",
+            "clear mactime",
+            "set ip neighbor loop0 192.168.1.1 00:d0:2d:5e:86:85",
+            "bin mactime_add_del_range name sallow "
+            "mac 00:d0:2d:5e:86:85 allow-static del",
+            "bin mactime_add_del_range name sallow "
+            "mac 00:d0:2d:5e:86:85 allow-static",
+            "bin mactime_add_del_range name sallow "
+            "mac 00:d0:2d:5e:86:85 allow-static del",
+            "bin mactime_add_del_range name sallow "
+            "mac 00:d0:2d:5e:86:85 allow-static",
+            "bin mactime_add_del_range name sblock "
+            "mac 01:00:5e:7f:ff:fa drop-static",
+            "bin mactime_add_del_range name ddrop "
+            "mac c8:bc:c8:5a:ba:f3 drop-range Sun - Sat "
+            "00:00 - 23:59",
+            "bin mactime_add_del_range name dallow "
+            "mac c8:bc:c8:5a:ba:f4 allow-range Sun - Sat "
+            "00:00 - 23:59",
+            "bin mactime_add_del_range name multi "
+            "mac c8:bc:c8:f0:f0:f0 allow-range Sun - Mon "
+            "00:00 - 23:59 Tue - Sat 00:00 - 23:59",
+            "bin mactime_add_del_range bogus",
+            "bin mactime_add_del_range mac 01:00:5e:7f:f0:f0 allow-static",
+            "bin mactime_add_del_range "
+            "name tooloooooooooooooooooooooooooooooooooooooooooooooooo"
+            "nnnnnnnnnnnnnnnnnnnnnnnnnnnng mac 00:00:de:ad:be:ef "
+            "allow-static",
+            "packet-generator new {\n"
+            " name allow\n"
+            " limit 15\n"
+            " size 128-128\n"
+            " interface loop0\n"
+            " node ethernet-input\n"
+            " data {\n"
+            "   IP6: 00:d0:2d:5e:86:85 -> 00:0d:ea:d0:00:00\n"
+            "   ICMP: db00::1 -> db00::2\n"
+            "   incrementing 30\n"
+            "   }\n",
+            "}\n",
+            "packet-generator new {\n"
+            " name deny\n"
+            " limit 15\n"
+            " size 128-128\n"
+            " interface loop0\n"
+            " node ethernet-input\n"
+            " data {\n"
+            "   IP6: 01:00:5e:7f:ff:fa -> 00:0d:ea:d0:00:00\n"
+            "   ICMP: db00::1 -> db00::2\n"
+            "   incrementing 30\n"
+            "   }\n",
+            "}\n",
+            "packet-generator new {\n"
+            " name ddrop\n"
+            " limit 15\n"
+            " size 128-128\n"
+            " interface loop0\n"
+            " node ethernet-input\n"
+            " data {\n"
+            "   IP6: c8:bc:c8:5a:ba:f3 -> 00:0d:ea:d0:00:00\n"
+            "   ICMP: db00::1 -> db00::2\n"
+            "   incrementing 30\n"
+            "   }\n",
+            "}\n",
+            "packet-generator new {\n"
+            " name dallow\n"
+            " limit 15\n"
+            " size 128-128\n"
+            " interface loop0\n"
+            " node ethernet-input\n"
+            " data {\n"
+            "   IP6: c8:bc:c8:5a:ba:f4 -> 00:0d:ea:d0:00:00\n"
+            "   ICMP: db00::1 -> db00::2\n"
+            "   incrementing 30\n"
+            "   }\n"
+            "}\n"
+            "packet-generator new {\n"
+            " name makeentry\n"
+            " limit 15\n"
+            " size 128-128\n"
+            " interface loop0\n"
+            " node ethernet-input\n"
+            " data {\n"
+            "   IP6: c8:bc:c8:5a:b0:0b -> 00:0d:ea:d0:00:00\n"
+            "   ICMP: db00::1 -> db00::2\n"
+            "   incrementing 30\n"
+            "   }\n"
+            "}\n"
+            "packet-generator new {\n"
+            " name tx\n"
+            " limit 15\n"
+            " size 128-128\n"
+            " interface local0\n"
+            " tx-interface loop0\n"
+            " node loop0-output\n"
+            " data {\n"
+            "   hex 0x01005e7ffffa000dead000000800"
+            "0102030405060708090a0b0c0d0e0f0102030405\n"
+            "   }\n"
+            "}\n"
+            "trace add pg-input 2",
+            "pa en",
+            "show mactime verbose 2",
+            "show trace",
+            "show error",
+        ]
 
         for cmd in cmds:
             r = self.vapi.cli_return_response(cmd)
             if r.retval != 0:
 
         for cmd in cmds:
             r = self.vapi.cli_return_response(cmd)
             if r.retval != 0:
-                if hasattr(r, 'reply'):
+                if hasattr(r, "reply"):
                     self.logger.info(cmd + " FAIL reply " + r.reply)
                 else:
                     self.logger.info(cmd + " FAIL retval " + str(r.retval))
 
                     self.logger.info(cmd + " FAIL reply " + r.reply)
                 else:
                     self.logger.info(cmd + " FAIL retval " + str(r.retval))
 
-if __name__ == '__main__':
+
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index 22fe1e1..16e9607 100644 (file)
@@ -12,12 +12,17 @@ import scapy.compat
 from scapy.layers.l2 import Ether
 from scapy.packet import Raw
 from scapy.layers.inet import IP, UDP, ICMP, TCP
 from scapy.layers.l2 import Ether
 from scapy.packet import Raw
 from scapy.layers.inet import IP, UDP, ICMP, TCP
-from scapy.layers.inet6 import IPv6, ICMPv6TimeExceeded, IPv6ExtHdrFragment, \
-    ICMPv6EchoRequest, ICMPv6DestUnreach
+from scapy.layers.inet6 import (
+    IPv6,
+    ICMPv6TimeExceeded,
+    IPv6ExtHdrFragment,
+    ICMPv6EchoRequest,
+    ICMPv6DestUnreach,
+)
 
 
 class TestMAP(VppTestCase):
 
 
 class TestMAP(VppTestCase):
-    """ MAP Test Case """
+    """MAP Test Case"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -69,27 +74,24 @@ class TestMAP(VppTestCase):
             self.assertEqual(rx[IPv6].src, ip6_src)
             self.assertEqual(rx[IPv6].dst, ip6_dst)
 
             self.assertEqual(rx[IPv6].src, ip6_src)
             self.assertEqual(rx[IPv6].dst, ip6_dst)
 
-    def send_and_assert_encapped_one(self, packet, ip6_src, ip6_dst,
-                                     dmac=None):
+    def send_and_assert_encapped_one(self, packet, ip6_src, ip6_dst, dmac=None):
         return self.send_and_assert_encapped([packet], ip6_src, ip6_dst, dmac)
 
     def test_api_map_domain_dump(self):
         return self.send_and_assert_encapped([packet], ip6_src, ip6_dst, dmac)
 
     def test_api_map_domain_dump(self):
-        map_dst = '2001::/64'
-        map_src = '3000::1/128'
-        client_pfx = '192.168.0.0/16'
-        tag = 'MAP-E tag.'
-        index = self.vapi.map_add_domain(ip4_prefix=client_pfx,
-                                         ip6_prefix=map_dst,
-                                         ip6_src=map_src,
-                                         tag=tag).index
+        map_dst = "2001::/64"
+        map_src = "3000::1/128"
+        client_pfx = "192.168.0.0/16"
+        tag = "MAP-E tag."
+        index = self.vapi.map_add_domain(
+            ip4_prefix=client_pfx, ip6_prefix=map_dst, ip6_src=map_src, tag=tag
+        ).index
         rv = self.vapi.map_domain_dump()
 
         # restore the state early so as to not impact subsequent tests.
         # If an assert fails, we will not get the chance to do it at the end.
         self.vapi.map_del_domain(index=index)
 
         rv = self.vapi.map_domain_dump()
 
         # restore the state early so as to not impact subsequent tests.
         # If an assert fails, we will not get the chance to do it at the end.
         self.vapi.map_del_domain(index=index)
 
-        self.assertGreater(len(rv), 0,
-                           "Expected output from 'map_domain_dump'")
+        self.assertGreater(len(rv), 0, "Expected output from 'map_domain_dump'")
 
         # typedefs are returned as ipaddress objects.
         # wrap results in str() ugh! to avoid the need to call unicode.
 
         # typedefs are returned as ipaddress objects.
         # wrap results in str() ugh! to avoid the need to call unicode.
@@ -97,8 +99,7 @@ class TestMAP(VppTestCase):
         self.assertEqual(str(rv[0].ip6_prefix), map_dst)
         self.assertEqual(str(rv[0].ip6_src), map_src)
 
         self.assertEqual(str(rv[0].ip6_prefix), map_dst)
         self.assertEqual(str(rv[0].ip6_src), map_src)
 
-        self.assertEqual(rv[0].tag, tag,
-                         "output produced incorrect tag value.")
+        self.assertEqual(rv[0].tag, tag, "output produced incorrect tag value.")
 
     def create_domains(self, ip4_pfx_str, ip6_pfx_str, ip6_src_str):
         ip4_pfx = ipaddress.ip_network(ip4_pfx_str)
 
     def create_domains(self, ip4_pfx_str, ip6_pfx_str, ip6_src_str):
         ip4_pfx = ipaddress.ip_network(ip4_pfx_str)
@@ -106,24 +107,25 @@ class TestMAP(VppTestCase):
         mod = ip4_pfx.num_addresses / 1024
         indicies = []
         for i in range(ip4_pfx.num_addresses):
         mod = ip4_pfx.num_addresses / 1024
         indicies = []
         for i in range(ip4_pfx.num_addresses):
-            rv = self.vapi.map_add_domain(ip6_prefix=ip6_pfx_str,
-                                          ip4_prefix=str(ip4_pfx[i]) + "/32",
-                                          ip6_src=ip6_src_str)
+            rv = self.vapi.map_add_domain(
+                ip6_prefix=ip6_pfx_str,
+                ip4_prefix=str(ip4_pfx[i]) + "/32",
+                ip6_src=ip6_src_str,
+            )
             indicies.append(rv.index)
         return indicies
 
     def test_api_map_domains_get(self):
         # Create a bunch of domains
         no_domains = 4096  # This must be large enough to ensure VPP suspends
             indicies.append(rv.index)
         return indicies
 
     def test_api_map_domains_get(self):
         # Create a bunch of domains
         no_domains = 4096  # This must be large enough to ensure VPP suspends
-        domains = self.create_domains('130.67.0.0/20', '2001::/32',
-                                      '2001::1/128')
+        domains = self.create_domains("130.67.0.0/20", "2001::/32", "2001::1/128")
         self.assertEqual(len(domains), no_domains)
 
         d = []
         cursor = 0
 
         # Invalid cursor
         self.assertEqual(len(domains), no_domains)
 
         d = []
         cursor = 0
 
         # Invalid cursor
-        rv, details = self.vapi.map_domains_get(cursor=no_domains+10)
+        rv, details = self.vapi.map_domains_get(cursor=no_domains + 10)
         self.assertEqual(rv.retval, -7)
 
         # Delete a domain in the middle of walk
         self.assertEqual(rv.retval, -7)
 
         # Delete a domain in the middle of walk
@@ -144,48 +146,53 @@ class TestMAP(VppTestCase):
             self.vapi.map_del_domain(index=i)
 
     def test_map_e_udp(self):
             self.vapi.map_del_domain(index=i)
 
     def test_map_e_udp(self):
-        """ MAP-E UDP"""
+        """MAP-E UDP"""
 
         #
         # Add a route to the MAP-BR
         #
         map_br_pfx = "2001::"
         map_br_pfx_len = 32
 
         #
         # Add a route to the MAP-BR
         #
         map_br_pfx = "2001::"
         map_br_pfx_len = 32
-        map_route = VppIpRoute(self,
-                               map_br_pfx,
-                               map_br_pfx_len,
-                               [VppRoutePath(self.pg1.remote_ip6,
-                                             self.pg1.sw_if_index)])
+        map_route = VppIpRoute(
+            self,
+            map_br_pfx,
+            map_br_pfx_len,
+            [VppRoutePath(self.pg1.remote_ip6, self.pg1.sw_if_index)],
+        )
         map_route.add_vpp_config()
 
         #
         # Add a domain that maps from pg0 to pg1
         #
         map_route.add_vpp_config()
 
         #
         # Add a domain that maps from pg0 to pg1
         #
-        map_dst = '2001::/32'
-        map_src = '3000::1/128'
-        client_pfx = '192.168.0.0/16'
-        map_translated_addr = '2001:0:101:7000:0:c0a8:101:7'
-        tag = 'MAP-E tag.'
-        self.vapi.map_add_domain(ip4_prefix=client_pfx,
-                                 ip6_prefix=map_dst,
-                                 ip6_src=map_src,
-                                 ea_bits_len=20,
-                                 psid_offset=4,
-                                 psid_length=4,
-                                 tag=tag)
+        map_dst = "2001::/32"
+        map_src = "3000::1/128"
+        client_pfx = "192.168.0.0/16"
+        map_translated_addr = "2001:0:101:7000:0:c0a8:101:7"
+        tag = "MAP-E tag."
+        self.vapi.map_add_domain(
+            ip4_prefix=client_pfx,
+            ip6_prefix=map_dst,
+            ip6_src=map_src,
+            ea_bits_len=20,
+            psid_offset=4,
+            psid_length=4,
+            tag=tag,
+        )
 
         self.vapi.map_param_set_security_check(enable=1, fragments=1)
 
         # Enable MAP on interface.
 
         self.vapi.map_param_set_security_check(enable=1, fragments=1)
 
         # Enable MAP on interface.
-        self.vapi.map_if_enable_disable(is_enable=1,
-                                        sw_if_index=self.pg0.sw_if_index,
-                                        is_translation=0)
+        self.vapi.map_if_enable_disable(
+            is_enable=1, sw_if_index=self.pg0.sw_if_index, is_translation=0
+        )
 
         # Ensure MAP doesn't steal all packets!
 
         # Ensure MAP doesn't steal all packets!
-        v4 = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-              IP(src=self.pg0.remote_ip4, dst=self.pg0.remote_ip4) /
-              UDP(sport=20000, dport=10000) /
-              Raw(b'\xa5' * 100))
+        v4 = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg0.remote_ip4)
+            / UDP(sport=20000, dport=10000)
+            / Raw(b"\xa5" * 100)
+        )
         rx = self.send_and_expect(self.pg0, v4 * 4, self.pg0)
         v4_reply = v4[1]
         v4_reply.ttl -= 1
         rx = self.send_and_expect(self.pg0, v4 * 4, self.pg0)
         v4_reply = v4[1]
         v4_reply.ttl -= 1
@@ -195,20 +202,24 @@ class TestMAP(VppTestCase):
         #
         # Fire in a v4 packet that will be encapped to the BR
         #
         #
         # Fire in a v4 packet that will be encapped to the BR
         #
-        v4 = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-              IP(src=self.pg0.remote_ip4, dst='192.168.1.1') /
-              UDP(sport=20000, dport=10000) /
-              Raw(b'\xa5' * 100))
+        v4 = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(src=self.pg0.remote_ip4, dst="192.168.1.1")
+            / UDP(sport=20000, dport=10000)
+            / Raw(b"\xa5" * 100)
+        )
 
         self.send_and_assert_encapped(v4 * 4, "3000::1", map_translated_addr)
 
         #
         # Verify reordered fragments are able to pass as well
         #
 
         self.send_and_assert_encapped(v4 * 4, "3000::1", map_translated_addr)
 
         #
         # Verify reordered fragments are able to pass as well
         #
-        v4 = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-              IP(id=1, src=self.pg0.remote_ip4, dst='192.168.1.1') /
-              UDP(sport=20000, dport=10000) /
-              Raw(b'\xa5' * 1000))
+        v4 = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(id=1, src=self.pg0.remote_ip4, dst="192.168.1.1")
+            / UDP(sport=20000, dport=10000)
+            / Raw(b"\xa5" * 1000)
+        )
 
         frags = fragment_rfc791(v4, 400)
         frags.reverse()
 
         frags = fragment_rfc791(v4, 400)
         frags.reverse()
@@ -216,16 +227,18 @@ class TestMAP(VppTestCase):
         self.send_and_assert_encapped(frags, "3000::1", map_translated_addr)
 
         # Enable MAP on interface.
         self.send_and_assert_encapped(frags, "3000::1", map_translated_addr)
 
         # Enable MAP on interface.
-        self.vapi.map_if_enable_disable(is_enable=1,
-                                        sw_if_index=self.pg1.sw_if_index,
-                                        is_translation=0)
+        self.vapi.map_if_enable_disable(
+            is_enable=1, sw_if_index=self.pg1.sw_if_index, is_translation=0
+        )
 
         # Ensure MAP doesn't steal all packets
 
         # Ensure MAP doesn't steal all packets
-        v6 = (Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac) /
-              IPv6(src=self.pg1.remote_ip6, dst=self.pg1.remote_ip6) /
-              UDP(sport=20000, dport=10000) /
-              Raw(b'\xa5' * 100))
-        rx = self.send_and_expect(self.pg1, v6*1, self.pg1)
+        v6 = (
+            Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac)
+            / IPv6(src=self.pg1.remote_ip6, dst=self.pg1.remote_ip6)
+            / UDP(sport=20000, dport=10000)
+            / Raw(b"\xa5" * 100)
+        )
+        rx = self.send_and_expect(self.pg1, v6 * 1, self.pg1)
         v6_reply = v6[1]
         v6_reply.hlim -= 1
         for p in rx:
         v6_reply = v6[1]
         v6_reply.hlim -= 1
         for p in rx:
@@ -235,11 +248,13 @@ class TestMAP(VppTestCase):
         # Fire in a V6 encapped packet.
         # expect a decapped packet on the inside ip4 link
         #
         # Fire in a V6 encapped packet.
         # expect a decapped packet on the inside ip4 link
         #
-        p = (Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac) /
-             IPv6(dst='3000::1', src=map_translated_addr) /
-             IP(dst=self.pg0.remote_ip4, src='192.168.1.1') /
-             UDP(sport=10000, dport=20000) /
-             Raw(b'\xa5' * 100))
+        p = (
+            Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac)
+            / IPv6(dst="3000::1", src=map_translated_addr)
+            / IP(dst=self.pg0.remote_ip4, src="192.168.1.1")
+            / UDP(sport=10000, dport=20000)
+            / Raw(b"\xa5" * 100)
+        )
 
         self.pg1.add_stream(p)
 
 
         self.pg1.add_stream(p)
 
@@ -256,15 +271,20 @@ class TestMAP(VppTestCase):
         #
         # Verify encapped reordered fragments pass as well
         #
         #
         # Verify encapped reordered fragments pass as well
         #
-        p = (IP(id=1, dst=self.pg0.remote_ip4, src='192.168.1.1') /
-             UDP(sport=10000, dport=20000) /
-             Raw(b'\xa5' * 1500))
+        p = (
+            IP(id=1, dst=self.pg0.remote_ip4, src="192.168.1.1")
+            / UDP(sport=10000, dport=20000)
+            / Raw(b"\xa5" * 1500)
+        )
         frags = fragment_rfc791(p, 400)
         frags.reverse()
 
         frags = fragment_rfc791(p, 400)
         frags.reverse()
 
-        stream = (Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac) /
-                  IPv6(dst='3000::1', src=map_translated_addr) /
-                  x for x in frags)
+        stream = (
+            Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac)
+            / IPv6(dst="3000::1", src=map_translated_addr)
+            / x
+            for x in frags
+        )
 
         self.pg1.add_stream(stream)
 
 
         self.pg1.add_stream(stream)
 
@@ -279,15 +299,15 @@ class TestMAP(VppTestCase):
             self.assertEqual(r[IP].dst, p[IP].dst)
 
         # Verify that fragments pass even if ipv6 layer is fragmented
             self.assertEqual(r[IP].dst, p[IP].dst)
 
         # Verify that fragments pass even if ipv6 layer is fragmented
-        stream = (IPv6(dst='3000::1', src=map_translated_addr) / x
-                  for x in frags)
+        stream = (IPv6(dst="3000::1", src=map_translated_addr) / x for x in frags)
 
         v6_stream = [
             Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac) / x
             for i in range(len(frags))
             for x in fragment_rfc8200(
 
         v6_stream = [
             Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac) / x
             for i in range(len(frags))
             for x in fragment_rfc8200(
-                IPv6(dst='3000::1', src=map_translated_addr) / frags[i],
-                i, 200)]
+                IPv6(dst="3000::1", src=map_translated_addr) / frags[i], i, 200
+            )
+        ]
 
         self.pg1.add_stream(v6_stream)
 
 
         self.pg1.add_stream(v6_stream)
 
@@ -306,32 +326,35 @@ class TestMAP(VppTestCase):
         #
         self.vapi.ppcli("map params pre-resolve ip6-nh 4001::1")
 
         #
         self.vapi.ppcli("map params pre-resolve ip6-nh 4001::1")
 
-        self.send_and_assert_no_replies(self.pg0, v4,
-                                        "resolved via default route")
+        self.send_and_assert_no_replies(self.pg0, v4, "resolved via default route")
 
         #
         # Add a route to 4001::1. Expect the encapped traffic to be
         # sent via that routes next-hop
         #
 
         #
         # Add a route to 4001::1. Expect the encapped traffic to be
         # sent via that routes next-hop
         #
-        pre_res_route = VppIpRoute(self, "4001::1", 128,
-                                   [VppRoutePath(self.pg1.remote_hosts[2].ip6,
-                                                 self.pg1.sw_if_index)])
+        pre_res_route = VppIpRoute(
+            self,
+            "4001::1",
+            128,
+            [VppRoutePath(self.pg1.remote_hosts[2].ip6, self.pg1.sw_if_index)],
+        )
         pre_res_route.add_vpp_config()
 
         pre_res_route.add_vpp_config()
 
-        self.send_and_assert_encapped_one(v4, "3000::1",
-                                          map_translated_addr,
-                                          dmac=self.pg1.remote_hosts[2].mac)
+        self.send_and_assert_encapped_one(
+            v4, "3000::1", map_translated_addr, dmac=self.pg1.remote_hosts[2].mac
+        )
 
         #
         # change the route to the pre-solved next-hop
         #
 
         #
         # change the route to the pre-solved next-hop
         #
-        pre_res_route.modify([VppRoutePath(self.pg1.remote_hosts[3].ip6,
-                                           self.pg1.sw_if_index)])
+        pre_res_route.modify(
+            [VppRoutePath(self.pg1.remote_hosts[3].ip6, self.pg1.sw_if_index)]
+        )
         pre_res_route.add_vpp_config()
 
         pre_res_route.add_vpp_config()
 
-        self.send_and_assert_encapped_one(v4, "3000::1",
-                                          map_translated_addr,
-                                          dmac=self.pg1.remote_hosts[3].mac)
+        self.send_and_assert_encapped_one(
+            v4, "3000::1", map_translated_addr, dmac=self.pg1.remote_hosts[3].mac
+        )
 
         #
         # cleanup. The test infra's object registry will ensure
 
         #
         # cleanup. The test infra's object registry will ensure
@@ -341,51 +364,56 @@ class TestMAP(VppTestCase):
         self.vapi.ppcli("map params pre-resolve del ip6-nh 4001::1")
 
     def test_map_e_inner_frag(self):
         self.vapi.ppcli("map params pre-resolve del ip6-nh 4001::1")
 
     def test_map_e_inner_frag(self):
-        """ MAP-E Inner fragmentation """
+        """MAP-E Inner fragmentation"""
 
         #
         # Add a route to the MAP-BR
         #
         map_br_pfx = "2001::"
         map_br_pfx_len = 32
 
         #
         # Add a route to the MAP-BR
         #
         map_br_pfx = "2001::"
         map_br_pfx_len = 32
-        map_route = VppIpRoute(self,
-                               map_br_pfx,
-                               map_br_pfx_len,
-                               [VppRoutePath(self.pg1.remote_ip6,
-                                             self.pg1.sw_if_index)])
+        map_route = VppIpRoute(
+            self,
+            map_br_pfx,
+            map_br_pfx_len,
+            [VppRoutePath(self.pg1.remote_ip6, self.pg1.sw_if_index)],
+        )
         map_route.add_vpp_config()
 
         #
         # Add a domain that maps from pg0 to pg1
         #
         map_route.add_vpp_config()
 
         #
         # Add a domain that maps from pg0 to pg1
         #
-        map_dst = '2001::/32'
-        map_src = '3000::1/128'
-        client_pfx = '192.168.0.0/16'
-        map_translated_addr = '2001:0:101:7000:0:c0a8:101:7'
-        tag = 'MAP-E tag.'
-        self.vapi.map_add_domain(ip4_prefix=client_pfx,
-                                 ip6_prefix=map_dst,
-                                 ip6_src=map_src,
-                                 ea_bits_len=20,
-                                 psid_offset=4,
-                                 psid_length=4,
-                                 mtu=1000,
-                                 tag=tag)
+        map_dst = "2001::/32"
+        map_src = "3000::1/128"
+        client_pfx = "192.168.0.0/16"
+        map_translated_addr = "2001:0:101:7000:0:c0a8:101:7"
+        tag = "MAP-E tag."
+        self.vapi.map_add_domain(
+            ip4_prefix=client_pfx,
+            ip6_prefix=map_dst,
+            ip6_src=map_src,
+            ea_bits_len=20,
+            psid_offset=4,
+            psid_length=4,
+            mtu=1000,
+            tag=tag,
+        )
 
         # Enable MAP on interface.
 
         # Enable MAP on interface.
-        self.vapi.map_if_enable_disable(is_enable=1,
-                                        sw_if_index=self.pg0.sw_if_index,
-                                        is_translation=0)
+        self.vapi.map_if_enable_disable(
+            is_enable=1, sw_if_index=self.pg0.sw_if_index, is_translation=0
+        )
 
         # Enable inner fragmentation
         self.vapi.map_param_set_fragmentation(inner=1)
 
 
         # Enable inner fragmentation
         self.vapi.map_param_set_fragmentation(inner=1)
 
-        v4 = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-              IP(src=self.pg0.remote_ip4, dst='192.168.1.1') /
-              UDP(sport=20000, dport=10000) /
-              Raw(b'\xa5' * 1300))
+        v4 = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(src=self.pg0.remote_ip4, dst="192.168.1.1")
+            / UDP(sport=20000, dport=10000)
+            / Raw(b"\xa5" * 1300)
+        )
 
 
-        self.pg_send(self.pg0, v4*1)
+        self.pg_send(self.pg0, v4 * 1)
         rx = self.pg1.get_capture(2)
 
         # 1000-sizeof(ip6_header_t) = 960.
         rx = self.pg1.get_capture(2)
 
         # 1000-sizeof(ip6_header_t) = 960.
@@ -397,10 +425,8 @@ class TestMAP(VppTestCase):
         frags[0].chksum = 0
         frags[1].chksum = 0
 
         frags[0].chksum = 0
         frags[1].chksum = 0
 
-        v6_reply1 = (IPv6(src='3000::1', dst=map_translated_addr, hlim=63) /
-                     frags[0])
-        v6_reply2 = (IPv6(src='3000::1', dst=map_translated_addr, hlim=63) /
-                     frags[1])
+        v6_reply1 = IPv6(src="3000::1", dst=map_translated_addr, hlim=63) / frags[0]
+        v6_reply2 = IPv6(src="3000::1", dst=map_translated_addr, hlim=63) / frags[1]
         rx[0][1].fl = 0
         rx[1][1].fl = 0
         rx[0][1][IP].id = 0
         rx[0][1].fl = 0
         rx[1][1].fl = 0
         rx[0][1][IP].id = 0
@@ -412,45 +438,48 @@ class TestMAP(VppTestCase):
         self.validate(rx[1][1], v6_reply2)
 
     def test_map_e_tcp_mss(self):
         self.validate(rx[1][1], v6_reply2)
 
     def test_map_e_tcp_mss(self):
-        """ MAP-E TCP MSS"""
+        """MAP-E TCP MSS"""
 
         #
         # Add a route to the MAP-BR
         #
         map_br_pfx = "2001::"
         map_br_pfx_len = 32
 
         #
         # Add a route to the MAP-BR
         #
         map_br_pfx = "2001::"
         map_br_pfx_len = 32
-        map_route = VppIpRoute(self,
-                               map_br_pfx,
-                               map_br_pfx_len,
-                               [VppRoutePath(self.pg1.remote_ip6,
-                                             self.pg1.sw_if_index)])
+        map_route = VppIpRoute(
+            self,
+            map_br_pfx,
+            map_br_pfx_len,
+            [VppRoutePath(self.pg1.remote_ip6, self.pg1.sw_if_index)],
+        )
         map_route.add_vpp_config()
 
         #
         # Add a domain that maps from pg0 to pg1
         #
         map_route.add_vpp_config()
 
         #
         # Add a domain that maps from pg0 to pg1
         #
-        map_dst = '2001::/32'
-        map_src = '3000::1/128'
-        client_pfx = '192.168.0.0/16'
-        map_translated_addr = '2001:0:101:5000:0:c0a8:101:5'
-        tag = 'MAP-E TCP tag.'
-        self.vapi.map_add_domain(ip4_prefix=client_pfx,
-                                 ip6_prefix=map_dst,
-                                 ip6_src=map_src,
-                                 ea_bits_len=20,
-                                 psid_offset=4,
-                                 psid_length=4,
-                                 tag=tag)
+        map_dst = "2001::/32"
+        map_src = "3000::1/128"
+        client_pfx = "192.168.0.0/16"
+        map_translated_addr = "2001:0:101:5000:0:c0a8:101:5"
+        tag = "MAP-E TCP tag."
+        self.vapi.map_add_domain(
+            ip4_prefix=client_pfx,
+            ip6_prefix=map_dst,
+            ip6_src=map_src,
+            ea_bits_len=20,
+            psid_offset=4,
+            psid_length=4,
+            tag=tag,
+        )
 
         # Enable MAP on pg0 interface.
 
         # Enable MAP on pg0 interface.
-        self.vapi.map_if_enable_disable(is_enable=1,
-                                        sw_if_index=self.pg0.sw_if_index,
-                                        is_translation=0)
+        self.vapi.map_if_enable_disable(
+            is_enable=1, sw_if_index=self.pg0.sw_if_index, is_translation=0
+        )
 
         # Enable MAP on pg1 interface.
 
         # Enable MAP on pg1 interface.
-        self.vapi.map_if_enable_disable(is_enable=1,
-                                        sw_if_index=self.pg1.sw_if_index,
-                                        is_translation=0)
+        self.vapi.map_if_enable_disable(
+            is_enable=1, sw_if_index=self.pg1.sw_if_index, is_translation=0
+        )
 
         # TCP MSS clamping
         mss_clamp = 1300
 
         # TCP MSS clamping
         mss_clamp = 1300
@@ -460,9 +489,8 @@ class TestMAP(VppTestCase):
         # Send a v4 packet that will be encapped.
         #
         p_ether = Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
         # Send a v4 packet that will be encapped.
         #
         p_ether = Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
-        p_ip4 = IP(src=self.pg0.remote_ip4, dst='192.168.1.1')
-        p_tcp = TCP(sport=20000, dport=30000, flags="S",
-                    options=[("MSS", 1455)])
+        p_ip4 = IP(src=self.pg0.remote_ip4, dst="192.168.1.1")
+        p_tcp = TCP(sport=20000, dport=30000, flags="S", options=[("MSS", 1455)])
         p4 = p_ether / p_ip4 / p_tcp
 
         self.pg1.add_stream(p4)
         p4 = p_ether / p_ip4 / p_tcp
 
         self.pg1.add_stream(p4)
@@ -476,8 +504,7 @@ class TestMAP(VppTestCase):
         self.assertEqual(rx[IP].src, p4[IP].src)
         self.assertEqual(rx[IP].dst, p4[IP].dst)
         self.assertEqual(rx[IPv6].src, "3000::1")
         self.assertEqual(rx[IP].src, p4[IP].src)
         self.assertEqual(rx[IP].dst, p4[IP].dst)
         self.assertEqual(rx[IPv6].src, "3000::1")
-        self.assertEqual(rx[TCP].options,
-                         TCP(options=[('MSS', mss_clamp)]).options)
+        self.assertEqual(rx[TCP].options, TCP(options=[("MSS", mss_clamp)]).options)
 
     def validate(self, rx, expected):
         self.assertEqual(rx, expected.__class__(scapy.compat.raw(expected)))
 
     def validate(self, rx, expected):
         self.assertEqual(rx, expected.__class__(scapy.compat.raw(expected)))
@@ -520,173 +547,202 @@ class TestMAP(VppTestCase):
         self.assertEqual(payload_total, payload_len_expected)
 
     def payload(self, len):
         self.assertEqual(payload_total, payload_len_expected)
 
     def payload(self, len):
-        return 'x' * len
+        return "x" * len
 
     def test_map_t(self):
 
     def test_map_t(self):
-        """ MAP-T """
+        """MAP-T"""
 
         #
         # Add a domain that maps from pg0 to pg1
         #
 
         #
         # Add a domain that maps from pg0 to pg1
         #
-        map_dst = '2001:db8::/32'
-        map_src = '1234:5678:90ab:cdef::/64'
-        ip4_pfx = '192.168.0.0/24'
-        tag = 'MAP-T Tag.'
-
-        self.vapi.map_add_domain(ip6_prefix=map_dst,
-                                 ip4_prefix=ip4_pfx,
-                                 ip6_src=map_src,
-                                 ea_bits_len=16,
-                                 psid_offset=6,
-                                 psid_length=4,
-                                 mtu=1500,
-                                 tag=tag)
+        map_dst = "2001:db8::/32"
+        map_src = "1234:5678:90ab:cdef::/64"
+        ip4_pfx = "192.168.0.0/24"
+        tag = "MAP-T Tag."
+
+        self.vapi.map_add_domain(
+            ip6_prefix=map_dst,
+            ip4_prefix=ip4_pfx,
+            ip6_src=map_src,
+            ea_bits_len=16,
+            psid_offset=6,
+            psid_length=4,
+            mtu=1500,
+            tag=tag,
+        )
 
         # Enable MAP-T on interfaces.
 
         # Enable MAP-T on interfaces.
-        self.vapi.map_if_enable_disable(is_enable=1,
-                                        sw_if_index=self.pg0.sw_if_index,
-                                        is_translation=1)
-        self.vapi.map_if_enable_disable(is_enable=1,
-                                        sw_if_index=self.pg1.sw_if_index,
-                                        is_translation=1)
+        self.vapi.map_if_enable_disable(
+            is_enable=1, sw_if_index=self.pg0.sw_if_index, is_translation=1
+        )
+        self.vapi.map_if_enable_disable(
+            is_enable=1, sw_if_index=self.pg1.sw_if_index, is_translation=1
+        )
 
         # Ensure MAP doesn't steal all packets!
 
         # Ensure MAP doesn't steal all packets!
-        v4 = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-              IP(src=self.pg0.remote_ip4, dst=self.pg0.remote_ip4) /
-              UDP(sport=20000, dport=10000) /
-              Raw(b'\xa5' * 100))
-        rx = self.send_and_expect(self.pg0, v4*1, self.pg0)
+        v4 = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg0.remote_ip4)
+            / UDP(sport=20000, dport=10000)
+            / Raw(b"\xa5" * 100)
+        )
+        rx = self.send_and_expect(self.pg0, v4 * 1, self.pg0)
         v4_reply = v4[1]
         v4_reply.ttl -= 1
         for p in rx:
             self.validate(p[1], v4_reply)
         # Ensure MAP doesn't steal all packets
         v4_reply = v4[1]
         v4_reply.ttl -= 1
         for p in rx:
             self.validate(p[1], v4_reply)
         # Ensure MAP doesn't steal all packets
-        v6 = (Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac) /
-              IPv6(src=self.pg1.remote_ip6, dst=self.pg1.remote_ip6) /
-              UDP(sport=20000, dport=10000) /
-              Raw(b'\xa5' * 100))
-        rx = self.send_and_expect(self.pg1, v6*1, self.pg1)
+        v6 = (
+            Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac)
+            / IPv6(src=self.pg1.remote_ip6, dst=self.pg1.remote_ip6)
+            / UDP(sport=20000, dport=10000)
+            / Raw(b"\xa5" * 100)
+        )
+        rx = self.send_and_expect(self.pg1, v6 * 1, self.pg1)
         v6_reply = v6[1]
         v6_reply.hlim -= 1
         for p in rx:
             self.validate(p[1], v6_reply)
 
         v6_reply = v6[1]
         v6_reply.hlim -= 1
         for p in rx:
             self.validate(p[1], v6_reply)
 
-        map_route = VppIpRoute(self,
-                               "2001:db8::",
-                               32,
-                               [VppRoutePath(self.pg1.remote_ip6,
-                                             self.pg1.sw_if_index,
-                                             proto=DpoProto.DPO_PROTO_IP6)])
+        map_route = VppIpRoute(
+            self,
+            "2001:db8::",
+            32,
+            [
+                VppRoutePath(
+                    self.pg1.remote_ip6,
+                    self.pg1.sw_if_index,
+                    proto=DpoProto.DPO_PROTO_IP6,
+                )
+            ],
+        )
         map_route.add_vpp_config()
 
         #
         # Send a v4 packet that will be translated
         #
         p_ether = Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
         map_route.add_vpp_config()
 
         #
         # Send a v4 packet that will be translated
         #
         p_ether = Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
-        p_ip4 = IP(src=self.pg0.remote_ip4, dst='192.168.0.1')
-        payload = TCP(sport=0xabcd, dport=0xabcd)
-
-        p4 = (p_ether / p_ip4 / payload)
-        p6_translated = (IPv6(src="1234:5678:90ab:cdef:ac:1001:200:0",
-                              dst="2001:db8:1f0::c0a8:1:f") / payload)
+        p_ip4 = IP(src=self.pg0.remote_ip4, dst="192.168.0.1")
+        payload = TCP(sport=0xABCD, dport=0xABCD)
+
+        p4 = p_ether / p_ip4 / payload
+        p6_translated = (
+            IPv6(src="1234:5678:90ab:cdef:ac:1001:200:0", dst="2001:db8:1f0::c0a8:1:f")
+            / payload
+        )
         p6_translated.hlim -= 1
         p6_translated.hlim -= 1
-        rx = self.send_and_expect(self.pg0, p4*1, self.pg1)
+        rx = self.send_and_expect(self.pg0, p4 * 1, self.pg1)
         for p in rx:
             self.validate(p[1], p6_translated)
 
         # Send back an IPv6 packet that will be "untranslated"
         p_ether6 = Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac)
         for p in rx:
             self.validate(p[1], p6_translated)
 
         # Send back an IPv6 packet that will be "untranslated"
         p_ether6 = Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac)
-        p_ip6 = IPv6(src='2001:db8:1f0::c0a8:1:f',
-                     dst='1234:5678:90ab:cdef:ac:1001:200:0')
-        p6 = (p_ether6 / p_ip6 / payload)
-        p4_translated = (IP(src='192.168.0.1',
-                            dst=self.pg0.remote_ip4) / payload)
+        p_ip6 = IPv6(
+            src="2001:db8:1f0::c0a8:1:f", dst="1234:5678:90ab:cdef:ac:1001:200:0"
+        )
+        p6 = p_ether6 / p_ip6 / payload
+        p4_translated = IP(src="192.168.0.1", dst=self.pg0.remote_ip4) / payload
         p4_translated.id = 0
         p4_translated.ttl -= 1
         p4_translated.id = 0
         p4_translated.ttl -= 1
-        rx = self.send_and_expect(self.pg1, p6*1, self.pg0)
+        rx = self.send_and_expect(self.pg1, p6 * 1, self.pg0)
         for p in rx:
             self.validate(p[1], p4_translated)
 
         # IPv4 TTL=0
         for p in rx:
             self.validate(p[1], p4_translated)
 
         # IPv4 TTL=0
-        ip4_ttl_expired = IP(src=self.pg0.remote_ip4, dst='192.168.0.1', ttl=0)
-        p4 = (p_ether / ip4_ttl_expired / payload)
-
-        icmp4_reply = (IP(id=0, ttl=254, src=self.pg0.local_ip4,
-                          dst=self.pg0.remote_ip4) /
-                       ICMP(type='time-exceeded',
-                            code='ttl-zero-during-transit') /
-                       IP(src=self.pg0.remote_ip4,
-                          dst='192.168.0.1', ttl=0) / payload)
-        rx = self.send_and_expect(self.pg0, p4*1, self.pg0)
+        ip4_ttl_expired = IP(src=self.pg0.remote_ip4, dst="192.168.0.1", ttl=0)
+        p4 = p_ether / ip4_ttl_expired / payload
+
+        icmp4_reply = (
+            IP(id=0, ttl=254, src=self.pg0.local_ip4, dst=self.pg0.remote_ip4)
+            / ICMP(type="time-exceeded", code="ttl-zero-during-transit")
+            / IP(src=self.pg0.remote_ip4, dst="192.168.0.1", ttl=0)
+            / payload
+        )
+        rx = self.send_and_expect(self.pg0, p4 * 1, self.pg0)
         for p in rx:
             self.validate(p[1], icmp4_reply)
 
         # IPv4 TTL=1
         for p in rx:
             self.validate(p[1], icmp4_reply)
 
         # IPv4 TTL=1
-        ip4_ttl_expired = IP(src=self.pg0.remote_ip4, dst='192.168.0.1', ttl=1)
-        p4 = (p_ether / ip4_ttl_expired / payload)
-
-        icmp4_reply = (IP(id=0, ttl=254, src=self.pg0.local_ip4,
-                          dst=self.pg0.remote_ip4) /
-                       ICMP(type='time-exceeded',
-                            code='ttl-zero-during-transit') /
-                       IP(src=self.pg0.remote_ip4,
-                          dst='192.168.0.1', ttl=1) / payload)
-        rx = self.send_and_expect(self.pg0, p4*1, self.pg0)
+        ip4_ttl_expired = IP(src=self.pg0.remote_ip4, dst="192.168.0.1", ttl=1)
+        p4 = p_ether / ip4_ttl_expired / payload
+
+        icmp4_reply = (
+            IP(id=0, ttl=254, src=self.pg0.local_ip4, dst=self.pg0.remote_ip4)
+            / ICMP(type="time-exceeded", code="ttl-zero-during-transit")
+            / IP(src=self.pg0.remote_ip4, dst="192.168.0.1", ttl=1)
+            / payload
+        )
+        rx = self.send_and_expect(self.pg0, p4 * 1, self.pg0)
         for p in rx:
             self.validate(p[1], icmp4_reply)
 
         # IPv6 Hop limit at BR
         for p in rx:
             self.validate(p[1], icmp4_reply)
 
         # IPv6 Hop limit at BR
-        ip6_hlim_expired = IPv6(hlim=1, src='2001:db8:1ab::c0a8:1:ab',
-                                dst='1234:5678:90ab:cdef:ac:1001:200:0')
-        p6 = (p_ether6 / ip6_hlim_expired / payload)
-
-        icmp6_reply = (IPv6(hlim=255, src=self.pg1.local_ip6,
-                            dst="2001:db8:1ab::c0a8:1:ab") /
-                       ICMPv6TimeExceeded(code=0) /
-                       IPv6(src="2001:db8:1ab::c0a8:1:ab",
-                            dst='1234:5678:90ab:cdef:ac:1001:200:0',
-                            hlim=1) / payload)
-        rx = self.send_and_expect(self.pg1, p6*1, self.pg1)
+        ip6_hlim_expired = IPv6(
+            hlim=1,
+            src="2001:db8:1ab::c0a8:1:ab",
+            dst="1234:5678:90ab:cdef:ac:1001:200:0",
+        )
+        p6 = p_ether6 / ip6_hlim_expired / payload
+
+        icmp6_reply = (
+            IPv6(hlim=255, src=self.pg1.local_ip6, dst="2001:db8:1ab::c0a8:1:ab")
+            / ICMPv6TimeExceeded(code=0)
+            / IPv6(
+                src="2001:db8:1ab::c0a8:1:ab",
+                dst="1234:5678:90ab:cdef:ac:1001:200:0",
+                hlim=1,
+            )
+            / payload
+        )
+        rx = self.send_and_expect(self.pg1, p6 * 1, self.pg1)
         for p in rx:
             self.validate(p[1], icmp6_reply)
 
         # IPv6 Hop limit beyond BR
         for p in rx:
             self.validate(p[1], icmp6_reply)
 
         # IPv6 Hop limit beyond BR
-        ip6_hlim_expired = IPv6(hlim=0, src='2001:db8:1ab::c0a8:1:ab',
-                                dst='1234:5678:90ab:cdef:ac:1001:200:0')
-        p6 = (p_ether6 / ip6_hlim_expired / payload)
-
-        icmp6_reply = (IPv6(hlim=255, src=self.pg1.local_ip6,
-                            dst="2001:db8:1ab::c0a8:1:ab") /
-                       ICMPv6TimeExceeded(code=0) /
-                       IPv6(src="2001:db8:1ab::c0a8:1:ab",
-                            dst='1234:5678:90ab:cdef:ac:1001:200:0',
-                            hlim=0) / payload)
-        rx = self.send_and_expect(self.pg1, p6*1, self.pg1)
+        ip6_hlim_expired = IPv6(
+            hlim=0,
+            src="2001:db8:1ab::c0a8:1:ab",
+            dst="1234:5678:90ab:cdef:ac:1001:200:0",
+        )
+        p6 = p_ether6 / ip6_hlim_expired / payload
+
+        icmp6_reply = (
+            IPv6(hlim=255, src=self.pg1.local_ip6, dst="2001:db8:1ab::c0a8:1:ab")
+            / ICMPv6TimeExceeded(code=0)
+            / IPv6(
+                src="2001:db8:1ab::c0a8:1:ab",
+                dst="1234:5678:90ab:cdef:ac:1001:200:0",
+                hlim=0,
+            )
+            / payload
+        )
+        rx = self.send_and_expect(self.pg1, p6 * 1, self.pg1)
         for p in rx:
             self.validate(p[1], icmp6_reply)
 
         # IPv4 Well-known port
         for p in rx:
             self.validate(p[1], icmp6_reply)
 
         # IPv4 Well-known port
-        p_ip4 = IP(src=self.pg0.remote_ip4, dst='192.168.0.1')
+        p_ip4 = IP(src=self.pg0.remote_ip4, dst="192.168.0.1")
         payload = UDP(sport=200, dport=200)
         payload = UDP(sport=200, dport=200)
-        p4 = (p_ether / p_ip4 / payload)
-        self.send_and_assert_no_replies(self.pg0, p4*1)
+        p4 = p_ether / p_ip4 / payload
+        self.send_and_assert_no_replies(self.pg0, p4 * 1)
 
         # IPv6 Well-known port
         payload = UDP(sport=200, dport=200)
 
         # IPv6 Well-known port
         payload = UDP(sport=200, dport=200)
-        p6 = (p_ether6 / p_ip6 / payload)
-        self.send_and_assert_no_replies(self.pg1, p6*1)
+        p6 = p_ether6 / p_ip6 / payload
+        self.send_and_assert_no_replies(self.pg1, p6 * 1)
 
         # UDP packet fragmentation
         payload_len = 1453
         payload = UDP(sport=40000, dport=4000) / self.payload(payload_len)
 
         # UDP packet fragmentation
         payload_len = 1453
         payload = UDP(sport=40000, dport=4000) / self.payload(payload_len)
-        p4 = (p_ether / p_ip4 / payload)
+        p4 = p_ether / p_ip4 / payload
         self.pg_enable_capture()
         self.pg0.add_stream(p4)
         self.pg_start()
         rx = self.pg1.get_capture(2)
 
         self.pg_enable_capture()
         self.pg0.add_stream(p4)
         self.pg_start()
         rx = self.pg1.get_capture(2)
 
-        p_ip6_translated = IPv6(src='1234:5678:90ab:cdef:ac:1001:200:0',
-                                dst='2001:db8:1e0::c0a8:1:e')
+        p_ip6_translated = IPv6(
+            src="1234:5678:90ab:cdef:ac:1001:200:0", dst="2001:db8:1e0::c0a8:1:e"
+        )
         for p in rx:
             self.validate_frag6(p, p_ip6_translated)
 
         for p in rx:
             self.validate_frag6(p, p_ip6_translated)
 
@@ -695,7 +751,7 @@ class TestMAP(VppTestCase):
         # UDP packet fragmentation send fragments
         payload_len = 1453
         payload = UDP(sport=40000, dport=4000) / self.payload(payload_len)
         # UDP packet fragmentation send fragments
         payload_len = 1453
         payload = UDP(sport=40000, dport=4000) / self.payload(payload_len)
-        p4 = (p_ether / p_ip4 / payload)
+        p4 = p_ether / p_ip4 / payload
         frags = fragment_rfc791(p4, fragsize=1000)
         self.pg_enable_capture()
         self.pg0.add_stream(frags)
         frags = fragment_rfc791(p4, fragsize=1000)
         self.pg_enable_capture()
         self.pg0.add_stream(frags)
@@ -710,13 +766,14 @@ class TestMAP(VppTestCase):
         # Send back an fragmented IPv6 UDP packet that will be "untranslated"
         payload = UDP(sport=4000, dport=40000) / self.payload(payload_len)
         p_ether6 = Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac)
         # Send back an fragmented IPv6 UDP packet that will be "untranslated"
         payload = UDP(sport=4000, dport=40000) / self.payload(payload_len)
         p_ether6 = Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac)
-        p_ip6 = IPv6(src='2001:db8:1e0::c0a8:1:e',
-                     dst='1234:5678:90ab:cdef:ac:1001:200:0')
-        p6 = (p_ether6 / p_ip6 / payload)
-        frags6 = fragment_rfc8200(p6, identification=0xdcba, fragsize=1000)
-
-        p_ip4_translated = IP(src='192.168.0.1', dst=self.pg0.remote_ip4)
-        p4_translated = (p_ip4_translated / payload)
+        p_ip6 = IPv6(
+            src="2001:db8:1e0::c0a8:1:e", dst="1234:5678:90ab:cdef:ac:1001:200:0"
+        )
+        p6 = p_ether6 / p_ip6 / payload
+        frags6 = fragment_rfc8200(p6, identification=0xDCBA, fragsize=1000)
+
+        p_ip4_translated = IP(src="192.168.0.1", dst=self.pg0.remote_ip4)
+        p4_translated = p_ip4_translated / payload
         p4_translated.id = 0
         p4_translated.ttl -= 1
 
         p4_translated.id = 0
         p4_translated.ttl -= 1
 
@@ -732,14 +789,15 @@ class TestMAP(VppTestCase):
 
         # ICMP packet fragmentation
         payload = ICMP(id=6529) / self.payload(payload_len)
 
         # ICMP packet fragmentation
         payload = ICMP(id=6529) / self.payload(payload_len)
-        p4 = (p_ether / p_ip4 / payload)
+        p4 = p_ether / p_ip4 / payload
         self.pg_enable_capture()
         self.pg0.add_stream(p4)
         self.pg_start()
         rx = self.pg1.get_capture(2)
 
         self.pg_enable_capture()
         self.pg0.add_stream(p4)
         self.pg_start()
         rx = self.pg1.get_capture(2)
 
-        p_ip6_translated = IPv6(src='1234:5678:90ab:cdef:ac:1001:200:0',
-                                dst='2001:db8:160::c0a8:1:6')
+        p_ip6_translated = IPv6(
+            src="1234:5678:90ab:cdef:ac:1001:200:0", dst="2001:db8:160::c0a8:1:6"
+        )
         for p in rx:
             self.validate_frag6(p, p_ip6_translated)
 
         for p in rx:
             self.validate_frag6(p, p_ip6_translated)
 
@@ -747,7 +805,7 @@ class TestMAP(VppTestCase):
 
         # ICMP packet fragmentation send fragments
         payload = ICMP(id=6529) / self.payload(payload_len)
 
         # ICMP packet fragmentation send fragments
         payload = ICMP(id=6529) / self.payload(payload_len)
-        p4 = (p_ether / p_ip4 / payload)
+        p4 = p_ether / p_ip4 / payload
         frags = fragment_rfc791(p4, fragsize=1000)
         self.pg_enable_capture()
         self.pg0.add_stream(frags)
         frags = fragment_rfc791(p4, fragsize=1000)
         self.pg_enable_capture()
         self.pg0.add_stream(frags)
@@ -766,30 +824,31 @@ class TestMAP(VppTestCase):
         # Send a v4 TCP SYN packet that will be translated and MSS clamped
         #
         p_ether = Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
         # Send a v4 TCP SYN packet that will be translated and MSS clamped
         #
         p_ether = Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
-        p_ip4 = IP(src=self.pg0.remote_ip4, dst='192.168.0.1')
-        payload = TCP(sport=0xabcd, dport=0xabcd, flags="S",
-                      options=[('MSS', 1460)])
-
-        p4 = (p_ether / p_ip4 / payload)
-        p6_translated = (IPv6(src="1234:5678:90ab:cdef:ac:1001:200:0",
-                              dst="2001:db8:1f0::c0a8:1:f") / payload)
+        p_ip4 = IP(src=self.pg0.remote_ip4, dst="192.168.0.1")
+        payload = TCP(sport=0xABCD, dport=0xABCD, flags="S", options=[("MSS", 1460)])
+
+        p4 = p_ether / p_ip4 / payload
+        p6_translated = (
+            IPv6(src="1234:5678:90ab:cdef:ac:1001:200:0", dst="2001:db8:1f0::c0a8:1:f")
+            / payload
+        )
         p6_translated.hlim -= 1
         p6_translated.hlim -= 1
-        p6_translated[TCP].options = [('MSS', 1300)]
-        rx = self.send_and_expect(self.pg0, p4*1, self.pg1)
+        p6_translated[TCP].options = [("MSS", 1300)]
+        rx = self.send_and_expect(self.pg0, p4 * 1, self.pg1)
         for p in rx:
             self.validate(p[1], p6_translated)
 
         # Send back an IPv6 packet that will be "untranslated"
         p_ether6 = Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac)
         for p in rx:
             self.validate(p[1], p6_translated)
 
         # Send back an IPv6 packet that will be "untranslated"
         p_ether6 = Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac)
-        p_ip6 = IPv6(src='2001:db8:1f0::c0a8:1:f',
-                     dst='1234:5678:90ab:cdef:ac:1001:200:0')
-        p6 = (p_ether6 / p_ip6 / payload)
-        p4_translated = (IP(src='192.168.0.1',
-                            dst=self.pg0.remote_ip4) / payload)
+        p_ip6 = IPv6(
+            src="2001:db8:1f0::c0a8:1:f", dst="1234:5678:90ab:cdef:ac:1001:200:0"
+        )
+        p6 = p_ether6 / p_ip6 / payload
+        p4_translated = IP(src="192.168.0.1", dst=self.pg0.remote_ip4) / payload
         p4_translated.id = 0
         p4_translated.ttl -= 1
         p4_translated.id = 0
         p4_translated.ttl -= 1
-        p4_translated[TCP].options = [('MSS', 1300)]
-        rx = self.send_and_expect(self.pg1, p6*1, self.pg0)
+        p4_translated[TCP].options = [("MSS", 1300)]
+        rx = self.send_and_expect(self.pg1, p6 * 1, self.pg0)
         for p in rx:
             self.validate(p[1], p4_translated)
 
         for p in rx:
             self.validate(p[1], p4_translated)
 
@@ -803,19 +862,22 @@ class TestMAP(VppTestCase):
         # Send back an IPv6 packet that will be droppped due to security
         # check fail
         p_ether6 = Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac)
         # Send back an IPv6 packet that will be droppped due to security
         # check fail
         p_ether6 = Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac)
-        p_ip6_sec_check_fail = IPv6(src='2001:db8:1fe::c0a8:1:f',
-                                    dst='1234:5678:90ab:cdef:ac:1001:200:0')
-        payload = TCP(sport=0xabcd, dport=0xabcd)
-        p6 = (p_ether6 / p_ip6_sec_check_fail / payload)
+        p_ip6_sec_check_fail = IPv6(
+            src="2001:db8:1fe::c0a8:1:f", dst="1234:5678:90ab:cdef:ac:1001:200:0"
+        )
+        payload = TCP(sport=0xABCD, dport=0xABCD)
+        p6 = p_ether6 / p_ip6_sec_check_fail / payload
 
 
-        self.pg_send(self.pg1, p6*1)
+        self.pg_send(self.pg1, p6 * 1)
         self.pg0.get_capture(0, timeout=1)
         rx = self.pg1.get_capture(1)
 
         self.pg0.get_capture(0, timeout=1)
         rx = self.pg1.get_capture(1)
 
-        icmp6_reply = (IPv6(hlim=255, src=self.pg1.local_ip6,
-                            dst='2001:db8:1fe::c0a8:1:f') /
-                       ICMPv6DestUnreach(code=5) /
-                       p_ip6_sec_check_fail / payload)
+        icmp6_reply = (
+            IPv6(hlim=255, src=self.pg1.local_ip6, dst="2001:db8:1fe::c0a8:1:f")
+            / ICMPv6DestUnreach(code=5)
+            / p_ip6_sec_check_fail
+            / payload
+        )
 
         for p in rx:
             self.validate(p[1], icmp6_reply)
 
         for p in rx:
             self.validate(p[1], icmp6_reply)
@@ -824,142 +886,160 @@ class TestMAP(VppTestCase):
         self.vapi.map_param_set_icmp6(enable_unreachable=0)
 
     def test_map_t_ip6_psid(self):
         self.vapi.map_param_set_icmp6(enable_unreachable=0)
 
     def test_map_t_ip6_psid(self):
-        """ MAP-T v6->v4 PSID validation"""
+        """MAP-T v6->v4 PSID validation"""
 
         #
         # Add a domain that maps from pg0 to pg1
         #
 
         #
         # Add a domain that maps from pg0 to pg1
         #
-        map_dst = '2001:db8::/32'
-        map_src = '1234:5678:90ab:cdef::/64'
-        ip4_pfx = '192.168.0.0/24'
-        tag = 'MAP-T Test Domain'
-
-        self.vapi.map_add_domain(ip6_prefix=map_dst,
-                                 ip4_prefix=ip4_pfx,
-                                 ip6_src=map_src,
-                                 ea_bits_len=16,
-                                 psid_offset=6,
-                                 psid_length=4,
-                                 mtu=1500,
-                                 tag=tag)
+        map_dst = "2001:db8::/32"
+        map_src = "1234:5678:90ab:cdef::/64"
+        ip4_pfx = "192.168.0.0/24"
+        tag = "MAP-T Test Domain"
+
+        self.vapi.map_add_domain(
+            ip6_prefix=map_dst,
+            ip4_prefix=ip4_pfx,
+            ip6_src=map_src,
+            ea_bits_len=16,
+            psid_offset=6,
+            psid_length=4,
+            mtu=1500,
+            tag=tag,
+        )
 
         # Enable MAP-T on interfaces.
 
         # Enable MAP-T on interfaces.
-        self.vapi.map_if_enable_disable(is_enable=1,
-                                        sw_if_index=self.pg0.sw_if_index,
-                                        is_translation=1)
-        self.vapi.map_if_enable_disable(is_enable=1,
-                                        sw_if_index=self.pg1.sw_if_index,
-                                        is_translation=1)
-
-        map_route = VppIpRoute(self,
-                               "2001:db8::",
-                               32,
-                               [VppRoutePath(self.pg1.remote_ip6,
-                                             self.pg1.sw_if_index,
-                                             proto=DpoProto.DPO_PROTO_IP6)])
+        self.vapi.map_if_enable_disable(
+            is_enable=1, sw_if_index=self.pg0.sw_if_index, is_translation=1
+        )
+        self.vapi.map_if_enable_disable(
+            is_enable=1, sw_if_index=self.pg1.sw_if_index, is_translation=1
+        )
+
+        map_route = VppIpRoute(
+            self,
+            "2001:db8::",
+            32,
+            [
+                VppRoutePath(
+                    self.pg1.remote_ip6,
+                    self.pg1.sw_if_index,
+                    proto=DpoProto.DPO_PROTO_IP6,
+                )
+            ],
+        )
         map_route.add_vpp_config()
 
         p_ether6 = Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac)
         map_route.add_vpp_config()
 
         p_ether6 = Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac)
-        p_ip6 = IPv6(src='2001:db8:1f0::c0a8:1:f',
-                     dst='1234:5678:90ab:cdef:ac:1001:200:0')
+        p_ip6 = IPv6(
+            src="2001:db8:1f0::c0a8:1:f", dst="1234:5678:90ab:cdef:ac:1001:200:0"
+        )
 
         # Send good IPv6 source port, ensure translated IPv4 received
 
         # Send good IPv6 source port, ensure translated IPv4 received
-        payload = TCP(sport=0xabcd, dport=80)
-        p6 = (p_ether6 / p_ip6 / payload)
-        p4_translated = (IP(src='192.168.0.1',
-                            dst=self.pg0.remote_ip4) / payload)
+        payload = TCP(sport=0xABCD, dport=80)
+        p6 = p_ether6 / p_ip6 / payload
+        p4_translated = IP(src="192.168.0.1", dst=self.pg0.remote_ip4) / payload
         p4_translated.id = 0
         p4_translated.ttl -= 1
         p4_translated.id = 0
         p4_translated.ttl -= 1
-        rx = self.send_and_expect(self.pg1, p6*1, self.pg0)
+        rx = self.send_and_expect(self.pg1, p6 * 1, self.pg0)
         for p in rx:
             self.validate(p[1], p4_translated)
 
         # Send bad IPv6 source port, ensure translated IPv4 not received
         for p in rx:
             self.validate(p[1], p4_translated)
 
         # Send bad IPv6 source port, ensure translated IPv4 not received
-        payload = TCP(sport=0xdcba, dport=80)
-        p6 = (p_ether6 / p_ip6 / payload)
-        self.send_and_assert_no_replies(self.pg1, p6*1)
+        payload = TCP(sport=0xDCBA, dport=80)
+        p6 = p_ether6 / p_ip6 / payload
+        self.send_and_assert_no_replies(self.pg1, p6 * 1)
 
     def test_map_t_pre_resolve(self):
 
     def test_map_t_pre_resolve(self):
-        """ MAP-T pre-resolve"""
+        """MAP-T pre-resolve"""
 
         # Add a domain that maps from pg0 to pg1
 
         # Add a domain that maps from pg0 to pg1
-        map_dst = '2001:db8::/32'
-        map_src = '1234:5678:90ab:cdef::/64'
-        ip4_pfx = '192.168.0.0/24'
-        tag = 'MAP-T Test Domain.'
-
-        self.vapi.map_add_domain(ip6_prefix=map_dst,
-                                 ip4_prefix=ip4_pfx,
-                                 ip6_src=map_src,
-                                 ea_bits_len=16,
-                                 psid_offset=6,
-                                 psid_length=4,
-                                 mtu=1500,
-                                 tag=tag)
+        map_dst = "2001:db8::/32"
+        map_src = "1234:5678:90ab:cdef::/64"
+        ip4_pfx = "192.168.0.0/24"
+        tag = "MAP-T Test Domain."
+
+        self.vapi.map_add_domain(
+            ip6_prefix=map_dst,
+            ip4_prefix=ip4_pfx,
+            ip6_src=map_src,
+            ea_bits_len=16,
+            psid_offset=6,
+            psid_length=4,
+            mtu=1500,
+            tag=tag,
+        )
 
         # Enable MAP-T on interfaces.
 
         # Enable MAP-T on interfaces.
-        self.vapi.map_if_enable_disable(is_enable=1,
-                                        sw_if_index=self.pg0.sw_if_index,
-                                        is_translation=1)
-        self.vapi.map_if_enable_disable(is_enable=1,
-                                        sw_if_index=self.pg1.sw_if_index,
-                                        is_translation=1)
+        self.vapi.map_if_enable_disable(
+            is_enable=1, sw_if_index=self.pg0.sw_if_index, is_translation=1
+        )
+        self.vapi.map_if_enable_disable(
+            is_enable=1, sw_if_index=self.pg1.sw_if_index, is_translation=1
+        )
 
         # Enable pre-resolve option
 
         # Enable pre-resolve option
-        self.vapi.map_param_add_del_pre_resolve(ip4_nh_address="10.1.2.3",
-                                                ip6_nh_address="4001::1",
-                                                is_add=1)
+        self.vapi.map_param_add_del_pre_resolve(
+            ip4_nh_address="10.1.2.3", ip6_nh_address="4001::1", is_add=1
+        )
 
         # Add a route to 4001::1 and expect the translated traffic to be
         # sent via that route next-hop.
 
         # Add a route to 4001::1 and expect the translated traffic to be
         # sent via that route next-hop.
-        pre_res_route6 = VppIpRoute(self, "4001::1", 128,
-                                    [VppRoutePath(self.pg1.remote_hosts[2].ip6,
-                                                  self.pg1.sw_if_index)])
+        pre_res_route6 = VppIpRoute(
+            self,
+            "4001::1",
+            128,
+            [VppRoutePath(self.pg1.remote_hosts[2].ip6, self.pg1.sw_if_index)],
+        )
         pre_res_route6.add_vpp_config()
 
         # Add a route to 10.1.2.3 and expect the "untranslated" traffic to be
         # sent via that route next-hop.
         pre_res_route6.add_vpp_config()
 
         # Add a route to 10.1.2.3 and expect the "untranslated" traffic to be
         # sent via that route next-hop.
-        pre_res_route4 = VppIpRoute(self, "10.1.2.3", 32,
-                                    [VppRoutePath(self.pg0.remote_hosts[1].ip4,
-                                                  self.pg0.sw_if_index)])
+        pre_res_route4 = VppIpRoute(
+            self,
+            "10.1.2.3",
+            32,
+            [VppRoutePath(self.pg0.remote_hosts[1].ip4, self.pg0.sw_if_index)],
+        )
         pre_res_route4.add_vpp_config()
 
         # Send an IPv4 packet that will be translated
         p_ether = Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
         pre_res_route4.add_vpp_config()
 
         # Send an IPv4 packet that will be translated
         p_ether = Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
-        p_ip4 = IP(src=self.pg0.remote_ip4, dst='192.168.0.1')
-        payload = TCP(sport=0xabcd, dport=0xabcd)
-        p4 = (p_ether / p_ip4 / payload)
-
-        p6_translated = (IPv6(src="1234:5678:90ab:cdef:ac:1001:200:0",
-                              dst="2001:db8:1f0::c0a8:1:f") / payload)
+        p_ip4 = IP(src=self.pg0.remote_ip4, dst="192.168.0.1")
+        payload = TCP(sport=0xABCD, dport=0xABCD)
+        p4 = p_ether / p_ip4 / payload
+
+        p6_translated = (
+            IPv6(src="1234:5678:90ab:cdef:ac:1001:200:0", dst="2001:db8:1f0::c0a8:1:f")
+            / payload
+        )
         p6_translated.hlim -= 1
 
         p6_translated.hlim -= 1
 
-        rx = self.send_and_expect(self.pg0, p4*1, self.pg1)
+        rx = self.send_and_expect(self.pg0, p4 * 1, self.pg1)
         for p in rx:
             self.assertEqual(p[Ether].dst, self.pg1.remote_hosts[2].mac)
             self.validate(p[1], p6_translated)
 
         # Send back an IPv6 packet that will be "untranslated"
         p_ether6 = Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac)
         for p in rx:
             self.assertEqual(p[Ether].dst, self.pg1.remote_hosts[2].mac)
             self.validate(p[1], p6_translated)
 
         # Send back an IPv6 packet that will be "untranslated"
         p_ether6 = Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac)
-        p_ip6 = IPv6(src='2001:db8:1f0::c0a8:1:f',
-                     dst='1234:5678:90ab:cdef:ac:1001:200:0')
-        p6 = (p_ether6 / p_ip6 / payload)
+        p_ip6 = IPv6(
+            src="2001:db8:1f0::c0a8:1:f", dst="1234:5678:90ab:cdef:ac:1001:200:0"
+        )
+        p6 = p_ether6 / p_ip6 / payload
 
 
-        p4_translated = (IP(src='192.168.0.1',
-                            dst=self.pg0.remote_ip4) / payload)
+        p4_translated = IP(src="192.168.0.1", dst=self.pg0.remote_ip4) / payload
         p4_translated.id = 0
         p4_translated.ttl -= 1
 
         p4_translated.id = 0
         p4_translated.ttl -= 1
 
-        rx = self.send_and_expect(self.pg1, p6*1, self.pg0)
+        rx = self.send_and_expect(self.pg1, p6 * 1, self.pg0)
         for p in rx:
             self.assertEqual(p[Ether].dst, self.pg0.remote_hosts[1].mac)
             self.validate(p[1], p4_translated)
 
         # Cleanup pre-resolve option
         for p in rx:
             self.assertEqual(p[Ether].dst, self.pg0.remote_hosts[1].mac)
             self.validate(p[1], p4_translated)
 
         # Cleanup pre-resolve option
-        self.vapi.map_param_add_del_pre_resolve(ip4_nh_address="10.1.2.3",
-                                                ip6_nh_address="4001::1",
-                                                is_add=0)
+        self.vapi.map_param_add_del_pre_resolve(
+            ip4_nh_address="10.1.2.3", ip6_nh_address="4001::1", is_add=0
+        )
 
 
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index 3fe5c83..ae09e9b 100644 (file)
@@ -17,7 +17,7 @@ from scapy.layers.inet6 import ICMPv6EchoRequest, ICMPv6EchoReply, IPerror6
 
 
 class TestMAPBR(VppTestCase):
 
 
 class TestMAPBR(VppTestCase):
-    """ MAP-T Test Cases """
+    """MAP-T Test Cases"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -51,36 +51,37 @@ class TestMAPBR(VppTestCase):
         #
         # BR configuration parameters used for all test.
         #
         #
         # BR configuration parameters used for all test.
         #
-        self.ip4_prefix = '198.18.0.0/24'
-        self.ip6_prefix = '2001:db8:f0::/48'
-        self.ip6_src = '2001:db8:ffff:ff00::/64'
+        self.ip4_prefix = "198.18.0.0/24"
+        self.ip6_prefix = "2001:db8:f0::/48"
+        self.ip6_src = "2001:db8:ffff:ff00::/64"
         self.ea_bits_len = 12
         self.psid_offset = 6
         self.psid_length = 4
         self.mtu = 1500
         self.ea_bits_len = 12
         self.psid_offset = 6
         self.psid_length = 4
         self.mtu = 1500
-        self.tag = 'MAP-T BR'
+        self.tag = "MAP-T BR"
 
         self.ipv4_internet_address = self.pg0.remote_ip4
         self.ipv4_map_address = "198.18.0.12"
         self.ipv4_udp_or_tcp_internet_port = 65000
         self.ipv4_udp_or_tcp_map_port = 16606
 
 
         self.ipv4_internet_address = self.pg0.remote_ip4
         self.ipv4_map_address = "198.18.0.12"
         self.ipv4_udp_or_tcp_internet_port = 65000
         self.ipv4_udp_or_tcp_map_port = 16606
 
-        self.ipv6_cpe_address = "2001:db8:f0:c30:0:c612:c:3"      # 198.18.0.12
-        self.ipv6_spoof_address = "2001:db8:f0:c30:0:c612:1c:3"   # 198.18.0.28
-        self.ipv6_spoof_prefix = "2001:db8:f0:c30:0:a00:c:3"      # 10.0.0.12
-        self.ipv6_spoof_psid = "2001:db8:f0:c30:0:c612:c:4"       # 4
-        self.ipv6_spoof_subnet = "2001:db8:f1:c30:0:c612:c:3"     # f1
+        self.ipv6_cpe_address = "2001:db8:f0:c30:0:c612:c:3"  # 198.18.0.12
+        self.ipv6_spoof_address = "2001:db8:f0:c30:0:c612:1c:3"  # 198.18.0.28
+        self.ipv6_spoof_prefix = "2001:db8:f0:c30:0:a00:c:3"  # 10.0.0.12
+        self.ipv6_spoof_psid = "2001:db8:f0:c30:0:c612:c:4"  # 4
+        self.ipv6_spoof_subnet = "2001:db8:f1:c30:0:c612:c:3"  # f1
 
         self.ipv6_udp_or_tcp_internet_port = 65000
         self.ipv6_udp_or_tcp_map_port = 16606
         self.ipv6_udp_or_tcp_spoof_port = 16862
 
 
         self.ipv6_udp_or_tcp_internet_port = 65000
         self.ipv6_udp_or_tcp_map_port = 16606
         self.ipv6_udp_or_tcp_spoof_port = 16862
 
-        self.ipv6_map_address = (
-            "2001:db8:ffff:ff00:ac:1001:200:0")         # 176.16.1.2
+        self.ipv6_map_address = "2001:db8:ffff:ff00:ac:1001:200:0"  # 176.16.1.2
         self.ipv6_map_same_rule_diff_addr = (
         self.ipv6_map_same_rule_diff_addr = (
-            "2001:db8:ffff:ff00:c6:1200:1000:0")        # 198.18.0.16
+            "2001:db8:ffff:ff00:c6:1200:1000:0"  # 198.18.0.16
+        )
         self.ipv6_map_same_rule_same_addr = (
         self.ipv6_map_same_rule_same_addr = (
-            "2001:db8:ffff:ff00:c6:1200:c00:0")         # 198.18.0.12
+            "2001:db8:ffff:ff00:c6:1200:c00:0"  # 198.18.0.12
+        )
 
         self.map_br_prefix = "2001:db8:f0::"
         self.map_br_prefix_len = 48
 
         self.map_br_prefix = "2001:db8:f0::"
         self.map_br_prefix_len = 48
@@ -89,24 +90,27 @@ class TestMAPBR(VppTestCase):
         #
         # Add an IPv6 route to the MAP-BR.
         #
         #
         # Add an IPv6 route to the MAP-BR.
         #
-        map_route = VppIpRoute(self,
-                               self.map_br_prefix,
-                               self.map_br_prefix_len,
-                               [VppRoutePath(self.pg1.remote_ip6,
-                                             self.pg1.sw_if_index)])
+        map_route = VppIpRoute(
+            self,
+            self.map_br_prefix,
+            self.map_br_prefix_len,
+            [VppRoutePath(self.pg1.remote_ip6, self.pg1.sw_if_index)],
+        )
         map_route.add_vpp_config()
 
         #
         # Add a MAP BR domain that maps from pg0 to pg1.
         #
         map_route.add_vpp_config()
 
         #
         # Add a MAP BR domain that maps from pg0 to pg1.
         #
-        self.vapi.map_add_domain(ip4_prefix=self.ip4_prefix,
-                                 ip6_prefix=self.ip6_prefix,
-                                 ip6_src=self.ip6_src,
-                                 ea_bits_len=self.ea_bits_len,
-                                 psid_offset=self.psid_offset,
-                                 psid_length=self.psid_length,
-                                 mtu=self.mtu,
-                                 tag=self.tag)
+        self.vapi.map_add_domain(
+            ip4_prefix=self.ip4_prefix,
+            ip6_prefix=self.ip6_prefix,
+            ip6_src=self.ip6_src,
+            ea_bits_len=self.ea_bits_len,
+            psid_offset=self.psid_offset,
+            psid_length=self.psid_length,
+            mtu=self.mtu,
+            tag=self.tag,
+        )
 
         #
         # Set BR parameters.
 
         #
         # Set BR parameters.
@@ -119,17 +123,17 @@ class TestMAPBR(VppTestCase):
         #
         # Enable MAP-T on interfaces.
         #
         #
         # Enable MAP-T on interfaces.
         #
-        self.vapi.map_if_enable_disable(is_enable=1,
-                                        sw_if_index=self.pg0.sw_if_index,
-                                        is_translation=1)
+        self.vapi.map_if_enable_disable(
+            is_enable=1, sw_if_index=self.pg0.sw_if_index, is_translation=1
+        )
 
 
-        self.vapi.map_if_enable_disable(is_enable=1,
-                                        sw_if_index=self.pg1.sw_if_index,
-                                        is_translation=1)
+        self.vapi.map_if_enable_disable(
+            is_enable=1, sw_if_index=self.pg1.sw_if_index, is_translation=1
+        )
 
 
-        self.vapi.map_if_enable_disable(is_enable=1,
-                                        sw_if_index=self.pg1.sw_if_index,
-                                        is_translation=1)
+        self.vapi.map_if_enable_disable(
+            is_enable=1, sw_if_index=self.pg1.sw_if_index, is_translation=1
+        )
 
     def tearDown(self):
         super(TestMAPBR, self).tearDown()
 
     def tearDown(self):
         super(TestMAPBR, self).tearDown()
@@ -162,15 +166,14 @@ class TestMAPBR(VppTestCase):
     #
 
     def test_map_t_udp_ip4_to_ip6(self):
     #
 
     def test_map_t_udp_ip4_to_ip6(self):
-        """ MAP-T UDP IPv4 -> IPv6 """
-
-        eth = Ether(src=self.pg0.remote_mac,
-                    dst=self.pg0.local_mac)
-        ip = IP(src=self.pg0.remote_ip4,
-                dst=self.ipv4_map_address,
-                tos=0)
-        udp = UDP(sport=self.ipv4_udp_or_tcp_internet_port,
-                  dport=self.ipv4_udp_or_tcp_map_port)
+        """MAP-T UDP IPv4 -> IPv6"""
+
+        eth = Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+        ip = IP(src=self.pg0.remote_ip4, dst=self.ipv4_map_address, tos=0)
+        udp = UDP(
+            sport=self.ipv4_udp_or_tcp_internet_port,
+            dport=self.ipv4_udp_or_tcp_map_port,
+        )
         payload = "a" * 82
         tx_pkt = eth / ip / udp / payload
 
         payload = "a" * 82
         tx_pkt = eth / ip / udp / payload
 
@@ -181,7 +184,7 @@ class TestMAPBR(VppTestCase):
 
         self.v6_address_check(rx_pkt)
         self.v6_port_check(rx_pkt, UDP)
 
         self.v6_address_check(rx_pkt)
         self.v6_port_check(rx_pkt, UDP)
-        self.assertEqual(rx_pkt[IPv6].tc, 0)    # IPv4 ToS passed to v6 TC
+        self.assertEqual(rx_pkt[IPv6].tc, 0)  # IPv4 ToS passed to v6 TC
         self.assertEqual(rx_pkt[IPv6].nh, IPv6(nh="UDP").nh)
 
     #
         self.assertEqual(rx_pkt[IPv6].nh, IPv6(nh="UDP").nh)
 
     #
@@ -192,15 +195,14 @@ class TestMAPBR(VppTestCase):
     #
 
     def test_map_t_tcp_ip4_to_ip6(self):
     #
 
     def test_map_t_tcp_ip4_to_ip6(self):
-        """ MAP-T TCP IPv4 -> IPv6 """
-
-        eth = Ether(src=self.pg0.remote_mac,
-                    dst=self.pg0.local_mac)
-        ip = IP(src=self.pg0.remote_ip4,
-                dst=self.ipv4_map_address,
-                tos=0)
-        tcp = TCP(sport=self.ipv4_udp_or_tcp_internet_port,
-                  dport=self.ipv4_udp_or_tcp_map_port)
+        """MAP-T TCP IPv4 -> IPv6"""
+
+        eth = Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+        ip = IP(src=self.pg0.remote_ip4, dst=self.ipv4_map_address, tos=0)
+        tcp = TCP(
+            sport=self.ipv4_udp_or_tcp_internet_port,
+            dport=self.ipv4_udp_or_tcp_map_port,
+        )
         payload = "a" * 82
         tx_pkt = eth / ip / tcp / payload
 
         payload = "a" * 82
         tx_pkt = eth / ip / tcp / payload
 
@@ -211,7 +213,7 @@ class TestMAPBR(VppTestCase):
 
         self.v6_address_check(rx_pkt)
         self.v6_port_check(rx_pkt, TCP)
 
         self.v6_address_check(rx_pkt)
         self.v6_port_check(rx_pkt, TCP)
-        self.assertEqual(rx_pkt[IPv6].tc, 0)    # IPv4 ToS passed to v6 TC
+        self.assertEqual(rx_pkt[IPv6].tc, 0)  # IPv4 ToS passed to v6 TC
         self.assertEqual(rx_pkt[IPv6].nh, IPv6(nh="TCP").nh)
 
     #
         self.assertEqual(rx_pkt[IPv6].nh, IPv6(nh="TCP").nh)
 
     #
@@ -221,14 +223,14 @@ class TestMAPBR(VppTestCase):
     #
 
     def test_map_t_udp_ip6_to_ip4(self):
     #
 
     def test_map_t_udp_ip6_to_ip4(self):
-        """ MAP-T UDP IPv6 -> IPv4 """
-
-        eth = Ether(src=self.pg1.remote_mac,
-                    dst=self.pg1.local_mac)
-        ip = IPv6(src=self.ipv6_cpe_address,
-                  dst=self.ipv6_map_address)
-        udp = UDP(sport=self.ipv6_udp_or_tcp_map_port,
-                  dport=self.ipv6_udp_or_tcp_internet_port)
+        """MAP-T UDP IPv6 -> IPv4"""
+
+        eth = Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
+        ip = IPv6(src=self.ipv6_cpe_address, dst=self.ipv6_map_address)
+        udp = UDP(
+            sport=self.ipv6_udp_or_tcp_map_port,
+            dport=self.ipv6_udp_or_tcp_internet_port,
+        )
         payload = "a" * 82
         tx_pkt = eth / ip / udp / payload
 
         payload = "a" * 82
         tx_pkt = eth / ip / udp / payload
 
@@ -240,7 +242,7 @@ class TestMAPBR(VppTestCase):
         self.v4_address_check(rx_pkt)
         self.v4_port_check(rx_pkt, UDP)
         self.assertEqual(rx_pkt[IP].proto, IP(proto="udp").proto)
         self.v4_address_check(rx_pkt)
         self.v4_port_check(rx_pkt, UDP)
         self.assertEqual(rx_pkt[IP].proto, IP(proto="udp").proto)
-        self.assertEqual(rx_pkt[IP].tos, 0)    # IPv6 TC passed to v4 ToS
+        self.assertEqual(rx_pkt[IP].tos, 0)  # IPv6 TC passed to v4 ToS
         df_bit = IP(flags="DF").flags
         self.assertNotEqual(rx_pkt[IP].flags & df_bit, df_bit)
 
         df_bit = IP(flags="DF").flags
         self.assertNotEqual(rx_pkt[IP].flags & df_bit, df_bit)
 
@@ -251,14 +253,14 @@ class TestMAPBR(VppTestCase):
     #
 
     def test_map_t_tcp_ip6_to_ip4(self):
     #
 
     def test_map_t_tcp_ip6_to_ip4(self):
-        """ MAP-T TCP IPv6 -> IPv4 """
-
-        eth = Ether(src=self.pg1.remote_mac,
-                    dst=self.pg1.local_mac)
-        ip = IPv6(src=self.ipv6_cpe_address,
-                  dst=self.ipv6_map_address)
-        tcp = TCP(sport=self.ipv6_udp_or_tcp_map_port,
-                  dport=self.ipv6_udp_or_tcp_internet_port)
+        """MAP-T TCP IPv6 -> IPv4"""
+
+        eth = Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
+        ip = IPv6(src=self.ipv6_cpe_address, dst=self.ipv6_map_address)
+        tcp = TCP(
+            sport=self.ipv6_udp_or_tcp_map_port,
+            dport=self.ipv6_udp_or_tcp_internet_port,
+        )
         payload = "a" * 82
         tx_pkt = eth / ip / tcp / payload
 
         payload = "a" * 82
         tx_pkt = eth / ip / tcp / payload
 
@@ -270,7 +272,7 @@ class TestMAPBR(VppTestCase):
         self.v4_address_check(rx_pkt)
         self.v4_port_check(rx_pkt, TCP)
         self.assertEqual(rx_pkt[IP].proto, IP(proto="tcp").proto)
         self.v4_address_check(rx_pkt)
         self.v4_port_check(rx_pkt, TCP)
         self.assertEqual(rx_pkt[IP].proto, IP(proto="tcp").proto)
-        self.assertEqual(rx_pkt[IP].tos, 0)    # IPv6 TC passed to v4 ToS
+        self.assertEqual(rx_pkt[IP].tos, 0)  # IPv6 TC passed to v4 ToS
         df_bit = IP(flags="DF").flags
         self.assertNotEqual(rx_pkt[IP].flags & df_bit, df_bit)
 
         df_bit = IP(flags="DF").flags
         self.assertNotEqual(rx_pkt[IP].flags & df_bit, df_bit)
 
@@ -280,14 +282,11 @@ class TestMAPBR(VppTestCase):
     #
 
     def test_map_t_echo_request_ip4_to_ip6(self):
     #
 
     def test_map_t_echo_request_ip4_to_ip6(self):
-        """ MAP-T echo request IPv4 -> IPv6 """
-
-        eth = Ether(src=self.pg1.remote_mac,
-                    dst=self.pg1.local_mac)
-        ip = IP(src=self.pg0.remote_ip4,
-                dst=self.ipv4_map_address)
-        icmp = ICMP(type="echo-request",
-                    id=self.ipv6_udp_or_tcp_map_port)
+        """MAP-T echo request IPv4 -> IPv6"""
+
+        eth = Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
+        ip = IP(src=self.pg0.remote_ip4, dst=self.ipv4_map_address)
+        icmp = ICMP(type="echo-request", id=self.ipv6_udp_or_tcp_map_port)
         payload = "H" * 10
         tx_pkt = eth / ip / icmp / payload
 
         payload = "H" * 10
         tx_pkt = eth / ip / icmp / payload
 
@@ -297,11 +296,11 @@ class TestMAPBR(VppTestCase):
         rx_pkt = rx_pkts[0]
 
         self.assertEqual(rx_pkt[IPv6].nh, IPv6(nh="ICMPv6").nh)
         rx_pkt = rx_pkts[0]
 
         self.assertEqual(rx_pkt[IPv6].nh, IPv6(nh="ICMPv6").nh)
-        self.assertEqual(rx_pkt[ICMPv6EchoRequest].type,
-                         ICMPv6EchoRequest(type="Echo Request").type)
+        self.assertEqual(
+            rx_pkt[ICMPv6EchoRequest].type, ICMPv6EchoRequest(type="Echo Request").type
+        )
         self.assertEqual(rx_pkt[ICMPv6EchoRequest].code, 0)
         self.assertEqual(rx_pkt[ICMPv6EchoRequest].code, 0)
-        self.assertEqual(rx_pkt[ICMPv6EchoRequest].id,
-                         self.ipv6_udp_or_tcp_map_port)
+        self.assertEqual(rx_pkt[ICMPv6EchoRequest].id, self.ipv6_udp_or_tcp_map_port)
 
     #
     # Translation of ICMP Echo Reply v4 -> v6 direction
 
     #
     # Translation of ICMP Echo Reply v4 -> v6 direction
@@ -309,14 +308,11 @@ class TestMAPBR(VppTestCase):
     #
 
     def test_map_t_echo_reply_ip4_to_ip6(self):
     #
 
     def test_map_t_echo_reply_ip4_to_ip6(self):
-        """ MAP-T echo reply IPv4 -> IPv6 """
-
-        eth = Ether(src=self.pg1.remote_mac,
-                    dst=self.pg1.local_mac)
-        ip = IP(src=self.pg0.remote_ip4,
-                dst=self.ipv4_map_address)
-        icmp = ICMP(type="echo-reply",
-                    id=self.ipv6_udp_or_tcp_map_port)
+        """MAP-T echo reply IPv4 -> IPv6"""
+
+        eth = Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
+        ip = IP(src=self.pg0.remote_ip4, dst=self.ipv4_map_address)
+        icmp = ICMP(type="echo-reply", id=self.ipv6_udp_or_tcp_map_port)
         payload = "H" * 10
         tx_pkt = eth / ip / icmp / payload
 
         payload = "H" * 10
         tx_pkt = eth / ip / icmp / payload
 
@@ -326,11 +322,11 @@ class TestMAPBR(VppTestCase):
         rx_pkt = rx_pkts[0]
 
         self.assertEqual(rx_pkt[IPv6].nh, IPv6(nh="ICMPv6").nh)
         rx_pkt = rx_pkts[0]
 
         self.assertEqual(rx_pkt[IPv6].nh, IPv6(nh="ICMPv6").nh)
-        self.assertEqual(rx_pkt[ICMPv6EchoReply].type,
-                         ICMPv6EchoReply(type="Echo Reply").type)
+        self.assertEqual(
+            rx_pkt[ICMPv6EchoReply].type, ICMPv6EchoReply(type="Echo Reply").type
+        )
         self.assertEqual(rx_pkt[ICMPv6EchoReply].code, 0)
         self.assertEqual(rx_pkt[ICMPv6EchoReply].code, 0)
-        self.assertEqual(rx_pkt[ICMPv6EchoReply].id,
-                         self.ipv6_udp_or_tcp_map_port)
+        self.assertEqual(rx_pkt[ICMPv6EchoReply].id, self.ipv6_udp_or_tcp_map_port)
 
     #
     # Translation of ICMP Time Exceeded v4 -> v6 direction
 
     #
     # Translation of ICMP Time Exceeded v4 -> v6 direction
@@ -338,17 +334,16 @@ class TestMAPBR(VppTestCase):
     #
 
     def test_map_t_time_exceeded_ip4_to_ip6(self):
     #
 
     def test_map_t_time_exceeded_ip4_to_ip6(self):
-        """ MAP-T time exceeded IPv4 -> IPv6 """
+        """MAP-T time exceeded IPv4 -> IPv6"""
 
 
-        eth = Ether(src=self.pg0.remote_mac,
-                    dst=self.pg0.local_mac)
-        ip = IP(src=self.pg0.remote_ip4,
-                dst=self.ipv4_map_address)
+        eth = Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+        ip = IP(src=self.pg0.remote_ip4, dst=self.ipv4_map_address)
         icmp = ICMP(type="time-exceeded", code="ttl-zero-during-transit")
         icmp = ICMP(type="time-exceeded", code="ttl-zero-during-transit")
-        ip_inner = IP(dst=self.pg0.remote_ip4,
-                      src=self.ipv4_map_address, ttl=1)
-        udp_inner = UDP(sport=self.ipv4_udp_or_tcp_map_port,
-                        dport=self.ipv4_udp_or_tcp_internet_port)
+        ip_inner = IP(dst=self.pg0.remote_ip4, src=self.ipv4_map_address, ttl=1)
+        udp_inner = UDP(
+            sport=self.ipv4_udp_or_tcp_map_port,
+            dport=self.ipv4_udp_or_tcp_internet_port,
+        )
         payload = "H" * 10
         tx_pkt = eth / ip / icmp / ip_inner / udp_inner / payload
 
         payload = "H" * 10
         tx_pkt = eth / ip / icmp / ip_inner / udp_inner / payload
 
@@ -359,19 +354,18 @@ class TestMAPBR(VppTestCase):
 
         self.v6_address_check(rx_pkt)
         self.assertEqual(rx_pkt[IPv6].nh, IPv6(nh="ICMPv6").nh)
 
         self.v6_address_check(rx_pkt)
         self.assertEqual(rx_pkt[IPv6].nh, IPv6(nh="ICMPv6").nh)
-        self.assertEqual(rx_pkt[ICMPv6TimeExceeded].type,
-                         ICMPv6TimeExceeded().type)
-        self.assertEqual(rx_pkt[ICMPv6TimeExceeded].code,
-                         ICMPv6TimeExceeded(
-            code="hop limit exceeded in transit").code)
+        self.assertEqual(rx_pkt[ICMPv6TimeExceeded].type, ICMPv6TimeExceeded().type)
+        self.assertEqual(
+            rx_pkt[ICMPv6TimeExceeded].code,
+            ICMPv6TimeExceeded(code="hop limit exceeded in transit").code,
+        )
         self.assertEqual(rx_pkt[ICMPv6TimeExceeded].hlim, tx_pkt[IP][1].ttl)
         self.assertTrue(rx_pkt.haslayer(IPerror6))
         self.assertTrue(rx_pkt.haslayer(UDPerror))
         self.assertEqual(rx_pkt[IPv6].src, rx_pkt[IPerror6].dst)
         self.assertEqual(rx_pkt[IPv6].dst, rx_pkt[IPerror6].src)
         self.assertEqual(rx_pkt[UDPerror].sport, self.ipv6_udp_or_tcp_map_port)
         self.assertEqual(rx_pkt[ICMPv6TimeExceeded].hlim, tx_pkt[IP][1].ttl)
         self.assertTrue(rx_pkt.haslayer(IPerror6))
         self.assertTrue(rx_pkt.haslayer(UDPerror))
         self.assertEqual(rx_pkt[IPv6].src, rx_pkt[IPerror6].dst)
         self.assertEqual(rx_pkt[IPv6].dst, rx_pkt[IPerror6].src)
         self.assertEqual(rx_pkt[UDPerror].sport, self.ipv6_udp_or_tcp_map_port)
-        self.assertEqual(rx_pkt[UDPerror].dport,
-                         self.ipv6_udp_or_tcp_internet_port)
+        self.assertEqual(rx_pkt[UDPerror].dport, self.ipv6_udp_or_tcp_internet_port)
 
     #
     # Translation of ICMP Echo Request v6 -> v4 direction
 
     #
     # Translation of ICMP Echo Request v6 -> v4 direction
@@ -379,12 +373,10 @@ class TestMAPBR(VppTestCase):
     #
 
     def test_map_t_echo_request_ip6_to_ip4(self):
     #
 
     def test_map_t_echo_request_ip6_to_ip4(self):
-        """ MAP-T echo request IPv6 -> IPv4 """
+        """MAP-T echo request IPv6 -> IPv4"""
 
 
-        eth = Ether(src=self.pg1.remote_mac,
-                    dst=self.pg1.local_mac)
-        ip = IPv6(src=self.ipv6_cpe_address,
-                  dst=self.ipv6_map_address)
+        eth = Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
+        ip = IPv6(src=self.ipv6_cpe_address, dst=self.ipv6_map_address)
         icmp = ICMPv6EchoRequest()
         icmp.id = self.ipv6_udp_or_tcp_map_port
         payload = "H" * 10
         icmp = ICMPv6EchoRequest()
         icmp.id = self.ipv6_udp_or_tcp_map_port
         payload = "H" * 10
@@ -406,12 +398,10 @@ class TestMAPBR(VppTestCase):
     #
 
     def test_map_t_echo_reply_ip6_to_ip4(self):
     #
 
     def test_map_t_echo_reply_ip6_to_ip4(self):
-        """ MAP-T echo reply IPv6 -> IPv4 """
+        """MAP-T echo reply IPv6 -> IPv4"""
 
 
-        eth = Ether(src=self.pg1.remote_mac,
-                    dst=self.pg1.local_mac)
-        ip = IPv6(src=self.ipv6_cpe_address,
-                  dst=self.ipv6_map_address)
+        eth = Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
+        ip = IPv6(src=self.ipv6_cpe_address, dst=self.ipv6_map_address)
         icmp = ICMPv6EchoReply(id=self.ipv6_udp_or_tcp_map_port)
         payload = "H" * 10
         tx_pkt = eth / ip / icmp / payload
         icmp = ICMPv6EchoReply(id=self.ipv6_udp_or_tcp_map_port)
         payload = "H" * 10
         tx_pkt = eth / ip / icmp / payload
@@ -432,17 +422,16 @@ class TestMAPBR(VppTestCase):
     #
 
     def test_map_t_packet_too_big_ip6_to_ip4(self):
     #
 
     def test_map_t_packet_too_big_ip6_to_ip4(self):
-        """ MAP-T packet too big IPv6 -> IPv4 """
+        """MAP-T packet too big IPv6 -> IPv4"""
 
 
-        eth = Ether(src=self.pg1.remote_mac,
-                    dst=self.pg1.local_mac)
-        ip = IPv6(src=self.ipv6_cpe_address,
-                  dst=self.ipv6_map_address)
+        eth = Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
+        ip = IPv6(src=self.ipv6_cpe_address, dst=self.ipv6_map_address)
         icmp = ICMPv6PacketTooBig(mtu=1280)
         icmp = ICMPv6PacketTooBig(mtu=1280)
-        ip_inner = IPv6(src=self.ipv6_map_address,
-                        dst=self.ipv6_cpe_address)
-        udp_inner = UDP(sport=self.ipv6_udp_or_tcp_internet_port,
-                        dport=self.ipv6_udp_or_tcp_map_port)
+        ip_inner = IPv6(src=self.ipv6_map_address, dst=self.ipv6_cpe_address)
+        udp_inner = UDP(
+            sport=self.ipv6_udp_or_tcp_internet_port,
+            dport=self.ipv6_udp_or_tcp_map_port,
+        )
         payload = "H" * 10
         tx_pkt = eth / ip / icmp / ip_inner / udp_inner / payload
 
         payload = "H" * 10
         tx_pkt = eth / ip / icmp / ip_inner / udp_inner / payload
 
@@ -454,16 +443,13 @@ class TestMAPBR(VppTestCase):
         self.v4_address_check(rx_pkt)
         self.assertEqual(rx_pkt[IP].proto, IP(proto="icmp").proto)
         self.assertEqual(rx_pkt[ICMP].type, ICMP(type="dest-unreach").type)
         self.v4_address_check(rx_pkt)
         self.assertEqual(rx_pkt[IP].proto, IP(proto="icmp").proto)
         self.assertEqual(rx_pkt[ICMP].type, ICMP(type="dest-unreach").type)
-        self.assertEqual(rx_pkt[ICMP].code,
-                         ICMP(code="fragmentation-needed").code)
-        self.assertEqual(rx_pkt[ICMP].nexthopmtu,
-                         tx_pkt[ICMPv6PacketTooBig].mtu - 20)
+        self.assertEqual(rx_pkt[ICMP].code, ICMP(code="fragmentation-needed").code)
+        self.assertEqual(rx_pkt[ICMP].nexthopmtu, tx_pkt[ICMPv6PacketTooBig].mtu - 20)
         self.assertTrue(rx_pkt.haslayer(IPerror))
         self.assertTrue(rx_pkt.haslayer(UDPerror))
         self.assertEqual(rx_pkt[IP].src, rx_pkt[IPerror].dst)
         self.assertEqual(rx_pkt[IP].dst, rx_pkt[IPerror].src)
         self.assertTrue(rx_pkt.haslayer(IPerror))
         self.assertTrue(rx_pkt.haslayer(UDPerror))
         self.assertEqual(rx_pkt[IP].src, rx_pkt[IPerror].dst)
         self.assertEqual(rx_pkt[IP].dst, rx_pkt[IPerror].src)
-        self.assertEqual(rx_pkt[UDPerror].sport,
-                         self.ipv4_udp_or_tcp_internet_port)
+        self.assertEqual(rx_pkt[UDPerror].sport, self.ipv4_udp_or_tcp_internet_port)
         self.assertEqual(rx_pkt[UDPerror].dport, self.ipv4_udp_or_tcp_map_port)
 
     #
         self.assertEqual(rx_pkt[UDPerror].dport, self.ipv4_udp_or_tcp_map_port)
 
     #
@@ -472,17 +458,16 @@ class TestMAPBR(VppTestCase):
     #
 
     def test_map_t_time_exceeded_ip6_to_ip4(self):
     #
 
     def test_map_t_time_exceeded_ip6_to_ip4(self):
-        """ MAP-T time exceeded IPv6 -> IPv4 """
+        """MAP-T time exceeded IPv6 -> IPv4"""
 
 
-        eth = Ether(src=self.pg1.remote_mac,
-                    dst=self.pg1.local_mac)
-        ip = IPv6(src=self.ipv6_cpe_address,
-                  dst=self.ipv6_map_address)
+        eth = Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
+        ip = IPv6(src=self.ipv6_cpe_address, dst=self.ipv6_map_address)
         icmp = ICMPv6TimeExceeded()
         icmp = ICMPv6TimeExceeded()
-        ip_inner = IPv6(src=self.ipv6_map_address,
-                        dst=self.ipv6_cpe_address, hlim=1)
-        udp_inner = UDP(sport=self.ipv6_udp_or_tcp_internet_port,
-                        dport=self.ipv6_udp_or_tcp_map_port)
+        ip_inner = IPv6(src=self.ipv6_map_address, dst=self.ipv6_cpe_address, hlim=1)
+        udp_inner = UDP(
+            sport=self.ipv6_udp_or_tcp_internet_port,
+            dport=self.ipv6_udp_or_tcp_map_port,
+        )
         payload = "H" * 10
         tx_pkt = eth / ip / icmp / ip_inner / udp_inner / payload
 
         payload = "H" * 10
         tx_pkt = eth / ip / icmp / ip_inner / udp_inner / payload
 
@@ -494,15 +479,13 @@ class TestMAPBR(VppTestCase):
         self.v4_address_check(rx_pkt)
         self.assertEqual(rx_pkt[IP].proto, IP(proto="icmp").proto)
         self.assertEqual(rx_pkt[ICMP].type, ICMP(type="time-exceeded").type)
         self.v4_address_check(rx_pkt)
         self.assertEqual(rx_pkt[IP].proto, IP(proto="icmp").proto)
         self.assertEqual(rx_pkt[ICMP].type, ICMP(type="time-exceeded").type)
-        self.assertEqual(rx_pkt[ICMP].code,
-                         ICMP(code="ttl-zero-during-transit").code)
+        self.assertEqual(rx_pkt[ICMP].code, ICMP(code="ttl-zero-during-transit").code)
         self.assertEqual(rx_pkt[ICMP].ttl, tx_pkt[IPv6][1].hlim)
         self.assertTrue(rx_pkt.haslayer(IPerror))
         self.assertTrue(rx_pkt.haslayer(UDPerror))
         self.assertEqual(rx_pkt[IP].src, rx_pkt[IPerror].dst)
         self.assertEqual(rx_pkt[IP].dst, rx_pkt[IPerror].src)
         self.assertEqual(rx_pkt[ICMP].ttl, tx_pkt[IPv6][1].hlim)
         self.assertTrue(rx_pkt.haslayer(IPerror))
         self.assertTrue(rx_pkt.haslayer(UDPerror))
         self.assertEqual(rx_pkt[IP].src, rx_pkt[IPerror].dst)
         self.assertEqual(rx_pkt[IP].dst, rx_pkt[IPerror].src)
-        self.assertEqual(rx_pkt[UDPerror].sport,
-                         self.ipv4_udp_or_tcp_internet_port)
+        self.assertEqual(rx_pkt[UDPerror].sport, self.ipv4_udp_or_tcp_internet_port)
         self.assertEqual(rx_pkt[UDPerror].dport, self.ipv4_udp_or_tcp_map_port)
 
     #
         self.assertEqual(rx_pkt[UDPerror].dport, self.ipv4_udp_or_tcp_map_port)
 
     #
@@ -514,22 +497,21 @@ class TestMAPBR(VppTestCase):
     #
 
     def test_map_t_spoof_ipv4_src_addr_ip6_to_ip4(self):
     #
 
     def test_map_t_spoof_ipv4_src_addr_ip6_to_ip4(self):
-        """ MAP-T spoof ipv4 src addr IPv6 -> IPv4 """
-
-        eth = Ether(src=self.pg1.remote_mac,
-                    dst=self.pg1.local_mac)
-        ip = IPv6(src=self.ipv6_spoof_address,
-                  dst=self.ipv6_map_address)
-        udp = UDP(sport=self.ipv6_udp_or_tcp_map_port,
-                  dport=self.ipv6_udp_or_tcp_internet_port)
+        """MAP-T spoof ipv4 src addr IPv6 -> IPv4"""
+
+        eth = Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
+        ip = IPv6(src=self.ipv6_spoof_address, dst=self.ipv6_map_address)
+        udp = UDP(
+            sport=self.ipv6_udp_or_tcp_map_port,
+            dport=self.ipv6_udp_or_tcp_internet_port,
+        )
         payload = "a" * 82
         tx_pkt = eth / ip / udp / payload
 
         self.pg_send(self.pg1, tx_pkt * 1)
 
         self.pg0.get_capture(0, timeout=1)
         payload = "a" * 82
         tx_pkt = eth / ip / udp / payload
 
         self.pg_send(self.pg1, tx_pkt * 1)
 
         self.pg0.get_capture(0, timeout=1)
-        self.pg0.assert_nothing_captured(
-            remark="Should drop IPv4 spoof address")
+        self.pg0.assert_nothing_captured(remark="Should drop IPv4 spoof address")
 
     #
     # Spoofed IPv4 Source Prefix v6 -> v4 direction
 
     #
     # Spoofed IPv4 Source Prefix v6 -> v4 direction
@@ -539,22 +521,21 @@ class TestMAPBR(VppTestCase):
     #
 
     def test_map_t_spoof_ipv4_src_prefix_ip6_to_ip4(self):
     #
 
     def test_map_t_spoof_ipv4_src_prefix_ip6_to_ip4(self):
-        """ MAP-T spoof ipv4 src prefix IPv6 -> IPv4 """
-
-        eth = Ether(src=self.pg1.remote_mac,
-                    dst=self.pg1.local_mac)
-        ip = IPv6(src=self.ipv6_spoof_prefix,
-                  dst=self.ipv6_map_address)
-        udp = UDP(sport=self.ipv6_udp_or_tcp_map_port,
-                  dport=self.ipv6_udp_or_tcp_internet_port)
+        """MAP-T spoof ipv4 src prefix IPv6 -> IPv4"""
+
+        eth = Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
+        ip = IPv6(src=self.ipv6_spoof_prefix, dst=self.ipv6_map_address)
+        udp = UDP(
+            sport=self.ipv6_udp_or_tcp_map_port,
+            dport=self.ipv6_udp_or_tcp_internet_port,
+        )
         payload = "a" * 82
         tx_pkt = eth / ip / udp / payload
 
         self.pg_send(self.pg1, tx_pkt * 1)
 
         self.pg0.get_capture(0, timeout=1)
         payload = "a" * 82
         tx_pkt = eth / ip / udp / payload
 
         self.pg_send(self.pg1, tx_pkt * 1)
 
         self.pg0.get_capture(0, timeout=1)
-        self.pg0.assert_nothing_captured(
-            remark="Should drop IPv4 spoof prefix")
+        self.pg0.assert_nothing_captured(remark="Should drop IPv4 spoof prefix")
 
     #
     # Spoofed IPv6 PSID v6 -> v4 direction
 
     #
     # Spoofed IPv6 PSID v6 -> v4 direction
@@ -563,22 +544,21 @@ class TestMAPBR(VppTestCase):
     #
 
     def test_map_t_spoof_psid_ip6_to_ip4(self):
     #
 
     def test_map_t_spoof_psid_ip6_to_ip4(self):
-        """ MAP-T spoof psid IPv6 -> IPv4 """
-
-        eth = Ether(src=self.pg1.remote_mac,
-                    dst=self.pg1.local_mac)
-        ip = IPv6(src=self.ipv6_spoof_psid,
-                  dst=self.ipv6_map_address)
-        udp = UDP(sport=self.ipv6_udp_or_tcp_map_port,
-                  dport=self.ipv6_udp_or_tcp_internet_port)
+        """MAP-T spoof psid IPv6 -> IPv4"""
+
+        eth = Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
+        ip = IPv6(src=self.ipv6_spoof_psid, dst=self.ipv6_map_address)
+        udp = UDP(
+            sport=self.ipv6_udp_or_tcp_map_port,
+            dport=self.ipv6_udp_or_tcp_internet_port,
+        )
         payload = "a" * 82
         tx_pkt = eth / ip / udp / payload
 
         self.pg_send(self.pg1, tx_pkt * 1)
 
         self.pg0.get_capture(0, timeout=1)
         payload = "a" * 82
         tx_pkt = eth / ip / udp / payload
 
         self.pg_send(self.pg1, tx_pkt * 1)
 
         self.pg0.get_capture(0, timeout=1)
-        self.pg0.assert_nothing_captured(
-            remark="Should drop IPv6 spoof PSID")
+        self.pg0.assert_nothing_captured(remark="Should drop IPv6 spoof PSID")
 
     #
     # Spoofed IPv6 subnet field v6 -> v4 direction
 
     #
     # Spoofed IPv6 subnet field v6 -> v4 direction
@@ -587,22 +567,21 @@ class TestMAPBR(VppTestCase):
     #
 
     def test_map_t_spoof_subnet_ip6_to_ip4(self):
     #
 
     def test_map_t_spoof_subnet_ip6_to_ip4(self):
-        """ MAP-T spoof subnet IPv6 -> IPv4 """
-
-        eth = Ether(src=self.pg1.remote_mac,
-                    dst=self.pg1.local_mac)
-        ip = IPv6(src=self.ipv6_spoof_subnet,
-                  dst=self.ipv6_map_address)
-        udp = UDP(sport=self.ipv6_udp_or_tcp_map_port,
-                  dport=self.ipv6_udp_or_tcp_internet_port)
+        """MAP-T spoof subnet IPv6 -> IPv4"""
+
+        eth = Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
+        ip = IPv6(src=self.ipv6_spoof_subnet, dst=self.ipv6_map_address)
+        udp = UDP(
+            sport=self.ipv6_udp_or_tcp_map_port,
+            dport=self.ipv6_udp_or_tcp_internet_port,
+        )
         payload = "a" * 82
         tx_pkt = eth / ip / udp / payload
 
         self.pg_send(self.pg1, tx_pkt * 1)
 
         self.pg0.get_capture(0, timeout=1)
         payload = "a" * 82
         tx_pkt = eth / ip / udp / payload
 
         self.pg_send(self.pg1, tx_pkt * 1)
 
         self.pg0.get_capture(0, timeout=1)
-        self.pg0.assert_nothing_captured(
-            remark="Should drop IPv6 spoof subnet")
+        self.pg0.assert_nothing_captured(remark="Should drop IPv6 spoof subnet")
 
     #
     # Spoofed IPv6 port PSID v6 -> v4 direction
 
     #
     # Spoofed IPv6 port PSID v6 -> v4 direction
@@ -611,22 +590,21 @@ class TestMAPBR(VppTestCase):
     #
 
     def test_map_t_spoof_port_psid_ip6_to_ip4(self):
     #
 
     def test_map_t_spoof_port_psid_ip6_to_ip4(self):
-        """ MAP-T spoof port psid IPv6 -> IPv4 """
-
-        eth = Ether(src=self.pg1.remote_mac,
-                    dst=self.pg1.local_mac)
-        ip = IPv6(src=self.ipv6_cpe_address,
-                  dst=self.ipv6_map_address)
-        udp = UDP(sport=self.ipv6_udp_or_tcp_spoof_port,
-                  dport=self.ipv6_udp_or_tcp_internet_port)
+        """MAP-T spoof port psid IPv6 -> IPv4"""
+
+        eth = Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
+        ip = IPv6(src=self.ipv6_cpe_address, dst=self.ipv6_map_address)
+        udp = UDP(
+            sport=self.ipv6_udp_or_tcp_spoof_port,
+            dport=self.ipv6_udp_or_tcp_internet_port,
+        )
         payload = "a" * 82
         tx_pkt = eth / ip / udp / payload
 
         self.pg_send(self.pg1, tx_pkt * 1)
 
         self.pg0.get_capture(0, timeout=1)
         payload = "a" * 82
         tx_pkt = eth / ip / udp / payload
 
         self.pg_send(self.pg1, tx_pkt * 1)
 
         self.pg0.get_capture(0, timeout=1)
-        self.pg0.assert_nothing_captured(
-            remark="Should drop IPv6 spoof port PSID")
+        self.pg0.assert_nothing_captured(remark="Should drop IPv6 spoof port PSID")
 
     #
     # Spoofed IPv6 ICMP ID PSID v6 -> v4 direction
 
     #
     # Spoofed IPv6 ICMP ID PSID v6 -> v4 direction
@@ -635,12 +613,10 @@ class TestMAPBR(VppTestCase):
     #
 
     def test_map_t_spoof_icmp_id_psid_ip6_to_ip4(self):
     #
 
     def test_map_t_spoof_icmp_id_psid_ip6_to_ip4(self):
-        """ MAP-T spoof ICMP id psid IPv6 -> IPv4 """
+        """MAP-T spoof ICMP id psid IPv6 -> IPv4"""
 
 
-        eth = Ether(src=self.pg1.remote_mac,
-                    dst=self.pg1.local_mac)
-        ip = IPv6(src=self.ipv6_cpe_address,
-                  dst=self.ipv6_map_address)
+        eth = Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
+        ip = IPv6(src=self.ipv6_cpe_address, dst=self.ipv6_map_address)
         icmp = ICMPv6EchoRequest()
         icmp.id = self.ipv6_udp_or_tcp_spoof_port
         payload = "H" * 10
         icmp = ICMPv6EchoRequest()
         icmp.id = self.ipv6_udp_or_tcp_spoof_port
         payload = "H" * 10
@@ -649,8 +625,7 @@ class TestMAPBR(VppTestCase):
         self.pg_send(self.pg1, tx_pkt * 1)
 
         self.pg0.get_capture(0, timeout=1)
         self.pg_send(self.pg1, tx_pkt * 1)
 
         self.pg0.get_capture(0, timeout=1)
-        self.pg0.assert_nothing_captured(
-            remark="Should drop IPv6 spoof port PSID")
+        self.pg0.assert_nothing_captured(remark="Should drop IPv6 spoof port PSID")
 
     #
     # Map to Map - same rule, different address
 
     #
     # Map to Map - same rule, different address
@@ -658,14 +633,11 @@ class TestMAPBR(VppTestCase):
 
     @unittest.skip("Fixme: correct behavior needs clarification")
     def test_map_t_same_rule_diff_addr_ip6_to_ip4(self):
 
     @unittest.skip("Fixme: correct behavior needs clarification")
     def test_map_t_same_rule_diff_addr_ip6_to_ip4(self):
-        """ MAP-T same rule, diff addr IPv6 -> IPv6 """
-
-        eth = Ether(src=self.pg1.remote_mac,
-                    dst=self.pg1.local_mac)
-        ip = IPv6(src=self.ipv6_cpe_address,
-                  dst=self.ipv6_map_same_rule_diff_addr)
-        udp = UDP(sport=self.ipv6_udp_or_tcp_map_port,
-                  dport=1025)
+        """MAP-T same rule, diff addr IPv6 -> IPv6"""
+
+        eth = Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
+        ip = IPv6(src=self.ipv6_cpe_address, dst=self.ipv6_map_same_rule_diff_addr)
+        udp = UDP(sport=self.ipv6_udp_or_tcp_map_port, dport=1025)
         payload = "a" * 82
         tx_pkt = eth / ip / udp / payload
 
         payload = "a" * 82
         tx_pkt = eth / ip / udp / payload
 
@@ -680,14 +652,11 @@ class TestMAPBR(VppTestCase):
 
     @unittest.skip("Fixme: correct behavior needs clarification")
     def test_map_t_same_rule_same_addr_ip6_to_ip4(self):
 
     @unittest.skip("Fixme: correct behavior needs clarification")
     def test_map_t_same_rule_same_addr_ip6_to_ip4(self):
-        """ MAP-T same rule, same addr IPv6 -> IPv6 """
-
-        eth = Ether(src=self.pg1.remote_mac,
-                    dst=self.pg1.local_mac)
-        ip = IPv6(src=self.ipv6_cpe_address,
-                  dst=self.ipv6_map_same_rule_same_addr)
-        udp = UDP(sport=self.ipv6_udp_or_tcp_map_port,
-                  dport=1025)
+        """MAP-T same rule, same addr IPv6 -> IPv6"""
+
+        eth = Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
+        ip = IPv6(src=self.ipv6_cpe_address, dst=self.ipv6_map_same_rule_same_addr)
+        udp = UDP(sport=self.ipv6_udp_or_tcp_map_port, dport=1025)
         payload = "a" * 82
         tx_pkt = eth / ip / udp / payload
 
         payload = "a" * 82
         tx_pkt = eth / ip / udp / payload
 
@@ -697,5 +666,5 @@ class TestMAPBR(VppTestCase):
         rx_pkt = rx_pkts[0]
 
 
         rx_pkt = rx_pkts[0]
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index 26e44f2..9b15cd0 100644 (file)
@@ -7,26 +7,25 @@ from scapy.layers.inet import IP, ICMP
 from framework import VppTestCase, VppTestRunner
 from framework import tag_run_solo
 from remote_test import RemoteClass, RemoteVppTestCase
 from framework import VppTestCase, VppTestRunner
 from framework import tag_run_solo
 from remote_test import RemoteClass, RemoteVppTestCase
-from vpp_memif import remove_all_memif_vpp_config, \
-    VppSocketFilename, VppMemif
+from vpp_memif import remove_all_memif_vpp_config, VppSocketFilename, VppMemif
 from vpp_ip_route import VppIpRoute, VppRoutePath
 from vpp_papi import VppEnum
 
 
 @tag_run_solo
 class TestMemif(VppTestCase):
 from vpp_ip_route import VppIpRoute, VppRoutePath
 from vpp_papi import VppEnum
 
 
 @tag_run_solo
 class TestMemif(VppTestCase):
-    """ Memif Test Case """
+    """Memif Test Case"""
+
     remote_class = RemoteVppTestCase
 
     @classmethod
     def get_cpus_required(cls):
     remote_class = RemoteVppTestCase
 
     @classmethod
     def get_cpus_required(cls):
-        return (super().get_cpus_required() +
-                cls.remote_class.get_cpus_required())
+        return super().get_cpus_required() + cls.remote_class.get_cpus_required()
 
     @classmethod
     def assign_cpus(cls, cpus):
 
     @classmethod
     def assign_cpus(cls, cpus):
-        remote_cpus = cpus[:cls.remote_class.get_cpus_required()]
-        my_cpus = cpus[cls.remote_class.get_cpus_required():]
+        remote_cpus = cpus[: cls.remote_class.get_cpus_required()]
+        my_cpus = cpus[cls.remote_class.get_cpus_required() :]
         cls.remote_class.assign_cpus(remote_cpus)
         super().assign_cpus(my_cpus)
 
         cls.remote_class.assign_cpus(remote_cpus)
         super().assign_cpus(my_cpus)
 
@@ -61,56 +60,47 @@ class TestMemif(VppTestCase):
 
     def _check_socket_filename(self, dump, socket_id, filename):
         for d in dump:
 
     def _check_socket_filename(self, dump, socket_id, filename):
         for d in dump:
-            if (d.socket_id == socket_id) and (
-                    d.socket_filename == filename):
+            if (d.socket_id == socket_id) and (d.socket_filename == filename):
                 return True
         return False
 
     def test_memif_socket_filename_add_del(self):
                 return True
         return False
 
     def test_memif_socket_filename_add_del(self):
-        """ Memif socket filename add/del """
+        """Memif socket filename add/del"""
 
         # dump default socket filename
         dump = self.vapi.memif_socket_filename_dump()
         self.assertTrue(
 
         # dump default socket filename
         dump = self.vapi.memif_socket_filename_dump()
         self.assertTrue(
-            self._check_socket_filename(
-                dump, 0, "%s/memif.sock" % self.tempdir))
+            self._check_socket_filename(dump, 0, "%s/memif.sock" % self.tempdir)
+        )
 
         memif_sockets = []
         # existing path
         memif_sockets.append(
 
         memif_sockets = []
         # existing path
         memif_sockets.append(
-            VppSocketFilename(
-                self, 1, "%s/memif1.sock" % self.tempdir))
+            VppSocketFilename(self, 1, "%s/memif1.sock" % self.tempdir)
+        )
         # default path (test tempdir)
         memif_sockets.append(
         # default path (test tempdir)
         memif_sockets.append(
-            VppSocketFilename(
-                self,
-                2,
-                "memif2.sock",
-                add_default_folder=True))
+            VppSocketFilename(self, 2, "memif2.sock", add_default_folder=True)
+        )
         # create new folder in default folder
         memif_sockets.append(
         # create new folder in default folder
         memif_sockets.append(
-            VppSocketFilename(
-                self,
-                3,
-                "sock/memif3.sock",
-                add_default_folder=True))
+            VppSocketFilename(self, 3, "sock/memif3.sock", add_default_folder=True)
+        )
 
         for sock in memif_sockets:
             sock.add_vpp_config()
             dump = sock.query_vpp_config()
             self.assertTrue(
 
         for sock in memif_sockets:
             sock.add_vpp_config()
             dump = sock.query_vpp_config()
             self.assertTrue(
-                self._check_socket_filename(
-                    dump,
-                    sock.socket_id,
-                    sock.socket_filename))
+                self._check_socket_filename(dump, sock.socket_id, sock.socket_filename)
+            )
 
         for sock in memif_sockets:
             sock.remove_vpp_config()
 
         dump = self.vapi.memif_socket_filename_dump()
         self.assertTrue(
 
         for sock in memif_sockets:
             sock.remove_vpp_config()
 
         dump = self.vapi.memif_socket_filename_dump()
         self.assertTrue(
-            self._check_socket_filename(
-                dump, 0, "%s/memif.sock" % self.tempdir))
+            self._check_socket_filename(dump, 0, "%s/memif.sock" % self.tempdir)
+        )
 
     def _create_delete_test_one_interface(self, memif):
         memif.add_vpp_config()
 
     def _create_delete_test_one_interface(self, memif):
         memif.add_vpp_config()
@@ -121,7 +111,7 @@ class TestMemif(VppTestCase):
         self.assertEqual(dump.sw_if_index, memif.sw_if_index)
         self.assertEqual(dump.role, memif.role)
         self.assertEqual(dump.mode, memif.mode)
         self.assertEqual(dump.sw_if_index, memif.sw_if_index)
         self.assertEqual(dump.role, memif.role)
         self.assertEqual(dump.mode, memif.mode)
-        if (memif.socket_id is not None):
+        if memif.socket_id is not None:
             self.assertEqual(dump.socket_id, memif.socket_id)
 
         memif.remove_vpp_config()
             self.assertEqual(dump.socket_id, memif.socket_id)
 
         memif.remove_vpp_config()
@@ -155,43 +145,39 @@ class TestMemif(VppTestCase):
         memif1.remove_vpp_config()
 
     def test_memif_create_delete(self):
         memif1.remove_vpp_config()
 
     def test_memif_create_delete(self):
-        """ Memif create/delete interface """
+        """Memif create/delete interface"""
 
         memif = VppMemif(
             self,
             VppEnum.vl_api_memif_role_t.MEMIF_ROLE_API_SLAVE,
 
         memif = VppMemif(
             self,
             VppEnum.vl_api_memif_role_t.MEMIF_ROLE_API_SLAVE,
-            VppEnum.vl_api_memif_mode_t.MEMIF_MODE_API_ETHERNET)
+            VppEnum.vl_api_memif_mode_t.MEMIF_MODE_API_ETHERNET,
+        )
         self._create_delete_test_one_interface(memif)
         memif.role = VppEnum.vl_api_memif_role_t.MEMIF_ROLE_API_MASTER
         self._create_delete_test_one_interface(memif)
 
     def test_memif_create_custom_socket(self):
         self._create_delete_test_one_interface(memif)
         memif.role = VppEnum.vl_api_memif_role_t.MEMIF_ROLE_API_MASTER
         self._create_delete_test_one_interface(memif)
 
     def test_memif_create_custom_socket(self):
-        """ Memif create with non-default socket filename """
+        """Memif create with non-default socket filename"""
 
         memif_sockets = []
         # existing path
         memif_sockets.append(
 
         memif_sockets = []
         # existing path
         memif_sockets.append(
-            VppSocketFilename(
-                self, 1, "%s/memif1.sock" % self.tempdir))
+            VppSocketFilename(self, 1, "%s/memif1.sock" % self.tempdir)
+        )
         # default path (test tempdir)
         memif_sockets.append(
         # default path (test tempdir)
         memif_sockets.append(
-            VppSocketFilename(
-                self,
-                2,
-                "memif2.sock",
-                add_default_folder=True))
+            VppSocketFilename(self, 2, "memif2.sock", add_default_folder=True)
+        )
         # create new folder in default folder
         memif_sockets.append(
         # create new folder in default folder
         memif_sockets.append(
-            VppSocketFilename(
-                self,
-                3,
-                "sock/memif3.sock",
-                add_default_folder=True))
+            VppSocketFilename(self, 3, "sock/memif3.sock", add_default_folder=True)
+        )
 
         memif = VppMemif(
             self,
             VppEnum.vl_api_memif_role_t.MEMIF_ROLE_API_SLAVE,
 
         memif = VppMemif(
             self,
             VppEnum.vl_api_memif_role_t.MEMIF_ROLE_API_SLAVE,
-            VppEnum.vl_api_memif_mode_t.MEMIF_MODE_API_ETHERNET)
+            VppEnum.vl_api_memif_mode_t.MEMIF_MODE_API_ETHERNET,
+        )
 
         for sock in memif_sockets:
             sock.add_vpp_config()
 
         for sock in memif_sockets:
             sock.add_vpp_config()
@@ -202,17 +188,19 @@ class TestMemif(VppTestCase):
             self._create_delete_test_one_interface(memif)
 
     def test_memif_connect(self):
             self._create_delete_test_one_interface(memif)
 
     def test_memif_connect(self):
-        """ Memif connect """
+        """Memif connect"""
         memif = VppMemif(
             self,
             VppEnum.vl_api_memif_role_t.MEMIF_ROLE_API_SLAVE,
             VppEnum.vl_api_memif_mode_t.MEMIF_MODE_API_ETHERNET,
             ring_size=1024,
             buffer_size=2048,
         memif = VppMemif(
             self,
             VppEnum.vl_api_memif_role_t.MEMIF_ROLE_API_SLAVE,
             VppEnum.vl_api_memif_mode_t.MEMIF_MODE_API_ETHERNET,
             ring_size=1024,
             buffer_size=2048,
-            secret="abc")
+            secret="abc",
+        )
 
 
-        remote_socket = VppSocketFilename(self.remote_test, 1,
-                                          "%s/memif.sock" % self.tempdir)
+        remote_socket = VppSocketFilename(
+            self.remote_test, 1, "%s/memif.sock" % self.tempdir
+        )
         remote_socket.add_vpp_config()
 
         remote_memif = VppMemif(
         remote_socket.add_vpp_config()
 
         remote_memif = VppMemif(
@@ -222,7 +210,8 @@ class TestMemif(VppTestCase):
             socket_id=1,
             ring_size=1024,
             buffer_size=2048,
             socket_id=1,
             ring_size=1024,
             buffer_size=2048,
-            secret="abc")
+            secret="abc",
+        )
 
         self._connect_test_interface_pair(memif, remote_memif)
 
 
         self._connect_test_interface_pair(memif, remote_memif)
 
@@ -234,10 +223,11 @@ class TestMemif(VppTestCase):
     def _create_icmp(self, pg, memif, num):
         pkts = []
         for i in range(num):
     def _create_icmp(self, pg, memif, num):
         pkts = []
         for i in range(num):
-            pkt = (Ether(dst=pg.local_mac, src=pg.remote_mac) /
-                   IP(src=pg.remote_ip4,
-                      dst=str(memif.ip_prefix.network_address)) /
-                   ICMP(id=memif.if_id, type='echo-request', seq=i))
+            pkt = (
+                Ether(dst=pg.local_mac, src=pg.remote_mac)
+                / IP(src=pg.remote_ip4, dst=str(memif.ip_prefix.network_address))
+                / ICMP(id=memif.if_id, type="echo-request", seq=i)
+            )
             pkts.append(pkt)
         return pkts
 
             pkts.append(pkt)
         return pkts
 
@@ -252,22 +242,25 @@ class TestMemif(VppTestCase):
         self.assertEqual(icmp.seq, seq)
 
     def test_memif_ping(self):
         self.assertEqual(icmp.seq, seq)
 
     def test_memif_ping(self):
-        """ Memif ping """
+        """Memif ping"""
 
         memif = VppMemif(
             self,
             VppEnum.vl_api_memif_role_t.MEMIF_ROLE_API_SLAVE,
 
         memif = VppMemif(
             self,
             VppEnum.vl_api_memif_role_t.MEMIF_ROLE_API_SLAVE,
-            VppEnum.vl_api_memif_mode_t.MEMIF_MODE_API_ETHERNET)
+            VppEnum.vl_api_memif_mode_t.MEMIF_MODE_API_ETHERNET,
+        )
 
 
-        remote_socket = VppSocketFilename(self.remote_test, 1,
-                                          "%s/memif.sock" % self.tempdir)
+        remote_socket = VppSocketFilename(
+            self.remote_test, 1, "%s/memif.sock" % self.tempdir
+        )
         remote_socket.add_vpp_config()
 
         remote_memif = VppMemif(
             self.remote_test,
             VppEnum.vl_api_memif_role_t.MEMIF_ROLE_API_MASTER,
             VppEnum.vl_api_memif_mode_t.MEMIF_MODE_API_ETHERNET,
         remote_socket.add_vpp_config()
 
         remote_memif = VppMemif(
             self.remote_test,
             VppEnum.vl_api_memif_role_t.MEMIF_ROLE_API_MASTER,
             VppEnum.vl_api_memif_mode_t.MEMIF_MODE_API_ETHERNET,
-            socket_id=1)
+            socket_id=1,
+        )
 
         memif.add_vpp_config()
         memif.config_ip4()
 
         memif.add_vpp_config()
         memif.config_ip4()
@@ -281,10 +274,13 @@ class TestMemif(VppTestCase):
         self.assertTrue(remote_memif.wait_for_link_up(5))
 
         # add routing to remote vpp
         self.assertTrue(remote_memif.wait_for_link_up(5))
 
         # add routing to remote vpp
-        route = VppIpRoute(self.remote_test, self.pg0._local_ip4_subnet, 24,
-                           [VppRoutePath(memif.ip_prefix.network_address,
-                                         0xffffffff)],
-                           register=False)
+        route = VppIpRoute(
+            self.remote_test,
+            self.pg0._local_ip4_subnet,
+            24,
+            [VppRoutePath(memif.ip_prefix.network_address, 0xFFFFFFFF)],
+            register=False,
+        )
 
         route.add_vpp_config()
 
 
         route.add_vpp_config()
 
@@ -304,17 +300,19 @@ class TestMemif(VppTestCase):
         route.remove_vpp_config()
 
     def test_memif_admin_up_down_up(self):
         route.remove_vpp_config()
 
     def test_memif_admin_up_down_up(self):
-        """ Memif admin up/down/up """
+        """Memif admin up/down/up"""
         memif = VppMemif(
             self,
             VppEnum.vl_api_memif_role_t.MEMIF_ROLE_API_SLAVE,
             VppEnum.vl_api_memif_mode_t.MEMIF_MODE_API_ETHERNET,
             ring_size=1024,
             buffer_size=2048,
         memif = VppMemif(
             self,
             VppEnum.vl_api_memif_role_t.MEMIF_ROLE_API_SLAVE,
             VppEnum.vl_api_memif_mode_t.MEMIF_MODE_API_ETHERNET,
             ring_size=1024,
             buffer_size=2048,
-            secret="abc")
+            secret="abc",
+        )
 
 
-        remote_socket = VppSocketFilename(self.remote_test, 1,
-                                          "%s/memif.sock" % self.tempdir)
+        remote_socket = VppSocketFilename(
+            self.remote_test, 1, "%s/memif.sock" % self.tempdir
+        )
         remote_socket.add_vpp_config()
 
         remote_memif = VppMemif(
         remote_socket.add_vpp_config()
 
         remote_memif = VppMemif(
@@ -324,7 +322,8 @@ class TestMemif(VppTestCase):
             socket_id=1,
             ring_size=1024,
             buffer_size=2048,
             socket_id=1,
             ring_size=1024,
             buffer_size=2048,
-            secret="abc")
+            secret="abc",
+        )
 
         memif.add_vpp_config()
         remote_memif.add_vpp_config()
 
         memif.add_vpp_config()
         remote_memif.add_vpp_config()
@@ -344,5 +343,5 @@ class TestMemif(VppTestCase):
         remote_socket.remove_vpp_config()
 
 
         remote_socket.remove_vpp_config()
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index bfa4385..e075214 100644 (file)
@@ -8,7 +8,7 @@ import os
 
 
 class TestMpcap(VppTestCase):
 
 
 class TestMpcap(VppTestCase):
-    """ Mpcap Unit Test Cases """
+    """Mpcap Unit Test Cases"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -25,22 +25,24 @@ class TestMpcap(VppTestCase):
         super(TestMpcap, self).tearDown()
 
     def test_mpcap_unittest(self):
         super(TestMpcap, self).tearDown()
 
     def test_mpcap_unittest(self):
-        """ Mapped pcap file test """
-        cmds = ["packet-generator new {\n"
-                " name mpcap\n"
-                " limit 15\n"
-                " size 128-128\n"
-                " interface local0\n"
-                " node mpcap-unittest\n"
-                " data {\n"
-                "   IP6: 00:d0:2d:5e:86:85 -> 00:0d:ea:d0:00:00\n"
-                "   ICMP: db00::1 -> db00::2\n"
-                "   incrementing 30\n"
-                "   }\n",
-                "trace add pg-input 15",
-                "pa en",
-                "show trace",
-                "show error"]
+        """Mapped pcap file test"""
+        cmds = [
+            "packet-generator new {\n"
+            " name mpcap\n"
+            " limit 15\n"
+            " size 128-128\n"
+            " interface local0\n"
+            " node mpcap-unittest\n"
+            " data {\n"
+            "   IP6: 00:d0:2d:5e:86:85 -> 00:0d:ea:d0:00:00\n"
+            "   ICMP: db00::1 -> db00::2\n"
+            "   incrementing 30\n"
+            "   }\n",
+            "trace add pg-input 15",
+            "pa en",
+            "show trace",
+            "show error",
+        ]
 
         for cmd in cmds:
             self.logger.info(self.vapi.cli(cmd))
 
         for cmd in cmds:
             self.logger.info(self.vapi.cli(cmd))
@@ -49,7 +51,8 @@ class TestMpcap(VppTestCase):
         os.remove("/tmp/mpcap_unittest.pcap")
         if size != 2184:
             self.logger.critical("BUG: file size %d not 2184" % size)
         os.remove("/tmp/mpcap_unittest.pcap")
         if size != 2184:
             self.logger.critical("BUG: file size %d not 2184" % size)
-            self.assertNotIn('WrongMPCAPFileSize', 'WrongMPCAPFileSize')
+            self.assertNotIn("WrongMPCAPFileSize", "WrongMPCAPFileSize")
 
 
-if __name__ == '__main__':
+
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index a568f84..6e01a03 100644 (file)
@@ -6,11 +6,24 @@ import socket
 from framework import tag_fixme_vpp_workers
 from framework import VppTestCase, VppTestRunner
 from vpp_ip import DpoProto, INVALID_INDEX
 from framework import tag_fixme_vpp_workers
 from framework import VppTestCase, VppTestRunner
 from vpp_ip import DpoProto, INVALID_INDEX
-from vpp_ip_route import VppIpRoute, VppRoutePath, VppMplsRoute, \
-    VppMplsIpBind, VppIpMRoute, VppMRoutePath, \
-    VppIpTable, VppMplsTable, \
-    VppMplsLabel, MplsLspMode, find_mpls_route, \
-    FibPathProto, FibPathType, FibPathFlags, VppMplsLabel, MplsLspMode
+from vpp_ip_route import (
+    VppIpRoute,
+    VppRoutePath,
+    VppMplsRoute,
+    VppMplsIpBind,
+    VppIpMRoute,
+    VppMRoutePath,
+    VppIpTable,
+    VppMplsTable,
+    VppMplsLabel,
+    MplsLspMode,
+    find_mpls_route,
+    FibPathProto,
+    FibPathType,
+    FibPathFlags,
+    VppMplsLabel,
+    MplsLspMode,
+)
 from vpp_mpls_tunnel_interface import VppMPLSTunnelInterface
 from vpp_papi import VppEnum
 
 from vpp_mpls_tunnel_interface import VppMPLSTunnelInterface
 from vpp_papi import VppEnum
 
@@ -18,8 +31,12 @@ import scapy.compat
 from scapy.packet import Raw
 from scapy.layers.l2 import Ether, ARP
 from scapy.layers.inet import IP, UDP, ICMP, icmptypes, icmpcodes
 from scapy.packet import Raw
 from scapy.layers.l2 import Ether, ARP
 from scapy.layers.inet import IP, UDP, ICMP, icmptypes, icmpcodes
-from scapy.layers.inet6 import IPv6, ICMPv6TimeExceeded, ICMPv6EchoRequest, \
-    ICMPv6PacketTooBig
+from scapy.layers.inet6 import (
+    IPv6,
+    ICMPv6TimeExceeded,
+    ICMPv6EchoRequest,
+    ICMPv6PacketTooBig,
+)
 from scapy.contrib.mpls import MPLS
 
 NUM_PKTS = 67
 from scapy.contrib.mpls import MPLS
 
 NUM_PKTS = 67
@@ -63,7 +80,7 @@ def verify_mpls_stack(tst, rx, mpls_labels):
 
 @tag_fixme_vpp_workers
 class TestMPLS(VppTestCase):
 
 @tag_fixme_vpp_workers
 class TestMPLS(VppTestCase):
-    """ MPLS Test Case """
+    """MPLS Test Case"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -120,15 +137,16 @@ class TestMPLS(VppTestCase):
 
     # the default of 64 matches the IP packet TTL default
     def create_stream_labelled_ip4(
 
     # the default of 64 matches the IP packet TTL default
     def create_stream_labelled_ip4(
-            self,
-            src_if,
-            mpls_labels,
-            ping=0,
-            ip_itf=None,
-            dst_ip=None,
-            chksum=None,
-            ip_ttl=64,
-            n=257):
+        self,
+        src_if,
+        mpls_labels,
+        ping=0,
+        ip_itf=None,
+        dst_ip=None,
+        chksum=None,
+        ip_ttl=64,
+        n=257,
+    ):
         self.reset_packet_infos()
         pkts = []
         for i in range(0, n):
         self.reset_packet_infos()
         pkts = []
         for i in range(0, n):
@@ -137,25 +155,32 @@ class TestMPLS(VppTestCase):
             p = Ether(dst=src_if.local_mac, src=src_if.remote_mac)
 
             for ii in range(len(mpls_labels)):
             p = Ether(dst=src_if.local_mac, src=src_if.remote_mac)
 
             for ii in range(len(mpls_labels)):
-                p = p / MPLS(label=mpls_labels[ii].value,
-                             ttl=mpls_labels[ii].ttl,
-                             cos=mpls_labels[ii].exp)
+                p = p / MPLS(
+                    label=mpls_labels[ii].value,
+                    ttl=mpls_labels[ii].ttl,
+                    cos=mpls_labels[ii].exp,
+                )
             if not ping:
                 if not dst_ip:
             if not ping:
                 if not dst_ip:
-                    p = (p / IP(src=src_if.local_ip4,
-                                dst=src_if.remote_ip4,
-                                ttl=ip_ttl) /
-                         UDP(sport=1234, dport=1234) /
-                         Raw(payload))
+                    p = (
+                        p
+                        / IP(src=src_if.local_ip4, dst=src_if.remote_ip4, ttl=ip_ttl)
+                        / UDP(sport=1234, dport=1234)
+                        / Raw(payload)
+                    )
                 else:
                 else:
-                    p = (p / IP(src=src_if.local_ip4, dst=dst_ip, ttl=ip_ttl) /
-                         UDP(sport=1234, dport=1234) /
-                         Raw(payload))
+                    p = (
+                        p
+                        / IP(src=src_if.local_ip4, dst=dst_ip, ttl=ip_ttl)
+                        / UDP(sport=1234, dport=1234)
+                        / Raw(payload)
+                    )
             else:
             else:
-                p = (p / IP(src=ip_itf.remote_ip4,
-                            dst=ip_itf.local_ip4,
-                            ttl=ip_ttl) /
-                     ICMP())
+                p = (
+                    p
+                    / IP(src=ip_itf.remote_ip4, dst=ip_itf.local_ip4, ttl=ip_ttl)
+                    / ICMP()
+                )
 
             if chksum:
                 p[IP].chksum = chksum
 
             if chksum:
                 p[IP].chksum = chksum
@@ -163,18 +188,20 @@ class TestMPLS(VppTestCase):
             pkts.append(p)
         return pkts
 
             pkts.append(p)
         return pkts
 
-    def create_stream_ip4(self, src_if, dst_ip, ip_ttl=64,
-                          ip_dscp=0, payload_size=None):
+    def create_stream_ip4(
+        self, src_if, dst_ip, ip_ttl=64, ip_dscp=0, payload_size=None
+    ):
         self.reset_packet_infos()
         pkts = []
         for i in range(0, 257):
             info = self.create_packet_info(src_if, src_if)
             payload = self.info_to_payload(info)
         self.reset_packet_infos()
         pkts = []
         for i in range(0, 257):
             info = self.create_packet_info(src_if, src_if)
             payload = self.info_to_payload(info)
-            p = (Ether(dst=src_if.local_mac, src=src_if.remote_mac) /
-                 IP(src=src_if.remote_ip4, dst=dst_ip,
-                    ttl=ip_ttl, tos=ip_dscp) /
-                 UDP(sport=1234, dport=1234) /
-                 Raw(payload))
+            p = (
+                Ether(dst=src_if.local_mac, src=src_if.remote_mac)
+                / IP(src=src_if.remote_ip4, dst=dst_ip, ttl=ip_ttl, tos=ip_dscp)
+                / UDP(sport=1234, dport=1234)
+                / Raw(payload)
+            )
             info.data = p.copy()
             if payload_size:
                 self.extend_packet(p, payload_size)
             info.data = p.copy()
             if payload_size:
                 self.extend_packet(p, payload_size)
@@ -187,18 +214,19 @@ class TestMPLS(VppTestCase):
         for i in range(0, 257):
             info = self.create_packet_info(src_if, src_if)
             payload = self.info_to_payload(info)
         for i in range(0, 257):
             info = self.create_packet_info(src_if, src_if)
             payload = self.info_to_payload(info)
-            p = (Ether(dst=src_if.local_mac, src=src_if.remote_mac) /
-                 IPv6(src=src_if.remote_ip6, dst=dst_ip,
-                      hlim=ip_ttl, tc=ip_dscp) /
-                 UDP(sport=1234, dport=1234) /
-                 Raw(payload))
+            p = (
+                Ether(dst=src_if.local_mac, src=src_if.remote_mac)
+                / IPv6(src=src_if.remote_ip6, dst=dst_ip, hlim=ip_ttl, tc=ip_dscp)
+                / UDP(sport=1234, dport=1234)
+                / Raw(payload)
+            )
             info.data = p.copy()
             pkts.append(p)
         return pkts
 
             info.data = p.copy()
             pkts.append(p)
         return pkts
 
-    def create_stream_labelled_ip6(self, src_if, mpls_labels,
-                                   hlim=64, dst_ip=None,
-                                   ping=0, ip_itf=None):
+    def create_stream_labelled_ip6(
+        self, src_if, mpls_labels, hlim=64, dst_ip=None, ping=0, ip_itf=None
+    ):
         if dst_ip is None:
             dst_ip = src_if.remote_ip6
         self.reset_packet_infos()
         if dst_ip is None:
             dst_ip = src_if.remote_ip6
         self.reset_packet_infos()
@@ -211,19 +239,23 @@ class TestMPLS(VppTestCase):
                 p = p / MPLS(label=l.value, ttl=l.ttl, cos=l.exp)
 
             if ping:
                 p = p / MPLS(label=l.value, ttl=l.ttl, cos=l.exp)
 
             if ping:
-                p = p / (IPv6(src=ip_itf.remote_ip6,
-                              dst=ip_itf.local_ip6) /
-                         ICMPv6EchoRequest())
+                p = p / (
+                    IPv6(src=ip_itf.remote_ip6, dst=ip_itf.local_ip6)
+                    / ICMPv6EchoRequest()
+                )
             else:
             else:
-                p = p / (IPv6(src=src_if.remote_ip6, dst=dst_ip, hlim=hlim) /
-                         UDP(sport=1234, dport=1234) /
-                         Raw(payload))
+                p = p / (
+                    IPv6(src=src_if.remote_ip6, dst=dst_ip, hlim=hlim)
+                    / UDP(sport=1234, dport=1234)
+                    / Raw(payload)
+                )
             info.data = p.copy()
             pkts.append(p)
         return pkts
 
             info.data = p.copy()
             pkts.append(p)
         return pkts
 
-    def verify_capture_ip4(self, src_if, capture, sent, ping_resp=0,
-                           ip_ttl=None, ip_dscp=0):
+    def verify_capture_ip4(
+        self, src_if, capture, sent, ping_resp=0, ip_ttl=None, ip_dscp=0
+    ):
         try:
             capture = verify_filter(capture, sent)
 
         try:
             capture = verify_filter(capture, sent)
 
@@ -256,8 +288,9 @@ class TestMPLS(VppTestCase):
         except:
             raise
 
         except:
             raise
 
-    def verify_capture_labelled_ip4(self, src_if, capture, sent,
-                                    mpls_labels, ip_ttl=None):
+    def verify_capture_labelled_ip4(
+        self, src_if, capture, sent, mpls_labels, ip_ttl=None
+    ):
         try:
             capture = verify_filter(capture, sent)
 
         try:
             capture = verify_filter(capture, sent)
 
@@ -282,8 +315,9 @@ class TestMPLS(VppTestCase):
         except:
             raise
 
         except:
             raise
 
-    def verify_capture_labelled_ip6(self, src_if, capture, sent,
-                                    mpls_labels, ip_ttl=None):
+    def verify_capture_labelled_ip6(
+        self, src_if, capture, sent, mpls_labels, ip_ttl=None
+    ):
         try:
             capture = verify_filter(capture, sent)
 
         try:
             capture = verify_filter(capture, sent)
 
@@ -330,8 +364,7 @@ class TestMPLS(VppTestCase):
         except:
             raise
 
         except:
             raise
 
-    def verify_capture_labelled(self, src_if, capture, sent,
-                                mpls_labels):
+    def verify_capture_labelled(self, src_if, capture, sent, mpls_labels):
         try:
             capture = verify_filter(capture, sent)
 
         try:
             capture = verify_filter(capture, sent)
 
@@ -343,9 +376,9 @@ class TestMPLS(VppTestCase):
         except:
             raise
 
         except:
             raise
 
-    def verify_capture_ip6(self, src_if, capture, sent,
-                           ip_hlim=None, ip_dscp=0,
-                           ping_resp=0):
+    def verify_capture_ip6(
+        self, src_if, capture, sent, ip_hlim=None, ip_dscp=0, ping_resp=0
+    ):
         try:
             self.assertEqual(len(capture), len(sent))
 
         try:
             self.assertEqual(len(capture), len(sent))
 
@@ -363,7 +396,7 @@ class TestMPLS(VppTestCase):
                 if not ping_resp:
                     self.assertEqual(rx_ip.src, tx_ip.src)
                     self.assertEqual(rx_ip.dst, tx_ip.dst)
                 if not ping_resp:
                     self.assertEqual(rx_ip.src, tx_ip.src)
                     self.assertEqual(rx_ip.dst, tx_ip.dst)
-                    self.assertEqual(rx_ip.tc,  ip_dscp)
+                    self.assertEqual(rx_ip.tc, ip_dscp)
                     # IP processing post pop has decremented the TTL
                     if not ip_hlim:
                         self.assertEqual(rx_ip.hlim + 1, tx_ip.hlim)
                     # IP processing post pop has decremented the TTL
                     if not ip_hlim:
                         self.assertEqual(rx_ip.hlim + 1, tx_ip.hlim)
@@ -402,8 +435,9 @@ class TestMPLS(VppTestCase):
         except:
             raise
 
         except:
             raise
 
-    def verify_capture_fragmented_labelled_ip4(self, src_if, capture, sent,
-                                               mpls_labels, ip_ttl=None):
+    def verify_capture_fragmented_labelled_ip4(
+        self, src_if, capture, sent, mpls_labels, ip_ttl=None
+    ):
         try:
             capture = verify_filter(capture, sent)
 
         try:
             capture = verify_filter(capture, sent)
 
@@ -426,8 +460,9 @@ class TestMPLS(VppTestCase):
         except:
             raise
 
         except:
             raise
 
-    def verify_capture_fragmented_labelled_ip6(self, src_if, capture, sent,
-                                               mpls_labels, ip_ttl=None):
+    def verify_capture_fragmented_labelled_ip6(
+        self, src_if, capture, sent, mpls_labels, ip_ttl=None
+    ):
         try:
             capture = verify_filter(capture, sent)
 
         try:
             capture = verify_filter(capture, sent)
 
@@ -452,82 +487,115 @@ class TestMPLS(VppTestCase):
             raise
 
     def test_swap(self):
             raise
 
     def test_swap(self):
-        """ MPLS label swap tests """
+        """MPLS label swap tests"""
 
         #
         # A simple MPLS xconnect - eos label in label out
         #
 
         #
         # A simple MPLS xconnect - eos label in label out
         #
-        route_32_eos = VppMplsRoute(self, 32, 1,
-                                    [VppRoutePath(self.pg0.remote_ip4,
-                                                  self.pg0.sw_if_index,
-                                                  labels=[VppMplsLabel(33)])])
+        route_32_eos = VppMplsRoute(
+            self,
+            32,
+            1,
+            [
+                VppRoutePath(
+                    self.pg0.remote_ip4, self.pg0.sw_if_index, labels=[VppMplsLabel(33)]
+                )
+            ],
+        )
         route_32_eos.add_vpp_config()
 
         self.assertTrue(
         route_32_eos.add_vpp_config()
 
         self.assertTrue(
-            find_mpls_route(self, 0, 32, 1,
-                            [VppRoutePath(self.pg0.remote_ip4,
-                                          self.pg0.sw_if_index,
-                                          labels=[VppMplsLabel(33)])]))
+            find_mpls_route(
+                self,
+                0,
+                32,
+                1,
+                [
+                    VppRoutePath(
+                        self.pg0.remote_ip4,
+                        self.pg0.sw_if_index,
+                        labels=[VppMplsLabel(33)],
+                    )
+                ],
+            )
+        )
 
         #
         # a stream that matches the route for 10.0.0.1
         # PG0 is in the default table
         #
 
         #
         # a stream that matches the route for 10.0.0.1
         # PG0 is in the default table
         #
-        tx = self.create_stream_labelled_ip4(self.pg0,
-                                             [VppMplsLabel(32, ttl=32, exp=1)])
+        tx = self.create_stream_labelled_ip4(
+            self.pg0, [VppMplsLabel(32, ttl=32, exp=1)]
+        )
         rx = self.send_and_expect(self.pg0, tx, self.pg0)
         rx = self.send_and_expect(self.pg0, tx, self.pg0)
-        self.verify_capture_labelled(self.pg0, rx, tx,
-                                     [VppMplsLabel(33, ttl=31, exp=1)])
+        self.verify_capture_labelled(
+            self.pg0, rx, tx, [VppMplsLabel(33, ttl=31, exp=1)]
+        )
 
 
-        self.assertEqual(route_32_eos.get_stats_to()['packets'], 257)
+        self.assertEqual(route_32_eos.get_stats_to()["packets"], 257)
 
         #
         # A simple MPLS xconnect - non-eos label in label out
         #
 
         #
         # A simple MPLS xconnect - non-eos label in label out
         #
-        route_32_neos = VppMplsRoute(self, 32, 0,
-                                     [VppRoutePath(self.pg0.remote_ip4,
-                                                   self.pg0.sw_if_index,
-                                                   labels=[VppMplsLabel(33)])])
+        route_32_neos = VppMplsRoute(
+            self,
+            32,
+            0,
+            [
+                VppRoutePath(
+                    self.pg0.remote_ip4, self.pg0.sw_if_index, labels=[VppMplsLabel(33)]
+                )
+            ],
+        )
         route_32_neos.add_vpp_config()
 
         #
         # a stream that matches the route for 10.0.0.1
         # PG0 is in the default table
         #
         route_32_neos.add_vpp_config()
 
         #
         # a stream that matches the route for 10.0.0.1
         # PG0 is in the default table
         #
-        tx = self.create_stream_labelled_ip4(self.pg0,
-                                             [VppMplsLabel(32, ttl=21, exp=7),
-                                              VppMplsLabel(99)])
+        tx = self.create_stream_labelled_ip4(
+            self.pg0, [VppMplsLabel(32, ttl=21, exp=7), VppMplsLabel(99)]
+        )
         rx = self.send_and_expect(self.pg0, tx, self.pg0)
         rx = self.send_and_expect(self.pg0, tx, self.pg0)
-        self.verify_capture_labelled(self.pg0, rx, tx,
-                                     [VppMplsLabel(33, ttl=20, exp=7),
-                                      VppMplsLabel(99)])
-        self.assertEqual(route_32_neos.get_stats_to()['packets'], 257)
+        self.verify_capture_labelled(
+            self.pg0, rx, tx, [VppMplsLabel(33, ttl=20, exp=7), VppMplsLabel(99)]
+        )
+        self.assertEqual(route_32_neos.get_stats_to()["packets"], 257)
 
         #
         # A simple MPLS xconnect - non-eos label in label out, uniform mode
         #
         route_42_neos = VppMplsRoute(
 
         #
         # A simple MPLS xconnect - non-eos label in label out, uniform mode
         #
         route_42_neos = VppMplsRoute(
-            self, 42, 0,
-            [VppRoutePath(self.pg0.remote_ip4,
-                          self.pg0.sw_if_index,
-                          labels=[VppMplsLabel(43, MplsLspMode.UNIFORM)])])
+            self,
+            42,
+            0,
+            [
+                VppRoutePath(
+                    self.pg0.remote_ip4,
+                    self.pg0.sw_if_index,
+                    labels=[VppMplsLabel(43, MplsLspMode.UNIFORM)],
+                )
+            ],
+        )
         route_42_neos.add_vpp_config()
 
         route_42_neos.add_vpp_config()
 
-        tx = self.create_stream_labelled_ip4(self.pg0,
-                                             [VppMplsLabel(42, ttl=21, exp=7),
-                                              VppMplsLabel(99)])
+        tx = self.create_stream_labelled_ip4(
+            self.pg0, [VppMplsLabel(42, ttl=21, exp=7), VppMplsLabel(99)]
+        )
         rx = self.send_and_expect(self.pg0, tx, self.pg0)
         rx = self.send_and_expect(self.pg0, tx, self.pg0)
-        self.verify_capture_labelled(self.pg0, rx, tx,
-                                     [VppMplsLabel(43, ttl=20, exp=7),
-                                      VppMplsLabel(99)])
+        self.verify_capture_labelled(
+            self.pg0, rx, tx, [VppMplsLabel(43, ttl=20, exp=7), VppMplsLabel(99)]
+        )
 
         #
         # An MPLS xconnect - EOS label in IP out
         #
 
         #
         # An MPLS xconnect - EOS label in IP out
         #
-        route_33_eos = VppMplsRoute(self, 33, 1,
-                                    [VppRoutePath(self.pg0.remote_ip4,
-                                                  self.pg0.sw_if_index,
-                                                  labels=[])])
+        route_33_eos = VppMplsRoute(
+            self,
+            33,
+            1,
+            [VppRoutePath(self.pg0.remote_ip4, self.pg0.sw_if_index, labels=[])],
+        )
         route_33_eos.add_vpp_config()
 
         tx = self.create_stream_labelled_ip4(self.pg0, [VppMplsLabel(33)])
         route_33_eos.add_vpp_config()
 
         tx = self.create_stream_labelled_ip4(self.pg0, [VppMplsLabel(33)])
@@ -537,30 +605,36 @@ class TestMPLS(VppTestCase):
         #
         # disposed packets have an invalid IPv4 checksum
         #
         #
         # disposed packets have an invalid IPv4 checksum
         #
-        tx = self.create_stream_labelled_ip4(self.pg0, [VppMplsLabel(33)],
-                                             dst_ip=self.pg0.remote_ip4,
-                                             n=65,
-                                             chksum=1)
+        tx = self.create_stream_labelled_ip4(
+            self.pg0, [VppMplsLabel(33)], dst_ip=self.pg0.remote_ip4, n=65, chksum=1
+        )
         self.send_and_assert_no_replies(self.pg0, tx, "Invalid Checksum")
 
         #
         # An MPLS xconnect - EOS label in IP out, uniform mode
         #
         route_3333_eos = VppMplsRoute(
         self.send_and_assert_no_replies(self.pg0, tx, "Invalid Checksum")
 
         #
         # An MPLS xconnect - EOS label in IP out, uniform mode
         #
         route_3333_eos = VppMplsRoute(
-            self, 3333, 1,
-            [VppRoutePath(self.pg0.remote_ip4,
-                          self.pg0.sw_if_index,
-                          labels=[VppMplsLabel(3, MplsLspMode.UNIFORM)])])
+            self,
+            3333,
+            1,
+            [
+                VppRoutePath(
+                    self.pg0.remote_ip4,
+                    self.pg0.sw_if_index,
+                    labels=[VppMplsLabel(3, MplsLspMode.UNIFORM)],
+                )
+            ],
+        )
         route_3333_eos.add_vpp_config()
 
         tx = self.create_stream_labelled_ip4(
         route_3333_eos.add_vpp_config()
 
         tx = self.create_stream_labelled_ip4(
-            self.pg0,
-            [VppMplsLabel(3333, ttl=55, exp=3)])
+            self.pg0, [VppMplsLabel(3333, ttl=55, exp=3)]
+        )
         rx = self.send_and_expect(self.pg0, tx, self.pg0)
         self.verify_capture_ip4(self.pg0, rx, tx, ip_ttl=54, ip_dscp=0x60)
         tx = self.create_stream_labelled_ip4(
         rx = self.send_and_expect(self.pg0, tx, self.pg0)
         self.verify_capture_ip4(self.pg0, rx, tx, ip_ttl=54, ip_dscp=0x60)
         tx = self.create_stream_labelled_ip4(
-            self.pg0,
-            [VppMplsLabel(3333, ttl=66, exp=4)])
+            self.pg0, [VppMplsLabel(3333, ttl=66, exp=4)]
+        )
         rx = self.send_and_expect(self.pg0, tx, self.pg0)
         self.verify_capture_ip4(self.pg0, rx, tx, ip_ttl=65, ip_dscp=0x80)
 
         rx = self.send_and_expect(self.pg0, tx, self.pg0)
         self.verify_capture_ip4(self.pg0, rx, tx, ip_ttl=65, ip_dscp=0x80)
 
@@ -568,11 +642,12 @@ class TestMPLS(VppTestCase):
         # An MPLS xconnect - EOS label in IPv6 out
         #
         route_333_eos = VppMplsRoute(
         # An MPLS xconnect - EOS label in IPv6 out
         #
         route_333_eos = VppMplsRoute(
-            self, 333, 1,
-            [VppRoutePath(self.pg0.remote_ip6,
-                          self.pg0.sw_if_index,
-                          labels=[])],
-            eos_proto=FibPathProto.FIB_PATH_NH_PROTO_IP6)
+            self,
+            333,
+            1,
+            [VppRoutePath(self.pg0.remote_ip6, self.pg0.sw_if_index, labels=[])],
+            eos_proto=FibPathProto.FIB_PATH_NH_PROTO_IP6,
+        )
         route_333_eos.add_vpp_config()
 
         tx = self.create_stream_labelled_ip6(self.pg0, [VppMplsLabel(333)])
         route_333_eos.add_vpp_config()
 
         tx = self.create_stream_labelled_ip6(self.pg0, [VppMplsLabel(333)])
@@ -582,10 +657,9 @@ class TestMPLS(VppTestCase):
         #
         # disposed packets have an TTL expired
         #
         #
         # disposed packets have an TTL expired
         #
-        tx = self.create_stream_labelled_ip6(self.pg0,
-                                             [VppMplsLabel(333, ttl=64)],
-                                             dst_ip=self.pg1.remote_ip6,
-                                             hlim=1)
+        tx = self.create_stream_labelled_ip6(
+            self.pg0, [VppMplsLabel(333, ttl=64)], dst_ip=self.pg1.remote_ip6, hlim=1
+        )
         rx = self.send_and_expect_some(self.pg0, tx, self.pg0)
         self.verify_capture_ip6_icmp(self.pg0, rx, tx)
 
         rx = self.send_and_expect_some(self.pg0, tx, self.pg0)
         self.verify_capture_ip6_icmp(self.pg0, rx, tx)
 
@@ -593,15 +667,19 @@ class TestMPLS(VppTestCase):
         # An MPLS xconnect - EOS label in IPv6 out w imp-null
         #
         route_334_eos = VppMplsRoute(
         # An MPLS xconnect - EOS label in IPv6 out w imp-null
         #
         route_334_eos = VppMplsRoute(
-            self, 334, 1,
-            [VppRoutePath(self.pg0.remote_ip6,
-                          self.pg0.sw_if_index,
-                          labels=[VppMplsLabel(3)])],
-            eos_proto=FibPathProto.FIB_PATH_NH_PROTO_IP6)
+            self,
+            334,
+            1,
+            [
+                VppRoutePath(
+                    self.pg0.remote_ip6, self.pg0.sw_if_index, labels=[VppMplsLabel(3)]
+                )
+            ],
+            eos_proto=FibPathProto.FIB_PATH_NH_PROTO_IP6,
+        )
         route_334_eos.add_vpp_config()
 
         route_334_eos.add_vpp_config()
 
-        tx = self.create_stream_labelled_ip6(self.pg0,
-                                             [VppMplsLabel(334, ttl=64)])
+        tx = self.create_stream_labelled_ip6(self.pg0, [VppMplsLabel(334, ttl=64)])
         rx = self.send_and_expect(self.pg0, tx, self.pg0)
         self.verify_capture_ip6(self.pg0, rx, tx)
 
         rx = self.send_and_expect(self.pg0, tx, self.pg0)
         self.verify_capture_ip6(self.pg0, rx, tx)
 
@@ -609,25 +687,32 @@ class TestMPLS(VppTestCase):
         # An MPLS xconnect - EOS label in IPv6 out w imp-null in uniform mode
         #
         route_335_eos = VppMplsRoute(
         # An MPLS xconnect - EOS label in IPv6 out w imp-null in uniform mode
         #
         route_335_eos = VppMplsRoute(
-            self, 335, 1,
-            [VppRoutePath(self.pg0.remote_ip6,
-                          self.pg0.sw_if_index,
-                          labels=[VppMplsLabel(3, MplsLspMode.UNIFORM)])],
-            eos_proto=FibPathProto.FIB_PATH_NH_PROTO_IP6)
+            self,
+            335,
+            1,
+            [
+                VppRoutePath(
+                    self.pg0.remote_ip6,
+                    self.pg0.sw_if_index,
+                    labels=[VppMplsLabel(3, MplsLspMode.UNIFORM)],
+                )
+            ],
+            eos_proto=FibPathProto.FIB_PATH_NH_PROTO_IP6,
+        )
         route_335_eos.add_vpp_config()
 
         tx = self.create_stream_labelled_ip6(
         route_335_eos.add_vpp_config()
 
         tx = self.create_stream_labelled_ip6(
-            self.pg0,
-            [VppMplsLabel(335, ttl=27, exp=4)])
+            self.pg0, [VppMplsLabel(335, ttl=27, exp=4)]
+        )
         rx = self.send_and_expect(self.pg0, tx, self.pg0)
         self.verify_capture_ip6(self.pg0, rx, tx, ip_hlim=26, ip_dscp=0x80)
 
         #
         # disposed packets have an TTL expired
         #
         rx = self.send_and_expect(self.pg0, tx, self.pg0)
         self.verify_capture_ip6(self.pg0, rx, tx, ip_hlim=26, ip_dscp=0x80)
 
         #
         # disposed packets have an TTL expired
         #
-        tx = self.create_stream_labelled_ip6(self.pg0, [VppMplsLabel(334)],
-                                             dst_ip=self.pg1.remote_ip6,
-                                             hlim=0)
+        tx = self.create_stream_labelled_ip6(
+            self.pg0, [VppMplsLabel(334)], dst_ip=self.pg1.remote_ip6, hlim=0
+        )
         rx = self.send_and_expect_some(self.pg0, tx, self.pg0)
         self.verify_capture_ip6_icmp(self.pg0, rx, tx)
 
         rx = self.send_and_expect_some(self.pg0, tx, self.pg0)
         self.verify_capture_ip6_icmp(self.pg0, rx, tx)
 
@@ -635,104 +720,136 @@ class TestMPLS(VppTestCase):
         # An MPLS xconnect - non-EOS label in IP out - an invalid configuration
         # so this traffic should be dropped.
         #
         # An MPLS xconnect - non-EOS label in IP out - an invalid configuration
         # so this traffic should be dropped.
         #
-        route_33_neos = VppMplsRoute(self, 33, 0,
-                                     [VppRoutePath(self.pg0.remote_ip4,
-                                                   self.pg0.sw_if_index,
-                                                   labels=[])])
+        route_33_neos = VppMplsRoute(
+            self,
+            33,
+            0,
+            [VppRoutePath(self.pg0.remote_ip4, self.pg0.sw_if_index, labels=[])],
+        )
         route_33_neos.add_vpp_config()
 
         route_33_neos.add_vpp_config()
 
-        tx = self.create_stream_labelled_ip4(self.pg0,
-                                             [VppMplsLabel(33),
-                                              VppMplsLabel(99)])
+        tx = self.create_stream_labelled_ip4(
+            self.pg0, [VppMplsLabel(33), VppMplsLabel(99)]
+        )
         self.send_and_assert_no_replies(
         self.send_and_assert_no_replies(
-            self.pg0, tx,
-            "MPLS non-EOS packets popped and forwarded")
+            self.pg0, tx, "MPLS non-EOS packets popped and forwarded"
+        )
 
         #
         # A recursive EOS x-connect, which resolves through another x-connect
         # in pipe mode
         #
 
         #
         # A recursive EOS x-connect, which resolves through another x-connect
         # in pipe mode
         #
-        route_34_eos = VppMplsRoute(self, 34, 1,
-                                    [VppRoutePath("0.0.0.0",
-                                                  0xffffffff,
-                                                  nh_via_label=32,
-                                                  labels=[VppMplsLabel(44),
-                                                          VppMplsLabel(45)])])
+        route_34_eos = VppMplsRoute(
+            self,
+            34,
+            1,
+            [
+                VppRoutePath(
+                    "0.0.0.0",
+                    0xFFFFFFFF,
+                    nh_via_label=32,
+                    labels=[VppMplsLabel(44), VppMplsLabel(45)],
+                )
+            ],
+        )
         route_34_eos.add_vpp_config()
         self.logger.info(self.vapi.cli("sh mpls fib 34"))
 
         route_34_eos.add_vpp_config()
         self.logger.info(self.vapi.cli("sh mpls fib 34"))
 
-        tx = self.create_stream_labelled_ip4(self.pg0,
-                                             [VppMplsLabel(34, ttl=3)])
+        tx = self.create_stream_labelled_ip4(self.pg0, [VppMplsLabel(34, ttl=3)])
         rx = self.send_and_expect(self.pg0, tx, self.pg0)
         rx = self.send_and_expect(self.pg0, tx, self.pg0)
-        self.verify_capture_labelled(self.pg0, rx, tx,
-                                     [VppMplsLabel(33),
-                                      VppMplsLabel(44),
-                                      VppMplsLabel(45, ttl=2)])
+        self.verify_capture_labelled(
+            self.pg0,
+            rx,
+            tx,
+            [VppMplsLabel(33), VppMplsLabel(44), VppMplsLabel(45, ttl=2)],
+        )
 
 
-        self.assertEqual(route_34_eos.get_stats_to()['packets'], 257)
-        self.assertEqual(route_32_neos.get_stats_via()['packets'], 257)
+        self.assertEqual(route_34_eos.get_stats_to()["packets"], 257)
+        self.assertEqual(route_32_neos.get_stats_via()["packets"], 257)
 
         #
         # A recursive EOS x-connect, which resolves through another x-connect
         # in uniform mode
         #
         route_35_eos = VppMplsRoute(
 
         #
         # A recursive EOS x-connect, which resolves through another x-connect
         # in uniform mode
         #
         route_35_eos = VppMplsRoute(
-            self, 35, 1,
-            [VppRoutePath("0.0.0.0",
-                          0xffffffff,
-                          nh_via_label=42,
-                          labels=[VppMplsLabel(44)])])
+            self,
+            35,
+            1,
+            [
+                VppRoutePath(
+                    "0.0.0.0", 0xFFFFFFFF, nh_via_label=42, labels=[VppMplsLabel(44)]
+                )
+            ],
+        )
         route_35_eos.add_vpp_config()
 
         route_35_eos.add_vpp_config()
 
-        tx = self.create_stream_labelled_ip4(self.pg0,
-                                             [VppMplsLabel(35, ttl=3)])
+        tx = self.create_stream_labelled_ip4(self.pg0, [VppMplsLabel(35, ttl=3)])
         rx = self.send_and_expect(self.pg0, tx, self.pg0)
         rx = self.send_and_expect(self.pg0, tx, self.pg0)
-        self.verify_capture_labelled(self.pg0, rx, tx,
-                                     [VppMplsLabel(43, ttl=2),
-                                      VppMplsLabel(44, ttl=2)])
+        self.verify_capture_labelled(
+            self.pg0, rx, tx, [VppMplsLabel(43, ttl=2), VppMplsLabel(44, ttl=2)]
+        )
 
         #
         # A recursive non-EOS x-connect, which resolves through another
         # x-connect
         #
 
         #
         # A recursive non-EOS x-connect, which resolves through another
         # x-connect
         #
-        route_34_neos = VppMplsRoute(self, 34, 0,
-                                     [VppRoutePath("0.0.0.0",
-                                                   0xffffffff,
-                                                   nh_via_label=32,
-                                                   labels=[VppMplsLabel(44),
-                                                           VppMplsLabel(46)])])
+        route_34_neos = VppMplsRoute(
+            self,
+            34,
+            0,
+            [
+                VppRoutePath(
+                    "0.0.0.0",
+                    0xFFFFFFFF,
+                    nh_via_label=32,
+                    labels=[VppMplsLabel(44), VppMplsLabel(46)],
+                )
+            ],
+        )
         route_34_neos.add_vpp_config()
 
         route_34_neos.add_vpp_config()
 
-        tx = self.create_stream_labelled_ip4(self.pg0,
-                                             [VppMplsLabel(34, ttl=45),
-                                              VppMplsLabel(99)])
+        tx = self.create_stream_labelled_ip4(
+            self.pg0, [VppMplsLabel(34, ttl=45), VppMplsLabel(99)]
+        )
         rx = self.send_and_expect(self.pg0, tx, self.pg0)
         # it's the 2nd (counting from 0) label in the stack that is swapped
         rx = self.send_and_expect(self.pg0, tx, self.pg0)
         # it's the 2nd (counting from 0) label in the stack that is swapped
-        self.verify_capture_labelled(self.pg0, rx, tx,
-                                     [VppMplsLabel(33),
-                                      VppMplsLabel(44),
-                                      VppMplsLabel(46, ttl=44),
-                                      VppMplsLabel(99)])
+        self.verify_capture_labelled(
+            self.pg0,
+            rx,
+            tx,
+            [
+                VppMplsLabel(33),
+                VppMplsLabel(44),
+                VppMplsLabel(46, ttl=44),
+                VppMplsLabel(99),
+            ],
+        )
 
         #
         # an recursive IP route that resolves through the recursive non-eos
         # x-connect
         #
 
         #
         # an recursive IP route that resolves through the recursive non-eos
         # x-connect
         #
-        ip_10_0_0_1 = VppIpRoute(self, "10.0.0.1", 32,
-                                 [VppRoutePath("0.0.0.0",
-                                               0xffffffff,
-                                               nh_via_label=34,
-                                               labels=[VppMplsLabel(55)])])
+        ip_10_0_0_1 = VppIpRoute(
+            self,
+            "10.0.0.1",
+            32,
+            [
+                VppRoutePath(
+                    "0.0.0.0", 0xFFFFFFFF, nh_via_label=34, labels=[VppMplsLabel(55)]
+                )
+            ],
+        )
         ip_10_0_0_1.add_vpp_config()
 
         tx = self.create_stream_ip4(self.pg0, "10.0.0.1")
         rx = self.send_and_expect(self.pg0, tx, self.pg0)
         ip_10_0_0_1.add_vpp_config()
 
         tx = self.create_stream_ip4(self.pg0, "10.0.0.1")
         rx = self.send_and_expect(self.pg0, tx, self.pg0)
-        self.verify_capture_labelled_ip4(self.pg0, rx, tx,
-                                         [VppMplsLabel(33),
-                                          VppMplsLabel(44),
-                                          VppMplsLabel(46),
-                                          VppMplsLabel(55)])
-        self.assertEqual(ip_10_0_0_1.get_stats_to()['packets'], 257)
+        self.verify_capture_labelled_ip4(
+            self.pg0,
+            rx,
+            tx,
+            [VppMplsLabel(33), VppMplsLabel(44), VppMplsLabel(46), VppMplsLabel(55)],
+        )
+        self.assertEqual(ip_10_0_0_1.get_stats_to()["packets"], 257)
 
         ip_10_0_0_1.remove_vpp_config()
         route_34_neos.remove_vpp_config()
 
         ip_10_0_0_1.remove_vpp_config()
         route_34_neos.remove_vpp_config()
@@ -743,15 +860,21 @@ class TestMPLS(VppTestCase):
         route_32_eos.remove_vpp_config()
 
     def test_bind(self):
         route_32_eos.remove_vpp_config()
 
     def test_bind(self):
-        """ MPLS Local Label Binding test """
+        """MPLS Local Label Binding test"""
 
         #
         # Add a non-recursive route with a single out label
         #
 
         #
         # Add a non-recursive route with a single out label
         #
-        route_10_0_0_1 = VppIpRoute(self, "10.0.0.1", 32,
-                                    [VppRoutePath(self.pg0.remote_ip4,
-                                                  self.pg0.sw_if_index,
-                                                  labels=[VppMplsLabel(45)])])
+        route_10_0_0_1 = VppIpRoute(
+            self,
+            "10.0.0.1",
+            32,
+            [
+                VppRoutePath(
+                    self.pg0.remote_ip4, self.pg0.sw_if_index, labels=[VppMplsLabel(45)]
+                )
+            ],
+        )
         route_10_0_0_1.add_vpp_config()
 
         # bind a local label to the route
         route_10_0_0_1.add_vpp_config()
 
         # bind a local label to the route
@@ -759,19 +882,18 @@ class TestMPLS(VppTestCase):
         binding.add_vpp_config()
 
         # non-EOS stream
         binding.add_vpp_config()
 
         # non-EOS stream
-        tx = self.create_stream_labelled_ip4(self.pg0,
-                                             [VppMplsLabel(44),
-                                              VppMplsLabel(99)])
+        tx = self.create_stream_labelled_ip4(
+            self.pg0, [VppMplsLabel(44), VppMplsLabel(99)]
+        )
         rx = self.send_and_expect(self.pg0, tx, self.pg0)
         rx = self.send_and_expect(self.pg0, tx, self.pg0)
-        self.verify_capture_labelled(self.pg0, rx, tx,
-                                     [VppMplsLabel(45, ttl=63),
-                                      VppMplsLabel(99)])
+        self.verify_capture_labelled(
+            self.pg0, rx, tx, [VppMplsLabel(45, ttl=63), VppMplsLabel(99)]
+        )
 
         # EOS stream
         tx = self.create_stream_labelled_ip4(self.pg0, [VppMplsLabel(44)])
         rx = self.send_and_expect(self.pg0, tx, self.pg0)
 
         # EOS stream
         tx = self.create_stream_labelled_ip4(self.pg0, [VppMplsLabel(44)])
         rx = self.send_and_expect(self.pg0, tx, self.pg0)
-        self.verify_capture_labelled(self.pg0, rx, tx,
-                                     [VppMplsLabel(45, ttl=63)])
+        self.verify_capture_labelled(self.pg0, rx, tx, [VppMplsLabel(45, ttl=63)])
 
         # IP stream
         tx = self.create_stream_ip4(self.pg0, "10.0.0.1")
 
         # IP stream
         tx = self.create_stream_ip4(self.pg0, "10.0.0.1")
@@ -785,15 +907,21 @@ class TestMPLS(VppTestCase):
         route_10_0_0_1.remove_vpp_config()
 
     def test_imposition(self):
         route_10_0_0_1.remove_vpp_config()
 
     def test_imposition(self):
-        """ MPLS label imposition test """
+        """MPLS label imposition test"""
 
         #
         # Add a non-recursive route with a single out label
         #
 
         #
         # Add a non-recursive route with a single out label
         #
-        route_10_0_0_1 = VppIpRoute(self, "10.0.0.1", 32,
-                                    [VppRoutePath(self.pg0.remote_ip4,
-                                                  self.pg0.sw_if_index,
-                                                  labels=[VppMplsLabel(32)])])
+        route_10_0_0_1 = VppIpRoute(
+            self,
+            "10.0.0.1",
+            32,
+            [
+                VppRoutePath(
+                    self.pg0.remote_ip4, self.pg0.sw_if_index, labels=[VppMplsLabel(32)]
+                )
+            ],
+        )
         route_10_0_0_1.add_vpp_config()
 
         #
         route_10_0_0_1.add_vpp_config()
 
         #
@@ -807,65 +935,86 @@ class TestMPLS(VppTestCase):
         #
         # Add a non-recursive route with a 3 out labels
         #
         #
         # Add a non-recursive route with a 3 out labels
         #
-        route_10_0_0_2 = VppIpRoute(self, "10.0.0.2", 32,
-                                    [VppRoutePath(self.pg0.remote_ip4,
-                                                  self.pg0.sw_if_index,
-                                                  labels=[VppMplsLabel(32),
-                                                          VppMplsLabel(33),
-                                                          VppMplsLabel(34)])])
+        route_10_0_0_2 = VppIpRoute(
+            self,
+            "10.0.0.2",
+            32,
+            [
+                VppRoutePath(
+                    self.pg0.remote_ip4,
+                    self.pg0.sw_if_index,
+                    labels=[VppMplsLabel(32), VppMplsLabel(33), VppMplsLabel(34)],
+                )
+            ],
+        )
         route_10_0_0_2.add_vpp_config()
 
         route_10_0_0_2.add_vpp_config()
 
-        tx = self.create_stream_ip4(self.pg0, "10.0.0.2",
-                                    ip_ttl=44, ip_dscp=0xff)
+        tx = self.create_stream_ip4(self.pg0, "10.0.0.2", ip_ttl=44, ip_dscp=0xFF)
         rx = self.send_and_expect(self.pg0, tx, self.pg0)
         rx = self.send_and_expect(self.pg0, tx, self.pg0)
-        self.verify_capture_labelled_ip4(self.pg0, rx, tx,
-                                         [VppMplsLabel(32),
-                                          VppMplsLabel(33),
-                                          VppMplsLabel(34)],
-                                         ip_ttl=43)
+        self.verify_capture_labelled_ip4(
+            self.pg0,
+            rx,
+            tx,
+            [VppMplsLabel(32), VppMplsLabel(33), VppMplsLabel(34)],
+            ip_ttl=43,
+        )
 
         #
         # Add a non-recursive route with a single out label in uniform mode
         #
         route_10_0_0_3 = VppIpRoute(
 
         #
         # Add a non-recursive route with a single out label in uniform mode
         #
         route_10_0_0_3 = VppIpRoute(
-            self, "10.0.0.3", 32,
-            [VppRoutePath(self.pg0.remote_ip4,
-                          self.pg0.sw_if_index,
-                          labels=[VppMplsLabel(32,
-                                               mode=MplsLspMode.UNIFORM)])])
+            self,
+            "10.0.0.3",
+            32,
+            [
+                VppRoutePath(
+                    self.pg0.remote_ip4,
+                    self.pg0.sw_if_index,
+                    labels=[VppMplsLabel(32, mode=MplsLspMode.UNIFORM)],
+                )
+            ],
+        )
         route_10_0_0_3.add_vpp_config()
 
         route_10_0_0_3.add_vpp_config()
 
-        tx = self.create_stream_ip4(self.pg0, "10.0.0.3",
-                                    ip_ttl=54, ip_dscp=0xbe)
+        tx = self.create_stream_ip4(self.pg0, "10.0.0.3", ip_ttl=54, ip_dscp=0xBE)
         rx = self.send_and_expect(self.pg0, tx, self.pg0)
         rx = self.send_and_expect(self.pg0, tx, self.pg0)
-        self.verify_capture_labelled_ip4(self.pg0, rx, tx,
-                                         [VppMplsLabel(32, ttl=53, exp=5)])
+        self.verify_capture_labelled_ip4(
+            self.pg0, rx, tx, [VppMplsLabel(32, ttl=53, exp=5)]
+        )
 
         #
         # Add a IPv6 non-recursive route with a single out label in
         # uniform mode
         #
         route_2001_3 = VppIpRoute(
 
         #
         # Add a IPv6 non-recursive route with a single out label in
         # uniform mode
         #
         route_2001_3 = VppIpRoute(
-            self, "2001::3", 128,
-            [VppRoutePath(self.pg0.remote_ip6,
-                          self.pg0.sw_if_index,
-                          labels=[VppMplsLabel(32,
-                                               mode=MplsLspMode.UNIFORM)])])
+            self,
+            "2001::3",
+            128,
+            [
+                VppRoutePath(
+                    self.pg0.remote_ip6,
+                    self.pg0.sw_if_index,
+                    labels=[VppMplsLabel(32, mode=MplsLspMode.UNIFORM)],
+                )
+            ],
+        )
         route_2001_3.add_vpp_config()
 
         route_2001_3.add_vpp_config()
 
-        tx = self.create_stream_ip6(self.pg0, "2001::3",
-                                    ip_ttl=54, ip_dscp=0xbe)
+        tx = self.create_stream_ip6(self.pg0, "2001::3", ip_ttl=54, ip_dscp=0xBE)
         rx = self.send_and_expect(self.pg0, tx, self.pg0)
         rx = self.send_and_expect(self.pg0, tx, self.pg0)
-        self.verify_capture_labelled_ip6(self.pg0, rx, tx,
-                                         [VppMplsLabel(32, ttl=53, exp=5)])
+        self.verify_capture_labelled_ip6(
+            self.pg0, rx, tx, [VppMplsLabel(32, ttl=53, exp=5)]
+        )
 
         #
         # add a recursive path, with output label, via the 1 label route
         #
 
         #
         # add a recursive path, with output label, via the 1 label route
         #
-        route_11_0_0_1 = VppIpRoute(self, "11.0.0.1", 32,
-                                    [VppRoutePath("10.0.0.1",
-                                                  0xffffffff,
-                                                  labels=[VppMplsLabel(44)])])
+        route_11_0_0_1 = VppIpRoute(
+            self,
+            "11.0.0.1",
+            32,
+            [VppRoutePath("10.0.0.1", 0xFFFFFFFF, labels=[VppMplsLabel(44)])],
+        )
         route_11_0_0_1.add_vpp_config()
 
         #
         route_11_0_0_1.add_vpp_config()
 
         #
@@ -874,20 +1023,25 @@ class TestMPLS(VppTestCase):
         #
         tx = self.create_stream_ip4(self.pg0, "11.0.0.1")
         rx = self.send_and_expect(self.pg0, tx, self.pg0)
         #
         tx = self.create_stream_ip4(self.pg0, "11.0.0.1")
         rx = self.send_and_expect(self.pg0, tx, self.pg0)
-        self.verify_capture_labelled_ip4(self.pg0, rx, tx,
-                                         [VppMplsLabel(32),
-                                          VppMplsLabel(44)])
+        self.verify_capture_labelled_ip4(
+            self.pg0, rx, tx, [VppMplsLabel(32), VppMplsLabel(44)]
+        )
 
 
-        self.assertEqual(route_11_0_0_1.get_stats_to()['packets'], 257)
+        self.assertEqual(route_11_0_0_1.get_stats_to()["packets"], 257)
 
         #
         # add a recursive path, with 2 labels, via the 3 label route
         #
 
         #
         # add a recursive path, with 2 labels, via the 3 label route
         #
-        route_11_0_0_2 = VppIpRoute(self, "11.0.0.2", 32,
-                                    [VppRoutePath("10.0.0.2",
-                                                  0xffffffff,
-                                                  labels=[VppMplsLabel(44),
-                                                          VppMplsLabel(45)])])
+        route_11_0_0_2 = VppIpRoute(
+            self,
+            "11.0.0.2",
+            32,
+            [
+                VppRoutePath(
+                    "10.0.0.2", 0xFFFFFFFF, labels=[VppMplsLabel(44), VppMplsLabel(45)]
+                )
+            ],
+        )
         route_11_0_0_2.add_vpp_config()
 
         #
         route_11_0_0_2.add_vpp_config()
 
         #
@@ -896,24 +1050,36 @@ class TestMPLS(VppTestCase):
         #
         tx = self.create_stream_ip4(self.pg0, "11.0.0.2")
         rx = self.send_and_expect(self.pg0, tx, self.pg0)
         #
         tx = self.create_stream_ip4(self.pg0, "11.0.0.2")
         rx = self.send_and_expect(self.pg0, tx, self.pg0)
-        self.verify_capture_labelled_ip4(self.pg0, rx, tx,
-                                         [VppMplsLabel(32),
-                                          VppMplsLabel(33),
-                                          VppMplsLabel(34),
-                                          VppMplsLabel(44),
-                                          VppMplsLabel(45)])
-
-        self.assertEqual(route_11_0_0_2.get_stats_to()['packets'], 257)
+        self.verify_capture_labelled_ip4(
+            self.pg0,
+            rx,
+            tx,
+            [
+                VppMplsLabel(32),
+                VppMplsLabel(33),
+                VppMplsLabel(34),
+                VppMplsLabel(44),
+                VppMplsLabel(45),
+            ],
+        )
+
+        self.assertEqual(route_11_0_0_2.get_stats_to()["packets"], 257)
 
         rx = self.send_and_expect(self.pg0, tx, self.pg0)
 
         rx = self.send_and_expect(self.pg0, tx, self.pg0)
-        self.verify_capture_labelled_ip4(self.pg0, rx, tx,
-                                         [VppMplsLabel(32),
-                                          VppMplsLabel(33),
-                                          VppMplsLabel(34),
-                                          VppMplsLabel(44),
-                                          VppMplsLabel(45)])
+        self.verify_capture_labelled_ip4(
+            self.pg0,
+            rx,
+            tx,
+            [
+                VppMplsLabel(32),
+                VppMplsLabel(33),
+                VppMplsLabel(34),
+                VppMplsLabel(44),
+                VppMplsLabel(45),
+            ],
+        )
 
 
-        self.assertEqual(route_11_0_0_2.get_stats_to()['packets'], 514)
+        self.assertEqual(route_11_0_0_2.get_stats_to()["packets"], 514)
 
         #
         # cleanup
 
         #
         # cleanup
@@ -924,20 +1090,32 @@ class TestMPLS(VppTestCase):
         route_10_0_0_1.remove_vpp_config()
 
     def test_imposition_fragmentation(self):
         route_10_0_0_1.remove_vpp_config()
 
     def test_imposition_fragmentation(self):
-        """ MPLS label imposition fragmentation test """
+        """MPLS label imposition fragmentation test"""
 
         #
         # Add a ipv4 non-recursive route with a single out label
         #
 
         #
         # Add a ipv4 non-recursive route with a single out label
         #
-        route_10_0_0_1 = VppIpRoute(self, "10.0.0.1", 32,
-                                    [VppRoutePath(self.pg0.remote_ip4,
-                                                  self.pg0.sw_if_index,
-                                                  labels=[VppMplsLabel(32)])])
+        route_10_0_0_1 = VppIpRoute(
+            self,
+            "10.0.0.1",
+            32,
+            [
+                VppRoutePath(
+                    self.pg0.remote_ip4, self.pg0.sw_if_index, labels=[VppMplsLabel(32)]
+                )
+            ],
+        )
         route_10_0_0_1.add_vpp_config()
         route_10_0_0_1.add_vpp_config()
-        route_1000_1 = VppIpRoute(self, "1000::1", 128,
-                                  [VppRoutePath(self.pg0.remote_ip6,
-                                                self.pg0.sw_if_index,
-                                                labels=[VppMplsLabel(32)])])
+        route_1000_1 = VppIpRoute(
+            self,
+            "1000::1",
+            128,
+            [
+                VppRoutePath(
+                    self.pg0.remote_ip6, self.pg0.sw_if_index, labels=[VppMplsLabel(32)]
+                )
+            ],
+        )
         route_1000_1.add_vpp_config()
 
         #
         route_1000_1.add_vpp_config()
 
         #
@@ -952,24 +1130,29 @@ class TestMPLS(VppTestCase):
         # 5 fragments per packet (257*5=1285)
         #
         rx = self.send_and_expect(self.pg0, tx, self.pg0, 1285)
         # 5 fragments per packet (257*5=1285)
         #
         rx = self.send_and_expect(self.pg0, tx, self.pg0, 1285)
-        self.verify_capture_fragmented_labelled_ip4(self.pg0, rx, tx,
-                                                    [VppMplsLabel(32)])
+        self.verify_capture_fragmented_labelled_ip4(
+            self.pg0, rx, tx, [VppMplsLabel(32)]
+        )
 
         # packets with DF bit set generate ICMP
         for t in tx:
 
         # packets with DF bit set generate ICMP
         for t in tx:
-            t[IP].flags = 'DF'
+            t[IP].flags = "DF"
         rxs = self.send_and_expect_some(self.pg0, tx, self.pg0)
 
         for rx in rxs:
             self.assertEqual(icmptypes[rx[ICMP].type], "dest-unreach")
         rxs = self.send_and_expect_some(self.pg0, tx, self.pg0)
 
         for rx in rxs:
             self.assertEqual(icmptypes[rx[ICMP].type], "dest-unreach")
-            self.assertEqual(icmpcodes[rx[ICMP].type][rx[ICMP].code],
-                             "fragmentation-needed")
+            self.assertEqual(
+                icmpcodes[rx[ICMP].type][rx[ICMP].code], "fragmentation-needed"
+            )
             # the link MTU is 9000, the MPLS over head is 4 bytes
             self.assertEqual(rx[ICMP].nexthopmtu, 9000 - 4)
 
             # the link MTU is 9000, the MPLS over head is 4 bytes
             self.assertEqual(rx[ICMP].nexthopmtu, 9000 - 4)
 
-        self.assertEqual(self.statistics.get_err_counter(
-            "/err/mpls-frag/can't fragment this packet"),
-                         len(tx))
+        self.assertEqual(
+            self.statistics.get_err_counter(
+                "/err/mpls-frag/can't fragment this packet"
+            ),
+            len(tx),
+        )
         #
         # a stream that matches the route for 1000::1/128
         # PG0 is in the default table
         #
         # a stream that matches the route for 1000::1/128
         # PG0 is in the default table
@@ -988,26 +1171,30 @@ class TestMPLS(VppTestCase):
         route_10_0_0_1.remove_vpp_config()
 
     def test_tunnel_pipe(self):
         route_10_0_0_1.remove_vpp_config()
 
     def test_tunnel_pipe(self):
-        """ MPLS Tunnel Tests - Pipe """
+        """MPLS Tunnel Tests - Pipe"""
 
         #
         # Create a tunnel with two out labels
         #
         mpls_tun = VppMPLSTunnelInterface(
             self,
 
         #
         # Create a tunnel with two out labels
         #
         mpls_tun = VppMPLSTunnelInterface(
             self,
-            [VppRoutePath(self.pg0.remote_ip4,
-                          self.pg0.sw_if_index,
-                          labels=[VppMplsLabel(44),
-                                  VppMplsLabel(46)])])
+            [
+                VppRoutePath(
+                    self.pg0.remote_ip4,
+                    self.pg0.sw_if_index,
+                    labels=[VppMplsLabel(44), VppMplsLabel(46)],
+                )
+            ],
+        )
         mpls_tun.add_vpp_config()
         mpls_tun.admin_up()
 
         #
         # add an unlabelled route through the new tunnel
         #
         mpls_tun.add_vpp_config()
         mpls_tun.admin_up()
 
         #
         # add an unlabelled route through the new tunnel
         #
-        route_10_0_0_3 = VppIpRoute(self, "10.0.0.3", 32,
-                                    [VppRoutePath("0.0.0.0",
-                                                  mpls_tun._sw_if_index)])
+        route_10_0_0_3 = VppIpRoute(
+            self, "10.0.0.3", 32, [VppRoutePath("0.0.0.0", mpls_tun._sw_if_index)]
+        )
         route_10_0_0_3.add_vpp_config()
 
         self.vapi.cli("clear trace")
         route_10_0_0_3.add_vpp_config()
 
         self.vapi.cli("clear trace")
@@ -1018,17 +1205,19 @@ class TestMPLS(VppTestCase):
         self.pg_start()
 
         rx = self.pg0.get_capture()
         self.pg_start()
 
         rx = self.pg0.get_capture()
-        self.verify_capture_tunneled_ip4(self.pg0, rx, tx,
-                                         [VppMplsLabel(44),
-                                          VppMplsLabel(46)])
+        self.verify_capture_tunneled_ip4(
+            self.pg0, rx, tx, [VppMplsLabel(44), VppMplsLabel(46)]
+        )
 
         #
         # add a labelled route through the new tunnel
         #
 
         #
         # add a labelled route through the new tunnel
         #
-        route_10_0_0_4 = VppIpRoute(self, "10.0.0.4", 32,
-                                    [VppRoutePath("0.0.0.0",
-                                                  mpls_tun._sw_if_index,
-                                                  labels=[33])])
+        route_10_0_0_4 = VppIpRoute(
+            self,
+            "10.0.0.4",
+            32,
+            [VppRoutePath("0.0.0.0", mpls_tun._sw_if_index, labels=[33])],
+        )
         route_10_0_0_4.add_vpp_config()
 
         self.vapi.cli("clear trace")
         route_10_0_0_4.add_vpp_config()
 
         self.vapi.cli("clear trace")
@@ -1039,10 +1228,12 @@ class TestMPLS(VppTestCase):
         self.pg_start()
 
         rx = self.pg0.get_capture()
         self.pg_start()
 
         rx = self.pg0.get_capture()
-        self.verify_capture_tunneled_ip4(self.pg0, rx, tx,
-                                         [VppMplsLabel(44),
-                                          VppMplsLabel(46),
-                                          VppMplsLabel(33, ttl=255)])
+        self.verify_capture_tunneled_ip4(
+            self.pg0,
+            rx,
+            tx,
+            [VppMplsLabel(44), VppMplsLabel(46), VppMplsLabel(33, ttl=255)],
+        )
 
         #
         # change tunnel's MTU to a low value
 
         #
         # change tunnel's MTU to a low value
@@ -1050,34 +1241,34 @@ class TestMPLS(VppTestCase):
         mpls_tun.set_l3_mtu(1200)
 
         # send IP into the tunnel to be fragmented
         mpls_tun.set_l3_mtu(1200)
 
         # send IP into the tunnel to be fragmented
-        tx = self.create_stream_ip4(self.pg0, "10.0.0.3",
-                                    payload_size=1500)
-        rx = self.send_and_expect(self.pg0, tx, self.pg0, len(tx)*2)
+        tx = self.create_stream_ip4(self.pg0, "10.0.0.3", payload_size=1500)
+        rx = self.send_and_expect(self.pg0, tx, self.pg0, len(tx) * 2)
 
         fake_tx = []
         for p in tx:
             fake_tx.append(p)
             fake_tx.append(p)
 
         fake_tx = []
         for p in tx:
             fake_tx.append(p)
             fake_tx.append(p)
-        self.verify_capture_tunneled_ip4(self.pg0, rx, fake_tx,
-                                         [VppMplsLabel(44),
-                                          VppMplsLabel(46)])
+        self.verify_capture_tunneled_ip4(
+            self.pg0, rx, fake_tx, [VppMplsLabel(44), VppMplsLabel(46)]
+        )
 
         # send MPLS into the tunnel to be fragmented
 
         # send MPLS into the tunnel to be fragmented
-        tx = self.create_stream_ip4(self.pg0, "10.0.0.4",
-                                    payload_size=1500)
-        rx = self.send_and_expect(self.pg0, tx, self.pg0, len(tx)*2)
+        tx = self.create_stream_ip4(self.pg0, "10.0.0.4", payload_size=1500)
+        rx = self.send_and_expect(self.pg0, tx, self.pg0, len(tx) * 2)
 
         fake_tx = []
         for p in tx:
             fake_tx.append(p)
             fake_tx.append(p)
 
         fake_tx = []
         for p in tx:
             fake_tx.append(p)
             fake_tx.append(p)
-        self.verify_capture_tunneled_ip4(self.pg0, rx, fake_tx,
-                                         [VppMplsLabel(44),
-                                          VppMplsLabel(46),
-                                          VppMplsLabel(33, ttl=255)])
+        self.verify_capture_tunneled_ip4(
+            self.pg0,
+            rx,
+            fake_tx,
+            [VppMplsLabel(44), VppMplsLabel(46), VppMplsLabel(33, ttl=255)],
+        )
 
     def test_tunnel_uniform(self):
 
     def test_tunnel_uniform(self):
-        """ MPLS Tunnel Tests - Uniform """
+        """MPLS Tunnel Tests - Uniform"""
 
         #
         # Create a tunnel with a single out label
 
         #
         # Create a tunnel with a single out label
@@ -1085,19 +1276,26 @@ class TestMPLS(VppTestCase):
         #
         mpls_tun = VppMPLSTunnelInterface(
             self,
         #
         mpls_tun = VppMPLSTunnelInterface(
             self,
-            [VppRoutePath(self.pg0.remote_ip4,
-                          self.pg0.sw_if_index,
-                          labels=[VppMplsLabel(44, ttl=32),
-                                  VppMplsLabel(46, MplsLspMode.UNIFORM)])])
+            [
+                VppRoutePath(
+                    self.pg0.remote_ip4,
+                    self.pg0.sw_if_index,
+                    labels=[
+                        VppMplsLabel(44, ttl=32),
+                        VppMplsLabel(46, MplsLspMode.UNIFORM),
+                    ],
+                )
+            ],
+        )
         mpls_tun.add_vpp_config()
         mpls_tun.admin_up()
 
         #
         # add an unlabelled route through the new tunnel
         #
         mpls_tun.add_vpp_config()
         mpls_tun.admin_up()
 
         #
         # add an unlabelled route through the new tunnel
         #
-        route_10_0_0_3 = VppIpRoute(self, "10.0.0.3", 32,
-                                    [VppRoutePath("0.0.0.0",
-                                                  mpls_tun._sw_if_index)])
+        route_10_0_0_3 = VppIpRoute(
+            self, "10.0.0.3", 32, [VppRoutePath("0.0.0.0", mpls_tun._sw_if_index)]
+        )
         route_10_0_0_3.add_vpp_config()
 
         self.vapi.cli("clear trace")
         route_10_0_0_3.add_vpp_config()
 
         self.vapi.cli("clear trace")
@@ -1108,18 +1306,23 @@ class TestMPLS(VppTestCase):
         self.pg_start()
 
         rx = self.pg0.get_capture()
         self.pg_start()
 
         rx = self.pg0.get_capture()
-        self.verify_capture_tunneled_ip4(self.pg0, rx, tx,
-                                         [VppMplsLabel(44, ttl=32),
-                                          VppMplsLabel(46, ttl=23)])
+        self.verify_capture_tunneled_ip4(
+            self.pg0, rx, tx, [VppMplsLabel(44, ttl=32), VppMplsLabel(46, ttl=23)]
+        )
 
         #
         # add a labelled route through the new tunnel
         #
         route_10_0_0_4 = VppIpRoute(
 
         #
         # add a labelled route through the new tunnel
         #
         route_10_0_0_4 = VppIpRoute(
-            self, "10.0.0.4", 32,
-            [VppRoutePath("0.0.0.0",
-                          mpls_tun._sw_if_index,
-                          labels=[VppMplsLabel(33, ttl=47)])])
+            self,
+            "10.0.0.4",
+            32,
+            [
+                VppRoutePath(
+                    "0.0.0.0", mpls_tun._sw_if_index, labels=[VppMplsLabel(33, ttl=47)]
+                )
+            ],
+        )
         route_10_0_0_4.add_vpp_config()
 
         self.vapi.cli("clear trace")
         route_10_0_0_4.add_vpp_config()
 
         self.vapi.cli("clear trace")
@@ -1130,45 +1333,63 @@ class TestMPLS(VppTestCase):
         self.pg_start()
 
         rx = self.pg0.get_capture()
         self.pg_start()
 
         rx = self.pg0.get_capture()
-        self.verify_capture_tunneled_ip4(self.pg0, rx, tx,
-                                         [VppMplsLabel(44, ttl=32),
-                                          VppMplsLabel(46, ttl=47),
-                                          VppMplsLabel(33, ttl=47)])
+        self.verify_capture_tunneled_ip4(
+            self.pg0,
+            rx,
+            tx,
+            [
+                VppMplsLabel(44, ttl=32),
+                VppMplsLabel(46, ttl=47),
+                VppMplsLabel(33, ttl=47),
+            ],
+        )
 
     def test_mpls_tunnel_many(self):
 
     def test_mpls_tunnel_many(self):
-        """ MPLS Multiple Tunnels """
+        """MPLS Multiple Tunnels"""
 
         for ii in range(100):
             mpls_tun = VppMPLSTunnelInterface(
                 self,
 
         for ii in range(100):
             mpls_tun = VppMPLSTunnelInterface(
                 self,
-                [VppRoutePath(self.pg0.remote_ip4,
-                              self.pg0.sw_if_index,
-                              labels=[VppMplsLabel(44, ttl=32),
-                                      VppMplsLabel(46, MplsLspMode.UNIFORM)])])
+                [
+                    VppRoutePath(
+                        self.pg0.remote_ip4,
+                        self.pg0.sw_if_index,
+                        labels=[
+                            VppMplsLabel(44, ttl=32),
+                            VppMplsLabel(46, MplsLspMode.UNIFORM),
+                        ],
+                    )
+                ],
+            )
             mpls_tun.add_vpp_config()
             mpls_tun.admin_up()
         for ii in range(100):
             mpls_tun = VppMPLSTunnelInterface(
                 self,
             mpls_tun.add_vpp_config()
             mpls_tun.admin_up()
         for ii in range(100):
             mpls_tun = VppMPLSTunnelInterface(
                 self,
-                [VppRoutePath(self.pg0.remote_ip4,
-                              self.pg0.sw_if_index,
-                              labels=[VppMplsLabel(44, ttl=32),
-                                      VppMplsLabel(46, MplsLspMode.UNIFORM)])],
-                is_l2=1)
+                [
+                    VppRoutePath(
+                        self.pg0.remote_ip4,
+                        self.pg0.sw_if_index,
+                        labels=[
+                            VppMplsLabel(44, ttl=32),
+                            VppMplsLabel(46, MplsLspMode.UNIFORM),
+                        ],
+                    )
+                ],
+                is_l2=1,
+            )
             mpls_tun.add_vpp_config()
             mpls_tun.admin_up()
 
     def test_v4_exp_null(self):
             mpls_tun.add_vpp_config()
             mpls_tun.admin_up()
 
     def test_v4_exp_null(self):
-        """ MPLS V4 Explicit NULL test """
+        """MPLS V4 Explicit NULL test"""
 
         #
         # The first test case has an MPLS TTL of 0
         # all packet should be dropped
         #
 
         #
         # The first test case has an MPLS TTL of 0
         # all packet should be dropped
         #
-        tx = self.create_stream_labelled_ip4(self.pg0,
-                                             [VppMplsLabel(0, ttl=0)])
-        self.send_and_assert_no_replies(self.pg0, tx,
-                                        "MPLS TTL=0 packets forwarded")
+        tx = self.create_stream_labelled_ip4(self.pg0, [VppMplsLabel(0, ttl=0)])
+        self.send_and_assert_no_replies(self.pg0, tx, "MPLS TTL=0 packets forwarded")
 
         #
         # a stream with a non-zero MPLS TTL
 
         #
         # a stream with a non-zero MPLS TTL
@@ -1188,7 +1409,7 @@ class TestMPLS(VppTestCase):
         self.verify_capture_ip4(self.pg1, rx, tx)
 
     def test_v6_exp_null(self):
         self.verify_capture_ip4(self.pg1, rx, tx)
 
     def test_v6_exp_null(self):
-        """ MPLS V6 Explicit NULL test """
+        """MPLS V6 Explicit NULL test"""
 
         #
         # a stream with a non-zero MPLS TTL
 
         #
         # a stream with a non-zero MPLS TTL
@@ -1208,42 +1429,40 @@ class TestMPLS(VppTestCase):
         self.verify_capture_ip6(self.pg0, rx, tx)
 
     def test_deag(self):
         self.verify_capture_ip6(self.pg0, rx, tx)
 
     def test_deag(self):
-        """ MPLS Deagg """
+        """MPLS Deagg"""
 
         #
         # A de-agg route - next-hop lookup in default table
         #
 
         #
         # A de-agg route - next-hop lookup in default table
         #
-        route_34_eos = VppMplsRoute(self, 34, 1,
-                                    [VppRoutePath("0.0.0.0",
-                                                  0xffffffff,
-                                                  nh_table_id=0)])
+        route_34_eos = VppMplsRoute(
+            self, 34, 1, [VppRoutePath("0.0.0.0", 0xFFFFFFFF, nh_table_id=0)]
+        )
         route_34_eos.add_vpp_config()
 
         #
         # ping an interface in the default table
         # PG0 is in the default table
         #
         route_34_eos.add_vpp_config()
 
         #
         # ping an interface in the default table
         # PG0 is in the default table
         #
-        tx = self.create_stream_labelled_ip4(self.pg0,
-                                             [VppMplsLabel(34)],
-                                             ping=1,
-                                             ip_itf=self.pg0)
+        tx = self.create_stream_labelled_ip4(
+            self.pg0, [VppMplsLabel(34)], ping=1, ip_itf=self.pg0
+        )
         rx = self.send_and_expect(self.pg0, tx, self.pg0)
         self.verify_capture_ip4(self.pg0, rx, tx, ping_resp=1)
 
         #
         # A de-agg route - next-hop lookup in non-default table
         #
         rx = self.send_and_expect(self.pg0, tx, self.pg0)
         self.verify_capture_ip4(self.pg0, rx, tx, ping_resp=1)
 
         #
         # A de-agg route - next-hop lookup in non-default table
         #
-        route_35_eos = VppMplsRoute(self, 35, 1,
-                                    [VppRoutePath("0.0.0.0",
-                                                  0xffffffff,
-                                                  nh_table_id=1)])
+        route_35_eos = VppMplsRoute(
+            self, 35, 1, [VppRoutePath("0.0.0.0", 0xFFFFFFFF, nh_table_id=1)]
+        )
         route_35_eos.add_vpp_config()
         route_356_eos = VppMplsRoute(
         route_35_eos.add_vpp_config()
         route_356_eos = VppMplsRoute(
-            self, 356, 1,
-            [VppRoutePath("0::0",
-                          0xffffffff,
-                          nh_table_id=1)],
-            eos_proto=FibPathProto.FIB_PATH_NH_PROTO_IP6)
+            self,
+            356,
+            1,
+            [VppRoutePath("0::0", 0xFFFFFFFF, nh_table_id=1)],
+            eos_proto=FibPathProto.FIB_PATH_NH_PROTO_IP6,
+        )
         route_356_eos.add_vpp_config()
 
         #
         route_356_eos.add_vpp_config()
 
         #
@@ -1252,26 +1471,25 @@ class TestMPLS(VppTestCase):
         # default table and egress unlabelled in the non-default
         #
         tx = self.create_stream_labelled_ip4(
         # default table and egress unlabelled in the non-default
         #
         tx = self.create_stream_labelled_ip4(
-            self.pg0, [VppMplsLabel(35)], ping=1, ip_itf=self.pg1)
+            self.pg0, [VppMplsLabel(35)], ping=1, ip_itf=self.pg1
+        )
         rx = self.send_and_expect(self.pg0, tx, self.pg1)
         self.verify_capture_ip4(self.pg1, rx, tx, ping_resp=1)
         tx = self.create_stream_labelled_ip6(
         rx = self.send_and_expect(self.pg0, tx, self.pg1)
         self.verify_capture_ip4(self.pg1, rx, tx, ping_resp=1)
         tx = self.create_stream_labelled_ip6(
-            self.pg0, [VppMplsLabel(356)], ping=1, ip_itf=self.pg1)
+            self.pg0, [VppMplsLabel(356)], ping=1, ip_itf=self.pg1
+        )
         rx = self.send_and_expect(self.pg0, tx, self.pg1)
         self.verify_capture_ip6(self.pg1, rx, tx, ping_resp=1)
 
         #
         # Double pop
         #
         rx = self.send_and_expect(self.pg0, tx, self.pg1)
         self.verify_capture_ip6(self.pg1, rx, tx, ping_resp=1)
 
         #
         # Double pop
         #
-        route_36_neos = VppMplsRoute(self, 36, 0,
-                                     [VppRoutePath("0.0.0.0",
-                                                   0xffffffff)])
+        route_36_neos = VppMplsRoute(self, 36, 0, [VppRoutePath("0.0.0.0", 0xFFFFFFFF)])
         route_36_neos.add_vpp_config()
 
         route_36_neos.add_vpp_config()
 
-        tx = self.create_stream_labelled_ip4(self.pg0,
-                                             [VppMplsLabel(36),
-                                              VppMplsLabel(35)],
-                                             ping=1, ip_itf=self.pg1)
+        tx = self.create_stream_labelled_ip4(
+            self.pg0, [VppMplsLabel(36), VppMplsLabel(35)], ping=1, ip_itf=self.pg1
+        )
         rx = self.send_and_expect(self.pg0, tx, self.pg1)
         self.verify_capture_ip4(self.pg1, rx, tx, ping_resp=1)
 
         rx = self.send_and_expect(self.pg0, tx, self.pg1)
         self.verify_capture_ip4(self.pg1, rx, tx, ping_resp=1)
 
@@ -1280,16 +1498,19 @@ class TestMPLS(VppTestCase):
         route_34_eos.remove_vpp_config()
 
     def test_interface_rx(self):
         route_34_eos.remove_vpp_config()
 
     def test_interface_rx(self):
-        """ MPLS Interface Receive """
+        """MPLS Interface Receive"""
 
         #
         # Add a non-recursive route that will forward the traffic
         # post-interface-rx
         #
 
         #
         # Add a non-recursive route that will forward the traffic
         # post-interface-rx
         #
-        route_10_0_0_1 = VppIpRoute(self, "10.0.0.1", 32,
-                                    table_id=1,
-                                    paths=[VppRoutePath(self.pg1.remote_ip4,
-                                                        self.pg1.sw_if_index)])
+        route_10_0_0_1 = VppIpRoute(
+            self,
+            "10.0.0.1",
+            32,
+            table_id=1,
+            paths=[VppRoutePath(self.pg1.remote_ip4, self.pg1.sw_if_index)],
+        )
         route_10_0_0_1.add_vpp_config()
 
         #
         route_10_0_0_1.add_vpp_config()
 
         #
@@ -1301,33 +1522,43 @@ class TestMPLS(VppTestCase):
         # so as to have matched the route in table 1
         #
         route_34_eos = VppMplsRoute(
         # so as to have matched the route in table 1
         #
         route_34_eos = VppMplsRoute(
-            self, 34, 1,
-            [VppRoutePath("0.0.0.0",
-                          self.pg1.sw_if_index,
-                          type=FibPathType.FIB_PATH_TYPE_INTERFACE_RX)])
+            self,
+            34,
+            1,
+            [
+                VppRoutePath(
+                    "0.0.0.0",
+                    self.pg1.sw_if_index,
+                    type=FibPathType.FIB_PATH_TYPE_INTERFACE_RX,
+                )
+            ],
+        )
         route_34_eos.add_vpp_config()
 
         #
         # ping an interface in the default table
         # PG0 is in the default table
         #
         route_34_eos.add_vpp_config()
 
         #
         # ping an interface in the default table
         # PG0 is in the default table
         #
-        tx = self.create_stream_labelled_ip4(self.pg0,
-                                             [VppMplsLabel(34)],
-                                             dst_ip="10.0.0.1")
+        tx = self.create_stream_labelled_ip4(
+            self.pg0, [VppMplsLabel(34)], dst_ip="10.0.0.1"
+        )
         rx = self.send_and_expect(self.pg0, tx, self.pg1)
         self.verify_capture_ip4(self.pg1, rx, tx)
 
     def test_mcast_mid_point(self):
         rx = self.send_and_expect(self.pg0, tx, self.pg1)
         self.verify_capture_ip4(self.pg1, rx, tx)
 
     def test_mcast_mid_point(self):
-        """ MPLS Multicast Mid Point """
+        """MPLS Multicast Mid Point"""
 
         #
         # Add a non-recursive route that will forward the traffic
         # post-interface-rx
         #
 
         #
         # Add a non-recursive route that will forward the traffic
         # post-interface-rx
         #
-        route_10_0_0_1 = VppIpRoute(self, "10.0.0.1", 32,
-                                    table_id=1,
-                                    paths=[VppRoutePath(self.pg1.remote_ip4,
-                                                        self.pg1.sw_if_index)])
+        route_10_0_0_1 = VppIpRoute(
+            self,
+            "10.0.0.1",
+            32,
+            table_id=1,
+            paths=[VppRoutePath(self.pg1.remote_ip4, self.pg1.sw_if_index)],
+        )
         route_10_0_0_1.add_vpp_config()
 
         #
         route_10_0_0_1.add_vpp_config()
 
         #
@@ -1335,17 +1566,28 @@ class TestMPLS(VppTestCase):
         # and replicate to a interface-rx (like a bud node would)
         #
         route_3400_eos = VppMplsRoute(
         # and replicate to a interface-rx (like a bud node would)
         #
         route_3400_eos = VppMplsRoute(
-            self, 3400, 1,
-            [VppRoutePath(self.pg2.remote_ip4,
-                          self.pg2.sw_if_index,
-                          labels=[VppMplsLabel(3401)]),
-             VppRoutePath(self.pg3.remote_ip4,
-                          self.pg3.sw_if_index,
-                          labels=[VppMplsLabel(3402)]),
-             VppRoutePath("0.0.0.0",
-                          self.pg1.sw_if_index,
-                          type=FibPathType.FIB_PATH_TYPE_INTERFACE_RX)],
-            is_multicast=1)
+            self,
+            3400,
+            1,
+            [
+                VppRoutePath(
+                    self.pg2.remote_ip4,
+                    self.pg2.sw_if_index,
+                    labels=[VppMplsLabel(3401)],
+                ),
+                VppRoutePath(
+                    self.pg3.remote_ip4,
+                    self.pg3.sw_if_index,
+                    labels=[VppMplsLabel(3402)],
+                ),
+                VppRoutePath(
+                    "0.0.0.0",
+                    self.pg1.sw_if_index,
+                    type=FibPathType.FIB_PATH_TYPE_INTERFACE_RX,
+                ),
+            ],
+            is_multicast=1,
+        )
         route_3400_eos.add_vpp_config()
 
         #
         route_3400_eos.add_vpp_config()
 
         #
@@ -1353,10 +1595,9 @@ class TestMPLS(VppTestCase):
         # PG0 is in the default table
         #
         self.vapi.cli("clear trace")
         # PG0 is in the default table
         #
         self.vapi.cli("clear trace")
-        tx = self.create_stream_labelled_ip4(self.pg0,
-                                             [VppMplsLabel(3400, ttl=64)],
-                                             n=257,
-                                             dst_ip="10.0.0.1")
+        tx = self.create_stream_labelled_ip4(
+            self.pg0, [VppMplsLabel(3400, ttl=64)], n=257, dst_ip="10.0.0.1"
+        )
         self.pg0.add_stream(tx)
 
         self.pg_enable_capture(self.pg_interfaces)
         self.pg0.add_stream(tx)
 
         self.pg_enable_capture(self.pg_interfaces)
@@ -1366,14 +1607,12 @@ class TestMPLS(VppTestCase):
         self.verify_capture_ip4(self.pg1, rx, tx)
 
         rx = self.pg2.get_capture(257)
         self.verify_capture_ip4(self.pg1, rx, tx)
 
         rx = self.pg2.get_capture(257)
-        self.verify_capture_labelled(self.pg2, rx, tx,
-                                     [VppMplsLabel(3401, ttl=63)])
+        self.verify_capture_labelled(self.pg2, rx, tx, [VppMplsLabel(3401, ttl=63)])
         rx = self.pg3.get_capture(257)
         rx = self.pg3.get_capture(257)
-        self.verify_capture_labelled(self.pg3, rx, tx,
-                                     [VppMplsLabel(3402, ttl=63)])
+        self.verify_capture_labelled(self.pg3, rx, tx, [VppMplsLabel(3402, ttl=63)])
 
     def test_mcast_head(self):
 
     def test_mcast_head(self):
-        """ MPLS Multicast Head-end """
+        """MPLS Multicast Head-end"""
 
         MRouteItfFlags = VppEnum.vl_api_mfib_itf_flags_t
         MRouteEntryFlags = VppEnum.vl_api_mfib_entry_flags_t
 
         MRouteItfFlags = VppEnum.vl_api_mfib_itf_flags_t
         MRouteEntryFlags = VppEnum.vl_api_mfib_entry_flags_t
@@ -1383,22 +1622,25 @@ class TestMPLS(VppTestCase):
         #
         mpls_tun = VppMPLSTunnelInterface(
             self,
         #
         mpls_tun = VppMPLSTunnelInterface(
             self,
-            [VppRoutePath(self.pg2.remote_ip4,
-                          self.pg2.sw_if_index,
-                          labels=[VppMplsLabel(42)]),
-             VppRoutePath(self.pg3.remote_ip4,
-                          self.pg3.sw_if_index,
-                          labels=[VppMplsLabel(43)])],
-            is_multicast=1)
+            [
+                VppRoutePath(
+                    self.pg2.remote_ip4, self.pg2.sw_if_index, labels=[VppMplsLabel(42)]
+                ),
+                VppRoutePath(
+                    self.pg3.remote_ip4, self.pg3.sw_if_index, labels=[VppMplsLabel(43)]
+                ),
+            ],
+            is_multicast=1,
+        )
         mpls_tun.add_vpp_config()
         mpls_tun.admin_up()
 
         #
         # add an unlabelled route through the new tunnel
         #
         mpls_tun.add_vpp_config()
         mpls_tun.admin_up()
 
         #
         # add an unlabelled route through the new tunnel
         #
-        route_10_0_0_3 = VppIpRoute(self, "10.0.0.3", 32,
-                                    [VppRoutePath("0.0.0.0",
-                                                  mpls_tun._sw_if_index)])
+        route_10_0_0_3 = VppIpRoute(
+            self, "10.0.0.3", 32, [VppRoutePath("0.0.0.0", mpls_tun._sw_if_index)]
+        )
         route_10_0_0_3.add_vpp_config()
 
         self.vapi.cli("clear trace")
         route_10_0_0_3.add_vpp_config()
 
         self.vapi.cli("clear trace")
@@ -1421,12 +1663,18 @@ class TestMPLS(VppTestCase):
         route_232_1_1_1 = VppIpMRoute(
             self,
             "0.0.0.0",
         route_232_1_1_1 = VppIpMRoute(
             self,
             "0.0.0.0",
-            "232.1.1.1", 32,
+            "232.1.1.1",
+            32,
             MRouteEntryFlags.MFIB_API_ENTRY_FLAG_NONE,
             MRouteEntryFlags.MFIB_API_ENTRY_FLAG_NONE,
-            [VppMRoutePath(self.pg0.sw_if_index,
-                           MRouteItfFlags.MFIB_API_ITF_FLAG_ACCEPT),
-             VppMRoutePath(mpls_tun._sw_if_index,
-                           MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD)])
+            [
+                VppMRoutePath(
+                    self.pg0.sw_if_index, MRouteItfFlags.MFIB_API_ITF_FLAG_ACCEPT
+                ),
+                VppMRoutePath(
+                    mpls_tun._sw_if_index, MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD
+                ),
+            ],
+        )
         route_232_1_1_1.add_vpp_config()
         self.logger.info(self.vapi.cli("sh ip mfib index 0"))
 
         route_232_1_1_1.add_vpp_config()
         self.logger.info(self.vapi.cli("sh ip mfib index 0"))
 
@@ -1443,7 +1691,7 @@ class TestMPLS(VppTestCase):
         self.verify_capture_tunneled_ip4(self.pg0, rx, tx, [VppMplsLabel(43)])
 
     def test_mcast_ip4_tail(self):
         self.verify_capture_tunneled_ip4(self.pg0, rx, tx, [VppMplsLabel(43)])
 
     def test_mcast_ip4_tail(self):
-        """ MPLS IPv4 Multicast Tail """
+        """MPLS IPv4 Multicast Tail"""
 
         MRouteItfFlags = VppEnum.vl_api_mfib_itf_flags_t
         MRouteEntryFlags = VppEnum.vl_api_mfib_entry_flags_t
 
         MRouteItfFlags = VppEnum.vl_api_mfib_itf_flags_t
         MRouteEntryFlags = VppEnum.vl_api_mfib_entry_flags_t
@@ -1455,11 +1703,16 @@ class TestMPLS(VppTestCase):
         route_232_1_1_1 = VppIpMRoute(
             self,
             "0.0.0.0",
         route_232_1_1_1 = VppIpMRoute(
             self,
             "0.0.0.0",
-            "232.1.1.1", 32,
+            "232.1.1.1",
+            32,
             MRouteEntryFlags.MFIB_API_ENTRY_FLAG_NONE,
             table_id=1,
             MRouteEntryFlags.MFIB_API_ENTRY_FLAG_NONE,
             table_id=1,
-            paths=[VppMRoutePath(self.pg1.sw_if_index,
-                                 MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD)])
+            paths=[
+                VppMRoutePath(
+                    self.pg1.sw_if_index, MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD
+                )
+            ],
+        )
         route_232_1_1_1.add_vpp_config()
 
         #
         route_232_1_1_1.add_vpp_config()
 
         #
@@ -1471,13 +1724,13 @@ class TestMPLS(VppTestCase):
         # table 1
         #
         route_34_eos = VppMplsRoute(
         # table 1
         #
         route_34_eos = VppMplsRoute(
-            self, 34, 1,
-            [VppRoutePath("0.0.0.0",
-                          0xffffffff,
-                          nh_table_id=1,
-                          rpf_id=55)],
+            self,
+            34,
+            1,
+            [VppRoutePath("0.0.0.0", 0xFFFFFFFF, nh_table_id=1, rpf_id=55)],
             is_multicast=1,
             is_multicast=1,
-            eos_proto=FibPathProto.FIB_PATH_NH_PROTO_IP4)
+            eos_proto=FibPathProto.FIB_PATH_NH_PROTO_IP4,
+        )
 
         route_34_eos.add_vpp_config()
 
 
         route_34_eos.add_vpp_config()
 
@@ -1485,8 +1738,9 @@ class TestMPLS(VppTestCase):
         # Drop due to interface lookup miss
         #
         self.vapi.cli("clear trace")
         # Drop due to interface lookup miss
         #
         self.vapi.cli("clear trace")
-        tx = self.create_stream_labelled_ip4(self.pg0, [VppMplsLabel(34)],
-                                             dst_ip="232.1.1.1", n=1)
+        tx = self.create_stream_labelled_ip4(
+            self.pg0, [VppMplsLabel(34)], dst_ip="232.1.1.1", n=1
+        )
         self.send_and_assert_no_replies(self.pg0, tx, "RPF-ID drop none")
 
         #
         self.send_and_assert_no_replies(self.pg0, tx, "RPF-ID drop none")
 
         #
@@ -1495,29 +1749,31 @@ class TestMPLS(VppTestCase):
         route_232_1_1_1.update_rpf_id(55)
         self.logger.info(self.vapi.cli("sh ip mfib index 1 232.1.1.1"))
 
         route_232_1_1_1.update_rpf_id(55)
         self.logger.info(self.vapi.cli("sh ip mfib index 1 232.1.1.1"))
 
-        tx = self.create_stream_labelled_ip4(self.pg0, [VppMplsLabel(34)],
-                                             dst_ip="232.1.1.1")
+        tx = self.create_stream_labelled_ip4(
+            self.pg0, [VppMplsLabel(34)], dst_ip="232.1.1.1"
+        )
         rx = self.send_and_expect(self.pg0, tx, self.pg1)
         self.verify_capture_ip4(self.pg1, rx, tx)
 
         #
         # disposed packets have an invalid IPv4 checksum
         #
         rx = self.send_and_expect(self.pg0, tx, self.pg1)
         self.verify_capture_ip4(self.pg1, rx, tx)
 
         #
         # disposed packets have an invalid IPv4 checksum
         #
-        tx = self.create_stream_labelled_ip4(self.pg0, [VppMplsLabel(34)],
-                                             dst_ip="232.1.1.1", n=65,
-                                             chksum=1)
+        tx = self.create_stream_labelled_ip4(
+            self.pg0, [VppMplsLabel(34)], dst_ip="232.1.1.1", n=65, chksum=1
+        )
         self.send_and_assert_no_replies(self.pg0, tx, "Invalid Checksum")
 
         #
         # set the RPF-ID of the entry to not match the input packet's
         #
         route_232_1_1_1.update_rpf_id(56)
         self.send_and_assert_no_replies(self.pg0, tx, "Invalid Checksum")
 
         #
         # set the RPF-ID of the entry to not match the input packet's
         #
         route_232_1_1_1.update_rpf_id(56)
-        tx = self.create_stream_labelled_ip4(self.pg0, [VppMplsLabel(34)],
-                                             dst_ip="232.1.1.1")
+        tx = self.create_stream_labelled_ip4(
+            self.pg0, [VppMplsLabel(34)], dst_ip="232.1.1.1"
+        )
         self.send_and_assert_no_replies(self.pg0, tx, "RPF-ID drop 56")
 
     def test_mcast_ip6_tail(self):
         self.send_and_assert_no_replies(self.pg0, tx, "RPF-ID drop 56")
 
     def test_mcast_ip6_tail(self):
-        """ MPLS IPv6 Multicast Tail """
+        """MPLS IPv6 Multicast Tail"""
 
         MRouteItfFlags = VppEnum.vl_api_mfib_itf_flags_t
         MRouteEntryFlags = VppEnum.vl_api_mfib_entry_flags_t
 
         MRouteItfFlags = VppEnum.vl_api_mfib_itf_flags_t
         MRouteEntryFlags = VppEnum.vl_api_mfib_entry_flags_t
@@ -1529,12 +1785,18 @@ class TestMPLS(VppTestCase):
         route_ff = VppIpMRoute(
             self,
             "::",
         route_ff = VppIpMRoute(
             self,
             "::",
-            "ff01::1", 32,
+            "ff01::1",
+            32,
             MRouteEntryFlags.MFIB_API_ENTRY_FLAG_NONE,
             table_id=1,
             MRouteEntryFlags.MFIB_API_ENTRY_FLAG_NONE,
             table_id=1,
-            paths=[VppMRoutePath(self.pg1.sw_if_index,
-                                 MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD,
-                                 proto=FibPathProto.FIB_PATH_NH_PROTO_IP6)])
+            paths=[
+                VppMRoutePath(
+                    self.pg1.sw_if_index,
+                    MRouteItfFlags.MFIB_API_ITF_FLAG_FORWARD,
+                    proto=FibPathProto.FIB_PATH_NH_PROTO_IP6,
+                )
+            ],
+        )
         route_ff.add_vpp_config()
 
         #
         route_ff.add_vpp_config()
 
         #
@@ -1546,21 +1808,22 @@ class TestMPLS(VppTestCase):
         # table 1
         #
         route_34_eos = VppMplsRoute(
         # table 1
         #
         route_34_eos = VppMplsRoute(
-            self, 34, 1,
-            [VppRoutePath("::",
-                          0xffffffff,
-                          nh_table_id=1,
-                          rpf_id=55)],
+            self,
+            34,
+            1,
+            [VppRoutePath("::", 0xFFFFFFFF, nh_table_id=1, rpf_id=55)],
             is_multicast=1,
             is_multicast=1,
-            eos_proto=FibPathProto.FIB_PATH_NH_PROTO_IP6)
+            eos_proto=FibPathProto.FIB_PATH_NH_PROTO_IP6,
+        )
 
         route_34_eos.add_vpp_config()
 
         #
         # Drop due to interface lookup miss
         #
 
         route_34_eos.add_vpp_config()
 
         #
         # Drop due to interface lookup miss
         #
-        tx = self.create_stream_labelled_ip6(self.pg0, [VppMplsLabel(34)],
-                                             dst_ip="ff01::1")
+        tx = self.create_stream_labelled_ip6(
+            self.pg0, [VppMplsLabel(34)], dst_ip="ff01::1"
+        )
         self.send_and_assert_no_replies(self.pg0, tx, "RPF Miss")
 
         #
         self.send_and_assert_no_replies(self.pg0, tx, "RPF Miss")
 
         #
@@ -1568,18 +1831,18 @@ class TestMPLS(VppTestCase):
         #
         route_ff.update_rpf_id(55)
 
         #
         route_ff.update_rpf_id(55)
 
-        tx = self.create_stream_labelled_ip6(self.pg0, [VppMplsLabel(34)],
-                                             dst_ip="ff01::1")
+        tx = self.create_stream_labelled_ip6(
+            self.pg0, [VppMplsLabel(34)], dst_ip="ff01::1"
+        )
         rx = self.send_and_expect(self.pg0, tx, self.pg1)
         self.verify_capture_ip6(self.pg1, rx, tx)
 
         #
         # disposed packets have hop-limit = 1
         #
         rx = self.send_and_expect(self.pg0, tx, self.pg1)
         self.verify_capture_ip6(self.pg1, rx, tx)
 
         #
         # disposed packets have hop-limit = 1
         #
-        tx = self.create_stream_labelled_ip6(self.pg0,
-                                             [VppMplsLabel(34)],
-                                             dst_ip="ff01::1",
-                                             hlim=1)
+        tx = self.create_stream_labelled_ip6(
+            self.pg0, [VppMplsLabel(34)], dst_ip="ff01::1", hlim=1
+        )
         rx = self.send_and_expect_some(self.pg0, tx, self.pg0)
         self.verify_capture_ip6_icmp(self.pg0, rx, tx)
 
         rx = self.send_and_expect_some(self.pg0, tx, self.pg0)
         self.verify_capture_ip6_icmp(self.pg0, rx, tx)
 
@@ -1587,21 +1850,27 @@ class TestMPLS(VppTestCase):
         # set the RPF-ID of the entry to not match the input packet's
         #
         route_ff.update_rpf_id(56)
         # set the RPF-ID of the entry to not match the input packet's
         #
         route_ff.update_rpf_id(56)
-        tx = self.create_stream_labelled_ip6(self.pg0,
-                                             [VppMplsLabel(34)],
-                                             dst_ip="ff01::1")
+        tx = self.create_stream_labelled_ip6(
+            self.pg0, [VppMplsLabel(34)], dst_ip="ff01::1"
+        )
         self.send_and_assert_no_replies(self.pg0, tx, "RPF-ID drop 56")
 
     def test_6pe(self):
         self.send_and_assert_no_replies(self.pg0, tx, "RPF-ID drop 56")
 
     def test_6pe(self):
-        """ MPLS 6PE """
+        """MPLS 6PE"""
 
         #
         # Add a non-recursive route with a single out label
         #
 
         #
         # Add a non-recursive route with a single out label
         #
-        route_10_0_0_1 = VppIpRoute(self, "10.0.0.1", 32,
-                                    [VppRoutePath(self.pg0.remote_ip4,
-                                                  self.pg0.sw_if_index,
-                                                  labels=[VppMplsLabel(45)])])
+        route_10_0_0_1 = VppIpRoute(
+            self,
+            "10.0.0.1",
+            32,
+            [
+                VppRoutePath(
+                    self.pg0.remote_ip4, self.pg0.sw_if_index, labels=[VppMplsLabel(45)]
+                )
+            ],
+        )
         route_10_0_0_1.add_vpp_config()
 
         # bind a local label to the route
         route_10_0_0_1.add_vpp_config()
 
         # bind a local label to the route
@@ -1612,55 +1881,57 @@ class TestMPLS(VppTestCase):
         # a labelled v6 route that resolves through the v4
         #
         route_2001_3 = VppIpRoute(
         # a labelled v6 route that resolves through the v4
         #
         route_2001_3 = VppIpRoute(
-            self, "2001::3", 128,
-            [VppRoutePath("10.0.0.1",
-                          INVALID_INDEX,
-                          labels=[VppMplsLabel(32)])])
+            self,
+            "2001::3",
+            128,
+            [VppRoutePath("10.0.0.1", INVALID_INDEX, labels=[VppMplsLabel(32)])],
+        )
         route_2001_3.add_vpp_config()
 
         tx = self.create_stream_ip6(self.pg0, "2001::3")
         rx = self.send_and_expect(self.pg0, tx, self.pg0)
 
         route_2001_3.add_vpp_config()
 
         tx = self.create_stream_ip6(self.pg0, "2001::3")
         rx = self.send_and_expect(self.pg0, tx, self.pg0)
 
-        self.verify_capture_labelled_ip6(self.pg0, rx, tx,
-                                         [VppMplsLabel(45),
-                                          VppMplsLabel(32)])
+        self.verify_capture_labelled_ip6(
+            self.pg0, rx, tx, [VppMplsLabel(45), VppMplsLabel(32)]
+        )
 
         #
         # and a v4 recursive via the v6
         #
         route_20_3 = VppIpRoute(
 
         #
         # and a v4 recursive via the v6
         #
         route_20_3 = VppIpRoute(
-            self, "20.0.0.3", 32,
-            [VppRoutePath("2001::3",
-                          INVALID_INDEX,
-                          labels=[VppMplsLabel(99)])])
+            self,
+            "20.0.0.3",
+            32,
+            [VppRoutePath("2001::3", INVALID_INDEX, labels=[VppMplsLabel(99)])],
+        )
         route_20_3.add_vpp_config()
 
         tx = self.create_stream_ip4(self.pg0, "20.0.0.3")
         rx = self.send_and_expect(self.pg0, tx, self.pg0)
 
         route_20_3.add_vpp_config()
 
         tx = self.create_stream_ip4(self.pg0, "20.0.0.3")
         rx = self.send_and_expect(self.pg0, tx, self.pg0)
 
-        self.verify_capture_labelled_ip4(self.pg0, rx, tx,
-                                         [VppMplsLabel(45),
-                                          VppMplsLabel(32),
-                                          VppMplsLabel(99)])
+        self.verify_capture_labelled_ip4(
+            self.pg0, rx, tx, [VppMplsLabel(45), VppMplsLabel(32), VppMplsLabel(99)]
+        )
 
     def test_attached(self):
 
     def test_attached(self):
-        """ Attach Routes with Local Label """
+        """Attach Routes with Local Label"""
 
         #
         # test that if a local label is associated with an attached/connected
         # prefix, that we can reach hosts in the prefix.
         #
 
         #
         # test that if a local label is associated with an attached/connected
         # prefix, that we can reach hosts in the prefix.
         #
-        binding = VppMplsIpBind(self, 44,
-                                self.pg0._local_ip4_subnet,
-                                self.pg0.local_ip4_prefix_len)
+        binding = VppMplsIpBind(
+            self, 44, self.pg0._local_ip4_subnet, self.pg0.local_ip4_prefix_len
+        )
         binding.add_vpp_config()
 
         binding.add_vpp_config()
 
-        tx = (Ether(src=self.pg1.remote_mac,
-                    dst=self.pg1.local_mac) /
-              MPLS(label=44, ttl=64) /
-              IP(src=self.pg0.remote_ip4, dst=self.pg0.remote_ip4) /
-              UDP(sport=1234, dport=1234) /
-              Raw(b'\xa5' * 100))
+        tx = (
+            Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
+            / MPLS(label=44, ttl=64)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg0.remote_ip4)
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
         rxs = self.send_and_expect(self.pg0, [tx], self.pg0)
         for rx in rxs:
             # if there's an ARP then the label is linked to the glean
         rxs = self.send_and_expect(self.pg0, [tx], self.pg0)
         for rx in rxs:
             # if there's an ARP then the label is linked to the glean
@@ -1672,7 +1943,7 @@ class TestMPLS(VppTestCase):
 
 
 class TestMPLSDisabled(VppTestCase):
 
 
 class TestMPLSDisabled(VppTestCase):
-    """ MPLS disabled """
+    """MPLS disabled"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -1709,26 +1980,29 @@ class TestMPLSDisabled(VppTestCase):
         super(TestMPLSDisabled, self).tearDown()
 
     def test_mpls_disabled(self):
         super(TestMPLSDisabled, self).tearDown()
 
     def test_mpls_disabled(self):
-        """ MPLS Disabled """
+        """MPLS Disabled"""
 
         self.logger.info(self.vapi.cli("show mpls interface"))
         self.logger.info(self.vapi.cli("show mpls interface pg1"))
         self.logger.info(self.vapi.cli("show mpls interface pg0"))
 
 
         self.logger.info(self.vapi.cli("show mpls interface"))
         self.logger.info(self.vapi.cli("show mpls interface pg1"))
         self.logger.info(self.vapi.cli("show mpls interface pg0"))
 
-        tx = (Ether(src=self.pg1.remote_mac,
-                    dst=self.pg1.local_mac) /
-              MPLS(label=32, ttl=64) /
-              IPv6(src="2001::1", dst=self.pg0.remote_ip6) /
-              UDP(sport=1234, dport=1234) /
-              Raw(b'\xa5' * 100))
+        tx = (
+            Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
+            / MPLS(label=32, ttl=64)
+            / IPv6(src="2001::1", dst=self.pg0.remote_ip6)
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
 
         #
         # A simple MPLS xconnect - eos label in label out
         #
 
         #
         # A simple MPLS xconnect - eos label in label out
         #
-        route_32_eos = VppMplsRoute(self, 32, 1,
-                                    [VppRoutePath(self.pg0.remote_ip4,
-                                                  self.pg0.sw_if_index,
-                                                  labels=[33])])
+        route_32_eos = VppMplsRoute(
+            self,
+            32,
+            1,
+            [VppRoutePath(self.pg0.remote_ip4, self.pg0.sw_if_index, labels=[33])],
+        )
         route_32_eos.add_vpp_config()
 
         #
         route_32_eos.add_vpp_config()
 
         #
@@ -1766,7 +2040,7 @@ class TestMPLSDisabled(VppTestCase):
 
 
 class TestMPLSPIC(VppTestCase):
 
 
 class TestMPLSPIC(VppTestCase):
-    """ MPLS Prefix-Independent Convergence (PIC) edge convergence """
+    """MPLS Prefix-Independent Convergence (PIC) edge convergence"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -1829,7 +2103,7 @@ class TestMPLSPIC(VppTestCase):
         super(TestMPLSPIC, self).tearDown()
 
     def test_mpls_ibgp_pic(self):
         super(TestMPLSPIC, self).tearDown()
 
     def test_mpls_ibgp_pic(self):
-        """ MPLS iBGP Prefix-Independent Convergence (PIC) edge convergence
+        """MPLS iBGP Prefix-Independent Convergence (PIC) edge convergence
 
         1) setup many iBGP VPN routes via a pair of iBGP peers.
         2) Check EMCP forwarding to these peers
 
         1) setup many iBGP VPN routes via a pair of iBGP peers.
         2) Check EMCP forwarding to these peers
@@ -1840,16 +2114,20 @@ class TestMPLSPIC(VppTestCase):
         #
         # IGP+LDP core routes
         #
         #
         # IGP+LDP core routes
         #
-        core_10_0_0_45 = VppIpRoute(self, "10.0.0.45", 32,
-                                    [VppRoutePath(self.pg0.remote_ip4,
-                                                  self.pg0.sw_if_index,
-                                                  labels=[45])])
+        core_10_0_0_45 = VppIpRoute(
+            self,
+            "10.0.0.45",
+            32,
+            [VppRoutePath(self.pg0.remote_ip4, self.pg0.sw_if_index, labels=[45])],
+        )
         core_10_0_0_45.add_vpp_config()
 
         core_10_0_0_45.add_vpp_config()
 
-        core_10_0_0_46 = VppIpRoute(self, "10.0.0.46", 32,
-                                    [VppRoutePath(self.pg1.remote_ip4,
-                                                  self.pg1.sw_if_index,
-                                                  labels=[46])])
+        core_10_0_0_46 = VppIpRoute(
+            self,
+            "10.0.0.46",
+            32,
+            [VppRoutePath(self.pg1.remote_ip4, self.pg1.sw_if_index, labels=[46])],
+        )
         core_10_0_0_46.add_vpp_config()
 
         #
         core_10_0_0_46.add_vpp_config()
 
         #
@@ -1860,26 +2138,36 @@ class TestMPLSPIC(VppTestCase):
         pkts = []
         for ii in range(NUM_PKTS):
             dst = "192.168.1.%d" % ii
         pkts = []
         for ii in range(NUM_PKTS):
             dst = "192.168.1.%d" % ii
-            vpn_routes.append(VppIpRoute(
-                self, dst, 32,
-                [VppRoutePath(
-                    "10.0.0.45",
-                    0xffffffff,
-                    labels=[145],
-                    flags=FibPathFlags.FIB_PATH_FLAG_RESOLVE_VIA_HOST),
-                 VppRoutePath(
-                     "10.0.0.46",
-                     0xffffffff,
-                     labels=[146],
-                     flags=FibPathFlags.FIB_PATH_FLAG_RESOLVE_VIA_HOST)],
-                table_id=1))
+            vpn_routes.append(
+                VppIpRoute(
+                    self,
+                    dst,
+                    32,
+                    [
+                        VppRoutePath(
+                            "10.0.0.45",
+                            0xFFFFFFFF,
+                            labels=[145],
+                            flags=FibPathFlags.FIB_PATH_FLAG_RESOLVE_VIA_HOST,
+                        ),
+                        VppRoutePath(
+                            "10.0.0.46",
+                            0xFFFFFFFF,
+                            labels=[146],
+                            flags=FibPathFlags.FIB_PATH_FLAG_RESOLVE_VIA_HOST,
+                        ),
+                    ],
+                    table_id=1,
+                )
+            )
             vpn_routes[ii].add_vpp_config()
 
             vpn_routes[ii].add_vpp_config()
 
-            pkts.append(Ether(dst=self.pg2.local_mac,
-                              src=self.pg2.remote_mac) /
-                        IP(src=self.pg2.remote_ip4, dst=dst) /
-                        UDP(sport=1234, dport=1234) /
-                        Raw(b'\xa5' * 100))
+            pkts.append(
+                Ether(dst=self.pg2.local_mac, src=self.pg2.remote_mac)
+                / IP(src=self.pg2.remote_ip4, dst=dst)
+                / UDP(sport=1234, dport=1234)
+                / Raw(b"\xa5" * 100)
+            )
 
         #
         # Send the packet stream (one pkt to each VPN route)
 
         #
         # Send the packet stream (one pkt to each VPN route)
@@ -1896,9 +2184,12 @@ class TestMPLSPIC(VppTestCase):
         # with the split ratio, just as long as neither is 0
         self.assertNotEqual(0, len(rx0))
         self.assertNotEqual(0, len(rx1))
         # with the split ratio, just as long as neither is 0
         self.assertNotEqual(0, len(rx0))
         self.assertNotEqual(0, len(rx1))
-        self.assertEqual(len(pkts), len(rx0) + len(rx1),
-                         "Expected all (%s) packets across both ECMP paths. "
-                         "rx0: %s rx1: %s." % (len(pkts), len(rx0), len(rx1)))
+        self.assertEqual(
+            len(pkts),
+            len(rx0) + len(rx1),
+            "Expected all (%s) packets across both ECMP paths. "
+            "rx0: %s rx1: %s." % (len(pkts), len(rx0), len(rx1)),
+        )
 
         #
         # use a test CLI command to stop the FIB walk process, this
 
         #
         # use a test CLI command to stop the FIB walk process, this
@@ -1921,9 +2212,12 @@ class TestMPLSPIC(VppTestCase):
         self.pg_start()
 
         rx0 = self.pg0.get_capture(NUM_PKTS)
         self.pg_start()
 
         rx0 = self.pg0.get_capture(NUM_PKTS)
-        self.assertEqual(len(pkts), len(rx0),
-                         "Expected all (%s) packets across single path. "
-                         "rx0: %s." % (len(pkts), len(rx0)))
+        self.assertEqual(
+            len(pkts),
+            len(rx0),
+            "Expected all (%s) packets across single path. "
+            "rx0: %s." % (len(pkts), len(rx0)),
+        )
 
         #
         # enable the FIB walk process to converge the FIB
 
         #
         # enable the FIB walk process to converge the FIB
@@ -1938,9 +2232,12 @@ class TestMPLSPIC(VppTestCase):
         self.pg_start()
 
         rx0 = self.pg0.get_capture(NUM_PKTS)
         self.pg_start()
 
         rx0 = self.pg0.get_capture(NUM_PKTS)
-        self.assertEqual(len(pkts), len(rx0),
-                         "Expected all (%s) packets across single path. "
-                         "rx0: %s." % (len(pkts), len(rx0)))
+        self.assertEqual(
+            len(pkts),
+            len(rx0),
+            "Expected all (%s) packets across single path. "
+            "rx0: %s." % (len(pkts), len(rx0)),
+        )
 
         #
         # Add the IGP route back and we return to load-balancing
 
         #
         # Add the IGP route back and we return to load-balancing
@@ -1955,12 +2252,15 @@ class TestMPLSPIC(VppTestCase):
         rx1 = self.pg1._get_capture(NUM_PKTS)
         self.assertNotEqual(0, len(rx0))
         self.assertNotEqual(0, len(rx1))
         rx1 = self.pg1._get_capture(NUM_PKTS)
         self.assertNotEqual(0, len(rx0))
         self.assertNotEqual(0, len(rx1))
-        self.assertEqual(len(pkts), len(rx0) + len(rx1),
-                         "Expected all (%s) packets across both ECMP paths. "
-                         "rx0: %s rx1: %s." % (len(pkts), len(rx0), len(rx1)))
+        self.assertEqual(
+            len(pkts),
+            len(rx0) + len(rx1),
+            "Expected all (%s) packets across both ECMP paths. "
+            "rx0: %s rx1: %s." % (len(pkts), len(rx0), len(rx1)),
+        )
 
     def test_mpls_ebgp_pic(self):
 
     def test_mpls_ebgp_pic(self):
-        """ MPLS eBGP Prefix-Independent Convergence (PIC) edge convergence
+        """MPLS eBGP Prefix-Independent Convergence (PIC) edge convergence
 
         1) setup many eBGP VPN routes via a pair of eBGP peers.
         2) Check EMCP forwarding to these peers
 
         1) setup many eBGP VPN routes via a pair of eBGP peers.
         2) Check EMCP forwarding to these peers
@@ -1977,31 +2277,42 @@ class TestMPLSPIC(VppTestCase):
         for ii in range(NUM_PKTS):
             dst = "192.168.1.%d" % ii
             local_label = 1600 + ii
         for ii in range(NUM_PKTS):
             dst = "192.168.1.%d" % ii
             local_label = 1600 + ii
-            vpn_routes.append(VppIpRoute(
-                self, dst, 32,
-                [VppRoutePath(
-                    self.pg2.remote_ip4,
-                    0xffffffff,
-                    nh_table_id=1,
-                    flags=FibPathFlags.FIB_PATH_FLAG_RESOLVE_VIA_ATTACHED),
-                 VppRoutePath(
-                     self.pg3.remote_ip4,
-                     0xffffffff,
-                     nh_table_id=1,
-                     flags=FibPathFlags.FIB_PATH_FLAG_RESOLVE_VIA_ATTACHED)],
-                table_id=1))
+            vpn_routes.append(
+                VppIpRoute(
+                    self,
+                    dst,
+                    32,
+                    [
+                        VppRoutePath(
+                            self.pg2.remote_ip4,
+                            0xFFFFFFFF,
+                            nh_table_id=1,
+                            flags=FibPathFlags.FIB_PATH_FLAG_RESOLVE_VIA_ATTACHED,
+                        ),
+                        VppRoutePath(
+                            self.pg3.remote_ip4,
+                            0xFFFFFFFF,
+                            nh_table_id=1,
+                            flags=FibPathFlags.FIB_PATH_FLAG_RESOLVE_VIA_ATTACHED,
+                        ),
+                    ],
+                    table_id=1,
+                )
+            )
             vpn_routes[ii].add_vpp_config()
 
             vpn_routes[ii].add_vpp_config()
 
-            vpn_bindings.append(VppMplsIpBind(self, local_label, dst, 32,
-                                              ip_table_id=1))
+            vpn_bindings.append(
+                VppMplsIpBind(self, local_label, dst, 32, ip_table_id=1)
+            )
             vpn_bindings[ii].add_vpp_config()
 
             vpn_bindings[ii].add_vpp_config()
 
-            pkts.append(Ether(dst=self.pg0.local_mac,
-                              src=self.pg0.remote_mac) /
-                        MPLS(label=local_label, ttl=64) /
-                        IP(src=self.pg0.remote_ip4, dst=dst) /
-                        UDP(sport=1234, dport=1234) /
-                        Raw(b'\xa5' * 100))
+            pkts.append(
+                Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+                / MPLS(label=local_label, ttl=64)
+                / IP(src=self.pg0.remote_ip4, dst=dst)
+                / UDP(sport=1234, dport=1234)
+                / Raw(b"\xa5" * 100)
+            )
 
         #
         # Send the packet stream (one pkt to each VPN route)
 
         #
         # Send the packet stream (one pkt to each VPN route)
@@ -2018,9 +2329,12 @@ class TestMPLSPIC(VppTestCase):
         # with the split ratio, just as long as neither is 0
         self.assertNotEqual(0, len(rx0))
         self.assertNotEqual(0, len(rx1))
         # with the split ratio, just as long as neither is 0
         self.assertNotEqual(0, len(rx0))
         self.assertNotEqual(0, len(rx1))
-        self.assertEqual(len(pkts), len(rx0) + len(rx1),
-                         "Expected all (%s) packets across both ECMP paths. "
-                         "rx0: %s rx1: %s." % (len(pkts), len(rx0), len(rx1)))
+        self.assertEqual(
+            len(pkts),
+            len(rx0) + len(rx1),
+            "Expected all (%s) packets across both ECMP paths. "
+            "rx0: %s rx1: %s." % (len(pkts), len(rx0), len(rx1)),
+        )
 
         #
         # use a test CLI command to stop the FIB walk process, this
 
         #
         # use a test CLI command to stop the FIB walk process, this
@@ -2042,9 +2356,12 @@ class TestMPLSPIC(VppTestCase):
         self.pg_start()
 
         rx0 = self.pg3.get_capture(NUM_PKTS)
         self.pg_start()
 
         rx0 = self.pg3.get_capture(NUM_PKTS)
-        self.assertEqual(len(pkts), len(rx0),
-                         "Expected all (%s) packets across single path. "
-                         "rx0: %s." % (len(pkts), len(rx0)))
+        self.assertEqual(
+            len(pkts),
+            len(rx0),
+            "Expected all (%s) packets across single path. "
+            "rx0: %s." % (len(pkts), len(rx0)),
+        )
 
         #
         # enable the FIB walk process to converge the FIB
 
         #
         # enable the FIB walk process to converge the FIB
@@ -2059,9 +2376,12 @@ class TestMPLSPIC(VppTestCase):
         self.pg_start()
 
         rx0 = self.pg3.get_capture(NUM_PKTS)
         self.pg_start()
 
         rx0 = self.pg3.get_capture(NUM_PKTS)
-        self.assertEqual(len(pkts), len(rx0),
-                         "Expected all (%s) packets across single path. "
-                         "rx0: %s." % (len(pkts), len(rx0)))
+        self.assertEqual(
+            len(pkts),
+            len(rx0),
+            "Expected all (%s) packets across single path. "
+            "rx0: %s." % (len(pkts), len(rx0)),
+        )
 
         #
         # put the connected routes back
 
         #
         # put the connected routes back
@@ -2077,12 +2397,15 @@ class TestMPLSPIC(VppTestCase):
         rx1 = self.pg3._get_capture(NUM_PKTS)
         self.assertNotEqual(0, len(rx0))
         self.assertNotEqual(0, len(rx1))
         rx1 = self.pg3._get_capture(NUM_PKTS)
         self.assertNotEqual(0, len(rx0))
         self.assertNotEqual(0, len(rx1))
-        self.assertEqual(len(pkts), len(rx0) + len(rx1),
-                         "Expected all (%s) packets across both ECMP paths. "
-                         "rx0: %s rx1: %s." % (len(pkts), len(rx0), len(rx1)))
+        self.assertEqual(
+            len(pkts),
+            len(rx0) + len(rx1),
+            "Expected all (%s) packets across both ECMP paths. "
+            "rx0: %s rx1: %s." % (len(pkts), len(rx0), len(rx1)),
+        )
 
     def test_mpls_v6_ebgp_pic(self):
 
     def test_mpls_v6_ebgp_pic(self):
-        """ MPLSv6 eBGP Prefix-Independent Convergence (PIC) edge convergence
+        """MPLSv6 eBGP Prefix-Independent Convergence (PIC) edge convergence
 
         1) setup many eBGP VPNv6 routes via a pair of eBGP peers
         2) Check EMCP forwarding to these peers
 
         1) setup many eBGP VPNv6 routes via a pair of eBGP peers
         2) Check EMCP forwarding to these peers
@@ -2099,31 +2422,42 @@ class TestMPLSPIC(VppTestCase):
         for ii in range(NUM_PKTS):
             dst = "3000::%d" % ii
             local_label = 1600 + ii
         for ii in range(NUM_PKTS):
             dst = "3000::%d" % ii
             local_label = 1600 + ii
-            vpn_routes.append(VppIpRoute(
-                self, dst, 128,
-                [VppRoutePath(
-                    self.pg2.remote_ip6,
-                    0xffffffff,
-                    nh_table_id=1,
-                    flags=FibPathFlags.FIB_PATH_FLAG_RESOLVE_VIA_ATTACHED),
-                 VppRoutePath(
-                     self.pg3.remote_ip6,
-                     0xffffffff,
-                     nh_table_id=1,
-                     flags=FibPathFlags.FIB_PATH_FLAG_RESOLVE_VIA_ATTACHED)],
-                table_id=1))
+            vpn_routes.append(
+                VppIpRoute(
+                    self,
+                    dst,
+                    128,
+                    [
+                        VppRoutePath(
+                            self.pg2.remote_ip6,
+                            0xFFFFFFFF,
+                            nh_table_id=1,
+                            flags=FibPathFlags.FIB_PATH_FLAG_RESOLVE_VIA_ATTACHED,
+                        ),
+                        VppRoutePath(
+                            self.pg3.remote_ip6,
+                            0xFFFFFFFF,
+                            nh_table_id=1,
+                            flags=FibPathFlags.FIB_PATH_FLAG_RESOLVE_VIA_ATTACHED,
+                        ),
+                    ],
+                    table_id=1,
+                )
+            )
             vpn_routes[ii].add_vpp_config()
 
             vpn_routes[ii].add_vpp_config()
 
-            vpn_bindings.append(VppMplsIpBind(self, local_label, dst, 128,
-                                              ip_table_id=1))
+            vpn_bindings.append(
+                VppMplsIpBind(self, local_label, dst, 128, ip_table_id=1)
+            )
             vpn_bindings[ii].add_vpp_config()
 
             vpn_bindings[ii].add_vpp_config()
 
-            pkts.append(Ether(dst=self.pg0.local_mac,
-                              src=self.pg0.remote_mac) /
-                        MPLS(label=local_label, ttl=64) /
-                        IPv6(src=self.pg0.remote_ip6, dst=dst) /
-                        UDP(sport=1234, dport=1234) /
-                        Raw(b'\xa5' * 100))
+            pkts.append(
+                Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+                / MPLS(label=local_label, ttl=64)
+                / IPv6(src=self.pg0.remote_ip6, dst=dst)
+                / UDP(sport=1234, dport=1234)
+                / Raw(b"\xa5" * 100)
+            )
             self.logger.info(self.vapi.cli("sh ip6 fib %s" % dst))
 
         self.pg0.add_stream(pkts)
             self.logger.info(self.vapi.cli("sh ip6 fib %s" % dst))
 
         self.pg0.add_stream(pkts)
@@ -2134,9 +2468,12 @@ class TestMPLSPIC(VppTestCase):
         rx1 = self.pg3._get_capture(NUM_PKTS)
         self.assertNotEqual(0, len(rx0))
         self.assertNotEqual(0, len(rx1))
         rx1 = self.pg3._get_capture(NUM_PKTS)
         self.assertNotEqual(0, len(rx0))
         self.assertNotEqual(0, len(rx1))
-        self.assertEqual(len(pkts), len(rx0) + len(rx1),
-                         "Expected all (%s) packets across both ECMP paths. "
-                         "rx0: %s rx1: %s." % (len(pkts), len(rx0), len(rx1)))
+        self.assertEqual(
+            len(pkts),
+            len(rx0) + len(rx1),
+            "Expected all (%s) packets across both ECMP paths. "
+            "rx0: %s rx1: %s." % (len(pkts), len(rx0), len(rx1)),
+        )
 
         #
         # use a test CLI command to stop the FIB walk process, this
 
         #
         # use a test CLI command to stop the FIB walk process, this
@@ -2160,9 +2497,12 @@ class TestMPLSPIC(VppTestCase):
         self.pg_start()
 
         rx0 = self.pg3.get_capture(NUM_PKTS)
         self.pg_start()
 
         rx0 = self.pg3.get_capture(NUM_PKTS)
-        self.assertEqual(len(pkts), len(rx0),
-                         "Expected all (%s) packets across single path. "
-                         "rx0: %s." % (len(pkts), len(rx0)))
+        self.assertEqual(
+            len(pkts),
+            len(rx0),
+            "Expected all (%s) packets across single path. "
+            "rx0: %s." % (len(pkts), len(rx0)),
+        )
 
         #
         # enable the FIB walk process to converge the FIB
 
         #
         # enable the FIB walk process to converge the FIB
@@ -2173,9 +2513,12 @@ class TestMPLSPIC(VppTestCase):
         self.pg_start()
 
         rx0 = self.pg3.get_capture(NUM_PKTS)
         self.pg_start()
 
         rx0 = self.pg3.get_capture(NUM_PKTS)
-        self.assertEqual(len(pkts), len(rx0),
-                         "Expected all (%s) packets across single path. "
-                         "rx0: %s." % (len(pkts), len(rx0)))
+        self.assertEqual(
+            len(pkts),
+            len(rx0),
+            "Expected all (%s) packets across single path. "
+            "rx0: %s." % (len(pkts), len(rx0)),
+        )
 
         #
         # put the connected routes back
 
         #
         # put the connected routes back
@@ -2193,13 +2536,16 @@ class TestMPLSPIC(VppTestCase):
         rx1 = self.pg3._get_capture(NUM_PKTS)
         self.assertNotEqual(0, len(rx0))
         self.assertNotEqual(0, len(rx1))
         rx1 = self.pg3._get_capture(NUM_PKTS)
         self.assertNotEqual(0, len(rx0))
         self.assertNotEqual(0, len(rx1))
-        self.assertEqual(len(pkts), len(rx0) + len(rx1),
-                         "Expected all (%s) packets across both ECMP paths. "
-                         "rx0: %s rx1: %s." % (len(pkts), len(rx0), len(rx1)))
+        self.assertEqual(
+            len(pkts),
+            len(rx0) + len(rx1),
+            "Expected all (%s) packets across both ECMP paths. "
+            "rx0: %s rx1: %s." % (len(pkts), len(rx0), len(rx1)),
+        )
 
 
 class TestMPLSL2(VppTestCase):
 
 
 class TestMPLSL2(VppTestCase):
-    """ MPLS-L2 """
+    """MPLS-L2"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -2274,7 +2620,7 @@ class TestMPLSL2(VppTestCase):
         self.assertEqual(arp.pdst, dip)
 
     def test_vpws(self):
         self.assertEqual(arp.pdst, dip)
 
     def test_vpws(self):
-        """ Virtual Private Wire Service """
+        """Virtual Private Wire Service"""
 
         #
         # Create an MPLS tunnel that pushes 1 label
 
         #
         # Create an MPLS tunnel that pushes 1 label
@@ -2283,10 +2629,15 @@ class TestMPLSL2(VppTestCase):
         #
         mpls_tun_1 = VppMPLSTunnelInterface(
             self,
         #
         mpls_tun_1 = VppMPLSTunnelInterface(
             self,
-            [VppRoutePath(self.pg0.remote_ip4,
-                          self.pg0.sw_if_index,
-                          labels=[VppMplsLabel(42, MplsLspMode.UNIFORM)])],
-            is_l2=1)
+            [
+                VppRoutePath(
+                    self.pg0.remote_ip4,
+                    self.pg0.sw_if_index,
+                    labels=[VppMplsLabel(42, MplsLspMode.UNIFORM)],
+                )
+            ],
+            is_l2=1,
+        )
         mpls_tun_1.add_vpp_config()
         mpls_tun_1.admin_up()
 
         mpls_tun_1.add_vpp_config()
         mpls_tun_1.admin_up()
 
@@ -2294,35 +2645,42 @@ class TestMPLSL2(VppTestCase):
         # Create a label entry to for 55 that does L2 input to the tunnel
         #
         route_55_eos = VppMplsRoute(
         # Create a label entry to for 55 that does L2 input to the tunnel
         #
         route_55_eos = VppMplsRoute(
-            self, 55, 1,
-            [VppRoutePath("0.0.0.0",
-                          mpls_tun_1.sw_if_index,
-                          type=FibPathType.FIB_PATH_TYPE_INTERFACE_RX,
-                          proto=FibPathProto.FIB_PATH_NH_PROTO_ETHERNET)],
-            eos_proto=FibPathProto.FIB_PATH_NH_PROTO_ETHERNET)
+            self,
+            55,
+            1,
+            [
+                VppRoutePath(
+                    "0.0.0.0",
+                    mpls_tun_1.sw_if_index,
+                    type=FibPathType.FIB_PATH_TYPE_INTERFACE_RX,
+                    proto=FibPathProto.FIB_PATH_NH_PROTO_ETHERNET,
+                )
+            ],
+            eos_proto=FibPathProto.FIB_PATH_NH_PROTO_ETHERNET,
+        )
         route_55_eos.add_vpp_config()
 
         #
         # Cross-connect the tunnel with one of the customers L2 interfaces
         #
         route_55_eos.add_vpp_config()
 
         #
         # Cross-connect the tunnel with one of the customers L2 interfaces
         #
-        self.vapi.sw_interface_set_l2_xconnect(self.pg1.sw_if_index,
-                                               mpls_tun_1.sw_if_index,
-                                               enable=1)
-        self.vapi.sw_interface_set_l2_xconnect(mpls_tun_1.sw_if_index,
-                                               self.pg1.sw_if_index,
-                                               enable=1)
+        self.vapi.sw_interface_set_l2_xconnect(
+            self.pg1.sw_if_index, mpls_tun_1.sw_if_index, enable=1
+        )
+        self.vapi.sw_interface_set_l2_xconnect(
+            mpls_tun_1.sw_if_index, self.pg1.sw_if_index, enable=1
+        )
 
         #
         # inject a packet from the core
         #
 
         #
         # inject a packet from the core
         #
-        pcore = (Ether(dst=self.pg0.local_mac,
-                       src=self.pg0.remote_mac) /
-                 MPLS(label=55, ttl=64) /
-                 Ether(dst="00:00:de:ad:ba:be",
-                       src="00:00:de:ad:be:ef") /
-                 IP(src="10.10.10.10", dst="11.11.11.11") /
-                 UDP(sport=1234, dport=1234) /
-                 Raw(b'\xa5' * 100))
+        pcore = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / MPLS(label=55, ttl=64)
+            / Ether(dst="00:00:de:ad:ba:be", src="00:00:de:ad:be:ef")
+            / IP(src="10.10.10.10", dst="11.11.11.11")
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
 
         tx0 = pcore * NUM_PKTS
         rx0 = self.send_and_expect(self.pg0, tx0, self.pg1)
 
         tx0 = pcore * NUM_PKTS
         rx0 = self.send_and_expect(self.pg0, tx0, self.pg1)
@@ -2339,10 +2697,9 @@ class TestMPLSL2(VppTestCase):
         tx1 = pcore[MPLS].payload
         rx1 = self.send_and_expect(self.pg1, [tx1], self.pg0)
 
         tx1 = pcore[MPLS].payload
         rx1 = self.send_and_expect(self.pg1, [tx1], self.pg0)
 
-        self.verify_arp_req(rx1[0],
-                            self.pg0.local_mac,
-                            self.pg0.local_ip4,
-                            self.pg0.remote_ip4)
+        self.verify_arp_req(
+            rx1[0], self.pg0.local_mac, self.pg0.local_ip4, self.pg0.remote_ip4
+        )
 
         #
         # resolve the ARP entries and send again
 
         #
         # resolve the ARP entries and send again
@@ -2354,7 +2711,7 @@ class TestMPLSL2(VppTestCase):
         self.verify_capture_tunneled_ethernet(rx1, tx1, [VppMplsLabel(42)])
 
     def test_vpls(self):
         self.verify_capture_tunneled_ethernet(rx1, tx1, [VppMplsLabel(42)])
 
     def test_vpls(self):
-        """ Virtual Private LAN Service """
+        """Virtual Private LAN Service"""
 
         # we skipped this in the setup
         self.pg0.resolve_arp()
 
         # we skipped this in the setup
         self.pg0.resolve_arp()
@@ -2364,19 +2721,25 @@ class TestMPLSL2(VppTestCase):
         #
         mpls_tun1 = VppMPLSTunnelInterface(
             self,
         #
         mpls_tun1 = VppMPLSTunnelInterface(
             self,
-            [VppRoutePath(self.pg0.remote_ip4,
-                          self.pg0.sw_if_index,
-                          labels=[VppMplsLabel(42)])],
-            is_l2=1)
+            [
+                VppRoutePath(
+                    self.pg0.remote_ip4, self.pg0.sw_if_index, labels=[VppMplsLabel(42)]
+                )
+            ],
+            is_l2=1,
+        )
         mpls_tun1.add_vpp_config()
         mpls_tun1.admin_up()
 
         mpls_tun2 = VppMPLSTunnelInterface(
             self,
         mpls_tun1.add_vpp_config()
         mpls_tun1.admin_up()
 
         mpls_tun2 = VppMPLSTunnelInterface(
             self,
-            [VppRoutePath(self.pg0.remote_ip4,
-                          self.pg0.sw_if_index,
-                          labels=[VppMplsLabel(43)])],
-            is_l2=1)
+            [
+                VppRoutePath(
+                    self.pg0.remote_ip4, self.pg0.sw_if_index, labels=[VppMplsLabel(43)]
+                )
+            ],
+            is_l2=1,
+        )
         mpls_tun2.add_vpp_config()
         mpls_tun2.admin_up()
 
         mpls_tun2.add_vpp_config()
         mpls_tun2.admin_up()
 
@@ -2385,21 +2748,35 @@ class TestMPLSL2(VppTestCase):
         # the latter includes a Psuedo Wire Control Word
         #
         route_55_eos = VppMplsRoute(
         # the latter includes a Psuedo Wire Control Word
         #
         route_55_eos = VppMplsRoute(
-            self, 55, 1,
-            [VppRoutePath("0.0.0.0",
-                          mpls_tun1.sw_if_index,
-                          type=FibPathType.FIB_PATH_TYPE_INTERFACE_RX,
-                          proto=FibPathProto.FIB_PATH_NH_PROTO_ETHERNET)],
-            eos_proto=FibPathProto.FIB_PATH_NH_PROTO_ETHERNET)
+            self,
+            55,
+            1,
+            [
+                VppRoutePath(
+                    "0.0.0.0",
+                    mpls_tun1.sw_if_index,
+                    type=FibPathType.FIB_PATH_TYPE_INTERFACE_RX,
+                    proto=FibPathProto.FIB_PATH_NH_PROTO_ETHERNET,
+                )
+            ],
+            eos_proto=FibPathProto.FIB_PATH_NH_PROTO_ETHERNET,
+        )
 
         route_56_eos = VppMplsRoute(
 
         route_56_eos = VppMplsRoute(
-            self, 56, 1,
-            [VppRoutePath("0.0.0.0",
-                          mpls_tun2.sw_if_index,
-                          type=FibPathType.FIB_PATH_TYPE_INTERFACE_RX,
-                          flags=FibPathFlags.FIB_PATH_FLAG_POP_PW_CW,
-                          proto=FibPathProto.FIB_PATH_NH_PROTO_ETHERNET)],
-            eos_proto=FibPathProto.FIB_PATH_NH_PROTO_ETHERNET)
+            self,
+            56,
+            1,
+            [
+                VppRoutePath(
+                    "0.0.0.0",
+                    mpls_tun2.sw_if_index,
+                    type=FibPathType.FIB_PATH_TYPE_INTERFACE_RX,
+                    flags=FibPathFlags.FIB_PATH_FLAG_POP_PW_CW,
+                    proto=FibPathProto.FIB_PATH_NH_PROTO_ETHERNET,
+                )
+            ],
+            eos_proto=FibPathProto.FIB_PATH_NH_PROTO_ETHERNET,
+        )
 
         # move me
         route_56_eos.add_vpp_config()
 
         # move me
         route_56_eos.add_vpp_config()
@@ -2411,43 +2788,48 @@ class TestMPLSL2(VppTestCase):
         # add to tunnel to the customers bridge-domain
         #
         self.vapi.sw_interface_set_l2_bridge(
         # add to tunnel to the customers bridge-domain
         #
         self.vapi.sw_interface_set_l2_bridge(
-            rx_sw_if_index=mpls_tun1.sw_if_index, bd_id=1)
+            rx_sw_if_index=mpls_tun1.sw_if_index, bd_id=1
+        )
         self.vapi.sw_interface_set_l2_bridge(
         self.vapi.sw_interface_set_l2_bridge(
-            rx_sw_if_index=mpls_tun2.sw_if_index, bd_id=1)
+            rx_sw_if_index=mpls_tun2.sw_if_index, bd_id=1
+        )
         self.vapi.sw_interface_set_l2_bridge(
         self.vapi.sw_interface_set_l2_bridge(
-            rx_sw_if_index=self.pg1.sw_if_index, bd_id=1)
+            rx_sw_if_index=self.pg1.sw_if_index, bd_id=1
+        )
 
         #
         # Packet from host on the customer interface to each host
         # reachable over the core, and vice-versa
         #
 
         #
         # Packet from host on the customer interface to each host
         # reachable over the core, and vice-versa
         #
-        p_cust1 = (Ether(dst="00:00:de:ad:ba:b1",
-                         src="00:00:de:ad:be:ef") /
-                   IP(src="10.10.10.10", dst="11.11.11.11") /
-                   UDP(sport=1234, dport=1234) /
-                   Raw(b'\xa5' * 100))
-        p_cust2 = (Ether(dst="00:00:de:ad:ba:b2",
-                         src="00:00:de:ad:be:ef") /
-                   IP(src="10.10.10.10", dst="11.11.11.12") /
-                   UDP(sport=1234, dport=1234) /
-                   Raw(b'\xa5' * 100))
-        p_core1 = (Ether(dst=self.pg0.local_mac,
-                         src=self.pg0.remote_mac) /
-                   MPLS(label=55, ttl=64) /
-                   Ether(src="00:00:de:ad:ba:b1",
-                         dst="00:00:de:ad:be:ef") /
-                   IP(dst="10.10.10.10", src="11.11.11.11") /
-                   UDP(sport=1234, dport=1234) /
-                   Raw(b'\xa5' * 100))
-        p_core2 = (Ether(dst=self.pg0.local_mac,
-                         src=self.pg0.remote_mac) /
-                   MPLS(label=56, ttl=64) /
-                   Raw(b'\x01' * 4) /  # PW CW
-                   Ether(src="00:00:de:ad:ba:b2",
-                         dst="00:00:de:ad:be:ef") /
-                   IP(dst="10.10.10.10", src="11.11.11.12") /
-                   UDP(sport=1234, dport=1234) /
-                   Raw(b'\xa5' * 100))
+        p_cust1 = (
+            Ether(dst="00:00:de:ad:ba:b1", src="00:00:de:ad:be:ef")
+            / IP(src="10.10.10.10", dst="11.11.11.11")
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
+        p_cust2 = (
+            Ether(dst="00:00:de:ad:ba:b2", src="00:00:de:ad:be:ef")
+            / IP(src="10.10.10.10", dst="11.11.11.12")
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
+        p_core1 = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / MPLS(label=55, ttl=64)
+            / Ether(src="00:00:de:ad:ba:b1", dst="00:00:de:ad:be:ef")
+            / IP(dst="10.10.10.10", src="11.11.11.11")
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
+        p_core2 = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / MPLS(label=56, ttl=64)
+            / Raw(b"\x01" * 4)
+            / Ether(src="00:00:de:ad:ba:b2", dst="00:00:de:ad:be:ef")  # PW CW
+            / IP(dst="10.10.10.10", src="11.11.11.12")
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
 
         #
         # The BD is learning, so send in one of each packet to learn
 
         #
         # The BD is learning, so send in one of each packet to learn
@@ -2470,12 +2852,14 @@ class TestMPLSL2(VppTestCase):
         # now a stream in each direction from each host
         #
         rx = self.send_and_expect(self.pg1, p_cust1 * NUM_PKTS, self.pg0)
         # now a stream in each direction from each host
         #
         rx = self.send_and_expect(self.pg1, p_cust1 * NUM_PKTS, self.pg0)
-        self.verify_capture_tunneled_ethernet(rx, p_cust1 * NUM_PKTS,
-                                              [VppMplsLabel(42)])
+        self.verify_capture_tunneled_ethernet(
+            rx, p_cust1 * NUM_PKTS, [VppMplsLabel(42)]
+        )
 
         rx = self.send_and_expect(self.pg1, p_cust2 * NUM_PKTS, self.pg0)
 
         rx = self.send_and_expect(self.pg1, p_cust2 * NUM_PKTS, self.pg0)
-        self.verify_capture_tunneled_ethernet(rx, p_cust2 * NUM_PKTS,
-                                              [VppMplsLabel(43)])
+        self.verify_capture_tunneled_ethernet(
+            rx, p_cust2 * NUM_PKTS, [VppMplsLabel(43)]
+        )
 
         rx = self.send_and_expect(self.pg0, p_core1 * NUM_PKTS, self.pg1)
         rx = self.send_and_expect(self.pg0, p_core2 * NUM_PKTS, self.pg1)
 
         rx = self.send_and_expect(self.pg0, p_core1 * NUM_PKTS, self.pg1)
         rx = self.send_and_expect(self.pg0, p_core2 * NUM_PKTS, self.pg1)
@@ -2484,12 +2868,15 @@ class TestMPLSL2(VppTestCase):
         # remove interfaces from customers bridge-domain
         #
         self.vapi.sw_interface_set_l2_bridge(
         # remove interfaces from customers bridge-domain
         #
         self.vapi.sw_interface_set_l2_bridge(
-            rx_sw_if_index=mpls_tun1.sw_if_index, bd_id=1, enable=0)
+            rx_sw_if_index=mpls_tun1.sw_if_index, bd_id=1, enable=0
+        )
         self.vapi.sw_interface_set_l2_bridge(
         self.vapi.sw_interface_set_l2_bridge(
-            rx_sw_if_index=mpls_tun2.sw_if_index, bd_id=1, enable=0)
+            rx_sw_if_index=mpls_tun2.sw_if_index, bd_id=1, enable=0
+        )
         self.vapi.sw_interface_set_l2_bridge(
         self.vapi.sw_interface_set_l2_bridge(
-            rx_sw_if_index=self.pg1.sw_if_index, bd_id=1, enable=0)
+            rx_sw_if_index=self.pg1.sw_if_index, bd_id=1, enable=0
+        )
 
 
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index 23495b6..663ecd3 100644 (file)
@@ -11,7 +11,7 @@ from scapy.packet import Raw
 
 
 class TestMSSClamp(VppTestCase):
 
 
 class TestMSSClamp(VppTestCase):
-    """ TCP MSS Clamping Test Case """
+    """TCP MSS Clamping Test Case"""
 
     def setUp(self):
         super(TestMSSClamp, self).setUp()
 
     def setUp(self):
         super(TestMSSClamp, self).setUp()
@@ -40,31 +40,34 @@ class TestMSSClamp(VppTestCase):
         tcp_csum = tcp.chksum
         del tcp.chksum
         ip_csum = 0
         tcp_csum = tcp.chksum
         del tcp.chksum
         ip_csum = 0
-        if (rx.haslayer(IP)):
+        if rx.haslayer(IP):
             ip_csum = rx[IP].chksum
             del rx[IP].chksum
 
         opt = tcp.options
             ip_csum = rx[IP].chksum
             del rx[IP].chksum
 
         opt = tcp.options
-        self.assertEqual(opt[0][0], 'MSS')
+        self.assertEqual(opt[0][0], "MSS")
         self.assertEqual(opt[0][1], expected_mss)
         # recalculate checksums
         rx = rx.__class__(bytes(rx))
         tcp = rx[TCP]
         self.assertEqual(tcp_csum, tcp.chksum)
         self.assertEqual(opt[0][1], expected_mss)
         # recalculate checksums
         rx = rx.__class__(bytes(rx))
         tcp = rx[TCP]
         self.assertEqual(tcp_csum, tcp.chksum)
-        if (rx.haslayer(IP)):
+        if rx.haslayer(IP):
             self.assertEqual(ip_csum, rx[IP].chksum)
 
     def send_and_verify_ip4(self, src_pg, dst_pg, mss, expected_mss):
         # IPv4 TCP packet with the requested MSS option.
         # from a host on src_pg to a host on dst_pg.
             self.assertEqual(ip_csum, rx[IP].chksum)
 
     def send_and_verify_ip4(self, src_pg, dst_pg, mss, expected_mss):
         # IPv4 TCP packet with the requested MSS option.
         # from a host on src_pg to a host on dst_pg.
-        p = (Ether(dst=src_pg.local_mac,
-                   src=src_pg.remote_mac) /
-             IP(src=src_pg.remote_ip4,
-                dst=dst_pg.remote_ip4) /
-             TCP(sport=1234, dport=1234,
-                 flags="S",
-                 options=[('MSS', (mss)), ('EOL', None)]) /
-             Raw('\xa5' * 100))
+        p = (
+            Ether(dst=src_pg.local_mac, src=src_pg.remote_mac)
+            / IP(src=src_pg.remote_ip4, dst=dst_pg.remote_ip4)
+            / TCP(
+                sport=1234,
+                dport=1234,
+                flags="S",
+                options=[("MSS", (mss)), ("EOL", None)],
+            )
+            / Raw("\xa5" * 100)
+        )
 
         rxs = self.send_and_expect(src_pg, p * 65, dst_pg)
 
 
         rxs = self.send_and_expect(src_pg, p * 65, dst_pg)
 
@@ -76,14 +79,17 @@ class TestMSSClamp(VppTestCase):
         # IPv6 TCP packet with the requested MSS option.
         # from a host on src_pg to a host on dst_pg.
         #
         # IPv6 TCP packet with the requested MSS option.
         # from a host on src_pg to a host on dst_pg.
         #
-        p = (Ether(dst=src_pg.local_mac,
-                   src=src_pg.remote_mac) /
-             IPv6(src=src_pg.remote_ip6,
-                  dst=dst_pg.remote_ip6) /
-             TCP(sport=1234, dport=1234,
-                 flags="S",
-                 options=[('MSS', (mss)), ('EOL', None)]) /
-             Raw('\xa5' * 100))
+        p = (
+            Ether(dst=src_pg.local_mac, src=src_pg.remote_mac)
+            / IPv6(src=src_pg.remote_ip6, dst=dst_pg.remote_ip6)
+            / TCP(
+                sport=1234,
+                dport=1234,
+                flags="S",
+                options=[("MSS", (mss)), ("EOL", None)],
+            )
+            / Raw("\xa5" * 100)
+        )
 
         rxs = self.send_and_expect(src_pg, p * 65, dst_pg)
 
 
         rxs = self.send_and_expect(src_pg, p * 65, dst_pg)
 
@@ -91,12 +97,16 @@ class TestMSSClamp(VppTestCase):
             self.verify_pkt(rx, expected_mss)
 
     def test_tcp_mss_clamping_ip4_tx(self):
             self.verify_pkt(rx, expected_mss)
 
     def test_tcp_mss_clamping_ip4_tx(self):
-        """ IP4 TCP MSS Clamping TX """
+        """IP4 TCP MSS Clamping TX"""
 
         # enable the TCP MSS clamping feature to lower the MSS to 1424.
 
         # enable the TCP MSS clamping feature to lower the MSS to 1424.
-        self.vapi.mss_clamp_enable_disable(self.pg1.sw_if_index,
-                                           ipv4_mss=1424, ipv6_mss=0,
-                                           ipv4_direction=3, ipv6_direction=0)
+        self.vapi.mss_clamp_enable_disable(
+            self.pg1.sw_if_index,
+            ipv4_mss=1424,
+            ipv6_mss=0,
+            ipv4_direction=3,
+            ipv6_direction=0,
+        )
 
         # Verify that the feature is enabled.
         rv, reply = self.vapi.mss_clamp_get(sw_if_index=self.pg1.sw_if_index)
 
         # Verify that the feature is enabled.
         rv, reply = self.vapi.mss_clamp_get(sw_if_index=self.pg1.sw_if_index)
@@ -107,8 +117,7 @@ class TestMSSClamp(VppTestCase):
         self.send_and_verify_ip4(self.pg0, self.pg1, 1460, 1424)
 
         # check the stats
         self.send_and_verify_ip4(self.pg0, self.pg1, 1460, 1424)
 
         # check the stats
-        stats = self.statistics.get_counter(
-            '/err/tcp-mss-clamping-ip4-out/clamped')
+        stats = self.statistics.get_counter("/err/tcp-mss-clamping-ip4-out/clamped")
         self.assertEqual(sum(stats), 65)
 
         # Send syn packets with small enough MSS values and verify they are
         self.assertEqual(sum(stats), 65)
 
         # Send syn packets with small enough MSS values and verify they are
@@ -117,36 +126,52 @@ class TestMSSClamp(VppTestCase):
 
         # enable the the feature only in TX direction
         # and change the max MSS value
 
         # enable the the feature only in TX direction
         # and change the max MSS value
-        self.vapi.mss_clamp_enable_disable(self.pg1.sw_if_index,
-                                           ipv4_mss=1420, ipv6_mss=0,
-                                           ipv4_direction=2, ipv6_direction=0)
+        self.vapi.mss_clamp_enable_disable(
+            self.pg1.sw_if_index,
+            ipv4_mss=1420,
+            ipv6_mss=0,
+            ipv4_direction=2,
+            ipv6_direction=0,
+        )
 
         # Send syn packets and verify that the MSS value is lowered.
         self.send_and_verify_ip4(self.pg0, self.pg1, 1460, 1420)
 
         # enable the the feature only in RX direction
 
         # Send syn packets and verify that the MSS value is lowered.
         self.send_and_verify_ip4(self.pg0, self.pg1, 1460, 1420)
 
         # enable the the feature only in RX direction
-        self.vapi.mss_clamp_enable_disable(self.pg1.sw_if_index,
-                                           ipv4_mss=1424, ipv6_mss=0,
-                                           ipv4_direction=1, ipv6_direction=0)
+        self.vapi.mss_clamp_enable_disable(
+            self.pg1.sw_if_index,
+            ipv4_mss=1424,
+            ipv6_mss=0,
+            ipv4_direction=1,
+            ipv6_direction=0,
+        )
 
         # Send the packets again and ensure they are unchanged.
         self.send_and_verify_ip4(self.pg0, self.pg1, 1460, 1460)
 
         # disable the feature
 
         # Send the packets again and ensure they are unchanged.
         self.send_and_verify_ip4(self.pg0, self.pg1, 1460, 1460)
 
         # disable the feature
-        self.vapi.mss_clamp_enable_disable(self.pg1.sw_if_index,
-                                           ipv4_mss=0, ipv6_mss=0,
-                                           ipv4_direction=0, ipv6_direction=0)
+        self.vapi.mss_clamp_enable_disable(
+            self.pg1.sw_if_index,
+            ipv4_mss=0,
+            ipv6_mss=0,
+            ipv4_direction=0,
+            ipv6_direction=0,
+        )
 
         # Send the packets again and ensure they are unchanged.
         self.send_and_verify_ip4(self.pg0, self.pg1, 1460, 1460)
 
     def test_tcp_mss_clamping_ip4_rx(self):
 
         # Send the packets again and ensure they are unchanged.
         self.send_and_verify_ip4(self.pg0, self.pg1, 1460, 1460)
 
     def test_tcp_mss_clamping_ip4_rx(self):
-        """ IP4 TCP MSS Clamping RX """
+        """IP4 TCP MSS Clamping RX"""
 
         # enable the TCP MSS clamping feature to lower the MSS to 1424.
 
         # enable the TCP MSS clamping feature to lower the MSS to 1424.
-        self.vapi.mss_clamp_enable_disable(self.pg1.sw_if_index,
-                                           ipv4_mss=1424, ipv6_mss=0,
-                                           ipv4_direction=3, ipv6_direction=0)
+        self.vapi.mss_clamp_enable_disable(
+            self.pg1.sw_if_index,
+            ipv4_mss=1424,
+            ipv6_mss=0,
+            ipv4_direction=3,
+            ipv6_direction=0,
+        )
 
         # Verify that the feature is enabled.
         rv, reply = self.vapi.mss_clamp_get(sw_if_index=self.pg1.sw_if_index)
 
         # Verify that the feature is enabled.
         rv, reply = self.vapi.mss_clamp_get(sw_if_index=self.pg1.sw_if_index)
@@ -157,8 +182,7 @@ class TestMSSClamp(VppTestCase):
         self.send_and_verify_ip4(self.pg1, self.pg0, 1460, 1424)
 
         # check the stats
         self.send_and_verify_ip4(self.pg1, self.pg0, 1460, 1424)
 
         # check the stats
-        stats = self.statistics.get_counter(
-            '/err/tcp-mss-clamping-ip4-in/clamped')
+        stats = self.statistics.get_counter("/err/tcp-mss-clamping-ip4-in/clamped")
         self.assertEqual(sum(stats), 65)
 
         # Send syn packets with small enough MSS values and verify they are
         self.assertEqual(sum(stats), 65)
 
         # Send syn packets with small enough MSS values and verify they are
@@ -167,36 +191,52 @@ class TestMSSClamp(VppTestCase):
 
         # enable the the feature only in RX direction
         # and change the max MSS value
 
         # enable the the feature only in RX direction
         # and change the max MSS value
-        self.vapi.mss_clamp_enable_disable(self.pg1.sw_if_index,
-                                           ipv4_mss=1420, ipv6_mss=0,
-                                           ipv4_direction=1, ipv6_direction=0)
+        self.vapi.mss_clamp_enable_disable(
+            self.pg1.sw_if_index,
+            ipv4_mss=1420,
+            ipv6_mss=0,
+            ipv4_direction=1,
+            ipv6_direction=0,
+        )
 
         # Send syn packets and verify that the MSS value is lowered.
         self.send_and_verify_ip4(self.pg1, self.pg0, 1460, 1420)
 
         # enable the the feature only in TX direction
 
         # Send syn packets and verify that the MSS value is lowered.
         self.send_and_verify_ip4(self.pg1, self.pg0, 1460, 1420)
 
         # enable the the feature only in TX direction
-        self.vapi.mss_clamp_enable_disable(self.pg1.sw_if_index,
-                                           ipv4_mss=1424, ipv6_mss=0,
-                                           ipv4_direction=2, ipv6_direction=0)
+        self.vapi.mss_clamp_enable_disable(
+            self.pg1.sw_if_index,
+            ipv4_mss=1424,
+            ipv6_mss=0,
+            ipv4_direction=2,
+            ipv6_direction=0,
+        )
 
         # Send the packets again and ensure they are unchanged.
         self.send_and_verify_ip4(self.pg1, self.pg0, 1460, 1460)
 
         # disable the feature
 
         # Send the packets again and ensure they are unchanged.
         self.send_and_verify_ip4(self.pg1, self.pg0, 1460, 1460)
 
         # disable the feature
-        self.vapi.mss_clamp_enable_disable(self.pg1.sw_if_index,
-                                           ipv4_mss=0, ipv6_mss=0,
-                                           ipv4_direction=0, ipv6_direction=0)
+        self.vapi.mss_clamp_enable_disable(
+            self.pg1.sw_if_index,
+            ipv4_mss=0,
+            ipv6_mss=0,
+            ipv4_direction=0,
+            ipv6_direction=0,
+        )
 
         # Send the packets again and ensure they are unchanged.
         self.send_and_verify_ip4(self.pg1, self.pg0, 1460, 1460)
 
     def test_tcp_mss_clamping_ip6_tx(self):
 
         # Send the packets again and ensure they are unchanged.
         self.send_and_verify_ip4(self.pg1, self.pg0, 1460, 1460)
 
     def test_tcp_mss_clamping_ip6_tx(self):
-        """ IP6 TCP MSS Clamping TX """
+        """IP6 TCP MSS Clamping TX"""
 
         # enable the TCP MSS clamping feature to lower the MSS to 1424.
 
         # enable the TCP MSS clamping feature to lower the MSS to 1424.
-        self.vapi.mss_clamp_enable_disable(self.pg1.sw_if_index,
-                                           ipv4_mss=0, ipv6_mss=1424,
-                                           ipv4_direction=0, ipv6_direction=3)
+        self.vapi.mss_clamp_enable_disable(
+            self.pg1.sw_if_index,
+            ipv4_mss=0,
+            ipv6_mss=1424,
+            ipv4_direction=0,
+            ipv6_direction=3,
+        )
 
         # Verify that the feature is enabled.
         rv, reply = self.vapi.mss_clamp_get(sw_if_index=self.pg1.sw_if_index)
 
         # Verify that the feature is enabled.
         rv, reply = self.vapi.mss_clamp_get(sw_if_index=self.pg1.sw_if_index)
@@ -207,8 +247,7 @@ class TestMSSClamp(VppTestCase):
         self.send_and_verify_ip6(self.pg0, self.pg1, 1460, 1424)
 
         # check the stats
         self.send_and_verify_ip6(self.pg0, self.pg1, 1460, 1424)
 
         # check the stats
-        stats = self.statistics.get_counter(
-            '/err/tcp-mss-clamping-ip6-out/clamped')
+        stats = self.statistics.get_counter("/err/tcp-mss-clamping-ip6-out/clamped")
         self.assertEqual(sum(stats), 65)
 
         # Send syn packets with small enough MSS values and verify they are
         self.assertEqual(sum(stats), 65)
 
         # Send syn packets with small enough MSS values and verify they are
@@ -217,36 +256,52 @@ class TestMSSClamp(VppTestCase):
 
         # enable the the feature only in TX direction
         # and change the max MSS value
 
         # enable the the feature only in TX direction
         # and change the max MSS value
-        self.vapi.mss_clamp_enable_disable(self.pg1.sw_if_index,
-                                           ipv4_mss=0, ipv6_mss=1420,
-                                           ipv4_direction=0, ipv6_direction=2)
+        self.vapi.mss_clamp_enable_disable(
+            self.pg1.sw_if_index,
+            ipv4_mss=0,
+            ipv6_mss=1420,
+            ipv4_direction=0,
+            ipv6_direction=2,
+        )
 
         # Send syn packets and verify that the MSS value is lowered.
         self.send_and_verify_ip6(self.pg0, self.pg1, 1460, 1420)
 
         # enable the the feature only in RX direction
 
         # Send syn packets and verify that the MSS value is lowered.
         self.send_and_verify_ip6(self.pg0, self.pg1, 1460, 1420)
 
         # enable the the feature only in RX direction
-        self.vapi.mss_clamp_enable_disable(self.pg1.sw_if_index,
-                                           ipv4_mss=0, ipv6_mss=1424,
-                                           ipv4_direction=0, ipv6_direction=1)
+        self.vapi.mss_clamp_enable_disable(
+            self.pg1.sw_if_index,
+            ipv4_mss=0,
+            ipv6_mss=1424,
+            ipv4_direction=0,
+            ipv6_direction=1,
+        )
 
         # Send the packets again and ensure they are unchanged.
         self.send_and_verify_ip6(self.pg0, self.pg1, 1460, 1460)
 
         # disable the feature
 
         # Send the packets again and ensure they are unchanged.
         self.send_and_verify_ip6(self.pg0, self.pg1, 1460, 1460)
 
         # disable the feature
-        self.vapi.mss_clamp_enable_disable(self.pg1.sw_if_index,
-                                           ipv4_mss=0, ipv6_mss=0,
-                                           ipv4_direction=0, ipv6_direction=0)
+        self.vapi.mss_clamp_enable_disable(
+            self.pg1.sw_if_index,
+            ipv4_mss=0,
+            ipv6_mss=0,
+            ipv4_direction=0,
+            ipv6_direction=0,
+        )
 
         # Send the packets again and ensure they are unchanged.
         self.send_and_verify_ip6(self.pg0, self.pg1, 1460, 1460)
 
     def test_tcp_mss_clamping_ip6_rx(self):
 
         # Send the packets again and ensure they are unchanged.
         self.send_and_verify_ip6(self.pg0, self.pg1, 1460, 1460)
 
     def test_tcp_mss_clamping_ip6_rx(self):
-        """ IP6 TCP MSS Clamping RX """
+        """IP6 TCP MSS Clamping RX"""
 
         # enable the TCP MSS clamping feature to lower the MSS to 1424.
 
         # enable the TCP MSS clamping feature to lower the MSS to 1424.
-        self.vapi.mss_clamp_enable_disable(self.pg1.sw_if_index,
-                                           ipv4_mss=0, ipv6_mss=1424,
-                                           ipv4_direction=0, ipv6_direction=3)
+        self.vapi.mss_clamp_enable_disable(
+            self.pg1.sw_if_index,
+            ipv4_mss=0,
+            ipv6_mss=1424,
+            ipv4_direction=0,
+            ipv6_direction=3,
+        )
 
         # Verify that the feature is enabled.
         rv, reply = self.vapi.mss_clamp_get(sw_if_index=self.pg1.sw_if_index)
 
         # Verify that the feature is enabled.
         rv, reply = self.vapi.mss_clamp_get(sw_if_index=self.pg1.sw_if_index)
@@ -257,8 +312,7 @@ class TestMSSClamp(VppTestCase):
         self.send_and_verify_ip6(self.pg1, self.pg0, 1460, 1424)
 
         # check the stats
         self.send_and_verify_ip6(self.pg1, self.pg0, 1460, 1424)
 
         # check the stats
-        stats = self.statistics.get_counter(
-            '/err/tcp-mss-clamping-ip6-in/clamped')
+        stats = self.statistics.get_counter("/err/tcp-mss-clamping-ip6-in/clamped")
         self.assertEqual(sum(stats), 65)
 
         # Send syn packets with small enough MSS values and verify they are
         self.assertEqual(sum(stats), 65)
 
         # Send syn packets with small enough MSS values and verify they are
@@ -267,29 +321,41 @@ class TestMSSClamp(VppTestCase):
 
         # enable the the feature only in RX direction
         # and change the max MSS value
 
         # enable the the feature only in RX direction
         # and change the max MSS value
-        self.vapi.mss_clamp_enable_disable(self.pg1.sw_if_index,
-                                           ipv4_mss=0, ipv6_mss=1420,
-                                           ipv4_direction=0, ipv6_direction=1)
+        self.vapi.mss_clamp_enable_disable(
+            self.pg1.sw_if_index,
+            ipv4_mss=0,
+            ipv6_mss=1420,
+            ipv4_direction=0,
+            ipv6_direction=1,
+        )
 
         # Send syn packets and verify that the MSS value is lowered.
         self.send_and_verify_ip6(self.pg1, self.pg0, 1460, 1420)
 
         # enable the the feature only in TX direction
 
         # Send syn packets and verify that the MSS value is lowered.
         self.send_and_verify_ip6(self.pg1, self.pg0, 1460, 1420)
 
         # enable the the feature only in TX direction
-        self.vapi.mss_clamp_enable_disable(self.pg1.sw_if_index,
-                                           ipv4_mss=0, ipv6_mss=1424,
-                                           ipv4_direction=0, ipv6_direction=2)
+        self.vapi.mss_clamp_enable_disable(
+            self.pg1.sw_if_index,
+            ipv4_mss=0,
+            ipv6_mss=1424,
+            ipv4_direction=0,
+            ipv6_direction=2,
+        )
 
         # Send the packets again and ensure they are unchanged.
         self.send_and_verify_ip6(self.pg1, self.pg0, 1460, 1460)
 
         # disable the feature
 
         # Send the packets again and ensure they are unchanged.
         self.send_and_verify_ip6(self.pg1, self.pg0, 1460, 1460)
 
         # disable the feature
-        self.vapi.mss_clamp_enable_disable(self.pg1.sw_if_index,
-                                           ipv4_mss=0, ipv6_mss=0,
-                                           ipv4_direction=0, ipv6_direction=0)
+        self.vapi.mss_clamp_enable_disable(
+            self.pg1.sw_if_index,
+            ipv4_mss=0,
+            ipv6_mss=0,
+            ipv4_direction=0,
+            ipv6_direction=0,
+        )
 
         # Send the packets again and ensure they are unchanged.
         self.send_and_verify_ip6(self.pg1, self.pg0, 1460, 1460)
 
 
 
         # Send the packets again and ensure they are unchanged.
         self.send_and_verify_ip6(self.pg1, self.pg0, 1460, 1460)
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index 27594e5..922d83d 100644 (file)
@@ -24,7 +24,8 @@ from util import reassemble4
 
 
 class TestMTU(VppTestCase):
 
 
 class TestMTU(VppTestCase):
-    """ MTU Test Case """
+    """MTU Test Case"""
+
     maxDiff = None
 
     @classmethod
     maxDiff = None
 
     @classmethod
@@ -62,7 +63,7 @@ class TestMTU(VppTestCase):
         self.assertEqual(rx, expected)
 
     def payload(self, len):
         self.assertEqual(rx, expected)
 
     def payload(self, len):
-        return 'x' * len
+        return "x" * len
 
     def get_mtu(self, sw_if_index):
         rv = self.vapi.sw_interface_dump(sw_if_index=sw_if_index)
 
     def get_mtu(self, sw_if_index):
         rv = self.vapi.sw_interface_dump(sw_if_index=sw_if_index)
@@ -72,21 +73,19 @@ class TestMTU(VppTestCase):
         return 0
 
     def test_ip4_mtu(self):
         return 0
 
     def test_ip4_mtu(self):
-        """ IP4 MTU test """
+        """IP4 MTU test"""
 
         p_ether = Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
 
         p_ether = Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
-        p_ip4 = IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4,
-                   flags='DF')
+        p_ip4 = IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4, flags="DF")
 
         current_mtu = self.get_mtu(self.pg1.sw_if_index)
 
 
         current_mtu = self.get_mtu(self.pg1.sw_if_index)
 
-        p_payload = UDP(sport=1234, dport=1234) / self.payload(
-            current_mtu - 20 - 8)
+        p_payload = UDP(sport=1234, dport=1234) / self.payload(current_mtu - 20 - 8)
 
         p4 = p_ether / p_ip4 / p_payload
         p4_reply = p_ip4 / p_payload
         p4_reply.ttl -= 1
 
         p4 = p_ether / p_ip4 / p_payload
         p4_reply = p_ip4 / p_payload
         p4_reply.ttl -= 1
-        rx = self.send_and_expect(self.pg0, p4*11, self.pg1)
+        rx = self.send_and_expect(self.pg0, p4 * 11, self.pg1)
         for p in rx:
             self.validate(p[1], p4_reply)
 
         for p in rx:
             self.validate(p[1], p4_reply)
 
@@ -95,16 +94,22 @@ class TestMTU(VppTestCase):
         self.assertEqual(576, self.get_mtu(self.pg1.sw_if_index))
 
         # Should fail. Too large MTU
         self.assertEqual(576, self.get_mtu(self.pg1.sw_if_index))
 
         # Should fail. Too large MTU
-        p_icmp4 = ICMP(type='dest-unreach', code='fragmentation-needed',
-                       nexthopmtu=576, chksum=0x2dbb)
-        icmp4_reply = (IP(src=self.pg0.local_ip4,
-                          dst=self.pg0.remote_ip4,
-                          ttl=254, len=576, id=0) /
-                       p_icmp4 / p_ip4 / p_payload)
+        p_icmp4 = ICMP(
+            type="dest-unreach",
+            code="fragmentation-needed",
+            nexthopmtu=576,
+            chksum=0x2DBB,
+        )
+        icmp4_reply = (
+            IP(src=self.pg0.local_ip4, dst=self.pg0.remote_ip4, ttl=254, len=576, id=0)
+            / p_icmp4
+            / p_ip4
+            / p_payload
+        )
         n = icmp4_reply.__class__(icmp4_reply)
         s = bytes(icmp4_reply)
         icmp4_reply = s[0:576]
         n = icmp4_reply.__class__(icmp4_reply)
         s = bytes(icmp4_reply)
         icmp4_reply = s[0:576]
-        rx = self.send_and_expect_some(self.pg0, p4*11, self.pg0)
+        rx = self.send_and_expect_some(self.pg0, p4 * 11, self.pg0)
         for p in rx:
             # p.show2()
             # n.show2()
         for p in rx:
             # p.show2()
             # n.show2()
@@ -112,8 +117,7 @@ class TestMTU(VppTestCase):
 
         # Now with DF off. Expect fragments.
         # First go with 1500 byte packets.
 
         # Now with DF off. Expect fragments.
         # First go with 1500 byte packets.
-        p_payload = UDP(sport=1234, dport=1234) / self.payload(
-            1500 - 20 - 8)
+        p_payload = UDP(sport=1234, dport=1234) / self.payload(1500 - 20 - 8)
         p4 = p_ether / p_ip4 / p_payload
         p4.flags = 0
         p4_reply = p_ip4 / p_payload
         p4 = p_ether / p_ip4 / p_payload
         p4.flags = 0
         p4_reply = p_ip4 / p_payload
@@ -121,13 +125,13 @@ class TestMTU(VppTestCase):
         p4_reply.flags = 0
         p4_reply.id = 256
         self.pg_enable_capture()
         p4_reply.flags = 0
         p4_reply.id = 256
         self.pg_enable_capture()
-        self.pg0.add_stream(p4*1)
+        self.pg0.add_stream(p4 * 1)
         self.pg_start()
         rx = self.pg1.get_capture(3)
         reass_pkt = reassemble4(rx)
         self.validate(reass_pkt, p4_reply)
 
         self.pg_start()
         rx = self.pg1.get_capture(3)
         reass_pkt = reassemble4(rx)
         self.validate(reass_pkt, p4_reply)
 
-        '''
+        """
         # Now what happens with a 9K frame
         p_payload = UDP(sport=1234, dport=1234) / self.payload(
             current_mtu - 20 - 8)
         # Now what happens with a 9K frame
         p_payload = UDP(sport=1234, dport=1234) / self.payload(
             current_mtu - 20 - 8)
@@ -146,27 +150,25 @@ class TestMTU(VppTestCase):
         reass_pkt.show2()
         p4_reply.show2()
         self.validate(reass_pkt, p4_reply)
         reass_pkt.show2()
         p4_reply.show2()
         self.validate(reass_pkt, p4_reply)
-        '''
+        """
 
         # Reset MTU
 
         # Reset MTU
-        self.vapi.sw_interface_set_mtu(self.pg1.sw_if_index,
-                                       [current_mtu, 0, 0, 0])
+        self.vapi.sw_interface_set_mtu(self.pg1.sw_if_index, [current_mtu, 0, 0, 0])
 
     def test_ip6_mtu(self):
 
     def test_ip6_mtu(self):
-        """ IP6 MTU test """
+        """IP6 MTU test"""
 
         current_mtu = self.get_mtu(self.pg1.sw_if_index)
 
         p_ether = Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
         p_ip6 = IPv6(src=self.pg0.remote_ip6, dst=self.pg1.remote_ip6)
 
 
         current_mtu = self.get_mtu(self.pg1.sw_if_index)
 
         p_ether = Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
         p_ip6 = IPv6(src=self.pg0.remote_ip6, dst=self.pg1.remote_ip6)
 
-        p_payload = UDP(sport=1234, dport=1234) / self.payload(
-            current_mtu - 40 - 8)
+        p_payload = UDP(sport=1234, dport=1234) / self.payload(current_mtu - 40 - 8)
 
         p6 = p_ether / p_ip6 / p_payload
         p6_reply = p_ip6 / p_payload
         p6_reply.hlim -= 1
 
         p6 = p_ether / p_ip6 / p_payload
         p6_reply = p_ip6 / p_payload
         p6_reply.hlim -= 1
-        rx = self.send_and_expect(self.pg0, p6*9, self.pg1)
+        rx = self.send_and_expect(self.pg0, p6 * 9, self.pg1)
         for p in rx:
             self.validate(p[1], p6_reply)
 
         for p in rx:
             self.validate(p[1], p6_reply)
 
@@ -175,24 +177,25 @@ class TestMTU(VppTestCase):
         self.assertEqual(1280, self.get_mtu(self.pg1.sw_if_index))
 
         # Should fail. Too large MTU
         self.assertEqual(1280, self.get_mtu(self.pg1.sw_if_index))
 
         # Should fail. Too large MTU
-        p_icmp6 = ICMPv6PacketTooBig(mtu=1280, cksum=0x4c7a)
-        icmp6_reply = (IPv6(src=self.pg0.local_ip6,
-                            dst=self.pg0.remote_ip6,
-                            hlim=255, plen=1240) /
-                       p_icmp6 / p_ip6 / p_payload)
+        p_icmp6 = ICMPv6PacketTooBig(mtu=1280, cksum=0x4C7A)
+        icmp6_reply = (
+            IPv6(src=self.pg0.local_ip6, dst=self.pg0.remote_ip6, hlim=255, plen=1240)
+            / p_icmp6
+            / p_ip6
+            / p_payload
+        )
         icmp6_reply[2].hlim -= 1
         n = icmp6_reply.__class__(icmp6_reply)
         s = bytes(icmp6_reply)
         icmp6_reply_str = s[0:1280]
 
         icmp6_reply[2].hlim -= 1
         n = icmp6_reply.__class__(icmp6_reply)
         s = bytes(icmp6_reply)
         icmp6_reply_str = s[0:1280]
 
-        rx = self.send_and_expect_some(self.pg0, p6*9, self.pg0)
+        rx = self.send_and_expect_some(self.pg0, p6 * 9, self.pg0)
         for p in rx:
             self.validate_bytes(bytes(p[1]), icmp6_reply_str)
 
         # Reset MTU
         for p in rx:
             self.validate_bytes(bytes(p[1]), icmp6_reply_str)
 
         # Reset MTU
-        self.vapi.sw_interface_set_mtu(self.pg1.sw_if_index,
-                                       [current_mtu, 0, 0, 0])
+        self.vapi.sw_interface_set_mtu(self.pg1.sw_if_index, [current_mtu, 0, 0, 0])
 
 
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index 21eebb2..7745987 100644 (file)
@@ -21,9 +21,9 @@ from util import StatsDiff
 
 
 class TestNAT44ED(VppTestCase):
 
 
 class TestNAT44ED(VppTestCase):
-    """ NAT44ED Test Case """
+    """NAT44ED Test Case"""
 
 
-    nat_addr = '10.0.10.3'
+    nat_addr = "10.0.10.3"
 
     tcp_port_in = 6303
     tcp_port_out = 6303
 
     tcp_port_in = 6303
     tcp_port_out = 6303
@@ -48,8 +48,7 @@ class TestNAT44ED(VppTestCase):
             self.plugin_disable()
 
     def plugin_enable(self):
             self.plugin_disable()
 
     def plugin_enable(self):
-        self.vapi.nat44_ed_plugin_enable_disable(
-            sessions=self.max_sessions, enable=1)
+        self.vapi.nat44_ed_plugin_enable_disable(sessions=self.max_sessions, enable=1)
 
     def plugin_disable(self):
         self.vapi.nat44_ed_plugin_enable_disable(enable=0)
 
     def plugin_disable(self):
         self.vapi.nat44_ed_plugin_enable_disable(enable=0)
@@ -87,7 +86,7 @@ class TestNAT44ED(VppTestCase):
 
     @classmethod
     def create_and_add_ip4_table(cls, i, table_id=0):
 
     @classmethod
     def create_and_add_ip4_table(cls, i, table_id=0):
-        cls.vapi.ip_table_add_del(is_add=1, table={'table_id': table_id})
+        cls.vapi.ip_table_add_del(is_add=1, table={"table_id": table_id})
         i.set_table_ip4(table_id)
 
     @classmethod
         i.set_table_ip4(table_id)
 
     @classmethod
@@ -105,32 +104,41 @@ class TestNAT44ED(VppTestCase):
 
     @classmethod
     def nat_add_interface_address(cls, i):
 
     @classmethod
     def nat_add_interface_address(cls, i):
-        cls.vapi.nat44_add_del_interface_addr(
-            sw_if_index=i.sw_if_index, is_add=1)
+        cls.vapi.nat44_add_del_interface_addr(sw_if_index=i.sw_if_index, is_add=1)
 
     def nat_add_inside_interface(self, i):
         self.vapi.nat44_interface_add_del_feature(
 
     def nat_add_inside_interface(self, i):
         self.vapi.nat44_interface_add_del_feature(
-            flags=self.config_flags.NAT_IS_INSIDE,
-            sw_if_index=i.sw_if_index, is_add=1)
+            flags=self.config_flags.NAT_IS_INSIDE, sw_if_index=i.sw_if_index, is_add=1
+        )
 
     def nat_add_outside_interface(self, i):
         self.vapi.nat44_interface_add_del_feature(
 
     def nat_add_outside_interface(self, i):
         self.vapi.nat44_interface_add_del_feature(
-            flags=self.config_flags.NAT_IS_OUTSIDE,
-            sw_if_index=i.sw_if_index, is_add=1)
+            flags=self.config_flags.NAT_IS_OUTSIDE, sw_if_index=i.sw_if_index, is_add=1
+        )
 
 
-    def nat_add_address(self, address, twice_nat=0,
-                        vrf_id=0xFFFFFFFF, is_add=1):
+    def nat_add_address(self, address, twice_nat=0, vrf_id=0xFFFFFFFF, is_add=1):
         flags = self.config_flags.NAT_IS_TWICE_NAT if twice_nat else 0
         flags = self.config_flags.NAT_IS_TWICE_NAT if twice_nat else 0
-        self.vapi.nat44_add_del_address_range(first_ip_address=address,
-                                              last_ip_address=address,
-                                              vrf_id=vrf_id,
-                                              is_add=is_add,
-                                              flags=flags)
+        self.vapi.nat44_add_del_address_range(
+            first_ip_address=address,
+            last_ip_address=address,
+            vrf_id=vrf_id,
+            is_add=is_add,
+            flags=flags,
+        )
 
 
-    def nat_add_static_mapping(self, local_ip, external_ip='0.0.0.0',
-                               local_port=0, external_port=0, vrf_id=0,
-                               is_add=1, external_sw_if_index=0xFFFFFFFF,
-                               proto=0, tag="", flags=0):
+    def nat_add_static_mapping(
+        self,
+        local_ip,
+        external_ip="0.0.0.0",
+        local_port=0,
+        external_port=0,
+        vrf_id=0,
+        is_add=1,
+        external_sw_if_index=0xFFFFFFFF,
+        proto=0,
+        tag="",
+        flags=0,
+    ):
 
         if not (local_port and external_port):
             flags |= self.config_flags.NAT_IS_ADDR_ONLY
 
         if not (local_port and external_port):
             flags |= self.config_flags.NAT_IS_ADDR_ONLY
@@ -142,9 +150,11 @@ class TestNAT44ED(VppTestCase):
             external_sw_if_index=external_sw_if_index,
             local_port=local_port,
             external_port=external_port,
             external_sw_if_index=external_sw_if_index,
             local_port=local_port,
             external_port=external_port,
-            vrf_id=vrf_id, protocol=proto,
+            vrf_id=vrf_id,
+            protocol=proto,
             flags=flags,
             flags=flags,
-            tag=tag)
+            tag=tag,
+        )
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -159,14 +169,14 @@ class TestNAT44ED(VppTestCase):
             cls.configure_ip4_interface(i, hosts=3)
 
         # test specific (test-multiple-vrf)
             cls.configure_ip4_interface(i, hosts=3)
 
         # test specific (test-multiple-vrf)
-        cls.vapi.ip_table_add_del(is_add=1, table={'table_id': 1})
+        cls.vapi.ip_table_add_del(is_add=1, table={"table_id": 1})
 
         # test specific (test-one-armed-nat44-static)
         cls.pg4.generate_remote_hosts(2)
         cls.pg4.config_ip4()
         cls.vapi.sw_interface_add_del_address(
 
         # test specific (test-one-armed-nat44-static)
         cls.pg4.generate_remote_hosts(2)
         cls.pg4.config_ip4()
         cls.vapi.sw_interface_add_del_address(
-            sw_if_index=cls.pg4.sw_if_index,
-            prefix="10.0.0.1/24")
+            sw_if_index=cls.pg4.sw_if_index, prefix="10.0.0.1/24"
+        )
         cls.pg4.admin_up()
         cls.pg4.resolve_arp()
         cls.pg4._remote_hosts[1]._ip4 = cls.pg4._remote_hosts[0]._ip4
         cls.pg4.admin_up()
         cls.pg4.resolve_arp()
         cls.pg4._remote_hosts[1]._ip4 = cls.pg4._remote_hosts[0]._ip4
@@ -190,58 +200,95 @@ class TestNAT44ED(VppTestCase):
 
         rl = list()
 
 
         rl = list()
 
-        rl.append(VppIpRoute(cls, "0.0.0.0", 0,
-                             [VppRoutePath("0.0.0.0", 0xffffffff,
-                                           nh_table_id=0)],
-                             register=False, table_id=1))
-        rl.append(VppIpRoute(cls, "0.0.0.0", 0,
-                             [VppRoutePath(cls.pg1.local_ip4,
-                                           cls.pg1.sw_if_index)],
-                             register=False))
-        rl.append(VppIpRoute(cls, cls.pg5.remote_ip4, 32,
-                             [VppRoutePath("0.0.0.0",
-                                           cls.pg5.sw_if_index)],
-                             register=False, table_id=1))
-        rl.append(VppIpRoute(cls, cls.pg6.remote_ip4, 32,
-                             [VppRoutePath("0.0.0.0",
-                                           cls.pg6.sw_if_index)],
-                             register=False, table_id=1))
-        rl.append(VppIpRoute(cls, cls.pg6.remote_ip4, 16,
-                             [VppRoutePath("0.0.0.0", 0xffffffff,
-                                           nh_table_id=1)],
-                             register=False, table_id=0))
+        rl.append(
+            VppIpRoute(
+                cls,
+                "0.0.0.0",
+                0,
+                [VppRoutePath("0.0.0.0", 0xFFFFFFFF, nh_table_id=0)],
+                register=False,
+                table_id=1,
+            )
+        )
+        rl.append(
+            VppIpRoute(
+                cls,
+                "0.0.0.0",
+                0,
+                [VppRoutePath(cls.pg1.local_ip4, cls.pg1.sw_if_index)],
+                register=False,
+            )
+        )
+        rl.append(
+            VppIpRoute(
+                cls,
+                cls.pg5.remote_ip4,
+                32,
+                [VppRoutePath("0.0.0.0", cls.pg5.sw_if_index)],
+                register=False,
+                table_id=1,
+            )
+        )
+        rl.append(
+            VppIpRoute(
+                cls,
+                cls.pg6.remote_ip4,
+                32,
+                [VppRoutePath("0.0.0.0", cls.pg6.sw_if_index)],
+                register=False,
+                table_id=1,
+            )
+        )
+        rl.append(
+            VppIpRoute(
+                cls,
+                cls.pg6.remote_ip4,
+                16,
+                [VppRoutePath("0.0.0.0", 0xFFFFFFFF, nh_table_id=1)],
+                register=False,
+                table_id=0,
+            )
+        )
 
         for r in rl:
             r.add_vpp_config()
 
 
         for r in rl:
             r.add_vpp_config()
 
-        cls.no_diff = StatsDiff({
-            pg.sw_if_index: {
-                '/nat44-ed/in2out/fastpath/tcp': 0,
-                '/nat44-ed/in2out/fastpath/udp': 0,
-                '/nat44-ed/in2out/fastpath/icmp': 0,
-                '/nat44-ed/in2out/fastpath/drops': 0,
-                '/nat44-ed/in2out/slowpath/tcp': 0,
-                '/nat44-ed/in2out/slowpath/udp': 0,
-                '/nat44-ed/in2out/slowpath/icmp': 0,
-                '/nat44-ed/in2out/slowpath/drops': 0,
-                '/nat44-ed/in2out/fastpath/tcp': 0,
-                '/nat44-ed/in2out/fastpath/udp': 0,
-                '/nat44-ed/in2out/fastpath/icmp': 0,
-                '/nat44-ed/in2out/fastpath/drops': 0,
-                '/nat44-ed/in2out/slowpath/tcp': 0,
-                '/nat44-ed/in2out/slowpath/udp': 0,
-                '/nat44-ed/in2out/slowpath/icmp': 0,
-                '/nat44-ed/in2out/slowpath/drops': 0,
+        cls.no_diff = StatsDiff(
+            {
+                pg.sw_if_index: {
+                    "/nat44-ed/in2out/fastpath/tcp": 0,
+                    "/nat44-ed/in2out/fastpath/udp": 0,
+                    "/nat44-ed/in2out/fastpath/icmp": 0,
+                    "/nat44-ed/in2out/fastpath/drops": 0,
+                    "/nat44-ed/in2out/slowpath/tcp": 0,
+                    "/nat44-ed/in2out/slowpath/udp": 0,
+                    "/nat44-ed/in2out/slowpath/icmp": 0,
+                    "/nat44-ed/in2out/slowpath/drops": 0,
+                    "/nat44-ed/in2out/fastpath/tcp": 0,
+                    "/nat44-ed/in2out/fastpath/udp": 0,
+                    "/nat44-ed/in2out/fastpath/icmp": 0,
+                    "/nat44-ed/in2out/fastpath/drops": 0,
+                    "/nat44-ed/in2out/slowpath/tcp": 0,
+                    "/nat44-ed/in2out/slowpath/udp": 0,
+                    "/nat44-ed/in2out/slowpath/icmp": 0,
+                    "/nat44-ed/in2out/slowpath/drops": 0,
+                }
+                for pg in cls.pg_interfaces
             }
             }
-            for pg in cls.pg_interfaces
-        })
+        )
 
     def get_err_counter(self, path):
         return self.statistics.get_err_counter(path)
 
 
     def get_err_counter(self, path):
         return self.statistics.get_err_counter(path)
 
-    def reass_hairpinning(self, server_addr, server_in_port, server_out_port,
-                          host_in_port, proto=IP_PROTOS.tcp,
-                          ignore_port=False):
+    def reass_hairpinning(
+        self,
+        server_addr,
+        server_in_port,
+        server_out_port,
+        host_in_port,
+        proto=IP_PROTOS.tcp,
+        ignore_port=False,
+    ):
         layer = self.proto2layer(proto)
 
         if proto == IP_PROTOS.tcp:
         layer = self.proto2layer(proto)
 
         if proto == IP_PROTOS.tcp:
@@ -250,19 +297,14 @@ class TestNAT44ED(VppTestCase):
             data = b"A" * 16 + b"B" * 16 + b"C" * 3
 
         # send packet from host to server
             data = b"A" * 16 + b"B" * 16 + b"C" * 3
 
         # send packet from host to server
-        pkts = self.create_stream_frag(self.pg0,
-                                       self.nat_addr,
-                                       host_in_port,
-                                       server_out_port,
-                                       data,
-                                       proto)
+        pkts = self.create_stream_frag(
+            self.pg0, self.nat_addr, host_in_port, server_out_port, data, proto
+        )
         self.pg0.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         frags = self.pg0.get_capture(len(pkts))
         self.pg0.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         frags = self.pg0.get_capture(len(pkts))
-        p = self.reass_frags_and_verify(frags,
-                                        self.nat_addr,
-                                        server_addr)
+        p = self.reass_frags_and_verify(frags, self.nat_addr, server_addr)
         if proto != IP_PROTOS.icmp:
             if not ignore_port:
                 self.assertNotEqual(p[layer].sport, host_in_port)
         if proto != IP_PROTOS.icmp:
             if not ignore_port:
                 self.assertNotEqual(p[layer].sport, host_in_port)
@@ -272,8 +314,9 @@ class TestNAT44ED(VppTestCase):
                 self.assertNotEqual(p[layer].id, host_in_port)
         self.assertEqual(data, p[Raw].load)
 
                 self.assertNotEqual(p[layer].id, host_in_port)
         self.assertEqual(data, p[Raw].load)
 
-    def frag_out_of_order(self, proto=IP_PROTOS.tcp, dont_translate=False,
-                          ignore_port=False):
+    def frag_out_of_order(
+        self, proto=IP_PROTOS.tcp, dont_translate=False, ignore_port=False
+    ):
         layer = self.proto2layer(proto)
 
         if proto == IP_PROTOS.tcp:
         layer = self.proto2layer(proto)
 
         if proto == IP_PROTOS.tcp:
@@ -284,21 +327,22 @@ class TestNAT44ED(VppTestCase):
 
         for i in range(2):
             # in2out
 
         for i in range(2):
             # in2out
-            pkts = self.create_stream_frag(self.pg0, self.pg1.remote_ip4,
-                                           self.port_in, 20, data, proto)
+            pkts = self.create_stream_frag(
+                self.pg0, self.pg1.remote_ip4, self.port_in, 20, data, proto
+            )
             pkts.reverse()
             self.pg0.add_stream(pkts)
             self.pg_enable_capture(self.pg_interfaces)
             self.pg_start()
             frags = self.pg1.get_capture(len(pkts))
             if not dont_translate:
             pkts.reverse()
             self.pg0.add_stream(pkts)
             self.pg_enable_capture(self.pg_interfaces)
             self.pg_start()
             frags = self.pg1.get_capture(len(pkts))
             if not dont_translate:
-                p = self.reass_frags_and_verify(frags,
-                                                self.nat_addr,
-                                                self.pg1.remote_ip4)
+                p = self.reass_frags_and_verify(
+                    frags, self.nat_addr, self.pg1.remote_ip4
+                )
             else:
             else:
-                p = self.reass_frags_and_verify(frags,
-                                                self.pg0.remote_ip4,
-                                                self.pg1.remote_ip4)
+                p = self.reass_frags_and_verify(
+                    frags, self.pg0.remote_ip4, self.pg1.remote_ip4
+                )
             if proto != IP_PROTOS.icmp:
                 if not dont_translate:
                     self.assertEqual(p[layer].dport, 20)
             if proto != IP_PROTOS.icmp:
                 if not dont_translate:
                     self.assertEqual(p[layer].dport, 20)
@@ -325,17 +369,18 @@ class TestNAT44ED(VppTestCase):
             else:
                 sport = p[layer].id
                 dport = 0
             else:
                 sport = p[layer].id
                 dport = 0
-            pkts = self.create_stream_frag(self.pg1, dst_addr, sport, dport,
-                                           data, proto, echo_reply=True)
+            pkts = self.create_stream_frag(
+                self.pg1, dst_addr, sport, dport, data, proto, echo_reply=True
+            )
             pkts.reverse()
             self.pg1.add_stream(pkts)
             self.pg_enable_capture(self.pg_interfaces)
             self.logger.info(self.vapi.cli("show trace"))
             self.pg_start()
             frags = self.pg0.get_capture(len(pkts))
             pkts.reverse()
             self.pg1.add_stream(pkts)
             self.pg_enable_capture(self.pg_interfaces)
             self.logger.info(self.vapi.cli("show trace"))
             self.pg_start()
             frags = self.pg0.get_capture(len(pkts))
-            p = self.reass_frags_and_verify(frags,
-                                            self.pg1.remote_ip4,
-                                            self.pg0.remote_ip4)
+            p = self.reass_frags_and_verify(
+                frags, self.pg1.remote_ip4, self.pg0.remote_ip4
+            )
             if proto != IP_PROTOS.icmp:
                 self.assertEqual(p[layer].sport, 20)
                 self.assertEqual(p[layer].dport, self.port_in)
             if proto != IP_PROTOS.icmp:
                 self.assertEqual(p[layer].sport, 20)
                 self.assertEqual(p[layer].dport, self.port_in)
@@ -351,21 +396,20 @@ class TestNAT44ED(VppTestCase):
             self.assert_ip_checksum_valid(p)
             buffer.seek(p[IP].frag * 8)
             buffer.write(bytes(p[IP].payload))
             self.assert_ip_checksum_valid(p)
             buffer.seek(p[IP].frag * 8)
             buffer.write(bytes(p[IP].payload))
-        ip = IP(src=frags[0][IP].src, dst=frags[0][IP].dst,
-                proto=frags[0][IP].proto)
+        ip = IP(src=frags[0][IP].src, dst=frags[0][IP].dst, proto=frags[0][IP].proto)
         if ip.proto == IP_PROTOS.tcp:
         if ip.proto == IP_PROTOS.tcp:
-            p = (ip / TCP(buffer.getvalue()))
+            p = ip / TCP(buffer.getvalue())
             self.logger.debug(ppp("Reassembled:", p))
             self.assert_tcp_checksum_valid(p)
         elif ip.proto == IP_PROTOS.udp:
             self.logger.debug(ppp("Reassembled:", p))
             self.assert_tcp_checksum_valid(p)
         elif ip.proto == IP_PROTOS.udp:
-            p = (ip / UDP(buffer.getvalue()[:8]) /
-                 Raw(buffer.getvalue()[8:]))
+            p = ip / UDP(buffer.getvalue()[:8]) / Raw(buffer.getvalue()[8:])
         elif ip.proto == IP_PROTOS.icmp:
         elif ip.proto == IP_PROTOS.icmp:
-            p = (ip / ICMP(buffer.getvalue()))
+            p = ip / ICMP(buffer.getvalue())
         return p
 
         return p
 
-    def frag_in_order(self, proto=IP_PROTOS.tcp, dont_translate=False,
-                      ignore_port=False):
+    def frag_in_order(
+        self, proto=IP_PROTOS.tcp, dont_translate=False, ignore_port=False
+    ):
         layer = self.proto2layer(proto)
 
         if proto == IP_PROTOS.tcp:
         layer = self.proto2layer(proto)
 
         if proto == IP_PROTOS.tcp:
@@ -375,20 +419,19 @@ class TestNAT44ED(VppTestCase):
         self.port_in = self.random_port()
 
         # in2out
         self.port_in = self.random_port()
 
         # in2out
-        pkts = self.create_stream_frag(self.pg0, self.pg1.remote_ip4,
-                                       self.port_in, 20, data, proto)
+        pkts = self.create_stream_frag(
+            self.pg0, self.pg1.remote_ip4, self.port_in, 20, data, proto
+        )
         self.pg0.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         frags = self.pg1.get_capture(len(pkts))
         if not dont_translate:
         self.pg0.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         frags = self.pg1.get_capture(len(pkts))
         if not dont_translate:
-            p = self.reass_frags_and_verify(frags,
-                                            self.nat_addr,
-                                            self.pg1.remote_ip4)
+            p = self.reass_frags_and_verify(frags, self.nat_addr, self.pg1.remote_ip4)
         else:
         else:
-            p = self.reass_frags_and_verify(frags,
-                                            self.pg0.remote_ip4,
-                                            self.pg1.remote_ip4)
+            p = self.reass_frags_and_verify(
+                frags, self.pg0.remote_ip4, self.pg1.remote_ip4
+            )
         if proto != IP_PROTOS.icmp:
             if not dont_translate:
                 self.assertEqual(p[layer].dport, 20)
         if proto != IP_PROTOS.icmp:
             if not dont_translate:
                 self.assertEqual(p[layer].dport, 20)
@@ -415,15 +458,14 @@ class TestNAT44ED(VppTestCase):
         else:
             sport = p[layer].id
             dport = 0
         else:
             sport = p[layer].id
             dport = 0
-        pkts = self.create_stream_frag(self.pg1, dst_addr, sport, dport, data,
-                                       proto, echo_reply=True)
+        pkts = self.create_stream_frag(
+            self.pg1, dst_addr, sport, dport, data, proto, echo_reply=True
+        )
         self.pg1.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         frags = self.pg0.get_capture(len(pkts))
         self.pg1.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         frags = self.pg0.get_capture(len(pkts))
-        p = self.reass_frags_and_verify(frags,
-                                        self.pg1.remote_ip4,
-                                        self.pg0.remote_ip4)
+        p = self.reass_frags_and_verify(frags, self.pg1.remote_ip4, self.pg0.remote_ip4)
         if proto != IP_PROTOS.icmp:
             self.assertEqual(p[layer].sport, 20)
             self.assertEqual(p[layer].dport, self.port_in)
         if proto != IP_PROTOS.icmp:
             self.assertEqual(p[layer].sport, 20)
             self.assertEqual(p[layer].dport, self.port_in)
@@ -431,8 +473,9 @@ class TestNAT44ED(VppTestCase):
             self.assertEqual(p[layer].id, self.port_in)
         self.assertEqual(data, p[Raw].load)
 
             self.assertEqual(p[layer].id, self.port_in)
         self.assertEqual(data, p[Raw].load)
 
-    def verify_capture_out(self, capture, nat_ip=None, same_port=False,
-                           dst_ip=None, ignore_port=False):
+    def verify_capture_out(
+        self, capture, nat_ip=None, same_port=False, dst_ip=None, ignore_port=False
+    ):
         if nat_ip is None:
             nat_ip = self.nat_addr
         for packet in capture:
         if nat_ip is None:
             nat_ip = self.nat_addr
         for packet in capture:
@@ -444,35 +487,30 @@ class TestNAT44ED(VppTestCase):
                 if packet.haslayer(TCP):
                     if not ignore_port:
                         if same_port:
                 if packet.haslayer(TCP):
                     if not ignore_port:
                         if same_port:
-                            self.assertEqual(
-                                packet[TCP].sport, self.tcp_port_in)
+                            self.assertEqual(packet[TCP].sport, self.tcp_port_in)
                         else:
                         else:
-                            self.assertNotEqual(
-                                packet[TCP].sport, self.tcp_port_in)
+                            self.assertNotEqual(packet[TCP].sport, self.tcp_port_in)
                     self.tcp_port_out = packet[TCP].sport
                     self.assert_packet_checksums_valid(packet)
                 elif packet.haslayer(UDP):
                     if not ignore_port:
                         if same_port:
                     self.tcp_port_out = packet[TCP].sport
                     self.assert_packet_checksums_valid(packet)
                 elif packet.haslayer(UDP):
                     if not ignore_port:
                         if same_port:
-                            self.assertEqual(
-                                packet[UDP].sport, self.udp_port_in)
+                            self.assertEqual(packet[UDP].sport, self.udp_port_in)
                         else:
                         else:
-                            self.assertNotEqual(
-                                packet[UDP].sport, self.udp_port_in)
+                            self.assertNotEqual(packet[UDP].sport, self.udp_port_in)
                     self.udp_port_out = packet[UDP].sport
                 else:
                     if not ignore_port:
                         if same_port:
                     self.udp_port_out = packet[UDP].sport
                 else:
                     if not ignore_port:
                         if same_port:
-                            self.assertEqual(
-                                packet[ICMP].id, self.icmp_id_in)
+                            self.assertEqual(packet[ICMP].id, self.icmp_id_in)
                         else:
                         else:
-                            self.assertNotEqual(
-                                packet[ICMP].id, self.icmp_id_in)
+                            self.assertNotEqual(packet[ICMP].id, self.icmp_id_in)
                     self.icmp_id_out = packet[ICMP].id
                     self.assert_packet_checksums_valid(packet)
             except:
                     self.icmp_id_out = packet[ICMP].id
                     self.assert_packet_checksums_valid(packet)
             except:
-                self.logger.error(ppp("Unexpected or invalid packet "
-                                      "(outside network):", packet))
+                self.logger.error(
+                    ppp("Unexpected or invalid packet (outside network):", packet)
+                )
                 raise
 
     def verify_capture_in(self, capture, in_if):
                 raise
 
     def verify_capture_in(self, capture, in_if):
@@ -487,8 +525,9 @@ class TestNAT44ED(VppTestCase):
                 else:
                     self.assertEqual(packet[ICMP].id, self.icmp_id_in)
             except:
                 else:
                     self.assertEqual(packet[ICMP].id, self.icmp_id_in)
             except:
-                self.logger.error(ppp("Unexpected or invalid packet "
-                                      "(inside network):", packet))
+                self.logger.error(
+                    ppp("Unexpected or invalid packet (inside network):", packet)
+                )
                 raise
 
     def create_stream_in(self, in_if, out_if, dst_ip=None, ttl=64):
                 raise
 
     def create_stream_in(self, in_if, out_if, dst_ip=None, ttl=64):
@@ -497,27 +536,32 @@ class TestNAT44ED(VppTestCase):
 
         pkts = []
         # TCP
 
         pkts = []
         # TCP
-        p = (Ether(dst=in_if.local_mac, src=in_if.remote_mac) /
-             IP(src=in_if.remote_ip4, dst=dst_ip, ttl=ttl) /
-             TCP(sport=self.tcp_port_in, dport=20))
+        p = (
+            Ether(dst=in_if.local_mac, src=in_if.remote_mac)
+            / IP(src=in_if.remote_ip4, dst=dst_ip, ttl=ttl)
+            / TCP(sport=self.tcp_port_in, dport=20)
+        )
         pkts.extend([p, p])
 
         # UDP
         pkts.extend([p, p])
 
         # UDP
-        p = (Ether(dst=in_if.local_mac, src=in_if.remote_mac) /
-             IP(src=in_if.remote_ip4, dst=dst_ip, ttl=ttl) /
-             UDP(sport=self.udp_port_in, dport=20))
+        p = (
+            Ether(dst=in_if.local_mac, src=in_if.remote_mac)
+            / IP(src=in_if.remote_ip4, dst=dst_ip, ttl=ttl)
+            / UDP(sport=self.udp_port_in, dport=20)
+        )
         pkts.append(p)
 
         # ICMP
         pkts.append(p)
 
         # ICMP
-        p = (Ether(dst=in_if.local_mac, src=in_if.remote_mac) /
-             IP(src=in_if.remote_ip4, dst=dst_ip, ttl=ttl) /
-             ICMP(id=self.icmp_id_in, type='echo-request'))
+        p = (
+            Ether(dst=in_if.local_mac, src=in_if.remote_mac)
+            / IP(src=in_if.remote_ip4, dst=dst_ip, ttl=ttl)
+            / ICMP(id=self.icmp_id_in, type="echo-request")
+        )
         pkts.append(p)
 
         return pkts
 
         pkts.append(p)
 
         return pkts
 
-    def create_stream_out(self, out_if, dst_ip=None, ttl=64,
-                          use_inside_ports=False):
+    def create_stream_out(self, out_if, dst_ip=None, ttl=64, use_inside_ports=False):
         if dst_ip is None:
             dst_ip = self.nat_addr
         if not use_inside_ports:
         if dst_ip is None:
             dst_ip = self.nat_addr
         if not use_inside_ports:
@@ -530,21 +574,27 @@ class TestNAT44ED(VppTestCase):
             icmp_id = self.icmp_id_in
         pkts = []
         # TCP
             icmp_id = self.icmp_id_in
         pkts = []
         # TCP
-        p = (Ether(dst=out_if.local_mac, src=out_if.remote_mac) /
-             IP(src=out_if.remote_ip4, dst=dst_ip, ttl=ttl) /
-             TCP(dport=tcp_port, sport=20))
+        p = (
+            Ether(dst=out_if.local_mac, src=out_if.remote_mac)
+            / IP(src=out_if.remote_ip4, dst=dst_ip, ttl=ttl)
+            / TCP(dport=tcp_port, sport=20)
+        )
         pkts.extend([p, p])
 
         # UDP
         pkts.extend([p, p])
 
         # UDP
-        p = (Ether(dst=out_if.local_mac, src=out_if.remote_mac) /
-             IP(src=out_if.remote_ip4, dst=dst_ip, ttl=ttl) /
-             UDP(dport=udp_port, sport=20))
+        p = (
+            Ether(dst=out_if.local_mac, src=out_if.remote_mac)
+            / IP(src=out_if.remote_ip4, dst=dst_ip, ttl=ttl)
+            / UDP(dport=udp_port, sport=20)
+        )
         pkts.append(p)
 
         # ICMP
         pkts.append(p)
 
         # ICMP
-        p = (Ether(dst=out_if.local_mac, src=out_if.remote_mac) /
-             IP(src=out_if.remote_ip4, dst=dst_ip, ttl=ttl) /
-             ICMP(id=icmp_id, type='echo-reply'))
+        p = (
+            Ether(dst=out_if.local_mac, src=out_if.remote_mac)
+            / IP(src=out_if.remote_ip4, dst=dst_ip, ttl=ttl)
+            / ICMP(id=icmp_id, type="echo-reply")
+        )
         pkts.append(p)
 
         return pkts
         pkts.append(p)
 
         return pkts
@@ -554,19 +604,24 @@ class TestNAT44ED(VppTestCase):
         port = 6303
 
         for i in range(count):
         port = 6303
 
         for i in range(count):
-            p = (Ether(dst=in_if.local_mac, src=in_if.remote_mac) /
-                 IP(src=in_if.remote_ip4, dst=out_if.remote_ip4, ttl=64) /
-                 TCP(sport=port + i, dport=20))
+            p = (
+                Ether(dst=in_if.local_mac, src=in_if.remote_mac)
+                / IP(src=in_if.remote_ip4, dst=out_if.remote_ip4, ttl=64)
+                / TCP(sport=port + i, dport=20)
+            )
             pkts.append(p)
 
         return pkts
 
             pkts.append(p)
 
         return pkts
 
-    def create_stream_frag(self, src_if, dst, sport, dport, data,
-                           proto=IP_PROTOS.tcp, echo_reply=False):
+    def create_stream_frag(
+        self, src_if, dst, sport, dport, data, proto=IP_PROTOS.tcp, echo_reply=False
+    ):
         if proto == IP_PROTOS.tcp:
         if proto == IP_PROTOS.tcp:
-            p = (IP(src=src_if.remote_ip4, dst=dst) /
-                 TCP(sport=sport, dport=dport) /
-                 Raw(data))
+            p = (
+                IP(src=src_if.remote_ip4, dst=dst)
+                / TCP(sport=sport, dport=dport)
+                / Raw(data)
+            )
             p = p.__class__(scapy.compat.raw(p))
             chksum = p[TCP].chksum
             proto_header = TCP(sport=sport, dport=dport, chksum=chksum)
             p = p.__class__(scapy.compat.raw(p))
             chksum = p[TCP].chksum
             proto_header = TCP(sport=sport, dport=dport, chksum=chksum)
@@ -574,9 +629,9 @@ class TestNAT44ED(VppTestCase):
             proto_header = UDP(sport=sport, dport=dport)
         elif proto == IP_PROTOS.icmp:
             if not echo_reply:
             proto_header = UDP(sport=sport, dport=dport)
         elif proto == IP_PROTOS.icmp:
             if not echo_reply:
-                proto_header = ICMP(id=sport, type='echo-request')
+                proto_header = ICMP(id=sport, type="echo-request")
             else:
             else:
-                proto_header = ICMP(id=sport, type='echo-reply')
+                proto_header = ICMP(id=sport, type="echo-reply")
         else:
             raise Exception("Unsupported protocol")
         id = self.random_port()
         else:
             raise Exception("Unsupported protocol")
         id = self.random_port()
@@ -585,33 +640,38 @@ class TestNAT44ED(VppTestCase):
             raw = Raw(data[0:4])
         else:
             raw = Raw(data[0:16])
             raw = Raw(data[0:4])
         else:
             raw = Raw(data[0:16])
-        p = (Ether(src=src_if.remote_mac, dst=src_if.local_mac) /
-             IP(src=src_if.remote_ip4, dst=dst, flags="MF", frag=0, id=id) /
-             proto_header /
-             raw)
+        p = (
+            Ether(src=src_if.remote_mac, dst=src_if.local_mac)
+            / IP(src=src_if.remote_ip4, dst=dst, flags="MF", frag=0, id=id)
+            / proto_header
+            / raw
+        )
         pkts.append(p)
         if proto == IP_PROTOS.tcp:
             raw = Raw(data[4:20])
         else:
             raw = Raw(data[16:32])
         pkts.append(p)
         if proto == IP_PROTOS.tcp:
             raw = Raw(data[4:20])
         else:
             raw = Raw(data[16:32])
-        p = (Ether(src=src_if.remote_mac, dst=src_if.local_mac) /
-             IP(src=src_if.remote_ip4, dst=dst, flags="MF", frag=3, id=id,
-                proto=proto) /
-             raw)
+        p = (
+            Ether(src=src_if.remote_mac, dst=src_if.local_mac)
+            / IP(src=src_if.remote_ip4, dst=dst, flags="MF", frag=3, id=id, proto=proto)
+            / raw
+        )
         pkts.append(p)
         if proto == IP_PROTOS.tcp:
             raw = Raw(data[20:])
         else:
             raw = Raw(data[32:])
         pkts.append(p)
         if proto == IP_PROTOS.tcp:
             raw = Raw(data[20:])
         else:
             raw = Raw(data[32:])
-        p = (Ether(src=src_if.remote_mac, dst=src_if.local_mac) /
-             IP(src=src_if.remote_ip4, dst=dst, frag=5, proto=proto,
-                id=id) /
-             raw)
+        p = (
+            Ether(src=src_if.remote_mac, dst=src_if.local_mac)
+            / IP(src=src_if.remote_ip4, dst=dst, frag=5, proto=proto, id=id)
+            / raw
+        )
         pkts.append(p)
         return pkts
 
         pkts.append(p)
         return pkts
 
-    def frag_in_order_in_plus_out(self, in_addr, out_addr, in_port, out_port,
-                                  proto=IP_PROTOS.tcp):
+    def frag_in_order_in_plus_out(
+        self, in_addr, out_addr, in_port, out_port, proto=IP_PROTOS.tcp
+    ):
 
         layer = self.proto2layer(proto)
 
 
         layer = self.proto2layer(proto)
 
@@ -623,16 +683,14 @@ class TestNAT44ED(VppTestCase):
 
         for i in range(2):
             # out2in
 
         for i in range(2):
             # out2in
-            pkts = self.create_stream_frag(self.pg0, out_addr,
-                                           port_in, out_port,
-                                           data, proto)
+            pkts = self.create_stream_frag(
+                self.pg0, out_addr, port_in, out_port, data, proto
+            )
             self.pg0.add_stream(pkts)
             self.pg_enable_capture(self.pg_interfaces)
             self.pg_start()
             frags = self.pg1.get_capture(len(pkts))
             self.pg0.add_stream(pkts)
             self.pg_enable_capture(self.pg_interfaces)
             self.pg_start()
             frags = self.pg1.get_capture(len(pkts))
-            p = self.reass_frags_and_verify(frags,
-                                            self.pg0.remote_ip4,
-                                            in_addr)
+            p = self.reass_frags_and_verify(frags, self.pg0.remote_ip4, in_addr)
             if proto != IP_PROTOS.icmp:
                 self.assertEqual(p[layer].sport, port_in)
                 self.assertEqual(p[layer].dport, in_port)
             if proto != IP_PROTOS.icmp:
                 self.assertEqual(p[layer].sport, port_in)
                 self.assertEqual(p[layer].dport, in_port)
@@ -642,20 +700,24 @@ class TestNAT44ED(VppTestCase):
 
             # in2out
             if proto != IP_PROTOS.icmp:
 
             # in2out
             if proto != IP_PROTOS.icmp:
-                pkts = self.create_stream_frag(self.pg1, self.pg0.remote_ip4,
-                                               in_port,
-                                               p[layer].sport, data, proto)
+                pkts = self.create_stream_frag(
+                    self.pg1, self.pg0.remote_ip4, in_port, p[layer].sport, data, proto
+                )
             else:
             else:
-                pkts = self.create_stream_frag(self.pg1, self.pg0.remote_ip4,
-                                               p[layer].id, 0, data, proto,
-                                               echo_reply=True)
+                pkts = self.create_stream_frag(
+                    self.pg1,
+                    self.pg0.remote_ip4,
+                    p[layer].id,
+                    0,
+                    data,
+                    proto,
+                    echo_reply=True,
+                )
             self.pg1.add_stream(pkts)
             self.pg_enable_capture(self.pg_interfaces)
             self.pg_start()
             frags = self.pg0.get_capture(len(pkts))
             self.pg1.add_stream(pkts)
             self.pg_enable_capture(self.pg_interfaces)
             self.pg_start()
             frags = self.pg0.get_capture(len(pkts))
-            p = self.reass_frags_and_verify(frags,
-                                            out_addr,
-                                            self.pg0.remote_ip4)
+            p = self.reass_frags_and_verify(frags, out_addr, self.pg0.remote_ip4)
             if proto != IP_PROTOS.icmp:
                 self.assertEqual(p[layer].sport, out_port)
                 self.assertEqual(p[layer].dport, port_in)
             if proto != IP_PROTOS.icmp:
                 self.assertEqual(p[layer].sport, out_port)
                 self.assertEqual(p[layer].dport, port_in)
@@ -663,8 +725,9 @@ class TestNAT44ED(VppTestCase):
                 self.assertEqual(p[layer].id, port_in)
             self.assertEqual(data, p[Raw].load)
 
                 self.assertEqual(p[layer].id, port_in)
             self.assertEqual(data, p[Raw].load)
 
-    def frag_out_of_order_in_plus_out(self, in_addr, out_addr, in_port,
-                                      out_port, proto=IP_PROTOS.tcp):
+    def frag_out_of_order_in_plus_out(
+        self, in_addr, out_addr, in_port, out_port, proto=IP_PROTOS.tcp
+    ):
 
         layer = self.proto2layer(proto)
 
 
         layer = self.proto2layer(proto)
 
@@ -676,17 +739,15 @@ class TestNAT44ED(VppTestCase):
 
         for i in range(2):
             # out2in
 
         for i in range(2):
             # out2in
-            pkts = self.create_stream_frag(self.pg0, out_addr,
-                                           port_in, out_port,
-                                           data, proto)
+            pkts = self.create_stream_frag(
+                self.pg0, out_addr, port_in, out_port, data, proto
+            )
             pkts.reverse()
             self.pg0.add_stream(pkts)
             self.pg_enable_capture(self.pg_interfaces)
             self.pg_start()
             frags = self.pg1.get_capture(len(pkts))
             pkts.reverse()
             self.pg0.add_stream(pkts)
             self.pg_enable_capture(self.pg_interfaces)
             self.pg_start()
             frags = self.pg1.get_capture(len(pkts))
-            p = self.reass_frags_and_verify(frags,
-                                            self.pg0.remote_ip4,
-                                            in_addr)
+            p = self.reass_frags_and_verify(frags, self.pg0.remote_ip4, in_addr)
             if proto != IP_PROTOS.icmp:
                 self.assertEqual(p[layer].dport, in_port)
                 self.assertEqual(p[layer].sport, port_in)
             if proto != IP_PROTOS.icmp:
                 self.assertEqual(p[layer].dport, in_port)
                 self.assertEqual(p[layer].sport, port_in)
@@ -697,21 +758,25 @@ class TestNAT44ED(VppTestCase):
 
             # in2out
             if proto != IP_PROTOS.icmp:
 
             # in2out
             if proto != IP_PROTOS.icmp:
-                pkts = self.create_stream_frag(self.pg1, self.pg0.remote_ip4,
-                                               in_port,
-                                               p[layer].sport, data, proto)
+                pkts = self.create_stream_frag(
+                    self.pg1, self.pg0.remote_ip4, in_port, p[layer].sport, data, proto
+                )
             else:
             else:
-                pkts = self.create_stream_frag(self.pg1, self.pg0.remote_ip4,
-                                               p[layer].id, 0, data, proto,
-                                               echo_reply=True)
+                pkts = self.create_stream_frag(
+                    self.pg1,
+                    self.pg0.remote_ip4,
+                    p[layer].id,
+                    0,
+                    data,
+                    proto,
+                    echo_reply=True,
+                )
             pkts.reverse()
             self.pg1.add_stream(pkts)
             self.pg_enable_capture(self.pg_interfaces)
             self.pg_start()
             frags = self.pg0.get_capture(len(pkts))
             pkts.reverse()
             self.pg1.add_stream(pkts)
             self.pg_enable_capture(self.pg_interfaces)
             self.pg_start()
             frags = self.pg0.get_capture(len(pkts))
-            p = self.reass_frags_and_verify(frags,
-                                            out_addr,
-                                            self.pg0.remote_ip4)
+            p = self.reass_frags_and_verify(frags, out_addr, self.pg0.remote_ip4)
             if proto != IP_PROTOS.icmp:
                 self.assertEqual(p[layer].sport, out_port)
                 self.assertEqual(p[layer].dport, port_in)
             if proto != IP_PROTOS.icmp:
                 self.assertEqual(p[layer].sport, out_port)
                 self.assertEqual(p[layer].dport, port_in)
@@ -721,9 +786,11 @@ class TestNAT44ED(VppTestCase):
 
     def init_tcp_session(self, in_if, out_if, in_port, ext_port):
         # SYN packet in->out
 
     def init_tcp_session(self, in_if, out_if, in_port, ext_port):
         # SYN packet in->out
-        p = (Ether(src=in_if.remote_mac, dst=in_if.local_mac) /
-             IP(src=in_if.remote_ip4, dst=out_if.remote_ip4) /
-             TCP(sport=in_port, dport=ext_port, flags="S"))
+        p = (
+            Ether(src=in_if.remote_mac, dst=in_if.local_mac)
+            / IP(src=in_if.remote_ip4, dst=out_if.remote_ip4)
+            / TCP(sport=in_port, dport=ext_port, flags="S")
+        )
         in_if.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         in_if.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -732,18 +799,22 @@ class TestNAT44ED(VppTestCase):
         out_port = p[TCP].sport
 
         # SYN + ACK packet out->in
         out_port = p[TCP].sport
 
         # SYN + ACK packet out->in
-        p = (Ether(src=out_if.remote_mac, dst=out_if.local_mac) /
-             IP(src=out_if.remote_ip4, dst=self.nat_addr) /
-             TCP(sport=ext_port, dport=out_port, flags="SA"))
+        p = (
+            Ether(src=out_if.remote_mac, dst=out_if.local_mac)
+            / IP(src=out_if.remote_ip4, dst=self.nat_addr)
+            / TCP(sport=ext_port, dport=out_port, flags="SA")
+        )
         out_if.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         in_if.get_capture(1)
 
         # ACK packet in->out
         out_if.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         in_if.get_capture(1)
 
         # ACK packet in->out
-        p = (Ether(src=in_if.remote_mac, dst=in_if.local_mac) /
-             IP(src=in_if.remote_ip4, dst=out_if.remote_ip4) /
-             TCP(sport=in_port, dport=ext_port, flags="A"))
+        p = (
+            Ether(src=in_if.remote_mac, dst=in_if.local_mac)
+            / IP(src=in_if.remote_ip4, dst=out_if.remote_ip4)
+            / TCP(sport=in_port, dport=ext_port, flags="A")
+        )
         in_if.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         in_if.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -751,9 +822,10 @@ class TestNAT44ED(VppTestCase):
 
         return out_port
 
 
         return out_port
 
-    def twice_nat_common(self, self_twice_nat=False, same_pg=False, lb=False,
-                         client_id=None):
-        twice_nat_addr = '10.0.1.3'
+    def twice_nat_common(
+        self, self_twice_nat=False, same_pg=False, lb=False, client_id=None
+    ):
+        twice_nat_addr = "10.0.1.3"
 
         port_in = 8080
         if lb:
 
         port_in = 8080
         if lb:
@@ -780,8 +852,7 @@ class TestNAT44ED(VppTestCase):
         else:
             pg1 = self.pg1
 
         else:
             pg1 = self.pg1
 
-        eh_translate = ((not self_twice_nat) or (not lb and same_pg) or
-                        client_id == 1)
+        eh_translate = (not self_twice_nat) or (not lb and same_pg) or client_id == 1
 
         self.nat_add_address(self.nat_addr)
         self.nat_add_address(twice_nat_addr, twice_nat=1)
 
         self.nat_add_address(self.nat_addr)
         self.nat_add_address(twice_nat_addr, twice_nat=1)
@@ -793,27 +864,30 @@ class TestNAT44ED(VppTestCase):
             flags |= self.config_flags.NAT_IS_TWICE_NAT
 
         if not lb:
             flags |= self.config_flags.NAT_IS_TWICE_NAT
 
         if not lb:
-            self.nat_add_static_mapping(pg0.remote_ip4, self.nat_addr,
-                                        port_in, port_out,
-                                        proto=IP_PROTOS.tcp,
-                                        flags=flags)
+            self.nat_add_static_mapping(
+                pg0.remote_ip4,
+                self.nat_addr,
+                port_in,
+                port_out,
+                proto=IP_PROTOS.tcp,
+                flags=flags,
+            )
         else:
         else:
-            locals = [{'addr': server1.ip4,
-                       'port': port_in1,
-                       'probability': 50,
-                       'vrf_id': 0},
-                      {'addr': server2.ip4,
-                       'port': port_in2,
-                       'probability': 50,
-                       'vrf_id': 0}]
+            locals = [
+                {"addr": server1.ip4, "port": port_in1, "probability": 50, "vrf_id": 0},
+                {"addr": server2.ip4, "port": port_in2, "probability": 50, "vrf_id": 0},
+            ]
             out_addr = self.nat_addr
 
             out_addr = self.nat_addr
 
-            self.vapi.nat44_add_del_lb_static_mapping(is_add=1, flags=flags,
-                                                      external_addr=out_addr,
-                                                      external_port=port_out,
-                                                      protocol=IP_PROTOS.tcp,
-                                                      local_num=len(locals),
-                                                      locals=locals)
+            self.vapi.nat44_add_del_lb_static_mapping(
+                is_add=1,
+                flags=flags,
+                external_addr=out_addr,
+                external_port=port_out,
+                protocol=IP_PROTOS.tcp,
+                local_num=len(locals),
+                locals=locals,
+            )
         self.nat_add_inside_interface(pg0)
         self.nat_add_outside_interface(pg1)
 
         self.nat_add_inside_interface(pg0)
         self.nat_add_outside_interface(pg1)
 
@@ -828,9 +902,11 @@ class TestNAT44ED(VppTestCase):
                     client = self.pg0.remote_hosts[1]
         else:
             client = pg1.remote_hosts[0]
                     client = self.pg0.remote_hosts[1]
         else:
             client = pg1.remote_hosts[0]
-        p = (Ether(src=pg1.remote_mac, dst=pg1.local_mac) /
-             IP(src=client.ip4, dst=self.nat_addr) /
-             TCP(sport=eh_port_out, dport=port_out))
+        p = (
+            Ether(src=pg1.remote_mac, dst=pg1.local_mac)
+            / IP(src=client.ip4, dst=self.nat_addr)
+            / TCP(sport=eh_port_out, dport=port_out)
+        )
         pg1.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         pg1.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -865,9 +941,11 @@ class TestNAT44ED(VppTestCase):
             self.logger.error(ppp("Unexpected or invalid packet:", p))
             raise
 
             self.logger.error(ppp("Unexpected or invalid packet:", p))
             raise
 
-        p = (Ether(src=server.mac, dst=pg0.local_mac) /
-             IP(src=server.ip4, dst=eh_addr_in) /
-             TCP(sport=saved_port_in, dport=eh_port_in))
+        p = (
+            Ether(src=server.mac, dst=pg0.local_mac)
+            / IP(src=server.ip4, dst=eh_addr_in)
+            / TCP(sport=saved_port_in, dport=eh_port_in)
+        )
         pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -888,24 +966,25 @@ class TestNAT44ED(VppTestCase):
         if eh_translate:
             sessions = self.vapi.nat44_user_session_dump(server.ip4, 0)
             self.assertEqual(len(sessions), 1)
         if eh_translate:
             sessions = self.vapi.nat44_user_session_dump(server.ip4, 0)
             self.assertEqual(len(sessions), 1)
-            self.assertTrue(sessions[0].flags &
-                            self.config_flags.NAT_IS_EXT_HOST_VALID)
-            self.assertTrue(sessions[0].flags &
-                            self.config_flags.NAT_IS_TWICE_NAT)
+            self.assertTrue(sessions[0].flags & self.config_flags.NAT_IS_EXT_HOST_VALID)
+            self.assertTrue(sessions[0].flags & self.config_flags.NAT_IS_TWICE_NAT)
             self.logger.info(self.vapi.cli("show nat44 sessions"))
             self.vapi.nat44_del_session(
                 address=sessions[0].inside_ip_address,
                 port=sessions[0].inside_port,
                 protocol=sessions[0].protocol,
             self.logger.info(self.vapi.cli("show nat44 sessions"))
             self.vapi.nat44_del_session(
                 address=sessions[0].inside_ip_address,
                 port=sessions[0].inside_port,
                 protocol=sessions[0].protocol,
-                flags=(self.config_flags.NAT_IS_INSIDE |
-                       self.config_flags.NAT_IS_EXT_HOST_VALID),
+                flags=(
+                    self.config_flags.NAT_IS_INSIDE
+                    | self.config_flags.NAT_IS_EXT_HOST_VALID
+                ),
                 ext_host_address=sessions[0].ext_host_nat_address,
                 ext_host_address=sessions[0].ext_host_nat_address,
-                ext_host_port=sessions[0].ext_host_nat_port)
+                ext_host_port=sessions[0].ext_host_nat_port,
+            )
             sessions = self.vapi.nat44_user_session_dump(server.ip4, 0)
             self.assertEqual(len(sessions), 0)
 
     def verify_syslog_sess(self, data, msgid, is_ip6=False):
             sessions = self.vapi.nat44_user_session_dump(server.ip4, 0)
             self.assertEqual(len(sessions), 0)
 
     def verify_syslog_sess(self, data, msgid, is_ip6=False):
-        message = data.decode('utf-8')
+        message = data.decode("utf-8")
         try:
             message = SyslogMessage.parse(message)
         except ParseError as e:
         try:
             message = SyslogMessage.parse(message)
         except ParseError as e:
@@ -913,29 +992,28 @@ class TestNAT44ED(VppTestCase):
             raise
         else:
             self.assertEqual(message.severity, SyslogSeverity.info)
             raise
         else:
             self.assertEqual(message.severity, SyslogSeverity.info)
-            self.assertEqual(message.appname, 'NAT')
+            self.assertEqual(message.appname, "NAT")
             self.assertEqual(message.msgid, msgid)
             self.assertEqual(message.msgid, msgid)
-            sd_params = message.sd.get('nsess')
+            sd_params = message.sd.get("nsess")
             self.assertTrue(sd_params is not None)
             if is_ip6:
             self.assertTrue(sd_params is not None)
             if is_ip6:
-                self.assertEqual(sd_params.get('IATYP'), 'IPv6')
-                self.assertEqual(sd_params.get('ISADDR'), self.pg0.remote_ip6)
+                self.assertEqual(sd_params.get("IATYP"), "IPv6")
+                self.assertEqual(sd_params.get("ISADDR"), self.pg0.remote_ip6)
             else:
             else:
-                self.assertEqual(sd_params.get('IATYP'), 'IPv4')
-                self.assertEqual(sd_params.get('ISADDR'), self.pg0.remote_ip4)
-                self.assertTrue(sd_params.get('SSUBIX') is not None)
-            self.assertEqual(sd_params.get('ISPORT'), "%d" % self.tcp_port_in)
-            self.assertEqual(sd_params.get('XATYP'), 'IPv4')
-            self.assertEqual(sd_params.get('XSADDR'), self.nat_addr)
-            self.assertEqual(sd_params.get('XSPORT'), "%d" % self.tcp_port_out)
-            self.assertEqual(sd_params.get('PROTO'), "%d" % IP_PROTOS.tcp)
-            self.assertEqual(sd_params.get('SVLAN'), '0')
-            self.assertEqual(sd_params.get('XDADDR'), self.pg1.remote_ip4)
-            self.assertEqual(sd_params.get('XDPORT'),
-                             "%d" % self.tcp_external_port)
+                self.assertEqual(sd_params.get("IATYP"), "IPv4")
+                self.assertEqual(sd_params.get("ISADDR"), self.pg0.remote_ip4)
+                self.assertTrue(sd_params.get("SSUBIX") is not None)
+            self.assertEqual(sd_params.get("ISPORT"), "%d" % self.tcp_port_in)
+            self.assertEqual(sd_params.get("XATYP"), "IPv4")
+            self.assertEqual(sd_params.get("XSADDR"), self.nat_addr)
+            self.assertEqual(sd_params.get("XSPORT"), "%d" % self.tcp_port_out)
+            self.assertEqual(sd_params.get("PROTO"), "%d" % IP_PROTOS.tcp)
+            self.assertEqual(sd_params.get("SVLAN"), "0")
+            self.assertEqual(sd_params.get("XDADDR"), self.pg1.remote_ip4)
+            self.assertEqual(sd_params.get("XDPORT"), "%d" % self.tcp_external_port)
 
     def test_icmp_error(self):
 
     def test_icmp_error(self):
-        """ NAT44ED test ICMP error message with inner header"""
+        """NAT44ED test ICMP error message with inner header"""
 
         payload = "H" * 10
 
 
         payload = "H" * 10
 
@@ -944,25 +1022,31 @@ class TestNAT44ED(VppTestCase):
         self.nat_add_outside_interface(self.pg1)
 
         # in2out (initiate connection)
         self.nat_add_outside_interface(self.pg1)
 
         # in2out (initiate connection)
-        p1 = [Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-              IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4) /
-              UDP(sport=21, dport=20) / payload,
-              Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-              IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4) /
-              TCP(sport=21, dport=20, flags="S") / payload,
-              Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-              IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4) /
-              ICMP(type='echo-request', id=7777) / payload,
-              ]
+        p1 = [
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4)
+            / UDP(sport=21, dport=20)
+            / payload,
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4)
+            / TCP(sport=21, dport=20, flags="S")
+            / payload,
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4)
+            / ICMP(type="echo-request", id=7777)
+            / payload,
+        ]
 
         capture = self.send_and_expect(self.pg0, p1, self.pg1)
 
         # out2in (send error message)
 
         capture = self.send_and_expect(self.pg0, p1, self.pg1)
 
         # out2in (send error message)
-        p2 = [Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac) /
-              IP(src=self.pg1.remote_ip4, dst=self.nat_addr) /
-              ICMP(type='dest-unreach', code='port-unreachable') /
-              c[IP:]
-              for c in capture]
+        p2 = [
+            Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
+            / IP(src=self.pg1.remote_ip4, dst=self.nat_addr)
+            / ICMP(type="dest-unreach", code="port-unreachable")
+            / c[IP:]
+            for c in capture
+        ]
 
         capture = self.send_and_expect(self.pg1, p2, self.pg0)
 
 
         capture = self.send_and_expect(self.pg1, p2, self.pg0)
 
@@ -971,20 +1055,21 @@ class TestNAT44ED(VppTestCase):
                 assert c[IP].dst == self.pg0.remote_ip4
                 assert c[IPerror].src == self.pg0.remote_ip4
             except AssertionError as a:
                 assert c[IP].dst == self.pg0.remote_ip4
                 assert c[IPerror].src == self.pg0.remote_ip4
             except AssertionError as a:
-                raise AssertionError(
-                    f"Packet {pr(c)} not translated properly") from a
+                raise AssertionError(f"Packet {pr(c)} not translated properly") from a
 
     def test_icmp_echo_reply_trailer(self):
 
     def test_icmp_echo_reply_trailer(self):
-        """ ICMP echo reply with ethernet trailer"""
+        """ICMP echo reply with ethernet trailer"""
 
         self.nat_add_address(self.nat_addr)
         self.nat_add_inside_interface(self.pg0)
         self.nat_add_outside_interface(self.pg1)
 
         # in2out
 
         self.nat_add_address(self.nat_addr)
         self.nat_add_inside_interface(self.pg0)
         self.nat_add_outside_interface(self.pg1)
 
         # in2out
-        p1 = (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-              IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4) /
-              ICMP(type=8, id=0xabcd, seq=0))
+        p1 = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4)
+            / ICMP(type=8, id=0xABCD, seq=0)
+        )
 
         self.pg0.add_stream(p1)
         self.pg_enable_capture(self.pg_interfaces)
 
         self.pg0.add_stream(p1)
         self.pg_enable_capture(self.pg_interfaces)
@@ -994,9 +1079,11 @@ class TestNAT44ED(VppTestCase):
         self.logger.debug(self.vapi.cli("show trace"))
 
         # out2in
         self.logger.debug(self.vapi.cli("show trace"))
 
         # out2in
-        p2 = (Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac) /
-              IP(src=self.pg1.remote_ip4, dst=self.nat_addr, id=0xee59) /
-              ICMP(type=0, id=c[ICMP].id, seq=0))
+        p2 = (
+            Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
+            / IP(src=self.pg1.remote_ip4, dst=self.nat_addr, id=0xEE59)
+            / ICMP(type=0, id=c[ICMP].id, seq=0)
+        )
 
         # force checksum calculation
         p2 = p2.__class__(bytes(p2))
 
         # force checksum calculation
         p2 = p2.__class__(bytes(p2))
@@ -1019,7 +1106,7 @@ class TestNAT44ED(VppTestCase):
         self.pg0.get_capture(1)
 
     def test_users_dump(self):
         self.pg0.get_capture(1)
 
     def test_users_dump(self):
-        """ NAT44ED API test - nat44_user_dump """
+        """NAT44ED API test - nat44_user_dump"""
 
         self.nat_add_address(self.nat_addr)
         self.nat_add_inside_interface(self.pg0)
 
         self.nat_add_address(self.nat_addr)
         self.nat_add_inside_interface(self.pg0)
@@ -1061,9 +1148,9 @@ class TestNAT44ED(VppTestCase):
         host0 = self.pg0.remote_hosts[0]
         self.pg0.remote_hosts[0] = self.pg0.remote_hosts[1]
         try:
         host0 = self.pg0.remote_hosts[0]
         self.pg0.remote_hosts[0] = self.pg0.remote_hosts[1]
         try:
-            pkts = self.create_stream_out(self.pg1,
-                                          dst_ip=self.pg0.remote_ip4,
-                                          use_inside_ports=True)
+            pkts = self.create_stream_out(
+                self.pg1, dst_ip=self.pg0.remote_ip4, use_inside_ports=True
+            )
             self.pg1.add_stream(pkts)
             self.pg_enable_capture(self.pg_interfaces)
             self.pg_start()
             self.pg1.add_stream(pkts)
             self.pg_enable_capture(self.pg_interfaces)
             self.pg_start()
@@ -1075,8 +1162,7 @@ class TestNAT44ED(VppTestCase):
             self.pg_enable_capture(self.pg_interfaces)
             self.pg_start()
             capture = self.pg1.get_capture(len(pkts))
             self.pg_enable_capture(self.pg_interfaces)
             self.pg_start()
             capture = self.pg1.get_capture(len(pkts))
-            self.verify_capture_out(capture, nat_ip=self.pg0.remote_ip4,
-                                    same_port=True)
+            self.verify_capture_out(capture, nat_ip=self.pg0.remote_ip4, same_port=True)
         finally:
             self.pg0.remote_hosts[0] = host0
 
         finally:
             self.pg0.remote_hosts[0] = host0
 
@@ -1107,14 +1193,14 @@ class TestNAT44ED(VppTestCase):
         self.assertEqual(non_static_user.nsessions, 3)
 
     def test_frag_out_of_order_do_not_translate(self):
         self.assertEqual(non_static_user.nsessions, 3)
 
     def test_frag_out_of_order_do_not_translate(self):
-        """ NAT44ED don't translate fragments arriving out of order """
+        """NAT44ED don't translate fragments arriving out of order"""
         self.nat_add_inside_interface(self.pg0)
         self.nat_add_outside_interface(self.pg1)
         self.vapi.nat44_forwarding_enable_disable(enable=True)
         self.frag_out_of_order(proto=IP_PROTOS.tcp, dont_translate=True)
 
     def test_forwarding(self):
         self.nat_add_inside_interface(self.pg0)
         self.nat_add_outside_interface(self.pg1)
         self.vapi.nat44_forwarding_enable_disable(enable=True)
         self.frag_out_of_order(proto=IP_PROTOS.tcp, dont_translate=True)
 
     def test_forwarding(self):
-        """ NAT44ED forwarding test """
+        """NAT44ED forwarding test"""
 
         self.nat_add_inside_interface(self.pg0)
         self.nat_add_outside_interface(self.pg1)
 
         self.nat_add_inside_interface(self.pg0)
         self.nat_add_outside_interface(self.pg1)
@@ -1123,11 +1209,13 @@ class TestNAT44ED(VppTestCase):
         real_ip = self.pg0.remote_ip4
         alias_ip = self.nat_addr
         flags = self.config_flags.NAT_IS_ADDR_ONLY
         real_ip = self.pg0.remote_ip4
         alias_ip = self.nat_addr
         flags = self.config_flags.NAT_IS_ADDR_ONLY
-        self.vapi.nat44_add_del_static_mapping(is_add=1,
-                                               local_ip_address=real_ip,
-                                               external_ip_address=alias_ip,
-                                               external_sw_if_index=0xFFFFFFFF,
-                                               flags=flags)
+        self.vapi.nat44_add_del_static_mapping(
+            is_add=1,
+            local_ip_address=real_ip,
+            external_ip_address=alias_ip,
+            external_sw_if_index=0xFFFFFFFF,
+            flags=flags,
+        )
 
         try:
             # in2out - static mapping match
 
         try:
             # in2out - static mapping match
@@ -1151,9 +1239,9 @@ class TestNAT44ED(VppTestCase):
             host0 = self.pg0.remote_hosts[0]
             self.pg0.remote_hosts[0] = self.pg0.remote_hosts[1]
             try:
             host0 = self.pg0.remote_hosts[0]
             self.pg0.remote_hosts[0] = self.pg0.remote_hosts[1]
             try:
-                pkts = self.create_stream_out(self.pg1,
-                                              dst_ip=self.pg0.remote_ip4,
-                                              use_inside_ports=True)
+                pkts = self.create_stream_out(
+                    self.pg1, dst_ip=self.pg0.remote_ip4, use_inside_ports=True
+                )
                 self.pg1.add_stream(pkts)
                 self.pg_enable_capture(self.pg_interfaces)
                 self.pg_start()
                 self.pg1.add_stream(pkts)
                 self.pg_enable_capture(self.pg_interfaces)
                 self.pg_start()
@@ -1165,24 +1253,27 @@ class TestNAT44ED(VppTestCase):
                 self.pg_enable_capture(self.pg_interfaces)
                 self.pg_start()
                 capture = self.pg1.get_capture(len(pkts))
                 self.pg_enable_capture(self.pg_interfaces)
                 self.pg_start()
                 capture = self.pg1.get_capture(len(pkts))
-                self.verify_capture_out(capture, nat_ip=self.pg0.remote_ip4,
-                                        same_port=True)
+                self.verify_capture_out(
+                    capture, nat_ip=self.pg0.remote_ip4, same_port=True
+                )
             finally:
                 self.pg0.remote_hosts[0] = host0
 
             user = self.pg0.remote_hosts[1]
             sessions = self.vapi.nat44_user_session_dump(user.ip4, 0)
             self.assertEqual(len(sessions), 3)
             finally:
                 self.pg0.remote_hosts[0] = host0
 
             user = self.pg0.remote_hosts[1]
             sessions = self.vapi.nat44_user_session_dump(user.ip4, 0)
             self.assertEqual(len(sessions), 3)
-            self.assertTrue(sessions[0].flags &
-                            self.config_flags.NAT_IS_EXT_HOST_VALID)
+            self.assertTrue(sessions[0].flags & self.config_flags.NAT_IS_EXT_HOST_VALID)
             self.vapi.nat44_del_session(
                 address=sessions[0].inside_ip_address,
                 port=sessions[0].inside_port,
                 protocol=sessions[0].protocol,
             self.vapi.nat44_del_session(
                 address=sessions[0].inside_ip_address,
                 port=sessions[0].inside_port,
                 protocol=sessions[0].protocol,
-                flags=(self.config_flags.NAT_IS_INSIDE |
-                       self.config_flags.NAT_IS_EXT_HOST_VALID),
+                flags=(
+                    self.config_flags.NAT_IS_INSIDE
+                    | self.config_flags.NAT_IS_EXT_HOST_VALID
+                ),
                 ext_host_address=sessions[0].ext_host_address,
                 ext_host_address=sessions[0].ext_host_address,
-                ext_host_port=sessions[0].ext_host_port)
+                ext_host_port=sessions[0].ext_host_port,
+            )
             sessions = self.vapi.nat44_user_session_dump(user.ip4, 0)
             self.assertEqual(len(sessions), 2)
 
             sessions = self.vapi.nat44_user_session_dump(user.ip4, 0)
             self.assertEqual(len(sessions), 2)
 
@@ -1194,16 +1285,17 @@ class TestNAT44ED(VppTestCase):
                 local_ip_address=real_ip,
                 external_ip_address=alias_ip,
                 external_sw_if_index=0xFFFFFFFF,
                 local_ip_address=real_ip,
                 external_ip_address=alias_ip,
                 external_sw_if_index=0xFFFFFFFF,
-                flags=flags)
+                flags=flags,
+            )
 
     def test_output_feature_and_service2(self):
 
     def test_output_feature_and_service2(self):
-        """ NAT44ED interface output feature and service host direct access """
+        """NAT44ED interface output feature and service host direct access"""
         self.vapi.nat44_forwarding_enable_disable(enable=1)
         self.nat_add_address(self.nat_addr)
 
         self.vapi.nat44_ed_add_del_output_interface(
         self.vapi.nat44_forwarding_enable_disable(enable=1)
         self.nat_add_address(self.nat_addr)
 
         self.vapi.nat44_ed_add_del_output_interface(
-            sw_if_index=self.pg1.sw_if_index,
-            is_add=1)
+            sw_if_index=self.pg1.sw_if_index, is_add=1
+        )
 
         # session initiated from service host - translate
         pkts = self.create_stream_in(self.pg0, self.pg1)
 
         # session initiated from service host - translate
         pkts = self.create_stream_in(self.pg0, self.pg1)
@@ -1230,9 +1322,9 @@ class TestNAT44ED(VppTestCase):
         self.icmp_id_in = 60305
 
         try:
         self.icmp_id_in = 60305
 
         try:
-            pkts = self.create_stream_out(self.pg1,
-                                          self.pg0.remote_ip4,
-                                          use_inside_ports=True)
+            pkts = self.create_stream_out(
+                self.pg1, self.pg0.remote_ip4, use_inside_ports=True
+            )
             self.pg1.add_stream(pkts)
             self.pg_enable_capture(self.pg_interfaces)
             self.pg_start()
             self.pg1.add_stream(pkts)
             self.pg_enable_capture(self.pg_interfaces)
             self.pg_start()
@@ -1244,40 +1336,37 @@ class TestNAT44ED(VppTestCase):
             self.pg_enable_capture(self.pg_interfaces)
             self.pg_start()
             capture = self.pg1.get_capture(len(pkts))
             self.pg_enable_capture(self.pg_interfaces)
             self.pg_start()
             capture = self.pg1.get_capture(len(pkts))
-            self.verify_capture_out(capture, nat_ip=self.pg0.remote_ip4,
-                                    same_port=True)
+            self.verify_capture_out(capture, nat_ip=self.pg0.remote_ip4, same_port=True)
         finally:
             self.tcp_port_in = tcp_port_in
             self.udp_port_in = udp_port_in
             self.icmp_id_in = icmp_id_in
 
     def test_twice_nat(self):
         finally:
             self.tcp_port_in = tcp_port_in
             self.udp_port_in = udp_port_in
             self.icmp_id_in = icmp_id_in
 
     def test_twice_nat(self):
-        """ NAT44ED Twice NAT """
+        """NAT44ED Twice NAT"""
         self.twice_nat_common()
 
     def test_self_twice_nat_positive(self):
         self.twice_nat_common()
 
     def test_self_twice_nat_positive(self):
-        """ NAT44ED Self Twice NAT (positive test) """
+        """NAT44ED Self Twice NAT (positive test)"""
         self.twice_nat_common(self_twice_nat=True, same_pg=True)
 
     def test_self_twice_nat_lb_positive(self):
         self.twice_nat_common(self_twice_nat=True, same_pg=True)
 
     def test_self_twice_nat_lb_positive(self):
-        """ NAT44ED Self Twice NAT local service load balancing (positive test)
-        """
-        self.twice_nat_common(lb=True, self_twice_nat=True, same_pg=True,
-                              client_id=1)
+        """NAT44ED Self Twice NAT local service load balancing (positive test)"""
+        self.twice_nat_common(lb=True, self_twice_nat=True, same_pg=True, client_id=1)
 
     def test_twice_nat_lb(self):
 
     def test_twice_nat_lb(self):
-        """ NAT44ED Twice NAT local service load balancing """
+        """NAT44ED Twice NAT local service load balancing"""
         self.twice_nat_common(lb=True)
 
     def test_output_feature(self):
         self.twice_nat_common(lb=True)
 
     def test_output_feature(self):
-        """ NAT44ED interface output feature (in2out postrouting) """
+        """NAT44ED interface output feature (in2out postrouting)"""
         self.vapi.nat44_forwarding_enable_disable(enable=1)
         self.nat_add_address(self.nat_addr)
 
         self.nat_add_outside_interface(self.pg0)
         self.vapi.nat44_ed_add_del_output_interface(
         self.vapi.nat44_forwarding_enable_disable(enable=1)
         self.nat_add_address(self.nat_addr)
 
         self.nat_add_outside_interface(self.pg0)
         self.vapi.nat44_ed_add_del_output_interface(
-            sw_if_index=self.pg1.sw_if_index,
-            is_add=1)
+            sw_if_index=self.pg1.sw_if_index, is_add=1
+        )
 
         # in2out
         pkts = self.create_stream_in(self.pg0, self.pg1)
 
         # in2out
         pkts = self.create_stream_in(self.pg0, self.pg1)
@@ -1323,24 +1412,31 @@ class TestNAT44ED(VppTestCase):
             self.assertEqual(p[ICMP].type, 11)  # 11 == time-exceeded
 
     def test_static_with_port_out2(self):
             self.assertEqual(p[ICMP].type, 11)  # 11 == time-exceeded
 
     def test_static_with_port_out2(self):
-        """ NAT44ED 1:1 NAPT asymmetrical rule """
+        """NAT44ED 1:1 NAPT asymmetrical rule"""
 
         external_port = 80
         local_port = 8080
 
         self.vapi.nat44_forwarding_enable_disable(enable=1)
         flags = self.config_flags.NAT_IS_OUT2IN_ONLY
 
         external_port = 80
         local_port = 8080
 
         self.vapi.nat44_forwarding_enable_disable(enable=1)
         flags = self.config_flags.NAT_IS_OUT2IN_ONLY
-        self.nat_add_static_mapping(self.pg0.remote_ip4, self.nat_addr,
-                                    local_port, external_port,
-                                    proto=IP_PROTOS.tcp, flags=flags)
+        self.nat_add_static_mapping(
+            self.pg0.remote_ip4,
+            self.nat_addr,
+            local_port,
+            external_port,
+            proto=IP_PROTOS.tcp,
+            flags=flags,
+        )
 
         self.nat_add_inside_interface(self.pg0)
         self.nat_add_outside_interface(self.pg1)
 
         # from client to service
 
         self.nat_add_inside_interface(self.pg0)
         self.nat_add_outside_interface(self.pg1)
 
         # from client to service
-        p = (Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac) /
-             IP(src=self.pg1.remote_ip4, dst=self.nat_addr) /
-             TCP(sport=12345, dport=external_port))
+        p = (
+            Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
+            / IP(src=self.pg1.remote_ip4, dst=self.nat_addr)
+            / TCP(sport=12345, dport=external_port)
+        )
         self.pg1.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg1.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -1357,9 +1453,12 @@ class TestNAT44ED(VppTestCase):
             raise
 
         # ICMP error
             raise
 
         # ICMP error
-        p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-             IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4) /
-             ICMP(type=11) / capture[0][IP])
+        p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4)
+            / ICMP(type=11)
+            / capture[0][IP]
+        )
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -1375,9 +1474,11 @@ class TestNAT44ED(VppTestCase):
             raise
 
         # from service back to client
             raise
 
         # from service back to client
-        p = (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-             IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4) /
-             TCP(sport=local_port, dport=12345))
+        p = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4)
+            / TCP(sport=local_port, dport=12345)
+        )
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -1394,9 +1495,12 @@ class TestNAT44ED(VppTestCase):
             raise
 
         # ICMP error
             raise
 
         # ICMP error
-        p = (Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac) /
-             IP(src=self.pg1.remote_ip4, dst=self.nat_addr) /
-             ICMP(type=11) / capture[0][IP])
+        p = (
+            Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac)
+            / IP(src=self.pg1.remote_ip4, dst=self.nat_addr)
+            / ICMP(type=11)
+            / capture[0][IP]
+        )
         self.pg1.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg1.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -1412,9 +1516,11 @@ class TestNAT44ED(VppTestCase):
             raise
 
         # from client to server (no translation)
             raise
 
         # from client to server (no translation)
-        p = (Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac) /
-             IP(src=self.pg1.remote_ip4, dst=self.pg0.remote_ip4) /
-             TCP(sport=12346, dport=local_port))
+        p = (
+            Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
+            / IP(src=self.pg1.remote_ip4, dst=self.pg0.remote_ip4)
+            / TCP(sport=12346, dport=local_port)
+        )
         self.pg1.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg1.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -1431,9 +1537,11 @@ class TestNAT44ED(VppTestCase):
             raise
 
         # from service back to client (no translation)
             raise
 
         # from service back to client (no translation)
-        p = (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-             IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4) /
-             TCP(sport=local_port, dport=12346))
+        p = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4)
+            / TCP(sport=local_port, dport=12346)
+        )
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -1450,21 +1558,17 @@ class TestNAT44ED(VppTestCase):
             raise
 
     def test_static_lb(self):
             raise
 
     def test_static_lb(self):
-        """ NAT44ED local service load balancing """
+        """NAT44ED local service load balancing"""
         external_addr_n = self.nat_addr
         external_port = 80
         local_port = 8080
         server1 = self.pg0.remote_hosts[0]
         server2 = self.pg0.remote_hosts[1]
 
         external_addr_n = self.nat_addr
         external_port = 80
         local_port = 8080
         server1 = self.pg0.remote_hosts[0]
         server2 = self.pg0.remote_hosts[1]
 
-        locals = [{'addr': server1.ip4,
-                   'port': local_port,
-                   'probability': 70,
-                   'vrf_id': 0},
-                  {'addr': server2.ip4,
-                   'port': local_port,
-                   'probability': 30,
-                   'vrf_id': 0}]
+        locals = [
+            {"addr": server1.ip4, "port": local_port, "probability": 70, "vrf_id": 0},
+            {"addr": server2.ip4, "port": local_port, "probability": 30, "vrf_id": 0},
+        ]
 
         self.nat_add_address(self.nat_addr)
         self.vapi.nat44_add_del_lb_static_mapping(
 
         self.nat_add_address(self.nat_addr)
         self.vapi.nat44_add_del_lb_static_mapping(
@@ -1473,19 +1577,22 @@ class TestNAT44ED(VppTestCase):
             external_port=external_port,
             protocol=IP_PROTOS.tcp,
             local_num=len(locals),
             external_port=external_port,
             protocol=IP_PROTOS.tcp,
             local_num=len(locals),
-            locals=locals)
+            locals=locals,
+        )
         flags = self.config_flags.NAT_IS_INSIDE
         self.vapi.nat44_interface_add_del_feature(
         flags = self.config_flags.NAT_IS_INSIDE
         self.vapi.nat44_interface_add_del_feature(
-            sw_if_index=self.pg0.sw_if_index,
-            flags=flags, is_add=1)
+            sw_if_index=self.pg0.sw_if_index, flags=flags, is_add=1
+        )
         self.vapi.nat44_interface_add_del_feature(
         self.vapi.nat44_interface_add_del_feature(
-            sw_if_index=self.pg1.sw_if_index,
-            is_add=1)
+            sw_if_index=self.pg1.sw_if_index, is_add=1
+        )
 
         # from client to service
 
         # from client to service
-        p = (Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac) /
-             IP(src=self.pg1.remote_ip4, dst=self.nat_addr) /
-             TCP(sport=12345, dport=external_port))
+        p = (
+            Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
+            / IP(src=self.pg1.remote_ip4, dst=self.nat_addr)
+            / TCP(sport=12345, dport=external_port)
+        )
         self.pg1.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg1.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -1507,9 +1614,11 @@ class TestNAT44ED(VppTestCase):
             raise
 
         # from service back to client
             raise
 
         # from service back to client
-        p = (Ether(src=server.mac, dst=self.pg0.local_mac) /
-             IP(src=server.ip4, dst=self.pg1.remote_ip4) /
-             TCP(sport=local_port, dport=12345))
+        p = (
+            Ether(src=server.mac, dst=self.pg0.local_mac)
+            / IP(src=server.ip4, dst=self.pg1.remote_ip4)
+            / TCP(sport=local_port, dport=12345)
+        )
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -1527,56 +1636,59 @@ class TestNAT44ED(VppTestCase):
 
         sessions = self.vapi.nat44_user_session_dump(server.ip4, 0)
         self.assertEqual(len(sessions), 1)
 
         sessions = self.vapi.nat44_user_session_dump(server.ip4, 0)
         self.assertEqual(len(sessions), 1)
-        self.assertTrue(sessions[0].flags &
-                        self.config_flags.NAT_IS_EXT_HOST_VALID)
+        self.assertTrue(sessions[0].flags & self.config_flags.NAT_IS_EXT_HOST_VALID)
         self.vapi.nat44_del_session(
             address=sessions[0].inside_ip_address,
             port=sessions[0].inside_port,
             protocol=sessions[0].protocol,
         self.vapi.nat44_del_session(
             address=sessions[0].inside_ip_address,
             port=sessions[0].inside_port,
             protocol=sessions[0].protocol,
-            flags=(self.config_flags.NAT_IS_INSIDE |
-                   self.config_flags.NAT_IS_EXT_HOST_VALID),
+            flags=(
+                self.config_flags.NAT_IS_INSIDE
+                | self.config_flags.NAT_IS_EXT_HOST_VALID
+            ),
             ext_host_address=sessions[0].ext_host_address,
             ext_host_address=sessions[0].ext_host_address,
-            ext_host_port=sessions[0].ext_host_port)
+            ext_host_port=sessions[0].ext_host_port,
+        )
         sessions = self.vapi.nat44_user_session_dump(server.ip4, 0)
         self.assertEqual(len(sessions), 0)
 
     def test_static_lb_2(self):
         sessions = self.vapi.nat44_user_session_dump(server.ip4, 0)
         self.assertEqual(len(sessions), 0)
 
     def test_static_lb_2(self):
-        """ NAT44ED local service load balancing (asymmetrical rule) """
+        """NAT44ED local service load balancing (asymmetrical rule)"""
         external_addr = self.nat_addr
         external_port = 80
         local_port = 8080
         server1 = self.pg0.remote_hosts[0]
         server2 = self.pg0.remote_hosts[1]
 
         external_addr = self.nat_addr
         external_port = 80
         local_port = 8080
         server1 = self.pg0.remote_hosts[0]
         server2 = self.pg0.remote_hosts[1]
 
-        locals = [{'addr': server1.ip4,
-                   'port': local_port,
-                   'probability': 70,
-                   'vrf_id': 0},
-                  {'addr': server2.ip4,
-                   'port': local_port,
-                   'probability': 30,
-                   'vrf_id': 0}]
+        locals = [
+            {"addr": server1.ip4, "port": local_port, "probability": 70, "vrf_id": 0},
+            {"addr": server2.ip4, "port": local_port, "probability": 30, "vrf_id": 0},
+        ]
 
         self.vapi.nat44_forwarding_enable_disable(enable=1)
         flags = self.config_flags.NAT_IS_OUT2IN_ONLY
 
         self.vapi.nat44_forwarding_enable_disable(enable=1)
         flags = self.config_flags.NAT_IS_OUT2IN_ONLY
-        self.vapi.nat44_add_del_lb_static_mapping(is_add=1, flags=flags,
-                                                  external_addr=external_addr,
-                                                  external_port=external_port,
-                                                  protocol=IP_PROTOS.tcp,
-                                                  local_num=len(locals),
-                                                  locals=locals)
+        self.vapi.nat44_add_del_lb_static_mapping(
+            is_add=1,
+            flags=flags,
+            external_addr=external_addr,
+            external_port=external_port,
+            protocol=IP_PROTOS.tcp,
+            local_num=len(locals),
+            locals=locals,
+        )
         flags = self.config_flags.NAT_IS_INSIDE
         self.vapi.nat44_interface_add_del_feature(
         flags = self.config_flags.NAT_IS_INSIDE
         self.vapi.nat44_interface_add_del_feature(
-            sw_if_index=self.pg0.sw_if_index,
-            flags=flags, is_add=1)
+            sw_if_index=self.pg0.sw_if_index, flags=flags, is_add=1
+        )
         self.vapi.nat44_interface_add_del_feature(
         self.vapi.nat44_interface_add_del_feature(
-            sw_if_index=self.pg1.sw_if_index,
-            is_add=1)
+            sw_if_index=self.pg1.sw_if_index, is_add=1
+        )
 
         # from client to service
 
         # from client to service
-        p = (Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac) /
-             IP(src=self.pg1.remote_ip4, dst=self.nat_addr) /
-             TCP(sport=12345, dport=external_port))
+        p = (
+            Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
+            / IP(src=self.pg1.remote_ip4, dst=self.nat_addr)
+            / TCP(sport=12345, dport=external_port)
+        )
         self.pg1.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg1.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -1598,9 +1710,11 @@ class TestNAT44ED(VppTestCase):
             raise
 
         # from service back to client
             raise
 
         # from service back to client
-        p = (Ether(src=server.mac, dst=self.pg0.local_mac) /
-             IP(src=server.ip4, dst=self.pg1.remote_ip4) /
-             TCP(sport=local_port, dport=12345))
+        p = (
+            Ether(src=server.mac, dst=self.pg0.local_mac)
+            / IP(src=server.ip4, dst=self.pg1.remote_ip4)
+            / TCP(sport=local_port, dport=12345)
+        )
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -1617,9 +1731,11 @@ class TestNAT44ED(VppTestCase):
             raise
 
         # from client to server (no translation)
             raise
 
         # from client to server (no translation)
-        p = (Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac) /
-             IP(src=self.pg1.remote_ip4, dst=server1.ip4) /
-             TCP(sport=12346, dport=local_port))
+        p = (
+            Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
+            / IP(src=self.pg1.remote_ip4, dst=server1.ip4)
+            / TCP(sport=12346, dport=local_port)
+        )
         self.pg1.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg1.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -1637,9 +1753,11 @@ class TestNAT44ED(VppTestCase):
             raise
 
         # from service back to client (no translation)
             raise
 
         # from service back to client (no translation)
-        p = (Ether(src=server1.mac, dst=self.pg0.local_mac) /
-             IP(src=server1.ip4, dst=self.pg1.remote_ip4) /
-             TCP(sport=local_port, dport=12346))
+        p = (
+            Ether(src=server1.mac, dst=self.pg0.local_mac)
+            / IP(src=server1.ip4, dst=self.pg1.remote_ip4)
+            / TCP(sport=local_port, dport=12346)
+        )
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -1656,41 +1774,41 @@ class TestNAT44ED(VppTestCase):
             raise
 
     def test_lb_affinity(self):
             raise
 
     def test_lb_affinity(self):
-        """ NAT44ED local service load balancing affinity """
+        """NAT44ED local service load balancing affinity"""
         external_addr = self.nat_addr
         external_port = 80
         local_port = 8080
         server1 = self.pg0.remote_hosts[0]
         server2 = self.pg0.remote_hosts[1]
 
         external_addr = self.nat_addr
         external_port = 80
         local_port = 8080
         server1 = self.pg0.remote_hosts[0]
         server2 = self.pg0.remote_hosts[1]
 
-        locals = [{'addr': server1.ip4,
-                   'port': local_port,
-                   'probability': 50,
-                   'vrf_id': 0},
-                  {'addr': server2.ip4,
-                   'port': local_port,
-                   'probability': 50,
-                   'vrf_id': 0}]
+        locals = [
+            {"addr": server1.ip4, "port": local_port, "probability": 50, "vrf_id": 0},
+            {"addr": server2.ip4, "port": local_port, "probability": 50, "vrf_id": 0},
+        ]
 
         self.nat_add_address(self.nat_addr)
 
         self.nat_add_address(self.nat_addr)
-        self.vapi.nat44_add_del_lb_static_mapping(is_add=1,
-                                                  external_addr=external_addr,
-                                                  external_port=external_port,
-                                                  protocol=IP_PROTOS.tcp,
-                                                  affinity=10800,
-                                                  local_num=len(locals),
-                                                  locals=locals)
+        self.vapi.nat44_add_del_lb_static_mapping(
+            is_add=1,
+            external_addr=external_addr,
+            external_port=external_port,
+            protocol=IP_PROTOS.tcp,
+            affinity=10800,
+            local_num=len(locals),
+            locals=locals,
+        )
         flags = self.config_flags.NAT_IS_INSIDE
         self.vapi.nat44_interface_add_del_feature(
         flags = self.config_flags.NAT_IS_INSIDE
         self.vapi.nat44_interface_add_del_feature(
-            sw_if_index=self.pg0.sw_if_index,
-            flags=flags, is_add=1)
+            sw_if_index=self.pg0.sw_if_index, flags=flags, is_add=1
+        )
         self.vapi.nat44_interface_add_del_feature(
         self.vapi.nat44_interface_add_del_feature(
-            sw_if_index=self.pg1.sw_if_index,
-            is_add=1)
+            sw_if_index=self.pg1.sw_if_index, is_add=1
+        )
 
 
-        p = (Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac) /
-             IP(src=self.pg1.remote_ip4, dst=self.nat_addr) /
-             TCP(sport=1025, dport=external_port))
+        p = (
+            Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac)
+            / IP(src=self.pg1.remote_ip4, dst=self.nat_addr)
+            / TCP(sport=1025, dport=external_port)
+        )
         self.pg1.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg1.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -1699,22 +1817,26 @@ class TestNAT44ED(VppTestCase):
 
         sessions = self.vapi.nat44_user_session_dump(backend, 0)
         self.assertEqual(len(sessions), 1)
 
         sessions = self.vapi.nat44_user_session_dump(backend, 0)
         self.assertEqual(len(sessions), 1)
-        self.assertTrue(sessions[0].flags &
-                        self.config_flags.NAT_IS_EXT_HOST_VALID)
+        self.assertTrue(sessions[0].flags & self.config_flags.NAT_IS_EXT_HOST_VALID)
         self.vapi.nat44_del_session(
             address=sessions[0].inside_ip_address,
             port=sessions[0].inside_port,
             protocol=sessions[0].protocol,
         self.vapi.nat44_del_session(
             address=sessions[0].inside_ip_address,
             port=sessions[0].inside_port,
             protocol=sessions[0].protocol,
-            flags=(self.config_flags.NAT_IS_INSIDE |
-                   self.config_flags.NAT_IS_EXT_HOST_VALID),
+            flags=(
+                self.config_flags.NAT_IS_INSIDE
+                | self.config_flags.NAT_IS_EXT_HOST_VALID
+            ),
             ext_host_address=sessions[0].ext_host_address,
             ext_host_address=sessions[0].ext_host_address,
-            ext_host_port=sessions[0].ext_host_port)
+            ext_host_port=sessions[0].ext_host_port,
+        )
 
         pkts = []
         for port in range(1030, 1100):
 
         pkts = []
         for port in range(1030, 1100):
-            p = (Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac) /
-                 IP(src=self.pg1.remote_ip4, dst=self.nat_addr) /
-                 TCP(sport=port, dport=external_port))
+            p = (
+                Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac)
+                / IP(src=self.pg1.remote_ip4, dst=self.nat_addr)
+                / TCP(sport=port, dport=external_port)
+            )
             pkts.append(p)
         self.pg1.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
             pkts.append(p)
         self.pg1.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
@@ -1724,31 +1846,39 @@ class TestNAT44ED(VppTestCase):
             self.assertEqual(p[IP].dst, backend)
 
     def test_multiple_vrf_1(self):
             self.assertEqual(p[IP].dst, backend)
 
     def test_multiple_vrf_1(self):
-        """ Multiple VRF - both client & service in VRF1 """
+        """Multiple VRF - both client & service in VRF1"""
 
 
-        external_addr = '1.2.3.4'
+        external_addr = "1.2.3.4"
         external_port = 80
         local_port = 8080
         port = 0
 
         flags = self.config_flags.NAT_IS_INSIDE
         self.vapi.nat44_interface_add_del_feature(
         external_port = 80
         local_port = 8080
         port = 0
 
         flags = self.config_flags.NAT_IS_INSIDE
         self.vapi.nat44_interface_add_del_feature(
-            sw_if_index=self.pg5.sw_if_index,
-            is_add=1)
+            sw_if_index=self.pg5.sw_if_index, is_add=1
+        )
         self.vapi.nat44_interface_add_del_feature(
         self.vapi.nat44_interface_add_del_feature(
-            sw_if_index=self.pg5.sw_if_index,
-            is_add=1, flags=flags)
+            sw_if_index=self.pg5.sw_if_index, is_add=1, flags=flags
+        )
         self.vapi.nat44_interface_add_del_feature(
         self.vapi.nat44_interface_add_del_feature(
-            sw_if_index=self.pg6.sw_if_index,
-            is_add=1)
+            sw_if_index=self.pg6.sw_if_index, is_add=1
+        )
         flags = self.config_flags.NAT_IS_OUT2IN_ONLY
         flags = self.config_flags.NAT_IS_OUT2IN_ONLY
-        self.nat_add_static_mapping(self.pg5.remote_ip4, external_addr,
-                                    local_port, external_port, vrf_id=1,
-                                    proto=IP_PROTOS.tcp, flags=flags)
+        self.nat_add_static_mapping(
+            self.pg5.remote_ip4,
+            external_addr,
+            local_port,
+            external_port,
+            vrf_id=1,
+            proto=IP_PROTOS.tcp,
+            flags=flags,
+        )
 
 
-        p = (Ether(src=self.pg6.remote_mac, dst=self.pg6.local_mac) /
-             IP(src=self.pg6.remote_ip4, dst=external_addr) /
-             TCP(sport=12345, dport=external_port))
+        p = (
+            Ether(src=self.pg6.remote_mac, dst=self.pg6.local_mac)
+            / IP(src=self.pg6.remote_ip4, dst=external_addr)
+            / TCP(sport=12345, dport=external_port)
+        )
         self.pg6.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg6.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -1764,9 +1894,11 @@ class TestNAT44ED(VppTestCase):
             self.logger.error(ppp("Unexpected or invalid packet:", p))
             raise
 
             self.logger.error(ppp("Unexpected or invalid packet:", p))
             raise
 
-        p = (Ether(src=self.pg5.remote_mac, dst=self.pg5.local_mac) /
-             IP(src=self.pg5.remote_ip4, dst=self.pg6.remote_ip4) /
-             TCP(sport=local_port, dport=12345))
+        p = (
+            Ether(src=self.pg5.remote_mac, dst=self.pg5.local_mac)
+            / IP(src=self.pg5.remote_ip4, dst=self.pg6.remote_ip4)
+            / TCP(sport=local_port, dport=12345)
+        )
         self.pg5.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg5.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -1783,9 +1915,9 @@ class TestNAT44ED(VppTestCase):
             raise
 
     def test_multiple_vrf_2(self):
             raise
 
     def test_multiple_vrf_2(self):
-        """ Multiple VRF - dynamic NAT from VRF1 to VRF0 (output-feature) """
+        """Multiple VRF - dynamic NAT from VRF1 to VRF0 (output-feature)"""
 
 
-        external_addr = '1.2.3.4'
+        external_addr = "1.2.3.4"
         external_port = 80
         local_port = 8080
         port = 0
         external_port = 80
         local_port = 8080
         port = 0
@@ -1793,22 +1925,30 @@ class TestNAT44ED(VppTestCase):
         self.nat_add_address(self.nat_addr)
         flags = self.config_flags.NAT_IS_INSIDE
         self.vapi.nat44_ed_add_del_output_interface(
         self.nat_add_address(self.nat_addr)
         flags = self.config_flags.NAT_IS_INSIDE
         self.vapi.nat44_ed_add_del_output_interface(
-            sw_if_index=self.pg1.sw_if_index,
-            is_add=1)
+            sw_if_index=self.pg1.sw_if_index, is_add=1
+        )
         self.vapi.nat44_interface_add_del_feature(
         self.vapi.nat44_interface_add_del_feature(
-            sw_if_index=self.pg5.sw_if_index,
-            is_add=1)
+            sw_if_index=self.pg5.sw_if_index, is_add=1
+        )
         self.vapi.nat44_interface_add_del_feature(
         self.vapi.nat44_interface_add_del_feature(
-            sw_if_index=self.pg5.sw_if_index,
-            is_add=1, flags=flags)
+            sw_if_index=self.pg5.sw_if_index, is_add=1, flags=flags
+        )
         flags = self.config_flags.NAT_IS_OUT2IN_ONLY
         flags = self.config_flags.NAT_IS_OUT2IN_ONLY
-        self.nat_add_static_mapping(self.pg5.remote_ip4, external_addr,
-                                    local_port, external_port, vrf_id=1,
-                                    proto=IP_PROTOS.tcp, flags=flags)
+        self.nat_add_static_mapping(
+            self.pg5.remote_ip4,
+            external_addr,
+            local_port,
+            external_port,
+            vrf_id=1,
+            proto=IP_PROTOS.tcp,
+            flags=flags,
+        )
 
 
-        p = (Ether(src=self.pg5.remote_mac, dst=self.pg5.local_mac) /
-             IP(src=self.pg5.remote_ip4, dst=self.pg1.remote_ip4) /
-             TCP(sport=2345, dport=22))
+        p = (
+            Ether(src=self.pg5.remote_mac, dst=self.pg5.local_mac)
+            / IP(src=self.pg5.remote_ip4, dst=self.pg1.remote_ip4)
+            / TCP(sport=2345, dport=22)
+        )
         self.pg5.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg5.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -1824,9 +1964,11 @@ class TestNAT44ED(VppTestCase):
             self.logger.error(ppp("Unexpected or invalid packet:", p))
             raise
 
             self.logger.error(ppp("Unexpected or invalid packet:", p))
             raise
 
-        p = (Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac) /
-             IP(src=self.pg1.remote_ip4, dst=self.nat_addr) /
-             TCP(sport=22, dport=port))
+        p = (
+            Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
+            / IP(src=self.pg1.remote_ip4, dst=self.nat_addr)
+            / TCP(sport=22, dport=port)
+        )
         self.pg1.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg1.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -1843,23 +1985,23 @@ class TestNAT44ED(VppTestCase):
             raise
 
     def test_multiple_vrf_3(self):
             raise
 
     def test_multiple_vrf_3(self):
-        """ Multiple VRF - client in VRF1, service in VRF0 """
+        """Multiple VRF - client in VRF1, service in VRF0"""
 
 
-        external_addr = '1.2.3.4'
+        external_addr = "1.2.3.4"
         external_port = 80
         local_port = 8080
         port = 0
 
         flags = self.config_flags.NAT_IS_INSIDE
         self.vapi.nat44_interface_add_del_feature(
         external_port = 80
         local_port = 8080
         port = 0
 
         flags = self.config_flags.NAT_IS_INSIDE
         self.vapi.nat44_interface_add_del_feature(
-            sw_if_index=self.pg0.sw_if_index,
-            is_add=1)
+            sw_if_index=self.pg0.sw_if_index, is_add=1
+        )
         self.vapi.nat44_interface_add_del_feature(
         self.vapi.nat44_interface_add_del_feature(
-            sw_if_index=self.pg0.sw_if_index,
-            is_add=1, flags=flags)
+            sw_if_index=self.pg0.sw_if_index, is_add=1, flags=flags
+        )
         self.vapi.nat44_interface_add_del_feature(
         self.vapi.nat44_interface_add_del_feature(
-            sw_if_index=self.pg6.sw_if_index,
-            is_add=1)
+            sw_if_index=self.pg6.sw_if_index, is_add=1
+        )
         flags = self.config_flags.NAT_IS_OUT2IN_ONLY
         self.nat_add_static_mapping(
             self.pg0.remote_ip4,
         flags = self.config_flags.NAT_IS_OUT2IN_ONLY
         self.nat_add_static_mapping(
             self.pg0.remote_ip4,
@@ -1868,13 +2010,15 @@ class TestNAT44ED(VppTestCase):
             vrf_id=0,
             external_port=external_port,
             proto=IP_PROTOS.tcp,
             vrf_id=0,
             external_port=external_port,
             proto=IP_PROTOS.tcp,
-            flags=flags
+            flags=flags,
         )
 
         # from client VRF1 to service VRF0
         )
 
         # from client VRF1 to service VRF0
-        p = (Ether(src=self.pg6.remote_mac, dst=self.pg6.local_mac) /
-             IP(src=self.pg6.remote_ip4, dst=self.pg0.local_ip4) /
-             TCP(sport=12346, dport=external_port))
+        p = (
+            Ether(src=self.pg6.remote_mac, dst=self.pg6.local_mac)
+            / IP(src=self.pg6.remote_ip4, dst=self.pg0.local_ip4)
+            / TCP(sport=12346, dport=external_port)
+        )
         self.pg6.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg6.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -1891,9 +2035,11 @@ class TestNAT44ED(VppTestCase):
             raise
 
         # from service VRF0 back to client VRF1
             raise
 
         # from service VRF0 back to client VRF1
-        p = (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-             IP(src=self.pg0.remote_ip4, dst=self.pg6.remote_ip4) /
-             TCP(sport=local_port, dport=12346))
+        p = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg6.remote_ip4)
+            / TCP(sport=local_port, dport=12346)
+        )
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -1910,35 +2056,43 @@ class TestNAT44ED(VppTestCase):
             raise
 
     def test_multiple_vrf_4(self):
             raise
 
     def test_multiple_vrf_4(self):
-        """ Multiple VRF - client in VRF0, service in VRF1 """
+        """Multiple VRF - client in VRF0, service in VRF1"""
 
 
-        external_addr = '1.2.3.4'
+        external_addr = "1.2.3.4"
         external_port = 80
         local_port = 8080
         port = 0
 
         flags = self.config_flags.NAT_IS_INSIDE
         self.vapi.nat44_interface_add_del_feature(
         external_port = 80
         local_port = 8080
         port = 0
 
         flags = self.config_flags.NAT_IS_INSIDE
         self.vapi.nat44_interface_add_del_feature(
-            sw_if_index=self.pg0.sw_if_index,
-            is_add=1)
+            sw_if_index=self.pg0.sw_if_index, is_add=1
+        )
         self.vapi.nat44_interface_add_del_feature(
         self.vapi.nat44_interface_add_del_feature(
-            sw_if_index=self.pg0.sw_if_index,
-            is_add=1, flags=flags)
+            sw_if_index=self.pg0.sw_if_index, is_add=1, flags=flags
+        )
         self.vapi.nat44_interface_add_del_feature(
         self.vapi.nat44_interface_add_del_feature(
-            sw_if_index=self.pg5.sw_if_index,
-            is_add=1)
+            sw_if_index=self.pg5.sw_if_index, is_add=1
+        )
         self.vapi.nat44_interface_add_del_feature(
         self.vapi.nat44_interface_add_del_feature(
-            sw_if_index=self.pg5.sw_if_index,
-            is_add=1, flags=flags)
+            sw_if_index=self.pg5.sw_if_index, is_add=1, flags=flags
+        )
         flags = self.config_flags.NAT_IS_OUT2IN_ONLY
         flags = self.config_flags.NAT_IS_OUT2IN_ONLY
-        self.nat_add_static_mapping(self.pg5.remote_ip4, external_addr,
-                                    local_port, external_port, vrf_id=1,
-                                    proto=IP_PROTOS.tcp, flags=flags)
+        self.nat_add_static_mapping(
+            self.pg5.remote_ip4,
+            external_addr,
+            local_port,
+            external_port,
+            vrf_id=1,
+            proto=IP_PROTOS.tcp,
+            flags=flags,
+        )
 
         # from client VRF0 to service VRF1
 
         # from client VRF0 to service VRF1
-        p = (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-             IP(src=self.pg0.remote_ip4, dst=external_addr) /
-             TCP(sport=12347, dport=external_port))
+        p = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg0.remote_ip4, dst=external_addr)
+            / TCP(sport=12347, dport=external_port)
+        )
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -1955,9 +2109,11 @@ class TestNAT44ED(VppTestCase):
             raise
 
         # from service VRF1 back to client VRF0
             raise
 
         # from service VRF1 back to client VRF0
-        p = (Ether(src=self.pg5.remote_mac, dst=self.pg5.local_mac) /
-             IP(src=self.pg5.remote_ip4, dst=self.pg0.remote_ip4) /
-             TCP(sport=local_port, dport=12347))
+        p = (
+            Ether(src=self.pg5.remote_mac, dst=self.pg5.local_mac)
+            / IP(src=self.pg5.remote_ip4, dst=self.pg0.remote_ip4)
+            / TCP(sport=local_port, dport=12347)
+        )
         self.pg5.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg5.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -1974,9 +2130,9 @@ class TestNAT44ED(VppTestCase):
             raise
 
     def test_multiple_vrf_5(self):
             raise
 
     def test_multiple_vrf_5(self):
-        """ Multiple VRF - forwarding - no translation """
+        """Multiple VRF - forwarding - no translation"""
 
 
-        external_addr = '1.2.3.4'
+        external_addr = "1.2.3.4"
         external_port = 80
         local_port = 8080
         port = 0
         external_port = 80
         local_port = 8080
         port = 0
@@ -1984,24 +2140,30 @@ class TestNAT44ED(VppTestCase):
         self.vapi.nat44_forwarding_enable_disable(enable=1)
         flags = self.config_flags.NAT_IS_INSIDE
         self.vapi.nat44_interface_add_del_feature(
         self.vapi.nat44_forwarding_enable_disable(enable=1)
         flags = self.config_flags.NAT_IS_INSIDE
         self.vapi.nat44_interface_add_del_feature(
-            sw_if_index=self.pg0.sw_if_index,
-            is_add=1)
+            sw_if_index=self.pg0.sw_if_index, is_add=1
+        )
         self.vapi.nat44_interface_add_del_feature(
         self.vapi.nat44_interface_add_del_feature(
-            sw_if_index=self.pg0.sw_if_index,
-            is_add=1, flags=flags)
+            sw_if_index=self.pg0.sw_if_index, is_add=1, flags=flags
+        )
         self.vapi.nat44_interface_add_del_feature(
         self.vapi.nat44_interface_add_del_feature(
-            sw_if_index=self.pg5.sw_if_index,
-            is_add=1)
+            sw_if_index=self.pg5.sw_if_index, is_add=1
+        )
         self.vapi.nat44_interface_add_del_feature(
         self.vapi.nat44_interface_add_del_feature(
-            sw_if_index=self.pg5.sw_if_index,
-            is_add=1, flags=flags)
+            sw_if_index=self.pg5.sw_if_index, is_add=1, flags=flags
+        )
         self.vapi.nat44_interface_add_del_feature(
         self.vapi.nat44_interface_add_del_feature(
-            sw_if_index=self.pg6.sw_if_index,
-            is_add=1)
+            sw_if_index=self.pg6.sw_if_index, is_add=1
+        )
         flags = self.config_flags.NAT_IS_OUT2IN_ONLY
         flags = self.config_flags.NAT_IS_OUT2IN_ONLY
-        self.nat_add_static_mapping(self.pg5.remote_ip4, external_addr,
-                                    local_port, external_port, vrf_id=1,
-                                    proto=IP_PROTOS.tcp, flags=flags)
+        self.nat_add_static_mapping(
+            self.pg5.remote_ip4,
+            external_addr,
+            local_port,
+            external_port,
+            vrf_id=1,
+            proto=IP_PROTOS.tcp,
+            flags=flags,
+        )
         self.nat_add_static_mapping(
             self.pg0.remote_ip4,
             external_sw_if_index=self.pg0.sw_if_index,
         self.nat_add_static_mapping(
             self.pg0.remote_ip4,
             external_sw_if_index=self.pg0.sw_if_index,
@@ -2009,13 +2171,15 @@ class TestNAT44ED(VppTestCase):
             vrf_id=0,
             external_port=external_port,
             proto=IP_PROTOS.tcp,
             vrf_id=0,
             external_port=external_port,
             proto=IP_PROTOS.tcp,
-            flags=flags
+            flags=flags,
         )
 
         # from client to server (both VRF1, no translation)
         )
 
         # from client to server (both VRF1, no translation)
-        p = (Ether(src=self.pg6.remote_mac, dst=self.pg6.local_mac) /
-             IP(src=self.pg6.remote_ip4, dst=self.pg5.remote_ip4) /
-             TCP(sport=12348, dport=local_port))
+        p = (
+            Ether(src=self.pg6.remote_mac, dst=self.pg6.local_mac)
+            / IP(src=self.pg6.remote_ip4, dst=self.pg5.remote_ip4)
+            / TCP(sport=12348, dport=local_port)
+        )
         self.pg6.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg6.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -2032,9 +2196,11 @@ class TestNAT44ED(VppTestCase):
             raise
 
         # from server back to client (both VRF1, no translation)
             raise
 
         # from server back to client (both VRF1, no translation)
-        p = (Ether(src=self.pg5.remote_mac, dst=self.pg5.local_mac) /
-             IP(src=self.pg5.remote_ip4, dst=self.pg6.remote_ip4) /
-             TCP(sport=local_port, dport=12348))
+        p = (
+            Ether(src=self.pg5.remote_mac, dst=self.pg5.local_mac)
+            / IP(src=self.pg5.remote_ip4, dst=self.pg6.remote_ip4)
+            / TCP(sport=local_port, dport=12348)
+        )
         self.pg5.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg5.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -2051,9 +2217,11 @@ class TestNAT44ED(VppTestCase):
             raise
 
         # from client VRF1 to server VRF0 (no translation)
             raise
 
         # from client VRF1 to server VRF0 (no translation)
-        p = (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-             IP(src=self.pg0.remote_ip4, dst=self.pg6.remote_ip4) /
-             TCP(sport=local_port, dport=12349))
+        p = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg6.remote_ip4)
+            / TCP(sport=local_port, dport=12349)
+        )
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -2070,9 +2238,11 @@ class TestNAT44ED(VppTestCase):
             raise
 
         # from server VRF0 back to client VRF1 (no translation)
             raise
 
         # from server VRF0 back to client VRF1 (no translation)
-        p = (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-             IP(src=self.pg0.remote_ip4, dst=self.pg6.remote_ip4) /
-             TCP(sport=local_port, dport=12349))
+        p = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg6.remote_ip4)
+            / TCP(sport=local_port, dport=12349)
+        )
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -2089,9 +2259,11 @@ class TestNAT44ED(VppTestCase):
             raise
 
         # from client VRF0 to server VRF1 (no translation)
             raise
 
         # from client VRF0 to server VRF1 (no translation)
-        p = (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-             IP(src=self.pg0.remote_ip4, dst=self.pg5.remote_ip4) /
-             TCP(sport=12344, dport=local_port))
+        p = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg5.remote_ip4)
+            / TCP(sport=12344, dport=local_port)
+        )
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -2108,9 +2280,11 @@ class TestNAT44ED(VppTestCase):
             raise
 
         # from server VRF1 back to client VRF0 (no translation)
             raise
 
         # from server VRF1 back to client VRF0 (no translation)
-        p = (Ether(src=self.pg5.remote_mac, dst=self.pg5.local_mac) /
-             IP(src=self.pg5.remote_ip4, dst=self.pg0.remote_ip4) /
-             TCP(sport=local_port, dport=12344))
+        p = (
+            Ether(src=self.pg5.remote_mac, dst=self.pg5.local_mac)
+            / IP(src=self.pg5.remote_ip4, dst=self.pg0.remote_ip4)
+            / TCP(sport=local_port, dport=12344)
+        )
         self.pg5.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg5.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -2127,7 +2301,7 @@ class TestNAT44ED(VppTestCase):
             raise
 
     def test_outside_address_distribution(self):
             raise
 
     def test_outside_address_distribution(self):
-        """ Outside address distribution based on source address """
+        """Outside address distribution based on source address"""
 
         x = 100
         nat_addresses = []
 
         x = 100
         nat_addresses = []
@@ -2142,7 +2316,10 @@ class TestNAT44ED(VppTestCase):
         self.vapi.nat44_add_del_address_range(
             first_ip_address=nat_addresses[0],
             last_ip_address=nat_addresses[-1],
         self.vapi.nat44_add_del_address_range(
             first_ip_address=nat_addresses[0],
             last_ip_address=nat_addresses[-1],
-            vrf_id=0xFFFFFFFF, is_add=1, flags=0)
+            vrf_id=0xFFFFFFFF,
+            is_add=1,
+            flags=0,
+        )
 
         self.pg0.generate_remote_hosts(x)
 
 
         self.pg0.generate_remote_hosts(x)
 
@@ -2150,11 +2327,12 @@ class TestNAT44ED(VppTestCase):
         for i in range(x):
             info = self.create_packet_info(self.pg0, self.pg1)
             payload = self.info_to_payload(info)
         for i in range(x):
             info = self.create_packet_info(self.pg0, self.pg1)
             payload = self.info_to_payload(info)
-            p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-                 IP(src=self.pg0.remote_hosts[i].ip4,
-                     dst=self.pg1.remote_ip4) /
-                 UDP(sport=7000+i, dport=8000+i) /
-                 Raw(payload))
+            p = (
+                Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+                / IP(src=self.pg0.remote_hosts[i].ip4, dst=self.pg1.remote_ip4)
+                / UDP(sport=7000 + i, dport=8000 + i)
+                / Raw(payload)
+            )
             info.data = p
             pkts.append(p)
 
             info.data = p
             pkts.append(p)
 
@@ -2172,20 +2350,23 @@ class TestNAT44ED(VppTestCase):
             packed = socket.inet_aton(p_sent[IP].src)
             numeric = struct.unpack("!L", packed)[0]
             numeric = socket.htonl(numeric)
             packed = socket.inet_aton(p_sent[IP].src)
             numeric = struct.unpack("!L", packed)[0]
             numeric = socket.htonl(numeric)
-            a = nat_addresses[(numeric-1) % len(nat_addresses)]
+            a = nat_addresses[(numeric - 1) % len(nat_addresses)]
             self.assertEqual(
             self.assertEqual(
-                a, p_recvd[IP].src,
+                a,
+                p_recvd[IP].src,
                 "Invalid packet (src IP %s translated to %s, but expected %s)"
                 "Invalid packet (src IP %s translated to %s, but expected %s)"
-                % (p_sent[IP].src, p_recvd[IP].src, a))
+                % (p_sent[IP].src, p_recvd[IP].src, a),
+            )
 
 
 class TestNAT44EDMW(TestNAT44ED):
 
 
 class TestNAT44EDMW(TestNAT44ED):
-    """ NAT44ED MW Test Case """
+    """NAT44ED MW Test Case"""
+
     vpp_worker_count = 4
     max_sessions = 5000
 
     def test_dynamic(self):
     vpp_worker_count = 4
     max_sessions = 5000
 
     def test_dynamic(self):
-        """ NAT44ED dynamic translation test """
+        """NAT44ED dynamic translation test"""
         pkt_count = 1500
         tcp_port_offset = 20
         udp_port_offset = 20
         pkt_count = 1500
         tcp_port_offset = 20
         udp_port_offset = 20
@@ -2196,27 +2377,33 @@ class TestNAT44EDMW(TestNAT44ED):
         self.nat_add_outside_interface(self.pg1)
 
         # in2out
         self.nat_add_outside_interface(self.pg1)
 
         # in2out
-        tc1 = self.statistics['/nat44-ed/in2out/slowpath/tcp']
-        uc1 = self.statistics['/nat44-ed/in2out/slowpath/udp']
-        ic1 = self.statistics['/nat44-ed/in2out/slowpath/icmp']
-        dc1 = self.statistics['/nat44-ed/in2out/slowpath/drops']
+        tc1 = self.statistics["/nat44-ed/in2out/slowpath/tcp"]
+        uc1 = self.statistics["/nat44-ed/in2out/slowpath/udp"]
+        ic1 = self.statistics["/nat44-ed/in2out/slowpath/icmp"]
+        dc1 = self.statistics["/nat44-ed/in2out/slowpath/drops"]
 
         i2o_pkts = [[] for x in range(0, self.vpp_worker_count)]
 
         for i in range(pkt_count):
 
         i2o_pkts = [[] for x in range(0, self.vpp_worker_count)]
 
         for i in range(pkt_count):
-            p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-                 IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4) /
-                 TCP(sport=tcp_port_offset + i, dport=20))
+            p = (
+                Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+                / IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4)
+                / TCP(sport=tcp_port_offset + i, dport=20)
+            )
             i2o_pkts[p[TCP].sport % self.vpp_worker_count].append(p)
 
             i2o_pkts[p[TCP].sport % self.vpp_worker_count].append(p)
 
-            p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-                 IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4) /
-                 UDP(sport=udp_port_offset + i, dport=20))
+            p = (
+                Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+                / IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4)
+                / UDP(sport=udp_port_offset + i, dport=20)
+            )
             i2o_pkts[p[UDP].sport % self.vpp_worker_count].append(p)
 
             i2o_pkts[p[UDP].sport % self.vpp_worker_count].append(p)
 
-            p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-                 IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4) /
-                 ICMP(id=icmp_id_offset + i, type='echo-request'))
+            p = (
+                Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+                / IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4)
+                / ICMP(id=icmp_id_offset + i, type="echo-request")
+            )
             i2o_pkts[p[ICMP].id % self.vpp_worker_count].append(p)
 
         for i in range(0, self.vpp_worker_count):
             i2o_pkts[p[ICMP].id % self.vpp_worker_count].append(p)
 
         for i in range(0, self.vpp_worker_count):
@@ -2228,26 +2415,23 @@ class TestNAT44EDMW(TestNAT44ED):
         capture = self.pg1.get_capture(pkt_count * 3, timeout=5)
 
         if_idx = self.pg0.sw_if_index
         capture = self.pg1.get_capture(pkt_count * 3, timeout=5)
 
         if_idx = self.pg0.sw_if_index
-        tc2 = self.statistics['/nat44-ed/in2out/slowpath/tcp']
-        uc2 = self.statistics['/nat44-ed/in2out/slowpath/udp']
-        ic2 = self.statistics['/nat44-ed/in2out/slowpath/icmp']
-        dc2 = self.statistics['/nat44-ed/in2out/slowpath/drops']
-
-        self.assertEqual(
-            tc2[:, if_idx].sum() - tc1[:, if_idx].sum(), pkt_count)
-        self.assertEqual(
-            uc2[:, if_idx].sum() - uc1[:, if_idx].sum(), pkt_count)
-        self.assertEqual(
-            ic2[:, if_idx].sum() - ic1[:, if_idx].sum(), pkt_count)
+        tc2 = self.statistics["/nat44-ed/in2out/slowpath/tcp"]
+        uc2 = self.statistics["/nat44-ed/in2out/slowpath/udp"]
+        ic2 = self.statistics["/nat44-ed/in2out/slowpath/icmp"]
+        dc2 = self.statistics["/nat44-ed/in2out/slowpath/drops"]
+
+        self.assertEqual(tc2[:, if_idx].sum() - tc1[:, if_idx].sum(), pkt_count)
+        self.assertEqual(uc2[:, if_idx].sum() - uc1[:, if_idx].sum(), pkt_count)
+        self.assertEqual(ic2[:, if_idx].sum() - ic1[:, if_idx].sum(), pkt_count)
         self.assertEqual(dc2[:, if_idx].sum() - dc1[:, if_idx].sum(), 0)
 
         self.logger.info(self.vapi.cli("show trace"))
 
         # out2in
         self.assertEqual(dc2[:, if_idx].sum() - dc1[:, if_idx].sum(), 0)
 
         self.logger.info(self.vapi.cli("show trace"))
 
         # out2in
-        tc1 = self.statistics['/nat44-ed/out2in/fastpath/tcp']
-        uc1 = self.statistics['/nat44-ed/out2in/fastpath/udp']
-        ic1 = self.statistics['/nat44-ed/out2in/fastpath/icmp']
-        dc1 = self.statistics['/nat44-ed/out2in/fastpath/drops']
+        tc1 = self.statistics["/nat44-ed/out2in/fastpath/tcp"]
+        uc1 = self.statistics["/nat44-ed/out2in/fastpath/udp"]
+        ic1 = self.statistics["/nat44-ed/out2in/fastpath/icmp"]
+        dc1 = self.statistics["/nat44-ed/out2in/fastpath/drops"]
 
         recvd_tcp_ports = set()
         recvd_udp_ports = set()
 
         recvd_tcp_ports = set()
         recvd_udp_ports = set()
@@ -2267,19 +2451,25 @@ class TestNAT44EDMW(TestNAT44ED):
 
         o2i_pkts = [[] for x in range(0, self.vpp_worker_count)]
         for i in range(pkt_count):
 
         o2i_pkts = [[] for x in range(0, self.vpp_worker_count)]
         for i in range(pkt_count):
-            p = (Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac) /
-                 IP(src=self.pg1.remote_ip4, dst=self.nat_addr) /
-                 TCP(dport=choice(recvd_tcp_ports), sport=20))
+            p = (
+                Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac)
+                / IP(src=self.pg1.remote_ip4, dst=self.nat_addr)
+                / TCP(dport=choice(recvd_tcp_ports), sport=20)
+            )
             o2i_pkts[p[TCP].dport % self.vpp_worker_count].append(p)
 
             o2i_pkts[p[TCP].dport % self.vpp_worker_count].append(p)
 
-            p = (Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac) /
-                 IP(src=self.pg1.remote_ip4, dst=self.nat_addr) /
-                 UDP(dport=choice(recvd_udp_ports), sport=20))
+            p = (
+                Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac)
+                / IP(src=self.pg1.remote_ip4, dst=self.nat_addr)
+                / UDP(dport=choice(recvd_udp_ports), sport=20)
+            )
             o2i_pkts[p[UDP].dport % self.vpp_worker_count].append(p)
 
             o2i_pkts[p[UDP].dport % self.vpp_worker_count].append(p)
 
-            p = (Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac) /
-                 IP(src=self.pg1.remote_ip4, dst=self.nat_addr) /
-                 ICMP(id=choice(recvd_icmp_ids), type='echo-reply'))
+            p = (
+                Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac)
+                / IP(src=self.pg1.remote_ip4, dst=self.nat_addr)
+                / ICMP(id=choice(recvd_icmp_ids), type="echo-reply")
+            )
             o2i_pkts[p[ICMP].id % self.vpp_worker_count].append(p)
 
         for i in range(0, self.vpp_worker_count):
             o2i_pkts[p[ICMP].id % self.vpp_worker_count].append(p)
 
         for i in range(0, self.vpp_worker_count):
@@ -2295,41 +2485,50 @@ class TestNAT44EDMW(TestNAT44ED):
                 self.assertEqual(packet[IP].dst, self.pg0.remote_ip4)
                 if packet.haslayer(TCP):
                     self.assert_in_range(
                 self.assertEqual(packet[IP].dst, self.pg0.remote_ip4)
                 if packet.haslayer(TCP):
                     self.assert_in_range(
-                        packet[TCP].dport, tcp_port_offset,
-                        tcp_port_offset + pkt_count, "dst TCP port")
+                        packet[TCP].dport,
+                        tcp_port_offset,
+                        tcp_port_offset + pkt_count,
+                        "dst TCP port",
+                    )
                 elif packet.haslayer(UDP):
                     self.assert_in_range(
                 elif packet.haslayer(UDP):
                     self.assert_in_range(
-                        packet[UDP].dport, udp_port_offset,
-                        udp_port_offset + pkt_count, "dst UDP port")
+                        packet[UDP].dport,
+                        udp_port_offset,
+                        udp_port_offset + pkt_count,
+                        "dst UDP port",
+                    )
                 else:
                     self.assert_in_range(
                 else:
                     self.assert_in_range(
-                        packet[ICMP].id, icmp_id_offset,
-                        icmp_id_offset + pkt_count, "ICMP id")
+                        packet[ICMP].id,
+                        icmp_id_offset,
+                        icmp_id_offset + pkt_count,
+                        "ICMP id",
+                    )
             except:
             except:
-                self.logger.error(ppp("Unexpected or invalid packet "
-                                      "(inside network):", packet))
+                self.logger.error(
+                    ppp("Unexpected or invalid packet (inside network):", packet)
+                )
                 raise
 
         if_idx = self.pg1.sw_if_index
                 raise
 
         if_idx = self.pg1.sw_if_index
-        tc2 = self.statistics['/nat44-ed/out2in/fastpath/tcp']
-        uc2 = self.statistics['/nat44-ed/out2in/fastpath/udp']
-        ic2 = self.statistics['/nat44-ed/out2in/fastpath/icmp']
-        dc2 = self.statistics['/nat44-ed/out2in/fastpath/drops']
-
-        self.assertEqual(
-            tc2[:, if_idx].sum() - tc1[:, if_idx].sum(), pkt_count)
-        self.assertEqual(
-            uc2[:, if_idx].sum() - uc1[:, if_idx].sum(), pkt_count)
-        self.assertEqual(
-            ic2[:, if_idx].sum() - ic1[:, if_idx].sum(), pkt_count)
+        tc2 = self.statistics["/nat44-ed/out2in/fastpath/tcp"]
+        uc2 = self.statistics["/nat44-ed/out2in/fastpath/udp"]
+        ic2 = self.statistics["/nat44-ed/out2in/fastpath/icmp"]
+        dc2 = self.statistics["/nat44-ed/out2in/fastpath/drops"]
+
+        self.assertEqual(tc2[:, if_idx].sum() - tc1[:, if_idx].sum(), pkt_count)
+        self.assertEqual(uc2[:, if_idx].sum() - uc1[:, if_idx].sum(), pkt_count)
+        self.assertEqual(ic2[:, if_idx].sum() - ic1[:, if_idx].sum(), pkt_count)
         self.assertEqual(dc2[:, if_idx].sum() - dc1[:, if_idx].sum(), 0)
 
         self.assertEqual(dc2[:, if_idx].sum() - dc1[:, if_idx].sum(), 0)
 
-        sc = self.statistics['/nat44-ed/total-sessions']
-        self.assertEqual(sc[:, 0].sum(), len(recvd_tcp_ports) +
-                         len(recvd_udp_ports) + len(recvd_icmp_ids))
+        sc = self.statistics["/nat44-ed/total-sessions"]
+        self.assertEqual(
+            sc[:, 0].sum(),
+            len(recvd_tcp_ports) + len(recvd_udp_ports) + len(recvd_icmp_ids),
+        )
 
     def test_frag_in_order(self):
 
     def test_frag_in_order(self):
-        """ NAT44ED translate fragments arriving in order """
+        """NAT44ED translate fragments arriving in order"""
 
         self.nat_add_address(self.nat_addr)
         self.nat_add_inside_interface(self.pg0)
 
         self.nat_add_address(self.nat_addr)
         self.nat_add_inside_interface(self.pg0)
@@ -2340,7 +2539,7 @@ class TestNAT44EDMW(TestNAT44ED):
         self.frag_in_order(proto=IP_PROTOS.icmp, ignore_port=True)
 
     def test_frag_in_order_do_not_translate(self):
         self.frag_in_order(proto=IP_PROTOS.icmp, ignore_port=True)
 
     def test_frag_in_order_do_not_translate(self):
-        """ NAT44ED don't translate fragments arriving in order """
+        """NAT44ED don't translate fragments arriving in order"""
 
         self.nat_add_address(self.nat_addr)
         self.nat_add_inside_interface(self.pg0)
 
         self.nat_add_address(self.nat_addr)
         self.nat_add_inside_interface(self.pg0)
@@ -2350,7 +2549,7 @@ class TestNAT44EDMW(TestNAT44ED):
         self.frag_in_order(proto=IP_PROTOS.tcp, dont_translate=True)
 
     def test_frag_out_of_order(self):
         self.frag_in_order(proto=IP_PROTOS.tcp, dont_translate=True)
 
     def test_frag_out_of_order(self):
-        """ NAT44ED translate fragments arriving out of order """
+        """NAT44ED translate fragments arriving out of order"""
 
         self.nat_add_address(self.nat_addr)
         self.nat_add_inside_interface(self.pg0)
 
         self.nat_add_address(self.nat_addr)
         self.nat_add_inside_interface(self.pg0)
@@ -2361,7 +2560,7 @@ class TestNAT44EDMW(TestNAT44ED):
         self.frag_out_of_order(proto=IP_PROTOS.icmp, ignore_port=True)
 
     def test_frag_in_order_in_plus_out(self):
         self.frag_out_of_order(proto=IP_PROTOS.icmp, ignore_port=True)
 
     def test_frag_in_order_in_plus_out(self):
-        """ NAT44ED in+out interface fragments in order """
+        """NAT44ED in+out interface fragments in order"""
 
         in_port = self.random_port()
         out_port = self.random_port()
 
         in_port = self.random_port()
         out_port = self.random_port()
@@ -2373,39 +2572,29 @@ class TestNAT44EDMW(TestNAT44ED):
         self.nat_add_outside_interface(self.pg1)
 
         # add static mappings for server
         self.nat_add_outside_interface(self.pg1)
 
         # add static mappings for server
-        self.nat_add_static_mapping(self.server_addr,
-                                    self.nat_addr,
-                                    in_port,
-                                    out_port,
-                                    proto=IP_PROTOS.tcp)
-        self.nat_add_static_mapping(self.server_addr,
-                                    self.nat_addr,
-                                    in_port,
-                                    out_port,
-                                    proto=IP_PROTOS.udp)
-        self.nat_add_static_mapping(self.server_addr,
-                                    self.nat_addr,
-                                    proto=IP_PROTOS.icmp)
+        self.nat_add_static_mapping(
+            self.server_addr, self.nat_addr, in_port, out_port, proto=IP_PROTOS.tcp
+        )
+        self.nat_add_static_mapping(
+            self.server_addr, self.nat_addr, in_port, out_port, proto=IP_PROTOS.udp
+        )
+        self.nat_add_static_mapping(
+            self.server_addr, self.nat_addr, proto=IP_PROTOS.icmp
+        )
 
         # run tests for each protocol
 
         # run tests for each protocol
-        self.frag_in_order_in_plus_out(self.server_addr,
-                                       self.nat_addr,
-                                       in_port,
-                                       out_port,
-                                       IP_PROTOS.tcp)
-        self.frag_in_order_in_plus_out(self.server_addr,
-                                       self.nat_addr,
-                                       in_port,
-                                       out_port,
-                                       IP_PROTOS.udp)
-        self.frag_in_order_in_plus_out(self.server_addr,
-                                       self.nat_addr,
-                                       in_port,
-                                       out_port,
-                                       IP_PROTOS.icmp)
+        self.frag_in_order_in_plus_out(
+            self.server_addr, self.nat_addr, in_port, out_port, IP_PROTOS.tcp
+        )
+        self.frag_in_order_in_plus_out(
+            self.server_addr, self.nat_addr, in_port, out_port, IP_PROTOS.udp
+        )
+        self.frag_in_order_in_plus_out(
+            self.server_addr, self.nat_addr, in_port, out_port, IP_PROTOS.icmp
+        )
 
     def test_frag_out_of_order_in_plus_out(self):
 
     def test_frag_out_of_order_in_plus_out(self):
-        """ NAT44ED in+out interface fragments out of order """
+        """NAT44ED in+out interface fragments out of order"""
 
         in_port = self.random_port()
         out_port = self.random_port()
 
         in_port = self.random_port()
         out_port = self.random_port()
@@ -2417,39 +2606,29 @@ class TestNAT44EDMW(TestNAT44ED):
         self.nat_add_outside_interface(self.pg1)
 
         # add static mappings for server
         self.nat_add_outside_interface(self.pg1)
 
         # add static mappings for server
-        self.nat_add_static_mapping(self.server_addr,
-                                    self.nat_addr,
-                                    in_port,
-                                    out_port,
-                                    proto=IP_PROTOS.tcp)
-        self.nat_add_static_mapping(self.server_addr,
-                                    self.nat_addr,
-                                    in_port,
-                                    out_port,
-                                    proto=IP_PROTOS.udp)
-        self.nat_add_static_mapping(self.server_addr,
-                                    self.nat_addr,
-                                    proto=IP_PROTOS.icmp)
+        self.nat_add_static_mapping(
+            self.server_addr, self.nat_addr, in_port, out_port, proto=IP_PROTOS.tcp
+        )
+        self.nat_add_static_mapping(
+            self.server_addr, self.nat_addr, in_port, out_port, proto=IP_PROTOS.udp
+        )
+        self.nat_add_static_mapping(
+            self.server_addr, self.nat_addr, proto=IP_PROTOS.icmp
+        )
 
         # run tests for each protocol
 
         # run tests for each protocol
-        self.frag_out_of_order_in_plus_out(self.server_addr,
-                                           self.nat_addr,
-                                           in_port,
-                                           out_port,
-                                           IP_PROTOS.tcp)
-        self.frag_out_of_order_in_plus_out(self.server_addr,
-                                           self.nat_addr,
-                                           in_port,
-                                           out_port,
-                                           IP_PROTOS.udp)
-        self.frag_out_of_order_in_plus_out(self.server_addr,
-                                           self.nat_addr,
-                                           in_port,
-                                           out_port,
-                                           IP_PROTOS.icmp)
+        self.frag_out_of_order_in_plus_out(
+            self.server_addr, self.nat_addr, in_port, out_port, IP_PROTOS.tcp
+        )
+        self.frag_out_of_order_in_plus_out(
+            self.server_addr, self.nat_addr, in_port, out_port, IP_PROTOS.udp
+        )
+        self.frag_out_of_order_in_plus_out(
+            self.server_addr, self.nat_addr, in_port, out_port, IP_PROTOS.icmp
+        )
 
     def test_reass_hairpinning(self):
 
     def test_reass_hairpinning(self):
-        """ NAT44ED fragments hairpinning """
+        """NAT44ED fragments hairpinning"""
 
         server_addr = self.pg0.remote_hosts[1].ip4
 
 
         server_addr = self.pg0.remote_hosts[1].ip4
 
@@ -2462,26 +2641,49 @@ class TestNAT44EDMW(TestNAT44ED):
         self.nat_add_outside_interface(self.pg1)
 
         # add static mapping for server
         self.nat_add_outside_interface(self.pg1)
 
         # add static mapping for server
-        self.nat_add_static_mapping(server_addr, self.nat_addr,
-                                    server_in_port, server_out_port,
-                                    proto=IP_PROTOS.tcp)
-        self.nat_add_static_mapping(server_addr, self.nat_addr,
-                                    server_in_port, server_out_port,
-                                    proto=IP_PROTOS.udp)
+        self.nat_add_static_mapping(
+            server_addr,
+            self.nat_addr,
+            server_in_port,
+            server_out_port,
+            proto=IP_PROTOS.tcp,
+        )
+        self.nat_add_static_mapping(
+            server_addr,
+            self.nat_addr,
+            server_in_port,
+            server_out_port,
+            proto=IP_PROTOS.udp,
+        )
         self.nat_add_static_mapping(server_addr, self.nat_addr)
 
         self.nat_add_static_mapping(server_addr, self.nat_addr)
 
-        self.reass_hairpinning(server_addr, server_in_port, server_out_port,
-                               host_in_port, proto=IP_PROTOS.tcp,
-                               ignore_port=True)
-        self.reass_hairpinning(server_addr, server_in_port, server_out_port,
-                               host_in_port, proto=IP_PROTOS.udp,
-                               ignore_port=True)
-        self.reass_hairpinning(server_addr, server_in_port, server_out_port,
-                               host_in_port, proto=IP_PROTOS.icmp,
-                               ignore_port=True)
+        self.reass_hairpinning(
+            server_addr,
+            server_in_port,
+            server_out_port,
+            host_in_port,
+            proto=IP_PROTOS.tcp,
+            ignore_port=True,
+        )
+        self.reass_hairpinning(
+            server_addr,
+            server_in_port,
+            server_out_port,
+            host_in_port,
+            proto=IP_PROTOS.udp,
+            ignore_port=True,
+        )
+        self.reass_hairpinning(
+            server_addr,
+            server_in_port,
+            server_out_port,
+            host_in_port,
+            proto=IP_PROTOS.icmp,
+            ignore_port=True,
+        )
 
     def test_session_limit_per_vrf(self):
 
     def test_session_limit_per_vrf(self):
-        """ NAT44ED per vrf session limit """
+        """NAT44ED per vrf session limit"""
 
         inside = self.pg0
         inside_vrf10 = self.pg2
 
         inside = self.pg0
         inside_vrf10 = self.pg2
@@ -2520,27 +2722,29 @@ class TestNAT44EDMW(TestNAT44ED):
         capture = outside.get_capture(len(stream))
 
     def test_show_max_translations(self):
         capture = outside.get_capture(len(stream))
 
     def test_show_max_translations(self):
-        """ NAT44ED API test - max translations per thread """
+        """NAT44ED API test - max translations per thread"""
         config = self.vapi.nat44_show_running_config()
         config = self.vapi.nat44_show_running_config()
-        self.assertEqual(self.max_sessions,
-                         config.sessions)
+        self.assertEqual(self.max_sessions, config.sessions)
 
     def test_lru_cleanup(self):
 
     def test_lru_cleanup(self):
-        """ NAT44ED LRU cleanup algorithm """
+        """NAT44ED LRU cleanup algorithm"""
 
         self.nat_add_address(self.nat_addr)
         self.nat_add_inside_interface(self.pg0)
         self.nat_add_outside_interface(self.pg1)
 
         self.vapi.nat_set_timeouts(
 
         self.nat_add_address(self.nat_addr)
         self.nat_add_inside_interface(self.pg0)
         self.nat_add_outside_interface(self.pg1)
 
         self.vapi.nat_set_timeouts(
-            udp=1, tcp_established=7440, tcp_transitory=30, icmp=1)
+            udp=1, tcp_established=7440, tcp_transitory=30, icmp=1
+        )
 
         tcp_port_out = self.init_tcp_session(self.pg0, self.pg1, 2000, 80)
         pkts = []
         for i in range(0, self.max_sessions - 1):
 
         tcp_port_out = self.init_tcp_session(self.pg0, self.pg1, 2000, 80)
         pkts = []
         for i in range(0, self.max_sessions - 1):
-            p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-                 IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4, ttl=64) /
-                 UDP(sport=7000+i, dport=80))
+            p = (
+                Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+                / IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4, ttl=64)
+                / UDP(sport=7000 + i, dport=80)
+            )
             pkts.append(p)
 
         self.pg0.add_stream(pkts)
             pkts.append(p)
 
         self.pg0.add_stream(pkts)
@@ -2551,9 +2755,11 @@ class TestNAT44EDMW(TestNAT44ED):
 
         pkts = []
         for i in range(0, self.max_sessions - 1):
 
         pkts = []
         for i in range(0, self.max_sessions - 1):
-            p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-                 IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4, ttl=64) /
-                 ICMP(id=8000+i, type='echo-request'))
+            p = (
+                Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+                / IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4, ttl=64)
+                / ICMP(id=8000 + i, type="echo-request")
+            )
             pkts.append(p)
 
         self.pg0.add_stream(pkts)
             pkts.append(p)
 
         self.pg0.add_stream(pkts)
@@ -2562,79 +2768,89 @@ class TestNAT44EDMW(TestNAT44ED):
         self.pg1.get_capture(len(pkts))
 
     def test_session_rst_timeout(self):
         self.pg1.get_capture(len(pkts))
 
     def test_session_rst_timeout(self):
-        """ NAT44ED session RST timeouts """
+        """NAT44ED session RST timeouts"""
 
         self.nat_add_address(self.nat_addr)
         self.nat_add_inside_interface(self.pg0)
         self.nat_add_outside_interface(self.pg1)
 
 
         self.nat_add_address(self.nat_addr)
         self.nat_add_inside_interface(self.pg0)
         self.nat_add_outside_interface(self.pg1)
 
-        self.vapi.nat_set_timeouts(udp=300, tcp_established=7440,
-                                   tcp_transitory=5, icmp=60)
+        self.vapi.nat_set_timeouts(
+            udp=300, tcp_established=7440, tcp_transitory=5, icmp=60
+        )
 
 
-        self.init_tcp_session(self.pg0, self.pg1, self.tcp_port_in,
-                              self.tcp_external_port)
-        p = (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-             IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4) /
-             TCP(sport=self.tcp_port_in, dport=self.tcp_external_port,
-                 flags="R"))
+        self.init_tcp_session(
+            self.pg0, self.pg1, self.tcp_port_in, self.tcp_external_port
+        )
+        p = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4)
+            / TCP(sport=self.tcp_port_in, dport=self.tcp_external_port, flags="R")
+        )
         self.send_and_expect(self.pg0, p, self.pg1)
 
         self.virtual_sleep(6)
 
         # The session is already closed
         self.send_and_expect(self.pg0, p, self.pg1)
 
         self.virtual_sleep(6)
 
         # The session is already closed
-        p = (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-             IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4) /
-             TCP(sport=self.tcp_port_in, dport=self.tcp_external_port,
-                 flags="P"))
+        p = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4)
+            / TCP(sport=self.tcp_port_in, dport=self.tcp_external_port, flags="P")
+        )
         self.send_and_assert_no_replies(self.pg0, p, self.pg1)
 
         # The session can be re-opened
         self.send_and_assert_no_replies(self.pg0, p, self.pg1)
 
         # The session can be re-opened
-        p = (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-             IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4) /
-             TCP(sport=self.tcp_port_in, dport=self.tcp_external_port,
-                 flags="S"))
+        p = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4)
+            / TCP(sport=self.tcp_port_in, dport=self.tcp_external_port, flags="S")
+        )
         self.send_and_expect(self.pg0, p, self.pg1)
 
     def test_session_rst_established_timeout(self):
         self.send_and_expect(self.pg0, p, self.pg1)
 
     def test_session_rst_established_timeout(self):
-        """ NAT44ED session RST timeouts """
+        """NAT44ED session RST timeouts"""
 
         self.nat_add_address(self.nat_addr)
         self.nat_add_inside_interface(self.pg0)
         self.nat_add_outside_interface(self.pg1)
 
 
         self.nat_add_address(self.nat_addr)
         self.nat_add_inside_interface(self.pg0)
         self.nat_add_outside_interface(self.pg1)
 
-        self.vapi.nat_set_timeouts(udp=300, tcp_established=7440,
-                                   tcp_transitory=5, icmp=60)
+        self.vapi.nat_set_timeouts(
+            udp=300, tcp_established=7440, tcp_transitory=5, icmp=60
+        )
 
 
-        self.init_tcp_session(self.pg0, self.pg1, self.tcp_port_in,
-                              self.tcp_external_port)
+        self.init_tcp_session(
+            self.pg0, self.pg1, self.tcp_port_in, self.tcp_external_port
+        )
 
         # Wait at least the transitory time, the session is in established
         # state anyway. RST followed by a data packet should move it to
         # transitory state.
         self.virtual_sleep(6)
 
         # Wait at least the transitory time, the session is in established
         # state anyway. RST followed by a data packet should move it to
         # transitory state.
         self.virtual_sleep(6)
-        p = (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-             IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4) /
-             TCP(sport=self.tcp_port_in, dport=self.tcp_external_port,
-                 flags="R"))
+        p = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4)
+            / TCP(sport=self.tcp_port_in, dport=self.tcp_external_port, flags="R")
+        )
         self.send_and_expect(self.pg0, p, self.pg1)
 
         self.send_and_expect(self.pg0, p, self.pg1)
 
-        p = (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-             IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4) /
-             TCP(sport=self.tcp_port_in, dport=self.tcp_external_port,
-                 flags="P"))
+        p = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4)
+            / TCP(sport=self.tcp_port_in, dport=self.tcp_external_port, flags="P")
+        )
         self.send_and_expect(self.pg0, p, self.pg1)
 
         # State is transitory, session should be closed after 6 seconds
         self.virtual_sleep(6)
 
         self.send_and_expect(self.pg0, p, self.pg1)
 
         # State is transitory, session should be closed after 6 seconds
         self.virtual_sleep(6)
 
-        p = (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-             IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4) /
-             TCP(sport=self.tcp_port_in, dport=self.tcp_external_port,
-                 flags="P"))
+        p = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4)
+            / TCP(sport=self.tcp_port_in, dport=self.tcp_external_port, flags="P")
+        )
         self.send_and_assert_no_replies(self.pg0, p, self.pg1)
 
     def test_dynamic_out_of_ports(self):
         self.send_and_assert_no_replies(self.pg0, p, self.pg1)
 
     def test_dynamic_out_of_ports(self):
-        """ NAT44ED dynamic translation test: out of ports """
+        """NAT44ED dynamic translation test: out of ports"""
 
         self.nat_add_inside_interface(self.pg0)
         self.nat_add_outside_interface(self.pg1)
 
         self.nat_add_inside_interface(self.pg0)
         self.nat_add_outside_interface(self.pg1)
@@ -2643,60 +2859,71 @@ class TestNAT44EDMW(TestNAT44ED):
         pkts = self.create_stream_in(self.pg0, self.pg1)
 
         self.send_and_assert_no_replies(
         pkts = self.create_stream_in(self.pg0, self.pg1)
 
         self.send_and_assert_no_replies(
-            self.pg0, pkts, msg="i2o pkts",
-            stats_diff=self.no_diff | {
+            self.pg0,
+            pkts,
+            msg="i2o pkts",
+            stats_diff=self.no_diff
+            | {
                 "err": {
                 "err": {
-                    '/err/nat44-ed-in2out-slowpath/out of ports': len(pkts),
+                    "/err/nat44-ed-in2out-slowpath/out of ports": len(pkts),
                 },
                 self.pg0.sw_if_index: {
                 },
                 self.pg0.sw_if_index: {
-                    '/nat44-ed/in2out/slowpath/drops': len(pkts),
+                    "/nat44-ed/in2out/slowpath/drops": len(pkts),
                 },
                 },
-            }
+            },
         )
 
         # in2out after NAT addresses added
         self.nat_add_address(self.nat_addr)
 
         )
 
         # in2out after NAT addresses added
         self.nat_add_address(self.nat_addr)
 
-        tcpn, udpn, icmpn = (sum(x) for x in
-                             zip(*((TCP in p, UDP in p, ICMP in p)
-                                 for p in pkts)))
+        tcpn, udpn, icmpn = (
+            sum(x) for x in zip(*((TCP in p, UDP in p, ICMP in p) for p in pkts))
+        )
 
         self.send_and_expect(
 
         self.send_and_expect(
-            self.pg0, pkts, self.pg1, msg="i2o pkts",
-            stats_diff=self.no_diff | {
+            self.pg0,
+            pkts,
+            self.pg1,
+            msg="i2o pkts",
+            stats_diff=self.no_diff
+            | {
                 "err": {
                 "err": {
-                    '/err/nat44-ed-in2out-slowpath/out of ports': 0,
+                    "/err/nat44-ed-in2out-slowpath/out of ports": 0,
                 },
                 self.pg0.sw_if_index: {
                 },
                 self.pg0.sw_if_index: {
-                    '/nat44-ed/in2out/slowpath/drops': 0,
-                    '/nat44-ed/in2out/slowpath/tcp': tcpn,
-                    '/nat44-ed/in2out/slowpath/udp': udpn,
-                    '/nat44-ed/in2out/slowpath/icmp': icmpn,
+                    "/nat44-ed/in2out/slowpath/drops": 0,
+                    "/nat44-ed/in2out/slowpath/tcp": tcpn,
+                    "/nat44-ed/in2out/slowpath/udp": udpn,
+                    "/nat44-ed/in2out/slowpath/icmp": icmpn,
                 },
                 },
-            }
+            },
         )
 
     def test_unknown_proto(self):
         )
 
     def test_unknown_proto(self):
-        """ NAT44ED translate packet with unknown protocol """
+        """NAT44ED translate packet with unknown protocol"""
 
         self.nat_add_address(self.nat_addr)
         self.nat_add_inside_interface(self.pg0)
         self.nat_add_outside_interface(self.pg1)
 
         # in2out
 
         self.nat_add_address(self.nat_addr)
         self.nat_add_inside_interface(self.pg0)
         self.nat_add_outside_interface(self.pg1)
 
         # in2out
-        p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-             IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4) /
-             TCP(sport=self.tcp_port_in, dport=20))
+        p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4)
+            / TCP(sport=self.tcp_port_in, dport=20)
+        )
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         p = self.pg1.get_capture(1)
 
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         p = self.pg1.get_capture(1)
 
-        p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-             IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4) /
-             GRE() /
-             IP(src=self.pg2.remote_ip4, dst=self.pg2.remote_ip4) /
-             TCP(sport=1234, dport=1234))
+        p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4)
+            / GRE()
+            / IP(src=self.pg2.remote_ip4, dst=self.pg2.remote_ip4)
+            / TCP(sport=1234, dport=1234)
+        )
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -2712,11 +2939,13 @@ class TestNAT44EDMW(TestNAT44ED):
             raise
 
         # out2in
             raise
 
         # out2in
-        p = (Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac) /
-             IP(src=self.pg1.remote_ip4, dst=self.nat_addr) /
-             GRE() /
-             IP(src=self.pg2.remote_ip4, dst=self.pg2.remote_ip4) /
-             TCP(sport=1234, dport=1234))
+        p = (
+            Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac)
+            / IP(src=self.pg1.remote_ip4, dst=self.nat_addr)
+            / GRE()
+            / IP(src=self.pg2.remote_ip4, dst=self.pg2.remote_ip4)
+            / TCP(sport=1234, dport=1234)
+        )
         self.pg1.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg1.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -2732,7 +2961,7 @@ class TestNAT44EDMW(TestNAT44ED):
             raise
 
     def test_hairpinning_unknown_proto(self):
             raise
 
     def test_hairpinning_unknown_proto(self):
-        """ NAT44ED translate packet with unknown protocol - hairpinning """
+        """NAT44ED translate packet with unknown protocol - hairpinning"""
         host = self.pg0.remote_hosts[0]
         server = self.pg0.remote_hosts[1]
         host_in_port = 1234
         host = self.pg0.remote_hosts[0]
         server = self.pg0.remote_hosts[1]
         host_in_port = 1234
@@ -2747,19 +2976,23 @@ class TestNAT44EDMW(TestNAT44ED):
         self.nat_add_static_mapping(server.ip4, server_nat_ip)
 
         # host to server
         self.nat_add_static_mapping(server.ip4, server_nat_ip)
 
         # host to server
-        p = (Ether(src=host.mac, dst=self.pg0.local_mac) /
-             IP(src=host.ip4, dst=server_nat_ip) /
-             TCP(sport=host_in_port, dport=server_out_port))
+        p = (
+            Ether(src=host.mac, dst=self.pg0.local_mac)
+            / IP(src=host.ip4, dst=server_nat_ip)
+            / TCP(sport=host_in_port, dport=server_out_port)
+        )
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg0.get_capture(1)
 
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg0.get_capture(1)
 
-        p = (Ether(dst=self.pg0.local_mac, src=host.mac) /
-             IP(src=host.ip4, dst=server_nat_ip) /
-             GRE() /
-             IP(src=self.pg2.remote_ip4, dst=self.pg2.remote_ip4) /
-             TCP(sport=1234, dport=1234))
+        p = (
+            Ether(dst=self.pg0.local_mac, src=host.mac)
+            / IP(src=host.ip4, dst=server_nat_ip)
+            / GRE()
+            / IP(src=self.pg2.remote_ip4, dst=self.pg2.remote_ip4)
+            / TCP(sport=1234, dport=1234)
+        )
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -2775,11 +3008,13 @@ class TestNAT44EDMW(TestNAT44ED):
             raise
 
         # server to host
             raise
 
         # server to host
-        p = (Ether(dst=self.pg0.local_mac, src=server.mac) /
-             IP(src=server.ip4, dst=self.nat_addr) /
-             GRE() /
-             IP(src=self.pg2.remote_ip4, dst=self.pg2.remote_ip4) /
-             TCP(sport=1234, dport=1234))
+        p = (
+            Ether(dst=self.pg0.local_mac, src=server.mac)
+            / IP(src=server.ip4, dst=self.nat_addr)
+            / GRE()
+            / IP(src=self.pg2.remote_ip4, dst=self.pg2.remote_ip4)
+            / TCP(sport=1234, dport=1234)
+        )
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -2795,8 +3030,8 @@ class TestNAT44EDMW(TestNAT44ED):
             raise
 
     def test_output_feature_and_service(self):
             raise
 
     def test_output_feature_and_service(self):
-        """ NAT44ED interface output feature and services """
-        external_addr = '1.2.3.4'
+        """NAT44ED interface output feature and services"""
+        external_addr = "1.2.3.4"
         external_port = 80
         local_port = 8080
 
         external_port = 80
         local_port = 8080
 
@@ -2804,22 +3039,33 @@ class TestNAT44EDMW(TestNAT44ED):
         self.nat_add_address(self.nat_addr)
         flags = self.config_flags.NAT_IS_ADDR_ONLY
         self.vapi.nat44_add_del_identity_mapping(
         self.nat_add_address(self.nat_addr)
         flags = self.config_flags.NAT_IS_ADDR_ONLY
         self.vapi.nat44_add_del_identity_mapping(
-            ip_address=self.pg1.remote_ip4, sw_if_index=0xFFFFFFFF,
-            flags=flags, is_add=1)
+            ip_address=self.pg1.remote_ip4,
+            sw_if_index=0xFFFFFFFF,
+            flags=flags,
+            is_add=1,
+        )
         flags = self.config_flags.NAT_IS_OUT2IN_ONLY
         flags = self.config_flags.NAT_IS_OUT2IN_ONLY
-        self.nat_add_static_mapping(self.pg0.remote_ip4, external_addr,
-                                    local_port, external_port,
-                                    proto=IP_PROTOS.tcp, flags=flags)
+        self.nat_add_static_mapping(
+            self.pg0.remote_ip4,
+            external_addr,
+            local_port,
+            external_port,
+            proto=IP_PROTOS.tcp,
+            flags=flags,
+        )
 
         self.nat_add_inside_interface(self.pg0)
         self.nat_add_outside_interface(self.pg0)
         self.vapi.nat44_ed_add_del_output_interface(
 
         self.nat_add_inside_interface(self.pg0)
         self.nat_add_outside_interface(self.pg0)
         self.vapi.nat44_ed_add_del_output_interface(
-            sw_if_index=self.pg1.sw_if_index, is_add=1)
+            sw_if_index=self.pg1.sw_if_index, is_add=1
+        )
 
         # from client to service
 
         # from client to service
-        p = (Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac) /
-             IP(src=self.pg1.remote_ip4, dst=external_addr) /
-             TCP(sport=12345, dport=external_port))
+        p = (
+            Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
+            / IP(src=self.pg1.remote_ip4, dst=external_addr)
+            / TCP(sport=12345, dport=external_port)
+        )
         self.pg1.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg1.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -2836,9 +3082,11 @@ class TestNAT44EDMW(TestNAT44ED):
             raise
 
         # from service back to client
             raise
 
         # from service back to client
-        p = (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-             IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4) /
-             TCP(sport=local_port, dport=12345))
+        p = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4)
+            / TCP(sport=local_port, dport=12345)
+        )
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -2877,26 +3125,34 @@ class TestNAT44EDMW(TestNAT44ED):
         self.verify_capture_in(capture, self.pg0)
 
     def test_output_feature_and_service3(self):
         self.verify_capture_in(capture, self.pg0)
 
     def test_output_feature_and_service3(self):
-        """ NAT44ED interface output feature and DST NAT """
-        external_addr = '1.2.3.4'
+        """NAT44ED interface output feature and DST NAT"""
+        external_addr = "1.2.3.4"
         external_port = 80
         local_port = 8080
 
         self.vapi.nat44_forwarding_enable_disable(enable=1)
         self.nat_add_address(self.nat_addr)
         flags = self.config_flags.NAT_IS_OUT2IN_ONLY
         external_port = 80
         local_port = 8080
 
         self.vapi.nat44_forwarding_enable_disable(enable=1)
         self.nat_add_address(self.nat_addr)
         flags = self.config_flags.NAT_IS_OUT2IN_ONLY
-        self.nat_add_static_mapping(self.pg1.remote_ip4, external_addr,
-                                    local_port, external_port,
-                                    proto=IP_PROTOS.tcp, flags=flags)
+        self.nat_add_static_mapping(
+            self.pg1.remote_ip4,
+            external_addr,
+            local_port,
+            external_port,
+            proto=IP_PROTOS.tcp,
+            flags=flags,
+        )
 
         self.nat_add_inside_interface(self.pg0)
         self.nat_add_outside_interface(self.pg0)
         self.vapi.nat44_ed_add_del_output_interface(
 
         self.nat_add_inside_interface(self.pg0)
         self.nat_add_outside_interface(self.pg0)
         self.vapi.nat44_ed_add_del_output_interface(
-            sw_if_index=self.pg1.sw_if_index, is_add=1)
+            sw_if_index=self.pg1.sw_if_index, is_add=1
+        )
 
 
-        p = (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-             IP(src=self.pg0.remote_ip4, dst=external_addr) /
-             TCP(sport=12345, dport=external_port))
+        p = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg0.remote_ip4, dst=external_addr)
+            / TCP(sport=12345, dport=external_port)
+        )
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -2914,9 +3170,11 @@ class TestNAT44EDMW(TestNAT44ED):
             self.logger.error(ppp("Unexpected or invalid packet:", p))
             raise
 
             self.logger.error(ppp("Unexpected or invalid packet:", p))
             raise
 
-        p = (Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac) /
-             IP(src=self.pg1.remote_ip4, dst=self.pg0.remote_ip4) /
-             TCP(sport=local_port, dport=12345))
+        p = (
+            Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
+            / IP(src=self.pg1.remote_ip4, dst=self.pg0.remote_ip4)
+            / TCP(sport=local_port, dport=12345)
+        )
         self.pg1.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg1.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -2935,17 +3193,15 @@ class TestNAT44EDMW(TestNAT44ED):
             raise
 
     def test_self_twice_nat_lb_negative(self):
             raise
 
     def test_self_twice_nat_lb_negative(self):
-        """ NAT44ED Self Twice NAT local service load balancing (negative test)
-        """
-        self.twice_nat_common(lb=True, self_twice_nat=True, same_pg=True,
-                              client_id=2)
+        """NAT44ED Self Twice NAT local service load balancing (negative test)"""
+        self.twice_nat_common(lb=True, self_twice_nat=True, same_pg=True, client_id=2)
 
     def test_self_twice_nat_negative(self):
 
     def test_self_twice_nat_negative(self):
-        """ NAT44ED Self Twice NAT (negative test) """
+        """NAT44ED Self Twice NAT (negative test)"""
         self.twice_nat_common(self_twice_nat=True)
 
     def test_static_lb_multi_clients(self):
         self.twice_nat_common(self_twice_nat=True)
 
     def test_static_lb_multi_clients(self):
-        """ NAT44ED local service load balancing - multiple clients"""
+        """NAT44ED local service load balancing - multiple clients"""
 
         external_addr = self.nat_addr
         external_port = 80
 
         external_addr = self.nat_addr
         external_port = 80
@@ -2954,39 +3210,39 @@ class TestNAT44EDMW(TestNAT44ED):
         server2 = self.pg0.remote_hosts[1]
         server3 = self.pg0.remote_hosts[2]
 
         server2 = self.pg0.remote_hosts[1]
         server3 = self.pg0.remote_hosts[2]
 
-        locals = [{'addr': server1.ip4,
-                   'port': local_port,
-                   'probability': 90,
-                   'vrf_id': 0},
-                  {'addr': server2.ip4,
-                   'port': local_port,
-                   'probability': 10,
-                   'vrf_id': 0}]
+        locals = [
+            {"addr": server1.ip4, "port": local_port, "probability": 90, "vrf_id": 0},
+            {"addr": server2.ip4, "port": local_port, "probability": 10, "vrf_id": 0},
+        ]
 
         flags = self.config_flags.NAT_IS_INSIDE
         self.vapi.nat44_interface_add_del_feature(
 
         flags = self.config_flags.NAT_IS_INSIDE
         self.vapi.nat44_interface_add_del_feature(
-            sw_if_index=self.pg0.sw_if_index,
-            flags=flags, is_add=1)
+            sw_if_index=self.pg0.sw_if_index, flags=flags, is_add=1
+        )
         self.vapi.nat44_interface_add_del_feature(
         self.vapi.nat44_interface_add_del_feature(
-            sw_if_index=self.pg1.sw_if_index,
-            is_add=1)
+            sw_if_index=self.pg1.sw_if_index, is_add=1
+        )
 
         self.nat_add_address(self.nat_addr)
 
         self.nat_add_address(self.nat_addr)
-        self.vapi.nat44_add_del_lb_static_mapping(is_add=1,
-                                                  external_addr=external_addr,
-                                                  external_port=external_port,
-                                                  protocol=IP_PROTOS.tcp,
-                                                  local_num=len(locals),
-                                                  locals=locals)
+        self.vapi.nat44_add_del_lb_static_mapping(
+            is_add=1,
+            external_addr=external_addr,
+            external_port=external_port,
+            protocol=IP_PROTOS.tcp,
+            local_num=len(locals),
+            locals=locals,
+        )
 
         server1_n = 0
         server2_n = 0
         clients = ip4_range(self.pg1.remote_ip4, 10, 50)
         pkts = []
         for client in clients:
 
         server1_n = 0
         server2_n = 0
         clients = ip4_range(self.pg1.remote_ip4, 10, 50)
         pkts = []
         for client in clients:
-            p = (Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac) /
-                 IP(src=client, dst=self.nat_addr) /
-                 TCP(sport=12345, dport=external_port))
+            p = (
+                Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
+                / IP(src=client, dst=self.nat_addr)
+                / TCP(sport=12345, dport=external_port)
+            )
             pkts.append(p)
         self.pg1.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
             pkts.append(p)
         self.pg1.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
@@ -3000,10 +3256,10 @@ class TestNAT44EDMW(TestNAT44ED):
         self.assertGreaterEqual(server1_n, server2_n)
 
         local = {
         self.assertGreaterEqual(server1_n, server2_n)
 
         local = {
-            'addr': server3.ip4,
-            'port': local_port,
-            'probability': 20,
-            'vrf_id': 0
+            "addr": server3.ip4,
+            "port": local_port,
+            "probability": 20,
+            "vrf_id": 0,
         }
 
         # add new back-end
         }
 
         # add new back-end
@@ -3012,16 +3268,19 @@ class TestNAT44EDMW(TestNAT44ED):
             external_addr=external_addr,
             external_port=external_port,
             local=local,
             external_addr=external_addr,
             external_port=external_port,
             local=local,
-            protocol=IP_PROTOS.tcp)
+            protocol=IP_PROTOS.tcp,
+        )
         server1_n = 0
         server2_n = 0
         server3_n = 0
         clients = ip4_range(self.pg1.remote_ip4, 60, 110)
         pkts = []
         for client in clients:
         server1_n = 0
         server2_n = 0
         server3_n = 0
         clients = ip4_range(self.pg1.remote_ip4, 60, 110)
         pkts = []
         for client in clients:
-            p = (Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac) /
-                 IP(src=client, dst=self.nat_addr) /
-                 TCP(sport=12346, dport=external_port))
+            p = (
+                Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
+                / IP(src=client, dst=self.nat_addr)
+                / TCP(sport=12346, dport=external_port)
+            )
             pkts.append(p)
         self.assertGreater(len(pkts), 0)
         self.pg1.add_stream(pkts)
             pkts.append(p)
         self.assertGreater(len(pkts), 0)
         self.pg1.add_stream(pkts)
@@ -3040,10 +3299,10 @@ class TestNAT44EDMW(TestNAT44ED):
         self.assertGreater(server3_n, 0)
 
         local = {
         self.assertGreater(server3_n, 0)
 
         local = {
-            'addr': server2.ip4,
-            'port': local_port,
-            'probability': 10,
-            'vrf_id': 0
+            "addr": server2.ip4,
+            "port": local_port,
+            "probability": 10,
+            "vrf_id": 0,
         }
 
         # remove one back-end
         }
 
         # remove one back-end
@@ -3052,7 +3311,8 @@ class TestNAT44EDMW(TestNAT44ED):
             external_addr=external_addr,
             external_port=external_port,
             local=local,
             external_addr=external_addr,
             external_port=external_port,
             local=local,
-            protocol=IP_PROTOS.tcp)
+            protocol=IP_PROTOS.tcp,
+        )
         server1_n = 0
         server2_n = 0
         server3_n = 0
         server1_n = 0
         server2_n = 0
         server3_n = 0
@@ -3075,39 +3335,39 @@ class TestNAT44EDMW(TestNAT44ED):
     # setting syslog sender cannot be undone and if it is set, it messes
     # with self.send_and_assert_no_replies functionality
     def test_zzz_syslog_sess(self):
     # setting syslog sender cannot be undone and if it is set, it messes
     # with self.send_and_assert_no_replies functionality
     def test_zzz_syslog_sess(self):
-        """ NAT44ED Test syslog session creation and deletion """
-        self.vapi.syslog_set_filter(
-            self.syslog_severity.SYSLOG_API_SEVERITY_INFO)
+        """NAT44ED Test syslog session creation and deletion"""
+        self.vapi.syslog_set_filter(self.syslog_severity.SYSLOG_API_SEVERITY_INFO)
         self.vapi.syslog_set_sender(self.pg3.local_ip4, self.pg3.remote_ip4)
 
         self.nat_add_address(self.nat_addr)
         self.nat_add_inside_interface(self.pg0)
         self.nat_add_outside_interface(self.pg1)
 
         self.vapi.syslog_set_sender(self.pg3.local_ip4, self.pg3.remote_ip4)
 
         self.nat_add_address(self.nat_addr)
         self.nat_add_inside_interface(self.pg0)
         self.nat_add_outside_interface(self.pg1)
 
-        p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-             IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4) /
-             TCP(sport=self.tcp_port_in, dport=self.tcp_external_port))
+        p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4)
+            / TCP(sport=self.tcp_port_in, dport=self.tcp_external_port)
+        )
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         capture = self.pg1.get_capture(1)
         self.tcp_port_out = capture[0][TCP].sport
         capture = self.pg3.get_capture(1)
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         capture = self.pg1.get_capture(1)
         self.tcp_port_out = capture[0][TCP].sport
         capture = self.pg3.get_capture(1)
-        self.verify_syslog_sess(capture[0][Raw].load, 'SADD')
+        self.verify_syslog_sess(capture[0][Raw].load, "SADD")
 
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.nat_add_address(self.nat_addr, is_add=0)
         capture = self.pg3.get_capture(1)
 
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.nat_add_address(self.nat_addr, is_add=0)
         capture = self.pg3.get_capture(1)
-        self.verify_syslog_sess(capture[0][Raw].load, 'SDEL')
+        self.verify_syslog_sess(capture[0][Raw].load, "SDEL")
 
     # put zzz in front of syslog test name so that it runs as a last test
     # setting syslog sender cannot be undone and if it is set, it messes
     # with self.send_and_assert_no_replies functionality
     def test_zzz_syslog_sess_reopen(self):
 
     # put zzz in front of syslog test name so that it runs as a last test
     # setting syslog sender cannot be undone and if it is set, it messes
     # with self.send_and_assert_no_replies functionality
     def test_zzz_syslog_sess_reopen(self):
-        """ Syslog events for session reopen """
-        self.vapi.syslog_set_filter(
-            self.syslog_severity.SYSLOG_API_SEVERITY_INFO)
+        """Syslog events for session reopen"""
+        self.vapi.syslog_set_filter(self.syslog_severity.SYSLOG_API_SEVERITY_INFO)
         self.vapi.syslog_set_sender(self.pg3.local_ip4, self.pg3.remote_ip4)
 
         self.nat_add_address(self.nat_addr)
         self.vapi.syslog_set_sender(self.pg3.local_ip4, self.pg3.remote_ip4)
 
         self.nat_add_address(self.nat_addr)
@@ -3115,55 +3375,62 @@ class TestNAT44EDMW(TestNAT44ED):
         self.nat_add_outside_interface(self.pg1)
 
         # SYN in2out
         self.nat_add_outside_interface(self.pg1)
 
         # SYN in2out
-        p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-             IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4) /
-             TCP(sport=self.tcp_port_in, dport=self.tcp_external_port))
+        p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4)
+            / TCP(sport=self.tcp_port_in, dport=self.tcp_external_port)
+        )
         capture = self.send_and_expect(self.pg0, p, self.pg1)[0]
         self.tcp_port_out = capture[0][TCP].sport
         capture = self.pg3.get_capture(1)
         capture = self.send_and_expect(self.pg0, p, self.pg1)[0]
         self.tcp_port_out = capture[0][TCP].sport
         capture = self.pg3.get_capture(1)
-        self.verify_syslog_sess(capture[0][Raw].load, 'SADD')
+        self.verify_syslog_sess(capture[0][Raw].load, "SADD")
 
         # SYN out2in
 
         # SYN out2in
-        p = (Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac) /
-             IP(src=self.pg1.remote_ip4, dst=self.nat_addr) /
-             TCP(sport=self.tcp_external_port, dport=self.tcp_port_out,
-                 flags='SA'))
+        p = (
+            Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac)
+            / IP(src=self.pg1.remote_ip4, dst=self.nat_addr)
+            / TCP(sport=self.tcp_external_port, dport=self.tcp_port_out, flags="SA")
+        )
         self.send_and_expect(self.pg1, p, self.pg0)
 
         self.send_and_expect(self.pg1, p, self.pg0)
 
-        p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-             IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4) /
-             TCP(sport=self.tcp_port_in, dport=self.tcp_external_port,
-                 flags="A"))
+        p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4)
+            / TCP(sport=self.tcp_port_in, dport=self.tcp_external_port, flags="A")
+        )
         self.send_and_expect(self.pg0, p, self.pg1)
 
         # FIN in2out
         self.send_and_expect(self.pg0, p, self.pg1)
 
         # FIN in2out
-        p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-             IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4) /
-             TCP(sport=self.tcp_port_in, dport=self.tcp_external_port,
-                 flags="F"))
+        p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4)
+            / TCP(sport=self.tcp_port_in, dport=self.tcp_external_port, flags="F")
+        )
         self.send_and_expect(self.pg0, p, self.pg1)
 
         # FIN out2in
         self.send_and_expect(self.pg0, p, self.pg1)
 
         # FIN out2in
-        p = (Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac) /
-             IP(src=self.pg1.remote_ip4, dst=self.nat_addr) /
-             TCP(sport=self.tcp_external_port, dport=self.tcp_port_out,
-                 flags="F"))
+        p = (
+            Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac)
+            / IP(src=self.pg1.remote_ip4, dst=self.nat_addr)
+            / TCP(sport=self.tcp_external_port, dport=self.tcp_port_out, flags="F")
+        )
         self.send_and_expect(self.pg1, p, self.pg0)
 
         self.send_and_expect(self.pg1, p, self.pg0)
 
-        self.init_tcp_session(self.pg0, self.pg1, self.tcp_port_in,
-                              self.tcp_external_port)
+        self.init_tcp_session(
+            self.pg0, self.pg1, self.tcp_port_in, self.tcp_external_port
+        )
 
         # 2 records should be produced - first one del & add
         capture = self.pg3.get_capture(2)
 
         # 2 records should be produced - first one del & add
         capture = self.pg3.get_capture(2)
-        self.verify_syslog_sess(capture[0][Raw].load, 'SDEL')
-        self.verify_syslog_sess(capture[1][Raw].load, 'SADD')
+        self.verify_syslog_sess(capture[0][Raw].load, "SDEL")
+        self.verify_syslog_sess(capture[1][Raw].load, "SADD")
 
     def test_twice_nat_interface_addr(self):
 
     def test_twice_nat_interface_addr(self):
-        """ NAT44ED Acquire twice NAT addresses from interface """
+        """NAT44ED Acquire twice NAT addresses from interface"""
         flags = self.config_flags.NAT_IS_TWICE_NAT
         self.vapi.nat44_add_del_interface_addr(
         flags = self.config_flags.NAT_IS_TWICE_NAT
         self.vapi.nat44_add_del_interface_addr(
-            sw_if_index=self.pg11.sw_if_index,
-            flags=flags, is_add=1)
+            sw_if_index=self.pg11.sw_if_index, flags=flags, is_add=1
+        )
 
         # no address in NAT pool
         adresses = self.vapi.nat44_address_dump()
 
         # no address in NAT pool
         adresses = self.vapi.nat44_address_dump()
@@ -3173,8 +3440,7 @@ class TestNAT44EDMW(TestNAT44ED):
         self.pg11.config_ip4()
         adresses = self.vapi.nat44_address_dump()
         self.assertEqual(1, len(adresses))
         self.pg11.config_ip4()
         adresses = self.vapi.nat44_address_dump()
         self.assertEqual(1, len(adresses))
-        self.assertEqual(str(adresses[0].ip_address),
-                         self.pg11.local_ip4)
+        self.assertEqual(str(adresses[0].ip_address), self.pg11.local_ip4)
         self.assertEqual(adresses[0].flags, flags)
 
         # remove interface address and check NAT address pool
         self.assertEqual(adresses[0].flags, flags)
 
         # remove interface address and check NAT address pool
@@ -3183,11 +3449,12 @@ class TestNAT44EDMW(TestNAT44ED):
         self.assertEqual(0, len(adresses))
 
     def test_output_feature_stateful_acl(self):
         self.assertEqual(0, len(adresses))
 
     def test_output_feature_stateful_acl(self):
-        """ NAT44ED output feature works with stateful ACL """
+        """NAT44ED output feature works with stateful ACL"""
 
         self.nat_add_address(self.nat_addr)
         self.vapi.nat44_ed_add_del_output_interface(
 
         self.nat_add_address(self.nat_addr)
         self.vapi.nat44_ed_add_del_output_interface(
-            sw_if_index=self.pg1.sw_if_index, is_add=1)
+            sw_if_index=self.pg1.sw_if_index, is_add=1
+        )
 
         # First ensure that the NAT is working sans ACL
 
 
         # First ensure that the NAT is working sans ACL
 
@@ -3197,14 +3464,16 @@ class TestNAT44EDMW(TestNAT44ED):
 
         # send packets into inside intf, ensure received via outside intf
         pkts_in2out = self.create_stream_in(self.pg0, self.pg1)
 
         # send packets into inside intf, ensure received via outside intf
         pkts_in2out = self.create_stream_in(self.pg0, self.pg1)
-        capture = self.send_and_expect(self.pg0, pkts_in2out, self.pg1,
-                                       len(pkts_in2out))
+        capture = self.send_and_expect(
+            self.pg0, pkts_in2out, self.pg1, len(pkts_in2out)
+        )
         self.verify_capture_out(capture, ignore_port=True)
 
         # send out2in again, with sessions created it should work now
         pkts_out2in = self.create_stream_out(self.pg1)
         self.verify_capture_out(capture, ignore_port=True)
 
         # send out2in again, with sessions created it should work now
         pkts_out2in = self.create_stream_out(self.pg1)
-        capture = self.send_and_expect(self.pg1, pkts_out2in, self.pg0,
-                                       len(pkts_out2in))
+        capture = self.send_and_expect(
+            self.pg1, pkts_out2in, self.pg0, len(pkts_out2in)
+        )
         self.verify_capture_in(capture, self.pg0)
 
         # Create an ACL blocking everything
         self.verify_capture_in(capture, self.pg0)
 
         # Create an ACL blocking everything
@@ -3218,8 +3487,9 @@ class TestNAT44EDMW(TestNAT44ED):
         in2out_acl.add_vpp_config()
 
         # apply as input acl on interface and confirm it blocks everything
         in2out_acl.add_vpp_config()
 
         # apply as input acl on interface and confirm it blocks everything
-        acl_if = VppAclInterface(self, sw_if_index=self.pg1.sw_if_index,
-                                 n_input=1, acls=[out2in_acl])
+        acl_if = VppAclInterface(
+            self, sw_if_index=self.pg1.sw_if_index, n_input=1, acls=[out2in_acl]
+        )
         acl_if.add_vpp_config()
         self.send_and_assert_no_replies(self.pg1, pkts_out2in)
 
         acl_if.add_vpp_config()
         self.send_and_assert_no_replies(self.pg1, pkts_out2in)
 
@@ -3227,8 +3497,9 @@ class TestNAT44EDMW(TestNAT44ED):
         acl_if.acls = [out2in_acl, in2out_acl]
         acl_if.add_vpp_config()
         # send in2out to generate ACL state (NAT state was created earlier)
         acl_if.acls = [out2in_acl, in2out_acl]
         acl_if.add_vpp_config()
         # send in2out to generate ACL state (NAT state was created earlier)
-        capture = self.send_and_expect(self.pg0, pkts_in2out, self.pg1,
-                                       len(pkts_in2out))
+        capture = self.send_and_expect(
+            self.pg0, pkts_in2out, self.pg1, len(pkts_in2out)
+        )
         self.verify_capture_out(capture, ignore_port=True)
 
         # send out2in again. ACL state exists so it should work now.
         self.verify_capture_out(capture, ignore_port=True)
 
         # send out2in again. ACL state exists so it should work now.
@@ -3236,13 +3507,14 @@ class TestNAT44EDMW(TestNAT44ED):
         for p in pkts_out2in:
             if p.haslayer(TCP) and p[TCP].flags & 0x02:
                 p[TCP].flags |= 0x10
         for p in pkts_out2in:
             if p.haslayer(TCP) and p[TCP].flags & 0x02:
                 p[TCP].flags |= 0x10
-        capture = self.send_and_expect(self.pg1, pkts_out2in, self.pg0,
-                                       len(pkts_out2in))
+        capture = self.send_and_expect(
+            self.pg1, pkts_out2in, self.pg0, len(pkts_out2in)
+        )
         self.verify_capture_in(capture, self.pg0)
         self.logger.info(self.vapi.cli("show trace"))
 
     def test_tcp_close(self):
         self.verify_capture_in(capture, self.pg0)
         self.logger.info(self.vapi.cli("show trace"))
 
     def test_tcp_close(self):
-        """ NAT44ED Close TCP session from inside network - output feature """
+        """NAT44ED Close TCP session from inside network - output feature"""
         config = self.vapi.nat44_show_running_config()
         old_timeouts = config.timeouts
         new_transitory = 2
         config = self.vapi.nat44_show_running_config()
         old_timeouts = config.timeouts
         new_transitory = 2
@@ -3250,77 +3522,92 @@ class TestNAT44EDMW(TestNAT44ED):
             udp=old_timeouts.udp,
             tcp_established=old_timeouts.tcp_established,
             icmp=old_timeouts.icmp,
             udp=old_timeouts.udp,
             tcp_established=old_timeouts.tcp_established,
             icmp=old_timeouts.icmp,
-            tcp_transitory=new_transitory)
+            tcp_transitory=new_transitory,
+        )
 
         self.vapi.nat44_forwarding_enable_disable(enable=1)
         self.nat_add_address(self.pg1.local_ip4)
 
         self.vapi.nat44_forwarding_enable_disable(enable=1)
         self.nat_add_address(self.pg1.local_ip4)
-        twice_nat_addr = '10.0.1.3'
-        service_ip = '192.168.16.150'
+        twice_nat_addr = "10.0.1.3"
+        service_ip = "192.168.16.150"
         self.nat_add_address(twice_nat_addr, twice_nat=1)
 
         flags = self.config_flags.NAT_IS_INSIDE
         self.vapi.nat44_interface_add_del_feature(
         self.nat_add_address(twice_nat_addr, twice_nat=1)
 
         flags = self.config_flags.NAT_IS_INSIDE
         self.vapi.nat44_interface_add_del_feature(
-            sw_if_index=self.pg0.sw_if_index,
-            is_add=1)
+            sw_if_index=self.pg0.sw_if_index, is_add=1
+        )
         self.vapi.nat44_interface_add_del_feature(
         self.vapi.nat44_interface_add_del_feature(
-            sw_if_index=self.pg0.sw_if_index,
-            flags=flags, is_add=1)
+            sw_if_index=self.pg0.sw_if_index, flags=flags, is_add=1
+        )
         self.vapi.nat44_ed_add_del_output_interface(
         self.vapi.nat44_ed_add_del_output_interface(
-            is_add=1,
-            sw_if_index=self.pg1.sw_if_index)
-
-        flags = (self.config_flags.NAT_IS_OUT2IN_ONLY |
-                 self.config_flags.NAT_IS_TWICE_NAT)
-        self.nat_add_static_mapping(self.pg0.remote_ip4,
-                                    service_ip, 80, 80,
-                                    proto=IP_PROTOS.tcp,
-                                    flags=flags)
+            is_add=1, sw_if_index=self.pg1.sw_if_index
+        )
+
+        flags = (
+            self.config_flags.NAT_IS_OUT2IN_ONLY | self.config_flags.NAT_IS_TWICE_NAT
+        )
+        self.nat_add_static_mapping(
+            self.pg0.remote_ip4, service_ip, 80, 80, proto=IP_PROTOS.tcp, flags=flags
+        )
         sessions = self.vapi.nat44_user_session_dump(self.pg0.remote_ip4, 0)
         start_sessnum = len(sessions)
 
         # SYN packet out->in
         sessions = self.vapi.nat44_user_session_dump(self.pg0.remote_ip4, 0)
         start_sessnum = len(sessions)
 
         # SYN packet out->in
-        p = (Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac) /
-             IP(src=self.pg1.remote_ip4, dst=service_ip) /
-             TCP(sport=33898, dport=80, flags="S"))
+        p = (
+            Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
+            / IP(src=self.pg1.remote_ip4, dst=service_ip)
+            / TCP(sport=33898, dport=80, flags="S")
+        )
         capture = self.send_and_expect(self.pg1, p, self.pg0, n_rx=1)
         p = capture[0]
         tcp_port = p[TCP].sport
 
         # SYN + ACK packet in->out
         capture = self.send_and_expect(self.pg1, p, self.pg0, n_rx=1)
         p = capture[0]
         tcp_port = p[TCP].sport
 
         # SYN + ACK packet in->out
-        p = (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-             IP(src=self.pg0.remote_ip4, dst=twice_nat_addr) /
-             TCP(sport=80, dport=tcp_port, flags="SA"))
+        p = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg0.remote_ip4, dst=twice_nat_addr)
+            / TCP(sport=80, dport=tcp_port, flags="SA")
+        )
         self.send_and_expect(self.pg0, p, self.pg1, n_rx=1)
 
         # ACK packet out->in
         self.send_and_expect(self.pg0, p, self.pg1, n_rx=1)
 
         # ACK packet out->in
-        p = (Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac) /
-             IP(src=self.pg1.remote_ip4, dst=service_ip) /
-             TCP(sport=33898, dport=80, flags="A"))
+        p = (
+            Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
+            / IP(src=self.pg1.remote_ip4, dst=service_ip)
+            / TCP(sport=33898, dport=80, flags="A")
+        )
         self.send_and_expect(self.pg1, p, self.pg0, n_rx=1)
 
         # FIN packet in -> out
         self.send_and_expect(self.pg1, p, self.pg0, n_rx=1)
 
         # FIN packet in -> out
-        p = (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-             IP(src=self.pg0.remote_ip4, dst=twice_nat_addr) /
-             TCP(sport=80, dport=tcp_port, flags="FA", seq=100, ack=300))
+        p = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg0.remote_ip4, dst=twice_nat_addr)
+            / TCP(sport=80, dport=tcp_port, flags="FA", seq=100, ack=300)
+        )
         self.send_and_expect(self.pg0, p, self.pg1, n_rx=1)
 
         # FIN+ACK packet out -> in
         self.send_and_expect(self.pg0, p, self.pg1, n_rx=1)
 
         # FIN+ACK packet out -> in
-        p = (Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac) /
-             IP(src=self.pg1.remote_ip4, dst=service_ip) /
-             TCP(sport=33898, dport=80, flags="FA", seq=300, ack=101))
+        p = (
+            Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
+            / IP(src=self.pg1.remote_ip4, dst=service_ip)
+            / TCP(sport=33898, dport=80, flags="FA", seq=300, ack=101)
+        )
         self.send_and_expect(self.pg1, p, self.pg0, n_rx=1)
 
         # ACK packet in -> out
         self.send_and_expect(self.pg1, p, self.pg0, n_rx=1)
 
         # ACK packet in -> out
-        p = (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-             IP(src=self.pg0.remote_ip4, dst=twice_nat_addr) /
-             TCP(sport=80, dport=tcp_port, flags="A", seq=101, ack=301))
+        p = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg0.remote_ip4, dst=twice_nat_addr)
+            / TCP(sport=80, dport=tcp_port, flags="A", seq=101, ack=301)
+        )
         self.send_and_expect(self.pg0, p, self.pg1, n_rx=1)
 
         # session now in transitory timeout, but traffic still flows
         # try FIN packet out->in
         self.send_and_expect(self.pg0, p, self.pg1, n_rx=1)
 
         # session now in transitory timeout, but traffic still flows
         # try FIN packet out->in
-        p = (Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac) /
-             IP(src=self.pg1.remote_ip4, dst=service_ip) /
-             TCP(sport=33898, dport=80, flags="F"))
+        p = (
+            Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
+            / IP(src=self.pg1.remote_ip4, dst=service_ip)
+            / TCP(sport=33898, dport=80, flags="F")
+        )
         self.pg1.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg1.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -3334,15 +3621,17 @@ class TestNAT44EDMW(TestNAT44ED):
 
         # send FIN+ACK packet out -> in - will cause session to be wiped
         # but won't create a new session
 
         # send FIN+ACK packet out -> in - will cause session to be wiped
         # but won't create a new session
-        p = (Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac) /
-             IP(src=self.pg1.remote_ip4, dst=service_ip) /
-             TCP(sport=33898, dport=80, flags="FA", seq=300, ack=101))
+        p = (
+            Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
+            / IP(src=self.pg1.remote_ip4, dst=service_ip)
+            / TCP(sport=33898, dport=80, flags="FA", seq=300, ack=101)
+        )
         self.send_and_assert_no_replies(self.pg1, p)
         sessions = self.vapi.nat44_user_session_dump(self.pg0.remote_ip4, 0)
         self.assertEqual(len(sessions) - start_sessnum, 0)
 
     def test_tcp_session_close_in(self):
         self.send_and_assert_no_replies(self.pg1, p)
         sessions = self.vapi.nat44_user_session_dump(self.pg0.remote_ip4, 0)
         self.assertEqual(len(sessions) - start_sessnum, 0)
 
     def test_tcp_session_close_in(self):
-        """ NAT44ED Close TCP session from inside network """
+        """NAT44ED Close TCP session from inside network"""
 
         in_port = self.tcp_port_in
         out_port = 10505
 
         in_port = self.tcp_port_in
         out_port = 10505
@@ -3351,79 +3640,92 @@ class TestNAT44EDMW(TestNAT44ED):
         self.nat_add_address(self.nat_addr)
         self.nat_add_inside_interface(self.pg0)
         self.nat_add_outside_interface(self.pg1)
         self.nat_add_address(self.nat_addr)
         self.nat_add_inside_interface(self.pg0)
         self.nat_add_outside_interface(self.pg1)
-        self.nat_add_static_mapping(self.pg0.remote_ip4, self.nat_addr,
-                                    in_port, out_port, proto=IP_PROTOS.tcp,
-                                    flags=self.config_flags.NAT_IS_TWICE_NAT)
+        self.nat_add_static_mapping(
+            self.pg0.remote_ip4,
+            self.nat_addr,
+            in_port,
+            out_port,
+            proto=IP_PROTOS.tcp,
+            flags=self.config_flags.NAT_IS_TWICE_NAT,
+        )
 
         sessions = self.vapi.nat44_user_session_dump(self.pg0.remote_ip4, 0)
         session_n = len(sessions)
 
 
         sessions = self.vapi.nat44_user_session_dump(self.pg0.remote_ip4, 0)
         session_n = len(sessions)
 
-        self.vapi.nat_set_timeouts(udp=300, tcp_established=7440,
-                                   tcp_transitory=2, icmp=5)
+        self.vapi.nat_set_timeouts(
+            udp=300, tcp_established=7440, tcp_transitory=2, icmp=5
+        )
 
         self.init_tcp_session(self.pg0, self.pg1, in_port, ext_port)
 
         # FIN packet in -> out
 
         self.init_tcp_session(self.pg0, self.pg1, in_port, ext_port)
 
         # FIN packet in -> out
-        p = (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-             IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4) /
-             TCP(sport=in_port, dport=ext_port,
-                 flags="FA", seq=100, ack=300))
+        p = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4)
+            / TCP(sport=in_port, dport=ext_port, flags="FA", seq=100, ack=300)
+        )
         self.send_and_expect(self.pg0, p, self.pg1)
         pkts = []
 
         # ACK packet out -> in
         self.send_and_expect(self.pg0, p, self.pg1)
         pkts = []
 
         # ACK packet out -> in
-        p = (Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac) /
-             IP(src=self.pg1.remote_ip4, dst=self.nat_addr) /
-             TCP(sport=ext_port, dport=out_port,
-                 flags="A", seq=300, ack=101))
+        p = (
+            Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
+            / IP(src=self.pg1.remote_ip4, dst=self.nat_addr)
+            / TCP(sport=ext_port, dport=out_port, flags="A", seq=300, ack=101)
+        )
         pkts.append(p)
 
         # FIN packet out -> in
         pkts.append(p)
 
         # FIN packet out -> in
-        p = (Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac) /
-             IP(src=self.pg1.remote_ip4, dst=self.nat_addr) /
-             TCP(sport=ext_port, dport=out_port,
-                 flags="FA", seq=300, ack=101))
+        p = (
+            Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
+            / IP(src=self.pg1.remote_ip4, dst=self.nat_addr)
+            / TCP(sport=ext_port, dport=out_port, flags="FA", seq=300, ack=101)
+        )
         pkts.append(p)
 
         self.send_and_expect(self.pg1, pkts, self.pg0)
 
         # ACK packet in -> out
         pkts.append(p)
 
         self.send_and_expect(self.pg1, pkts, self.pg0)
 
         # ACK packet in -> out
-        p = (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-             IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4) /
-             TCP(sport=in_port, dport=ext_port,
-                 flags="A", seq=101, ack=301))
+        p = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4)
+            / TCP(sport=in_port, dport=ext_port, flags="A", seq=101, ack=301)
+        )
         self.send_and_expect(self.pg0, p, self.pg1)
 
         sessions = self.vapi.nat44_user_session_dump(self.pg0.remote_ip4, 0)
         self.assertEqual(len(sessions) - session_n, 1)
 
         # retransmit FIN packet out -> in
         self.send_and_expect(self.pg0, p, self.pg1)
 
         sessions = self.vapi.nat44_user_session_dump(self.pg0.remote_ip4, 0)
         self.assertEqual(len(sessions) - session_n, 1)
 
         # retransmit FIN packet out -> in
-        p = (Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac) /
-             IP(src=self.pg1.remote_ip4, dst=self.nat_addr) /
-             TCP(sport=ext_port, dport=out_port,
-                 flags="FA", seq=300, ack=101))
+        p = (
+            Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
+            / IP(src=self.pg1.remote_ip4, dst=self.nat_addr)
+            / TCP(sport=ext_port, dport=out_port, flags="FA", seq=300, ack=101)
+        )
 
         self.send_and_expect(self.pg1, p, self.pg0)
 
         # retransmit ACK packet in -> out
 
         self.send_and_expect(self.pg1, p, self.pg0)
 
         # retransmit ACK packet in -> out
-        p = (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-             IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4) /
-             TCP(sport=in_port, dport=ext_port,
-                 flags="A", seq=101, ack=301))
+        p = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4)
+            / TCP(sport=in_port, dport=ext_port, flags="A", seq=101, ack=301)
+        )
         self.send_and_expect(self.pg0, p, self.pg1)
 
         self.virtual_sleep(3)
         # retransmit ACK packet in -> out - this will cause session to be wiped
         self.send_and_expect(self.pg0, p, self.pg1)
 
         self.virtual_sleep(3)
         # retransmit ACK packet in -> out - this will cause session to be wiped
-        p = (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-             IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4) /
-             TCP(sport=in_port, dport=ext_port,
-                 flags="A", seq=101, ack=301))
+        p = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4)
+            / TCP(sport=in_port, dport=ext_port, flags="A", seq=101, ack=301)
+        )
         self.send_and_assert_no_replies(self.pg0, p)
         sessions = self.vapi.nat44_user_session_dump(self.pg0.remote_ip4, 0)
         self.assertEqual(len(sessions) - session_n, 0)
 
     def test_tcp_session_close_out(self):
         self.send_and_assert_no_replies(self.pg0, p)
         sessions = self.vapi.nat44_user_session_dump(self.pg0.remote_ip4, 0)
         self.assertEqual(len(sessions) - session_n, 0)
 
     def test_tcp_session_close_out(self):
-        """ NAT44ED Close TCP session from outside network """
+        """NAT44ED Close TCP session from outside network"""
 
         in_port = self.tcp_port_in
         out_port = 10505
 
         in_port = self.tcp_port_in
         out_port = 10505
@@ -3432,33 +3734,41 @@ class TestNAT44EDMW(TestNAT44ED):
         self.nat_add_address(self.nat_addr)
         self.nat_add_inside_interface(self.pg0)
         self.nat_add_outside_interface(self.pg1)
         self.nat_add_address(self.nat_addr)
         self.nat_add_inside_interface(self.pg0)
         self.nat_add_outside_interface(self.pg1)
-        self.nat_add_static_mapping(self.pg0.remote_ip4, self.nat_addr,
-                                    in_port, out_port, proto=IP_PROTOS.tcp,
-                                    flags=self.config_flags.NAT_IS_TWICE_NAT)
+        self.nat_add_static_mapping(
+            self.pg0.remote_ip4,
+            self.nat_addr,
+            in_port,
+            out_port,
+            proto=IP_PROTOS.tcp,
+            flags=self.config_flags.NAT_IS_TWICE_NAT,
+        )
 
         sessions = self.vapi.nat44_user_session_dump(self.pg0.remote_ip4, 0)
         session_n = len(sessions)
 
 
         sessions = self.vapi.nat44_user_session_dump(self.pg0.remote_ip4, 0)
         session_n = len(sessions)
 
-        self.vapi.nat_set_timeouts(udp=300, tcp_established=7440,
-                                   tcp_transitory=2, icmp=5)
+        self.vapi.nat_set_timeouts(
+            udp=300, tcp_established=7440, tcp_transitory=2, icmp=5
+        )
 
         _ = self.init_tcp_session(self.pg0, self.pg1, in_port, ext_port)
 
         # FIN packet out -> in
 
         _ = self.init_tcp_session(self.pg0, self.pg1, in_port, ext_port)
 
         # FIN packet out -> in
-        p = (Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac) /
-             IP(src=self.pg1.remote_ip4, dst=self.nat_addr) /
-             TCP(sport=ext_port, dport=out_port,
-                 flags="FA", seq=100, ack=300))
+        p = (
+            Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
+            / IP(src=self.pg1.remote_ip4, dst=self.nat_addr)
+            / TCP(sport=ext_port, dport=out_port, flags="FA", seq=100, ack=300)
+        )
         self.pg1.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg0.get_capture(1)
 
         # FIN+ACK packet in -> out
         self.pg1.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg0.get_capture(1)
 
         # FIN+ACK packet in -> out
-        p = (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-             IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4) /
-             TCP(sport=in_port, dport=ext_port,
-                 flags="FA", seq=300, ack=101))
+        p = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4)
+            / TCP(sport=in_port, dport=ext_port, flags="FA", seq=300, ack=101)
+        )
 
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
 
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
@@ -3466,10 +3776,11 @@ class TestNAT44EDMW(TestNAT44ED):
         self.pg1.get_capture(1)
 
         # ACK packet out -> in
         self.pg1.get_capture(1)
 
         # ACK packet out -> in
-        p = (Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac) /
-             IP(src=self.pg1.remote_ip4, dst=self.nat_addr) /
-             TCP(sport=ext_port, dport=out_port,
-                 flags="A", seq=101, ack=301))
+        p = (
+            Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
+            / IP(src=self.pg1.remote_ip4, dst=self.nat_addr)
+            / TCP(sport=ext_port, dport=out_port, flags="A", seq=101, ack=301)
+        )
         self.pg1.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg1.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -3479,31 +3790,34 @@ class TestNAT44EDMW(TestNAT44ED):
         self.assertEqual(len(sessions) - session_n, 1)
 
         # retransmit FIN packet out -> in
         self.assertEqual(len(sessions) - session_n, 1)
 
         # retransmit FIN packet out -> in
-        p = (Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac) /
-             IP(src=self.pg1.remote_ip4, dst=self.nat_addr) /
-             TCP(sport=ext_port, dport=out_port,
-                 flags="FA", seq=300, ack=101))
+        p = (
+            Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
+            / IP(src=self.pg1.remote_ip4, dst=self.nat_addr)
+            / TCP(sport=ext_port, dport=out_port, flags="FA", seq=300, ack=101)
+        )
         self.send_and_expect(self.pg1, p, self.pg0)
 
         # retransmit ACK packet in -> out
         self.send_and_expect(self.pg1, p, self.pg0)
 
         # retransmit ACK packet in -> out
-        p = (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-             IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4) /
-             TCP(sport=in_port, dport=ext_port,
-                 flags="A", seq=101, ack=301))
+        p = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4)
+            / TCP(sport=in_port, dport=ext_port, flags="A", seq=101, ack=301)
+        )
         self.send_and_expect(self.pg0, p, self.pg1)
 
         self.virtual_sleep(3)
         # retransmit ACK packet in -> out - this will cause session to be wiped
         self.send_and_expect(self.pg0, p, self.pg1)
 
         self.virtual_sleep(3)
         # retransmit ACK packet in -> out - this will cause session to be wiped
-        p = (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-             IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4) /
-             TCP(sport=in_port, dport=ext_port,
-                 flags="A", seq=101, ack=301))
+        p = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4)
+            / TCP(sport=in_port, dport=ext_port, flags="A", seq=101, ack=301)
+        )
         self.send_and_assert_no_replies(self.pg0, p)
         sessions = self.vapi.nat44_user_session_dump(self.pg0.remote_ip4, 0)
         self.assertEqual(len(sessions) - session_n, 0)
 
     def test_tcp_session_close_simultaneous(self):
         self.send_and_assert_no_replies(self.pg0, p)
         sessions = self.vapi.nat44_user_session_dump(self.pg0.remote_ip4, 0)
         self.assertEqual(len(sessions) - session_n, 0)
 
     def test_tcp_session_close_simultaneous(self):
-        """ Simultaneous TCP close from both sides """
+        """Simultaneous TCP close from both sides"""
 
         in_port = self.tcp_port_in
         ext_port = 10505
 
         in_port = self.tcp_port_in
         ext_port = 10505
@@ -3511,252 +3825,297 @@ class TestNAT44EDMW(TestNAT44ED):
         self.nat_add_address(self.nat_addr)
         self.nat_add_inside_interface(self.pg0)
         self.nat_add_outside_interface(self.pg1)
         self.nat_add_address(self.nat_addr)
         self.nat_add_inside_interface(self.pg0)
         self.nat_add_outside_interface(self.pg1)
-        self.nat_add_static_mapping(self.pg0.remote_ip4, self.nat_addr,
-                                    in_port, ext_port, proto=IP_PROTOS.tcp,
-                                    flags=self.config_flags.NAT_IS_TWICE_NAT)
+        self.nat_add_static_mapping(
+            self.pg0.remote_ip4,
+            self.nat_addr,
+            in_port,
+            ext_port,
+            proto=IP_PROTOS.tcp,
+            flags=self.config_flags.NAT_IS_TWICE_NAT,
+        )
 
         sessions = self.vapi.nat44_user_session_dump(self.pg0.remote_ip4, 0)
         session_n = len(sessions)
 
 
         sessions = self.vapi.nat44_user_session_dump(self.pg0.remote_ip4, 0)
         session_n = len(sessions)
 
-        self.vapi.nat_set_timeouts(udp=300, tcp_established=7440,
-                                   tcp_transitory=2, icmp=5)
+        self.vapi.nat_set_timeouts(
+            udp=300, tcp_established=7440, tcp_transitory=2, icmp=5
+        )
 
         out_port = self.init_tcp_session(self.pg0, self.pg1, in_port, ext_port)
 
         # FIN packet in -> out
 
         out_port = self.init_tcp_session(self.pg0, self.pg1, in_port, ext_port)
 
         # FIN packet in -> out
-        p = (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-             IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4) /
-             TCP(sport=in_port, dport=ext_port,
-                 flags="FA", seq=100, ack=300))
+        p = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4)
+            / TCP(sport=in_port, dport=ext_port, flags="FA", seq=100, ack=300)
+        )
         self.send_and_expect(self.pg0, p, self.pg1)
 
         # FIN packet out -> in
         self.send_and_expect(self.pg0, p, self.pg1)
 
         # FIN packet out -> in
-        p = (Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac) /
-             IP(src=self.pg1.remote_ip4, dst=self.nat_addr) /
-             TCP(sport=ext_port, dport=out_port,
-                 flags="FA", seq=300, ack=100))
+        p = (
+            Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
+            / IP(src=self.pg1.remote_ip4, dst=self.nat_addr)
+            / TCP(sport=ext_port, dport=out_port, flags="FA", seq=300, ack=100)
+        )
         self.send_and_expect(self.pg1, p, self.pg0)
 
         # ACK packet in -> out
         self.send_and_expect(self.pg1, p, self.pg0)
 
         # ACK packet in -> out
-        p = (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-             IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4) /
-             TCP(sport=in_port, dport=ext_port,
-                 flags="A", seq=101, ack=301))
+        p = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4)
+            / TCP(sport=in_port, dport=ext_port, flags="A", seq=101, ack=301)
+        )
         self.send_and_expect(self.pg0, p, self.pg1)
 
         # ACK packet out -> in
         self.send_and_expect(self.pg0, p, self.pg1)
 
         # ACK packet out -> in
-        p = (Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac) /
-             IP(src=self.pg1.remote_ip4, dst=self.nat_addr) /
-             TCP(sport=ext_port, dport=out_port,
-                 flags="A", seq=301, ack=101))
+        p = (
+            Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
+            / IP(src=self.pg1.remote_ip4, dst=self.nat_addr)
+            / TCP(sport=ext_port, dport=out_port, flags="A", seq=301, ack=101)
+        )
         self.send_and_expect(self.pg1, p, self.pg0)
 
         sessions = self.vapi.nat44_user_session_dump(self.pg0.remote_ip4, 0)
         self.assertEqual(len(sessions) - session_n, 1)
 
         # retransmit FIN packet out -> in
         self.send_and_expect(self.pg1, p, self.pg0)
 
         sessions = self.vapi.nat44_user_session_dump(self.pg0.remote_ip4, 0)
         self.assertEqual(len(sessions) - session_n, 1)
 
         # retransmit FIN packet out -> in
-        p = (Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac) /
-             IP(src=self.pg1.remote_ip4, dst=self.nat_addr) /
-             TCP(sport=ext_port, dport=out_port,
-                 flags="FA", seq=300, ack=101))
+        p = (
+            Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
+            / IP(src=self.pg1.remote_ip4, dst=self.nat_addr)
+            / TCP(sport=ext_port, dport=out_port, flags="FA", seq=300, ack=101)
+        )
         self.send_and_expect(self.pg1, p, self.pg0)
 
         # retransmit ACK packet in -> out
         self.send_and_expect(self.pg1, p, self.pg0)
 
         # retransmit ACK packet in -> out
-        p = (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-             IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4) /
-             TCP(sport=in_port, dport=ext_port,
-                 flags="A", seq=101, ack=301))
+        p = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4)
+            / TCP(sport=in_port, dport=ext_port, flags="A", seq=101, ack=301)
+        )
         self.send_and_expect(self.pg0, p, self.pg1)
 
         self.virtual_sleep(3)
         # retransmit ACK packet in -> out - this will cause session to be wiped
         self.send_and_expect(self.pg0, p, self.pg1)
 
         self.virtual_sleep(3)
         # retransmit ACK packet in -> out - this will cause session to be wiped
-        p = (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-             IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4) /
-             TCP(sport=in_port, dport=ext_port,
-                 flags="A", seq=101, ack=301))
+        p = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4)
+            / TCP(sport=in_port, dport=ext_port, flags="A", seq=101, ack=301)
+        )
         self.pg_send(self.pg0, p)
         self.send_and_assert_no_replies(self.pg0, p)
         sessions = self.vapi.nat44_user_session_dump(self.pg0.remote_ip4, 0)
         self.assertEqual(len(sessions) - session_n, 0)
 
     def test_tcp_session_half_reopen_inside(self):
         self.pg_send(self.pg0, p)
         self.send_and_assert_no_replies(self.pg0, p)
         sessions = self.vapi.nat44_user_session_dump(self.pg0.remote_ip4, 0)
         self.assertEqual(len(sessions) - session_n, 0)
 
     def test_tcp_session_half_reopen_inside(self):
-        """ TCP session in FIN/FIN state not reopened by in2out SYN only """
+        """TCP session in FIN/FIN state not reopened by in2out SYN only"""
         in_port = self.tcp_port_in
         ext_port = 10505
 
         self.nat_add_address(self.nat_addr)
         self.nat_add_inside_interface(self.pg0)
         self.nat_add_outside_interface(self.pg1)
         in_port = self.tcp_port_in
         ext_port = 10505
 
         self.nat_add_address(self.nat_addr)
         self.nat_add_inside_interface(self.pg0)
         self.nat_add_outside_interface(self.pg1)
-        self.nat_add_static_mapping(self.pg0.remote_ip4, self.nat_addr,
-                                    in_port, ext_port, proto=IP_PROTOS.tcp,
-                                    flags=self.config_flags.NAT_IS_TWICE_NAT)
+        self.nat_add_static_mapping(
+            self.pg0.remote_ip4,
+            self.nat_addr,
+            in_port,
+            ext_port,
+            proto=IP_PROTOS.tcp,
+            flags=self.config_flags.NAT_IS_TWICE_NAT,
+        )
 
         sessions = self.vapi.nat44_user_session_dump(self.pg0.remote_ip4, 0)
         session_n = len(sessions)
 
 
         sessions = self.vapi.nat44_user_session_dump(self.pg0.remote_ip4, 0)
         session_n = len(sessions)
 
-        self.vapi.nat_set_timeouts(udp=300, tcp_established=7440,
-                                   tcp_transitory=2, icmp=5)
+        self.vapi.nat_set_timeouts(
+            udp=300, tcp_established=7440, tcp_transitory=2, icmp=5
+        )
 
         out_port = self.init_tcp_session(self.pg0, self.pg1, in_port, ext_port)
 
         # FIN packet in -> out
 
         out_port = self.init_tcp_session(self.pg0, self.pg1, in_port, ext_port)
 
         # FIN packet in -> out
-        p = (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-             IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4) /
-             TCP(sport=in_port, dport=ext_port,
-                 flags="FA", seq=100, ack=300))
+        p = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4)
+            / TCP(sport=in_port, dport=ext_port, flags="FA", seq=100, ack=300)
+        )
         self.send_and_expect(self.pg0, p, self.pg1)
 
         # FIN packet out -> in
         self.send_and_expect(self.pg0, p, self.pg1)
 
         # FIN packet out -> in
-        p = (Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac) /
-             IP(src=self.pg1.remote_ip4, dst=self.nat_addr) /
-             TCP(sport=ext_port, dport=out_port,
-                 flags="FA", seq=300, ack=100))
+        p = (
+            Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
+            / IP(src=self.pg1.remote_ip4, dst=self.nat_addr)
+            / TCP(sport=ext_port, dport=out_port, flags="FA", seq=300, ack=100)
+        )
         self.send_and_expect(self.pg1, p, self.pg0)
 
         sessions = self.vapi.nat44_user_session_dump(self.pg0.remote_ip4, 0)
         self.assertEqual(len(sessions) - session_n, 1)
 
         # send SYN packet in -> out
         self.send_and_expect(self.pg1, p, self.pg0)
 
         sessions = self.vapi.nat44_user_session_dump(self.pg0.remote_ip4, 0)
         self.assertEqual(len(sessions) - session_n, 1)
 
         # send SYN packet in -> out
-        p = (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-             IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4) /
-             TCP(sport=in_port, dport=ext_port,
-                 flags="S", seq=101, ack=301))
+        p = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4)
+            / TCP(sport=in_port, dport=ext_port, flags="S", seq=101, ack=301)
+        )
         self.send_and_expect(self.pg0, p, self.pg1)
 
         self.virtual_sleep(3)
         # send ACK packet in -> out - session should be wiped
         self.send_and_expect(self.pg0, p, self.pg1)
 
         self.virtual_sleep(3)
         # send ACK packet in -> out - session should be wiped
-        p = (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-             IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4) /
-             TCP(sport=in_port, dport=ext_port,
-                 flags="A", seq=101, ack=301))
+        p = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4)
+            / TCP(sport=in_port, dport=ext_port, flags="A", seq=101, ack=301)
+        )
         self.send_and_assert_no_replies(self.pg0, p, self.pg1)
         sessions = self.vapi.nat44_user_session_dump(self.pg0.remote_ip4, 0)
         self.assertEqual(len(sessions) - session_n, 0)
 
     def test_tcp_session_half_reopen_outside(self):
         self.send_and_assert_no_replies(self.pg0, p, self.pg1)
         sessions = self.vapi.nat44_user_session_dump(self.pg0.remote_ip4, 0)
         self.assertEqual(len(sessions) - session_n, 0)
 
     def test_tcp_session_half_reopen_outside(self):
-        """ TCP session in FIN/FIN state not reopened by out2in SYN only """
+        """TCP session in FIN/FIN state not reopened by out2in SYN only"""
         in_port = self.tcp_port_in
         ext_port = 10505
 
         self.nat_add_address(self.nat_addr)
         self.nat_add_inside_interface(self.pg0)
         self.nat_add_outside_interface(self.pg1)
         in_port = self.tcp_port_in
         ext_port = 10505
 
         self.nat_add_address(self.nat_addr)
         self.nat_add_inside_interface(self.pg0)
         self.nat_add_outside_interface(self.pg1)
-        self.nat_add_static_mapping(self.pg0.remote_ip4, self.nat_addr,
-                                    in_port, ext_port, proto=IP_PROTOS.tcp,
-                                    flags=self.config_flags.NAT_IS_TWICE_NAT)
+        self.nat_add_static_mapping(
+            self.pg0.remote_ip4,
+            self.nat_addr,
+            in_port,
+            ext_port,
+            proto=IP_PROTOS.tcp,
+            flags=self.config_flags.NAT_IS_TWICE_NAT,
+        )
 
         sessions = self.vapi.nat44_user_session_dump(self.pg0.remote_ip4, 0)
         session_n = len(sessions)
 
 
         sessions = self.vapi.nat44_user_session_dump(self.pg0.remote_ip4, 0)
         session_n = len(sessions)
 
-        self.vapi.nat_set_timeouts(udp=300, tcp_established=7440,
-                                   tcp_transitory=2, icmp=5)
+        self.vapi.nat_set_timeouts(
+            udp=300, tcp_established=7440, tcp_transitory=2, icmp=5
+        )
 
         out_port = self.init_tcp_session(self.pg0, self.pg1, in_port, ext_port)
 
         # FIN packet in -> out
 
         out_port = self.init_tcp_session(self.pg0, self.pg1, in_port, ext_port)
 
         # FIN packet in -> out
-        p = (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-             IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4) /
-             TCP(sport=in_port, dport=ext_port,
-                 flags="FA", seq=100, ack=300))
+        p = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4)
+            / TCP(sport=in_port, dport=ext_port, flags="FA", seq=100, ack=300)
+        )
         self.send_and_expect(self.pg0, p, self.pg1)
 
         # FIN packet out -> in
         self.send_and_expect(self.pg0, p, self.pg1)
 
         # FIN packet out -> in
-        p = (Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac) /
-             IP(src=self.pg1.remote_ip4, dst=self.nat_addr) /
-             TCP(sport=ext_port, dport=out_port,
-                 flags="FA", seq=300, ack=100))
+        p = (
+            Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
+            / IP(src=self.pg1.remote_ip4, dst=self.nat_addr)
+            / TCP(sport=ext_port, dport=out_port, flags="FA", seq=300, ack=100)
+        )
         self.send_and_expect(self.pg1, p, self.pg0)
 
         sessions = self.vapi.nat44_user_session_dump(self.pg0.remote_ip4, 0)
         self.assertEqual(len(sessions) - session_n, 1)
 
         # send SYN packet out -> in
         self.send_and_expect(self.pg1, p, self.pg0)
 
         sessions = self.vapi.nat44_user_session_dump(self.pg0.remote_ip4, 0)
         self.assertEqual(len(sessions) - session_n, 1)
 
         # send SYN packet out -> in
-        p = (Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac) /
-             IP(src=self.pg1.remote_ip4, dst=self.nat_addr) /
-             TCP(sport=ext_port, dport=out_port,
-                 flags="S", seq=300, ack=101))
+        p = (
+            Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
+            / IP(src=self.pg1.remote_ip4, dst=self.nat_addr)
+            / TCP(sport=ext_port, dport=out_port, flags="S", seq=300, ack=101)
+        )
         self.send_and_expect(self.pg1, p, self.pg0)
 
         self.virtual_sleep(3)
         # send ACK packet in -> out - session should be wiped
         self.send_and_expect(self.pg1, p, self.pg0)
 
         self.virtual_sleep(3)
         # send ACK packet in -> out - session should be wiped
-        p = (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-             IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4) /
-             TCP(sport=in_port, dport=ext_port,
-                 flags="A", seq=101, ack=301))
+        p = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4)
+            / TCP(sport=in_port, dport=ext_port, flags="A", seq=101, ack=301)
+        )
         self.send_and_assert_no_replies(self.pg0, p, self.pg1)
         sessions = self.vapi.nat44_user_session_dump(self.pg0.remote_ip4, 0)
         self.assertEqual(len(sessions) - session_n, 0)
 
     def test_tcp_session_reopen(self):
         self.send_and_assert_no_replies(self.pg0, p, self.pg1)
         sessions = self.vapi.nat44_user_session_dump(self.pg0.remote_ip4, 0)
         self.assertEqual(len(sessions) - session_n, 0)
 
     def test_tcp_session_reopen(self):
-        """ TCP session in FIN/FIN state reopened by SYN from both sides """
+        """TCP session in FIN/FIN state reopened by SYN from both sides"""
         in_port = self.tcp_port_in
         ext_port = 10505
 
         self.nat_add_address(self.nat_addr)
         self.nat_add_inside_interface(self.pg0)
         self.nat_add_outside_interface(self.pg1)
         in_port = self.tcp_port_in
         ext_port = 10505
 
         self.nat_add_address(self.nat_addr)
         self.nat_add_inside_interface(self.pg0)
         self.nat_add_outside_interface(self.pg1)
-        self.nat_add_static_mapping(self.pg0.remote_ip4, self.nat_addr,
-                                    in_port, ext_port, proto=IP_PROTOS.tcp,
-                                    flags=self.config_flags.NAT_IS_TWICE_NAT)
+        self.nat_add_static_mapping(
+            self.pg0.remote_ip4,
+            self.nat_addr,
+            in_port,
+            ext_port,
+            proto=IP_PROTOS.tcp,
+            flags=self.config_flags.NAT_IS_TWICE_NAT,
+        )
 
         sessions = self.vapi.nat44_user_session_dump(self.pg0.remote_ip4, 0)
         session_n = len(sessions)
 
 
         sessions = self.vapi.nat44_user_session_dump(self.pg0.remote_ip4, 0)
         session_n = len(sessions)
 
-        self.vapi.nat_set_timeouts(udp=300, tcp_established=7440,
-                                   tcp_transitory=2, icmp=5)
+        self.vapi.nat_set_timeouts(
+            udp=300, tcp_established=7440, tcp_transitory=2, icmp=5
+        )
 
         out_port = self.init_tcp_session(self.pg0, self.pg1, in_port, ext_port)
 
         # FIN packet in -> out
 
         out_port = self.init_tcp_session(self.pg0, self.pg1, in_port, ext_port)
 
         # FIN packet in -> out
-        p = (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-             IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4) /
-             TCP(sport=in_port, dport=ext_port,
-                 flags="FA", seq=100, ack=300))
+        p = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4)
+            / TCP(sport=in_port, dport=ext_port, flags="FA", seq=100, ack=300)
+        )
         self.send_and_expect(self.pg0, p, self.pg1)
 
         # FIN packet out -> in
         self.send_and_expect(self.pg0, p, self.pg1)
 
         # FIN packet out -> in
-        p = (Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac) /
-             IP(src=self.pg1.remote_ip4, dst=self.nat_addr) /
-             TCP(sport=ext_port, dport=out_port,
-                 flags="FA", seq=300, ack=100))
+        p = (
+            Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
+            / IP(src=self.pg1.remote_ip4, dst=self.nat_addr)
+            / TCP(sport=ext_port, dport=out_port, flags="FA", seq=300, ack=100)
+        )
         self.send_and_expect(self.pg1, p, self.pg0)
 
         sessions = self.vapi.nat44_user_session_dump(self.pg0.remote_ip4, 0)
         self.assertEqual(len(sessions) - session_n, 1)
 
         # send SYN packet out -> in
         self.send_and_expect(self.pg1, p, self.pg0)
 
         sessions = self.vapi.nat44_user_session_dump(self.pg0.remote_ip4, 0)
         self.assertEqual(len(sessions) - session_n, 1)
 
         # send SYN packet out -> in
-        p = (Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac) /
-             IP(src=self.pg1.remote_ip4, dst=self.nat_addr) /
-             TCP(sport=ext_port, dport=out_port,
-                 flags="S", seq=300, ack=101))
+        p = (
+            Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
+            / IP(src=self.pg1.remote_ip4, dst=self.nat_addr)
+            / TCP(sport=ext_port, dport=out_port, flags="S", seq=300, ack=101)
+        )
         self.send_and_expect(self.pg1, p, self.pg0)
 
         # send SYN packet in -> out
         self.send_and_expect(self.pg1, p, self.pg0)
 
         # send SYN packet in -> out
-        p = (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-             IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4) /
-             TCP(sport=in_port, dport=ext_port,
-                 flags="SA", seq=101, ack=301))
+        p = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4)
+            / TCP(sport=in_port, dport=ext_port, flags="SA", seq=101, ack=301)
+        )
         self.send_and_expect(self.pg0, p, self.pg1)
 
         # send ACK packet out -> in
         self.send_and_expect(self.pg0, p, self.pg1)
 
         # send ACK packet out -> in
-        p = (Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac) /
-             IP(src=self.pg1.remote_ip4, dst=self.nat_addr) /
-             TCP(sport=ext_port, dport=out_port,
-                 flags="A", seq=300, ack=101))
+        p = (
+            Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
+            / IP(src=self.pg1.remote_ip4, dst=self.nat_addr)
+            / TCP(sport=ext_port, dport=out_port, flags="A", seq=300, ack=101)
+        )
         self.send_and_expect(self.pg1, p, self.pg0)
 
         self.virtual_sleep(3)
         # send ACK packet in -> out - should be forwarded and session alive
         self.send_and_expect(self.pg1, p, self.pg0)
 
         self.virtual_sleep(3)
         # send ACK packet in -> out - should be forwarded and session alive
-        p = (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-             IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4) /
-             TCP(sport=in_port, dport=ext_port,
-                 flags="A", seq=101, ack=301))
+        p = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4)
+            / TCP(sport=in_port, dport=ext_port, flags="A", seq=101, ack=301)
+        )
         self.send_and_expect(self.pg0, p, self.pg1)
         sessions = self.vapi.nat44_user_session_dump(self.pg0.remote_ip4, 0)
         self.assertEqual(len(sessions) - session_n, 1)
 
     def test_dynamic_vrf(self):
         self.send_and_expect(self.pg0, p, self.pg1)
         sessions = self.vapi.nat44_user_session_dump(self.pg0.remote_ip4, 0)
         self.assertEqual(len(sessions) - session_n, 1)
 
     def test_dynamic_vrf(self):
-        """ NAT44ED dynamic translation test: different VRF"""
+        """NAT44ED dynamic translation test: different VRF"""
 
         vrf_id_in = 33
         vrf_id_out = 34
 
         vrf_id_in = 33
         vrf_id_out = 34
@@ -3789,30 +4148,28 @@ class TestNAT44EDMW(TestNAT44ED):
             self.pg7.unconfig()
             self.pg8.unconfig()
 
             self.pg7.unconfig()
             self.pg8.unconfig()
 
-            self.vapi.ip_table_add_del(is_add=0,
-                                       table={'table_id': vrf_id_in})
-            self.vapi.ip_table_add_del(is_add=0,
-                                       table={'table_id': vrf_id_out})
+            self.vapi.ip_table_add_del(is_add=0, table={"table_id": vrf_id_in})
+            self.vapi.ip_table_add_del(is_add=0, table={"table_id": vrf_id_out})
 
     def test_dynamic_output_feature_vrf(self):
 
     def test_dynamic_output_feature_vrf(self):
-        """ NAT44ED dynamic translation test: output-feature, VRF"""
+        """NAT44ED dynamic translation test: output-feature, VRF"""
 
         # other then default (0)
         new_vrf_id = 22
 
         self.nat_add_address(self.nat_addr)
         self.vapi.nat44_ed_add_del_output_interface(
 
         # other then default (0)
         new_vrf_id = 22
 
         self.nat_add_address(self.nat_addr)
         self.vapi.nat44_ed_add_del_output_interface(
-            sw_if_index=self.pg8.sw_if_index,
-            is_add=1)
+            sw_if_index=self.pg8.sw_if_index, is_add=1
+        )
         try:
             self.configure_ip4_interface(self.pg7, table_id=new_vrf_id)
             self.configure_ip4_interface(self.pg8, table_id=new_vrf_id)
 
             # in2out
         try:
             self.configure_ip4_interface(self.pg7, table_id=new_vrf_id)
             self.configure_ip4_interface(self.pg8, table_id=new_vrf_id)
 
             # in2out
-            tcpn = self.statistics['/nat44-ed/in2out/slowpath/tcp']
-            udpn = self.statistics['/nat44-ed/in2out/slowpath/udp']
-            icmpn = self.statistics['/nat44-ed/in2out/slowpath/icmp']
-            drops = self.statistics['/nat44-ed/in2out/slowpath/drops']
+            tcpn = self.statistics["/nat44-ed/in2out/slowpath/tcp"]
+            udpn = self.statistics["/nat44-ed/in2out/slowpath/udp"]
+            icmpn = self.statistics["/nat44-ed/in2out/slowpath/icmp"]
+            drops = self.statistics["/nat44-ed/in2out/slowpath/drops"]
 
             pkts = self.create_stream_in(self.pg7, self.pg8)
             self.pg7.add_stream(pkts)
 
             pkts = self.create_stream_in(self.pg7, self.pg8)
             self.pg7.add_stream(pkts)
@@ -3822,20 +4179,20 @@ class TestNAT44EDMW(TestNAT44ED):
             self.verify_capture_out(capture, ignore_port=True)
 
             if_idx = self.pg8.sw_if_index
             self.verify_capture_out(capture, ignore_port=True)
 
             if_idx = self.pg8.sw_if_index
-            cnt = self.statistics['/nat44-ed/in2out/slowpath/tcp']
+            cnt = self.statistics["/nat44-ed/in2out/slowpath/tcp"]
             self.assertEqual(cnt[:, if_idx].sum() - tcpn[:, if_idx].sum(), 2)
             self.assertEqual(cnt[:, if_idx].sum() - tcpn[:, if_idx].sum(), 2)
-            cnt = self.statistics['/nat44-ed/in2out/slowpath/udp']
+            cnt = self.statistics["/nat44-ed/in2out/slowpath/udp"]
             self.assertEqual(cnt[:, if_idx].sum() - udpn[:, if_idx].sum(), 1)
             self.assertEqual(cnt[:, if_idx].sum() - udpn[:, if_idx].sum(), 1)
-            cnt = self.statistics['/nat44-ed/in2out/slowpath/icmp']
+            cnt = self.statistics["/nat44-ed/in2out/slowpath/icmp"]
             self.assertEqual(cnt[:, if_idx].sum() - icmpn[:, if_idx].sum(), 1)
             self.assertEqual(cnt[:, if_idx].sum() - icmpn[:, if_idx].sum(), 1)
-            cnt = self.statistics['/nat44-ed/in2out/slowpath/drops']
+            cnt = self.statistics["/nat44-ed/in2out/slowpath/drops"]
             self.assertEqual(cnt[:, if_idx].sum() - drops[:, if_idx].sum(), 0)
 
             # out2in
             self.assertEqual(cnt[:, if_idx].sum() - drops[:, if_idx].sum(), 0)
 
             # out2in
-            tcpn = self.statistics['/nat44-ed/out2in/fastpath/tcp']
-            udpn = self.statistics['/nat44-ed/out2in/fastpath/udp']
-            icmpn = self.statistics['/nat44-ed/out2in/fastpath/icmp']
-            drops = self.statistics['/nat44-ed/out2in/fastpath/drops']
+            tcpn = self.statistics["/nat44-ed/out2in/fastpath/tcp"]
+            udpn = self.statistics["/nat44-ed/out2in/fastpath/udp"]
+            icmpn = self.statistics["/nat44-ed/out2in/fastpath/icmp"]
+            drops = self.statistics["/nat44-ed/out2in/fastpath/drops"]
 
             pkts = self.create_stream_out(self.pg8)
             self.pg8.add_stream(pkts)
 
             pkts = self.create_stream_out(self.pg8)
             self.pg8.add_stream(pkts)
@@ -3845,48 +4202,56 @@ class TestNAT44EDMW(TestNAT44ED):
             self.verify_capture_in(capture, self.pg7)
 
             if_idx = self.pg8.sw_if_index
             self.verify_capture_in(capture, self.pg7)
 
             if_idx = self.pg8.sw_if_index
-            cnt = self.statistics['/nat44-ed/out2in/fastpath/tcp']
+            cnt = self.statistics["/nat44-ed/out2in/fastpath/tcp"]
             self.assertEqual(cnt[:, if_idx].sum() - tcpn[:, if_idx].sum(), 2)
             self.assertEqual(cnt[:, if_idx].sum() - tcpn[:, if_idx].sum(), 2)
-            cnt = self.statistics['/nat44-ed/out2in/fastpath/udp']
+            cnt = self.statistics["/nat44-ed/out2in/fastpath/udp"]
             self.assertEqual(cnt[:, if_idx].sum() - udpn[:, if_idx].sum(), 1)
             self.assertEqual(cnt[:, if_idx].sum() - udpn[:, if_idx].sum(), 1)
-            cnt = self.statistics['/nat44-ed/out2in/fastpath/icmp']
+            cnt = self.statistics["/nat44-ed/out2in/fastpath/icmp"]
             self.assertEqual(cnt[:, if_idx].sum() - icmpn[:, if_idx].sum(), 1)
             self.assertEqual(cnt[:, if_idx].sum() - icmpn[:, if_idx].sum(), 1)
-            cnt = self.statistics['/nat44-ed/out2in/fastpath/drops']
+            cnt = self.statistics["/nat44-ed/out2in/fastpath/drops"]
             self.assertEqual(cnt[:, if_idx].sum() - drops[:, if_idx].sum(), 0)
 
             self.assertEqual(cnt[:, if_idx].sum() - drops[:, if_idx].sum(), 0)
 
-            sessions = self.statistics['/nat44-ed/total-sessions']
+            sessions = self.statistics["/nat44-ed/total-sessions"]
             self.assertEqual(sessions[:, 0].sum(), 3)
 
         finally:
             self.pg7.unconfig()
             self.pg8.unconfig()
 
             self.assertEqual(sessions[:, 0].sum(), 3)
 
         finally:
             self.pg7.unconfig()
             self.pg8.unconfig()
 
-            self.vapi.ip_table_add_del(is_add=0,
-                                       table={'table_id': new_vrf_id})
+            self.vapi.ip_table_add_del(is_add=0, table={"table_id": new_vrf_id})
 
     def test_next_src_nat(self):
 
     def test_next_src_nat(self):
-        """ NAT44ED On way back forward packet to nat44-in2out node. """
+        """NAT44ED On way back forward packet to nat44-in2out node."""
 
 
-        twice_nat_addr = '10.0.1.3'
+        twice_nat_addr = "10.0.1.3"
         external_port = 80
         local_port = 8080
         post_twice_nat_port = 0
 
         self.vapi.nat44_forwarding_enable_disable(enable=1)
         self.nat_add_address(twice_nat_addr, twice_nat=1)
         external_port = 80
         local_port = 8080
         post_twice_nat_port = 0
 
         self.vapi.nat44_forwarding_enable_disable(enable=1)
         self.nat_add_address(twice_nat_addr, twice_nat=1)
-        flags = (self.config_flags.NAT_IS_OUT2IN_ONLY |
-                 self.config_flags.NAT_IS_SELF_TWICE_NAT)
-        self.nat_add_static_mapping(self.pg6.remote_ip4, self.pg1.remote_ip4,
-                                    local_port, external_port,
-                                    proto=IP_PROTOS.tcp, vrf_id=1,
-                                    flags=flags)
+        flags = (
+            self.config_flags.NAT_IS_OUT2IN_ONLY
+            | self.config_flags.NAT_IS_SELF_TWICE_NAT
+        )
+        self.nat_add_static_mapping(
+            self.pg6.remote_ip4,
+            self.pg1.remote_ip4,
+            local_port,
+            external_port,
+            proto=IP_PROTOS.tcp,
+            vrf_id=1,
+            flags=flags,
+        )
         self.vapi.nat44_interface_add_del_feature(
         self.vapi.nat44_interface_add_del_feature(
-            sw_if_index=self.pg6.sw_if_index,
-            is_add=1)
+            sw_if_index=self.pg6.sw_if_index, is_add=1
+        )
 
 
-        p = (Ether(src=self.pg6.remote_mac, dst=self.pg6.local_mac) /
-             IP(src=self.pg6.remote_ip4, dst=self.pg1.remote_ip4) /
-             TCP(sport=12345, dport=external_port))
+        p = (
+            Ether(src=self.pg6.remote_mac, dst=self.pg6.local_mac)
+            / IP(src=self.pg6.remote_ip4, dst=self.pg1.remote_ip4)
+            / TCP(sport=12345, dport=external_port)
+        )
         self.pg6.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg6.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -3905,9 +4270,11 @@ class TestNAT44EDMW(TestNAT44ED):
             self.logger.error(ppp("Unexpected or invalid packet:", p))
             raise
 
             self.logger.error(ppp("Unexpected or invalid packet:", p))
             raise
 
-        p = (Ether(src=self.pg6.remote_mac, dst=self.pg6.local_mac) /
-             IP(src=self.pg6.remote_ip4, dst=twice_nat_addr) /
-             TCP(sport=local_port, dport=post_twice_nat_port))
+        p = (
+            Ether(src=self.pg6.remote_mac, dst=self.pg6.local_mac)
+            / IP(src=self.pg6.remote_ip4, dst=twice_nat_addr)
+            / TCP(sport=local_port, dport=post_twice_nat_port)
+        )
         self.pg6.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg6.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -3926,7 +4293,7 @@ class TestNAT44EDMW(TestNAT44ED):
             raise
 
     def test_one_armed_nat44_static(self):
             raise
 
     def test_one_armed_nat44_static(self):
-        """ NAT44ED One armed NAT and 1:1 NAPT asymmetrical rule """
+        """NAT44ED One armed NAT and 1:1 NAPT asymmetrical rule"""
 
         remote_host = self.pg4.remote_hosts[0]
         local_host = self.pg4.remote_hosts[1]
 
         remote_host = self.pg4.remote_hosts[0]
         local_host = self.pg4.remote_hosts[1]
@@ -3936,23 +4303,31 @@ class TestNAT44EDMW(TestNAT44ED):
 
         self.vapi.nat44_forwarding_enable_disable(enable=1)
         self.nat_add_address(self.nat_addr, twice_nat=1)
 
         self.vapi.nat44_forwarding_enable_disable(enable=1)
         self.nat_add_address(self.nat_addr, twice_nat=1)
-        flags = (self.config_flags.NAT_IS_OUT2IN_ONLY |
-                 self.config_flags.NAT_IS_TWICE_NAT)
-        self.nat_add_static_mapping(local_host.ip4, self.nat_addr,
-                                    local_port, external_port,
-                                    proto=IP_PROTOS.tcp, flags=flags)
+        flags = (
+            self.config_flags.NAT_IS_OUT2IN_ONLY | self.config_flags.NAT_IS_TWICE_NAT
+        )
+        self.nat_add_static_mapping(
+            local_host.ip4,
+            self.nat_addr,
+            local_port,
+            external_port,
+            proto=IP_PROTOS.tcp,
+            flags=flags,
+        )
         flags = self.config_flags.NAT_IS_INSIDE
         self.vapi.nat44_interface_add_del_feature(
         flags = self.config_flags.NAT_IS_INSIDE
         self.vapi.nat44_interface_add_del_feature(
-            sw_if_index=self.pg4.sw_if_index,
-            is_add=1)
+            sw_if_index=self.pg4.sw_if_index, is_add=1
+        )
         self.vapi.nat44_interface_add_del_feature(
         self.vapi.nat44_interface_add_del_feature(
-            sw_if_index=self.pg4.sw_if_index,
-            flags=flags, is_add=1)
+            sw_if_index=self.pg4.sw_if_index, flags=flags, is_add=1
+        )
 
         # from client to service
 
         # from client to service
-        p = (Ether(src=self.pg4.remote_mac, dst=self.pg4.local_mac) /
-             IP(src=remote_host.ip4, dst=self.nat_addr) /
-             TCP(sport=12345, dport=external_port))
+        p = (
+            Ether(src=self.pg4.remote_mac, dst=self.pg4.local_mac)
+            / IP(src=remote_host.ip4, dst=self.nat_addr)
+            / TCP(sport=12345, dport=external_port)
+        )
         self.pg4.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg4.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -3972,9 +4347,11 @@ class TestNAT44EDMW(TestNAT44ED):
             raise
 
         # from service back to client
             raise
 
         # from service back to client
-        p = (Ether(src=self.pg4.remote_mac, dst=self.pg4.local_mac) /
-             IP(src=local_host.ip4, dst=self.nat_addr) /
-             TCP(sport=local_port, dport=eh_port_in))
+        p = (
+            Ether(src=self.pg4.remote_mac, dst=self.pg4.local_mac)
+            / IP(src=local_host.ip4, dst=self.nat_addr)
+            / TCP(sport=local_port, dport=eh_port_in)
+        )
         self.pg4.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg4.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -3993,7 +4370,7 @@ class TestNAT44EDMW(TestNAT44ED):
             raise
 
     def test_icmp_error_fwd_outbound(self):
             raise
 
     def test_icmp_error_fwd_outbound(self):
-        """ NAT44ED ICMP error outbound with forwarding enabled """
+        """NAT44ED ICMP error outbound with forwarding enabled"""
 
         # Ensure that an outbound ICMP error message is properly associated
         # with the inbound forward bypass session it is related to.
 
         # Ensure that an outbound ICMP error message is properly associated
         # with the inbound forward bypass session it is related to.
@@ -4005,9 +4382,12 @@ class TestNAT44EDMW(TestNAT44ED):
 
         # enable forwarding and initiate connection out2in
         self.vapi.nat44_forwarding_enable_disable(enable=1)
 
         # enable forwarding and initiate connection out2in
         self.vapi.nat44_forwarding_enable_disable(enable=1)
-        p1 = (Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac) /
-              IP(src=self.pg1.remote_ip4, dst=self.pg0.remote_ip4) /
-              UDP(sport=21, dport=20) / payload)
+        p1 = (
+            Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
+            / IP(src=self.pg1.remote_ip4, dst=self.pg0.remote_ip4)
+            / UDP(sport=21, dport=20)
+            / payload
+        )
 
         self.pg1.add_stream(p1)
         self.pg_enable_capture(self.pg_interfaces)
 
         self.pg1.add_stream(p1)
         self.pg_enable_capture(self.pg_interfaces)
@@ -4021,10 +4401,12 @@ class TestNAT44EDMW(TestNAT44ED):
         # session dumps for a user will only look on the worker that the
         # user is supposed to be mapped to in2out. The forward bypass session
         # is not necessarily created on that worker.
         # session dumps for a user will only look on the worker that the
         # user is supposed to be mapped to in2out. The forward bypass session
         # is not necessarily created on that worker.
-        p2 = (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-              IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4) /
-              ICMP(type='dest-unreach', code='port-unreachable') /
-              capture[IP:])
+        p2 = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4)
+            / ICMP(type="dest-unreach", code="port-unreachable")
+            / capture[IP:]
+        )
 
         self.pg0.add_stream(p2)
         self.pg_enable_capture(self.pg_interfaces)
 
         self.pg0.add_stream(p2)
         self.pg_enable_capture(self.pg_interfaces)
@@ -4038,11 +4420,11 @@ class TestNAT44EDMW(TestNAT44ED):
         self.logger.info(ppp("capture packet:", capture))
 
     def test_tcp_session_open_retransmit1(self):
         self.logger.info(ppp("capture packet:", capture))
 
     def test_tcp_session_open_retransmit1(self):
-        """ NAT44ED Open TCP session with SYN,ACK retransmit 1
+        """NAT44ED Open TCP session with SYN,ACK retransmit 1
 
 
-            The client does not receive the [SYN,ACK] or the
-            ACK from the client is lost. Therefore, the [SYN, ACK]
-            is retransmitted by the server.
+        The client does not receive the [SYN,ACK] or the
+        ACK from the client is lost. Therefore, the [SYN, ACK]
+        is retransmitted by the server.
         """
 
         in_port = self.tcp_port_in
         """
 
         in_port = self.tcp_port_in
@@ -4053,50 +4435,61 @@ class TestNAT44EDMW(TestNAT44ED):
         self.nat_add_inside_interface(self.pg0)
         self.nat_add_outside_interface(self.pg1)
 
         self.nat_add_inside_interface(self.pg0)
         self.nat_add_outside_interface(self.pg1)
 
-        self.vapi.nat_set_timeouts(udp=300, tcp_established=7440,
-                                   tcp_transitory=5, icmp=60)
+        self.vapi.nat_set_timeouts(
+            udp=300, tcp_established=7440, tcp_transitory=5, icmp=60
+        )
         # SYN packet in->out
         # SYN packet in->out
-        p = (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-             IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4) /
-             TCP(sport=in_port, dport=ext_port, flags="S"))
+        p = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4)
+            / TCP(sport=in_port, dport=ext_port, flags="S")
+        )
         p = self.send_and_expect(self.pg0, p, self.pg1)[0]
         out_port = p[TCP].sport
 
         # SYN + ACK packet out->in
         p = self.send_and_expect(self.pg0, p, self.pg1)[0]
         out_port = p[TCP].sport
 
         # SYN + ACK packet out->in
-        p = (Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac) /
-             IP(src=self.pg1.remote_ip4, dst=self.nat_addr) /
-             TCP(sport=ext_port, dport=out_port, flags="SA"))
+        p = (
+            Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
+            / IP(src=self.pg1.remote_ip4, dst=self.nat_addr)
+            / TCP(sport=ext_port, dport=out_port, flags="SA")
+        )
         self.send_and_expect(self.pg1, p, self.pg0)
 
         # ACK in->out does not arrive
 
         # resent SYN + ACK packet out->in
         self.send_and_expect(self.pg1, p, self.pg0)
 
         # ACK in->out does not arrive
 
         # resent SYN + ACK packet out->in
-        p = (Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac) /
-             IP(src=self.pg1.remote_ip4, dst=self.nat_addr) /
-             TCP(sport=ext_port, dport=out_port, flags="SA"))
+        p = (
+            Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
+            / IP(src=self.pg1.remote_ip4, dst=self.nat_addr)
+            / TCP(sport=ext_port, dport=out_port, flags="SA")
+        )
         self.send_and_expect(self.pg1, p, self.pg0)
 
         # ACK packet in->out
         self.send_and_expect(self.pg1, p, self.pg0)
 
         # ACK packet in->out
-        p = (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-             IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4) /
-             TCP(sport=in_port, dport=ext_port, flags="A"))
+        p = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4)
+            / TCP(sport=in_port, dport=ext_port, flags="A")
+        )
         self.send_and_expect(self.pg0, p, self.pg1)
 
         # Verify that the data can be transmitted after the transitory time
         self.virtual_sleep(6)
 
         self.send_and_expect(self.pg0, p, self.pg1)
 
         # Verify that the data can be transmitted after the transitory time
         self.virtual_sleep(6)
 
-        p = (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-             IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4) /
-             TCP(sport=in_port, dport=ext_port, flags="PA") /
-             Raw(payload))
+        p = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4)
+            / TCP(sport=in_port, dport=ext_port, flags="PA")
+            / Raw(payload)
+        )
         self.send_and_expect(self.pg0, p, self.pg1)
 
     def test_tcp_session_open_retransmit2(self):
         self.send_and_expect(self.pg0, p, self.pg1)
 
     def test_tcp_session_open_retransmit2(self):
-        """ NAT44ED Open TCP session with SYN,ACK retransmit 2
+        """NAT44ED Open TCP session with SYN,ACK retransmit 2
 
 
-            The ACK is lost to the server after the TCP session is opened.
-            Data is sent by the client, then the [SYN,ACK] is
-            retransmitted by the server.
+        The ACK is lost to the server after the TCP session is opened.
+        Data is sent by the client, then the [SYN,ACK] is
+        retransmitted by the server.
         """
 
         in_port = self.tcp_port_in
         """
 
         in_port = self.tcp_port_in
@@ -4107,68 +4500,87 @@ class TestNAT44EDMW(TestNAT44ED):
         self.nat_add_inside_interface(self.pg0)
         self.nat_add_outside_interface(self.pg1)
 
         self.nat_add_inside_interface(self.pg0)
         self.nat_add_outside_interface(self.pg1)
 
-        self.vapi.nat_set_timeouts(udp=300, tcp_established=7440,
-                                   tcp_transitory=5, icmp=60)
+        self.vapi.nat_set_timeouts(
+            udp=300, tcp_established=7440, tcp_transitory=5, icmp=60
+        )
         # SYN packet in->out
         # SYN packet in->out
-        p = (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-             IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4) /
-             TCP(sport=in_port, dport=ext_port, flags="S"))
+        p = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4)
+            / TCP(sport=in_port, dport=ext_port, flags="S")
+        )
         p = self.send_and_expect(self.pg0, p, self.pg1)[0]
         out_port = p[TCP].sport
 
         # SYN + ACK packet out->in
         p = self.send_and_expect(self.pg0, p, self.pg1)[0]
         out_port = p[TCP].sport
 
         # SYN + ACK packet out->in
-        p = (Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac) /
-             IP(src=self.pg1.remote_ip4, dst=self.nat_addr) /
-             TCP(sport=ext_port, dport=out_port, flags="SA"))
+        p = (
+            Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
+            / IP(src=self.pg1.remote_ip4, dst=self.nat_addr)
+            / TCP(sport=ext_port, dport=out_port, flags="SA")
+        )
         self.send_and_expect(self.pg1, p, self.pg0)
 
         # ACK packet in->out -- not received by the server
         self.send_and_expect(self.pg1, p, self.pg0)
 
         # ACK packet in->out -- not received by the server
-        p = (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-             IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4) /
-             TCP(sport=in_port, dport=ext_port, flags="A"))
+        p = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4)
+            / TCP(sport=in_port, dport=ext_port, flags="A")
+        )
         self.send_and_expect(self.pg0, p, self.pg1)
 
         # PUSH + ACK packet in->out
         self.send_and_expect(self.pg0, p, self.pg1)
 
         # PUSH + ACK packet in->out
-        p = (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-             IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4) /
-             TCP(sport=in_port, dport=ext_port, flags="PA") /
-             Raw(payload))
+        p = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4)
+            / TCP(sport=in_port, dport=ext_port, flags="PA")
+            / Raw(payload)
+        )
         self.send_and_expect(self.pg0, p, self.pg1)
 
         # resent SYN + ACK packet out->in
         self.send_and_expect(self.pg0, p, self.pg1)
 
         # resent SYN + ACK packet out->in
-        p = (Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac) /
-             IP(src=self.pg1.remote_ip4, dst=self.nat_addr) /
-             TCP(sport=ext_port, dport=out_port, flags="SA"))
+        p = (
+            Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
+            / IP(src=self.pg1.remote_ip4, dst=self.nat_addr)
+            / TCP(sport=ext_port, dport=out_port, flags="SA")
+        )
         self.send_and_expect(self.pg1, p, self.pg0)
 
         # resent ACK packet in->out
         self.send_and_expect(self.pg1, p, self.pg0)
 
         # resent ACK packet in->out
-        p = (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-             IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4) /
-             TCP(sport=in_port, dport=ext_port, flags="A"))
+        p = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4)
+            / TCP(sport=in_port, dport=ext_port, flags="A")
+        )
         self.send_and_expect(self.pg0, p, self.pg1)
 
         # resent PUSH + ACK packet in->out
         self.send_and_expect(self.pg0, p, self.pg1)
 
         # resent PUSH + ACK packet in->out
-        p = (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-             IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4) /
-             TCP(sport=in_port, dport=ext_port, flags="PA") /
-             Raw(payload))
+        p = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4)
+            / TCP(sport=in_port, dport=ext_port, flags="PA")
+            / Raw(payload)
+        )
         self.send_and_expect(self.pg0, p, self.pg1)
 
         # ACK packet out->in
         self.send_and_expect(self.pg0, p, self.pg1)
 
         # ACK packet out->in
-        p = (Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac) /
-             IP(src=self.pg1.remote_ip4, dst=self.nat_addr) /
-             TCP(sport=ext_port, dport=out_port, flags="A"))
+        p = (
+            Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
+            / IP(src=self.pg1.remote_ip4, dst=self.nat_addr)
+            / TCP(sport=ext_port, dport=out_port, flags="A")
+        )
         self.send_and_expect(self.pg1, p, self.pg0)
 
         # Verify that the data can be transmitted after the transitory time
         self.virtual_sleep(6)
 
         self.send_and_expect(self.pg1, p, self.pg0)
 
         # Verify that the data can be transmitted after the transitory time
         self.virtual_sleep(6)
 
-        p = (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-             IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4) /
-             TCP(sport=in_port, dport=ext_port, flags="PA") /
-             Raw(payload))
+        p = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4)
+            / TCP(sport=in_port, dport=ext_port, flags="PA")
+            / Raw(payload)
+        )
         self.send_and_expect(self.pg0, p, self.pg1)
 
 
         self.send_and_expect(self.pg0, p, self.pg1)
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index 4ea8a5b..4d75241 100644 (file)
@@ -21,7 +21,8 @@ def get_nat44_ed_in2out_worker_index(ip, vpp_worker_count):
 
 
 class TestNAT44EDOutput(VppTestCase):
 
 
 class TestNAT44EDOutput(VppTestCase):
-    """ NAT44 ED output feature Test Case """
+    """NAT44 ED output feature Test Case"""
+
     max_sessions = 1024
 
     @classmethod
     max_sessions = 1024
 
     @classmethod
@@ -40,8 +41,7 @@ class TestNAT44EDOutput(VppTestCase):
             i.admin_up()
             i.config_ip4()
             i.resolve_arp()
             i.admin_up()
             i.config_ip4()
             i.resolve_arp()
-        self.vapi.nat44_ed_plugin_enable_disable(sessions=self.max_sessions,
-                                                 enable=1)
+        self.vapi.nat44_ed_plugin_enable_disable(sessions=self.max_sessions, enable=1)
 
     def tearDown(self):
         if not self.vpp_dead:
 
     def tearDown(self):
         if not self.vpp_dead:
@@ -54,7 +54,7 @@ class TestNAT44EDOutput(VppTestCase):
             self.vapi.nat44_ed_plugin_enable_disable(enable=0)
 
     def test_static_dynamic(self):
             self.vapi.nat44_ed_plugin_enable_disable(enable=0)
 
     def test_static_dynamic(self):
-        """ Create static mapping which matches existing dynamic mapping """
+        """Create static mapping which matches existing dynamic mapping"""
 
         config = self.vapi.nat44_show_running_config()
         old_timeouts = config.timeouts
 
         config = self.vapi.nat44_show_running_config()
         old_timeouts = config.timeouts
@@ -63,31 +63,37 @@ class TestNAT44EDOutput(VppTestCase):
             udp=old_timeouts.udp,
             tcp_established=old_timeouts.tcp_established,
             icmp=old_timeouts.icmp,
             udp=old_timeouts.udp,
             tcp_established=old_timeouts.tcp_established,
             icmp=old_timeouts.icmp,
-            tcp_transitory=new_transitory)
+            tcp_transitory=new_transitory,
+        )
 
         local_host = self.pg0.remote_ip4
         remote_host = self.pg1.remote_ip4
         nat_intf = self.pg1
         outside_addr = nat_intf.local_ip4
 
 
         local_host = self.pg0.remote_ip4
         remote_host = self.pg1.remote_ip4
         nat_intf = self.pg1
         outside_addr = nat_intf.local_ip4
 
-        self.vapi.nat44_add_del_address_range(first_ip_address=outside_addr,
-                                              last_ip_address=outside_addr,
-                                              vrf_id=0xffffffff,
-                                              is_add=1,
-                                              flags=0)
+        self.vapi.nat44_add_del_address_range(
+            first_ip_address=outside_addr,
+            last_ip_address=outside_addr,
+            vrf_id=0xFFFFFFFF,
+            is_add=1,
+            flags=0,
+        )
         self.vapi.nat44_interface_add_del_feature(
         self.vapi.nat44_interface_add_del_feature(
-            sw_if_index=self.pg0.sw_if_index,
-            is_add=1)
+            sw_if_index=self.pg0.sw_if_index, is_add=1
+        )
         self.vapi.nat44_interface_add_del_feature(
             sw_if_index=self.pg0.sw_if_index,
         self.vapi.nat44_interface_add_del_feature(
             sw_if_index=self.pg0.sw_if_index,
-            flags=VppEnum.vl_api_nat_config_flags_t.NAT_IS_INSIDE, is_add=1)
+            flags=VppEnum.vl_api_nat_config_flags_t.NAT_IS_INSIDE,
+            is_add=1,
+        )
         self.vapi.nat44_ed_add_del_output_interface(
         self.vapi.nat44_ed_add_del_output_interface(
-            sw_if_index=self.pg1.sw_if_index,
-            is_add=1)
+            sw_if_index=self.pg1.sw_if_index, is_add=1
+        )
 
         thread_index = get_nat44_ed_in2out_worker_index(
 
         thread_index = get_nat44_ed_in2out_worker_index(
-            local_host, self.vpp_worker_count)
-        port_per_thread = int((0xffff-1024) / max(1, self.vpp_worker_count))
+            local_host, self.vpp_worker_count
+        )
+        port_per_thread = int((0xFFFF - 1024) / max(1, self.vpp_worker_count))
         local_sport = 1024 + random.randint(1, port_per_thread)
         if self.vpp_worker_count > 0:
             local_sport += port_per_thread * (thread_index - 1)
         local_sport = 1024 + random.randint(1, port_per_thread)
         if self.vpp_worker_count > 0:
             local_sport += port_per_thread * (thread_index - 1)
@@ -100,9 +106,11 @@ class TestNAT44EDOutput(VppTestCase):
         # first setup a dynamic TCP session
 
         # SYN packet in->out
         # first setup a dynamic TCP session
 
         # SYN packet in->out
-        p = (Ether(src=pg0.remote_mac, dst=pg0.local_mac) /
-             IP(src=local_host, dst=remote_host) /
-             TCP(sport=local_sport, dport=remote_dport, flags="S"))
+        p = (
+            Ether(src=pg0.remote_mac, dst=pg0.local_mac)
+            / IP(src=local_host, dst=remote_host)
+            / TCP(sport=local_sport, dport=remote_dport, flags="S")
+        )
         p = self.send_and_expect(pg0, [p], pg1)[0]
 
         self.assertEqual(p[IP].src, outside_addr)
         p = self.send_and_expect(pg0, [p], pg1)[0]
 
         self.assertEqual(p[IP].src, outside_addr)
@@ -110,15 +118,19 @@ class TestNAT44EDOutput(VppTestCase):
         outside_port = p[TCP].sport
 
         # SYN+ACK packet out->in
         outside_port = p[TCP].sport
 
         # SYN+ACK packet out->in
-        p = (Ether(src=pg1.remote_mac, dst=pg1.local_mac) /
-             IP(src=remote_host, dst=outside_addr) /
-             TCP(sport=remote_dport, dport=outside_port, flags="SA"))
+        p = (
+            Ether(src=pg1.remote_mac, dst=pg1.local_mac)
+            / IP(src=remote_host, dst=outside_addr)
+            / TCP(sport=remote_dport, dport=outside_port, flags="SA")
+        )
         self.send_and_expect(pg1, [p], pg0)
 
         # ACK packet in->out
         self.send_and_expect(pg1, [p], pg0)
 
         # ACK packet in->out
-        p = (Ether(src=pg0.remote_mac, dst=pg0.local_mac) /
-             IP(src=local_host, dst=remote_host) /
-             TCP(sport=local_sport, dport=remote_dport, flags="A"))
+        p = (
+            Ether(src=pg0.remote_mac, dst=pg0.local_mac)
+            / IP(src=local_host, dst=remote_host)
+            / TCP(sport=local_sport, dport=remote_dport, flags="A")
+        )
         self.send_and_expect(pg0, [p], pg1)
 
         # now we have a session up, create a conflicting static mapping
         self.send_and_expect(pg0, [p], pg1)
 
         # now we have a session up, create a conflicting static mapping
@@ -126,11 +138,12 @@ class TestNAT44EDOutput(VppTestCase):
             is_add=1,
             local_ip_address=local_host,
             external_ip_address=outside_addr,
             is_add=1,
             local_ip_address=local_host,
             external_ip_address=outside_addr,
-            external_sw_if_index=0xffffffff,
+            external_sw_if_index=0xFFFFFFFF,
             local_port=local_sport,
             external_port=outside_port,
             protocol=IP_PROTOS.tcp,
             local_port=local_sport,
             external_port=outside_port,
             protocol=IP_PROTOS.tcp,
-            flags=VppEnum.vl_api_nat_config_flags_t.NAT_IS_OUT2IN_ONLY)
+            flags=VppEnum.vl_api_nat_config_flags_t.NAT_IS_OUT2IN_ONLY,
+        )
 
         sessions = self.vapi.nat44_user_session_dump(local_host, 0)
         self.assertEqual(1, len(sessions))
 
         sessions = self.vapi.nat44_user_session_dump(local_host, 0)
         self.assertEqual(1, len(sessions))
@@ -138,47 +151,56 @@ class TestNAT44EDOutput(VppTestCase):
         # now send some more data over existing session - it should pass
 
         # in->out
         # now send some more data over existing session - it should pass
 
         # in->out
-        p = (Ether(src=pg0.remote_mac, dst=pg0.local_mac) /
-             IP(src=local_host, dst=remote_host) /
-             TCP(sport=local_sport, dport=remote_dport) /
-             Raw("zippity zap"))
+        p = (
+            Ether(src=pg0.remote_mac, dst=pg0.local_mac)
+            / IP(src=local_host, dst=remote_host)
+            / TCP(sport=local_sport, dport=remote_dport)
+            / Raw("zippity zap")
+        )
         self.send_and_expect(pg0, [p], pg1)
 
         # out->in
         self.send_and_expect(pg0, [p], pg1)
 
         # out->in
-        p = (Ether(src=pg1.remote_mac, dst=pg1.local_mac) /
-             IP(src=remote_host, dst=outside_addr) /
-             TCP(sport=remote_dport, dport=outside_port) /
-             Raw("flippity flop"))
+        p = (
+            Ether(src=pg1.remote_mac, dst=pg1.local_mac)
+            / IP(src=remote_host, dst=outside_addr)
+            / TCP(sport=remote_dport, dport=outside_port)
+            / Raw("flippity flop")
+        )
         self.send_and_expect(pg1, [p], pg0)
 
         # now close the session
 
         # FIN packet in -> out
         self.send_and_expect(pg1, [p], pg0)
 
         # now close the session
 
         # FIN packet in -> out
-        p = (Ether(src=pg0.remote_mac, dst=pg0.local_mac) /
-             IP(src=local_host, dst=remote_host) /
-             TCP(sport=local_sport, dport=remote_dport, flags="FA", seq=100,
-                 ack=300))
+        p = (
+            Ether(src=pg0.remote_mac, dst=pg0.local_mac)
+            / IP(src=local_host, dst=remote_host)
+            / TCP(sport=local_sport, dport=remote_dport, flags="FA", seq=100, ack=300)
+        )
         self.send_and_expect(pg0, [p], pg1)
 
         # FIN+ACK packet out -> in
         self.send_and_expect(pg0, [p], pg1)
 
         # FIN+ACK packet out -> in
-        p = (Ether(src=pg1.remote_mac, dst=pg1.local_mac) /
-             IP(src=remote_host, dst=outside_addr) /
-             TCP(sport=remote_dport, dport=outside_port, flags="FA", seq=300,
-                 ack=101))
+        p = (
+            Ether(src=pg1.remote_mac, dst=pg1.local_mac)
+            / IP(src=remote_host, dst=outside_addr)
+            / TCP(sport=remote_dport, dport=outside_port, flags="FA", seq=300, ack=101)
+        )
         self.send_and_expect(pg1, [p], pg0)
 
         # ACK packet in -> out
         self.send_and_expect(pg1, [p], pg0)
 
         # ACK packet in -> out
-        p = (Ether(src=pg0.remote_mac, dst=pg0.local_mac) /
-             IP(src=local_host, dst=remote_host) /
-             TCP(sport=local_sport, dport=remote_dport, flags="A", seq=101,
-                 ack=301))
+        p = (
+            Ether(src=pg0.remote_mac, dst=pg0.local_mac)
+            / IP(src=local_host, dst=remote_host)
+            / TCP(sport=local_sport, dport=remote_dport, flags="A", seq=101, ack=301)
+        )
         self.send_and_expect(pg0, [p], pg1)
 
         # session now in transitory timeout
         # try SYN packet in->out - should be dropped
         self.send_and_expect(pg0, [p], pg1)
 
         # session now in transitory timeout
         # try SYN packet in->out - should be dropped
-        p = (Ether(src=pg0.remote_mac, dst=pg0.local_mac) /
-             IP(src=local_host, dst=remote_host) /
-             TCP(sport=local_sport, dport=remote_dport, flags="S"))
+        p = (
+            Ether(src=pg0.remote_mac, dst=pg0.local_mac)
+            / IP(src=local_host, dst=remote_host)
+            / TCP(sport=local_sport, dport=remote_dport, flags="S")
+        )
         pg0.add_stream(p)
         self.pg_enable_capture()
         self.pg_start()
         pg0.add_stream(p)
         self.pg_enable_capture()
         self.pg_start()
@@ -192,10 +214,11 @@ class TestNAT44EDOutput(VppTestCase):
 
         # send FIN+ACK packet in->out - will cause session to be wiped
         # but won't create a new session
 
         # send FIN+ACK packet in->out - will cause session to be wiped
         # but won't create a new session
-        p = (Ether(src=pg0.remote_mac, dst=pg0.local_mac) /
-             IP(src=local_host, dst=remote_host) /
-             TCP(sport=local_sport, dport=remote_dport, flags="FA", seq=300,
-                 ack=101))
+        p = (
+            Ether(src=pg0.remote_mac, dst=pg0.local_mac)
+            / IP(src=local_host, dst=remote_host)
+            / TCP(sport=local_sport, dport=remote_dport, flags="FA", seq=300, ack=101)
+        )
         pg1.add_stream(p)
         self.pg_enable_capture()
         self.pg_start()
         pg1.add_stream(p)
         self.pg_enable_capture()
         self.pg_start()
@@ -207,9 +230,11 @@ class TestNAT44EDOutput(VppTestCase):
         # create a new session and make sure the outside port is remapped
         # SYN packet in->out
 
         # create a new session and make sure the outside port is remapped
         # SYN packet in->out
 
-        p = (Ether(src=pg0.remote_mac, dst=pg0.local_mac) /
-             IP(src=local_host, dst=remote_host) /
-             TCP(sport=local_sport, dport=remote_dport, flags="S"))
+        p = (
+            Ether(src=pg0.remote_mac, dst=pg0.local_mac)
+            / IP(src=local_host, dst=remote_host)
+            / TCP(sport=local_sport, dport=remote_dport, flags="S")
+        )
         p = self.send_and_expect(pg0, [p], pg1)[0]
 
         self.assertEqual(p[IP].src, outside_addr)
         p = self.send_and_expect(pg0, [p], pg1)[0]
 
         self.assertEqual(p[IP].src, outside_addr)
@@ -217,14 +242,16 @@ class TestNAT44EDOutput(VppTestCase):
 
         # make sure static mapping works and creates a new session
         # SYN packet out->in
 
         # make sure static mapping works and creates a new session
         # SYN packet out->in
-        p = (Ether(src=pg1.remote_mac, dst=pg1.local_mac) /
-             IP(src=remote_host, dst=outside_addr) /
-             TCP(sport=remote_dport, dport=outside_port, flags="S"))
+        p = (
+            Ether(src=pg1.remote_mac, dst=pg1.local_mac)
+            / IP(src=remote_host, dst=outside_addr)
+            / TCP(sport=remote_dport, dport=outside_port, flags="S")
+        )
         self.send_and_expect(pg1, [p], pg0)
 
         sessions = self.vapi.nat44_user_session_dump(pg0.remote_ip4, 0)
         self.assertEqual(2, len(sessions))
 
 
         self.send_and_expect(pg1, [p], pg0)
 
         sessions = self.vapi.nat44_user_session_dump(pg0.remote_ip4, 0)
         self.assertEqual(2, len(sessions))
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index aafd345..9eb127a 100644 (file)
@@ -10,9 +10,19 @@ from io import BytesIO
 import scapy.compat
 from framework import VppTestCase, VppTestRunner
 from ipfix import IPFIX, Set, Template, Data, IPFIXDecoder
 import scapy.compat
 from framework import VppTestCase, VppTestRunner
 from ipfix import IPFIX, Set, Template, Data, IPFIXDecoder
-from scapy.all import bind_layers, Packet, ByteEnumField, ShortField, \
-    IPField, IntField, LongField, XByteField, FlagsField, FieldLenField, \
-    PacketListField
+from scapy.all import (
+    bind_layers,
+    Packet,
+    ByteEnumField,
+    ShortField,
+    IPField,
+    IntField,
+    LongField,
+    XByteField,
+    FlagsField,
+    FieldLenField,
+    PacketListField,
+)
 from scapy.data import IP_PROTOS
 from scapy.layers.inet import IP, TCP, UDP, ICMP
 from scapy.layers.inet import IPerror, TCPerror, UDPerror, ICMPerror
 from scapy.data import IP_PROTOS
 from scapy.layers.inet import IP, TCP, UDP, ICMP
 from scapy.layers.inet import IPerror, TCPerror, UDPerror, ICMPerror
@@ -30,22 +40,22 @@ from vpp_papi import VppEnum
 # NAT HA protocol event data
 class Event(Packet):
     name = "Event"
 # NAT HA protocol event data
 class Event(Packet):
     name = "Event"
-    fields_desc = [ByteEnumField("event_type", None,
-                                 {1: "add", 2: "del", 3: "refresh"}),
-                   ByteEnumField("protocol", None,
-                                 {0: "other", 1: "udp", 2: "tcp", 3: "icmp"}),
-                   ShortField("flags", 0),
-                   IPField("in_addr", None),
-                   IPField("out_addr", None),
-                   ShortField("in_port", None),
-                   ShortField("out_port", None),
-                   IPField("eh_addr", None),
-                   IPField("ehn_addr", None),
-                   ShortField("eh_port", None),
-                   ShortField("ehn_port", None),
-                   IntField("fib_index", None),
-                   IntField("total_pkts", 0),
-                   LongField("total_bytes", 0)]
+    fields_desc = [
+        ByteEnumField("event_type", None, {1: "add", 2: "del", 3: "refresh"}),
+        ByteEnumField("protocol", None, {0: "other", 1: "udp", 2: "tcp", 3: "icmp"}),
+        ShortField("flags", 0),
+        IPField("in_addr", None),
+        IPField("out_addr", None),
+        ShortField("in_port", None),
+        ShortField("out_port", None),
+        IPField("eh_addr", None),
+        IPField("ehn_addr", None),
+        ShortField("eh_port", None),
+        ShortField("ehn_port", None),
+        IntField("fib_index", None),
+        IntField("total_pkts", 0),
+        LongField("total_bytes", 0),
+    ]
 
     def extract_padding(self, s):
         return "", s
 
     def extract_padding(self, s):
         return "", s
@@ -54,17 +64,18 @@ class Event(Packet):
 # NAT HA protocol header
 class HANATStateSync(Packet):
     name = "HA NAT state sync"
 # NAT HA protocol header
 class HANATStateSync(Packet):
     name = "HA NAT state sync"
-    fields_desc = [XByteField("version", 1),
-                   FlagsField("flags", 0, 8, ['ACK']),
-                   FieldLenField("count", None, count_of="events"),
-                   IntField("sequence_number", 1),
-                   IntField("thread_index", 0),
-                   PacketListField("events", [], Event,
-                                   count_from=lambda pkt: pkt.count)]
+    fields_desc = [
+        XByteField("version", 1),
+        FlagsField("flags", 0, 8, ["ACK"]),
+        FieldLenField("count", None, count_of="events"),
+        IntField("sequence_number", 1),
+        IntField("thread_index", 0),
+        PacketListField("events", [], Event, count_from=lambda pkt: pkt.count),
+    ]
 
 
 class MethodHolder(VppTestCase):
 
 
 class MethodHolder(VppTestCase):
-    """ NAT create capture and verify method holder """
+    """NAT create capture and verify method holder"""
 
     @property
     def config_flags(self):
 
     @property
     def config_flags(self):
@@ -74,10 +85,19 @@ class MethodHolder(VppTestCase):
     def SYSLOG_SEVERITY(self):
         return VppEnum.vl_api_syslog_severity_t
 
     def SYSLOG_SEVERITY(self):
         return VppEnum.vl_api_syslog_severity_t
 
-    def nat44_add_static_mapping(self, local_ip, external_ip='0.0.0.0',
-                                 local_port=0, external_port=0, vrf_id=0,
-                                 is_add=1, external_sw_if_index=0xFFFFFFFF,
-                                 proto=0, tag="", flags=0):
+    def nat44_add_static_mapping(
+        self,
+        local_ip,
+        external_ip="0.0.0.0",
+        local_port=0,
+        external_port=0,
+        vrf_id=0,
+        is_add=1,
+        external_sw_if_index=0xFFFFFFFF,
+        proto=0,
+        tag="",
+        flags=0,
+    ):
         """
         Add/delete NAT44EI static mapping
 
         """
         Add/delete NAT44EI static mapping
 
@@ -103,9 +123,11 @@ class MethodHolder(VppTestCase):
             external_sw_if_index=external_sw_if_index,
             local_port=local_port,
             external_port=external_port,
             external_sw_if_index=external_sw_if_index,
             local_port=local_port,
             external_port=external_port,
-            vrf_id=vrf_id, protocol=proto,
+            vrf_id=vrf_id,
+            protocol=proto,
             flags=flags,
             flags=flags,
-            tag=tag)
+            tag=tag,
+        )
 
     def nat44_add_address(self, ip, is_add=1, vrf_id=0xFFFFFFFF):
         """
 
     def nat44_add_address(self, ip, is_add=1, vrf_id=0xFFFFFFFF):
         """
@@ -114,31 +136,40 @@ class MethodHolder(VppTestCase):
         :param ip: IP address
         :param is_add: 1 if add, 0 if delete (Default add)
         """
         :param ip: IP address
         :param is_add: 1 if add, 0 if delete (Default add)
         """
-        self.vapi.nat44_ei_add_del_address_range(first_ip_address=ip,
-                                                 last_ip_address=ip,
-                                                 vrf_id=vrf_id,
-                                                 is_add=is_add)
+        self.vapi.nat44_ei_add_del_address_range(
+            first_ip_address=ip, last_ip_address=ip, vrf_id=vrf_id, is_add=is_add
+        )
 
     def create_routes_and_neigbors(self):
 
     def create_routes_and_neigbors(self):
-        r1 = VppIpRoute(self, self.pg7.remote_ip4, 32,
-                        [VppRoutePath(self.pg7.remote_ip4,
-                                      self.pg7.sw_if_index)])
-        r2 = VppIpRoute(self, self.pg8.remote_ip4, 32,
-                        [VppRoutePath(self.pg8.remote_ip4,
-                                      self.pg8.sw_if_index)])
+        r1 = VppIpRoute(
+            self,
+            self.pg7.remote_ip4,
+            32,
+            [VppRoutePath(self.pg7.remote_ip4, self.pg7.sw_if_index)],
+        )
+        r2 = VppIpRoute(
+            self,
+            self.pg8.remote_ip4,
+            32,
+            [VppRoutePath(self.pg8.remote_ip4, self.pg8.sw_if_index)],
+        )
         r1.add_vpp_config()
         r2.add_vpp_config()
 
         r1.add_vpp_config()
         r2.add_vpp_config()
 
-        n1 = VppNeighbor(self,
-                         self.pg7.sw_if_index,
-                         self.pg7.remote_mac,
-                         self.pg7.remote_ip4,
-                         is_static=1)
-        n2 = VppNeighbor(self,
-                         self.pg8.sw_if_index,
-                         self.pg8.remote_mac,
-                         self.pg8.remote_ip4,
-                         is_static=1)
+        n1 = VppNeighbor(
+            self,
+            self.pg7.sw_if_index,
+            self.pg7.remote_mac,
+            self.pg7.remote_ip4,
+            is_static=1,
+        )
+        n2 = VppNeighbor(
+            self,
+            self.pg8.sw_if_index,
+            self.pg8.remote_mac,
+            self.pg8.remote_ip4,
+            is_static=1,
+        )
         n1.add_vpp_config()
         n2.add_vpp_config()
 
         n1.add_vpp_config()
         n2.add_vpp_config()
 
@@ -156,21 +187,27 @@ class MethodHolder(VppTestCase):
 
         pkts = []
         # TCP
 
         pkts = []
         # TCP
-        p = (Ether(dst=in_if.local_mac, src=in_if.remote_mac) /
-             IP(src=in_if.remote_ip4, dst=dst_ip, ttl=ttl) /
-             TCP(sport=self.tcp_port_in, dport=20))
+        p = (
+            Ether(dst=in_if.local_mac, src=in_if.remote_mac)
+            / IP(src=in_if.remote_ip4, dst=dst_ip, ttl=ttl)
+            / TCP(sport=self.tcp_port_in, dport=20)
+        )
         pkts.extend([p, p])
 
         # UDP
         pkts.extend([p, p])
 
         # UDP
-        p = (Ether(dst=in_if.local_mac, src=in_if.remote_mac) /
-             IP(src=in_if.remote_ip4, dst=dst_ip, ttl=ttl) /
-             UDP(sport=self.udp_port_in, dport=20))
+        p = (
+            Ether(dst=in_if.local_mac, src=in_if.remote_mac)
+            / IP(src=in_if.remote_ip4, dst=dst_ip, ttl=ttl)
+            / UDP(sport=self.udp_port_in, dport=20)
+        )
         pkts.append(p)
 
         # ICMP
         pkts.append(p)
 
         # ICMP
-        p = (Ether(dst=in_if.local_mac, src=in_if.remote_mac) /
-             IP(src=in_if.remote_ip4, dst=dst_ip, ttl=ttl) /
-             ICMP(id=self.icmp_id_in, type='echo-request'))
+        p = (
+            Ether(dst=in_if.local_mac, src=in_if.remote_mac)
+            / IP(src=in_if.remote_ip4, dst=dst_ip, ttl=ttl)
+            / ICMP(id=self.icmp_id_in, type="echo-request")
+        )
         pkts.append(p)
 
         return pkts
         pkts.append(p)
 
         return pkts
@@ -216,11 +253,10 @@ class MethodHolder(VppTestCase):
             pref_n[13] = ip4_n[1]
             pref_n[14] = ip4_n[2]
             pref_n[15] = ip4_n[3]
             pref_n[13] = ip4_n[1]
             pref_n[14] = ip4_n[2]
             pref_n[15] = ip4_n[3]
-        packed_pref_n = b''.join([scapy.compat.chb(x) for x in pref_n])
+        packed_pref_n = b"".join([scapy.compat.chb(x) for x in pref_n])
         return socket.inet_ntop(socket.AF_INET6, packed_pref_n)
 
         return socket.inet_ntop(socket.AF_INET6, packed_pref_n)
 
-    def create_stream_out(self, out_if, dst_ip=None, ttl=64,
-                          use_inside_ports=False):
+    def create_stream_out(self, out_if, dst_ip=None, ttl=64, use_inside_ports=False):
         """
         Create packet stream for outside network
 
         """
         Create packet stream for outside network
 
@@ -242,21 +278,27 @@ class MethodHolder(VppTestCase):
             icmp_id = self.icmp_id_in
         pkts = []
         # TCP
             icmp_id = self.icmp_id_in
         pkts = []
         # TCP
-        p = (Ether(dst=out_if.local_mac, src=out_if.remote_mac) /
-             IP(src=out_if.remote_ip4, dst=dst_ip, ttl=ttl) /
-             TCP(dport=tcp_port, sport=20))
+        p = (
+            Ether(dst=out_if.local_mac, src=out_if.remote_mac)
+            / IP(src=out_if.remote_ip4, dst=dst_ip, ttl=ttl)
+            / TCP(dport=tcp_port, sport=20)
+        )
         pkts.extend([p, p])
 
         # UDP
         pkts.extend([p, p])
 
         # UDP
-        p = (Ether(dst=out_if.local_mac, src=out_if.remote_mac) /
-             IP(src=out_if.remote_ip4, dst=dst_ip, ttl=ttl) /
-             UDP(dport=udp_port, sport=20))
+        p = (
+            Ether(dst=out_if.local_mac, src=out_if.remote_mac)
+            / IP(src=out_if.remote_ip4, dst=dst_ip, ttl=ttl)
+            / UDP(dport=udp_port, sport=20)
+        )
         pkts.append(p)
 
         # ICMP
         pkts.append(p)
 
         # ICMP
-        p = (Ether(dst=out_if.local_mac, src=out_if.remote_mac) /
-             IP(src=out_if.remote_ip4, dst=dst_ip, ttl=ttl) /
-             ICMP(id=icmp_id, type='echo-reply'))
+        p = (
+            Ether(dst=out_if.local_mac, src=out_if.remote_mac)
+            / IP(src=out_if.remote_ip4, dst=dst_ip, ttl=ttl)
+            / ICMP(id=icmp_id, type="echo-reply")
+        )
         pkts.append(p)
 
         return pkts
         pkts.append(p)
 
         return pkts
@@ -271,27 +313,40 @@ class MethodHolder(VppTestCase):
         """
         pkts = []
         # TCP
         """
         pkts = []
         # TCP
-        p = (Ether(dst=out_if.local_mac, src=out_if.remote_mac) /
-             IPv6(src=src_ip, dst=dst_ip, hlim=hl) /
-             TCP(dport=self.tcp_port_out, sport=20))
+        p = (
+            Ether(dst=out_if.local_mac, src=out_if.remote_mac)
+            / IPv6(src=src_ip, dst=dst_ip, hlim=hl)
+            / TCP(dport=self.tcp_port_out, sport=20)
+        )
         pkts.append(p)
 
         # UDP
         pkts.append(p)
 
         # UDP
-        p = (Ether(dst=out_if.local_mac, src=out_if.remote_mac) /
-             IPv6(src=src_ip, dst=dst_ip, hlim=hl) /
-             UDP(dport=self.udp_port_out, sport=20))
+        p = (
+            Ether(dst=out_if.local_mac, src=out_if.remote_mac)
+            / IPv6(src=src_ip, dst=dst_ip, hlim=hl)
+            / UDP(dport=self.udp_port_out, sport=20)
+        )
         pkts.append(p)
 
         # ICMP
         pkts.append(p)
 
         # ICMP
-        p = (Ether(dst=out_if.local_mac, src=out_if.remote_mac) /
-             IPv6(src=src_ip, dst=dst_ip, hlim=hl) /
-             ICMPv6EchoReply(id=self.icmp_id_out))
+        p = (
+            Ether(dst=out_if.local_mac, src=out_if.remote_mac)
+            / IPv6(src=src_ip, dst=dst_ip, hlim=hl)
+            / ICMPv6EchoReply(id=self.icmp_id_out)
+        )
         pkts.append(p)
 
         return pkts
 
         pkts.append(p)
 
         return pkts
 
-    def verify_capture_out(self, capture, nat_ip=None, same_port=False,
-                           dst_ip=None, is_ip6=False, ignore_port=False):
+    def verify_capture_out(
+        self,
+        capture,
+        nat_ip=None,
+        same_port=False,
+        dst_ip=None,
+        is_ip6=False,
+        ignore_port=False,
+    ):
         """
         Verify captured packets on outside network
 
         """
         Verify captured packets on outside network
 
@@ -319,39 +374,33 @@ class MethodHolder(VppTestCase):
                 if packet.haslayer(TCP):
                     if not ignore_port:
                         if same_port:
                 if packet.haslayer(TCP):
                     if not ignore_port:
                         if same_port:
-                            self.assertEqual(
-                                packet[TCP].sport, self.tcp_port_in)
+                            self.assertEqual(packet[TCP].sport, self.tcp_port_in)
                         else:
                         else:
-                            self.assertNotEqual(
-                                packet[TCP].sport, self.tcp_port_in)
+                            self.assertNotEqual(packet[TCP].sport, self.tcp_port_in)
                     self.tcp_port_out = packet[TCP].sport
                     self.assert_packet_checksums_valid(packet)
                 elif packet.haslayer(UDP):
                     if not ignore_port:
                         if same_port:
                     self.tcp_port_out = packet[TCP].sport
                     self.assert_packet_checksums_valid(packet)
                 elif packet.haslayer(UDP):
                     if not ignore_port:
                         if same_port:
-                            self.assertEqual(
-                                packet[UDP].sport, self.udp_port_in)
+                            self.assertEqual(packet[UDP].sport, self.udp_port_in)
                         else:
                         else:
-                            self.assertNotEqual(
-                                packet[UDP].sport, self.udp_port_in)
+                            self.assertNotEqual(packet[UDP].sport, self.udp_port_in)
                     self.udp_port_out = packet[UDP].sport
                 else:
                     if not ignore_port:
                         if same_port:
                     self.udp_port_out = packet[UDP].sport
                 else:
                     if not ignore_port:
                         if same_port:
-                            self.assertEqual(
-                                packet[ICMP46].id, self.icmp_id_in)
+                            self.assertEqual(packet[ICMP46].id, self.icmp_id_in)
                         else:
                         else:
-                            self.assertNotEqual(
-                                packet[ICMP46].id, self.icmp_id_in)
+                            self.assertNotEqual(packet[ICMP46].id, self.icmp_id_in)
                     self.icmp_id_out = packet[ICMP46].id
                     self.assert_packet_checksums_valid(packet)
             except:
                     self.icmp_id_out = packet[ICMP46].id
                     self.assert_packet_checksums_valid(packet)
             except:
-                self.logger.error(ppp("Unexpected or invalid packet "
-                                      "(outside network):", packet))
+                self.logger.error(
+                    ppp("Unexpected or invalid packet (outside network):", packet)
+                )
                 raise
 
                 raise
 
-    def verify_capture_out_ip6(self, capture, nat_ip, same_port=False,
-                               dst_ip=None):
+    def verify_capture_out_ip6(self, capture, nat_ip, same_port=False, dst_ip=None):
         """
         Verify captured packets on outside network
 
         """
         Verify captured packets on outside network
 
@@ -360,8 +409,7 @@ class MethodHolder(VppTestCase):
         :param same_port: Source port number is not translated (Default False)
         :param dst_ip: Destination IP address (Default do not verify)
         """
         :param same_port: Source port number is not translated (Default False)
         :param dst_ip: Destination IP address (Default do not verify)
         """
-        return self.verify_capture_out(capture, nat_ip, same_port, dst_ip,
-                                       True)
+        return self.verify_capture_out(capture, nat_ip, same_port, dst_ip, True)
 
     def verify_capture_in(self, capture, in_if):
         """
 
     def verify_capture_in(self, capture, in_if):
         """
@@ -381,8 +429,9 @@ class MethodHolder(VppTestCase):
                 else:
                     self.assertEqual(packet[ICMP].id, self.icmp_id_in)
             except:
                 else:
                     self.assertEqual(packet[ICMP].id, self.icmp_id_in)
             except:
-                self.logger.error(ppp("Unexpected or invalid packet "
-                                      "(inside network):", packet))
+                self.logger.error(
+                    ppp("Unexpected or invalid packet (inside network):", packet)
+                )
                 raise
 
     def verify_capture_no_translation(self, capture, ingress_if, egress_if):
                 raise
 
     def verify_capture_no_translation(self, capture, ingress_if, egress_if):
@@ -404,12 +453,12 @@ class MethodHolder(VppTestCase):
                 else:
                     self.assertEqual(packet[ICMP].id, self.icmp_id_in)
             except:
                 else:
                     self.assertEqual(packet[ICMP].id, self.icmp_id_in)
             except:
-                self.logger.error(ppp("Unexpected or invalid packet "
-                                      "(inside network):", packet))
+                self.logger.error(
+                    ppp("Unexpected or invalid packet (inside network):", packet)
+                )
                 raise
 
                 raise
 
-    def verify_capture_out_with_icmp_errors(self, capture, src_ip=None,
-                                            icmp_type=11):
+    def verify_capture_out_with_icmp_errors(self, capture, src_ip=None, icmp_type=11):
         """
         Verify captured packets with ICMP errors on outside network
 
         """
         Verify captured packets with ICMP errors on outside network
 
@@ -430,16 +479,15 @@ class MethodHolder(VppTestCase):
                 self.assertTrue(icmp.haslayer(IPerror))
                 inner_ip = icmp[IPerror]
                 if inner_ip.haslayer(TCPerror):
                 self.assertTrue(icmp.haslayer(IPerror))
                 inner_ip = icmp[IPerror]
                 if inner_ip.haslayer(TCPerror):
-                    self.assertEqual(inner_ip[TCPerror].dport,
-                                     self.tcp_port_out)
+                    self.assertEqual(inner_ip[TCPerror].dport, self.tcp_port_out)
                 elif inner_ip.haslayer(UDPerror):
                 elif inner_ip.haslayer(UDPerror):
-                    self.assertEqual(inner_ip[UDPerror].dport,
-                                     self.udp_port_out)
+                    self.assertEqual(inner_ip[UDPerror].dport, self.udp_port_out)
                 else:
                     self.assertEqual(inner_ip[ICMPerror].id, self.icmp_id_out)
             except:
                 else:
                     self.assertEqual(inner_ip[ICMPerror].id, self.icmp_id_out)
             except:
-                self.logger.error(ppp("Unexpected or invalid packet "
-                                      "(outside network):", packet))
+                self.logger.error(
+                    ppp("Unexpected or invalid packet (outside network):", packet)
+                )
                 raise
 
     def verify_capture_in_with_icmp_errors(self, capture, in_if, icmp_type=11):
                 raise
 
     def verify_capture_in_with_icmp_errors(self, capture, in_if, icmp_type=11):
@@ -460,20 +508,20 @@ class MethodHolder(VppTestCase):
                 self.assertTrue(icmp.haslayer(IPerror))
                 inner_ip = icmp[IPerror]
                 if inner_ip.haslayer(TCPerror):
                 self.assertTrue(icmp.haslayer(IPerror))
                 inner_ip = icmp[IPerror]
                 if inner_ip.haslayer(TCPerror):
-                    self.assertEqual(inner_ip[TCPerror].sport,
-                                     self.tcp_port_in)
+                    self.assertEqual(inner_ip[TCPerror].sport, self.tcp_port_in)
                 elif inner_ip.haslayer(UDPerror):
                 elif inner_ip.haslayer(UDPerror):
-                    self.assertEqual(inner_ip[UDPerror].sport,
-                                     self.udp_port_in)
+                    self.assertEqual(inner_ip[UDPerror].sport, self.udp_port_in)
                 else:
                     self.assertEqual(inner_ip[ICMPerror].id, self.icmp_id_in)
             except:
                 else:
                     self.assertEqual(inner_ip[ICMPerror].id, self.icmp_id_in)
             except:
-                self.logger.error(ppp("Unexpected or invalid packet "
-                                      "(inside network):", packet))
+                self.logger.error(
+                    ppp("Unexpected or invalid packet (inside network):", packet)
+                )
                 raise
 
                 raise
 
-    def create_stream_frag(self, src_if, dst, sport, dport, data,
-                           proto=IP_PROTOS.tcp, echo_reply=False):
+    def create_stream_frag(
+        self, src_if, dst, sport, dport, data, proto=IP_PROTOS.tcp, echo_reply=False
+    ):
         """
         Create fragmented packet stream
 
         """
         Create fragmented packet stream
 
@@ -487,9 +535,11 @@ class MethodHolder(VppTestCase):
         :returns: Fragments
         """
         if proto == IP_PROTOS.tcp:
         :returns: Fragments
         """
         if proto == IP_PROTOS.tcp:
-            p = (IP(src=src_if.remote_ip4, dst=dst) /
-                 TCP(sport=sport, dport=dport) /
-                 Raw(data))
+            p = (
+                IP(src=src_if.remote_ip4, dst=dst)
+                / TCP(sport=sport, dport=dport)
+                / Raw(data)
+            )
             p = p.__class__(scapy.compat.raw(p))
             chksum = p[TCP].chksum
             proto_header = TCP(sport=sport, dport=dport, chksum=chksum)
             p = p.__class__(scapy.compat.raw(p))
             chksum = p[TCP].chksum
             proto_header = TCP(sport=sport, dport=dport, chksum=chksum)
@@ -497,9 +547,9 @@ class MethodHolder(VppTestCase):
             proto_header = UDP(sport=sport, dport=dport)
         elif proto == IP_PROTOS.icmp:
             if not echo_reply:
             proto_header = UDP(sport=sport, dport=dport)
         elif proto == IP_PROTOS.icmp:
             if not echo_reply:
-                proto_header = ICMP(id=sport, type='echo-request')
+                proto_header = ICMP(id=sport, type="echo-request")
             else:
             else:
-                proto_header = ICMP(id=sport, type='echo-reply')
+                proto_header = ICMP(id=sport, type="echo-reply")
         else:
             raise Exception("Unsupported protocol")
         id = random.randint(0, 65535)
         else:
             raise Exception("Unsupported protocol")
         id = random.randint(0, 65535)
@@ -508,28 +558,32 @@ class MethodHolder(VppTestCase):
             raw = Raw(data[0:4])
         else:
             raw = Raw(data[0:16])
             raw = Raw(data[0:4])
         else:
             raw = Raw(data[0:16])
-        p = (Ether(src=src_if.remote_mac, dst=src_if.local_mac) /
-             IP(src=src_if.remote_ip4, dst=dst, flags="MF", frag=0, id=id) /
-             proto_header /
-             raw)
+        p = (
+            Ether(src=src_if.remote_mac, dst=src_if.local_mac)
+            / IP(src=src_if.remote_ip4, dst=dst, flags="MF", frag=0, id=id)
+            / proto_header
+            / raw
+        )
         pkts.append(p)
         if proto == IP_PROTOS.tcp:
             raw = Raw(data[4:20])
         else:
             raw = Raw(data[16:32])
         pkts.append(p)
         if proto == IP_PROTOS.tcp:
             raw = Raw(data[4:20])
         else:
             raw = Raw(data[16:32])
-        p = (Ether(src=src_if.remote_mac, dst=src_if.local_mac) /
-             IP(src=src_if.remote_ip4, dst=dst, flags="MF", frag=3, id=id,
-                proto=proto) /
-             raw)
+        p = (
+            Ether(src=src_if.remote_mac, dst=src_if.local_mac)
+            / IP(src=src_if.remote_ip4, dst=dst, flags="MF", frag=3, id=id, proto=proto)
+            / raw
+        )
         pkts.append(p)
         if proto == IP_PROTOS.tcp:
             raw = Raw(data[20:])
         else:
             raw = Raw(data[32:])
         pkts.append(p)
         if proto == IP_PROTOS.tcp:
             raw = Raw(data[20:])
         else:
             raw = Raw(data[32:])
-        p = (Ether(src=src_if.remote_mac, dst=src_if.local_mac) /
-             IP(src=src_if.remote_ip4, dst=dst, frag=5, proto=proto,
-                id=id) /
-             raw)
+        p = (
+            Ether(src=src_if.remote_mac, dst=src_if.local_mac)
+            / IP(src=src_if.remote_ip4, dst=dst, frag=5, proto=proto, id=id)
+            / raw
+        )
         pkts.append(p)
         return pkts
 
         pkts.append(p)
         return pkts
 
@@ -550,17 +604,15 @@ class MethodHolder(VppTestCase):
             self.assert_ip_checksum_valid(p)
             buffer.seek(p[IP].frag * 8)
             buffer.write(bytes(p[IP].payload))
             self.assert_ip_checksum_valid(p)
             buffer.seek(p[IP].frag * 8)
             buffer.write(bytes(p[IP].payload))
-        ip = IP(src=frags[0][IP].src, dst=frags[0][IP].dst,
-                proto=frags[0][IP].proto)
+        ip = IP(src=frags[0][IP].src, dst=frags[0][IP].dst, proto=frags[0][IP].proto)
         if ip.proto == IP_PROTOS.tcp:
         if ip.proto == IP_PROTOS.tcp:
-            p = (ip / TCP(buffer.getvalue()))
+            p = ip / TCP(buffer.getvalue())
             self.logger.debug(ppp("Reassembled:", p))
             self.assert_tcp_checksum_valid(p)
         elif ip.proto == IP_PROTOS.udp:
             self.logger.debug(ppp("Reassembled:", p))
             self.assert_tcp_checksum_valid(p)
         elif ip.proto == IP_PROTOS.udp:
-            p = (ip / UDP(buffer.getvalue()[:8]) /
-                 Raw(buffer.getvalue()[8:]))
+            p = ip / UDP(buffer.getvalue()[:8]) / Raw(buffer.getvalue()[8:])
         elif ip.proto == IP_PROTOS.icmp:
         elif ip.proto == IP_PROTOS.icmp:
-            p = (ip / ICMP(buffer.getvalue()))
+            p = ip / ICMP(buffer.getvalue())
         return p
 
     def verify_ipfix_nat44_ses(self, data):
         return p
 
     def verify_ipfix_nat44_ses(self, data):
@@ -580,29 +632,24 @@ class MethodHolder(VppTestCase):
             else:
                 nat44_ses_delete_num += 1
             # sourceIPv4Address
             else:
                 nat44_ses_delete_num += 1
             # sourceIPv4Address
-            self.assertEqual(self.pg0.remote_ip4,
-                             str(ipaddress.IPv4Address(record[8])))
+            self.assertEqual(self.pg0.remote_ip4, str(ipaddress.IPv4Address(record[8])))
             # postNATSourceIPv4Address
             # postNATSourceIPv4Address
-            self.assertEqual(socket.inet_pton(socket.AF_INET, self.nat_addr),
-                             record[225])
+            self.assertEqual(
+                socket.inet_pton(socket.AF_INET, self.nat_addr), record[225]
+            )
             # ingressVRFID
             self.assertEqual(struct.pack("!I", 0), record[234])
             # protocolIdentifier/sourceTransportPort
             # /postNAPTSourceTransportPort
             if IP_PROTOS.icmp == scapy.compat.orb(record[4]):
                 self.assertEqual(struct.pack("!H", self.icmp_id_in), record[7])
             # ingressVRFID
             self.assertEqual(struct.pack("!I", 0), record[234])
             # protocolIdentifier/sourceTransportPort
             # /postNAPTSourceTransportPort
             if IP_PROTOS.icmp == scapy.compat.orb(record[4]):
                 self.assertEqual(struct.pack("!H", self.icmp_id_in), record[7])
-                self.assertEqual(struct.pack("!H", self.icmp_id_out),
-                                 record[227])
+                self.assertEqual(struct.pack("!H", self.icmp_id_out), record[227])
             elif IP_PROTOS.tcp == scapy.compat.orb(record[4]):
             elif IP_PROTOS.tcp == scapy.compat.orb(record[4]):
-                self.assertEqual(struct.pack("!H", self.tcp_port_in),
-                                 record[7])
-                self.assertEqual(struct.pack("!H", self.tcp_port_out),
-                                 record[227])
+                self.assertEqual(struct.pack("!H", self.tcp_port_in), record[7])
+                self.assertEqual(struct.pack("!H", self.tcp_port_out), record[227])
             elif IP_PROTOS.udp == scapy.compat.orb(record[4]):
             elif IP_PROTOS.udp == scapy.compat.orb(record[4]):
-                self.assertEqual(struct.pack("!H", self.udp_port_in),
-                                 record[7])
-                self.assertEqual(struct.pack("!H", self.udp_port_out),
-                                 record[227])
+                self.assertEqual(struct.pack("!H", self.udp_port_in), record[7])
+                self.assertEqual(struct.pack("!H", self.udp_port_out), record[227])
             else:
                 self.fail(f"Invalid protocol {scapy.compat.orb(record[4])}")
         self.assertEqual(3, nat44_ses_create_num)
             else:
                 self.fail(f"Invalid protocol {scapy.compat.orb(record[4])}")
         self.assertEqual(3, nat44_ses_create_num)
@@ -627,16 +674,16 @@ class MethodHolder(VppTestCase):
         self.assertEqual(struct.pack("!I", limit), record[471])
 
     def verify_no_nat44_user(self):
         self.assertEqual(struct.pack("!I", limit), record[471])
 
     def verify_no_nat44_user(self):
-        """ Verify that there is no NAT44EI user """
+        """Verify that there is no NAT44EI user"""
         users = self.vapi.nat44_ei_user_dump()
         self.assertEqual(len(users), 0)
         users = self.vapi.nat44_ei_user_dump()
         self.assertEqual(len(users), 0)
-        users = self.statistics['/nat44-ei/total-users']
+        users = self.statistics["/nat44-ei/total-users"]
         self.assertEqual(users[0][0], 0)
         self.assertEqual(users[0][0], 0)
-        sessions = self.statistics['/nat44-ei/total-sessions']
+        sessions = self.statistics["/nat44-ei/total-sessions"]
         self.assertEqual(sessions[0][0], 0)
 
     def verify_syslog_apmap(self, data, is_add=True):
         self.assertEqual(sessions[0][0], 0)
 
     def verify_syslog_apmap(self, data, is_add=True):
-        message = data.decode('utf-8')
+        message = data.decode("utf-8")
         try:
             message = SyslogMessage.parse(message)
         except ParseError as e:
         try:
             message = SyslogMessage.parse(message)
         except ParseError as e:
@@ -644,26 +691,26 @@ class MethodHolder(VppTestCase):
             raise
         else:
             self.assertEqual(message.severity, SyslogSeverity.info)
             raise
         else:
             self.assertEqual(message.severity, SyslogSeverity.info)
-            self.assertEqual(message.appname, 'NAT')
-            self.assertEqual(message.msgid, 'APMADD' if is_add else 'APMDEL')
-            sd_params = message.sd.get('napmap')
+            self.assertEqual(message.appname, "NAT")
+            self.assertEqual(message.msgid, "APMADD" if is_add else "APMDEL")
+            sd_params = message.sd.get("napmap")
             self.assertTrue(sd_params is not None)
             self.assertTrue(sd_params is not None)
-            self.assertEqual(sd_params.get('IATYP'), 'IPv4')
-            self.assertEqual(sd_params.get('ISADDR'), self.pg0.remote_ip4)
-            self.assertEqual(sd_params.get('ISPORT'), "%d" % self.tcp_port_in)
-            self.assertEqual(sd_params.get('XATYP'), 'IPv4')
-            self.assertEqual(sd_params.get('XSADDR'), self.nat_addr)
-            self.assertEqual(sd_params.get('XSPORT'), "%d" % self.tcp_port_out)
-            self.assertEqual(sd_params.get('PROTO'), "%d" % IP_PROTOS.tcp)
-            self.assertTrue(sd_params.get('SSUBIX') is not None)
-            self.assertEqual(sd_params.get('SVLAN'), '0')
+            self.assertEqual(sd_params.get("IATYP"), "IPv4")
+            self.assertEqual(sd_params.get("ISADDR"), self.pg0.remote_ip4)
+            self.assertEqual(sd_params.get("ISPORT"), "%d" % self.tcp_port_in)
+            self.assertEqual(sd_params.get("XATYP"), "IPv4")
+            self.assertEqual(sd_params.get("XSADDR"), self.nat_addr)
+            self.assertEqual(sd_params.get("XSPORT"), "%d" % self.tcp_port_out)
+            self.assertEqual(sd_params.get("PROTO"), "%d" % IP_PROTOS.tcp)
+            self.assertTrue(sd_params.get("SSUBIX") is not None)
+            self.assertEqual(sd_params.get("SVLAN"), "0")
 
     def verify_mss_value(self, pkt, mss):
         if not pkt.haslayer(IP) or not pkt.haslayer(TCP):
             raise TypeError("Not a TCP/IP packet")
 
         for option in pkt[TCP].options:
 
     def verify_mss_value(self, pkt, mss):
         if not pkt.haslayer(IP) or not pkt.haslayer(TCP):
             raise TypeError("Not a TCP/IP packet")
 
         for option in pkt[TCP].options:
-            if option[0] == 'MSS':
+            if option[0] == "MSS":
                 self.assertEqual(option[1], mss)
                 self.assert_tcp_checksum_valid(pkt)
 
                 self.assertEqual(option[1], mss)
                 self.assert_tcp_checksum_valid(pkt)
 
@@ -678,8 +725,9 @@ class MethodHolder(VppTestCase):
         else:
             raise Exception("Unsupported protocol")
 
         else:
             raise Exception("Unsupported protocol")
 
-    def frag_in_order(self, proto=IP_PROTOS.tcp, dont_translate=False,
-                      ignore_port=False):
+    def frag_in_order(
+        self, proto=IP_PROTOS.tcp, dont_translate=False, ignore_port=False
+    ):
         layer = self.proto2layer(proto)
 
         if proto == IP_PROTOS.tcp:
         layer = self.proto2layer(proto)
 
         if proto == IP_PROTOS.tcp:
@@ -689,20 +737,19 @@ class MethodHolder(VppTestCase):
         self.port_in = random.randint(1025, 65535)
 
         # in2out
         self.port_in = random.randint(1025, 65535)
 
         # in2out
-        pkts = self.create_stream_frag(self.pg0, self.pg1.remote_ip4,
-                                       self.port_in, 20, data, proto)
+        pkts = self.create_stream_frag(
+            self.pg0, self.pg1.remote_ip4, self.port_in, 20, data, proto
+        )
         self.pg0.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         frags = self.pg1.get_capture(len(pkts))
         if not dont_translate:
         self.pg0.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         frags = self.pg1.get_capture(len(pkts))
         if not dont_translate:
-            p = self.reass_frags_and_verify(frags,
-                                            self.nat_addr,
-                                            self.pg1.remote_ip4)
+            p = self.reass_frags_and_verify(frags, self.nat_addr, self.pg1.remote_ip4)
         else:
         else:
-            p = self.reass_frags_and_verify(frags,
-                                            self.pg0.remote_ip4,
-                                            self.pg1.remote_ip4)
+            p = self.reass_frags_and_verify(
+                frags, self.pg0.remote_ip4, self.pg1.remote_ip4
+            )
         if proto != IP_PROTOS.icmp:
             if not dont_translate:
                 self.assertEqual(p[layer].dport, 20)
         if proto != IP_PROTOS.icmp:
             if not dont_translate:
                 self.assertEqual(p[layer].dport, 20)
@@ -729,15 +776,14 @@ class MethodHolder(VppTestCase):
         else:
             sport = p[layer].id
             dport = 0
         else:
             sport = p[layer].id
             dport = 0
-        pkts = self.create_stream_frag(self.pg1, dst_addr, sport, dport, data,
-                                       proto, echo_reply=True)
+        pkts = self.create_stream_frag(
+            self.pg1, dst_addr, sport, dport, data, proto, echo_reply=True
+        )
         self.pg1.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         frags = self.pg0.get_capture(len(pkts))
         self.pg1.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         frags = self.pg0.get_capture(len(pkts))
-        p = self.reass_frags_and_verify(frags,
-                                        self.pg1.remote_ip4,
-                                        self.pg0.remote_ip4)
+        p = self.reass_frags_and_verify(frags, self.pg1.remote_ip4, self.pg0.remote_ip4)
         if proto != IP_PROTOS.icmp:
             self.assertEqual(p[layer].sport, 20)
             self.assertEqual(p[layer].dport, self.port_in)
         if proto != IP_PROTOS.icmp:
             self.assertEqual(p[layer].sport, 20)
             self.assertEqual(p[layer].dport, self.port_in)
@@ -745,9 +791,15 @@ class MethodHolder(VppTestCase):
             self.assertEqual(p[layer].id, self.port_in)
         self.assertEqual(data, p[Raw].load)
 
             self.assertEqual(p[layer].id, self.port_in)
         self.assertEqual(data, p[Raw].load)
 
-    def reass_hairpinning(self, server_addr, server_in_port, server_out_port,
-                          host_in_port, proto=IP_PROTOS.tcp,
-                          ignore_port=False):
+    def reass_hairpinning(
+        self,
+        server_addr,
+        server_in_port,
+        server_out_port,
+        host_in_port,
+        proto=IP_PROTOS.tcp,
+        ignore_port=False,
+    ):
 
         layer = self.proto2layer(proto)
 
 
         layer = self.proto2layer(proto)
 
@@ -757,19 +809,14 @@ class MethodHolder(VppTestCase):
             data = b"A" * 16 + b"B" * 16 + b"C" * 3
 
         # send packet from host to server
             data = b"A" * 16 + b"B" * 16 + b"C" * 3
 
         # send packet from host to server
-        pkts = self.create_stream_frag(self.pg0,
-                                       self.nat_addr,
-                                       host_in_port,
-                                       server_out_port,
-                                       data,
-                                       proto)
+        pkts = self.create_stream_frag(
+            self.pg0, self.nat_addr, host_in_port, server_out_port, data, proto
+        )
         self.pg0.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         frags = self.pg0.get_capture(len(pkts))
         self.pg0.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         frags = self.pg0.get_capture(len(pkts))
-        p = self.reass_frags_and_verify(frags,
-                                        self.nat_addr,
-                                        server_addr)
+        p = self.reass_frags_and_verify(frags, self.nat_addr, server_addr)
         if proto != IP_PROTOS.icmp:
             if not ignore_port:
                 self.assertNotEqual(p[layer].sport, host_in_port)
         if proto != IP_PROTOS.icmp:
             if not ignore_port:
                 self.assertNotEqual(p[layer].sport, host_in_port)
@@ -779,8 +826,9 @@ class MethodHolder(VppTestCase):
                 self.assertNotEqual(p[layer].id, host_in_port)
         self.assertEqual(data, p[Raw].load)
 
                 self.assertNotEqual(p[layer].id, host_in_port)
         self.assertEqual(data, p[Raw].load)
 
-    def frag_out_of_order(self, proto=IP_PROTOS.tcp, dont_translate=False,
-                          ignore_port=False):
+    def frag_out_of_order(
+        self, proto=IP_PROTOS.tcp, dont_translate=False, ignore_port=False
+    ):
         layer = self.proto2layer(proto)
 
         if proto == IP_PROTOS.tcp:
         layer = self.proto2layer(proto)
 
         if proto == IP_PROTOS.tcp:
@@ -791,21 +839,22 @@ class MethodHolder(VppTestCase):
 
         for i in range(2):
             # in2out
 
         for i in range(2):
             # in2out
-            pkts = self.create_stream_frag(self.pg0, self.pg1.remote_ip4,
-                                           self.port_in, 20, data, proto)
+            pkts = self.create_stream_frag(
+                self.pg0, self.pg1.remote_ip4, self.port_in, 20, data, proto
+            )
             pkts.reverse()
             self.pg0.add_stream(pkts)
             self.pg_enable_capture(self.pg_interfaces)
             self.pg_start()
             frags = self.pg1.get_capture(len(pkts))
             if not dont_translate:
             pkts.reverse()
             self.pg0.add_stream(pkts)
             self.pg_enable_capture(self.pg_interfaces)
             self.pg_start()
             frags = self.pg1.get_capture(len(pkts))
             if not dont_translate:
-                p = self.reass_frags_and_verify(frags,
-                                                self.nat_addr,
-                                                self.pg1.remote_ip4)
+                p = self.reass_frags_and_verify(
+                    frags, self.nat_addr, self.pg1.remote_ip4
+                )
             else:
             else:
-                p = self.reass_frags_and_verify(frags,
-                                                self.pg0.remote_ip4,
-                                                self.pg1.remote_ip4)
+                p = self.reass_frags_and_verify(
+                    frags, self.pg0.remote_ip4, self.pg1.remote_ip4
+                )
             if proto != IP_PROTOS.icmp:
                 if not dont_translate:
                     self.assertEqual(p[layer].dport, 20)
             if proto != IP_PROTOS.icmp:
                 if not dont_translate:
                     self.assertEqual(p[layer].dport, 20)
@@ -832,16 +881,17 @@ class MethodHolder(VppTestCase):
             else:
                 sport = p[layer].id
                 dport = 0
             else:
                 sport = p[layer].id
                 dport = 0
-            pkts = self.create_stream_frag(self.pg1, dst_addr, sport, dport,
-                                           data, proto, echo_reply=True)
+            pkts = self.create_stream_frag(
+                self.pg1, dst_addr, sport, dport, data, proto, echo_reply=True
+            )
             pkts.reverse()
             self.pg1.add_stream(pkts)
             self.pg_enable_capture(self.pg_interfaces)
             self.pg_start()
             frags = self.pg0.get_capture(len(pkts))
             pkts.reverse()
             self.pg1.add_stream(pkts)
             self.pg_enable_capture(self.pg_interfaces)
             self.pg_start()
             frags = self.pg0.get_capture(len(pkts))
-            p = self.reass_frags_and_verify(frags,
-                                            self.pg1.remote_ip4,
-                                            self.pg0.remote_ip4)
+            p = self.reass_frags_and_verify(
+                frags, self.pg1.remote_ip4, self.pg0.remote_ip4
+            )
             if proto != IP_PROTOS.icmp:
                 self.assertEqual(p[layer].sport, 20)
                 self.assertEqual(p[layer].dport, self.port_in)
             if proto != IP_PROTOS.icmp:
                 self.assertEqual(p[layer].sport, 20)
                 self.assertEqual(p[layer].dport, self.port_in)
@@ -861,7 +911,7 @@ def get_nat44_ei_in2out_worker_index(ip, vpp_worker_count):
 
 
 class TestNAT44EI(MethodHolder):
 
 
 class TestNAT44EI(MethodHolder):
-    """ NAT44EI Test Cases """
+    """NAT44EI Test Cases"""
 
     max_translations = 10240
     max_users = 10240
 
     max_translations = 10240
     max_users = 10240
@@ -877,7 +927,7 @@ class TestNAT44EI(MethodHolder):
         cls.udp_port_out = 6304
         cls.icmp_id_in = 6305
         cls.icmp_id_out = 6305
         cls.udp_port_out = 6304
         cls.icmp_id_in = 6305
         cls.icmp_id_out = 6305
-        cls.nat_addr = '10.0.0.3'
+        cls.nat_addr = "10.0.0.3"
         cls.ipfix_src_port = 4739
         cls.ipfix_domain_id = 1
         cls.tcp_external_port = 80
         cls.ipfix_src_port = 4739
         cls.ipfix_domain_id = 1
         cls.tcp_external_port = 80
@@ -898,8 +948,8 @@ class TestNAT44EI(MethodHolder):
         cls.pg1.configure_ipv4_neighbors()
 
         cls.overlapping_interfaces = list(list(cls.pg_interfaces[4:7]))
         cls.pg1.configure_ipv4_neighbors()
 
         cls.overlapping_interfaces = list(list(cls.pg_interfaces[4:7]))
-        cls.vapi.ip_table_add_del(is_add=1, table={'table_id': 10})
-        cls.vapi.ip_table_add_del(is_add=1, table={'table_id': 20})
+        cls.vapi.ip_table_add_del(is_add=1, table={"table_id": 10})
+        cls.vapi.ip_table_add_del(is_add=1, table={"table_id": 20})
 
         cls.pg4._local_ip4 = "172.16.255.1"
         cls.pg4._remote_hosts[0]._ip4 = "172.16.255.2"
 
         cls.pg4._local_ip4 = "172.16.255.1"
         cls.pg4._remote_hosts[0]._ip4 = "172.16.255.2"
@@ -921,8 +971,8 @@ class TestNAT44EI(MethodHolder):
         cls.pg9.generate_remote_hosts(2)
         cls.pg9.config_ip4()
         cls.vapi.sw_interface_add_del_address(
         cls.pg9.generate_remote_hosts(2)
         cls.pg9.config_ip4()
         cls.vapi.sw_interface_add_del_address(
-            sw_if_index=cls.pg9.sw_if_index,
-            prefix="10.0.0.1/24")
+            sw_if_index=cls.pg9.sw_if_index, prefix="10.0.0.1/24"
+        )
 
         cls.pg9.admin_up()
         cls.pg9.resolve_arp()
 
         cls.pg9.admin_up()
         cls.pg9.resolve_arp()
@@ -932,8 +982,8 @@ class TestNAT44EI(MethodHolder):
 
     def plugin_enable(self):
         self.vapi.nat44_ei_plugin_enable_disable(
 
     def plugin_enable(self):
         self.vapi.nat44_ei_plugin_enable_disable(
-            sessions=self.max_translations,
-            users=self.max_users, enable=1)
+            sessions=self.max_translations, users=self.max_users, enable=1
+        )
 
     def setUp(self):
         super(TestNAT44EI, self).setUp()
 
     def setUp(self):
         super(TestNAT44EI, self).setUp()
@@ -943,8 +993,8 @@ class TestNAT44EI(MethodHolder):
         super(TestNAT44EI, self).tearDown()
         if not self.vpp_dead:
             self.vapi.nat44_ei_ipfix_enable_disable(
         super(TestNAT44EI, self).tearDown()
         if not self.vpp_dead:
             self.vapi.nat44_ei_ipfix_enable_disable(
-                domain_id=self.ipfix_domain_id, src_port=self.ipfix_src_port,
-                enable=0)
+                domain_id=self.ipfix_domain_id, src_port=self.ipfix_src_port, enable=0
+            )
             self.ipfix_src_port = 4739
             self.ipfix_domain_id = 1
 
             self.ipfix_src_port = 4739
             self.ipfix_domain_id = 1
 
@@ -952,16 +1002,16 @@ class TestNAT44EI(MethodHolder):
             self.vapi.cli("clear logging")
 
     def test_clear_sessions(self):
             self.vapi.cli("clear logging")
 
     def test_clear_sessions(self):
-        """ NAT44EI session clearing test """
+        """NAT44EI session clearing test"""
 
         self.nat44_add_address(self.nat_addr)
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
 
         self.nat44_add_address(self.nat_addr)
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg0.sw_if_index,
-            flags=flags, is_add=1)
+            sw_if_index=self.pg0.sw_if_index, flags=flags, is_add=1
+        )
         self.vapi.nat44_ei_interface_add_del_feature(
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg1.sw_if_index,
-            is_add=1)
+            sw_if_index=self.pg1.sw_if_index, is_add=1
+        )
 
         pkts = self.create_stream_in(self.pg0, self.pg1)
         self.pg0.add_stream(pkts)
 
         pkts = self.create_stream_in(self.pg0, self.pg1)
         self.pg0.add_stream(pkts)
@@ -970,32 +1020,32 @@ class TestNAT44EI(MethodHolder):
         capture = self.pg1.get_capture(len(pkts))
         self.verify_capture_out(capture)
 
         capture = self.pg1.get_capture(len(pkts))
         self.verify_capture_out(capture)
 
-        sessions = self.statistics['/nat44-ei/total-sessions']
+        sessions = self.statistics["/nat44-ei/total-sessions"]
         self.assertGreater(sessions[:, 0].sum(), 0, "Session count invalid")
         self.logger.info("sessions before clearing: %s" % sessions[0][0])
 
         self.vapi.cli("clear nat44 ei sessions")
 
         self.assertGreater(sessions[:, 0].sum(), 0, "Session count invalid")
         self.logger.info("sessions before clearing: %s" % sessions[0][0])
 
         self.vapi.cli("clear nat44 ei sessions")
 
-        sessions = self.statistics['/nat44-ei/total-sessions']
+        sessions = self.statistics["/nat44-ei/total-sessions"]
         self.assertEqual(sessions[:, 0].sum(), 0, "Session count invalid")
         self.logger.info("sessions after clearing: %s" % sessions[0][0])
 
     def test_dynamic(self):
         self.assertEqual(sessions[:, 0].sum(), 0, "Session count invalid")
         self.logger.info("sessions after clearing: %s" % sessions[0][0])
 
     def test_dynamic(self):
-        """ NAT44EI dynamic translation test """
+        """NAT44EI dynamic translation test"""
         self.nat44_add_address(self.nat_addr)
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
         self.nat44_add_address(self.nat_addr)
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg0.sw_if_index,
-            flags=flags, is_add=1)
+            sw_if_index=self.pg0.sw_if_index, flags=flags, is_add=1
+        )
         self.vapi.nat44_ei_interface_add_del_feature(
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg1.sw_if_index,
-            is_add=1)
+            sw_if_index=self.pg1.sw_if_index, is_add=1
+        )
 
         # in2out
 
         # in2out
-        tcpn = self.statistics['/nat44-ei/in2out/slowpath/tcp']
-        udpn = self.statistics['/nat44-ei/in2out/slowpath/udp']
-        icmpn = self.statistics['/nat44-ei/in2out/slowpath/icmp']
-        drops = self.statistics['/nat44-ei/in2out/slowpath/drops']
+        tcpn = self.statistics["/nat44-ei/in2out/slowpath/tcp"]
+        udpn = self.statistics["/nat44-ei/in2out/slowpath/udp"]
+        icmpn = self.statistics["/nat44-ei/in2out/slowpath/icmp"]
+        drops = self.statistics["/nat44-ei/in2out/slowpath/drops"]
 
         pkts = self.create_stream_in(self.pg0, self.pg1)
         self.pg0.add_stream(pkts)
 
         pkts = self.create_stream_in(self.pg0, self.pg1)
         self.pg0.add_stream(pkts)
@@ -1005,20 +1055,20 @@ class TestNAT44EI(MethodHolder):
         self.verify_capture_out(capture)
 
         if_idx = self.pg0.sw_if_index
         self.verify_capture_out(capture)
 
         if_idx = self.pg0.sw_if_index
-        cnt = self.statistics['/nat44-ei/in2out/slowpath/tcp']
+        cnt = self.statistics["/nat44-ei/in2out/slowpath/tcp"]
         self.assertEqual(cnt[:, if_idx].sum() - tcpn[:, if_idx].sum(), 2)
         self.assertEqual(cnt[:, if_idx].sum() - tcpn[:, if_idx].sum(), 2)
-        cnt = self.statistics['/nat44-ei/in2out/slowpath/udp']
+        cnt = self.statistics["/nat44-ei/in2out/slowpath/udp"]
         self.assertEqual(cnt[:, if_idx].sum() - udpn[:, if_idx].sum(), 1)
         self.assertEqual(cnt[:, if_idx].sum() - udpn[:, if_idx].sum(), 1)
-        cnt = self.statistics['/nat44-ei/in2out/slowpath/icmp']
+        cnt = self.statistics["/nat44-ei/in2out/slowpath/icmp"]
         self.assertEqual(cnt[:, if_idx].sum() - icmpn[:, if_idx].sum(), 1)
         self.assertEqual(cnt[:, if_idx].sum() - icmpn[:, if_idx].sum(), 1)
-        cnt = self.statistics['/nat44-ei/in2out/slowpath/drops']
+        cnt = self.statistics["/nat44-ei/in2out/slowpath/drops"]
         self.assertEqual(cnt[:, if_idx].sum() - drops[:, if_idx].sum(), 0)
 
         # out2in
         self.assertEqual(cnt[:, if_idx].sum() - drops[:, if_idx].sum(), 0)
 
         # out2in
-        tcpn = self.statistics['/nat44-ei/out2in/slowpath/tcp']
-        udpn = self.statistics['/nat44-ei/out2in/slowpath/udp']
-        icmpn = self.statistics['/nat44-ei/out2in/slowpath/icmp']
-        drops = self.statistics['/nat44-ei/out2in/slowpath/drops']
+        tcpn = self.statistics["/nat44-ei/out2in/slowpath/tcp"]
+        udpn = self.statistics["/nat44-ei/out2in/slowpath/udp"]
+        icmpn = self.statistics["/nat44-ei/out2in/slowpath/icmp"]
+        drops = self.statistics["/nat44-ei/out2in/slowpath/drops"]
 
         pkts = self.create_stream_out(self.pg1)
         self.pg1.add_stream(pkts)
 
         pkts = self.create_stream_out(self.pg1)
         self.pg1.add_stream(pkts)
@@ -1028,31 +1078,31 @@ class TestNAT44EI(MethodHolder):
         self.verify_capture_in(capture, self.pg0)
 
         if_idx = self.pg1.sw_if_index
         self.verify_capture_in(capture, self.pg0)
 
         if_idx = self.pg1.sw_if_index
-        cnt = self.statistics['/nat44-ei/out2in/slowpath/tcp']
+        cnt = self.statistics["/nat44-ei/out2in/slowpath/tcp"]
         self.assertEqual(cnt[:, if_idx].sum() - tcpn[:, if_idx].sum(), 2)
         self.assertEqual(cnt[:, if_idx].sum() - tcpn[:, if_idx].sum(), 2)
-        cnt = self.statistics['/nat44-ei/out2in/slowpath/udp']
+        cnt = self.statistics["/nat44-ei/out2in/slowpath/udp"]
         self.assertEqual(cnt[:, if_idx].sum() - udpn[:, if_idx].sum(), 1)
         self.assertEqual(cnt[:, if_idx].sum() - udpn[:, if_idx].sum(), 1)
-        cnt = self.statistics['/nat44-ei/out2in/slowpath/icmp']
+        cnt = self.statistics["/nat44-ei/out2in/slowpath/icmp"]
         self.assertEqual(cnt[:, if_idx].sum() - icmpn[:, if_idx].sum(), 1)
         self.assertEqual(cnt[:, if_idx].sum() - icmpn[:, if_idx].sum(), 1)
-        cnt = self.statistics['/nat44-ei/out2in/slowpath/drops']
+        cnt = self.statistics["/nat44-ei/out2in/slowpath/drops"]
         self.assertEqual(cnt[:, if_idx].sum() - drops[:, if_idx].sum(), 0)
 
         self.assertEqual(cnt[:, if_idx].sum() - drops[:, if_idx].sum(), 0)
 
-        users = self.statistics['/nat44-ei/total-users']
+        users = self.statistics["/nat44-ei/total-users"]
         self.assertEqual(users[:, 0].sum(), 1)
         self.assertEqual(users[:, 0].sum(), 1)
-        sessions = self.statistics['/nat44-ei/total-sessions']
+        sessions = self.statistics["/nat44-ei/total-sessions"]
         self.assertEqual(sessions[:, 0].sum(), 3)
 
     def test_dynamic_icmp_errors_in2out_ttl_1(self):
         self.assertEqual(sessions[:, 0].sum(), 3)
 
     def test_dynamic_icmp_errors_in2out_ttl_1(self):
-        """ NAT44EI handling of client packets with TTL=1 """
+        """NAT44EI handling of client packets with TTL=1"""
 
         self.nat44_add_address(self.nat_addr)
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
 
         self.nat44_add_address(self.nat_addr)
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg0.sw_if_index,
-            flags=flags, is_add=1)
+            sw_if_index=self.pg0.sw_if_index, flags=flags, is_add=1
+        )
         self.vapi.nat44_ei_interface_add_del_feature(
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg1.sw_if_index,
-            is_add=1)
+            sw_if_index=self.pg1.sw_if_index, is_add=1
+        )
 
         # Client side - generate traffic
         pkts = self.create_stream_in(self.pg0, self.pg1, ttl=1)
 
         # Client side - generate traffic
         pkts = self.create_stream_in(self.pg0, self.pg1, ttl=1)
@@ -1062,16 +1112,16 @@ class TestNAT44EI(MethodHolder):
         self.verify_capture_in_with_icmp_errors(capture, self.pg0)
 
     def test_dynamic_icmp_errors_out2in_ttl_1(self):
         self.verify_capture_in_with_icmp_errors(capture, self.pg0)
 
     def test_dynamic_icmp_errors_out2in_ttl_1(self):
-        """ NAT44EI handling of server packets with TTL=1 """
+        """NAT44EI handling of server packets with TTL=1"""
 
         self.nat44_add_address(self.nat_addr)
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
 
         self.nat44_add_address(self.nat_addr)
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg0.sw_if_index,
-            flags=flags, is_add=1)
+            sw_if_index=self.pg0.sw_if_index, flags=flags, is_add=1
+        )
         self.vapi.nat44_ei_interface_add_del_feature(
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg1.sw_if_index,
-            is_add=1)
+            sw_if_index=self.pg1.sw_if_index, is_add=1
+        )
 
         # Client side - create sessions
         pkts = self.create_stream_in(self.pg0, self.pg1)
 
         # Client side - create sessions
         pkts = self.create_stream_in(self.pg0, self.pg1)
@@ -1086,21 +1136,19 @@ class TestNAT44EI(MethodHolder):
         capture = self.send_and_expect_some(self.pg1, pkts, self.pg1)
 
         # Server side - verify ICMP type 11 packets
         capture = self.send_and_expect_some(self.pg1, pkts, self.pg1)
 
         # Server side - verify ICMP type 11 packets
-        self.verify_capture_out_with_icmp_errors(capture,
-                                                 src_ip=self.pg1.local_ip4)
+        self.verify_capture_out_with_icmp_errors(capture, src_ip=self.pg1.local_ip4)
 
     def test_dynamic_icmp_errors_in2out_ttl_2(self):
 
     def test_dynamic_icmp_errors_in2out_ttl_2(self):
-        """ NAT44EI handling of error responses to client packets with TTL=2
-        """
+        """NAT44EI handling of error responses to client packets with TTL=2"""
 
         self.nat44_add_address(self.nat_addr)
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
 
         self.nat44_add_address(self.nat_addr)
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg0.sw_if_index,
-            flags=flags, is_add=1)
+            sw_if_index=self.pg0.sw_if_index, flags=flags, is_add=1
+        )
         self.vapi.nat44_ei_interface_add_del_feature(
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg1.sw_if_index,
-            is_add=1)
+            sw_if_index=self.pg1.sw_if_index, is_add=1
+        )
 
         # Client side - generate traffic
         pkts = self.create_stream_in(self.pg0, self.pg1, ttl=2)
 
         # Client side - generate traffic
         pkts = self.create_stream_in(self.pg0, self.pg1, ttl=2)
@@ -1110,9 +1158,13 @@ class TestNAT44EI(MethodHolder):
 
         # Server side - simulate ICMP type 11 response
         capture = self.pg1.get_capture(len(pkts))
 
         # Server side - simulate ICMP type 11 response
         capture = self.pg1.get_capture(len(pkts))
-        pkts = [Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac) /
-                IP(src=self.pg1.remote_ip4, dst=self.nat_addr) /
-                ICMP(type=11) / packet[IP] for packet in capture]
+        pkts = [
+            Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac)
+            / IP(src=self.pg1.remote_ip4, dst=self.nat_addr)
+            / ICMP(type=11)
+            / packet[IP]
+            for packet in capture
+        ]
         self.pg1.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg1.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -1122,17 +1174,16 @@ class TestNAT44EI(MethodHolder):
         self.verify_capture_in_with_icmp_errors(capture, self.pg0)
 
     def test_dynamic_icmp_errors_out2in_ttl_2(self):
         self.verify_capture_in_with_icmp_errors(capture, self.pg0)
 
     def test_dynamic_icmp_errors_out2in_ttl_2(self):
-        """ NAT44EI handling of error responses to server packets with TTL=2
-        """
+        """NAT44EI handling of error responses to server packets with TTL=2"""
 
         self.nat44_add_address(self.nat_addr)
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
 
         self.nat44_add_address(self.nat_addr)
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg0.sw_if_index,
-            flags=flags, is_add=1)
+            sw_if_index=self.pg0.sw_if_index, flags=flags, is_add=1
+        )
         self.vapi.nat44_ei_interface_add_del_feature(
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg1.sw_if_index,
-            is_add=1)
+            sw_if_index=self.pg1.sw_if_index, is_add=1
+        )
 
         # Client side - create sessions
         pkts = self.create_stream_in(self.pg0, self.pg1)
 
         # Client side - create sessions
         pkts = self.create_stream_in(self.pg0, self.pg1)
@@ -1150,9 +1201,13 @@ class TestNAT44EI(MethodHolder):
 
         # Client side - simulate ICMP type 11 response
         capture = self.pg0.get_capture(len(pkts))
 
         # Client side - simulate ICMP type 11 response
         capture = self.pg0.get_capture(len(pkts))
-        pkts = [Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-                IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4) /
-                ICMP(type=11) / packet[IP] for packet in capture]
+        pkts = [
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4)
+            / ICMP(type=11)
+            / packet[IP]
+            for packet in capture
+        ]
         self.pg0.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg0.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -1162,20 +1217,22 @@ class TestNAT44EI(MethodHolder):
         self.verify_capture_out_with_icmp_errors(capture)
 
     def test_ping_out_interface_from_outside(self):
         self.verify_capture_out_with_icmp_errors(capture)
 
     def test_ping_out_interface_from_outside(self):
-        """ NAT44EI ping out interface from outside network """
+        """NAT44EI ping out interface from outside network"""
 
         self.nat44_add_address(self.nat_addr)
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
 
         self.nat44_add_address(self.nat_addr)
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg0.sw_if_index,
-            flags=flags, is_add=1)
+            sw_if_index=self.pg0.sw_if_index, flags=flags, is_add=1
+        )
         self.vapi.nat44_ei_interface_add_del_feature(
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg1.sw_if_index,
-            is_add=1)
-
-        p = (Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac) /
-             IP(src=self.pg1.remote_ip4, dst=self.pg1.local_ip4) /
-             ICMP(id=self.icmp_id_out, type='echo-request'))
+            sw_if_index=self.pg1.sw_if_index, is_add=1
+        )
+
+        p = (
+            Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac)
+            / IP(src=self.pg1.remote_ip4, dst=self.pg1.local_ip4)
+            / ICMP(id=self.icmp_id_out, type="echo-request")
+        )
         pkts = [p]
         self.pg1.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
         pkts = [p]
         self.pg1.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
@@ -1188,26 +1245,29 @@ class TestNAT44EI(MethodHolder):
             self.assertEqual(packet[ICMP].id, self.icmp_id_in)
             self.assertEqual(packet[ICMP].type, 0)  # echo reply
         except:
             self.assertEqual(packet[ICMP].id, self.icmp_id_in)
             self.assertEqual(packet[ICMP].type, 0)  # echo reply
         except:
-            self.logger.error(ppp("Unexpected or invalid packet "
-                                  "(outside network):", packet))
+            self.logger.error(
+                ppp("Unexpected or invalid packet (outside network):", packet)
+            )
             raise
 
     def test_ping_internal_host_from_outside(self):
             raise
 
     def test_ping_internal_host_from_outside(self):
-        """ NAT44EI ping internal host from outside network """
+        """NAT44EI ping internal host from outside network"""
 
         self.nat44_add_static_mapping(self.pg0.remote_ip4, self.nat_addr)
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
 
         self.nat44_add_static_mapping(self.pg0.remote_ip4, self.nat_addr)
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg0.sw_if_index,
-            flags=flags, is_add=1)
+            sw_if_index=self.pg0.sw_if_index, flags=flags, is_add=1
+        )
         self.vapi.nat44_ei_interface_add_del_feature(
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg1.sw_if_index,
-            is_add=1)
+            sw_if_index=self.pg1.sw_if_index, is_add=1
+        )
 
         # out2in
 
         # out2in
-        pkt = (Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac) /
-               IP(src=self.pg1.remote_ip4, dst=self.nat_addr, ttl=64) /
-               ICMP(id=self.icmp_id_out, type='echo-request'))
+        pkt = (
+            Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac)
+            / IP(src=self.pg1.remote_ip4, dst=self.nat_addr, ttl=64)
+            / ICMP(id=self.icmp_id_out, type="echo-request")
+        )
         self.pg1.add_stream(pkt)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg1.add_stream(pkt)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -1216,9 +1276,11 @@ class TestNAT44EI(MethodHolder):
         self.assert_equal(capture[0][IP].proto, IP_PROTOS.icmp)
 
         # in2out
         self.assert_equal(capture[0][IP].proto, IP_PROTOS.icmp)
 
         # in2out
-        pkt = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-               IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4, ttl=64) /
-               ICMP(id=self.icmp_id_in, type='echo-reply'))
+        pkt = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4, ttl=64)
+            / ICMP(id=self.icmp_id_in, type="echo-reply")
+        )
         self.pg0.add_stream(pkt)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg0.add_stream(pkt)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -1227,25 +1289,27 @@ class TestNAT44EI(MethodHolder):
         self.assert_equal(capture[0][IP].proto, IP_PROTOS.icmp)
 
     def test_forwarding(self):
         self.assert_equal(capture[0][IP].proto, IP_PROTOS.icmp)
 
     def test_forwarding(self):
-        """ NAT44EI forwarding test """
+        """NAT44EI forwarding test"""
 
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
 
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg0.sw_if_index,
-            flags=flags, is_add=1)
+            sw_if_index=self.pg0.sw_if_index, flags=flags, is_add=1
+        )
         self.vapi.nat44_ei_interface_add_del_feature(
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg1.sw_if_index,
-            is_add=1)
+            sw_if_index=self.pg1.sw_if_index, is_add=1
+        )
         self.vapi.nat44_ei_forwarding_enable_disable(enable=1)
 
         real_ip = self.pg0.remote_ip4
         alias_ip = self.nat_addr
         flags = self.config_flags.NAT44_EI_ADDR_ONLY_MAPPING
         self.vapi.nat44_ei_add_del_static_mapping(
         self.vapi.nat44_ei_forwarding_enable_disable(enable=1)
 
         real_ip = self.pg0.remote_ip4
         alias_ip = self.nat_addr
         flags = self.config_flags.NAT44_EI_ADDR_ONLY_MAPPING
         self.vapi.nat44_ei_add_del_static_mapping(
-            is_add=1, local_ip_address=real_ip,
+            is_add=1,
+            local_ip_address=real_ip,
             external_ip_address=alias_ip,
             external_sw_if_index=0xFFFFFFFF,
             external_ip_address=alias_ip,
             external_sw_if_index=0xFFFFFFFF,
-            flags=flags)
+            flags=flags,
+        )
 
         try:
             # static mapping match
 
         try:
             # static mapping match
@@ -1269,9 +1333,9 @@ class TestNAT44EI(MethodHolder):
             host0 = self.pg0.remote_hosts[0]
             self.pg0.remote_hosts[0] = self.pg0.remote_hosts[1]
             try:
             host0 = self.pg0.remote_hosts[0]
             self.pg0.remote_hosts[0] = self.pg0.remote_hosts[1]
             try:
-                pkts = self.create_stream_out(self.pg1,
-                                              dst_ip=self.pg0.remote_ip4,
-                                              use_inside_ports=True)
+                pkts = self.create_stream_out(
+                    self.pg1, dst_ip=self.pg0.remote_ip4, use_inside_ports=True
+                )
                 self.pg1.add_stream(pkts)
                 self.pg_enable_capture(self.pg_interfaces)
                 self.pg_start()
                 self.pg1.add_stream(pkts)
                 self.pg_enable_capture(self.pg_interfaces)
                 self.pg_start()
@@ -1283,8 +1347,9 @@ class TestNAT44EI(MethodHolder):
                 self.pg_enable_capture(self.pg_interfaces)
                 self.pg_start()
                 capture = self.pg1.get_capture(len(pkts))
                 self.pg_enable_capture(self.pg_interfaces)
                 self.pg_start()
                 capture = self.pg1.get_capture(len(pkts))
-                self.verify_capture_out(capture, nat_ip=self.pg0.remote_ip4,
-                                        same_port=True)
+                self.verify_capture_out(
+                    capture, nat_ip=self.pg0.remote_ip4, same_port=True
+                )
             finally:
                 self.pg0.remote_hosts[0] = host0
 
             finally:
                 self.pg0.remote_hosts[0] = host0
 
@@ -1296,10 +1361,11 @@ class TestNAT44EI(MethodHolder):
                 local_ip_address=real_ip,
                 external_ip_address=alias_ip,
                 external_sw_if_index=0xFFFFFFFF,
                 local_ip_address=real_ip,
                 external_ip_address=alias_ip,
                 external_sw_if_index=0xFFFFFFFF,
-                flags=flags)
+                flags=flags,
+            )
 
     def test_static_in(self):
 
     def test_static_in(self):
-        """ NAT44EI 1:1 NAT initialized from inside network """
+        """NAT44EI 1:1 NAT initialized from inside network"""
 
         nat_ip = "10.0.0.10"
         self.tcp_port_out = 6303
 
         nat_ip = "10.0.0.10"
         self.tcp_port_out = 6303
@@ -1309,14 +1375,14 @@ class TestNAT44EI(MethodHolder):
         self.nat44_add_static_mapping(self.pg0.remote_ip4, nat_ip)
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
         self.nat44_add_static_mapping(self.pg0.remote_ip4, nat_ip)
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg0.sw_if_index,
-            flags=flags, is_add=1)
+            sw_if_index=self.pg0.sw_if_index, flags=flags, is_add=1
+        )
         self.vapi.nat44_ei_interface_add_del_feature(
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg1.sw_if_index,
-            is_add=1)
+            sw_if_index=self.pg1.sw_if_index, is_add=1
+        )
         sm = self.vapi.nat44_ei_static_mapping_dump()
         self.assertEqual(len(sm), 1)
         sm = self.vapi.nat44_ei_static_mapping_dump()
         self.assertEqual(len(sm), 1)
-        self.assertEqual(sm[0].tag, '')
+        self.assertEqual(sm[0].tag, "")
         self.assertEqual(sm[0].protocol, 0)
         self.assertEqual(sm[0].local_port, 0)
         self.assertEqual(sm[0].external_port, 0)
         self.assertEqual(sm[0].protocol, 0)
         self.assertEqual(sm[0].local_port, 0)
         self.assertEqual(sm[0].external_port, 0)
@@ -1338,7 +1404,7 @@ class TestNAT44EI(MethodHolder):
         self.verify_capture_in(capture, self.pg0)
 
     def test_static_out(self):
         self.verify_capture_in(capture, self.pg0)
 
     def test_static_out(self):
-        """ NAT44EI 1:1 NAT initialized from outside network """
+        """NAT44EI 1:1 NAT initialized from outside network"""
 
         nat_ip = "10.0.0.20"
         self.tcp_port_out = 6303
 
         nat_ip = "10.0.0.20"
         self.tcp_port_out = 6303
@@ -1349,11 +1415,11 @@ class TestNAT44EI(MethodHolder):
         self.nat44_add_static_mapping(self.pg0.remote_ip4, nat_ip, tag=tag)
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
         self.nat44_add_static_mapping(self.pg0.remote_ip4, nat_ip, tag=tag)
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg0.sw_if_index,
-            flags=flags, is_add=1)
+            sw_if_index=self.pg0.sw_if_index, flags=flags, is_add=1
+        )
         self.vapi.nat44_ei_interface_add_del_feature(
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg1.sw_if_index,
-            is_add=1)
+            sw_if_index=self.pg1.sw_if_index, is_add=1
+        )
         sm = self.vapi.nat44_ei_static_mapping_dump()
         self.assertEqual(len(sm), 1)
         self.assertEqual(sm[0].tag, tag)
         sm = self.vapi.nat44_ei_static_mapping_dump()
         self.assertEqual(len(sm), 1)
         self.assertEqual(sm[0].tag, tag)
@@ -1375,29 +1441,41 @@ class TestNAT44EI(MethodHolder):
         self.verify_capture_out(capture, nat_ip, True)
 
     def test_static_with_port_in(self):
         self.verify_capture_out(capture, nat_ip, True)
 
     def test_static_with_port_in(self):
-        """ NAT44EI 1:1 NAPT initialized from inside network """
+        """NAT44EI 1:1 NAPT initialized from inside network"""
 
         self.tcp_port_out = 3606
         self.udp_port_out = 3607
         self.icmp_id_out = 3608
 
         self.nat44_add_address(self.nat_addr)
 
         self.tcp_port_out = 3606
         self.udp_port_out = 3607
         self.icmp_id_out = 3608
 
         self.nat44_add_address(self.nat_addr)
-        self.nat44_add_static_mapping(self.pg0.remote_ip4, self.nat_addr,
-                                      self.tcp_port_in, self.tcp_port_out,
-                                      proto=IP_PROTOS.tcp)
-        self.nat44_add_static_mapping(self.pg0.remote_ip4, self.nat_addr,
-                                      self.udp_port_in, self.udp_port_out,
-                                      proto=IP_PROTOS.udp)
-        self.nat44_add_static_mapping(self.pg0.remote_ip4, self.nat_addr,
-                                      self.icmp_id_in, self.icmp_id_out,
-                                      proto=IP_PROTOS.icmp)
+        self.nat44_add_static_mapping(
+            self.pg0.remote_ip4,
+            self.nat_addr,
+            self.tcp_port_in,
+            self.tcp_port_out,
+            proto=IP_PROTOS.tcp,
+        )
+        self.nat44_add_static_mapping(
+            self.pg0.remote_ip4,
+            self.nat_addr,
+            self.udp_port_in,
+            self.udp_port_out,
+            proto=IP_PROTOS.udp,
+        )
+        self.nat44_add_static_mapping(
+            self.pg0.remote_ip4,
+            self.nat_addr,
+            self.icmp_id_in,
+            self.icmp_id_out,
+            proto=IP_PROTOS.icmp,
+        )
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg0.sw_if_index,
-            flags=flags, is_add=1)
+            sw_if_index=self.pg0.sw_if_index, flags=flags, is_add=1
+        )
         self.vapi.nat44_ei_interface_add_del_feature(
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg1.sw_if_index,
-            is_add=1)
+            sw_if_index=self.pg1.sw_if_index, is_add=1
+        )
 
         # in2out
         pkts = self.create_stream_in(self.pg0, self.pg1)
 
         # in2out
         pkts = self.create_stream_in(self.pg0, self.pg1)
@@ -1416,29 +1494,41 @@ class TestNAT44EI(MethodHolder):
         self.verify_capture_in(capture, self.pg0)
 
     def test_static_with_port_out(self):
         self.verify_capture_in(capture, self.pg0)
 
     def test_static_with_port_out(self):
-        """ NAT44EI 1:1 NAPT initialized from outside network """
+        """NAT44EI 1:1 NAPT initialized from outside network"""
 
         self.tcp_port_out = 30606
         self.udp_port_out = 30607
         self.icmp_id_out = 30608
 
         self.nat44_add_address(self.nat_addr)
 
         self.tcp_port_out = 30606
         self.udp_port_out = 30607
         self.icmp_id_out = 30608
 
         self.nat44_add_address(self.nat_addr)
-        self.nat44_add_static_mapping(self.pg0.remote_ip4, self.nat_addr,
-                                      self.tcp_port_in, self.tcp_port_out,
-                                      proto=IP_PROTOS.tcp)
-        self.nat44_add_static_mapping(self.pg0.remote_ip4, self.nat_addr,
-                                      self.udp_port_in, self.udp_port_out,
-                                      proto=IP_PROTOS.udp)
-        self.nat44_add_static_mapping(self.pg0.remote_ip4, self.nat_addr,
-                                      self.icmp_id_in, self.icmp_id_out,
-                                      proto=IP_PROTOS.icmp)
+        self.nat44_add_static_mapping(
+            self.pg0.remote_ip4,
+            self.nat_addr,
+            self.tcp_port_in,
+            self.tcp_port_out,
+            proto=IP_PROTOS.tcp,
+        )
+        self.nat44_add_static_mapping(
+            self.pg0.remote_ip4,
+            self.nat_addr,
+            self.udp_port_in,
+            self.udp_port_out,
+            proto=IP_PROTOS.udp,
+        )
+        self.nat44_add_static_mapping(
+            self.pg0.remote_ip4,
+            self.nat_addr,
+            self.icmp_id_in,
+            self.icmp_id_out,
+            proto=IP_PROTOS.icmp,
+        )
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg0.sw_if_index,
-            flags=flags, is_add=1)
+            sw_if_index=self.pg0.sw_if_index, flags=flags, is_add=1
+        )
         self.vapi.nat44_ei_interface_add_del_feature(
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg1.sw_if_index,
-            is_add=1)
+            sw_if_index=self.pg1.sw_if_index, is_add=1
+        )
 
         # out2in
         pkts = self.create_stream_out(self.pg1)
 
         # out2in
         pkts = self.create_stream_out(self.pg1)
@@ -1457,7 +1547,7 @@ class TestNAT44EI(MethodHolder):
         self.verify_capture_out(capture)
 
     def test_static_vrf_aware(self):
         self.verify_capture_out(capture)
 
     def test_static_vrf_aware(self):
-        """ NAT44EI 1:1 NAT VRF awareness """
+        """NAT44EI 1:1 NAT VRF awareness"""
 
         nat_ip1 = "10.0.0.30"
         nat_ip2 = "10.0.0.40"
 
         nat_ip1 = "10.0.0.30"
         nat_ip2 = "10.0.0.40"
@@ -1465,20 +1555,18 @@ class TestNAT44EI(MethodHolder):
         self.udp_port_out = 6304
         self.icmp_id_out = 6305
 
         self.udp_port_out = 6304
         self.icmp_id_out = 6305
 
-        self.nat44_add_static_mapping(self.pg4.remote_ip4, nat_ip1,
-                                      vrf_id=10)
-        self.nat44_add_static_mapping(self.pg0.remote_ip4, nat_ip2,
-                                      vrf_id=10)
+        self.nat44_add_static_mapping(self.pg4.remote_ip4, nat_ip1, vrf_id=10)
+        self.nat44_add_static_mapping(self.pg0.remote_ip4, nat_ip2, vrf_id=10)
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg3.sw_if_index,
-            is_add=1)
+            sw_if_index=self.pg3.sw_if_index, is_add=1
+        )
         self.vapi.nat44_ei_interface_add_del_feature(
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg0.sw_if_index,
-            flags=flags, is_add=1)
+            sw_if_index=self.pg0.sw_if_index, flags=flags, is_add=1
+        )
         self.vapi.nat44_ei_interface_add_del_feature(
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg4.sw_if_index,
-            flags=flags, is_add=1)
+            sw_if_index=self.pg4.sw_if_index, flags=flags, is_add=1
+        )
 
         # inside interface VRF match NAT44EI static mapping VRF
         pkts = self.create_stream_in(self.pg4, self.pg3)
 
         # inside interface VRF match NAT44EI static mapping VRF
         pkts = self.create_stream_in(self.pg4, self.pg3)
@@ -1497,7 +1585,7 @@ class TestNAT44EI(MethodHolder):
         self.pg3.assert_nothing_captured()
 
     def test_dynamic_to_static(self):
         self.pg3.assert_nothing_captured()
 
     def test_dynamic_to_static(self):
-        """ NAT44EI Switch from dynamic translation to 1:1NAT """
+        """NAT44EI Switch from dynamic translation to 1:1NAT"""
         nat_ip = "10.0.0.10"
         self.tcp_port_out = 6303
         self.udp_port_out = 6304
         nat_ip = "10.0.0.10"
         self.tcp_port_out = 6303
         self.udp_port_out = 6304
@@ -1506,11 +1594,11 @@ class TestNAT44EI(MethodHolder):
         self.nat44_add_address(self.nat_addr)
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
         self.nat44_add_address(self.nat_addr)
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg0.sw_if_index,
-            flags=flags, is_add=1)
+            sw_if_index=self.pg0.sw_if_index, flags=flags, is_add=1
+        )
         self.vapi.nat44_ei_interface_add_del_feature(
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg1.sw_if_index,
-            is_add=1)
+            sw_if_index=self.pg1.sw_if_index, is_add=1
+        )
 
         # dynamic
         pkts = self.create_stream_in(self.pg0, self.pg1)
 
         # dynamic
         pkts = self.create_stream_in(self.pg0, self.pg1)
@@ -1532,22 +1620,27 @@ class TestNAT44EI(MethodHolder):
         self.verify_capture_out(capture, nat_ip, True)
 
     def test_identity_nat(self):
         self.verify_capture_out(capture, nat_ip, True)
 
     def test_identity_nat(self):
-        """ NAT44EI Identity NAT """
+        """NAT44EI Identity NAT"""
         flags = self.config_flags.NAT44_EI_ADDR_ONLY_MAPPING
         self.vapi.nat44_ei_add_del_identity_mapping(
         flags = self.config_flags.NAT44_EI_ADDR_ONLY_MAPPING
         self.vapi.nat44_ei_add_del_identity_mapping(
-            ip_address=self.pg0.remote_ip4, sw_if_index=0xFFFFFFFF,
-            flags=flags, is_add=1)
+            ip_address=self.pg0.remote_ip4,
+            sw_if_index=0xFFFFFFFF,
+            flags=flags,
+            is_add=1,
+        )
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg0.sw_if_index,
-            flags=flags, is_add=1)
+            sw_if_index=self.pg0.sw_if_index, flags=flags, is_add=1
+        )
         self.vapi.nat44_ei_interface_add_del_feature(
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg1.sw_if_index,
-            is_add=1)
-
-        p = (Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac) /
-             IP(src=self.pg1.remote_ip4, dst=self.pg0.remote_ip4) /
-             TCP(sport=12345, dport=56789))
+            sw_if_index=self.pg1.sw_if_index, is_add=1
+        )
+
+        p = (
+            Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
+            / IP(src=self.pg1.remote_ip4, dst=self.pg0.remote_ip4)
+            / TCP(sport=12345, dport=56789)
+        )
         self.pg1.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg1.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -1569,26 +1662,29 @@ class TestNAT44EI(MethodHolder):
         self.assertEqual(len(sessions), 0)
         flags = self.config_flags.NAT44_EI_ADDR_ONLY_MAPPING
         self.vapi.nat44_ei_add_del_identity_mapping(
         self.assertEqual(len(sessions), 0)
         flags = self.config_flags.NAT44_EI_ADDR_ONLY_MAPPING
         self.vapi.nat44_ei_add_del_identity_mapping(
-            ip_address=self.pg0.remote_ip4, sw_if_index=0xFFFFFFFF,
-            flags=flags, vrf_id=1, is_add=1)
+            ip_address=self.pg0.remote_ip4,
+            sw_if_index=0xFFFFFFFF,
+            flags=flags,
+            vrf_id=1,
+            is_add=1,
+        )
         identity_mappings = self.vapi.nat44_ei_identity_mapping_dump()
         self.assertEqual(len(identity_mappings), 2)
 
     def test_multiple_inside_interfaces(self):
         identity_mappings = self.vapi.nat44_ei_identity_mapping_dump()
         self.assertEqual(len(identity_mappings), 2)
 
     def test_multiple_inside_interfaces(self):
-        """ NAT44EI multiple non-overlapping address space inside interfaces
-        """
+        """NAT44EI multiple non-overlapping address space inside interfaces"""
 
         self.nat44_add_address(self.nat_addr)
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
 
         self.nat44_add_address(self.nat_addr)
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg0.sw_if_index,
-            flags=flags, is_add=1)
+            sw_if_index=self.pg0.sw_if_index, flags=flags, is_add=1
+        )
         self.vapi.nat44_ei_interface_add_del_feature(
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg1.sw_if_index,
-            flags=flags, is_add=1)
+            sw_if_index=self.pg1.sw_if_index, flags=flags, is_add=1
+        )
         self.vapi.nat44_ei_interface_add_del_feature(
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg3.sw_if_index,
-            is_add=1)
+            sw_if_index=self.pg3.sw_if_index, is_add=1
+        )
 
         # between two NAT44EI inside interfaces (no translation)
         pkts = self.create_stream_in(self.pg0, self.pg1)
 
         # between two NAT44EI inside interfaces (no translation)
         pkts = self.create_stream_in(self.pg0, self.pg1)
@@ -1639,26 +1735,24 @@ class TestNAT44EI(MethodHolder):
         self.verify_capture_in(capture, self.pg1)
 
     def test_inside_overlapping_interfaces(self):
         self.verify_capture_in(capture, self.pg1)
 
     def test_inside_overlapping_interfaces(self):
-        """ NAT44EI multiple inside interfaces with overlapping address space
-        """
+        """NAT44EI multiple inside interfaces with overlapping address space"""
 
         static_nat_ip = "10.0.0.10"
         self.nat44_add_address(self.nat_addr)
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
 
         static_nat_ip = "10.0.0.10"
         self.nat44_add_address(self.nat_addr)
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg3.sw_if_index,
-            is_add=1)
+            sw_if_index=self.pg3.sw_if_index, is_add=1
+        )
         self.vapi.nat44_ei_interface_add_del_feature(
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg4.sw_if_index,
-            flags=flags, is_add=1)
+            sw_if_index=self.pg4.sw_if_index, flags=flags, is_add=1
+        )
         self.vapi.nat44_ei_interface_add_del_feature(
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg5.sw_if_index,
-            flags=flags, is_add=1)
+            sw_if_index=self.pg5.sw_if_index, flags=flags, is_add=1
+        )
         self.vapi.nat44_ei_interface_add_del_feature(
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg6.sw_if_index,
-            flags=flags, is_add=1)
-        self.nat44_add_static_mapping(self.pg6.remote_ip4, static_nat_ip,
-                                      vrf_id=20)
+            sw_if_index=self.pg6.sw_if_index, flags=flags, is_add=1
+        )
+        self.nat44_add_static_mapping(self.pg6.remote_ip4, static_nat_ip, vrf_id=20)
 
         # between NAT44EI inside interfaces with same VRF (no translation)
         pkts = self.create_stream_in(self.pg4, self.pg5)
 
         # between NAT44EI inside interfaces with same VRF (no translation)
         pkts = self.create_stream_in(self.pg4, self.pg5)
@@ -1669,9 +1763,11 @@ class TestNAT44EI(MethodHolder):
         self.verify_capture_no_translation(capture, self.pg4, self.pg5)
 
         # between NAT44EI inside interfaces with different VRF (hairpinning)
         self.verify_capture_no_translation(capture, self.pg4, self.pg5)
 
         # between NAT44EI inside interfaces with different VRF (hairpinning)
-        p = (Ether(src=self.pg4.remote_mac, dst=self.pg4.local_mac) /
-             IP(src=self.pg4.remote_ip4, dst=static_nat_ip) /
-             TCP(sport=1234, dport=5678))
+        p = (
+            Ether(src=self.pg4.remote_mac, dst=self.pg4.local_mac)
+            / IP(src=self.pg4.remote_ip4, dst=static_nat_ip)
+            / TCP(sport=1234, dport=5678)
+        )
         self.pg4.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg4.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -1723,16 +1819,12 @@ class TestNAT44EI(MethodHolder):
         # pg5 session dump
         addresses = self.vapi.nat44_ei_address_dump()
         self.assertEqual(len(addresses), 1)
         # pg5 session dump
         addresses = self.vapi.nat44_ei_address_dump()
         self.assertEqual(len(addresses), 1)
-        sessions = self.vapi.nat44_ei_user_session_dump(
-            self.pg5.remote_ip4, 10)
+        sessions = self.vapi.nat44_ei_user_session_dump(self.pg5.remote_ip4, 10)
         self.assertEqual(len(sessions), 3)
         for session in sessions:
         self.assertEqual(len(sessions), 3)
         for session in sessions:
-            self.assertFalse(session.flags &
-                             self.config_flags.NAT44_EI_STATIC_MAPPING)
-            self.assertEqual(str(session.inside_ip_address),
-                             self.pg5.remote_ip4)
-            self.assertEqual(session.outside_ip_address,
-                             addresses[0].ip_address)
+            self.assertFalse(session.flags & self.config_flags.NAT44_EI_STATIC_MAPPING)
+            self.assertEqual(str(session.inside_ip_address), self.pg5.remote_ip4)
+            self.assertEqual(session.outside_ip_address, addresses[0].ip_address)
         self.assertEqual(sessions[0].protocol, IP_PROTOS.tcp)
         self.assertEqual(sessions[1].protocol, IP_PROTOS.udp)
         self.assertEqual(sessions[2].protocol, IP_PROTOS.icmp)
         self.assertEqual(sessions[0].protocol, IP_PROTOS.tcp)
         self.assertEqual(sessions[1].protocol, IP_PROTOS.udp)
         self.assertEqual(sessions[2].protocol, IP_PROTOS.icmp)
@@ -1765,44 +1857,38 @@ class TestNAT44EI(MethodHolder):
         addresses = self.vapi.nat44_ei_address_dump()
         self.assertEqual(len(addresses), 1)
         for user in users:
         addresses = self.vapi.nat44_ei_address_dump()
         self.assertEqual(len(addresses), 1)
         for user in users:
-            sessions = self.vapi.nat44_ei_user_session_dump(user.ip_address,
-                                                            user.vrf_id)
+            sessions = self.vapi.nat44_ei_user_session_dump(
+                user.ip_address, user.vrf_id
+            )
             for session in sessions:
                 self.assertEqual(user.ip_address, session.inside_ip_address)
                 self.assertTrue(session.total_bytes > session.total_pkts > 0)
             for session in sessions:
                 self.assertEqual(user.ip_address, session.inside_ip_address)
                 self.assertTrue(session.total_bytes > session.total_pkts > 0)
-                self.assertTrue(session.protocol in
-                                [IP_PROTOS.tcp, IP_PROTOS.udp,
-                                 IP_PROTOS.icmp])
+                self.assertTrue(
+                    session.protocol in [IP_PROTOS.tcp, IP_PROTOS.udp, IP_PROTOS.icmp]
+                )
 
         # pg4 session dump
 
         # pg4 session dump
-        sessions = self.vapi.nat44_ei_user_session_dump(
-            self.pg4.remote_ip4, 10)
+        sessions = self.vapi.nat44_ei_user_session_dump(self.pg4.remote_ip4, 10)
         self.assertGreaterEqual(len(sessions), 4)
         for session in sessions:
         self.assertGreaterEqual(len(sessions), 4)
         for session in sessions:
-            self.assertFalse(
-                session.flags & self.config_flags.NAT44_EI_STATIC_MAPPING)
-            self.assertEqual(str(session.inside_ip_address),
-                             self.pg4.remote_ip4)
-            self.assertEqual(session.outside_ip_address,
-                             addresses[0].ip_address)
+            self.assertFalse(session.flags & self.config_flags.NAT44_EI_STATIC_MAPPING)
+            self.assertEqual(str(session.inside_ip_address), self.pg4.remote_ip4)
+            self.assertEqual(session.outside_ip_address, addresses[0].ip_address)
 
         # pg6 session dump
 
         # pg6 session dump
-        sessions = self.vapi.nat44_ei_user_session_dump(
-            self.pg6.remote_ip4, 20)
+        sessions = self.vapi.nat44_ei_user_session_dump(self.pg6.remote_ip4, 20)
         self.assertGreaterEqual(len(sessions), 3)
         for session in sessions:
         self.assertGreaterEqual(len(sessions), 3)
         for session in sessions:
+            self.assertTrue(session.flags & self.config_flags.NAT44_EI_STATIC_MAPPING)
+            self.assertEqual(str(session.inside_ip_address), self.pg6.remote_ip4)
+            self.assertEqual(str(session.outside_ip_address), static_nat_ip)
             self.assertTrue(
             self.assertTrue(
-                session.flags & self.config_flags.NAT44_EI_STATIC_MAPPING)
-            self.assertEqual(str(session.inside_ip_address),
-                             self.pg6.remote_ip4)
-            self.assertEqual(str(session.outside_ip_address),
-                             static_nat_ip)
-            self.assertTrue(session.inside_port in
-                            [self.tcp_port_in, self.udp_port_in,
-                             self.icmp_id_in])
+                session.inside_port
+                in [self.tcp_port_in, self.udp_port_in, self.icmp_id_in]
+            )
 
     def test_hairpinning(self):
 
     def test_hairpinning(self):
-        """ NAT44EI hairpinning - 1:1 NAPT """
+        """NAT44EI hairpinning - 1:1 NAPT"""
 
         host = self.pg0.remote_hosts[0]
         server = self.pg0.remote_hosts[1]
 
         host = self.pg0.remote_hosts[0]
         server = self.pg0.remote_hosts[1]
@@ -1814,22 +1900,28 @@ class TestNAT44EI(MethodHolder):
         self.nat44_add_address(self.nat_addr)
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
         self.nat44_add_address(self.nat_addr)
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg0.sw_if_index,
-            flags=flags, is_add=1)
+            sw_if_index=self.pg0.sw_if_index, flags=flags, is_add=1
+        )
         self.vapi.nat44_ei_interface_add_del_feature(
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg1.sw_if_index,
-            is_add=1)
+            sw_if_index=self.pg1.sw_if_index, is_add=1
+        )
 
         # add static mapping for server
 
         # add static mapping for server
-        self.nat44_add_static_mapping(server.ip4, self.nat_addr,
-                                      server_in_port, server_out_port,
-                                      proto=IP_PROTOS.tcp)
-
-        cnt = self.statistics['/nat44-ei/hairpinning']
+        self.nat44_add_static_mapping(
+            server.ip4,
+            self.nat_addr,
+            server_in_port,
+            server_out_port,
+            proto=IP_PROTOS.tcp,
+        )
+
+        cnt = self.statistics["/nat44-ei/hairpinning"]
         # send packet from host to server
         # send packet from host to server
-        p = (Ether(src=host.mac, dst=self.pg0.local_mac) /
-             IP(src=host.ip4, dst=self.nat_addr) /
-             TCP(sport=host_in_port, dport=server_out_port))
+        p = (
+            Ether(src=host.mac, dst=self.pg0.local_mac)
+            / IP(src=host.ip4, dst=self.nat_addr)
+            / TCP(sport=host_in_port, dport=server_out_port)
+        )
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -1848,14 +1940,16 @@ class TestNAT44EI(MethodHolder):
             self.logger.error(ppp("Unexpected or invalid packet:", p))
             raise
 
             self.logger.error(ppp("Unexpected or invalid packet:", p))
             raise
 
-        after = self.statistics['/nat44-ei/hairpinning']
+        after = self.statistics["/nat44-ei/hairpinning"]
         if_idx = self.pg0.sw_if_index
         self.assertEqual(after[:, if_idx].sum() - cnt[:, if_idx].sum(), 1)
 
         # send reply from server to host
         if_idx = self.pg0.sw_if_index
         self.assertEqual(after[:, if_idx].sum() - cnt[:, if_idx].sum(), 1)
 
         # send reply from server to host
-        p = (Ether(src=server.mac, dst=self.pg0.local_mac) /
-             IP(src=server.ip4, dst=self.nat_addr) /
-             TCP(sport=server_in_port, dport=host_out_port))
+        p = (
+            Ether(src=server.mac, dst=self.pg0.local_mac)
+            / IP(src=server.ip4, dst=self.nat_addr)
+            / TCP(sport=server_in_port, dport=host_out_port)
+        )
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -1873,13 +1967,15 @@ class TestNAT44EI(MethodHolder):
             self.logger.error(ppp("Unexpected or invalid packet:", p))
             raise
 
             self.logger.error(ppp("Unexpected or invalid packet:", p))
             raise
 
-        after = self.statistics['/nat44-ei/hairpinning']
+        after = self.statistics["/nat44-ei/hairpinning"]
         if_idx = self.pg0.sw_if_index
         if_idx = self.pg0.sw_if_index
-        self.assertEqual(after[:, if_idx].sum() - cnt[:, if_idx].sum(),
-                         2+(1 if self.vpp_worker_count > 0 else 0))
+        self.assertEqual(
+            after[:, if_idx].sum() - cnt[:, if_idx].sum(),
+            2 + (1 if self.vpp_worker_count > 0 else 0),
+        )
 
     def test_hairpinning2(self):
 
     def test_hairpinning2(self):
-        """ NAT44EI hairpinning - 1:1 NAT"""
+        """NAT44EI hairpinning - 1:1 NAT"""
 
         server1_nat_ip = "10.0.0.10"
         server2_nat_ip = "10.0.0.11"
 
         server1_nat_ip = "10.0.0.10"
         server2_nat_ip = "10.0.0.11"
@@ -1892,11 +1988,11 @@ class TestNAT44EI(MethodHolder):
         self.nat44_add_address(self.nat_addr)
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
         self.nat44_add_address(self.nat_addr)
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg0.sw_if_index,
-            flags=flags, is_add=1)
+            sw_if_index=self.pg0.sw_if_index, flags=flags, is_add=1
+        )
         self.vapi.nat44_ei_interface_add_del_feature(
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg1.sw_if_index,
-            is_add=1)
+            sw_if_index=self.pg1.sw_if_index, is_add=1
+        )
 
         # add static mapping for servers
         self.nat44_add_static_mapping(server1.ip4, server1_nat_ip)
 
         # add static mapping for servers
         self.nat44_add_static_mapping(server1.ip4, server1_nat_ip)
@@ -1904,17 +2000,23 @@ class TestNAT44EI(MethodHolder):
 
         # host to server1
         pkts = []
 
         # host to server1
         pkts = []
-        p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-             IP(src=host.ip4, dst=server1_nat_ip) /
-             TCP(sport=self.tcp_port_in, dport=server_tcp_port))
+        p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(src=host.ip4, dst=server1_nat_ip)
+            / TCP(sport=self.tcp_port_in, dport=server_tcp_port)
+        )
         pkts.append(p)
         pkts.append(p)
-        p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-             IP(src=host.ip4, dst=server1_nat_ip) /
-             UDP(sport=self.udp_port_in, dport=server_udp_port))
+        p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(src=host.ip4, dst=server1_nat_ip)
+            / UDP(sport=self.udp_port_in, dport=server_udp_port)
+        )
         pkts.append(p)
         pkts.append(p)
-        p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-             IP(src=host.ip4, dst=server1_nat_ip) /
-             ICMP(id=self.icmp_id_in, type='echo-request'))
+        p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(src=host.ip4, dst=server1_nat_ip)
+            / ICMP(id=self.icmp_id_in, type="echo-request")
+        )
         pkts.append(p)
         self.pg0.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
         pkts.append(p)
         self.pg0.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
@@ -1942,17 +2044,23 @@ class TestNAT44EI(MethodHolder):
 
         # server1 to host
         pkts = []
 
         # server1 to host
         pkts = []
-        p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-             IP(src=server1.ip4, dst=self.nat_addr) /
-             TCP(sport=server_tcp_port, dport=self.tcp_port_out))
+        p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(src=server1.ip4, dst=self.nat_addr)
+            / TCP(sport=server_tcp_port, dport=self.tcp_port_out)
+        )
         pkts.append(p)
         pkts.append(p)
-        p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-             IP(src=server1.ip4, dst=self.nat_addr) /
-             UDP(sport=server_udp_port, dport=self.udp_port_out))
+        p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(src=server1.ip4, dst=self.nat_addr)
+            / UDP(sport=server_udp_port, dport=self.udp_port_out)
+        )
         pkts.append(p)
         pkts.append(p)
-        p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-             IP(src=server1.ip4, dst=self.nat_addr) /
-             ICMP(id=self.icmp_id_out, type='echo-reply'))
+        p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(src=server1.ip4, dst=self.nat_addr)
+            / ICMP(id=self.icmp_id_out, type="echo-reply")
+        )
         pkts.append(p)
         self.pg0.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
         pkts.append(p)
         self.pg0.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
@@ -1977,17 +2085,23 @@ class TestNAT44EI(MethodHolder):
 
         # server2 to server1
         pkts = []
 
         # server2 to server1
         pkts = []
-        p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-             IP(src=server2.ip4, dst=server1_nat_ip) /
-             TCP(sport=self.tcp_port_in, dport=server_tcp_port))
+        p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(src=server2.ip4, dst=server1_nat_ip)
+            / TCP(sport=self.tcp_port_in, dport=server_tcp_port)
+        )
         pkts.append(p)
         pkts.append(p)
-        p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-             IP(src=server2.ip4, dst=server1_nat_ip) /
-             UDP(sport=self.udp_port_in, dport=server_udp_port))
+        p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(src=server2.ip4, dst=server1_nat_ip)
+            / UDP(sport=self.udp_port_in, dport=server_udp_port)
+        )
         pkts.append(p)
         pkts.append(p)
-        p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-             IP(src=server2.ip4, dst=server1_nat_ip) /
-             ICMP(id=self.icmp_id_in, type='echo-request'))
+        p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(src=server2.ip4, dst=server1_nat_ip)
+            / ICMP(id=self.icmp_id_in, type="echo-request")
+        )
         pkts.append(p)
         self.pg0.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
         pkts.append(p)
         self.pg0.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
@@ -2015,17 +2129,23 @@ class TestNAT44EI(MethodHolder):
 
         # server1 to server2
         pkts = []
 
         # server1 to server2
         pkts = []
-        p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-             IP(src=server1.ip4, dst=server2_nat_ip) /
-             TCP(sport=server_tcp_port, dport=self.tcp_port_out))
+        p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(src=server1.ip4, dst=server2_nat_ip)
+            / TCP(sport=server_tcp_port, dport=self.tcp_port_out)
+        )
         pkts.append(p)
         pkts.append(p)
-        p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-             IP(src=server1.ip4, dst=server2_nat_ip) /
-             UDP(sport=server_udp_port, dport=self.udp_port_out))
+        p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(src=server1.ip4, dst=server2_nat_ip)
+            / UDP(sport=server_udp_port, dport=self.udp_port_out)
+        )
         pkts.append(p)
         pkts.append(p)
-        p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-             IP(src=server1.ip4, dst=server2_nat_ip) /
-             ICMP(id=self.icmp_id_out, type='echo-reply'))
+        p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(src=server1.ip4, dst=server2_nat_ip)
+            / ICMP(id=self.icmp_id_out, type="echo-reply")
+        )
         pkts.append(p)
         self.pg0.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
         pkts.append(p)
         self.pg0.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
@@ -2049,7 +2169,7 @@ class TestNAT44EI(MethodHolder):
                 raise
 
     def test_hairpinning_avoid_inf_loop(self):
                 raise
 
     def test_hairpinning_avoid_inf_loop(self):
-        """ NAT44EI hairpinning - 1:1 NAPT avoid infinite loop """
+        """NAT44EI hairpinning - 1:1 NAPT avoid infinite loop"""
 
         host = self.pg0.remote_hosts[0]
         server = self.pg0.remote_hosts[1]
 
         host = self.pg0.remote_hosts[0]
         server = self.pg0.remote_hosts[1]
@@ -2061,34 +2181,42 @@ class TestNAT44EI(MethodHolder):
         self.nat44_add_address(self.nat_addr)
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
         self.nat44_add_address(self.nat_addr)
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg0.sw_if_index,
-            flags=flags, is_add=1)
+            sw_if_index=self.pg0.sw_if_index, flags=flags, is_add=1
+        )
         self.vapi.nat44_ei_interface_add_del_feature(
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg1.sw_if_index,
-            is_add=1)
+            sw_if_index=self.pg1.sw_if_index, is_add=1
+        )
 
         # add static mapping for server
 
         # add static mapping for server
-        self.nat44_add_static_mapping(server.ip4, self.nat_addr,
-                                      server_in_port, server_out_port,
-                                      proto=IP_PROTOS.tcp)
+        self.nat44_add_static_mapping(
+            server.ip4,
+            self.nat_addr,
+            server_in_port,
+            server_out_port,
+            proto=IP_PROTOS.tcp,
+        )
 
         # add another static mapping that maps pg0.local_ip4 address to itself
         self.nat44_add_static_mapping(self.pg0.local_ip4, self.pg0.local_ip4)
 
         # send packet from host to VPP (the packet should get dropped)
 
         # add another static mapping that maps pg0.local_ip4 address to itself
         self.nat44_add_static_mapping(self.pg0.local_ip4, self.pg0.local_ip4)
 
         # send packet from host to VPP (the packet should get dropped)
-        p = (Ether(src=host.mac, dst=self.pg0.local_mac) /
-             IP(src=host.ip4, dst=self.pg0.local_ip4) /
-             TCP(sport=host_in_port, dport=server_out_port))
+        p = (
+            Ether(src=host.mac, dst=self.pg0.local_mac)
+            / IP(src=host.ip4, dst=self.pg0.local_ip4)
+            / TCP(sport=host_in_port, dport=server_out_port)
+        )
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         # Here VPP used to crash due to an infinite loop
 
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         # Here VPP used to crash due to an infinite loop
 
-        cnt = self.statistics['/nat44-ei/hairpinning']
+        cnt = self.statistics["/nat44-ei/hairpinning"]
         # send packet from host to server
         # send packet from host to server
-        p = (Ether(src=host.mac, dst=self.pg0.local_mac) /
-             IP(src=host.ip4, dst=self.nat_addr) /
-             TCP(sport=host_in_port, dport=server_out_port))
+        p = (
+            Ether(src=host.mac, dst=self.pg0.local_mac)
+            / IP(src=host.ip4, dst=self.nat_addr)
+            / TCP(sport=host_in_port, dport=server_out_port)
+        )
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -2107,14 +2235,16 @@ class TestNAT44EI(MethodHolder):
             self.logger.error(ppp("Unexpected or invalid packet:", p))
             raise
 
             self.logger.error(ppp("Unexpected or invalid packet:", p))
             raise
 
-        after = self.statistics['/nat44-ei/hairpinning']
+        after = self.statistics["/nat44-ei/hairpinning"]
         if_idx = self.pg0.sw_if_index
         self.assertEqual(after[:, if_idx].sum() - cnt[:, if_idx].sum(), 1)
 
         # send reply from server to host
         if_idx = self.pg0.sw_if_index
         self.assertEqual(after[:, if_idx].sum() - cnt[:, if_idx].sum(), 1)
 
         # send reply from server to host
-        p = (Ether(src=server.mac, dst=self.pg0.local_mac) /
-             IP(src=server.ip4, dst=self.nat_addr) /
-             TCP(sport=server_in_port, dport=host_out_port))
+        p = (
+            Ether(src=server.mac, dst=self.pg0.local_mac)
+            / IP(src=server.ip4, dst=self.nat_addr)
+            / TCP(sport=server_in_port, dport=host_out_port)
+        )
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -2132,16 +2262,18 @@ class TestNAT44EI(MethodHolder):
             self.logger.error(ppp("Unexpected or invalid packet:", p))
             raise
 
             self.logger.error(ppp("Unexpected or invalid packet:", p))
             raise
 
-        after = self.statistics['/nat44-ei/hairpinning']
+        after = self.statistics["/nat44-ei/hairpinning"]
         if_idx = self.pg0.sw_if_index
         if_idx = self.pg0.sw_if_index
-        self.assertEqual(after[:, if_idx].sum() - cnt[:, if_idx].sum(),
-                         2+(1 if self.vpp_worker_count > 0 else 0))
+        self.assertEqual(
+            after[:, if_idx].sum() - cnt[:, if_idx].sum(),
+            2 + (1 if self.vpp_worker_count > 0 else 0),
+        )
 
     def test_interface_addr(self):
 
     def test_interface_addr(self):
-        """ NAT44EI acquire addresses from interface """
+        """NAT44EI acquire addresses from interface"""
         self.vapi.nat44_ei_add_del_interface_addr(
         self.vapi.nat44_ei_add_del_interface_addr(
-            is_add=1,
-            sw_if_index=self.pg7.sw_if_index)
+            is_add=1, sw_if_index=self.pg7.sw_if_index
+        )
 
         # no address in NAT pool
         addresses = self.vapi.nat44_ei_address_dump()
 
         # no address in NAT pool
         addresses = self.vapi.nat44_ei_address_dump()
@@ -2159,22 +2291,20 @@ class TestNAT44EI(MethodHolder):
         self.assertEqual(0, len(addresses))
 
     def test_interface_addr_static_mapping(self):
         self.assertEqual(0, len(addresses))
 
     def test_interface_addr_static_mapping(self):
-        """ NAT44EI Static mapping with addresses from interface """
+        """NAT44EI Static mapping with addresses from interface"""
         tag = "testTAG"
 
         self.vapi.nat44_ei_add_del_interface_addr(
         tag = "testTAG"
 
         self.vapi.nat44_ei_add_del_interface_addr(
-            is_add=1,
-            sw_if_index=self.pg7.sw_if_index)
+            is_add=1, sw_if_index=self.pg7.sw_if_index
+        )
         self.nat44_add_static_mapping(
         self.nat44_add_static_mapping(
-            '1.2.3.4',
-            external_sw_if_index=self.pg7.sw_if_index,
-            tag=tag)
+            "1.2.3.4", external_sw_if_index=self.pg7.sw_if_index, tag=tag
+        )
 
         # static mappings with external interface
         static_mappings = self.vapi.nat44_ei_static_mapping_dump()
         self.assertEqual(1, len(static_mappings))
 
         # static mappings with external interface
         static_mappings = self.vapi.nat44_ei_static_mapping_dump()
         self.assertEqual(1, len(static_mappings))
-        self.assertEqual(self.pg7.sw_if_index,
-                         static_mappings[0].external_sw_if_index)
+        self.assertEqual(self.pg7.sw_if_index, static_mappings[0].external_sw_if_index)
         self.assertEqual(static_mappings[0].tag, tag)
 
         # configure interface address and check static mappings
         self.assertEqual(static_mappings[0].tag, tag)
 
         # configure interface address and check static mappings
@@ -2184,8 +2314,7 @@ class TestNAT44EI(MethodHolder):
         resolved = False
         for sm in static_mappings:
             if sm.external_sw_if_index == 0xFFFFFFFF:
         resolved = False
         for sm in static_mappings:
             if sm.external_sw_if_index == 0xFFFFFFFF:
-                self.assertEqual(str(sm.external_ip_address),
-                                 self.pg7.local_ip4)
+                self.assertEqual(str(sm.external_ip_address), self.pg7.local_ip4)
                 self.assertEqual(sm.tag, tag)
                 resolved = True
         self.assertTrue(resolved)
                 self.assertEqual(sm.tag, tag)
                 resolved = True
         self.assertTrue(resolved)
@@ -2194,8 +2323,7 @@ class TestNAT44EI(MethodHolder):
         self.pg7.unconfig_ip4()
         static_mappings = self.vapi.nat44_ei_static_mapping_dump()
         self.assertEqual(1, len(static_mappings))
         self.pg7.unconfig_ip4()
         static_mappings = self.vapi.nat44_ei_static_mapping_dump()
         self.assertEqual(1, len(static_mappings))
-        self.assertEqual(self.pg7.sw_if_index,
-                         static_mappings[0].external_sw_if_index)
+        self.assertEqual(self.pg7.sw_if_index, static_mappings[0].external_sw_if_index)
         self.assertEqual(static_mappings[0].tag, tag)
 
         # configure interface address again and check static mappings
         self.assertEqual(static_mappings[0].tag, tag)
 
         # configure interface address again and check static mappings
@@ -2205,40 +2333,37 @@ class TestNAT44EI(MethodHolder):
         resolved = False
         for sm in static_mappings:
             if sm.external_sw_if_index == 0xFFFFFFFF:
         resolved = False
         for sm in static_mappings:
             if sm.external_sw_if_index == 0xFFFFFFFF:
-                self.assertEqual(str(sm.external_ip_address),
-                                 self.pg7.local_ip4)
+                self.assertEqual(str(sm.external_ip_address), self.pg7.local_ip4)
                 self.assertEqual(sm.tag, tag)
                 resolved = True
         self.assertTrue(resolved)
 
         # remove static mapping
         self.nat44_add_static_mapping(
                 self.assertEqual(sm.tag, tag)
                 resolved = True
         self.assertTrue(resolved)
 
         # remove static mapping
         self.nat44_add_static_mapping(
-            '1.2.3.4',
-            external_sw_if_index=self.pg7.sw_if_index,
-            tag=tag,
-            is_add=0)
+            "1.2.3.4", external_sw_if_index=self.pg7.sw_if_index, tag=tag, is_add=0
+        )
         static_mappings = self.vapi.nat44_ei_static_mapping_dump()
         self.assertEqual(0, len(static_mappings))
 
     def test_interface_addr_identity_nat(self):
         static_mappings = self.vapi.nat44_ei_static_mapping_dump()
         self.assertEqual(0, len(static_mappings))
 
     def test_interface_addr_identity_nat(self):
-        """ NAT44EI Identity NAT with addresses from interface """
+        """NAT44EI Identity NAT with addresses from interface"""
 
         port = 53053
         self.vapi.nat44_ei_add_del_interface_addr(
 
         port = 53053
         self.vapi.nat44_ei_add_del_interface_addr(
-            is_add=1,
-            sw_if_index=self.pg7.sw_if_index)
+            is_add=1, sw_if_index=self.pg7.sw_if_index
+        )
         self.vapi.nat44_ei_add_del_identity_mapping(
         self.vapi.nat44_ei_add_del_identity_mapping(
-            ip_address=b'0',
+            ip_address=b"0",
             sw_if_index=self.pg7.sw_if_index,
             port=port,
             protocol=IP_PROTOS.tcp,
             sw_if_index=self.pg7.sw_if_index,
             port=port,
             protocol=IP_PROTOS.tcp,
-            is_add=1)
+            is_add=1,
+        )
 
         # identity mappings with external interface
         identity_mappings = self.vapi.nat44_ei_identity_mapping_dump()
         self.assertEqual(1, len(identity_mappings))
 
         # identity mappings with external interface
         identity_mappings = self.vapi.nat44_ei_identity_mapping_dump()
         self.assertEqual(1, len(identity_mappings))
-        self.assertEqual(self.pg7.sw_if_index,
-                         identity_mappings[0].sw_if_index)
+        self.assertEqual(self.pg7.sw_if_index, identity_mappings[0].sw_if_index)
 
         # configure interface address and check identity mappings
         self.pg7.config_ip4()
 
         # configure interface address and check identity mappings
         self.pg7.config_ip4()
@@ -2247,8 +2372,9 @@ class TestNAT44EI(MethodHolder):
         self.assertEqual(2, len(identity_mappings))
         for sm in identity_mappings:
             if sm.sw_if_index == 0xFFFFFFFF:
         self.assertEqual(2, len(identity_mappings))
         for sm in identity_mappings:
             if sm.sw_if_index == 0xFFFFFFFF:
-                self.assertEqual(str(identity_mappings[0].ip_address),
-                                 self.pg7.local_ip4)
+                self.assertEqual(
+                    str(identity_mappings[0].ip_address), self.pg7.local_ip4
+                )
                 self.assertEqual(port, identity_mappings[0].port)
                 self.assertEqual(IP_PROTOS.tcp, identity_mappings[0].protocol)
                 resolved = True
                 self.assertEqual(port, identity_mappings[0].port)
                 self.assertEqual(IP_PROTOS.tcp, identity_mappings[0].protocol)
                 resolved = True
@@ -2258,11 +2384,10 @@ class TestNAT44EI(MethodHolder):
         self.pg7.unconfig_ip4()
         identity_mappings = self.vapi.nat44_ei_identity_mapping_dump()
         self.assertEqual(1, len(identity_mappings))
         self.pg7.unconfig_ip4()
         identity_mappings = self.vapi.nat44_ei_identity_mapping_dump()
         self.assertEqual(1, len(identity_mappings))
-        self.assertEqual(self.pg7.sw_if_index,
-                         identity_mappings[0].sw_if_index)
+        self.assertEqual(self.pg7.sw_if_index, identity_mappings[0].sw_if_index)
 
     def test_ipfix_nat44_sess(self):
 
     def test_ipfix_nat44_sess(self):
-        """ NAT44EI IPFIX logging NAT44EI session created/deleted """
+        """NAT44EI IPFIX logging NAT44EI session created/deleted"""
         self.ipfix_domain_id = 10
         self.ipfix_src_port = 20202
         collector_port = 30303
         self.ipfix_domain_id = 10
         self.ipfix_src_port = 20202
         collector_port = 30303
@@ -2270,19 +2395,21 @@ class TestNAT44EI(MethodHolder):
         self.nat44_add_address(self.nat_addr)
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
         self.nat44_add_address(self.nat_addr)
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg0.sw_if_index,
-            flags=flags, is_add=1)
+            sw_if_index=self.pg0.sw_if_index, flags=flags, is_add=1
+        )
         self.vapi.nat44_ei_interface_add_del_feature(
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg1.sw_if_index,
-            is_add=1)
-        self.vapi.set_ipfix_exporter(collector_address=self.pg3.remote_ip4,
-                                     src_address=self.pg3.local_ip4,
-                                     path_mtu=512,
-                                     template_interval=10,
-                                     collector_port=collector_port)
-        self.vapi.nat44_ei_ipfix_enable_disable(domain_id=self.ipfix_domain_id,
-                                                src_port=self.ipfix_src_port,
-                                                enable=1)
+            sw_if_index=self.pg1.sw_if_index, is_add=1
+        )
+        self.vapi.set_ipfix_exporter(
+            collector_address=self.pg3.remote_ip4,
+            src_address=self.pg3.local_ip4,
+            path_mtu=512,
+            template_interval=10,
+            collector_port=collector_port,
+        )
+        self.vapi.nat44_ei_ipfix_enable_disable(
+            domain_id=self.ipfix_domain_id, src_port=self.ipfix_src_port, enable=1
+        )
 
         pkts = self.create_stream_in(self.pg0, self.pg1)
         self.pg0.add_stream(pkts)
 
         pkts = self.create_stream_in(self.pg0, self.pg1)
         self.pg0.add_stream(pkts)
@@ -2301,8 +2428,7 @@ class TestNAT44EI(MethodHolder):
             self.assertEqual(p[IP].dst, self.pg3.remote_ip4)
             self.assertEqual(p[UDP].sport, self.ipfix_src_port)
             self.assertEqual(p[UDP].dport, collector_port)
             self.assertEqual(p[IP].dst, self.pg3.remote_ip4)
             self.assertEqual(p[UDP].sport, self.ipfix_src_port)
             self.assertEqual(p[UDP].dport, collector_port)
-            self.assertEqual(p[IPFIX].observationDomainID,
-                             self.ipfix_domain_id)
+            self.assertEqual(p[IPFIX].observationDomainID, self.ipfix_domain_id)
             if p.haslayer(Template):
                 ipfix.add_template(p.getlayer(Template))
         # verify events in data set
             if p.haslayer(Template):
                 ipfix.add_template(p.getlayer(Template))
         # verify events in data set
@@ -2312,25 +2438,29 @@ class TestNAT44EI(MethodHolder):
                 self.verify_ipfix_nat44_ses(data)
 
     def test_ipfix_addr_exhausted(self):
                 self.verify_ipfix_nat44_ses(data)
 
     def test_ipfix_addr_exhausted(self):
-        """ NAT44EI IPFIX logging NAT addresses exhausted """
+        """NAT44EI IPFIX logging NAT addresses exhausted"""
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg0.sw_if_index,
-            flags=flags, is_add=1)
+            sw_if_index=self.pg0.sw_if_index, flags=flags, is_add=1
+        )
         self.vapi.nat44_ei_interface_add_del_feature(
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg1.sw_if_index,
-            is_add=1)
-        self.vapi.set_ipfix_exporter(collector_address=self.pg3.remote_ip4,
-                                     src_address=self.pg3.local_ip4,
-                                     path_mtu=512,
-                                     template_interval=10)
-        self.vapi.nat44_ei_ipfix_enable_disable(domain_id=self.ipfix_domain_id,
-                                                src_port=self.ipfix_src_port,
-                                                enable=1)
-
-        p = (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-             IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4) /
-             TCP(sport=3025))
+            sw_if_index=self.pg1.sw_if_index, is_add=1
+        )
+        self.vapi.set_ipfix_exporter(
+            collector_address=self.pg3.remote_ip4,
+            src_address=self.pg3.local_ip4,
+            path_mtu=512,
+            template_interval=10,
+        )
+        self.vapi.nat44_ei_ipfix_enable_disable(
+            domain_id=self.ipfix_domain_id, src_port=self.ipfix_src_port, enable=1
+        )
+
+        p = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4)
+            / TCP(sport=3025)
+        )
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -2345,8 +2475,7 @@ class TestNAT44EI(MethodHolder):
             self.assertEqual(p[IP].dst, self.pg3.remote_ip4)
             self.assertEqual(p[UDP].sport, self.ipfix_src_port)
             self.assertEqual(p[UDP].dport, 4739)
             self.assertEqual(p[IP].dst, self.pg3.remote_ip4)
             self.assertEqual(p[UDP].sport, self.ipfix_src_port)
             self.assertEqual(p[UDP].dport, 4739)
-            self.assertEqual(p[IPFIX].observationDomainID,
-                             self.ipfix_domain_id)
+            self.assertEqual(p[IPFIX].observationDomainID, self.ipfix_domain_id)
             if p.haslayer(Template):
                 ipfix.add_template(p.getlayer(Template))
         # verify events in data set
             if p.haslayer(Template):
                 ipfix.add_template(p.getlayer(Template))
         # verify events in data set
@@ -2356,15 +2485,15 @@ class TestNAT44EI(MethodHolder):
                 self.verify_ipfix_addr_exhausted(data)
 
     def test_ipfix_max_sessions(self):
                 self.verify_ipfix_addr_exhausted(data)
 
     def test_ipfix_max_sessions(self):
-        """ NAT44EI IPFIX logging maximum session entries exceeded """
+        """NAT44EI IPFIX logging maximum session entries exceeded"""
         self.nat44_add_address(self.nat_addr)
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
         self.nat44_add_address(self.nat_addr)
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg0.sw_if_index,
-            flags=flags, is_add=1)
+            sw_if_index=self.pg0.sw_if_index, flags=flags, is_add=1
+        )
         self.vapi.nat44_ei_interface_add_del_feature(
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg1.sw_if_index,
-            is_add=1)
+            sw_if_index=self.pg1.sw_if_index, is_add=1
+        )
 
         max_sessions_per_thread = self.max_translations
         max_sessions = max(1, self.vpp_worker_count) * max_sessions_per_thread
 
         max_sessions_per_thread = self.max_translations
         max_sessions = max(1, self.vpp_worker_count) * max_sessions_per_thread
@@ -2372,26 +2501,32 @@ class TestNAT44EI(MethodHolder):
         pkts = []
         for i in range(0, max_sessions):
             src = "10.10.%u.%u" % ((i & 0xFF00) >> 8, i & 0xFF)
         pkts = []
         for i in range(0, max_sessions):
             src = "10.10.%u.%u" % ((i & 0xFF00) >> 8, i & 0xFF)
-            p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-                 IP(src=src, dst=self.pg1.remote_ip4) /
-                 TCP(sport=1025))
+            p = (
+                Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+                / IP(src=src, dst=self.pg1.remote_ip4)
+                / TCP(sport=1025)
+            )
             pkts.append(p)
         self.pg0.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
         self.pg1.get_capture(max_sessions)
             pkts.append(p)
         self.pg0.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
         self.pg1.get_capture(max_sessions)
-        self.vapi.set_ipfix_exporter(collector_address=self.pg3.remote_ip4,
-                                     src_address=self.pg3.local_ip4,
-                                     path_mtu=512,
-                                     template_interval=10)
-        self.vapi.nat44_ei_ipfix_enable_disable(domain_id=self.ipfix_domain_id,
-                                                src_port=self.ipfix_src_port,
-                                                enable=1)
-
-        p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-             IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4) /
-             TCP(sport=1025))
+        self.vapi.set_ipfix_exporter(
+            collector_address=self.pg3.remote_ip4,
+            src_address=self.pg3.local_ip4,
+            path_mtu=512,
+            template_interval=10,
+        )
+        self.vapi.nat44_ei_ipfix_enable_disable(
+            domain_id=self.ipfix_domain_id, src_port=self.ipfix_src_port, enable=1
+        )
+
+        p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4)
+            / TCP(sport=1025)
+        )
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -2406,8 +2541,7 @@ class TestNAT44EI(MethodHolder):
             self.assertEqual(p[IP].dst, self.pg3.remote_ip4)
             self.assertEqual(p[UDP].sport, self.ipfix_src_port)
             self.assertEqual(p[UDP].dport, 4739)
             self.assertEqual(p[IP].dst, self.pg3.remote_ip4)
             self.assertEqual(p[UDP].sport, self.ipfix_src_port)
             self.assertEqual(p[UDP].dport, 4739)
-            self.assertEqual(p[IPFIX].observationDomainID,
-                             self.ipfix_domain_id)
+            self.assertEqual(p[IPFIX].observationDomainID, self.ipfix_domain_id)
             if p.haslayer(Template):
                 ipfix.add_template(p.getlayer(Template))
         # verify events in data set
             if p.haslayer(Template):
                 ipfix.add_template(p.getlayer(Template))
         # verify events in data set
@@ -2417,22 +2551,23 @@ class TestNAT44EI(MethodHolder):
                 self.verify_ipfix_max_sessions(data, max_sessions_per_thread)
 
     def test_syslog_apmap(self):
                 self.verify_ipfix_max_sessions(data, max_sessions_per_thread)
 
     def test_syslog_apmap(self):
-        """ NAT44EI syslog address and port mapping creation and deletion """
-        self.vapi.syslog_set_filter(
-            self.SYSLOG_SEVERITY.SYSLOG_API_SEVERITY_INFO)
+        """NAT44EI syslog address and port mapping creation and deletion"""
+        self.vapi.syslog_set_filter(self.SYSLOG_SEVERITY.SYSLOG_API_SEVERITY_INFO)
         self.vapi.syslog_set_sender(self.pg3.local_ip4, self.pg3.remote_ip4)
         self.nat44_add_address(self.nat_addr)
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
         self.vapi.syslog_set_sender(self.pg3.local_ip4, self.pg3.remote_ip4)
         self.nat44_add_address(self.nat_addr)
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg0.sw_if_index,
-            flags=flags, is_add=1)
+            sw_if_index=self.pg0.sw_if_index, flags=flags, is_add=1
+        )
         self.vapi.nat44_ei_interface_add_del_feature(
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg1.sw_if_index,
-            is_add=1)
-
-        p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-             IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4) /
-             TCP(sport=self.tcp_port_in, dport=20))
+            sw_if_index=self.pg1.sw_if_index, is_add=1
+        )
+
+        p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4)
+            / TCP(sport=self.tcp_port_in, dport=20)
+        )
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -2448,22 +2583,25 @@ class TestNAT44EI(MethodHolder):
         self.verify_syslog_apmap(capture[0][Raw].load, False)
 
     def test_pool_addr_fib(self):
         self.verify_syslog_apmap(capture[0][Raw].load, False)
 
     def test_pool_addr_fib(self):
-        """ NAT44EI add pool addresses to FIB """
-        static_addr = '10.0.0.10'
+        """NAT44EI add pool addresses to FIB"""
+        static_addr = "10.0.0.10"
         self.nat44_add_address(self.nat_addr)
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
         self.nat44_add_address(self.nat_addr)
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg0.sw_if_index,
-            flags=flags, is_add=1)
+            sw_if_index=self.pg0.sw_if_index, flags=flags, is_add=1
+        )
         self.vapi.nat44_ei_interface_add_del_feature(
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg1.sw_if_index,
-            is_add=1)
+            sw_if_index=self.pg1.sw_if_index, is_add=1
+        )
         self.nat44_add_static_mapping(self.pg0.remote_ip4, static_addr)
 
         # NAT44EI address
         self.nat44_add_static_mapping(self.pg0.remote_ip4, static_addr)
 
         # NAT44EI address
-        p = (Ether(src=self.pg1.remote_mac, dst='ff:ff:ff:ff:ff:ff') /
-             ARP(op=ARP.who_has, pdst=self.nat_addr,
-                 psrc=self.pg1.remote_ip4, hwsrc=self.pg1.remote_mac))
+        p = Ether(src=self.pg1.remote_mac, dst="ff:ff:ff:ff:ff:ff") / ARP(
+            op=ARP.who_has,
+            pdst=self.nat_addr,
+            psrc=self.pg1.remote_ip4,
+            hwsrc=self.pg1.remote_mac,
+        )
         self.pg1.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg1.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -2472,9 +2610,12 @@ class TestNAT44EI(MethodHolder):
         self.assertTrue(capture[0][ARP].op, ARP.is_at)
 
         # 1:1 NAT address
         self.assertTrue(capture[0][ARP].op, ARP.is_at)
 
         # 1:1 NAT address
-        p = (Ether(src=self.pg1.remote_mac, dst='ff:ff:ff:ff:ff:ff') /
-             ARP(op=ARP.who_has, pdst=static_addr,
-                 psrc=self.pg1.remote_ip4, hwsrc=self.pg1.remote_mac))
+        p = Ether(src=self.pg1.remote_mac, dst="ff:ff:ff:ff:ff:ff") / ARP(
+            op=ARP.who_has,
+            pdst=static_addr,
+            psrc=self.pg1.remote_ip4,
+            hwsrc=self.pg1.remote_mac,
+        )
         self.pg1.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg1.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -2483,9 +2624,12 @@ class TestNAT44EI(MethodHolder):
         self.assertTrue(capture[0][ARP].op, ARP.is_at)
 
         # send ARP to non-NAT44EI interface
         self.assertTrue(capture[0][ARP].op, ARP.is_at)
 
         # send ARP to non-NAT44EI interface
-        p = (Ether(src=self.pg2.remote_mac, dst='ff:ff:ff:ff:ff:ff') /
-             ARP(op=ARP.who_has, pdst=self.nat_addr,
-                 psrc=self.pg2.remote_ip4, hwsrc=self.pg2.remote_mac))
+        p = Ether(src=self.pg2.remote_mac, dst="ff:ff:ff:ff:ff:ff") / ARP(
+            op=ARP.who_has,
+            pdst=self.nat_addr,
+            psrc=self.pg2.remote_ip4,
+            hwsrc=self.pg2.remote_mac,
+        )
         self.pg2.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg2.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -2493,27 +2637,32 @@ class TestNAT44EI(MethodHolder):
 
         # remove addresses and verify
         self.nat44_add_address(self.nat_addr, is_add=0)
 
         # remove addresses and verify
         self.nat44_add_address(self.nat_addr, is_add=0)
-        self.nat44_add_static_mapping(self.pg0.remote_ip4, static_addr,
-                                      is_add=0)
-
-        p = (Ether(src=self.pg1.remote_mac, dst='ff:ff:ff:ff:ff:ff') /
-             ARP(op=ARP.who_has, pdst=self.nat_addr,
-                 psrc=self.pg1.remote_ip4, hwsrc=self.pg1.remote_mac))
+        self.nat44_add_static_mapping(self.pg0.remote_ip4, static_addr, is_add=0)
+
+        p = Ether(src=self.pg1.remote_mac, dst="ff:ff:ff:ff:ff:ff") / ARP(
+            op=ARP.who_has,
+            pdst=self.nat_addr,
+            psrc=self.pg1.remote_ip4,
+            hwsrc=self.pg1.remote_mac,
+        )
         self.pg1.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg1.assert_nothing_captured()
 
         self.pg1.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg1.assert_nothing_captured()
 
-        p = (Ether(src=self.pg1.remote_mac, dst='ff:ff:ff:ff:ff:ff') /
-             ARP(op=ARP.who_has, pdst=static_addr,
-                 psrc=self.pg1.remote_ip4, hwsrc=self.pg1.remote_mac))
+        p = Ether(src=self.pg1.remote_mac, dst="ff:ff:ff:ff:ff:ff") / ARP(
+            op=ARP.who_has,
+            pdst=static_addr,
+            psrc=self.pg1.remote_ip4,
+            hwsrc=self.pg1.remote_mac,
+        )
         self.pg1.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg1.assert_nothing_captured()
 
     def test_vrf_mode(self):
         self.pg1.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg1.assert_nothing_captured()
 
     def test_vrf_mode(self):
-        """ NAT44EI tenant VRF aware address pool mode """
+        """NAT44EI tenant VRF aware address pool mode"""
 
         vrf_id1 = 1
         vrf_id2 = 2
 
         vrf_id1 = 1
         vrf_id2 = 2
@@ -2522,8 +2671,8 @@ class TestNAT44EI(MethodHolder):
 
         self.pg0.unconfig_ip4()
         self.pg1.unconfig_ip4()
 
         self.pg0.unconfig_ip4()
         self.pg1.unconfig_ip4()
-        self.vapi.ip_table_add_del(is_add=1, table={'table_id': vrf_id1})
-        self.vapi.ip_table_add_del(is_add=1, table={'table_id': vrf_id2})
+        self.vapi.ip_table_add_del(is_add=1, table={"table_id": vrf_id1})
+        self.vapi.ip_table_add_del(is_add=1, table={"table_id": vrf_id2})
         self.pg0.set_table_ip4(vrf_id1)
         self.pg1.set_table_ip4(vrf_id2)
         self.pg0.config_ip4()
         self.pg0.set_table_ip4(vrf_id1)
         self.pg1.set_table_ip4(vrf_id2)
         self.pg0.config_ip4()
@@ -2535,14 +2684,14 @@ class TestNAT44EI(MethodHolder):
         self.nat44_add_address(nat_ip2, vrf_id=vrf_id2)
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
         self.nat44_add_address(nat_ip2, vrf_id=vrf_id2)
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg0.sw_if_index,
-            flags=flags, is_add=1)
+            sw_if_index=self.pg0.sw_if_index, flags=flags, is_add=1
+        )
         self.vapi.nat44_ei_interface_add_del_feature(
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg1.sw_if_index,
-            flags=flags, is_add=1)
+            sw_if_index=self.pg1.sw_if_index, flags=flags, is_add=1
+        )
         self.vapi.nat44_ei_interface_add_del_feature(
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg2.sw_if_index,
-            is_add=1)
+            sw_if_index=self.pg2.sw_if_index, is_add=1
+        )
 
         try:
             # first VRF
 
         try:
             # first VRF
@@ -2570,11 +2719,11 @@ class TestNAT44EI(MethodHolder):
             self.pg1.config_ip4()
             self.pg0.resolve_arp()
             self.pg1.resolve_arp()
             self.pg1.config_ip4()
             self.pg0.resolve_arp()
             self.pg1.resolve_arp()
-            self.vapi.ip_table_add_del(is_add=0, table={'table_id': vrf_id1})
-            self.vapi.ip_table_add_del(is_add=0, table={'table_id': vrf_id2})
+            self.vapi.ip_table_add_del(is_add=0, table={"table_id": vrf_id1})
+            self.vapi.ip_table_add_del(is_add=0, table={"table_id": vrf_id2})
 
     def test_vrf_feature_independent(self):
 
     def test_vrf_feature_independent(self):
-        """ NAT44EI tenant VRF independent address pool mode """
+        """NAT44EI tenant VRF independent address pool mode"""
 
         nat_ip1 = "10.0.0.10"
         nat_ip2 = "10.0.0.11"
 
         nat_ip1 = "10.0.0.10"
         nat_ip2 = "10.0.0.11"
@@ -2583,14 +2732,14 @@ class TestNAT44EI(MethodHolder):
         self.nat44_add_address(nat_ip2, vrf_id=99)
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
         self.nat44_add_address(nat_ip2, vrf_id=99)
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg0.sw_if_index,
-            flags=flags, is_add=1)
+            sw_if_index=self.pg0.sw_if_index, flags=flags, is_add=1
+        )
         self.vapi.nat44_ei_interface_add_del_feature(
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg1.sw_if_index,
-            flags=flags, is_add=1)
+            sw_if_index=self.pg1.sw_if_index, flags=flags, is_add=1
+        )
         self.vapi.nat44_ei_interface_add_del_feature(
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg2.sw_if_index,
-            is_add=1)
+            sw_if_index=self.pg2.sw_if_index, is_add=1
+        )
 
         # first VRF
         pkts = self.create_stream_in(self.pg0, self.pg2)
 
         # first VRF
         pkts = self.create_stream_in(self.pg0, self.pg2)
@@ -2609,16 +2758,16 @@ class TestNAT44EI(MethodHolder):
         self.verify_capture_out(capture, nat_ip1)
 
     def test_dynamic_ipless_interfaces(self):
         self.verify_capture_out(capture, nat_ip1)
 
     def test_dynamic_ipless_interfaces(self):
-        """ NAT44EI interfaces without configured IP address """
+        """NAT44EI interfaces without configured IP address"""
         self.create_routes_and_neigbors()
         self.nat44_add_address(self.nat_addr)
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
         self.create_routes_and_neigbors()
         self.nat44_add_address(self.nat_addr)
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg7.sw_if_index,
-            flags=flags, is_add=1)
+            sw_if_index=self.pg7.sw_if_index, flags=flags, is_add=1
+        )
         self.vapi.nat44_ei_interface_add_del_feature(
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg8.sw_if_index,
-            is_add=1)
+            sw_if_index=self.pg8.sw_if_index, is_add=1
+        )
 
         # in2out
         pkts = self.create_stream_in(self.pg7, self.pg8)
 
         # in2out
         pkts = self.create_stream_in(self.pg7, self.pg8)
@@ -2637,17 +2786,17 @@ class TestNAT44EI(MethodHolder):
         self.verify_capture_in(capture, self.pg7)
 
     def test_static_ipless_interfaces(self):
         self.verify_capture_in(capture, self.pg7)
 
     def test_static_ipless_interfaces(self):
-        """ NAT44EI interfaces without configured IP address - 1:1 NAT """
+        """NAT44EI interfaces without configured IP address - 1:1 NAT"""
 
         self.create_routes_and_neigbors()
         self.nat44_add_static_mapping(self.pg7.remote_ip4, self.nat_addr)
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
 
         self.create_routes_and_neigbors()
         self.nat44_add_static_mapping(self.pg7.remote_ip4, self.nat_addr)
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg7.sw_if_index,
-            flags=flags, is_add=1)
+            sw_if_index=self.pg7.sw_if_index, flags=flags, is_add=1
+        )
         self.vapi.nat44_ei_interface_add_del_feature(
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg8.sw_if_index,
-            is_add=1)
+            sw_if_index=self.pg8.sw_if_index, is_add=1
+        )
 
         # out2in
         pkts = self.create_stream_out(self.pg8)
 
         # out2in
         pkts = self.create_stream_out(self.pg8)
@@ -2666,7 +2815,7 @@ class TestNAT44EI(MethodHolder):
         self.verify_capture_out(capture, self.nat_addr, True)
 
     def test_static_with_port_ipless_interfaces(self):
         self.verify_capture_out(capture, self.nat_addr, True)
 
     def test_static_with_port_ipless_interfaces(self):
-        """ NAT44EI interfaces without configured IP address - 1:1 NAPT """
+        """NAT44EI interfaces without configured IP address - 1:1 NAPT"""
 
         self.tcp_port_out = 30606
         self.udp_port_out = 30607
 
         self.tcp_port_out = 30606
         self.udp_port_out = 30607
@@ -2674,22 +2823,34 @@ class TestNAT44EI(MethodHolder):
 
         self.create_routes_and_neigbors()
         self.nat44_add_address(self.nat_addr)
 
         self.create_routes_and_neigbors()
         self.nat44_add_address(self.nat_addr)
-        self.nat44_add_static_mapping(self.pg7.remote_ip4, self.nat_addr,
-                                      self.tcp_port_in, self.tcp_port_out,
-                                      proto=IP_PROTOS.tcp)
-        self.nat44_add_static_mapping(self.pg7.remote_ip4, self.nat_addr,
-                                      self.udp_port_in, self.udp_port_out,
-                                      proto=IP_PROTOS.udp)
-        self.nat44_add_static_mapping(self.pg7.remote_ip4, self.nat_addr,
-                                      self.icmp_id_in, self.icmp_id_out,
-                                      proto=IP_PROTOS.icmp)
+        self.nat44_add_static_mapping(
+            self.pg7.remote_ip4,
+            self.nat_addr,
+            self.tcp_port_in,
+            self.tcp_port_out,
+            proto=IP_PROTOS.tcp,
+        )
+        self.nat44_add_static_mapping(
+            self.pg7.remote_ip4,
+            self.nat_addr,
+            self.udp_port_in,
+            self.udp_port_out,
+            proto=IP_PROTOS.udp,
+        )
+        self.nat44_add_static_mapping(
+            self.pg7.remote_ip4,
+            self.nat_addr,
+            self.icmp_id_in,
+            self.icmp_id_out,
+            proto=IP_PROTOS.icmp,
+        )
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg7.sw_if_index,
-            flags=flags, is_add=1)
+            sw_if_index=self.pg7.sw_if_index, flags=flags, is_add=1
+        )
         self.vapi.nat44_ei_interface_add_del_feature(
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg8.sw_if_index,
-            is_add=1)
+            sw_if_index=self.pg8.sw_if_index, is_add=1
+        )
 
         # out2in
         pkts = self.create_stream_out(self.pg8)
 
         # out2in
         pkts = self.create_stream_out(self.pg8)
@@ -2708,23 +2869,25 @@ class TestNAT44EI(MethodHolder):
         self.verify_capture_out(capture)
 
     def test_static_unknown_proto(self):
         self.verify_capture_out(capture)
 
     def test_static_unknown_proto(self):
-        """ NAT44EI 1:1 translate packet with unknown protocol """
+        """NAT44EI 1:1 translate packet with unknown protocol"""
         nat_ip = "10.0.0.10"
         self.nat44_add_static_mapping(self.pg0.remote_ip4, nat_ip)
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
         nat_ip = "10.0.0.10"
         self.nat44_add_static_mapping(self.pg0.remote_ip4, nat_ip)
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg0.sw_if_index,
-            flags=flags, is_add=1)
+            sw_if_index=self.pg0.sw_if_index, flags=flags, is_add=1
+        )
         self.vapi.nat44_ei_interface_add_del_feature(
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg1.sw_if_index,
-            is_add=1)
+            sw_if_index=self.pg1.sw_if_index, is_add=1
+        )
 
         # in2out
 
         # in2out
-        p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-             IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4) /
-             GRE() /
-             IP(src=self.pg2.remote_ip4, dst=self.pg3.remote_ip4) /
-             TCP(sport=1234, dport=1234))
+        p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4)
+            / GRE()
+            / IP(src=self.pg2.remote_ip4, dst=self.pg3.remote_ip4)
+            / TCP(sport=1234, dport=1234)
+        )
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -2740,11 +2903,13 @@ class TestNAT44EI(MethodHolder):
             raise
 
         # out2in
             raise
 
         # out2in
-        p = (Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac) /
-             IP(src=self.pg1.remote_ip4, dst=nat_ip) /
-             GRE() /
-             IP(src=self.pg3.remote_ip4, dst=self.pg2.remote_ip4) /
-             TCP(sport=1234, dport=1234))
+        p = (
+            Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac)
+            / IP(src=self.pg1.remote_ip4, dst=nat_ip)
+            / GRE()
+            / IP(src=self.pg3.remote_ip4, dst=self.pg2.remote_ip4)
+            / TCP(sport=1234, dport=1234)
+        )
         self.pg1.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg1.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -2760,8 +2925,7 @@ class TestNAT44EI(MethodHolder):
             raise
 
     def test_hairpinning_static_unknown_proto(self):
             raise
 
     def test_hairpinning_static_unknown_proto(self):
-        """ NAT44EI 1:1 translate packet with unknown protocol - hairpinning
-        """
+        """NAT44EI 1:1 translate packet with unknown protocol - hairpinning"""
 
         host = self.pg0.remote_hosts[0]
         server = self.pg0.remote_hosts[1]
 
         host = self.pg0.remote_hosts[0]
         server = self.pg0.remote_hosts[1]
@@ -2773,18 +2937,20 @@ class TestNAT44EI(MethodHolder):
         self.nat44_add_static_mapping(server.ip4, server_nat_ip)
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
         self.nat44_add_static_mapping(server.ip4, server_nat_ip)
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg0.sw_if_index,
-            flags=flags, is_add=1)
+            sw_if_index=self.pg0.sw_if_index, flags=flags, is_add=1
+        )
         self.vapi.nat44_ei_interface_add_del_feature(
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg1.sw_if_index,
-            is_add=1)
+            sw_if_index=self.pg1.sw_if_index, is_add=1
+        )
 
         # host to server
 
         # host to server
-        p = (Ether(dst=self.pg0.local_mac, src=host.mac) /
-             IP(src=host.ip4, dst=server_nat_ip) /
-             GRE() /
-             IP(src=self.pg2.remote_ip4, dst=self.pg3.remote_ip4) /
-             TCP(sport=1234, dport=1234))
+        p = (
+            Ether(dst=self.pg0.local_mac, src=host.mac)
+            / IP(src=host.ip4, dst=server_nat_ip)
+            / GRE()
+            / IP(src=self.pg2.remote_ip4, dst=self.pg3.remote_ip4)
+            / TCP(sport=1234, dport=1234)
+        )
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -2800,11 +2966,13 @@ class TestNAT44EI(MethodHolder):
             raise
 
         # server to host
             raise
 
         # server to host
-        p = (Ether(dst=self.pg0.local_mac, src=server.mac) /
-             IP(src=server.ip4, dst=host_nat_ip) /
-             GRE() /
-             IP(src=self.pg3.remote_ip4, dst=self.pg2.remote_ip4) /
-             TCP(sport=1234, dport=1234))
+        p = (
+            Ether(dst=self.pg0.local_mac, src=server.mac)
+            / IP(src=server.ip4, dst=host_nat_ip)
+            / GRE()
+            / IP(src=self.pg3.remote_ip4, dst=self.pg2.remote_ip4)
+            / TCP(sport=1234, dport=1234)
+        )
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -2820,10 +2988,11 @@ class TestNAT44EI(MethodHolder):
             raise
 
     def test_output_feature(self):
             raise
 
     def test_output_feature(self):
-        """ NAT44EI output feature (in2out postrouting) """
+        """NAT44EI output feature (in2out postrouting)"""
         self.nat44_add_address(self.nat_addr)
         self.vapi.nat44_ei_add_del_output_interface(
         self.nat44_add_address(self.nat_addr)
         self.vapi.nat44_ei_add_del_output_interface(
-            sw_if_index=self.pg3.sw_if_index, is_add=1)
+            sw_if_index=self.pg3.sw_if_index, is_add=1
+        )
 
         # in2out
         pkts = self.create_stream_in(self.pg0, self.pg3)
 
         # in2out
         pkts = self.create_stream_in(self.pg0, self.pg3)
@@ -2850,25 +3019,32 @@ class TestNAT44EI(MethodHolder):
         self.verify_capture_no_translation(capture, self.pg2, self.pg0)
 
     def test_output_feature_vrf_aware(self):
         self.verify_capture_no_translation(capture, self.pg2, self.pg0)
 
     def test_output_feature_vrf_aware(self):
-        """ NAT44EI output feature VRF aware (in2out postrouting) """
+        """NAT44EI output feature VRF aware (in2out postrouting)"""
         nat_ip_vrf10 = "10.0.0.10"
         nat_ip_vrf20 = "10.0.0.20"
 
         nat_ip_vrf10 = "10.0.0.10"
         nat_ip_vrf20 = "10.0.0.20"
 
-        r1 = VppIpRoute(self, self.pg3.remote_ip4, 32,
-                        [VppRoutePath(self.pg3.remote_ip4,
-                                      self.pg3.sw_if_index)],
-                        table_id=10)
-        r2 = VppIpRoute(self, self.pg3.remote_ip4, 32,
-                        [VppRoutePath(self.pg3.remote_ip4,
-                                      self.pg3.sw_if_index)],
-                        table_id=20)
+        r1 = VppIpRoute(
+            self,
+            self.pg3.remote_ip4,
+            32,
+            [VppRoutePath(self.pg3.remote_ip4, self.pg3.sw_if_index)],
+            table_id=10,
+        )
+        r2 = VppIpRoute(
+            self,
+            self.pg3.remote_ip4,
+            32,
+            [VppRoutePath(self.pg3.remote_ip4, self.pg3.sw_if_index)],
+            table_id=20,
+        )
         r1.add_vpp_config()
         r2.add_vpp_config()
 
         self.nat44_add_address(nat_ip_vrf10, vrf_id=10)
         self.nat44_add_address(nat_ip_vrf20, vrf_id=20)
         self.vapi.nat44_ei_add_del_output_interface(
         r1.add_vpp_config()
         r2.add_vpp_config()
 
         self.nat44_add_address(nat_ip_vrf10, vrf_id=10)
         self.nat44_add_address(nat_ip_vrf20, vrf_id=20)
         self.vapi.nat44_ei_add_del_output_interface(
-            sw_if_index=self.pg3.sw_if_index, is_add=1)
+            sw_if_index=self.pg3.sw_if_index, is_add=1
+        )
 
         # in2out VRF 10
         pkts = self.create_stream_in(self.pg4, self.pg3)
 
         # in2out VRF 10
         pkts = self.create_stream_in(self.pg4, self.pg3)
@@ -2903,7 +3079,7 @@ class TestNAT44EI(MethodHolder):
         self.verify_capture_in(capture, self.pg6)
 
     def test_output_feature_hairpinning(self):
         self.verify_capture_in(capture, self.pg6)
 
     def test_output_feature_hairpinning(self):
-        """ NAT44EI output feature hairpinning (in2out postrouting) """
+        """NAT44EI output feature hairpinning (in2out postrouting)"""
         host = self.pg0.remote_hosts[0]
         server = self.pg0.remote_hosts[1]
         host_in_port = 1234
         host = self.pg0.remote_hosts[0]
         server = self.pg0.remote_hosts[1]
         host_in_port = 1234
@@ -2913,19 +3089,27 @@ class TestNAT44EI(MethodHolder):
 
         self.nat44_add_address(self.nat_addr)
         self.vapi.nat44_ei_add_del_output_interface(
 
         self.nat44_add_address(self.nat_addr)
         self.vapi.nat44_ei_add_del_output_interface(
-            sw_if_index=self.pg0.sw_if_index, is_add=1)
+            sw_if_index=self.pg0.sw_if_index, is_add=1
+        )
         self.vapi.nat44_ei_add_del_output_interface(
         self.vapi.nat44_ei_add_del_output_interface(
-            sw_if_index=self.pg1.sw_if_index, is_add=1)
+            sw_if_index=self.pg1.sw_if_index, is_add=1
+        )
 
         # add static mapping for server
 
         # add static mapping for server
-        self.nat44_add_static_mapping(server.ip4, self.nat_addr,
-                                      server_in_port, server_out_port,
-                                      proto=IP_PROTOS.tcp)
+        self.nat44_add_static_mapping(
+            server.ip4,
+            self.nat_addr,
+            server_in_port,
+            server_out_port,
+            proto=IP_PROTOS.tcp,
+        )
 
         # send packet from host to server
 
         # send packet from host to server
-        p = (Ether(src=host.mac, dst=self.pg0.local_mac) /
-             IP(src=host.ip4, dst=self.nat_addr) /
-             TCP(sport=host_in_port, dport=server_out_port))
+        p = (
+            Ether(src=host.mac, dst=self.pg0.local_mac)
+            / IP(src=host.ip4, dst=self.nat_addr)
+            / TCP(sport=host_in_port, dport=server_out_port)
+        )
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -2945,9 +3129,11 @@ class TestNAT44EI(MethodHolder):
             raise
 
         # send reply from server to host
             raise
 
         # send reply from server to host
-        p = (Ether(src=server.mac, dst=self.pg0.local_mac) /
-             IP(src=server.ip4, dst=self.nat_addr) /
-             TCP(sport=server_in_port, dport=host_out_port))
+        p = (
+            Ether(src=server.mac, dst=self.pg0.local_mac)
+            / IP(src=server.ip4, dst=self.nat_addr)
+            / TCP(sport=server_in_port, dport=host_out_port)
+        )
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -2966,7 +3152,7 @@ class TestNAT44EI(MethodHolder):
             raise
 
     def test_one_armed_nat44(self):
             raise
 
     def test_one_armed_nat44(self):
-        """ NAT44EI One armed NAT """
+        """NAT44EI One armed NAT"""
         remote_host = self.pg9.remote_hosts[0]
         local_host = self.pg9.remote_hosts[1]
         external_port = 0
         remote_host = self.pg9.remote_hosts[0]
         local_host = self.pg9.remote_hosts[1]
         external_port = 0
@@ -2974,16 +3160,18 @@ class TestNAT44EI(MethodHolder):
         self.nat44_add_address(self.nat_addr)
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
         self.nat44_add_address(self.nat_addr)
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg9.sw_if_index,
-            is_add=1)
+            sw_if_index=self.pg9.sw_if_index, is_add=1
+        )
         self.vapi.nat44_ei_interface_add_del_feature(
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg9.sw_if_index,
-            flags=flags, is_add=1)
+            sw_if_index=self.pg9.sw_if_index, flags=flags, is_add=1
+        )
 
         # in2out
 
         # in2out
-        p = (Ether(src=self.pg9.remote_mac, dst=self.pg9.local_mac) /
-             IP(src=local_host.ip4, dst=remote_host.ip4) /
-             TCP(sport=12345, dport=80))
+        p = (
+            Ether(src=self.pg9.remote_mac, dst=self.pg9.local_mac)
+            / IP(src=local_host.ip4, dst=remote_host.ip4)
+            / TCP(sport=12345, dport=80)
+        )
         self.pg9.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg9.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -3003,9 +3191,11 @@ class TestNAT44EI(MethodHolder):
             raise
 
         # out2in
             raise
 
         # out2in
-        p = (Ether(src=self.pg9.remote_mac, dst=self.pg9.local_mac) /
-             IP(src=remote_host.ip4, dst=self.nat_addr) /
-             TCP(sport=80, dport=external_port))
+        p = (
+            Ether(src=self.pg9.remote_mac, dst=self.pg9.local_mac)
+            / IP(src=remote_host.ip4, dst=self.nat_addr)
+            / TCP(sport=80, dport=external_port)
+        )
         self.pg9.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg9.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -3028,21 +3218,21 @@ class TestNAT44EI(MethodHolder):
         else:
             node = "nat44-ei-classify"
 
         else:
             node = "nat44-ei-classify"
 
-        err = self.statistics.get_err_counter('/err/%s/next in2out' % node)
+        err = self.statistics.get_err_counter("/err/%s/next in2out" % node)
         self.assertEqual(err, 1)
         self.assertEqual(err, 1)
-        err = self.statistics.get_err_counter('/err/%s/next out2in' % node)
+        err = self.statistics.get_err_counter("/err/%s/next out2in" % node)
         self.assertEqual(err, 1)
 
     def test_del_session(self):
         self.assertEqual(err, 1)
 
     def test_del_session(self):
-        """ NAT44EI delete session """
+        """NAT44EI delete session"""
         self.nat44_add_address(self.nat_addr)
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
         self.nat44_add_address(self.nat_addr)
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg0.sw_if_index,
-            flags=flags, is_add=1)
+            sw_if_index=self.pg0.sw_if_index, flags=flags, is_add=1
+        )
         self.vapi.nat44_ei_interface_add_del_feature(
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg1.sw_if_index,
-            is_add=1)
+            sw_if_index=self.pg1.sw_if_index, is_add=1
+        )
 
         pkts = self.create_stream_in(self.pg0, self.pg1)
         self.pg0.add_stream(pkts)
 
         pkts = self.create_stream_in(self.pg0, self.pg1)
         self.pg0.add_stream(pkts)
@@ -3057,12 +3247,14 @@ class TestNAT44EI(MethodHolder):
             address=sessions[0].inside_ip_address,
             port=sessions[0].inside_port,
             protocol=sessions[0].protocol,
             address=sessions[0].inside_ip_address,
             port=sessions[0].inside_port,
             protocol=sessions[0].protocol,
-            flags=self.config_flags.NAT44_EI_IF_INSIDE)
+            flags=self.config_flags.NAT44_EI_IF_INSIDE,
+        )
 
         self.vapi.nat44_ei_del_session(
             address=sessions[1].outside_ip_address,
             port=sessions[1].outside_port,
 
         self.vapi.nat44_ei_del_session(
             address=sessions[1].outside_ip_address,
             port=sessions[1].outside_port,
-            protocol=sessions[1].protocol)
+            protocol=sessions[1].protocol,
+        )
 
         sessions = self.vapi.nat44_ei_user_session_dump(self.pg0.remote_ip4, 0)
         self.assertEqual(nsessions - len(sessions), 2)
 
         sessions = self.vapi.nat44_ei_user_session_dump(self.pg0.remote_ip4, 0)
         self.assertEqual(nsessions - len(sessions), 2)
@@ -3071,60 +3263,56 @@ class TestNAT44EI(MethodHolder):
             address=sessions[0].inside_ip_address,
             port=sessions[0].inside_port,
             protocol=sessions[0].protocol,
             address=sessions[0].inside_ip_address,
             port=sessions[0].inside_port,
             protocol=sessions[0].protocol,
-            flags=self.config_flags.NAT44_EI_IF_INSIDE)
+            flags=self.config_flags.NAT44_EI_IF_INSIDE,
+        )
 
         self.verify_no_nat44_user()
 
     def test_frag_in_order(self):
 
         self.verify_no_nat44_user()
 
     def test_frag_in_order(self):
-        """ NAT44EI translate fragments arriving in order """
+        """NAT44EI translate fragments arriving in order"""
 
         self.nat44_add_address(self.nat_addr)
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
 
         self.nat44_add_address(self.nat_addr)
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg0.sw_if_index,
-            flags=flags, is_add=1)
+            sw_if_index=self.pg0.sw_if_index, flags=flags, is_add=1
+        )
         self.vapi.nat44_ei_interface_add_del_feature(
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg1.sw_if_index,
-            is_add=1)
+            sw_if_index=self.pg1.sw_if_index, is_add=1
+        )
 
         self.frag_in_order(proto=IP_PROTOS.tcp)
         self.frag_in_order(proto=IP_PROTOS.udp)
         self.frag_in_order(proto=IP_PROTOS.icmp)
 
     def test_frag_forwarding(self):
 
         self.frag_in_order(proto=IP_PROTOS.tcp)
         self.frag_in_order(proto=IP_PROTOS.udp)
         self.frag_in_order(proto=IP_PROTOS.icmp)
 
     def test_frag_forwarding(self):
-        """ NAT44EI forwarding fragment test """
+        """NAT44EI forwarding fragment test"""
         self.vapi.nat44_ei_add_del_interface_addr(
         self.vapi.nat44_ei_add_del_interface_addr(
-            is_add=1,
-            sw_if_index=self.pg1.sw_if_index)
+            is_add=1, sw_if_index=self.pg1.sw_if_index
+        )
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg0.sw_if_index,
-            flags=flags, is_add=1)
+            sw_if_index=self.pg0.sw_if_index, flags=flags, is_add=1
+        )
         self.vapi.nat44_ei_interface_add_del_feature(
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg1.sw_if_index,
-            is_add=1)
+            sw_if_index=self.pg1.sw_if_index, is_add=1
+        )
         self.vapi.nat44_ei_forwarding_enable_disable(enable=1)
 
         data = b"A" * 16 + b"B" * 16 + b"C" * 3
         self.vapi.nat44_ei_forwarding_enable_disable(enable=1)
 
         data = b"A" * 16 + b"B" * 16 + b"C" * 3
-        pkts = self.create_stream_frag(self.pg1,
-                                       self.pg0.remote_ip4,
-                                       4789,
-                                       4789,
-                                       data,
-                                       proto=IP_PROTOS.udp)
+        pkts = self.create_stream_frag(
+            self.pg1, self.pg0.remote_ip4, 4789, 4789, data, proto=IP_PROTOS.udp
+        )
         self.pg1.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         frags = self.pg0.get_capture(len(pkts))
         self.pg1.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         frags = self.pg0.get_capture(len(pkts))
-        p = self.reass_frags_and_verify(frags,
-                                        self.pg1.remote_ip4,
-                                        self.pg0.remote_ip4)
+        p = self.reass_frags_and_verify(frags, self.pg1.remote_ip4, self.pg0.remote_ip4)
         self.assertEqual(p[UDP].sport, 4789)
         self.assertEqual(p[UDP].dport, 4789)
         self.assertEqual(data, p[Raw].load)
 
     def test_reass_hairpinning(self):
         self.assertEqual(p[UDP].sport, 4789)
         self.assertEqual(p[UDP].dport, 4789)
         self.assertEqual(data, p[Raw].load)
 
     def test_reass_hairpinning(self):
-        """ NAT44EI fragments hairpinning """
+        """NAT44EI fragments hairpinning"""
 
         server_addr = self.pg0.remote_hosts[1].ip4
         host_in_port = random.randint(1025, 65535)
 
         server_addr = self.pg0.remote_hosts[1].ip4
         host_in_port = random.randint(1025, 65535)
@@ -3134,63 +3322,85 @@ class TestNAT44EI(MethodHolder):
         self.nat44_add_address(self.nat_addr)
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
         self.nat44_add_address(self.nat_addr)
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg0.sw_if_index,
-            flags=flags, is_add=1)
+            sw_if_index=self.pg0.sw_if_index, flags=flags, is_add=1
+        )
         self.vapi.nat44_ei_interface_add_del_feature(
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg1.sw_if_index,
-            is_add=1)
+            sw_if_index=self.pg1.sw_if_index, is_add=1
+        )
         # add static mapping for server
         # add static mapping for server
-        self.nat44_add_static_mapping(server_addr, self.nat_addr,
-                                      server_in_port,
-                                      server_out_port,
-                                      proto=IP_PROTOS.tcp)
-        self.nat44_add_static_mapping(server_addr, self.nat_addr,
-                                      server_in_port,
-                                      server_out_port,
-                                      proto=IP_PROTOS.udp)
+        self.nat44_add_static_mapping(
+            server_addr,
+            self.nat_addr,
+            server_in_port,
+            server_out_port,
+            proto=IP_PROTOS.tcp,
+        )
+        self.nat44_add_static_mapping(
+            server_addr,
+            self.nat_addr,
+            server_in_port,
+            server_out_port,
+            proto=IP_PROTOS.udp,
+        )
         self.nat44_add_static_mapping(server_addr, self.nat_addr)
 
         self.nat44_add_static_mapping(server_addr, self.nat_addr)
 
-        self.reass_hairpinning(server_addr, server_in_port, server_out_port,
-                               host_in_port, proto=IP_PROTOS.tcp)
-        self.reass_hairpinning(server_addr, server_in_port, server_out_port,
-                               host_in_port, proto=IP_PROTOS.udp)
-        self.reass_hairpinning(server_addr, server_in_port, server_out_port,
-                               host_in_port, proto=IP_PROTOS.icmp)
+        self.reass_hairpinning(
+            server_addr,
+            server_in_port,
+            server_out_port,
+            host_in_port,
+            proto=IP_PROTOS.tcp,
+        )
+        self.reass_hairpinning(
+            server_addr,
+            server_in_port,
+            server_out_port,
+            host_in_port,
+            proto=IP_PROTOS.udp,
+        )
+        self.reass_hairpinning(
+            server_addr,
+            server_in_port,
+            server_out_port,
+            host_in_port,
+            proto=IP_PROTOS.icmp,
+        )
 
     def test_frag_out_of_order(self):
 
     def test_frag_out_of_order(self):
-        """ NAT44EI translate fragments arriving out of order """
+        """NAT44EI translate fragments arriving out of order"""
 
         self.nat44_add_address(self.nat_addr)
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
 
         self.nat44_add_address(self.nat_addr)
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg0.sw_if_index,
-            flags=flags, is_add=1)
+            sw_if_index=self.pg0.sw_if_index, flags=flags, is_add=1
+        )
         self.vapi.nat44_ei_interface_add_del_feature(
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg1.sw_if_index,
-            is_add=1)
+            sw_if_index=self.pg1.sw_if_index, is_add=1
+        )
 
         self.frag_out_of_order(proto=IP_PROTOS.tcp)
         self.frag_out_of_order(proto=IP_PROTOS.udp)
         self.frag_out_of_order(proto=IP_PROTOS.icmp)
 
     def test_port_restricted(self):
 
         self.frag_out_of_order(proto=IP_PROTOS.tcp)
         self.frag_out_of_order(proto=IP_PROTOS.udp)
         self.frag_out_of_order(proto=IP_PROTOS.icmp)
 
     def test_port_restricted(self):
-        """ NAT44EI Port restricted NAT44EI (MAP-E CE) """
+        """NAT44EI Port restricted NAT44EI (MAP-E CE)"""
         self.nat44_add_address(self.nat_addr)
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
         self.nat44_add_address(self.nat_addr)
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg0.sw_if_index,
-            flags=flags, is_add=1)
+            sw_if_index=self.pg0.sw_if_index, flags=flags, is_add=1
+        )
         self.vapi.nat44_ei_interface_add_del_feature(
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg1.sw_if_index,
-            is_add=1)
-        self.vapi.nat44_ei_set_addr_and_port_alloc_alg(alg=1,
-                                                       psid_offset=6,
-                                                       psid_length=6,
-                                                       psid=10)
-
-        p = (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-             IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4) /
-             TCP(sport=4567, dport=22))
+            sw_if_index=self.pg1.sw_if_index, is_add=1
+        )
+        self.vapi.nat44_ei_set_addr_and_port_alloc_alg(
+            alg=1, psid_offset=6, psid_length=6, psid=10
+        )
+
+        p = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4)
+            / TCP(sport=4567, dport=22)
+        )
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -3210,24 +3420,26 @@ class TestNAT44EI(MethodHolder):
             raise
 
     def test_port_range(self):
             raise
 
     def test_port_range(self):
-        """ NAT44EI External address port range """
+        """NAT44EI External address port range"""
         self.nat44_add_address(self.nat_addr)
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
         self.nat44_add_address(self.nat_addr)
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg0.sw_if_index,
-            flags=flags, is_add=1)
+            sw_if_index=self.pg0.sw_if_index, flags=flags, is_add=1
+        )
         self.vapi.nat44_ei_interface_add_del_feature(
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg1.sw_if_index,
-            is_add=1)
-        self.vapi.nat44_ei_set_addr_and_port_alloc_alg(alg=2,
-                                                       start_port=1025,
-                                                       end_port=1027)
+            sw_if_index=self.pg1.sw_if_index, is_add=1
+        )
+        self.vapi.nat44_ei_set_addr_and_port_alloc_alg(
+            alg=2, start_port=1025, end_port=1027
+        )
 
         pkts = []
         for port in range(0, 5):
 
         pkts = []
         for port in range(0, 5):
-            p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-                 IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4) /
-                 TCP(sport=1125 + port))
+            p = (
+                Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+                / IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4)
+                / TCP(sport=1125 + port)
+            )
             pkts.append(p)
         self.pg0.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
             pkts.append(p)
         self.pg0.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
@@ -3239,14 +3451,14 @@ class TestNAT44EI(MethodHolder):
             self.assertLessEqual(tcp.sport, 1027)
 
     def test_multiple_outside_vrf(self):
             self.assertLessEqual(tcp.sport, 1027)
 
     def test_multiple_outside_vrf(self):
-        """ NAT44EI Multiple outside VRF """
+        """NAT44EI Multiple outside VRF"""
         vrf_id1 = 1
         vrf_id2 = 2
 
         self.pg1.unconfig_ip4()
         self.pg2.unconfig_ip4()
         vrf_id1 = 1
         vrf_id2 = 2
 
         self.pg1.unconfig_ip4()
         self.pg2.unconfig_ip4()
-        self.vapi.ip_table_add_del(is_add=1, table={'table_id': vrf_id1})
-        self.vapi.ip_table_add_del(is_add=1, table={'table_id': vrf_id2})
+        self.vapi.ip_table_add_del(is_add=1, table={"table_id": vrf_id1})
+        self.vapi.ip_table_add_del(is_add=1, table={"table_id": vrf_id2})
         self.pg1.set_table_ip4(vrf_id1)
         self.pg2.set_table_ip4(vrf_id2)
         self.pg1.config_ip4()
         self.pg1.set_table_ip4(vrf_id1)
         self.pg2.set_table_ip4(vrf_id2)
         self.pg1.config_ip4()
@@ -3257,14 +3469,14 @@ class TestNAT44EI(MethodHolder):
         self.nat44_add_address(self.nat_addr)
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
         self.nat44_add_address(self.nat_addr)
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg0.sw_if_index,
-            flags=flags, is_add=1)
+            sw_if_index=self.pg0.sw_if_index, flags=flags, is_add=1
+        )
         self.vapi.nat44_ei_interface_add_del_feature(
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg1.sw_if_index,
-            is_add=1)
+            sw_if_index=self.pg1.sw_if_index, is_add=1
+        )
         self.vapi.nat44_ei_interface_add_del_feature(
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg2.sw_if_index,
-            is_add=1)
+            sw_if_index=self.pg2.sw_if_index, is_add=1
+        )
 
         try:
             # first VRF
 
         try:
             # first VRF
@@ -3313,20 +3525,26 @@ class TestNAT44EI(MethodHolder):
             self.pg2.resolve_arp()
 
     def test_mss_clamping(self):
             self.pg2.resolve_arp()
 
     def test_mss_clamping(self):
-        """ NAT44EI TCP MSS clamping """
+        """NAT44EI TCP MSS clamping"""
         self.nat44_add_address(self.nat_addr)
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
         self.nat44_add_address(self.nat_addr)
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg0.sw_if_index,
-            flags=flags, is_add=1)
+            sw_if_index=self.pg0.sw_if_index, flags=flags, is_add=1
+        )
         self.vapi.nat44_ei_interface_add_del_feature(
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg1.sw_if_index,
-            is_add=1)
-
-        p = (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-             IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4) /
-             TCP(sport=self.tcp_port_in, dport=self.tcp_external_port,
-                 flags="S", options=[('MSS', 1400)]))
+            sw_if_index=self.pg1.sw_if_index, is_add=1
+        )
+
+        p = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4)
+            / TCP(
+                sport=self.tcp_port_in,
+                dport=self.tcp_external_port,
+                flags="S",
+                options=[("MSS", 1400)],
+            )
+        )
 
         self.vapi.nat44_ei_set_mss_clamping(enable=1, mss_value=1000)
         self.pg0.add_stream(p)
 
         self.vapi.nat44_ei_set_mss_clamping(enable=1, mss_value=1000)
         self.pg0.add_stream(p)
@@ -3353,21 +3571,22 @@ class TestNAT44EI(MethodHolder):
         self.verify_mss_value(capture[0], 1400)
 
     def test_ha_send(self):
         self.verify_mss_value(capture[0], 1400)
 
     def test_ha_send(self):
-        """ NAT44EI Send HA session synchronization events (active) """
+        """NAT44EI Send HA session synchronization events (active)"""
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg0.sw_if_index,
-            flags=flags, is_add=1)
+            sw_if_index=self.pg0.sw_if_index, flags=flags, is_add=1
+        )
         self.vapi.nat44_ei_interface_add_del_feature(
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg1.sw_if_index,
-            is_add=1)
+            sw_if_index=self.pg1.sw_if_index, is_add=1
+        )
         self.nat44_add_address(self.nat_addr)
 
         self.vapi.nat44_ei_ha_set_listener(
         self.nat44_add_address(self.nat_addr)
 
         self.vapi.nat44_ei_ha_set_listener(
-            ip_address=self.pg3.local_ip4, port=12345, path_mtu=512)
+            ip_address=self.pg3.local_ip4, port=12345, path_mtu=512
+        )
         self.vapi.nat44_ei_ha_set_failover(
         self.vapi.nat44_ei_ha_set_failover(
-            ip_address=self.pg3.remote_ip4, port=12346,
-            session_refresh_interval=10)
+            ip_address=self.pg3.remote_ip4, port=12346, session_refresh_interval=10
+        )
         bind_layers(UDP, HANATStateSync, sport=12345)
 
         # create sessions
         bind_layers(UDP, HANATStateSync, sport=12345)
 
         # create sessions
@@ -3379,7 +3598,7 @@ class TestNAT44EI(MethodHolder):
         self.verify_capture_out(capture)
         # active send HA events
         self.vapi.nat44_ei_ha_flush()
         self.verify_capture_out(capture)
         # active send HA events
         self.vapi.nat44_ei_ha_flush()
-        stats = self.statistics['/nat44-ei/ha/add-event-send']
+        stats = self.statistics["/nat44-ei/ha/add-event-send"]
         self.assertEqual(stats[:, 0].sum(), 3)
         capture = self.pg3.get_capture(1)
         p = capture[0]
         self.assertEqual(stats[:, 0].sum(), 3)
         capture = self.pg3.get_capture(1)
         p = capture[0]
@@ -3407,23 +3626,29 @@ class TestNAT44EI(MethodHolder):
                 self.assertEqual(event.fib_index, 0)
 
         # ACK received events
                 self.assertEqual(event.fib_index, 0)
 
         # ACK received events
-        ack = (Ether(dst=self.pg3.local_mac, src=self.pg3.remote_mac) /
-               IP(src=self.pg3.remote_ip4, dst=self.pg3.local_ip4) /
-               UDP(sport=12346, dport=12345) /
-               HANATStateSync(sequence_number=seq, flags='ACK',
-                              thread_index=hanat.thread_index))
+        ack = (
+            Ether(dst=self.pg3.local_mac, src=self.pg3.remote_mac)
+            / IP(src=self.pg3.remote_ip4, dst=self.pg3.local_ip4)
+            / UDP(sport=12346, dport=12345)
+            / HANATStateSync(
+                sequence_number=seq, flags="ACK", thread_index=hanat.thread_index
+            )
+        )
         self.pg3.add_stream(ack)
         self.pg_start()
         self.pg3.add_stream(ack)
         self.pg_start()
-        stats = self.statistics['/nat44-ei/ha/ack-recv']
+        stats = self.statistics["/nat44-ei/ha/ack-recv"]
         self.assertEqual(stats[:, 0].sum(), 1)
 
         # delete one session
         self.pg_enable_capture(self.pg_interfaces)
         self.vapi.nat44_ei_del_session(
         self.assertEqual(stats[:, 0].sum(), 1)
 
         # delete one session
         self.pg_enable_capture(self.pg_interfaces)
         self.vapi.nat44_ei_del_session(
-            address=self.pg0.remote_ip4, port=self.tcp_port_in,
-            protocol=IP_PROTOS.tcp, flags=self.config_flags.NAT44_EI_IF_INSIDE)
+            address=self.pg0.remote_ip4,
+            port=self.tcp_port_in,
+            protocol=IP_PROTOS.tcp,
+            flags=self.config_flags.NAT44_EI_IF_INSIDE,
+        )
         self.vapi.nat44_ei_ha_flush()
         self.vapi.nat44_ei_ha_flush()
-        stats = self.statistics['/nat44-ei/ha/del-event-send']
+        stats = self.statistics["/nat44-ei/ha/del-event-send"]
         self.assertEqual(stats[:, 0].sum(), 1)
         capture = self.pg3.get_capture(1)
         p = capture[0]
         self.assertEqual(stats[:, 0].sum(), 1)
         capture = self.pg3.get_capture(1)
         p = capture[0]
@@ -3438,9 +3663,9 @@ class TestNAT44EI(MethodHolder):
         # do not send ACK, active retry send HA event again
         self.pg_enable_capture(self.pg_interfaces)
         self.virtual_sleep(12)
         # do not send ACK, active retry send HA event again
         self.pg_enable_capture(self.pg_interfaces)
         self.virtual_sleep(12)
-        stats = self.statistics['/nat44-ei/ha/retry-count']
+        stats = self.statistics["/nat44-ei/ha/retry-count"]
         self.assertEqual(stats[:, 0].sum(), 3)
         self.assertEqual(stats[:, 0].sum(), 3)
-        stats = self.statistics['/nat44-ei/ha/missed-count']
+        stats = self.statistics["/nat44-ei/ha/missed-count"]
         self.assertEqual(stats[:, 0].sum(), 1)
         capture = self.pg3.get_capture(3)
         for packet in capture:
         self.assertEqual(stats[:, 0].sum(), 1)
         capture = self.pg3.get_capture(3)
         for packet in capture:
@@ -3453,7 +3678,7 @@ class TestNAT44EI(MethodHolder):
         self.pg_start()
         self.pg0.get_capture(2)
         self.vapi.nat44_ei_ha_flush()
         self.pg_start()
         self.pg0.get_capture(2)
         self.vapi.nat44_ei_ha_flush()
-        stats = self.statistics['/nat44-ei/ha/refresh-event-send']
+        stats = self.statistics["/nat44-ei/ha/refresh-event-send"]
         self.assertEqual(stats[:, 0].sum(), 2)
         capture = self.pg3.get_capture(1)
         p = capture[0]
         self.assertEqual(stats[:, 0].sum(), 2)
         capture = self.pg3.get_capture(1)
         p = capture[0]
@@ -3480,29 +3705,33 @@ class TestNAT44EI(MethodHolder):
                 self.assertEqual(event.total_pkts, 2)
                 self.assertGreater(event.total_bytes, 0)
 
                 self.assertEqual(event.total_pkts, 2)
                 self.assertGreater(event.total_bytes, 0)
 
-        stats = self.statistics['/nat44-ei/ha/ack-recv']
-        ack = (Ether(dst=self.pg3.local_mac, src=self.pg3.remote_mac) /
-               IP(src=self.pg3.remote_ip4, dst=self.pg3.local_ip4) /
-               UDP(sport=12346, dport=12345) /
-               HANATStateSync(sequence_number=seq, flags='ACK',
-                              thread_index=hanat.thread_index))
+        stats = self.statistics["/nat44-ei/ha/ack-recv"]
+        ack = (
+            Ether(dst=self.pg3.local_mac, src=self.pg3.remote_mac)
+            / IP(src=self.pg3.remote_ip4, dst=self.pg3.local_ip4)
+            / UDP(sport=12346, dport=12345)
+            / HANATStateSync(
+                sequence_number=seq, flags="ACK", thread_index=hanat.thread_index
+            )
+        )
         self.pg3.add_stream(ack)
         self.pg_start()
         self.pg3.add_stream(ack)
         self.pg_start()
-        stats = self.statistics['/nat44-ei/ha/ack-recv']
+        stats = self.statistics["/nat44-ei/ha/ack-recv"]
         self.assertEqual(stats[:, 0].sum(), 2)
 
     def test_ha_recv(self):
         self.assertEqual(stats[:, 0].sum(), 2)
 
     def test_ha_recv(self):
-        """ NAT44EI Receive HA session synchronization events (passive) """
+        """NAT44EI Receive HA session synchronization events (passive)"""
         self.nat44_add_address(self.nat_addr)
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
         self.nat44_add_address(self.nat_addr)
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg0.sw_if_index,
-            flags=flags, is_add=1)
+            sw_if_index=self.pg0.sw_if_index, flags=flags, is_add=1
+        )
         self.vapi.nat44_ei_interface_add_del_feature(
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg1.sw_if_index,
-            is_add=1)
-        self.vapi.nat44_ei_ha_set_listener(ip_address=self.pg3.local_ip4,
-                                           port=12345, path_mtu=512)
+            sw_if_index=self.pg1.sw_if_index, is_add=1
+        )
+        self.vapi.nat44_ei_ha_set_listener(
+            ip_address=self.pg3.local_ip4, port=12345, path_mtu=512
+        )
         bind_layers(UDP, HANATStateSync, sport=12345)
 
         # this is a bit tricky - HA dictates thread index due to how it's
         bind_layers(UDP, HANATStateSync, sport=12345)
 
         # this is a bit tricky - HA dictates thread index due to how it's
@@ -3512,11 +3741,12 @@ class TestNAT44EI(MethodHolder):
         # IP address) and out2in (based on outside port)
 
         # first choose a thread index which is correct for IP
         # IP address) and out2in (based on outside port)
 
         # first choose a thread index which is correct for IP
-        thread_index = get_nat44_ei_in2out_worker_index(self.pg0.remote_ip4,
-                                                        self.vpp_worker_count)
+        thread_index = get_nat44_ei_in2out_worker_index(
+            self.pg0.remote_ip4, self.vpp_worker_count
+        )
 
         # now pick a port which is correct for given thread
 
         # now pick a port which is correct for given thread
-        port_per_thread = int((0xffff-1024) / max(1, self.vpp_worker_count))
+        port_per_thread = int((0xFFFF - 1024) / max(1, self.vpp_worker_count))
         self.tcp_port_out = 1024 + random.randint(1, port_per_thread)
         self.udp_port_out = 1024 + random.randint(1, port_per_thread)
         if self.vpp_worker_count > 0:
         self.tcp_port_out = 1024 + random.randint(1, port_per_thread)
         self.udp_port_out = 1024 + random.randint(1, port_per_thread)
         if self.vpp_worker_count > 0:
@@ -3524,25 +3754,43 @@ class TestNAT44EI(MethodHolder):
             self.udp_port_out += port_per_thread * (thread_index - 1)
 
         # send HA session add events to failover/passive
             self.udp_port_out += port_per_thread * (thread_index - 1)
 
         # send HA session add events to failover/passive
-        p = (Ether(dst=self.pg3.local_mac, src=self.pg3.remote_mac) /
-             IP(src=self.pg3.remote_ip4, dst=self.pg3.local_ip4) /
-             UDP(sport=12346, dport=12345) /
-             HANATStateSync(sequence_number=1, events=[
-                 Event(event_type='add', protocol='tcp',
-                       in_addr=self.pg0.remote_ip4, out_addr=self.nat_addr,
-                       in_port=self.tcp_port_in, out_port=self.tcp_port_out,
-                       eh_addr=self.pg1.remote_ip4,
-                       ehn_addr=self.pg1.remote_ip4,
-                       eh_port=self.tcp_external_port,
-                       ehn_port=self.tcp_external_port, fib_index=0),
-                 Event(event_type='add', protocol='udp',
-                       in_addr=self.pg0.remote_ip4, out_addr=self.nat_addr,
-                       in_port=self.udp_port_in, out_port=self.udp_port_out,
-                       eh_addr=self.pg1.remote_ip4,
-                       ehn_addr=self.pg1.remote_ip4,
-                       eh_port=self.udp_external_port,
-                       ehn_port=self.udp_external_port, fib_index=0)],
-                 thread_index=thread_index))
+        p = (
+            Ether(dst=self.pg3.local_mac, src=self.pg3.remote_mac)
+            / IP(src=self.pg3.remote_ip4, dst=self.pg3.local_ip4)
+            / UDP(sport=12346, dport=12345)
+            / HANATStateSync(
+                sequence_number=1,
+                events=[
+                    Event(
+                        event_type="add",
+                        protocol="tcp",
+                        in_addr=self.pg0.remote_ip4,
+                        out_addr=self.nat_addr,
+                        in_port=self.tcp_port_in,
+                        out_port=self.tcp_port_out,
+                        eh_addr=self.pg1.remote_ip4,
+                        ehn_addr=self.pg1.remote_ip4,
+                        eh_port=self.tcp_external_port,
+                        ehn_port=self.tcp_external_port,
+                        fib_index=0,
+                    ),
+                    Event(
+                        event_type="add",
+                        protocol="udp",
+                        in_addr=self.pg0.remote_ip4,
+                        out_addr=self.nat_addr,
+                        in_port=self.udp_port_in,
+                        out_port=self.udp_port_out,
+                        eh_addr=self.pg1.remote_ip4,
+                        ehn_addr=self.pg1.remote_ip4,
+                        eh_port=self.udp_external_port,
+                        ehn_port=self.udp_external_port,
+                        fib_index=0,
+                    ),
+                ],
+                thread_index=thread_index,
+            )
+        )
 
         self.pg3.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
 
         self.pg3.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
@@ -3557,49 +3805,57 @@ class TestNAT44EI(MethodHolder):
             raise
         else:
             self.assertEqual(hanat.sequence_number, 1)
             raise
         else:
             self.assertEqual(hanat.sequence_number, 1)
-            self.assertEqual(hanat.flags, 'ACK')
+            self.assertEqual(hanat.flags, "ACK")
             self.assertEqual(hanat.version, 1)
             self.assertEqual(hanat.thread_index, thread_index)
             self.assertEqual(hanat.version, 1)
             self.assertEqual(hanat.thread_index, thread_index)
-        stats = self.statistics['/nat44-ei/ha/ack-send']
+        stats = self.statistics["/nat44-ei/ha/ack-send"]
         self.assertEqual(stats[:, 0].sum(), 1)
         self.assertEqual(stats[:, 0].sum(), 1)
-        stats = self.statistics['/nat44-ei/ha/add-event-recv']
+        stats = self.statistics["/nat44-ei/ha/add-event-recv"]
         self.assertEqual(stats[:, 0].sum(), 2)
         self.assertEqual(stats[:, 0].sum(), 2)
-        users = self.statistics['/nat44-ei/total-users']
+        users = self.statistics["/nat44-ei/total-users"]
         self.assertEqual(users[:, 0].sum(), 1)
         self.assertEqual(users[:, 0].sum(), 1)
-        sessions = self.statistics['/nat44-ei/total-sessions']
+        sessions = self.statistics["/nat44-ei/total-sessions"]
         self.assertEqual(sessions[:, 0].sum(), 2)
         users = self.vapi.nat44_ei_user_dump()
         self.assertEqual(len(users), 1)
         self.assertEqual(sessions[:, 0].sum(), 2)
         users = self.vapi.nat44_ei_user_dump()
         self.assertEqual(len(users), 1)
-        self.assertEqual(str(users[0].ip_address),
-                         self.pg0.remote_ip4)
+        self.assertEqual(str(users[0].ip_address), self.pg0.remote_ip4)
         # there should be 2 sessions created by HA
         sessions = self.vapi.nat44_ei_user_session_dump(
         # there should be 2 sessions created by HA
         sessions = self.vapi.nat44_ei_user_session_dump(
-            users[0].ip_address, users[0].vrf_id)
+            users[0].ip_address, users[0].vrf_id
+        )
         self.assertEqual(len(sessions), 2)
         for session in sessions:
         self.assertEqual(len(sessions), 2)
         for session in sessions:
-            self.assertEqual(str(session.inside_ip_address),
-                             self.pg0.remote_ip4)
-            self.assertEqual(str(session.outside_ip_address),
-                             self.nat_addr)
-            self.assertIn(session.inside_port,
-                          [self.tcp_port_in, self.udp_port_in])
-            self.assertIn(session.outside_port,
-                          [self.tcp_port_out, self.udp_port_out])
+            self.assertEqual(str(session.inside_ip_address), self.pg0.remote_ip4)
+            self.assertEqual(str(session.outside_ip_address), self.nat_addr)
+            self.assertIn(session.inside_port, [self.tcp_port_in, self.udp_port_in])
+            self.assertIn(session.outside_port, [self.tcp_port_out, self.udp_port_out])
             self.assertIn(session.protocol, [IP_PROTOS.tcp, IP_PROTOS.udp])
 
         # send HA session delete event to failover/passive
             self.assertIn(session.protocol, [IP_PROTOS.tcp, IP_PROTOS.udp])
 
         # send HA session delete event to failover/passive
-        p = (Ether(dst=self.pg3.local_mac, src=self.pg3.remote_mac) /
-             IP(src=self.pg3.remote_ip4, dst=self.pg3.local_ip4) /
-             UDP(sport=12346, dport=12345) /
-             HANATStateSync(sequence_number=2, events=[
-                 Event(event_type='del', protocol='udp',
-                       in_addr=self.pg0.remote_ip4, out_addr=self.nat_addr,
-                       in_port=self.udp_port_in, out_port=self.udp_port_out,
-                       eh_addr=self.pg1.remote_ip4,
-                       ehn_addr=self.pg1.remote_ip4,
-                       eh_port=self.udp_external_port,
-                       ehn_port=self.udp_external_port, fib_index=0)],
-                 thread_index=thread_index))
+        p = (
+            Ether(dst=self.pg3.local_mac, src=self.pg3.remote_mac)
+            / IP(src=self.pg3.remote_ip4, dst=self.pg3.local_ip4)
+            / UDP(sport=12346, dport=12345)
+            / HANATStateSync(
+                sequence_number=2,
+                events=[
+                    Event(
+                        event_type="del",
+                        protocol="udp",
+                        in_addr=self.pg0.remote_ip4,
+                        out_addr=self.nat_addr,
+                        in_port=self.udp_port_in,
+                        out_port=self.udp_port_out,
+                        eh_addr=self.pg1.remote_ip4,
+                        ehn_addr=self.pg1.remote_ip4,
+                        eh_port=self.udp_external_port,
+                        ehn_port=self.udp_external_port,
+                        fib_index=0,
+                    )
+                ],
+                thread_index=thread_index,
+            )
+        )
 
         self.pg3.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
 
         self.pg3.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
@@ -3614,37 +3870,49 @@ class TestNAT44EI(MethodHolder):
             raise
         else:
             self.assertEqual(hanat.sequence_number, 2)
             raise
         else:
             self.assertEqual(hanat.sequence_number, 2)
-            self.assertEqual(hanat.flags, 'ACK')
+            self.assertEqual(hanat.flags, "ACK")
             self.assertEqual(hanat.version, 1)
         users = self.vapi.nat44_ei_user_dump()
         self.assertEqual(len(users), 1)
             self.assertEqual(hanat.version, 1)
         users = self.vapi.nat44_ei_user_dump()
         self.assertEqual(len(users), 1)
-        self.assertEqual(str(users[0].ip_address),
-                         self.pg0.remote_ip4)
+        self.assertEqual(str(users[0].ip_address), self.pg0.remote_ip4)
         # now we should have only 1 session, 1 deleted by HA
         # now we should have only 1 session, 1 deleted by HA
-        sessions = self.vapi.nat44_ei_user_session_dump(users[0].ip_address,
-                                                        users[0].vrf_id)
+        sessions = self.vapi.nat44_ei_user_session_dump(
+            users[0].ip_address, users[0].vrf_id
+        )
         self.assertEqual(len(sessions), 1)
         self.assertEqual(len(sessions), 1)
-        stats = self.statistics['/nat44-ei/ha/del-event-recv']
+        stats = self.statistics["/nat44-ei/ha/del-event-recv"]
         self.assertEqual(stats[:, 0].sum(), 1)
 
         self.assertEqual(stats[:, 0].sum(), 1)
 
-        stats = self.statistics.get_err_counter(
-            '/err/nat44-ei-ha/pkts-processed')
+        stats = self.statistics.get_err_counter("/err/nat44-ei-ha/pkts-processed")
         self.assertEqual(stats, 2)
 
         # send HA session refresh event to failover/passive
         self.assertEqual(stats, 2)
 
         # send HA session refresh event to failover/passive
-        p = (Ether(dst=self.pg3.local_mac, src=self.pg3.remote_mac) /
-             IP(src=self.pg3.remote_ip4, dst=self.pg3.local_ip4) /
-             UDP(sport=12346, dport=12345) /
-             HANATStateSync(sequence_number=3, events=[
-                 Event(event_type='refresh', protocol='tcp',
-                       in_addr=self.pg0.remote_ip4, out_addr=self.nat_addr,
-                       in_port=self.tcp_port_in, out_port=self.tcp_port_out,
-                       eh_addr=self.pg1.remote_ip4,
-                       ehn_addr=self.pg1.remote_ip4,
-                       eh_port=self.tcp_external_port,
-                       ehn_port=self.tcp_external_port, fib_index=0,
-                       total_bytes=1024, total_pkts=2)],
-                 thread_index=thread_index))
+        p = (
+            Ether(dst=self.pg3.local_mac, src=self.pg3.remote_mac)
+            / IP(src=self.pg3.remote_ip4, dst=self.pg3.local_ip4)
+            / UDP(sport=12346, dport=12345)
+            / HANATStateSync(
+                sequence_number=3,
+                events=[
+                    Event(
+                        event_type="refresh",
+                        protocol="tcp",
+                        in_addr=self.pg0.remote_ip4,
+                        out_addr=self.nat_addr,
+                        in_port=self.tcp_port_in,
+                        out_port=self.tcp_port_out,
+                        eh_addr=self.pg1.remote_ip4,
+                        ehn_addr=self.pg1.remote_ip4,
+                        eh_port=self.tcp_external_port,
+                        ehn_port=self.tcp_external_port,
+                        fib_index=0,
+                        total_bytes=1024,
+                        total_pkts=2,
+                    )
+                ],
+                thread_index=thread_index,
+            )
+        )
         self.pg3.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg3.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -3658,29 +3926,30 @@ class TestNAT44EI(MethodHolder):
             raise
         else:
             self.assertEqual(hanat.sequence_number, 3)
             raise
         else:
             self.assertEqual(hanat.sequence_number, 3)
-            self.assertEqual(hanat.flags, 'ACK')
+            self.assertEqual(hanat.flags, "ACK")
             self.assertEqual(hanat.version, 1)
         users = self.vapi.nat44_ei_user_dump()
         self.assertEqual(len(users), 1)
             self.assertEqual(hanat.version, 1)
         users = self.vapi.nat44_ei_user_dump()
         self.assertEqual(len(users), 1)
-        self.assertEqual(str(users[0].ip_address),
-                         self.pg0.remote_ip4)
+        self.assertEqual(str(users[0].ip_address), self.pg0.remote_ip4)
         sessions = self.vapi.nat44_ei_user_session_dump(
         sessions = self.vapi.nat44_ei_user_session_dump(
-            users[0].ip_address, users[0].vrf_id)
+            users[0].ip_address, users[0].vrf_id
+        )
         self.assertEqual(len(sessions), 1)
         session = sessions[0]
         self.assertEqual(session.total_bytes, 1024)
         self.assertEqual(session.total_pkts, 2)
         self.assertEqual(len(sessions), 1)
         session = sessions[0]
         self.assertEqual(session.total_bytes, 1024)
         self.assertEqual(session.total_pkts, 2)
-        stats = self.statistics['/nat44-ei/ha/refresh-event-recv']
+        stats = self.statistics["/nat44-ei/ha/refresh-event-recv"]
         self.assertEqual(stats[:, 0].sum(), 1)
 
         self.assertEqual(stats[:, 0].sum(), 1)
 
-        stats = self.statistics.get_err_counter(
-            '/err/nat44-ei-ha/pkts-processed')
+        stats = self.statistics.get_err_counter("/err/nat44-ei-ha/pkts-processed")
         self.assertEqual(stats, 3)
 
         # send packet to test session created by HA
         self.assertEqual(stats, 3)
 
         # send packet to test session created by HA
-        p = (Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac) /
-             IP(src=self.pg1.remote_ip4, dst=self.nat_addr) /
-             TCP(sport=self.tcp_external_port, dport=self.tcp_port_out))
+        p = (
+            Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac)
+            / IP(src=self.pg1.remote_ip4, dst=self.nat_addr)
+            / TCP(sport=self.tcp_external_port, dport=self.tcp_port_out)
+        )
         self.pg1.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg1.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -3706,7 +3975,7 @@ class TestNAT44EI(MethodHolder):
         return self.vapi.nat44_ei_show_fq_options().frame_queue_nelts
 
     def test_set_frame_queue_nelts(self):
         return self.vapi.nat44_ei_show_fq_options().frame_queue_nelts
 
     def test_set_frame_queue_nelts(self):
-        """ NAT44EI API test - worker handoff frame queue elements """
+        """NAT44EI API test - worker handoff frame queue elements"""
         self.assertEqual(self.reconfigure_frame_queue_nelts(512), 512)
 
     def show_commands_at_teardown(self):
         self.assertEqual(self.reconfigure_frame_queue_nelts(512), 512)
 
     def show_commands_at_teardown(self):
@@ -3718,11 +3987,10 @@ class TestNAT44EI(MethodHolder):
         self.logger.info(self.vapi.cli("show nat44 ei sessions detail"))
         self.logger.info(self.vapi.cli("show nat44 ei hash tables detail"))
         self.logger.info(self.vapi.cli("show nat44 ei ha"))
         self.logger.info(self.vapi.cli("show nat44 ei sessions detail"))
         self.logger.info(self.vapi.cli("show nat44 ei hash tables detail"))
         self.logger.info(self.vapi.cli("show nat44 ei ha"))
-        self.logger.info(
-            self.vapi.cli("show nat44 ei addr-port-assignment-alg"))
+        self.logger.info(self.vapi.cli("show nat44 ei addr-port-assignment-alg"))
 
     def test_outside_address_distribution(self):
 
     def test_outside_address_distribution(self):
-        """ Outside address distribution based on source address """
+        """Outside address distribution based on source address"""
 
         x = 100
         nat_addresses = []
 
         x = 100
         nat_addresses = []
@@ -3733,16 +4001,18 @@ class TestNAT44EI(MethodHolder):
 
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
 
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg0.sw_if_index,
-            flags=flags, is_add=1)
+            sw_if_index=self.pg0.sw_if_index, flags=flags, is_add=1
+        )
         self.vapi.nat44_ei_interface_add_del_feature(
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg1.sw_if_index,
-            is_add=1)
+            sw_if_index=self.pg1.sw_if_index, is_add=1
+        )
 
         self.vapi.nat44_ei_add_del_address_range(
             first_ip_address=nat_addresses[0],
             last_ip_address=nat_addresses[-1],
 
         self.vapi.nat44_ei_add_del_address_range(
             first_ip_address=nat_addresses[0],
             last_ip_address=nat_addresses[-1],
-            vrf_id=0xFFFFFFFF, is_add=1)
+            vrf_id=0xFFFFFFFF,
+            is_add=1,
+        )
 
         self.pg0.generate_remote_hosts(x)
 
 
         self.pg0.generate_remote_hosts(x)
 
@@ -3750,11 +4020,12 @@ class TestNAT44EI(MethodHolder):
         for i in range(x):
             info = self.create_packet_info(self.pg0, self.pg1)
             payload = self.info_to_payload(info)
         for i in range(x):
             info = self.create_packet_info(self.pg0, self.pg1)
             payload = self.info_to_payload(info)
-            p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-                 IP(src=self.pg0.remote_hosts[i].ip4,
-                     dst=self.pg1.remote_ip4) /
-                 UDP(sport=7000+i, dport=8000+i) /
-                 Raw(payload))
+            p = (
+                Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+                / IP(src=self.pg0.remote_hosts[i].ip4, dst=self.pg1.remote_ip4)
+                / UDP(sport=7000 + i, dport=8000 + i)
+                / Raw(payload)
+            )
             info.data = p
             pkts.append(p)
 
             info.data = p
             pkts.append(p)
 
@@ -3772,21 +4043,23 @@ class TestNAT44EI(MethodHolder):
             packed = socket.inet_aton(p_sent[IP].src)
             numeric = struct.unpack("!L", packed)[0]
             numeric = socket.htonl(numeric)
             packed = socket.inet_aton(p_sent[IP].src)
             numeric = struct.unpack("!L", packed)[0]
             numeric = socket.htonl(numeric)
-            a = nat_addresses[(numeric-1) % len(nat_addresses)]
+            a = nat_addresses[(numeric - 1) % len(nat_addresses)]
             self.assertEqual(
             self.assertEqual(
-                a, p_recvd[IP].src,
+                a,
+                p_recvd[IP].src,
                 "Invalid packet (src IP %s translated to %s, but expected %s)"
                 "Invalid packet (src IP %s translated to %s, but expected %s)"
-                % (p_sent[IP].src, p_recvd[IP].src, a))
+                % (p_sent[IP].src, p_recvd[IP].src, a),
+            )
 
     def test_default_user_sessions(self):
 
     def test_default_user_sessions(self):
-        """ NAT44EI default per-user session limit is used and reported """
+        """NAT44EI default per-user session limit is used and reported"""
         nat44_ei_config = self.vapi.nat44_ei_show_running_config()
         # a nonzero default should be reported for user_sessions
         self.assertNotEqual(nat44_ei_config.user_sessions, 0)
 
 
 class TestNAT44Out2InDPO(MethodHolder):
         nat44_ei_config = self.vapi.nat44_ei_show_running_config()
         # a nonzero default should be reported for user_sessions
         self.assertNotEqual(nat44_ei_config.user_sessions, 0)
 
 
 class TestNAT44Out2InDPO(MethodHolder):
-    """ NAT44EI Test Cases using out2in DPO """
+    """NAT44EI Test Cases using out2in DPO"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -3799,8 +4072,8 @@ class TestNAT44Out2InDPO(MethodHolder):
         cls.udp_port_out = 6304
         cls.icmp_id_in = 6305
         cls.icmp_id_out = 6305
         cls.udp_port_out = 6304
         cls.icmp_id_in = 6305
         cls.icmp_id_out = 6305
-        cls.nat_addr = '10.0.0.3'
-        cls.dst_ip4 = '192.168.70.1'
+        cls.nat_addr = "10.0.0.3"
+        cls.dst_ip4 = "192.168.70.1"
 
         cls.create_pg_interfaces(range(2))
 
 
         cls.create_pg_interfaces(range(2))
 
@@ -3812,10 +4085,13 @@ class TestNAT44Out2InDPO(MethodHolder):
         cls.pg1.config_ip6()
         cls.pg1.resolve_ndp()
 
         cls.pg1.config_ip6()
         cls.pg1.resolve_ndp()
 
-        r1 = VppIpRoute(cls, "::", 0,
-                        [VppRoutePath(cls.pg1.remote_ip6,
-                                      cls.pg1.sw_if_index)],
-                        register=False)
+        r1 = VppIpRoute(
+            cls,
+            "::",
+            0,
+            [VppRoutePath(cls.pg1.remote_ip6, cls.pg1.sw_if_index)],
+            register=False,
+        )
         r1.add_vpp_config()
 
     def setUp(self):
         r1.add_vpp_config()
 
     def setUp(self):
@@ -3830,37 +4106,44 @@ class TestNAT44Out2InDPO(MethodHolder):
             self.vapi.cli("clear logging")
 
     def configure_xlat(self):
             self.vapi.cli("clear logging")
 
     def configure_xlat(self):
-        self.dst_ip6_pfx = '1:2:3::'
-        self.dst_ip6_pfx_n = socket.inet_pton(socket.AF_INET6,
-                                              self.dst_ip6_pfx)
+        self.dst_ip6_pfx = "1:2:3::"
+        self.dst_ip6_pfx_n = socket.inet_pton(socket.AF_INET6, self.dst_ip6_pfx)
         self.dst_ip6_pfx_len = 96
         self.dst_ip6_pfx_len = 96
-        self.src_ip6_pfx = '4:5:6::'
-        self.src_ip6_pfx_n = socket.inet_pton(socket.AF_INET6,
-                                              self.src_ip6_pfx)
+        self.src_ip6_pfx = "4:5:6::"
+        self.src_ip6_pfx_n = socket.inet_pton(socket.AF_INET6, self.src_ip6_pfx)
         self.src_ip6_pfx_len = 96
         self.src_ip6_pfx_len = 96
-        self.vapi.map_add_domain(self.dst_ip6_pfx_n, self.dst_ip6_pfx_len,
-                                 self.src_ip6_pfx_n, self.src_ip6_pfx_len,
-                                 '\x00\x00\x00\x00', 0)
-
-    @unittest.skip('Temporary disabled')
+        self.vapi.map_add_domain(
+            self.dst_ip6_pfx_n,
+            self.dst_ip6_pfx_len,
+            self.src_ip6_pfx_n,
+            self.src_ip6_pfx_len,
+            "\x00\x00\x00\x00",
+            0,
+        )
+
+    @unittest.skip("Temporary disabled")
     def test_464xlat_ce(self):
     def test_464xlat_ce(self):
-        """ Test 464XLAT CE with NAT44EI """
+        """Test 464XLAT CE with NAT44EI"""
 
         self.configure_xlat()
 
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
 
         self.configure_xlat()
 
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg0.sw_if_index,
-            flags=flags, is_add=1)
+            sw_if_index=self.pg0.sw_if_index, flags=flags, is_add=1
+        )
         self.vapi.nat44_ei_add_del_address_range(
             first_ip_address=self.nat_addr_n,
             last_ip_address=self.nat_addr_n,
         self.vapi.nat44_ei_add_del_address_range(
             first_ip_address=self.nat_addr_n,
             last_ip_address=self.nat_addr_n,
-            vrf_id=0xFFFFFFFF, is_add=1)
+            vrf_id=0xFFFFFFFF,
+            is_add=1,
+        )
 
 
-        out_src_ip6 = self.compose_ip6(self.dst_ip4, self.dst_ip6_pfx,
-                                       self.dst_ip6_pfx_len)
-        out_dst_ip6 = self.compose_ip6(self.nat_addr, self.src_ip6_pfx,
-                                       self.src_ip6_pfx_len)
+        out_src_ip6 = self.compose_ip6(
+            self.dst_ip4, self.dst_ip6_pfx, self.dst_ip6_pfx_len
+        )
+        out_dst_ip6 = self.compose_ip6(
+            self.nat_addr, self.src_ip6_pfx, self.src_ip6_pfx_len
+        )
 
         try:
             pkts = self.create_stream_in(self.pg0, self.pg1, self.dst_ip4)
 
         try:
             pkts = self.create_stream_in(self.pg0, self.pg1, self.dst_ip4)
@@ -3868,11 +4151,9 @@ class TestNAT44Out2InDPO(MethodHolder):
             self.pg_enable_capture(self.pg_interfaces)
             self.pg_start()
             capture = self.pg1.get_capture(len(pkts))
             self.pg_enable_capture(self.pg_interfaces)
             self.pg_start()
             capture = self.pg1.get_capture(len(pkts))
-            self.verify_capture_out_ip6(capture, nat_ip=out_dst_ip6,
-                                        dst_ip=out_src_ip6)
+            self.verify_capture_out_ip6(capture, nat_ip=out_dst_ip6, dst_ip=out_src_ip6)
 
 
-            pkts = self.create_stream_out_ip6(self.pg1, out_src_ip6,
-                                              out_dst_ip6)
+            pkts = self.create_stream_out_ip6(self.pg1, out_src_ip6, out_dst_ip6)
             self.pg1.add_stream(pkts)
             self.pg_enable_capture(self.pg_interfaces)
             self.pg_start()
             self.pg1.add_stream(pkts)
             self.pg_enable_capture(self.pg_interfaces)
             self.pg_start()
@@ -3880,31 +4161,35 @@ class TestNAT44Out2InDPO(MethodHolder):
             self.verify_capture_in(capture, self.pg0)
         finally:
             self.vapi.nat44_ei_interface_add_del_feature(
             self.verify_capture_in(capture, self.pg0)
         finally:
             self.vapi.nat44_ei_interface_add_del_feature(
-                sw_if_index=self.pg0.sw_if_index,
-                flags=flags)
+                sw_if_index=self.pg0.sw_if_index, flags=flags
+            )
             self.vapi.nat44_ei_add_del_address_range(
                 first_ip_address=self.nat_addr_n,
                 last_ip_address=self.nat_addr_n,
             self.vapi.nat44_ei_add_del_address_range(
                 first_ip_address=self.nat_addr_n,
                 last_ip_address=self.nat_addr_n,
-                vrf_id=0xFFFFFFFF)
+                vrf_id=0xFFFFFFFF,
+            )
 
 
-    @unittest.skip('Temporary disabled')
+    @unittest.skip("Temporary disabled")
     def test_464xlat_ce_no_nat(self):
     def test_464xlat_ce_no_nat(self):
-        """ Test 464XLAT CE without NAT44EI """
+        """Test 464XLAT CE without NAT44EI"""
 
         self.configure_xlat()
 
 
         self.configure_xlat()
 
-        out_src_ip6 = self.compose_ip6(self.dst_ip4, self.dst_ip6_pfx,
-                                       self.dst_ip6_pfx_len)
-        out_dst_ip6 = self.compose_ip6(self.pg0.remote_ip4, self.src_ip6_pfx,
-                                       self.src_ip6_pfx_len)
+        out_src_ip6 = self.compose_ip6(
+            self.dst_ip4, self.dst_ip6_pfx, self.dst_ip6_pfx_len
+        )
+        out_dst_ip6 = self.compose_ip6(
+            self.pg0.remote_ip4, self.src_ip6_pfx, self.src_ip6_pfx_len
+        )
 
         pkts = self.create_stream_in(self.pg0, self.pg1, self.dst_ip4)
         self.pg0.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         capture = self.pg1.get_capture(len(pkts))
 
         pkts = self.create_stream_in(self.pg0, self.pg1, self.dst_ip4)
         self.pg0.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         capture = self.pg1.get_capture(len(pkts))
-        self.verify_capture_out_ip6(capture, dst_ip=out_src_ip6,
-                                    nat_ip=out_dst_ip6, same_port=True)
+        self.verify_capture_out_ip6(
+            capture, dst_ip=out_src_ip6, nat_ip=out_dst_ip6, same_port=True
+        )
 
         pkts = self.create_stream_out_ip6(self.pg1, out_src_ip6, out_dst_ip6)
         self.pg1.add_stream(pkts)
 
         pkts = self.create_stream_out_ip6(self.pg1, out_src_ip6, out_dst_ip6)
         self.pg1.add_stream(pkts)
@@ -3915,7 +4200,8 @@ class TestNAT44Out2InDPO(MethodHolder):
 
 
 class TestNAT44EIMW(MethodHolder):
 
 
 class TestNAT44EIMW(MethodHolder):
-    """ NAT44EI Test Cases (multiple workers) """
+    """NAT44EI Test Cases (multiple workers)"""
+
     vpp_worker_count = 2
     max_translations = 10240
     max_users = 10240
     vpp_worker_count = 2
     max_translations = 10240
     max_users = 10240
@@ -3931,7 +4217,7 @@ class TestNAT44EIMW(MethodHolder):
         cls.udp_port_out = 6304
         cls.icmp_id_in = 6305
         cls.icmp_id_out = 6305
         cls.udp_port_out = 6304
         cls.icmp_id_in = 6305
         cls.icmp_id_out = 6305
-        cls.nat_addr = '10.0.0.3'
+        cls.nat_addr = "10.0.0.3"
         cls.ipfix_src_port = 4739
         cls.ipfix_domain_id = 1
         cls.tcp_external_port = 80
         cls.ipfix_src_port = 4739
         cls.ipfix_domain_id = 1
         cls.tcp_external_port = 80
@@ -3952,8 +4238,8 @@ class TestNAT44EIMW(MethodHolder):
         cls.pg1.configure_ipv4_neighbors()
 
         cls.overlapping_interfaces = list(list(cls.pg_interfaces[4:7]))
         cls.pg1.configure_ipv4_neighbors()
 
         cls.overlapping_interfaces = list(list(cls.pg_interfaces[4:7]))
-        cls.vapi.ip_table_add_del(is_add=1, table={'table_id': 10})
-        cls.vapi.ip_table_add_del(is_add=1, table={'table_id': 20})
+        cls.vapi.ip_table_add_del(is_add=1, table={"table_id": 10})
+        cls.vapi.ip_table_add_del(is_add=1, table={"table_id": 20})
 
         cls.pg4._local_ip4 = "172.16.255.1"
         cls.pg4._remote_hosts[0]._ip4 = "172.16.255.2"
 
         cls.pg4._local_ip4 = "172.16.255.1"
         cls.pg4._remote_hosts[0]._ip4 = "172.16.255.2"
@@ -3975,8 +4261,8 @@ class TestNAT44EIMW(MethodHolder):
         cls.pg9.generate_remote_hosts(2)
         cls.pg9.config_ip4()
         cls.vapi.sw_interface_add_del_address(
         cls.pg9.generate_remote_hosts(2)
         cls.pg9.config_ip4()
         cls.vapi.sw_interface_add_del_address(
-            sw_if_index=cls.pg9.sw_if_index,
-            prefix="10.0.0.1/24")
+            sw_if_index=cls.pg9.sw_if_index, prefix="10.0.0.1/24"
+        )
 
         cls.pg9.admin_up()
         cls.pg9.resolve_arp()
 
         cls.pg9.admin_up()
         cls.pg9.resolve_arp()
@@ -3987,16 +4273,15 @@ class TestNAT44EIMW(MethodHolder):
     def setUp(self):
         super(TestNAT44EIMW, self).setUp()
         self.vapi.nat44_ei_plugin_enable_disable(
     def setUp(self):
         super(TestNAT44EIMW, self).setUp()
         self.vapi.nat44_ei_plugin_enable_disable(
-            sessions=self.max_translations,
-            users=self.max_users, enable=1)
+            sessions=self.max_translations, users=self.max_users, enable=1
+        )
 
     def tearDown(self):
         super(TestNAT44EIMW, self).tearDown()
         if not self.vpp_dead:
             self.vapi.nat44_ei_ipfix_enable_disable(
 
     def tearDown(self):
         super(TestNAT44EIMW, self).tearDown()
         if not self.vpp_dead:
             self.vapi.nat44_ei_ipfix_enable_disable(
-                domain_id=self.ipfix_domain_id,
-                src_port=self.ipfix_src_port,
-                enable=0)
+                domain_id=self.ipfix_domain_id, src_port=self.ipfix_src_port, enable=0
+            )
             self.ipfix_src_port = 4739
             self.ipfix_domain_id = 1
 
             self.ipfix_src_port = 4739
             self.ipfix_domain_id = 1
 
@@ -4004,7 +4289,7 @@ class TestNAT44EIMW(MethodHolder):
             self.vapi.cli("clear logging")
 
     def test_hairpinning(self):
             self.vapi.cli("clear logging")
 
     def test_hairpinning(self):
-        """ NAT44EI hairpinning - 1:1 NAPT """
+        """NAT44EI hairpinning - 1:1 NAPT"""
 
         host = self.pg0.remote_hosts[0]
         server = self.pg0.remote_hosts[1]
 
         host = self.pg0.remote_hosts[0]
         server = self.pg0.remote_hosts[1]
@@ -4018,22 +4303,28 @@ class TestNAT44EIMW(MethodHolder):
         self.nat44_add_address(self.nat_addr)
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
         self.nat44_add_address(self.nat_addr)
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg0.sw_if_index,
-            flags=flags, is_add=1)
+            sw_if_index=self.pg0.sw_if_index, flags=flags, is_add=1
+        )
         self.vapi.nat44_ei_interface_add_del_feature(
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg1.sw_if_index,
-            is_add=1)
+            sw_if_index=self.pg1.sw_if_index, is_add=1
+        )
 
         # add static mapping for server
 
         # add static mapping for server
-        self.nat44_add_static_mapping(server.ip4, self.nat_addr,
-                                      server_in_port, server_out_port,
-                                      proto=IP_PROTOS.tcp)
-
-        cnt = self.statistics['/nat44-ei/hairpinning']
+        self.nat44_add_static_mapping(
+            server.ip4,
+            self.nat_addr,
+            server_in_port,
+            server_out_port,
+            proto=IP_PROTOS.tcp,
+        )
+
+        cnt = self.statistics["/nat44-ei/hairpinning"]
         # send packet from host to server
         # send packet from host to server
-        p = (Ether(src=host.mac, dst=self.pg0.local_mac) /
-             IP(src=host.ip4, dst=self.nat_addr) /
-             TCP(sport=host_in_port, dport=server_out_port))
+        p = (
+            Ether(src=host.mac, dst=self.pg0.local_mac)
+            / IP(src=host.ip4, dst=self.nat_addr)
+            / TCP(sport=host_in_port, dport=server_out_port)
+        )
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -4052,15 +4343,17 @@ class TestNAT44EIMW(MethodHolder):
             self.logger.error(ppp("Unexpected or invalid packet:", p))
             raise
 
             self.logger.error(ppp("Unexpected or invalid packet:", p))
             raise
 
-        after = self.statistics['/nat44-ei/hairpinning']
+        after = self.statistics["/nat44-ei/hairpinning"]
 
         if_idx = self.pg0.sw_if_index
         self.assertEqual(after[worker_2][if_idx] - cnt[worker_1][if_idx], 1)
 
         # send reply from server to host
 
         if_idx = self.pg0.sw_if_index
         self.assertEqual(after[worker_2][if_idx] - cnt[worker_1][if_idx], 1)
 
         # send reply from server to host
-        p = (Ether(src=server.mac, dst=self.pg0.local_mac) /
-             IP(src=server.ip4, dst=self.nat_addr) /
-             TCP(sport=server_in_port, dport=host_out_port))
+        p = (
+            Ether(src=server.mac, dst=self.pg0.local_mac)
+            / IP(src=server.ip4, dst=self.nat_addr)
+            / TCP(sport=server_in_port, dport=host_out_port)
+        )
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -4078,13 +4371,13 @@ class TestNAT44EIMW(MethodHolder):
             self.logger.error(ppp("Unexpected or invalid packet:", p))
             raise
 
             self.logger.error(ppp("Unexpected or invalid packet:", p))
             raise
 
-        after = self.statistics['/nat44-ei/hairpinning']
+        after = self.statistics["/nat44-ei/hairpinning"]
         if_idx = self.pg0.sw_if_index
         self.assertEqual(after[worker_1][if_idx] - cnt[worker_1][if_idx], 1)
         self.assertEqual(after[worker_2][if_idx] - cnt[worker_2][if_idx], 2)
 
     def test_hairpinning2(self):
         if_idx = self.pg0.sw_if_index
         self.assertEqual(after[worker_1][if_idx] - cnt[worker_1][if_idx], 1)
         self.assertEqual(after[worker_2][if_idx] - cnt[worker_2][if_idx], 2)
 
     def test_hairpinning2(self):
-        """ NAT44EI hairpinning - 1:1 NAT"""
+        """NAT44EI hairpinning - 1:1 NAT"""
 
         server1_nat_ip = "10.0.0.10"
         server2_nat_ip = "10.0.0.11"
 
         server1_nat_ip = "10.0.0.10"
         server2_nat_ip = "10.0.0.11"
@@ -4097,11 +4390,11 @@ class TestNAT44EIMW(MethodHolder):
         self.nat44_add_address(self.nat_addr)
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
         self.nat44_add_address(self.nat_addr)
         flags = self.config_flags.NAT44_EI_IF_INSIDE
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg0.sw_if_index,
-            flags=flags, is_add=1)
+            sw_if_index=self.pg0.sw_if_index, flags=flags, is_add=1
+        )
         self.vapi.nat44_ei_interface_add_del_feature(
         self.vapi.nat44_ei_interface_add_del_feature(
-            sw_if_index=self.pg1.sw_if_index,
-            is_add=1)
+            sw_if_index=self.pg1.sw_if_index, is_add=1
+        )
 
         # add static mapping for servers
         self.nat44_add_static_mapping(server1.ip4, server1_nat_ip)
 
         # add static mapping for servers
         self.nat44_add_static_mapping(server1.ip4, server1_nat_ip)
@@ -4109,17 +4402,23 @@ class TestNAT44EIMW(MethodHolder):
 
         # host to server1
         pkts = []
 
         # host to server1
         pkts = []
-        p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-             IP(src=host.ip4, dst=server1_nat_ip) /
-             TCP(sport=self.tcp_port_in, dport=server_tcp_port))
+        p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(src=host.ip4, dst=server1_nat_ip)
+            / TCP(sport=self.tcp_port_in, dport=server_tcp_port)
+        )
         pkts.append(p)
         pkts.append(p)
-        p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-             IP(src=host.ip4, dst=server1_nat_ip) /
-             UDP(sport=self.udp_port_in, dport=server_udp_port))
+        p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(src=host.ip4, dst=server1_nat_ip)
+            / UDP(sport=self.udp_port_in, dport=server_udp_port)
+        )
         pkts.append(p)
         pkts.append(p)
-        p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-             IP(src=host.ip4, dst=server1_nat_ip) /
-             ICMP(id=self.icmp_id_in, type='echo-request'))
+        p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(src=host.ip4, dst=server1_nat_ip)
+            / ICMP(id=self.icmp_id_in, type="echo-request")
+        )
         pkts.append(p)
         self.pg0.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
         pkts.append(p)
         self.pg0.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
@@ -4147,17 +4446,23 @@ class TestNAT44EIMW(MethodHolder):
 
         # server1 to host
         pkts = []
 
         # server1 to host
         pkts = []
-        p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-             IP(src=server1.ip4, dst=self.nat_addr) /
-             TCP(sport=server_tcp_port, dport=self.tcp_port_out))
+        p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(src=server1.ip4, dst=self.nat_addr)
+            / TCP(sport=server_tcp_port, dport=self.tcp_port_out)
+        )
         pkts.append(p)
         pkts.append(p)
-        p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-             IP(src=server1.ip4, dst=self.nat_addr) /
-             UDP(sport=server_udp_port, dport=self.udp_port_out))
+        p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(src=server1.ip4, dst=self.nat_addr)
+            / UDP(sport=server_udp_port, dport=self.udp_port_out)
+        )
         pkts.append(p)
         pkts.append(p)
-        p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-             IP(src=server1.ip4, dst=self.nat_addr) /
-             ICMP(id=self.icmp_id_out, type='echo-reply'))
+        p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(src=server1.ip4, dst=self.nat_addr)
+            / ICMP(id=self.icmp_id_out, type="echo-reply")
+        )
         pkts.append(p)
         self.pg0.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
         pkts.append(p)
         self.pg0.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
@@ -4182,17 +4487,23 @@ class TestNAT44EIMW(MethodHolder):
 
         # server2 to server1
         pkts = []
 
         # server2 to server1
         pkts = []
-        p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-             IP(src=server2.ip4, dst=server1_nat_ip) /
-             TCP(sport=self.tcp_port_in, dport=server_tcp_port))
+        p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(src=server2.ip4, dst=server1_nat_ip)
+            / TCP(sport=self.tcp_port_in, dport=server_tcp_port)
+        )
         pkts.append(p)
         pkts.append(p)
-        p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-             IP(src=server2.ip4, dst=server1_nat_ip) /
-             UDP(sport=self.udp_port_in, dport=server_udp_port))
+        p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(src=server2.ip4, dst=server1_nat_ip)
+            / UDP(sport=self.udp_port_in, dport=server_udp_port)
+        )
         pkts.append(p)
         pkts.append(p)
-        p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-             IP(src=server2.ip4, dst=server1_nat_ip) /
-             ICMP(id=self.icmp_id_in, type='echo-request'))
+        p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(src=server2.ip4, dst=server1_nat_ip)
+            / ICMP(id=self.icmp_id_in, type="echo-request")
+        )
         pkts.append(p)
         self.pg0.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
         pkts.append(p)
         self.pg0.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
@@ -4220,17 +4531,23 @@ class TestNAT44EIMW(MethodHolder):
 
         # server1 to server2
         pkts = []
 
         # server1 to server2
         pkts = []
-        p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-             IP(src=server1.ip4, dst=server2_nat_ip) /
-             TCP(sport=server_tcp_port, dport=self.tcp_port_out))
+        p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(src=server1.ip4, dst=server2_nat_ip)
+            / TCP(sport=server_tcp_port, dport=self.tcp_port_out)
+        )
         pkts.append(p)
         pkts.append(p)
-        p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-             IP(src=server1.ip4, dst=server2_nat_ip) /
-             UDP(sport=server_udp_port, dport=self.udp_port_out))
+        p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(src=server1.ip4, dst=server2_nat_ip)
+            / UDP(sport=server_udp_port, dport=self.udp_port_out)
+        )
         pkts.append(p)
         pkts.append(p)
-        p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-             IP(src=server1.ip4, dst=server2_nat_ip) /
-             ICMP(id=self.icmp_id_out, type='echo-reply'))
+        p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(src=server1.ip4, dst=server2_nat_ip)
+            / ICMP(id=self.icmp_id_out, type="echo-reply")
+        )
         pkts.append(p)
         self.pg0.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
         pkts.append(p)
         self.pg0.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
@@ -4254,5 +4571,5 @@ class TestNAT44EIMW(MethodHolder):
                 raise
 
 
                 raise
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index c51adac..214072a 100644 (file)
@@ -16,8 +16,15 @@ from scapy.data import IP_PROTOS
 from scapy.layers.inet import IP, TCP, UDP, ICMP
 from scapy.layers.inet import IPerror, TCPerror, UDPerror, ICMPerror
 from scapy.layers.inet6 import ICMPv6DestUnreach, IPerror6, IPv6ExtHdrFragment
 from scapy.layers.inet import IP, TCP, UDP, ICMP
 from scapy.layers.inet import IPerror, TCPerror, UDPerror, ICMPerror
 from scapy.layers.inet6 import ICMPv6DestUnreach, IPerror6, IPv6ExtHdrFragment
-from scapy.layers.inet6 import IPv6, ICMPv6EchoRequest, ICMPv6EchoReply, \
-    ICMPv6ND_NS, ICMPv6ND_NA, ICMPv6NDOptDstLLAddr, fragment6
+from scapy.layers.inet6 import (
+    IPv6,
+    ICMPv6EchoRequest,
+    ICMPv6EchoReply,
+    ICMPv6ND_NS,
+    ICMPv6ND_NA,
+    ICMPv6NDOptDstLLAddr,
+    fragment6,
+)
 from scapy.layers.l2 import Ether, GRE
 from scapy.packet import Raw
 from syslog_rfc5424_parser import SyslogMessage, ParseError
 from scapy.layers.l2 import Ether, GRE
 from scapy.packet import Raw
 from syslog_rfc5424_parser import SyslogMessage, ParseError
@@ -28,7 +35,7 @@ from vpp_papi import VppEnum
 
 @tag_fixme_vpp_workers
 class TestNAT64(VppTestCase):
 
 @tag_fixme_vpp_workers
 class TestNAT64(VppTestCase):
-    """ NAT64 Test Cases """
+    """NAT64 Test Cases"""
 
     @property
     def SYSLOG_SEVERITY(self):
 
     @property
     def SYSLOG_SEVERITY(self):
@@ -49,10 +56,10 @@ class TestNAT64(VppTestCase):
         cls.icmp_id_in = 6305
         cls.icmp_id_out = 6305
         cls.tcp_external_port = 80
         cls.icmp_id_in = 6305
         cls.icmp_id_out = 6305
         cls.tcp_external_port = 80
-        cls.nat_addr = '10.0.0.3'
+        cls.nat_addr = "10.0.0.3"
         cls.nat_addr_n = socket.inet_pton(socket.AF_INET, cls.nat_addr)
         cls.vrf1_id = 10
         cls.nat_addr_n = socket.inet_pton(socket.AF_INET, cls.nat_addr)
         cls.vrf1_id = 10
-        cls.vrf1_nat_addr = '10.0.10.3'
+        cls.vrf1_nat_addr = "10.0.10.3"
         cls.ipfix_src_port = 4739
         cls.ipfix_domain_id = 1
 
         cls.ipfix_src_port = 4739
         cls.ipfix_domain_id = 1
 
@@ -61,9 +68,9 @@ class TestNAT64(VppTestCase):
         cls.ip6_interfaces.append(cls.pg_interfaces[2])
         cls.ip4_interfaces = list(cls.pg_interfaces[1:2])
 
         cls.ip6_interfaces.append(cls.pg_interfaces[2])
         cls.ip4_interfaces = list(cls.pg_interfaces[1:2])
 
-        cls.vapi.ip_table_add_del(is_add=1,
-                                  table={'table_id': cls.vrf1_id,
-                                         'is_ip6': 1})
+        cls.vapi.ip_table_add_del(
+            is_add=1, table={"table_id": cls.vrf1_id, "is_ip6": 1}
+        )
 
         cls.pg_interfaces[2].set_table_ip6(cls.vrf1_id)
 
 
         cls.pg_interfaces[2].set_table_ip6(cls.vrf1_id)
 
@@ -94,8 +101,7 @@ class TestNAT64(VppTestCase):
 
     def setUp(self):
         super(TestNAT64, self).setUp()
 
     def setUp(self):
         super(TestNAT64, self).setUp()
-        self.vapi.nat64_plugin_enable_disable(enable=1,
-                                              bib_buckets=128, st_buckets=256)
+        self.vapi.nat64_plugin_enable_disable(enable=1, bib_buckets=128, st_buckets=256)
 
     def tearDown(self):
         super(TestNAT64, self).tearDown()
 
     def tearDown(self):
         super(TestNAT64, self).tearDown()
@@ -121,32 +127,37 @@ class TestNAT64(VppTestCase):
         """
         pkts = []
         if pref is None:
         """
         pkts = []
         if pref is None:
-            dst = ''.join(['64:ff9b::', out_if.remote_ip4])
+            dst = "".join(["64:ff9b::", out_if.remote_ip4])
         else:
             dst = self.compose_ip6(out_if.remote_ip4, pref, plen)
 
         # TCP
         else:
             dst = self.compose_ip6(out_if.remote_ip4, pref, plen)
 
         # TCP
-        p = (Ether(dst=in_if.local_mac, src=in_if.remote_mac) /
-             IPv6(src=in_if.remote_ip6, dst=dst, hlim=hlim) /
-             TCP(sport=self.tcp_port_in, dport=20))
+        p = (
+            Ether(dst=in_if.local_mac, src=in_if.remote_mac)
+            / IPv6(src=in_if.remote_ip6, dst=dst, hlim=hlim)
+            / TCP(sport=self.tcp_port_in, dport=20)
+        )
         pkts.append(p)
 
         # UDP
         pkts.append(p)
 
         # UDP
-        p = (Ether(dst=in_if.local_mac, src=in_if.remote_mac) /
-             IPv6(src=in_if.remote_ip6, dst=dst, hlim=hlim) /
-             UDP(sport=self.udp_port_in, dport=20))
+        p = (
+            Ether(dst=in_if.local_mac, src=in_if.remote_mac)
+            / IPv6(src=in_if.remote_ip6, dst=dst, hlim=hlim)
+            / UDP(sport=self.udp_port_in, dport=20)
+        )
         pkts.append(p)
 
         # ICMP
         pkts.append(p)
 
         # ICMP
-        p = (Ether(dst=in_if.local_mac, src=in_if.remote_mac) /
-             IPv6(src=in_if.remote_ip6, dst=dst, hlim=hlim) /
-             ICMPv6EchoRequest(id=self.icmp_id_in))
+        p = (
+            Ether(dst=in_if.local_mac, src=in_if.remote_mac)
+            / IPv6(src=in_if.remote_ip6, dst=dst, hlim=hlim)
+            / ICMPv6EchoRequest(id=self.icmp_id_in)
+        )
         pkts.append(p)
 
         return pkts
 
         pkts.append(p)
 
         return pkts
 
-    def create_stream_out(self, out_if, dst_ip=None, ttl=64,
-                          use_inside_ports=False):
+    def create_stream_out(self, out_if, dst_ip=None, ttl=64, use_inside_ports=False):
         """
         Create packet stream for outside network
 
         """
         Create packet stream for outside network
 
@@ -168,27 +179,40 @@ class TestNAT64(VppTestCase):
             icmp_id = self.icmp_id_in
         pkts = []
         # TCP
             icmp_id = self.icmp_id_in
         pkts = []
         # TCP
-        p = (Ether(dst=out_if.local_mac, src=out_if.remote_mac) /
-             IP(src=out_if.remote_ip4, dst=dst_ip, ttl=ttl) /
-             TCP(dport=tcp_port, sport=20))
+        p = (
+            Ether(dst=out_if.local_mac, src=out_if.remote_mac)
+            / IP(src=out_if.remote_ip4, dst=dst_ip, ttl=ttl)
+            / TCP(dport=tcp_port, sport=20)
+        )
         pkts.extend([p, p])
 
         # UDP
         pkts.extend([p, p])
 
         # UDP
-        p = (Ether(dst=out_if.local_mac, src=out_if.remote_mac) /
-             IP(src=out_if.remote_ip4, dst=dst_ip, ttl=ttl) /
-             UDP(dport=udp_port, sport=20))
+        p = (
+            Ether(dst=out_if.local_mac, src=out_if.remote_mac)
+            / IP(src=out_if.remote_ip4, dst=dst_ip, ttl=ttl)
+            / UDP(dport=udp_port, sport=20)
+        )
         pkts.append(p)
 
         # ICMP
         pkts.append(p)
 
         # ICMP
-        p = (Ether(dst=out_if.local_mac, src=out_if.remote_mac) /
-             IP(src=out_if.remote_ip4, dst=dst_ip, ttl=ttl) /
-             ICMP(id=icmp_id, type='echo-reply'))
+        p = (
+            Ether(dst=out_if.local_mac, src=out_if.remote_mac)
+            / IP(src=out_if.remote_ip4, dst=dst_ip, ttl=ttl)
+            / ICMP(id=icmp_id, type="echo-reply")
+        )
         pkts.append(p)
 
         return pkts
 
         pkts.append(p)
 
         return pkts
 
-    def verify_capture_out(self, capture, nat_ip=None, same_port=False,
-                           dst_ip=None, is_ip6=False, ignore_port=False):
+    def verify_capture_out(
+        self,
+        capture,
+        nat_ip=None,
+        same_port=False,
+        dst_ip=None,
+        is_ip6=False,
+        ignore_port=False,
+    ):
         """
         Verify captured packets on outside network
 
         """
         Verify captured packets on outside network
 
@@ -216,35 +240,30 @@ class TestNAT64(VppTestCase):
                 if packet.haslayer(TCP):
                     if not ignore_port:
                         if same_port:
                 if packet.haslayer(TCP):
                     if not ignore_port:
                         if same_port:
-                            self.assertEqual(
-                                packet[TCP].sport, self.tcp_port_in)
+                            self.assertEqual(packet[TCP].sport, self.tcp_port_in)
                         else:
                         else:
-                            self.assertNotEqual(
-                                packet[TCP].sport, self.tcp_port_in)
+                            self.assertNotEqual(packet[TCP].sport, self.tcp_port_in)
                     self.tcp_port_out = packet[TCP].sport
                     self.assert_packet_checksums_valid(packet)
                 elif packet.haslayer(UDP):
                     if not ignore_port:
                         if same_port:
                     self.tcp_port_out = packet[TCP].sport
                     self.assert_packet_checksums_valid(packet)
                 elif packet.haslayer(UDP):
                     if not ignore_port:
                         if same_port:
-                            self.assertEqual(
-                                packet[UDP].sport, self.udp_port_in)
+                            self.assertEqual(packet[UDP].sport, self.udp_port_in)
                         else:
                         else:
-                            self.assertNotEqual(
-                                packet[UDP].sport, self.udp_port_in)
+                            self.assertNotEqual(packet[UDP].sport, self.udp_port_in)
                     self.udp_port_out = packet[UDP].sport
                 else:
                     if not ignore_port:
                         if same_port:
                     self.udp_port_out = packet[UDP].sport
                 else:
                     if not ignore_port:
                         if same_port:
-                            self.assertEqual(
-                                packet[ICMP46].id, self.icmp_id_in)
+                            self.assertEqual(packet[ICMP46].id, self.icmp_id_in)
                         else:
                         else:
-                            self.assertNotEqual(
-                                packet[ICMP46].id, self.icmp_id_in)
+                            self.assertNotEqual(packet[ICMP46].id, self.icmp_id_in)
                     self.icmp_id_out = packet[ICMP46].id
                     self.assert_packet_checksums_valid(packet)
             except:
                     self.icmp_id_out = packet[ICMP46].id
                     self.assert_packet_checksums_valid(packet)
             except:
-                self.logger.error(ppp("Unexpected or invalid packet "
-                                      "(outside network):", packet))
+                self.logger.error(
+                    ppp("Unexpected or invalid packet (outside network):", packet)
+                )
                 raise
 
     def verify_capture_in_ip6(self, capture, src_ip, dst_ip):
                 raise
 
     def verify_capture_in_ip6(self, capture, src_ip, dst_ip):
@@ -265,15 +284,16 @@ class TestNAT64(VppTestCase):
                 elif packet.haslayer(UDP):
                     self.assertEqual(packet[UDP].dport, self.udp_port_in)
                 else:
                 elif packet.haslayer(UDP):
                     self.assertEqual(packet[UDP].dport, self.udp_port_in)
                 else:
-                    self.assertEqual(packet[ICMPv6EchoReply].id,
-                                     self.icmp_id_in)
+                    self.assertEqual(packet[ICMPv6EchoReply].id, self.icmp_id_in)
             except:
             except:
-                self.logger.error(ppp("Unexpected or invalid packet "
-                                      "(inside network):", packet))
+                self.logger.error(
+                    ppp("Unexpected or invalid packet (inside network):", packet)
+                )
                 raise
 
                 raise
 
-    def create_stream_frag(self, src_if, dst, sport, dport, data,
-                           proto=IP_PROTOS.tcp, echo_reply=False):
+    def create_stream_frag(
+        self, src_if, dst, sport, dport, data, proto=IP_PROTOS.tcp, echo_reply=False
+    ):
         """
         Create fragmented packet stream
 
         """
         Create fragmented packet stream
 
@@ -287,9 +307,11 @@ class TestNAT64(VppTestCase):
         :returns: Fragments
         """
         if proto == IP_PROTOS.tcp:
         :returns: Fragments
         """
         if proto == IP_PROTOS.tcp:
-            p = (IP(src=src_if.remote_ip4, dst=dst) /
-                 TCP(sport=sport, dport=dport) /
-                 Raw(data))
+            p = (
+                IP(src=src_if.remote_ip4, dst=dst)
+                / TCP(sport=sport, dport=dport)
+                / Raw(data)
+            )
             p = p.__class__(scapy.compat.raw(p))
             chksum = p[TCP].chksum
             proto_header = TCP(sport=sport, dport=dport, chksum=chksum)
             p = p.__class__(scapy.compat.raw(p))
             chksum = p[TCP].chksum
             proto_header = TCP(sport=sport, dport=dport, chksum=chksum)
@@ -297,9 +319,9 @@ class TestNAT64(VppTestCase):
             proto_header = UDP(sport=sport, dport=dport)
         elif proto == IP_PROTOS.icmp:
             if not echo_reply:
             proto_header = UDP(sport=sport, dport=dport)
         elif proto == IP_PROTOS.icmp:
             if not echo_reply:
-                proto_header = ICMP(id=sport, type='echo-request')
+                proto_header = ICMP(id=sport, type="echo-request")
             else:
             else:
-                proto_header = ICMP(id=sport, type='echo-reply')
+                proto_header = ICMP(id=sport, type="echo-reply")
         else:
             raise Exception("Unsupported protocol")
         id = random.randint(0, 65535)
         else:
             raise Exception("Unsupported protocol")
         id = random.randint(0, 65535)
@@ -308,33 +330,38 @@ class TestNAT64(VppTestCase):
             raw = Raw(data[0:4])
         else:
             raw = Raw(data[0:16])
             raw = Raw(data[0:4])
         else:
             raw = Raw(data[0:16])
-        p = (Ether(src=src_if.remote_mac, dst=src_if.local_mac) /
-             IP(src=src_if.remote_ip4, dst=dst, flags="MF", frag=0, id=id) /
-             proto_header /
-             raw)
+        p = (
+            Ether(src=src_if.remote_mac, dst=src_if.local_mac)
+            / IP(src=src_if.remote_ip4, dst=dst, flags="MF", frag=0, id=id)
+            / proto_header
+            / raw
+        )
         pkts.append(p)
         if proto == IP_PROTOS.tcp:
             raw = Raw(data[4:20])
         else:
             raw = Raw(data[16:32])
         pkts.append(p)
         if proto == IP_PROTOS.tcp:
             raw = Raw(data[4:20])
         else:
             raw = Raw(data[16:32])
-        p = (Ether(src=src_if.remote_mac, dst=src_if.local_mac) /
-             IP(src=src_if.remote_ip4, dst=dst, flags="MF", frag=3, id=id,
-                proto=proto) /
-             raw)
+        p = (
+            Ether(src=src_if.remote_mac, dst=src_if.local_mac)
+            / IP(src=src_if.remote_ip4, dst=dst, flags="MF", frag=3, id=id, proto=proto)
+            / raw
+        )
         pkts.append(p)
         if proto == IP_PROTOS.tcp:
             raw = Raw(data[20:])
         else:
             raw = Raw(data[32:])
         pkts.append(p)
         if proto == IP_PROTOS.tcp:
             raw = Raw(data[20:])
         else:
             raw = Raw(data[32:])
-        p = (Ether(src=src_if.remote_mac, dst=src_if.local_mac) /
-             IP(src=src_if.remote_ip4, dst=dst, frag=5, proto=proto,
-                id=id) /
-             raw)
+        p = (
+            Ether(src=src_if.remote_mac, dst=src_if.local_mac)
+            / IP(src=src_if.remote_ip4, dst=dst, frag=5, proto=proto, id=id)
+            / raw
+        )
         pkts.append(p)
         return pkts
 
         pkts.append(p)
         return pkts
 
-    def create_stream_frag_ip6(self, src_if, dst, sport, dport, data,
-                               pref=None, plen=0, frag_size=128):
+    def create_stream_frag_ip6(
+        self, src_if, dst, sport, dport, data, pref=None, plen=0, frag_size=128
+    ):
         """
         Create fragmented packet stream
 
         """
         Create fragmented packet stream
 
@@ -349,15 +376,17 @@ class TestNAT64(VppTestCase):
         :returns: Fragments
         """
         if pref is None:
         :returns: Fragments
         """
         if pref is None:
-            dst_ip6 = ''.join(['64:ff9b::', dst])
+            dst_ip6 = "".join(["64:ff9b::", dst])
         else:
             dst_ip6 = self.compose_ip6(dst, pref, plen)
 
         else:
             dst_ip6 = self.compose_ip6(dst, pref, plen)
 
-        p = (Ether(dst=src_if.local_mac, src=src_if.remote_mac) /
-             IPv6(src=src_if.remote_ip6, dst=dst_ip6) /
-             IPv6ExtHdrFragment(id=random.randint(0, 65535)) /
-             TCP(sport=sport, dport=dport) /
-             Raw(data))
+        p = (
+            Ether(dst=src_if.local_mac, src=src_if.remote_mac)
+            / IPv6(src=src_if.remote_ip6, dst=dst_ip6)
+            / IPv6ExtHdrFragment(id=random.randint(0, 65535))
+            / TCP(sport=sport, dport=dport)
+            / Raw(data)
+        )
 
         return fragment6(p, frag_size)
 
 
         return fragment6(p, frag_size)
 
@@ -378,17 +407,15 @@ class TestNAT64(VppTestCase):
             self.assert_ip_checksum_valid(p)
             buffer.seek(p[IP].frag * 8)
             buffer.write(bytes(p[IP].payload))
             self.assert_ip_checksum_valid(p)
             buffer.seek(p[IP].frag * 8)
             buffer.write(bytes(p[IP].payload))
-        ip = IP(src=frags[0][IP].src, dst=frags[0][IP].dst,
-                proto=frags[0][IP].proto)
+        ip = IP(src=frags[0][IP].src, dst=frags[0][IP].dst, proto=frags[0][IP].proto)
         if ip.proto == IP_PROTOS.tcp:
         if ip.proto == IP_PROTOS.tcp:
-            p = (ip / TCP(buffer.getvalue()))
+            p = ip / TCP(buffer.getvalue())
             self.logger.debug(ppp("Reassembled:", p))
             self.assert_tcp_checksum_valid(p)
         elif ip.proto == IP_PROTOS.udp:
             self.logger.debug(ppp("Reassembled:", p))
             self.assert_tcp_checksum_valid(p)
         elif ip.proto == IP_PROTOS.udp:
-            p = (ip / UDP(buffer.getvalue()[:8]) /
-                 Raw(buffer.getvalue()[8:]))
+            p = ip / UDP(buffer.getvalue()[:8]) / Raw(buffer.getvalue()[8:])
         elif ip.proto == IP_PROTOS.icmp:
         elif ip.proto == IP_PROTOS.icmp:
-            p = (ip / ICMP(buffer.getvalue()))
+            p = ip / ICMP(buffer.getvalue())
         return p
 
     def reass_frags_and_verify_ip6(self, frags, src, dst):
         return p
 
     def reass_frags_and_verify_ip6(self, frags, src, dst):
@@ -407,12 +434,15 @@ class TestNAT64(VppTestCase):
             self.assertEqual(p[IPv6].dst, dst)
             buffer.seek(p[IPv6ExtHdrFragment].offset * 8)
             buffer.write(bytes(p[IPv6ExtHdrFragment].payload))
             self.assertEqual(p[IPv6].dst, dst)
             buffer.seek(p[IPv6ExtHdrFragment].offset * 8)
             buffer.write(bytes(p[IPv6ExtHdrFragment].payload))
-        ip = IPv6(src=frags[0][IPv6].src, dst=frags[0][IPv6].dst,
-                  nh=frags[0][IPv6ExtHdrFragment].nh)
+        ip = IPv6(
+            src=frags[0][IPv6].src,
+            dst=frags[0][IPv6].dst,
+            nh=frags[0][IPv6ExtHdrFragment].nh,
+        )
         if ip.nh == IP_PROTOS.tcp:
         if ip.nh == IP_PROTOS.tcp:
-            p = (ip / TCP(buffer.getvalue()))
+            p = ip / TCP(buffer.getvalue())
         elif ip.nh == IP_PROTOS.udp:
         elif ip.nh == IP_PROTOS.udp:
-            p = (ip / UDP(buffer.getvalue()))
+            p = ip / UDP(buffer.getvalue())
         self.logger.debug(ppp("Reassembled:", p))
         self.assert_packet_checksums_valid(p)
         return p
         self.logger.debug(ppp("Reassembled:", p))
         self.assert_packet_checksums_valid(p)
         return p
@@ -461,8 +491,7 @@ class TestNAT64(VppTestCase):
         # postNAPTSourceTransportPort
         self.assertEqual(struct.pack("!H", self.tcp_port_out), record[227])
 
         # postNAPTSourceTransportPort
         self.assertEqual(struct.pack("!H", self.tcp_port_out), record[227])
 
-    def verify_ipfix_nat64_ses(self, data, is_create, src_addr, dst_addr,
-                               dst_port):
+    def verify_ipfix_nat64_ses(self, data, is_create, src_addr, dst_addr, dst_port):
         """
         Verify IPFIX NAT64 session create and delete events
 
         """
         Verify IPFIX NAT64 session create and delete events
 
@@ -482,16 +511,16 @@ class TestNAT64(VppTestCase):
         # sourceIPv6Address
         self.assertEqual(src_addr, str(ipaddress.IPv6Address(record[27])))
         # destinationIPv6Address
         # sourceIPv6Address
         self.assertEqual(src_addr, str(ipaddress.IPv6Address(record[27])))
         # destinationIPv6Address
-        self.assertEqual(socket.inet_pton(socket.AF_INET6,
-                                          self.compose_ip6(dst_addr,
-                                                           '64:ff9b::',
-                                                           96)),
-                         record[28])
+        self.assertEqual(
+            socket.inet_pton(
+                socket.AF_INET6, self.compose_ip6(dst_addr, "64:ff9b::", 96)
+            ),
+            record[28],
+        )
         # postNATSourceIPv4Address
         self.assertEqual(self.nat_addr_n, record[225])
         # postNATDestinationIPv4Address
         # postNATSourceIPv4Address
         self.assertEqual(self.nat_addr_n, record[225])
         # postNATDestinationIPv4Address
-        self.assertEqual(socket.inet_pton(socket.AF_INET, dst_addr),
-                         record[226])
+        self.assertEqual(socket.inet_pton(socket.AF_INET, dst_addr), record[226])
         # protocolIdentifier
         self.assertEqual(IP_PROTOS.tcp, scapy.compat.orb(record[4]))
         # ingressVRFID
         # protocolIdentifier
         self.assertEqual(IP_PROTOS.tcp, scapy.compat.orb(record[4]))
         # ingressVRFID
@@ -506,7 +535,7 @@ class TestNAT64(VppTestCase):
         self.assertEqual(struct.pack("!H", dst_port), record[228])
 
     def verify_syslog_sess(self, data, is_add=True, is_ip6=False):
         self.assertEqual(struct.pack("!H", dst_port), record[228])
 
     def verify_syslog_sess(self, data, is_add=True, is_ip6=False):
-        message = data.decode('utf-8')
+        message = data.decode("utf-8")
         try:
             message = SyslogMessage.parse(message)
         except ParseError as e:
         try:
             message = SyslogMessage.parse(message)
         except ParseError as e:
@@ -514,26 +543,25 @@ class TestNAT64(VppTestCase):
             raise
         else:
             self.assertEqual(message.severity, SyslogSeverity.info)
             raise
         else:
             self.assertEqual(message.severity, SyslogSeverity.info)
-            self.assertEqual(message.appname, 'NAT')
-            self.assertEqual(message.msgid, 'SADD' if is_add else 'SDEL')
-            sd_params = message.sd.get('nsess')
+            self.assertEqual(message.appname, "NAT")
+            self.assertEqual(message.msgid, "SADD" if is_add else "SDEL")
+            sd_params = message.sd.get("nsess")
             self.assertTrue(sd_params is not None)
             if is_ip6:
             self.assertTrue(sd_params is not None)
             if is_ip6:
-                self.assertEqual(sd_params.get('IATYP'), 'IPv6')
-                self.assertEqual(sd_params.get('ISADDR'), self.pg0.remote_ip6)
+                self.assertEqual(sd_params.get("IATYP"), "IPv6")
+                self.assertEqual(sd_params.get("ISADDR"), self.pg0.remote_ip6)
             else:
             else:
-                self.assertEqual(sd_params.get('IATYP'), 'IPv4')
-                self.assertEqual(sd_params.get('ISADDR'), self.pg0.remote_ip4)
-                self.assertTrue(sd_params.get('SSUBIX') is not None)
-            self.assertEqual(sd_params.get('ISPORT'), "%d" % self.tcp_port_in)
-            self.assertEqual(sd_params.get('XATYP'), 'IPv4')
-            self.assertEqual(sd_params.get('XSADDR'), self.nat_addr)
-            self.assertEqual(sd_params.get('XSPORT'), "%d" % self.tcp_port_out)
-            self.assertEqual(sd_params.get('PROTO'), "%d" % IP_PROTOS.tcp)
-            self.assertEqual(sd_params.get('SVLAN'), '0')
-            self.assertEqual(sd_params.get('XDADDR'), self.pg1.remote_ip4)
-            self.assertEqual(sd_params.get('XDPORT'),
-                             "%d" % self.tcp_external_port)
+                self.assertEqual(sd_params.get("IATYP"), "IPv4")
+                self.assertEqual(sd_params.get("ISADDR"), self.pg0.remote_ip4)
+                self.assertTrue(sd_params.get("SSUBIX") is not None)
+            self.assertEqual(sd_params.get("ISPORT"), "%d" % self.tcp_port_in)
+            self.assertEqual(sd_params.get("XATYP"), "IPv4")
+            self.assertEqual(sd_params.get("XSADDR"), self.nat_addr)
+            self.assertEqual(sd_params.get("XSPORT"), "%d" % self.tcp_port_out)
+            self.assertEqual(sd_params.get("PROTO"), "%d" % IP_PROTOS.tcp)
+            self.assertEqual(sd_params.get("SVLAN"), "0")
+            self.assertEqual(sd_params.get("XDADDR"), self.pg1.remote_ip4)
+            self.assertEqual(sd_params.get("XDPORT"), "%d" % self.tcp_external_port)
 
     def compose_ip6(self, ip4, pref, plen):
         """
 
     def compose_ip6(self, ip4, pref, plen):
         """
@@ -576,7 +604,7 @@ class TestNAT64(VppTestCase):
             pref_n[13] = ip4_n[1]
             pref_n[14] = ip4_n[2]
             pref_n[15] = ip4_n[3]
             pref_n[13] = ip4_n[1]
             pref_n[14] = ip4_n[2]
             pref_n[15] = ip4_n[3]
-        packed_pref_n = b''.join([scapy.compat.chb(x) for x in pref_n])
+        packed_pref_n = b"".join([scapy.compat.chb(x) for x in pref_n])
         return socket.inet_ntop(socket.AF_INET6, packed_pref_n)
 
     def verify_ipfix_max_sessions(self, data, limit):
         return socket.inet_ntop(socket.AF_INET6, packed_pref_n)
 
     def verify_ipfix_max_sessions(self, data, limit):
@@ -596,16 +624,19 @@ class TestNAT64(VppTestCase):
         self.assertEqual(struct.pack("I", limit), record[471])
 
     def test_nat64_inside_interface_handles_neighbor_advertisement(self):
         self.assertEqual(struct.pack("I", limit), record[471])
 
     def test_nat64_inside_interface_handles_neighbor_advertisement(self):
-        """ NAT64 inside interface handles Neighbor Advertisement """
+        """NAT64 inside interface handles Neighbor Advertisement"""
 
         flags = self.config_flags.NAT_IS_INSIDE
 
         flags = self.config_flags.NAT_IS_INSIDE
-        self.vapi.nat64_add_del_interface(is_add=1, flags=flags,
-                                          sw_if_index=self.pg5.sw_if_index)
+        self.vapi.nat64_add_del_interface(
+            is_add=1, flags=flags, sw_if_index=self.pg5.sw_if_index
+        )
 
         # Try to send ping
 
         # Try to send ping
-        ping = (Ether(dst=self.pg5.local_mac, src=self.pg5.remote_mac) /
-                IPv6(src=self.pg5.remote_ip6, dst=self.pg5.local_ip6) /
-                ICMPv6EchoRequest())
+        ping = (
+            Ether(dst=self.pg5.local_mac, src=self.pg5.remote_mac)
+            / IPv6(src=self.pg5.remote_ip6, dst=self.pg5.local_ip6)
+            / ICMPv6EchoRequest()
+        )
         pkts = [ping]
         self.pg5.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
         pkts = [ping]
         self.pg5.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
@@ -623,10 +654,12 @@ class TestNAT64(VppTestCase):
             raise
 
         # Send Neighbor Advertisement
             raise
 
         # Send Neighbor Advertisement
-        p = (Ether(dst=self.pg5.local_mac, src=self.pg5.remote_mac) /
-             IPv6(src=self.pg5.remote_ip6, dst=self.pg5.local_ip6) /
-             ICMPv6ND_NA(tgt=tgt) /
-             ICMPv6NDOptDstLLAddr(lladdr=self.pg5.remote_mac))
+        p = (
+            Ether(dst=self.pg5.local_mac, src=self.pg5.remote_mac)
+            / IPv6(src=self.pg5.remote_ip6, dst=self.pg5.local_ip6)
+            / ICMPv6ND_NA(tgt=tgt)
+            / ICMPv6NDOptDstLLAddr(lladdr=self.pg5.remote_mac)
+        )
         pkts = [p]
         self.pg5.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
         pkts = [p]
         self.pg5.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
@@ -650,31 +683,33 @@ class TestNAT64(VppTestCase):
             raise
 
     def test_pool(self):
             raise
 
     def test_pool(self):
-        """ Add/delete address to NAT64 pool """
-        nat_addr = '1.2.3.4'
+        """Add/delete address to NAT64 pool"""
+        nat_addr = "1.2.3.4"
 
 
-        self.vapi.nat64_add_del_pool_addr_range(start_addr=nat_addr,
-                                                end_addr=nat_addr,
-                                                vrf_id=0xFFFFFFFF, is_add=1)
+        self.vapi.nat64_add_del_pool_addr_range(
+            start_addr=nat_addr, end_addr=nat_addr, vrf_id=0xFFFFFFFF, is_add=1
+        )
 
         addresses = self.vapi.nat64_pool_addr_dump()
         self.assertEqual(len(addresses), 1)
         self.assertEqual(str(addresses[0].address), nat_addr)
 
 
         addresses = self.vapi.nat64_pool_addr_dump()
         self.assertEqual(len(addresses), 1)
         self.assertEqual(str(addresses[0].address), nat_addr)
 
-        self.vapi.nat64_add_del_pool_addr_range(start_addr=nat_addr,
-                                                end_addr=nat_addr,
-                                                vrf_id=0xFFFFFFFF, is_add=0)
+        self.vapi.nat64_add_del_pool_addr_range(
+            start_addr=nat_addr, end_addr=nat_addr, vrf_id=0xFFFFFFFF, is_add=0
+        )
 
         addresses = self.vapi.nat64_pool_addr_dump()
         self.assertEqual(len(addresses), 0)
 
     def test_interface(self):
 
         addresses = self.vapi.nat64_pool_addr_dump()
         self.assertEqual(len(addresses), 0)
 
     def test_interface(self):
-        """ Enable/disable NAT64 feature on the interface """
+        """Enable/disable NAT64 feature on the interface"""
         flags = self.config_flags.NAT_IS_INSIDE
         flags = self.config_flags.NAT_IS_INSIDE
-        self.vapi.nat64_add_del_interface(is_add=1, flags=flags,
-                                          sw_if_index=self.pg0.sw_if_index)
-        self.vapi.nat64_add_del_interface(is_add=1, flags=0,
-                                          sw_if_index=self.pg1.sw_if_index)
+        self.vapi.nat64_add_del_interface(
+            is_add=1, flags=flags, sw_if_index=self.pg0.sw_if_index
+        )
+        self.vapi.nat64_add_del_interface(
+            is_add=1, flags=0, sw_if_index=self.pg1.sw_if_index
+        )
 
         interfaces = self.vapi.nat64_interface_dump()
         self.assertEqual(len(interfaces), 2)
 
         interfaces = self.vapi.nat64_interface_dump()
         self.assertEqual(len(interfaces), 2)
@@ -691,29 +726,37 @@ class TestNAT64(VppTestCase):
         self.assertTrue(pg1_found)
 
         features = self.vapi.cli("show interface features pg0")
         self.assertTrue(pg1_found)
 
         features = self.vapi.cli("show interface features pg0")
-        self.assertIn('nat64-in2out', features)
+        self.assertIn("nat64-in2out", features)
         features = self.vapi.cli("show interface features pg1")
         features = self.vapi.cli("show interface features pg1")
-        self.assertIn('nat64-out2in', features)
+        self.assertIn("nat64-out2in", features)
 
 
-        self.vapi.nat64_add_del_interface(is_add=0, flags=flags,
-                                          sw_if_index=self.pg0.sw_if_index)
-        self.vapi.nat64_add_del_interface(is_add=0, flags=flags,
-                                          sw_if_index=self.pg1.sw_if_index)
+        self.vapi.nat64_add_del_interface(
+            is_add=0, flags=flags, sw_if_index=self.pg0.sw_if_index
+        )
+        self.vapi.nat64_add_del_interface(
+            is_add=0, flags=flags, sw_if_index=self.pg1.sw_if_index
+        )
 
         interfaces = self.vapi.nat64_interface_dump()
         self.assertEqual(len(interfaces), 0)
 
     def test_static_bib(self):
 
         interfaces = self.vapi.nat64_interface_dump()
         self.assertEqual(len(interfaces), 0)
 
     def test_static_bib(self):
-        """ Add/delete static BIB entry """
-        in_addr = '2001:db8:85a3::8a2e:370:7334'
-        out_addr = '10.1.1.3'
+        """Add/delete static BIB entry"""
+        in_addr = "2001:db8:85a3::8a2e:370:7334"
+        out_addr = "10.1.1.3"
         in_port = 1234
         out_port = 5678
         proto = IP_PROTOS.tcp
 
         in_port = 1234
         out_port = 5678
         proto = IP_PROTOS.tcp
 
-        self.vapi.nat64_add_del_static_bib(i_addr=in_addr, o_addr=out_addr,
-                                           i_port=in_port, o_port=out_port,
-                                           proto=proto, vrf_id=0, is_add=1)
+        self.vapi.nat64_add_del_static_bib(
+            i_addr=in_addr,
+            o_addr=out_addr,
+            i_port=in_port,
+            o_port=out_port,
+            proto=proto,
+            vrf_id=0,
+            is_add=1,
+        )
         bib = self.vapi.nat64_bib_dump(proto=IP_PROTOS.tcp)
         static_bib_num = 0
         for bibe in bib:
         bib = self.vapi.nat64_bib_dump(proto=IP_PROTOS.tcp)
         static_bib_num = 0
         for bibe in bib:
@@ -724,23 +767,29 @@ class TestNAT64(VppTestCase):
                 self.assertEqual(bibe.i_port, in_port)
                 self.assertEqual(bibe.o_port, out_port)
         self.assertEqual(static_bib_num, 1)
                 self.assertEqual(bibe.i_port, in_port)
                 self.assertEqual(bibe.o_port, out_port)
         self.assertEqual(static_bib_num, 1)
-        bibs = self.statistics.get_counter('/nat64/total-bibs')
+        bibs = self.statistics.get_counter("/nat64/total-bibs")
         self.assertEqual(bibs[0][0], 1)
 
         self.assertEqual(bibs[0][0], 1)
 
-        self.vapi.nat64_add_del_static_bib(i_addr=in_addr, o_addr=out_addr,
-                                           i_port=in_port, o_port=out_port,
-                                           proto=proto, vrf_id=0, is_add=0)
+        self.vapi.nat64_add_del_static_bib(
+            i_addr=in_addr,
+            o_addr=out_addr,
+            i_port=in_port,
+            o_port=out_port,
+            proto=proto,
+            vrf_id=0,
+            is_add=0,
+        )
         bib = self.vapi.nat64_bib_dump(proto=IP_PROTOS.tcp)
         static_bib_num = 0
         for bibe in bib:
             if bibe.flags & self.config_flags.NAT_IS_STATIC:
                 static_bib_num += 1
         self.assertEqual(static_bib_num, 0)
         bib = self.vapi.nat64_bib_dump(proto=IP_PROTOS.tcp)
         static_bib_num = 0
         for bibe in bib:
             if bibe.flags & self.config_flags.NAT_IS_STATIC:
                 static_bib_num += 1
         self.assertEqual(static_bib_num, 0)
-        bibs = self.statistics.get_counter('/nat64/total-bibs')
+        bibs = self.statistics.get_counter("/nat64/total-bibs")
         self.assertEqual(bibs[0][0], 0)
 
     def test_set_timeouts(self):
         self.assertEqual(bibs[0][0], 0)
 
     def test_set_timeouts(self):
-        """ Set NAT64 timeouts """
+        """Set NAT64 timeouts"""
         # verify default values
         timeouts = self.vapi.nat64_get_timeouts()
         self.assertEqual(timeouts.udp, 300)
         # verify default values
         timeouts = self.vapi.nat64_get_timeouts()
         self.assertEqual(timeouts.udp, 300)
@@ -749,8 +798,9 @@ class TestNAT64(VppTestCase):
         self.assertEqual(timeouts.tcp_established, 7440)
 
         # set and verify custom values
         self.assertEqual(timeouts.tcp_established, 7440)
 
         # set and verify custom values
-        self.vapi.nat64_set_timeouts(udp=200, tcp_established=7450,
-                                     tcp_transitory=250, icmp=30)
+        self.vapi.nat64_set_timeouts(
+            udp=200, tcp_established=7450, tcp_transitory=250, icmp=30
+        )
         timeouts = self.vapi.nat64_get_timeouts()
         self.assertEqual(timeouts.udp, 200)
         self.assertEqual(timeouts.icmp, 30)
         timeouts = self.vapi.nat64_get_timeouts()
         self.assertEqual(timeouts.udp, 200)
         self.assertEqual(timeouts.icmp, 30)
@@ -758,74 +808,79 @@ class TestNAT64(VppTestCase):
         self.assertEqual(timeouts.tcp_established, 7450)
 
     def test_dynamic(self):
         self.assertEqual(timeouts.tcp_established, 7450)
 
     def test_dynamic(self):
-        """ NAT64 dynamic translation test """
+        """NAT64 dynamic translation test"""
         self.tcp_port_in = 6303
         self.udp_port_in = 6304
         self.icmp_id_in = 6305
 
         ses_num_start = self.nat64_get_ses_num()
 
         self.tcp_port_in = 6303
         self.udp_port_in = 6304
         self.icmp_id_in = 6305
 
         ses_num_start = self.nat64_get_ses_num()
 
-        self.vapi.nat64_add_del_pool_addr_range(start_addr=self.nat_addr,
-                                                end_addr=self.nat_addr,
-                                                vrf_id=0xFFFFFFFF,
-                                                is_add=1)
+        self.vapi.nat64_add_del_pool_addr_range(
+            start_addr=self.nat_addr,
+            end_addr=self.nat_addr,
+            vrf_id=0xFFFFFFFF,
+            is_add=1,
+        )
         flags = self.config_flags.NAT_IS_INSIDE
         flags = self.config_flags.NAT_IS_INSIDE
-        self.vapi.nat64_add_del_interface(is_add=1, flags=flags,
-                                          sw_if_index=self.pg0.sw_if_index)
-        self.vapi.nat64_add_del_interface(is_add=1, flags=0,
-                                          sw_if_index=self.pg1.sw_if_index)
+        self.vapi.nat64_add_del_interface(
+            is_add=1, flags=flags, sw_if_index=self.pg0.sw_if_index
+        )
+        self.vapi.nat64_add_del_interface(
+            is_add=1, flags=0, sw_if_index=self.pg1.sw_if_index
+        )
 
         # in2out
 
         # in2out
-        tcpn = self.statistics.get_counter('/nat64/in2out/tcp')[0]
-        udpn = self.statistics.get_counter('/nat64/in2out/udp')[0]
-        icmpn = self.statistics.get_counter('/nat64/in2out/icmp')[0]
-        drops = self.statistics.get_counter('/nat64/in2out/drops')[0]
+        tcpn = self.statistics.get_counter("/nat64/in2out/tcp")[0]
+        udpn = self.statistics.get_counter("/nat64/in2out/udp")[0]
+        icmpn = self.statistics.get_counter("/nat64/in2out/icmp")[0]
+        drops = self.statistics.get_counter("/nat64/in2out/drops")[0]
 
         pkts = self.create_stream_in_ip6(self.pg0, self.pg1)
         self.pg0.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         capture = self.pg1.get_capture(len(pkts))
 
         pkts = self.create_stream_in_ip6(self.pg0, self.pg1)
         self.pg0.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         capture = self.pg1.get_capture(len(pkts))
-        self.verify_capture_out(capture, nat_ip=self.nat_addr,
-                                dst_ip=self.pg1.remote_ip4)
+        self.verify_capture_out(
+            capture, nat_ip=self.nat_addr, dst_ip=self.pg1.remote_ip4
+        )
 
         if_idx = self.pg0.sw_if_index
 
         if_idx = self.pg0.sw_if_index
-        cnt = self.statistics.get_counter('/nat64/in2out/tcp')[0]
+        cnt = self.statistics.get_counter("/nat64/in2out/tcp")[0]
         self.assertEqual(cnt[if_idx] - tcpn[if_idx], 1)
         self.assertEqual(cnt[if_idx] - tcpn[if_idx], 1)
-        cnt = self.statistics.get_counter('/nat64/in2out/udp')[0]
+        cnt = self.statistics.get_counter("/nat64/in2out/udp")[0]
         self.assertEqual(cnt[if_idx] - udpn[if_idx], 1)
         self.assertEqual(cnt[if_idx] - udpn[if_idx], 1)
-        cnt = self.statistics.get_counter('/nat64/in2out/icmp')[0]
+        cnt = self.statistics.get_counter("/nat64/in2out/icmp")[0]
         self.assertEqual(cnt[if_idx] - icmpn[if_idx], 1)
         self.assertEqual(cnt[if_idx] - icmpn[if_idx], 1)
-        cnt = self.statistics.get_counter('/nat64/in2out/drops')[0]
+        cnt = self.statistics.get_counter("/nat64/in2out/drops")[0]
         self.assertEqual(cnt[if_idx] - drops[if_idx], 0)
 
         # out2in
         self.assertEqual(cnt[if_idx] - drops[if_idx], 0)
 
         # out2in
-        tcpn = self.statistics.get_counter('/nat64/out2in/tcp')[0]
-        udpn = self.statistics.get_counter('/nat64/out2in/udp')[0]
-        icmpn = self.statistics.get_counter('/nat64/out2in/icmp')[0]
-        drops = self.statistics.get_counter('/nat64/out2in/drops')[0]
+        tcpn = self.statistics.get_counter("/nat64/out2in/tcp")[0]
+        udpn = self.statistics.get_counter("/nat64/out2in/udp")[0]
+        icmpn = self.statistics.get_counter("/nat64/out2in/icmp")[0]
+        drops = self.statistics.get_counter("/nat64/out2in/drops")[0]
 
         pkts = self.create_stream_out(self.pg1, dst_ip=self.nat_addr)
         self.pg1.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         capture = self.pg0.get_capture(len(pkts))
 
         pkts = self.create_stream_out(self.pg1, dst_ip=self.nat_addr)
         self.pg1.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         capture = self.pg0.get_capture(len(pkts))
-        ip = IPv6(src=''.join(['64:ff9b::', self.pg1.remote_ip4]))
+        ip = IPv6(src="".join(["64:ff9b::", self.pg1.remote_ip4]))
         self.verify_capture_in_ip6(capture, ip[IPv6].src, self.pg0.remote_ip6)
 
         if_idx = self.pg1.sw_if_index
         self.verify_capture_in_ip6(capture, ip[IPv6].src, self.pg0.remote_ip6)
 
         if_idx = self.pg1.sw_if_index
-        cnt = self.statistics.get_counter('/nat64/out2in/tcp')[0]
+        cnt = self.statistics.get_counter("/nat64/out2in/tcp")[0]
         self.assertEqual(cnt[if_idx] - tcpn[if_idx], 2)
         self.assertEqual(cnt[if_idx] - tcpn[if_idx], 2)
-        cnt = self.statistics.get_counter('/nat64/out2in/udp')[0]
+        cnt = self.statistics.get_counter("/nat64/out2in/udp")[0]
         self.assertEqual(cnt[if_idx] - udpn[if_idx], 1)
         self.assertEqual(cnt[if_idx] - udpn[if_idx], 1)
-        cnt = self.statistics.get_counter('/nat64/out2in/icmp')[0]
+        cnt = self.statistics.get_counter("/nat64/out2in/icmp")[0]
         self.assertEqual(cnt[if_idx] - icmpn[if_idx], 1)
         self.assertEqual(cnt[if_idx] - icmpn[if_idx], 1)
-        cnt = self.statistics.get_counter('/nat64/out2in/drops')[0]
+        cnt = self.statistics.get_counter("/nat64/out2in/drops")[0]
         self.assertEqual(cnt[if_idx] - drops[if_idx], 0)
 
         self.assertEqual(cnt[if_idx] - drops[if_idx], 0)
 
-        bibs = self.statistics.get_counter('/nat64/total-bibs')
+        bibs = self.statistics.get_counter("/nat64/total-bibs")
         self.assertEqual(bibs[0][0], 3)
         self.assertEqual(bibs[0][0], 3)
-        sessions = self.statistics.get_counter('/nat64/total-sessions')
+        sessions = self.statistics.get_counter("/nat64/total-sessions")
         self.assertEqual(sessions[0][0], 3)
 
         # in2out
         self.assertEqual(sessions[0][0], 3)
 
         # in2out
@@ -834,8 +889,9 @@ class TestNAT64(VppTestCase):
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         capture = self.pg1.get_capture(len(pkts))
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         capture = self.pg1.get_capture(len(pkts))
-        self.verify_capture_out(capture, nat_ip=self.nat_addr,
-                                dst_ip=self.pg1.remote_ip4)
+        self.verify_capture_out(
+            capture, nat_ip=self.nat_addr, dst_ip=self.pg1.remote_ip4
+        )
 
         # out2in
         pkts = self.create_stream_out(self.pg1, dst_ip=self.nat_addr)
 
         # out2in
         pkts = self.create_stream_out(self.pg1, dst_ip=self.nat_addr)
@@ -850,20 +906,25 @@ class TestNAT64(VppTestCase):
         self.assertEqual(ses_num_end - ses_num_start, 3)
 
         # tenant with specific VRF
         self.assertEqual(ses_num_end - ses_num_start, 3)
 
         # tenant with specific VRF
-        self.vapi.nat64_add_del_pool_addr_range(start_addr=self.vrf1_nat_addr,
-                                                end_addr=self.vrf1_nat_addr,
-                                                vrf_id=self.vrf1_id, is_add=1)
+        self.vapi.nat64_add_del_pool_addr_range(
+            start_addr=self.vrf1_nat_addr,
+            end_addr=self.vrf1_nat_addr,
+            vrf_id=self.vrf1_id,
+            is_add=1,
+        )
         flags = self.config_flags.NAT_IS_INSIDE
         flags = self.config_flags.NAT_IS_INSIDE
-        self.vapi.nat64_add_del_interface(is_add=1, flags=flags,
-                                          sw_if_index=self.pg2.sw_if_index)
+        self.vapi.nat64_add_del_interface(
+            is_add=1, flags=flags, sw_if_index=self.pg2.sw_if_index
+        )
 
         pkts = self.create_stream_in_ip6(self.pg2, self.pg1)
         self.pg2.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         capture = self.pg1.get_capture(len(pkts))
 
         pkts = self.create_stream_in_ip6(self.pg2, self.pg1)
         self.pg2.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         capture = self.pg1.get_capture(len(pkts))
-        self.verify_capture_out(capture, nat_ip=self.vrf1_nat_addr,
-                                dst_ip=self.pg1.remote_ip4)
+        self.verify_capture_out(
+            capture, nat_ip=self.vrf1_nat_addr, dst_ip=self.pg1.remote_ip4
+        )
 
         pkts = self.create_stream_out(self.pg1, dst_ip=self.vrf1_nat_addr)
         self.pg1.add_stream(pkts)
 
         pkts = self.create_stream_out(self.pg1, dst_ip=self.vrf1_nat_addr)
         self.pg1.add_stream(pkts)
@@ -873,7 +934,7 @@ class TestNAT64(VppTestCase):
         self.verify_capture_in_ip6(capture, ip[IPv6].src, self.pg2.remote_ip6)
 
     def test_static(self):
         self.verify_capture_in_ip6(capture, ip[IPv6].src, self.pg2.remote_ip6)
 
     def test_static(self):
-        """ NAT64 static translation test """
+        """NAT64 static translation test"""
         self.tcp_port_in = 60303
         self.udp_port_in = 60304
         self.icmp_id_in = 60305
         self.tcp_port_in = 60303
         self.udp_port_in = 60304
         self.icmp_id_in = 60305
@@ -883,34 +944,47 @@ class TestNAT64(VppTestCase):
 
         ses_num_start = self.nat64_get_ses_num()
 
 
         ses_num_start = self.nat64_get_ses_num()
 
-        self.vapi.nat64_add_del_pool_addr_range(start_addr=self.nat_addr,
-                                                end_addr=self.nat_addr,
-                                                vrf_id=0xFFFFFFFF,
-                                                is_add=1)
+        self.vapi.nat64_add_del_pool_addr_range(
+            start_addr=self.nat_addr,
+            end_addr=self.nat_addr,
+            vrf_id=0xFFFFFFFF,
+            is_add=1,
+        )
         flags = self.config_flags.NAT_IS_INSIDE
         flags = self.config_flags.NAT_IS_INSIDE
-        self.vapi.nat64_add_del_interface(is_add=1, flags=flags,
-                                          sw_if_index=self.pg0.sw_if_index)
-        self.vapi.nat64_add_del_interface(is_add=1, flags=0,
-                                          sw_if_index=self.pg1.sw_if_index)
-
-        self.vapi.nat64_add_del_static_bib(i_addr=self.pg0.remote_ip6,
-                                           o_addr=self.nat_addr,
-                                           i_port=self.tcp_port_in,
-                                           o_port=self.tcp_port_out,
-                                           proto=IP_PROTOS.tcp, vrf_id=0,
-                                           is_add=1)
-        self.vapi.nat64_add_del_static_bib(i_addr=self.pg0.remote_ip6,
-                                           o_addr=self.nat_addr,
-                                           i_port=self.udp_port_in,
-                                           o_port=self.udp_port_out,
-                                           proto=IP_PROTOS.udp, vrf_id=0,
-                                           is_add=1)
-        self.vapi.nat64_add_del_static_bib(i_addr=self.pg0.remote_ip6,
-                                           o_addr=self.nat_addr,
-                                           i_port=self.icmp_id_in,
-                                           o_port=self.icmp_id_out,
-                                           proto=IP_PROTOS.icmp, vrf_id=0,
-                                           is_add=1)
+        self.vapi.nat64_add_del_interface(
+            is_add=1, flags=flags, sw_if_index=self.pg0.sw_if_index
+        )
+        self.vapi.nat64_add_del_interface(
+            is_add=1, flags=0, sw_if_index=self.pg1.sw_if_index
+        )
+
+        self.vapi.nat64_add_del_static_bib(
+            i_addr=self.pg0.remote_ip6,
+            o_addr=self.nat_addr,
+            i_port=self.tcp_port_in,
+            o_port=self.tcp_port_out,
+            proto=IP_PROTOS.tcp,
+            vrf_id=0,
+            is_add=1,
+        )
+        self.vapi.nat64_add_del_static_bib(
+            i_addr=self.pg0.remote_ip6,
+            o_addr=self.nat_addr,
+            i_port=self.udp_port_in,
+            o_port=self.udp_port_out,
+            proto=IP_PROTOS.udp,
+            vrf_id=0,
+            is_add=1,
+        )
+        self.vapi.nat64_add_del_static_bib(
+            i_addr=self.pg0.remote_ip6,
+            o_addr=self.nat_addr,
+            i_port=self.icmp_id_in,
+            o_port=self.icmp_id_out,
+            proto=IP_PROTOS.icmp,
+            vrf_id=0,
+            is_add=1,
+        )
 
         # in2out
         pkts = self.create_stream_in_ip6(self.pg0, self.pg1)
 
         # in2out
         pkts = self.create_stream_in_ip6(self.pg0, self.pg1)
@@ -918,8 +992,9 @@ class TestNAT64(VppTestCase):
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         capture = self.pg1.get_capture(len(pkts))
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         capture = self.pg1.get_capture(len(pkts))
-        self.verify_capture_out(capture, nat_ip=self.nat_addr,
-                                dst_ip=self.pg1.remote_ip4, same_port=True)
+        self.verify_capture_out(
+            capture, nat_ip=self.nat_addr, dst_ip=self.pg1.remote_ip4, same_port=True
+        )
 
         # out2in
         pkts = self.create_stream_out(self.pg1, dst_ip=self.nat_addr)
 
         # out2in
         pkts = self.create_stream_out(self.pg1, dst_ip=self.nat_addr)
@@ -927,7 +1002,7 @@ class TestNAT64(VppTestCase):
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         capture = self.pg0.get_capture(len(pkts))
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         capture = self.pg0.get_capture(len(pkts))
-        ip = IPv6(src=''.join(['64:ff9b::', self.pg1.remote_ip4]))
+        ip = IPv6(src="".join(["64:ff9b::", self.pg1.remote_ip4]))
         self.verify_capture_in_ip6(capture, ip[IPv6].src, self.pg0.remote_ip6)
 
         ses_num_end = self.nat64_get_ses_num()
         self.verify_capture_in_ip6(capture, ip[IPv6].src, self.pg0.remote_ip6)
 
         ses_num_end = self.nat64_get_ses_num()
@@ -935,20 +1010,24 @@ class TestNAT64(VppTestCase):
         self.assertEqual(ses_num_end - ses_num_start, 3)
 
     def test_session_timeout(self):
         self.assertEqual(ses_num_end - ses_num_start, 3)
 
     def test_session_timeout(self):
-        """ NAT64 session timeout """
+        """NAT64 session timeout"""
         self.icmp_id_in = 1234
         self.icmp_id_in = 1234
-        self.vapi.nat64_add_del_pool_addr_range(start_addr=self.nat_addr,
-                                                end_addr=self.nat_addr,
-                                                vrf_id=0xFFFFFFFF,
-                                                is_add=1)
+        self.vapi.nat64_add_del_pool_addr_range(
+            start_addr=self.nat_addr,
+            end_addr=self.nat_addr,
+            vrf_id=0xFFFFFFFF,
+            is_add=1,
+        )
         flags = self.config_flags.NAT_IS_INSIDE
         flags = self.config_flags.NAT_IS_INSIDE
-        self.vapi.nat64_add_del_interface(is_add=1, flags=flags,
-                                          sw_if_index=self.pg0.sw_if_index)
-        self.vapi.nat64_add_del_interface(is_add=1, flags=0,
-                                          sw_if_index=self.pg1.sw_if_index)
-        self.vapi.nat64_set_timeouts(udp=300, tcp_established=5,
-                                     tcp_transitory=5,
-                                     icmp=5)
+        self.vapi.nat64_add_del_interface(
+            is_add=1, flags=flags, sw_if_index=self.pg0.sw_if_index
+        )
+        self.vapi.nat64_add_del_interface(
+            is_add=1, flags=0, sw_if_index=self.pg1.sw_if_index
+        )
+        self.vapi.nat64_set_timeouts(
+            udp=300, tcp_established=5, tcp_transitory=5, icmp=5
+        )
 
         pkts = self.create_stream_in_ip6(self.pg0, self.pg1)
         self.pg0.add_stream(pkts)
 
         pkts = self.create_stream_in_ip6(self.pg0, self.pg1)
         self.pg0.add_stream(pkts)
@@ -965,20 +1044,24 @@ class TestNAT64(VppTestCase):
         self.assertEqual(ses_num_before_timeout - ses_num_after_timeout, 2)
 
     def test_icmp_error(self):
         self.assertEqual(ses_num_before_timeout - ses_num_after_timeout, 2)
 
     def test_icmp_error(self):
-        """ NAT64 ICMP Error message translation """
+        """NAT64 ICMP Error message translation"""
         self.tcp_port_in = 6303
         self.udp_port_in = 6304
         self.icmp_id_in = 6305
 
         self.tcp_port_in = 6303
         self.udp_port_in = 6304
         self.icmp_id_in = 6305
 
-        self.vapi.nat64_add_del_pool_addr_range(start_addr=self.nat_addr,
-                                                end_addr=self.nat_addr,
-                                                vrf_id=0xFFFFFFFF,
-                                                is_add=1)
+        self.vapi.nat64_add_del_pool_addr_range(
+            start_addr=self.nat_addr,
+            end_addr=self.nat_addr,
+            vrf_id=0xFFFFFFFF,
+            is_add=1,
+        )
         flags = self.config_flags.NAT_IS_INSIDE
         flags = self.config_flags.NAT_IS_INSIDE
-        self.vapi.nat64_add_del_interface(is_add=1, flags=flags,
-                                          sw_if_index=self.pg0.sw_if_index)
-        self.vapi.nat64_add_del_interface(is_add=1, flags=0,
-                                          sw_if_index=self.pg1.sw_if_index)
+        self.vapi.nat64_add_del_interface(
+            is_add=1, flags=flags, sw_if_index=self.pg0.sw_if_index
+        )
+        self.vapi.nat64_add_del_interface(
+            is_add=1, flags=0, sw_if_index=self.pg1.sw_if_index
+        )
 
         # send some packets to create sessions
         pkts = self.create_stream_in_ip6(self.pg0, self.pg1)
 
         # send some packets to create sessions
         pkts = self.create_stream_in_ip6(self.pg0, self.pg1)
@@ -986,24 +1069,26 @@ class TestNAT64(VppTestCase):
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         capture_ip4 = self.pg1.get_capture(len(pkts))
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         capture_ip4 = self.pg1.get_capture(len(pkts))
-        self.verify_capture_out(capture_ip4,
-                                nat_ip=self.nat_addr,
-                                dst_ip=self.pg1.remote_ip4)
+        self.verify_capture_out(
+            capture_ip4, nat_ip=self.nat_addr, dst_ip=self.pg1.remote_ip4
+        )
 
         pkts = self.create_stream_out(self.pg1, dst_ip=self.nat_addr)
         self.pg1.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         capture_ip6 = self.pg0.get_capture(len(pkts))
 
         pkts = self.create_stream_out(self.pg1, dst_ip=self.nat_addr)
         self.pg1.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         capture_ip6 = self.pg0.get_capture(len(pkts))
-        ip = IPv6(src=''.join(['64:ff9b::', self.pg1.remote_ip4]))
-        self.verify_capture_in_ip6(capture_ip6, ip[IPv6].src,
-                                   self.pg0.remote_ip6)
+        ip = IPv6(src="".join(["64:ff9b::", self.pg1.remote_ip4]))
+        self.verify_capture_in_ip6(capture_ip6, ip[IPv6].src, self.pg0.remote_ip6)
 
         # in2out
 
         # in2out
-        pkts = [Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-                IPv6(src=self.pg0.remote_ip6, dst=ip[IPv6].src) /
-                ICMPv6DestUnreach(code=1) /
-                packet[IPv6] for packet in capture_ip6]
+        pkts = [
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IPv6(src=self.pg0.remote_ip6, dst=ip[IPv6].src)
+            / ICMPv6DestUnreach(code=1)
+            / packet[IPv6]
+            for packet in capture_ip6
+        ]
         self.pg0.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg0.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -1029,10 +1114,13 @@ class TestNAT64(VppTestCase):
                 raise
 
         # out2in
                 raise
 
         # out2in
-        pkts = [Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac) /
-                IP(src=self.pg1.remote_ip4, dst=self.nat_addr) /
-                ICMP(type=3, code=13) /
-                packet[IP] for packet in capture_ip4]
+        pkts = [
+            Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac)
+            / IP(src=self.pg1.remote_ip4, dst=self.nat_addr)
+            / ICMP(type=3, code=13)
+            / packet[IP]
+            for packet in capture_ip4
+        ]
         self.pg1.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg1.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -1052,14 +1140,13 @@ class TestNAT64(VppTestCase):
                 elif inner.haslayer(UDPerror):
                     self.assertEqual(inner[UDPerror].sport, self.udp_port_in)
                 else:
                 elif inner.haslayer(UDPerror):
                     self.assertEqual(inner[UDPerror].sport, self.udp_port_in)
                 else:
-                    self.assertEqual(inner[ICMPv6EchoRequest].id,
-                                     self.icmp_id_in)
+                    self.assertEqual(inner[ICMPv6EchoRequest].id, self.icmp_id_in)
             except:
                 self.logger.error(ppp("Unexpected or invalid packet:", packet))
                 raise
 
     def test_hairpinning(self):
             except:
                 self.logger.error(ppp("Unexpected or invalid packet:", packet))
                 raise
 
     def test_hairpinning(self):
-        """ NAT64 hairpinning """
+        """NAT64 hairpinning"""
 
         client = self.pg0.remote_hosts[0]
         server = self.pg0.remote_hosts[1]
 
         client = self.pg0.remote_hosts[0]
         server = self.pg0.remote_hosts[1]
@@ -1071,41 +1158,55 @@ class TestNAT64(VppTestCase):
         client_udp_in_port = 1235
         client_tcp_out_port = 0
         client_udp_out_port = 0
         client_udp_in_port = 1235
         client_tcp_out_port = 0
         client_udp_out_port = 0
-        ip = IPv6(src=''.join(['64:ff9b::', self.nat_addr]))
+        ip = IPv6(src="".join(["64:ff9b::", self.nat_addr]))
         nat_addr_ip6 = ip.src
 
         nat_addr_ip6 = ip.src
 
-        self.vapi.nat64_add_del_pool_addr_range(start_addr=self.nat_addr,
-                                                end_addr=self.nat_addr,
-                                                vrf_id=0xFFFFFFFF,
-                                                is_add=1)
+        self.vapi.nat64_add_del_pool_addr_range(
+            start_addr=self.nat_addr,
+            end_addr=self.nat_addr,
+            vrf_id=0xFFFFFFFF,
+            is_add=1,
+        )
         flags = self.config_flags.NAT_IS_INSIDE
         flags = self.config_flags.NAT_IS_INSIDE
-        self.vapi.nat64_add_del_interface(is_add=1, flags=flags,
-                                          sw_if_index=self.pg0.sw_if_index)
-        self.vapi.nat64_add_del_interface(is_add=1, flags=0,
-                                          sw_if_index=self.pg1.sw_if_index)
-
-        self.vapi.nat64_add_del_static_bib(i_addr=server.ip6n,
-                                           o_addr=self.nat_addr,
-                                           i_port=server_tcp_in_port,
-                                           o_port=server_tcp_out_port,
-                                           proto=IP_PROTOS.tcp, vrf_id=0,
-                                           is_add=1)
-        self.vapi.nat64_add_del_static_bib(i_addr=server.ip6n,
-                                           o_addr=self.nat_addr,
-                                           i_port=server_udp_in_port,
-                                           o_port=server_udp_out_port,
-                                           proto=IP_PROTOS.udp, vrf_id=0,
-                                           is_add=1)
+        self.vapi.nat64_add_del_interface(
+            is_add=1, flags=flags, sw_if_index=self.pg0.sw_if_index
+        )
+        self.vapi.nat64_add_del_interface(
+            is_add=1, flags=0, sw_if_index=self.pg1.sw_if_index
+        )
+
+        self.vapi.nat64_add_del_static_bib(
+            i_addr=server.ip6n,
+            o_addr=self.nat_addr,
+            i_port=server_tcp_in_port,
+            o_port=server_tcp_out_port,
+            proto=IP_PROTOS.tcp,
+            vrf_id=0,
+            is_add=1,
+        )
+        self.vapi.nat64_add_del_static_bib(
+            i_addr=server.ip6n,
+            o_addr=self.nat_addr,
+            i_port=server_udp_in_port,
+            o_port=server_udp_out_port,
+            proto=IP_PROTOS.udp,
+            vrf_id=0,
+            is_add=1,
+        )
 
         # client to server
         pkts = []
 
         # client to server
         pkts = []
-        p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-             IPv6(src=client.ip6, dst=nat_addr_ip6) /
-             TCP(sport=client_tcp_in_port, dport=server_tcp_out_port))
+        p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IPv6(src=client.ip6, dst=nat_addr_ip6)
+            / TCP(sport=client_tcp_in_port, dport=server_tcp_out_port)
+        )
         pkts.append(p)
         pkts.append(p)
-        p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-             IPv6(src=client.ip6, dst=nat_addr_ip6) /
-             UDP(sport=client_udp_in_port, dport=server_udp_out_port))
+        p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IPv6(src=client.ip6, dst=nat_addr_ip6)
+            / UDP(sport=client_udp_in_port, dport=server_udp_out_port)
+        )
         pkts.append(p)
         self.pg0.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
         pkts.append(p)
         self.pg0.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
@@ -1130,13 +1231,17 @@ class TestNAT64(VppTestCase):
 
         # server to client
         pkts = []
 
         # server to client
         pkts = []
-        p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-             IPv6(src=server.ip6, dst=nat_addr_ip6) /
-             TCP(sport=server_tcp_in_port, dport=client_tcp_out_port))
+        p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IPv6(src=server.ip6, dst=nat_addr_ip6)
+            / TCP(sport=server_tcp_in_port, dport=client_tcp_out_port)
+        )
         pkts.append(p)
         pkts.append(p)
-        p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-             IPv6(src=server.ip6, dst=nat_addr_ip6) /
-             UDP(sport=server_udp_in_port, dport=client_udp_out_port))
+        p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IPv6(src=server.ip6, dst=nat_addr_ip6)
+            / UDP(sport=server_udp_in_port, dport=client_udp_out_port)
+        )
         pkts.append(p)
         self.pg0.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
         pkts.append(p)
         self.pg0.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
@@ -1159,10 +1264,13 @@ class TestNAT64(VppTestCase):
 
         # ICMP error
         pkts = []
 
         # ICMP error
         pkts = []
-        pkts = [Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-                IPv6(src=client.ip6, dst=nat_addr_ip6) /
-                ICMPv6DestUnreach(code=1) /
-                packet[IPv6] for packet in capture]
+        pkts = [
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IPv6(src=client.ip6, dst=nat_addr_ip6)
+            / ICMPv6DestUnreach(code=1)
+            / packet[IPv6]
+            for packet in capture
+        ]
         self.pg0.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg0.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -1179,40 +1287,45 @@ class TestNAT64(VppTestCase):
                 self.assert_packet_checksums_valid(packet)
                 if inner.haslayer(TCPerror):
                     self.assertEqual(inner[TCPerror].sport, server_tcp_in_port)
                 self.assert_packet_checksums_valid(packet)
                 if inner.haslayer(TCPerror):
                     self.assertEqual(inner[TCPerror].sport, server_tcp_in_port)
-                    self.assertEqual(inner[TCPerror].dport,
-                                     client_tcp_out_port)
+                    self.assertEqual(inner[TCPerror].dport, client_tcp_out_port)
                 else:
                     self.assertEqual(inner[UDPerror].sport, server_udp_in_port)
                 else:
                     self.assertEqual(inner[UDPerror].sport, server_udp_in_port)
-                    self.assertEqual(inner[UDPerror].dport,
-                                     client_udp_out_port)
+                    self.assertEqual(inner[UDPerror].dport, client_udp_out_port)
             except:
                 self.logger.error(ppp("Unexpected or invalid packet:", packet))
                 raise
 
     def test_prefix(self):
             except:
                 self.logger.error(ppp("Unexpected or invalid packet:", packet))
                 raise
 
     def test_prefix(self):
-        """ NAT64 Network-Specific Prefix """
+        """NAT64 Network-Specific Prefix"""
 
 
-        self.vapi.nat64_add_del_pool_addr_range(start_addr=self.nat_addr,
-                                                end_addr=self.nat_addr,
-                                                vrf_id=0xFFFFFFFF,
-                                                is_add=1)
+        self.vapi.nat64_add_del_pool_addr_range(
+            start_addr=self.nat_addr,
+            end_addr=self.nat_addr,
+            vrf_id=0xFFFFFFFF,
+            is_add=1,
+        )
         flags = self.config_flags.NAT_IS_INSIDE
         flags = self.config_flags.NAT_IS_INSIDE
-        self.vapi.nat64_add_del_interface(is_add=1, flags=flags,
-                                          sw_if_index=self.pg0.sw_if_index)
-        self.vapi.nat64_add_del_interface(is_add=1, flags=0,
-                                          sw_if_index=self.pg1.sw_if_index)
-        self.vapi.nat64_add_del_pool_addr_range(start_addr=self.vrf1_nat_addr,
-                                                end_addr=self.vrf1_nat_addr,
-                                                vrf_id=self.vrf1_id, is_add=1)
-        self.vapi.nat64_add_del_interface(is_add=1, flags=flags,
-                                          sw_if_index=self.pg2.sw_if_index)
+        self.vapi.nat64_add_del_interface(
+            is_add=1, flags=flags, sw_if_index=self.pg0.sw_if_index
+        )
+        self.vapi.nat64_add_del_interface(
+            is_add=1, flags=0, sw_if_index=self.pg1.sw_if_index
+        )
+        self.vapi.nat64_add_del_pool_addr_range(
+            start_addr=self.vrf1_nat_addr,
+            end_addr=self.vrf1_nat_addr,
+            vrf_id=self.vrf1_id,
+            is_add=1,
+        )
+        self.vapi.nat64_add_del_interface(
+            is_add=1, flags=flags, sw_if_index=self.pg2.sw_if_index
+        )
 
         # Add global prefix
         global_pref64 = "2001:db8::"
         global_pref64_len = 32
         global_pref64_str = "{}/{}".format(global_pref64, global_pref64_len)
 
         # Add global prefix
         global_pref64 = "2001:db8::"
         global_pref64_len = 32
         global_pref64_str = "{}/{}".format(global_pref64, global_pref64_len)
-        self.vapi.nat64_add_del_prefix(prefix=global_pref64_str, vrf_id=0,
-                                       is_add=1)
+        self.vapi.nat64_add_del_prefix(prefix=global_pref64_str, vrf_id=0, is_add=1)
 
         prefix = self.vapi.nat64_prefix_dump()
         self.assertEqual(len(prefix), 1)
 
         prefix = self.vapi.nat64_prefix_dump()
         self.assertEqual(len(prefix), 1)
@@ -1223,84 +1336,89 @@ class TestNAT64(VppTestCase):
         vrf1_pref64 = "2001:db8:122:300::"
         vrf1_pref64_len = 56
         vrf1_pref64_str = "{}/{}".format(vrf1_pref64, vrf1_pref64_len)
         vrf1_pref64 = "2001:db8:122:300::"
         vrf1_pref64_len = 56
         vrf1_pref64_str = "{}/{}".format(vrf1_pref64, vrf1_pref64_len)
-        self.vapi.nat64_add_del_prefix(prefix=vrf1_pref64_str,
-                                       vrf_id=self.vrf1_id, is_add=1)
+        self.vapi.nat64_add_del_prefix(
+            prefix=vrf1_pref64_str, vrf_id=self.vrf1_id, is_add=1
+        )
 
         prefix = self.vapi.nat64_prefix_dump()
         self.assertEqual(len(prefix), 2)
 
         # Global prefix
 
         prefix = self.vapi.nat64_prefix_dump()
         self.assertEqual(len(prefix), 2)
 
         # Global prefix
-        pkts = self.create_stream_in_ip6(self.pg0,
-                                         self.pg1,
-                                         pref=global_pref64,
-                                         plen=global_pref64_len)
+        pkts = self.create_stream_in_ip6(
+            self.pg0, self.pg1, pref=global_pref64, plen=global_pref64_len
+        )
         self.pg0.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         capture = self.pg1.get_capture(len(pkts))
         self.pg0.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         capture = self.pg1.get_capture(len(pkts))
-        self.verify_capture_out(capture, nat_ip=self.nat_addr,
-                                dst_ip=self.pg1.remote_ip4)
+        self.verify_capture_out(
+            capture, nat_ip=self.nat_addr, dst_ip=self.pg1.remote_ip4
+        )
 
         pkts = self.create_stream_out(self.pg1, dst_ip=self.nat_addr)
         self.pg1.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         capture = self.pg0.get_capture(len(pkts))
 
         pkts = self.create_stream_out(self.pg1, dst_ip=self.nat_addr)
         self.pg1.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         capture = self.pg0.get_capture(len(pkts))
-        dst_ip = self.compose_ip6(self.pg1.remote_ip4,
-                                  global_pref64,
-                                  global_pref64_len)
+        dst_ip = self.compose_ip6(self.pg1.remote_ip4, global_pref64, global_pref64_len)
         self.verify_capture_in_ip6(capture, dst_ip, self.pg0.remote_ip6)
 
         # Tenant specific prefix
         self.verify_capture_in_ip6(capture, dst_ip, self.pg0.remote_ip6)
 
         # Tenant specific prefix
-        pkts = self.create_stream_in_ip6(self.pg2,
-                                         self.pg1,
-                                         pref=vrf1_pref64,
-                                         plen=vrf1_pref64_len)
+        pkts = self.create_stream_in_ip6(
+            self.pg2, self.pg1, pref=vrf1_pref64, plen=vrf1_pref64_len
+        )
         self.pg2.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         capture = self.pg1.get_capture(len(pkts))
         self.pg2.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         capture = self.pg1.get_capture(len(pkts))
-        self.verify_capture_out(capture, nat_ip=self.vrf1_nat_addr,
-                                dst_ip=self.pg1.remote_ip4)
+        self.verify_capture_out(
+            capture, nat_ip=self.vrf1_nat_addr, dst_ip=self.pg1.remote_ip4
+        )
 
         pkts = self.create_stream_out(self.pg1, dst_ip=self.vrf1_nat_addr)
         self.pg1.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         capture = self.pg2.get_capture(len(pkts))
 
         pkts = self.create_stream_out(self.pg1, dst_ip=self.vrf1_nat_addr)
         self.pg1.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         capture = self.pg2.get_capture(len(pkts))
-        dst_ip = self.compose_ip6(self.pg1.remote_ip4,
-                                  vrf1_pref64,
-                                  vrf1_pref64_len)
+        dst_ip = self.compose_ip6(self.pg1.remote_ip4, vrf1_pref64, vrf1_pref64_len)
         self.verify_capture_in_ip6(capture, dst_ip, self.pg2.remote_ip6)
 
     def test_unknown_proto(self):
         self.verify_capture_in_ip6(capture, dst_ip, self.pg2.remote_ip6)
 
     def test_unknown_proto(self):
-        """ NAT64 translate packet with unknown protocol """
+        """NAT64 translate packet with unknown protocol"""
 
 
-        self.vapi.nat64_add_del_pool_addr_range(start_addr=self.nat_addr,
-                                                end_addr=self.nat_addr,
-                                                vrf_id=0xFFFFFFFF,
-                                                is_add=1)
+        self.vapi.nat64_add_del_pool_addr_range(
+            start_addr=self.nat_addr,
+            end_addr=self.nat_addr,
+            vrf_id=0xFFFFFFFF,
+            is_add=1,
+        )
         flags = self.config_flags.NAT_IS_INSIDE
         flags = self.config_flags.NAT_IS_INSIDE
-        self.vapi.nat64_add_del_interface(is_add=1, flags=flags,
-                                          sw_if_index=self.pg0.sw_if_index)
-        self.vapi.nat64_add_del_interface(is_add=1, flags=0,
-                                          sw_if_index=self.pg1.sw_if_index)
-        remote_ip6 = self.compose_ip6(self.pg1.remote_ip4, '64:ff9b::', 96)
+        self.vapi.nat64_add_del_interface(
+            is_add=1, flags=flags, sw_if_index=self.pg0.sw_if_index
+        )
+        self.vapi.nat64_add_del_interface(
+            is_add=1, flags=0, sw_if_index=self.pg1.sw_if_index
+        )
+        remote_ip6 = self.compose_ip6(self.pg1.remote_ip4, "64:ff9b::", 96)
 
         # in2out
 
         # in2out
-        p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-             IPv6(src=self.pg0.remote_ip6, dst=remote_ip6) /
-             TCP(sport=self.tcp_port_in, dport=20))
+        p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IPv6(src=self.pg0.remote_ip6, dst=remote_ip6)
+            / TCP(sport=self.tcp_port_in, dport=20)
+        )
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         p = self.pg1.get_capture(1)
 
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         p = self.pg1.get_capture(1)
 
-        p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-             IPv6(src=self.pg0.remote_ip6, dst=remote_ip6, nh=47) /
-             GRE() /
-             IP(src=self.pg2.local_ip4, dst=self.pg2.remote_ip4) /
-             TCP(sport=1234, dport=1234))
+        p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IPv6(src=self.pg0.remote_ip6, dst=remote_ip6, nh=47)
+            / GRE()
+            / IP(src=self.pg2.local_ip4, dst=self.pg2.remote_ip4)
+            / TCP(sport=1234, dport=1234)
+        )
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -1316,11 +1434,13 @@ class TestNAT64(VppTestCase):
             raise
 
         # out2in
             raise
 
         # out2in
-        p = (Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac) /
-             IP(src=self.pg1.remote_ip4, dst=self.nat_addr) /
-             GRE() /
-             IP(src=self.pg2.remote_ip4, dst=self.pg2.local_ip4) /
-             TCP(sport=1234, dport=1234))
+        p = (
+            Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac)
+            / IP(src=self.pg1.remote_ip4, dst=self.nat_addr)
+            / GRE()
+            / IP(src=self.pg2.remote_ip4, dst=self.pg2.local_ip4)
+            / TCP(sport=1234, dport=1234)
+        )
         self.pg1.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg1.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -1335,7 +1455,7 @@ class TestNAT64(VppTestCase):
             raise
 
     def test_hairpinning_unknown_proto(self):
             raise
 
     def test_hairpinning_unknown_proto(self):
-        """ NAT64 translate packet with unknown protocol - hairpinning """
+        """NAT64 translate packet with unknown protocol - hairpinning"""
 
         client = self.pg0.remote_hosts[0]
         server = self.pg0.remote_hosts[1]
 
         client = self.pg0.remote_hosts[0]
         server = self.pg0.remote_hosts[1]
@@ -1345,53 +1465,71 @@ class TestNAT64(VppTestCase):
         client_tcp_out_port = 1235
         server_nat_ip = "10.0.0.100"
         client_nat_ip = "10.0.0.110"
         client_tcp_out_port = 1235
         server_nat_ip = "10.0.0.100"
         client_nat_ip = "10.0.0.110"
-        server_nat_ip6 = self.compose_ip6(server_nat_ip, '64:ff9b::', 96)
-        client_nat_ip6 = self.compose_ip6(client_nat_ip, '64:ff9b::', 96)
+        server_nat_ip6 = self.compose_ip6(server_nat_ip, "64:ff9b::", 96)
+        client_nat_ip6 = self.compose_ip6(client_nat_ip, "64:ff9b::", 96)
 
 
-        self.vapi.nat64_add_del_pool_addr_range(start_addr=server_nat_ip,
-                                                end_addr=client_nat_ip,
-                                                vrf_id=0xFFFFFFFF,
-                                                is_add=1)
+        self.vapi.nat64_add_del_pool_addr_range(
+            start_addr=server_nat_ip,
+            end_addr=client_nat_ip,
+            vrf_id=0xFFFFFFFF,
+            is_add=1,
+        )
         flags = self.config_flags.NAT_IS_INSIDE
         flags = self.config_flags.NAT_IS_INSIDE
-        self.vapi.nat64_add_del_interface(is_add=1, flags=flags,
-                                          sw_if_index=self.pg0.sw_if_index)
-        self.vapi.nat64_add_del_interface(is_add=1, flags=0,
-                                          sw_if_index=self.pg1.sw_if_index)
-
-        self.vapi.nat64_add_del_static_bib(i_addr=server.ip6n,
-                                           o_addr=server_nat_ip,
-                                           i_port=server_tcp_in_port,
-                                           o_port=server_tcp_out_port,
-                                           proto=IP_PROTOS.tcp, vrf_id=0,
-                                           is_add=1)
-
-        self.vapi.nat64_add_del_static_bib(i_addr=server.ip6n,
-                                           o_addr=server_nat_ip, i_port=0,
-                                           o_port=0,
-                                           proto=IP_PROTOS.gre, vrf_id=0,
-                                           is_add=1)
-
-        self.vapi.nat64_add_del_static_bib(i_addr=client.ip6n,
-                                           o_addr=client_nat_ip,
-                                           i_port=client_tcp_in_port,
-                                           o_port=client_tcp_out_port,
-                                           proto=IP_PROTOS.tcp, vrf_id=0,
-                                           is_add=1)
+        self.vapi.nat64_add_del_interface(
+            is_add=1, flags=flags, sw_if_index=self.pg0.sw_if_index
+        )
+        self.vapi.nat64_add_del_interface(
+            is_add=1, flags=0, sw_if_index=self.pg1.sw_if_index
+        )
+
+        self.vapi.nat64_add_del_static_bib(
+            i_addr=server.ip6n,
+            o_addr=server_nat_ip,
+            i_port=server_tcp_in_port,
+            o_port=server_tcp_out_port,
+            proto=IP_PROTOS.tcp,
+            vrf_id=0,
+            is_add=1,
+        )
+
+        self.vapi.nat64_add_del_static_bib(
+            i_addr=server.ip6n,
+            o_addr=server_nat_ip,
+            i_port=0,
+            o_port=0,
+            proto=IP_PROTOS.gre,
+            vrf_id=0,
+            is_add=1,
+        )
+
+        self.vapi.nat64_add_del_static_bib(
+            i_addr=client.ip6n,
+            o_addr=client_nat_ip,
+            i_port=client_tcp_in_port,
+            o_port=client_tcp_out_port,
+            proto=IP_PROTOS.tcp,
+            vrf_id=0,
+            is_add=1,
+        )
 
         # client to server
 
         # client to server
-        p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-             IPv6(src=client.ip6, dst=server_nat_ip6) /
-             TCP(sport=client_tcp_in_port, dport=server_tcp_out_port))
+        p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IPv6(src=client.ip6, dst=server_nat_ip6)
+            / TCP(sport=client_tcp_in_port, dport=server_tcp_out_port)
+        )
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         p = self.pg0.get_capture(1)
 
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         p = self.pg0.get_capture(1)
 
-        p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-             IPv6(src=client.ip6, dst=server_nat_ip6, nh=IP_PROTOS.gre) /
-             GRE() /
-             IP(src=self.pg2.local_ip4, dst=self.pg2.remote_ip4) /
-             TCP(sport=1234, dport=1234))
+        p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IPv6(src=client.ip6, dst=server_nat_ip6, nh=IP_PROTOS.gre)
+            / GRE()
+            / IP(src=self.pg2.local_ip4, dst=self.pg2.remote_ip4)
+            / TCP(sport=1234, dport=1234)
+        )
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -1406,11 +1544,13 @@ class TestNAT64(VppTestCase):
             raise
 
         # server to client
             raise
 
         # server to client
-        p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-             IPv6(src=server.ip6, dst=client_nat_ip6, nh=IP_PROTOS.gre) /
-             GRE() /
-             IP(src=self.pg2.remote_ip4, dst=self.pg2.local_ip4) /
-             TCP(sport=1234, dport=1234))
+        p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IPv6(src=server.ip6, dst=client_nat_ip6, nh=IP_PROTOS.gre)
+            / GRE()
+            / IP(src=self.pg2.remote_ip4, dst=self.pg2.local_ip4)
+            / TCP(sport=1234, dport=1234)
+        )
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -1425,26 +1565,30 @@ class TestNAT64(VppTestCase):
             raise
 
     def test_one_armed_nat64(self):
             raise
 
     def test_one_armed_nat64(self):
-        """ One armed NAT64 """
+        """One armed NAT64"""
         external_port = 0
         external_port = 0
-        remote_host_ip6 = self.compose_ip6(self.pg3.remote_ip4,
-                                           '64:ff9b::',
-                                           96)
-
-        self.vapi.nat64_add_del_pool_addr_range(start_addr=self.nat_addr,
-                                                end_addr=self.nat_addr,
-                                                vrf_id=0xFFFFFFFF,
-                                                is_add=1)
+        remote_host_ip6 = self.compose_ip6(self.pg3.remote_ip4, "64:ff9b::", 96)
+
+        self.vapi.nat64_add_del_pool_addr_range(
+            start_addr=self.nat_addr,
+            end_addr=self.nat_addr,
+            vrf_id=0xFFFFFFFF,
+            is_add=1,
+        )
         flags = self.config_flags.NAT_IS_INSIDE
         flags = self.config_flags.NAT_IS_INSIDE
-        self.vapi.nat64_add_del_interface(is_add=1, flags=flags,
-                                          sw_if_index=self.pg3.sw_if_index)
-        self.vapi.nat64_add_del_interface(is_add=1, flags=0,
-                                          sw_if_index=self.pg3.sw_if_index)
+        self.vapi.nat64_add_del_interface(
+            is_add=1, flags=flags, sw_if_index=self.pg3.sw_if_index
+        )
+        self.vapi.nat64_add_del_interface(
+            is_add=1, flags=0, sw_if_index=self.pg3.sw_if_index
+        )
 
         # in2out
 
         # in2out
-        p = (Ether(src=self.pg3.remote_mac, dst=self.pg3.local_mac) /
-             IPv6(src=self.pg3.remote_ip6, dst=remote_host_ip6) /
-             TCP(sport=12345, dport=80))
+        p = (
+            Ether(src=self.pg3.remote_mac, dst=self.pg3.local_mac)
+            / IPv6(src=self.pg3.remote_ip6, dst=remote_host_ip6)
+            / TCP(sport=12345, dport=80)
+        )
         self.pg3.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg3.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -1464,9 +1608,11 @@ class TestNAT64(VppTestCase):
             raise
 
         # out2in
             raise
 
         # out2in
-        p = (Ether(src=self.pg3.remote_mac, dst=self.pg3.local_mac) /
-             IP(src=self.pg3.remote_ip4, dst=self.nat_addr) /
-             TCP(sport=80, dport=external_port))
+        p = (
+            Ether(src=self.pg3.remote_mac, dst=self.pg3.local_mac)
+            / IP(src=self.pg3.remote_ip4, dst=self.nat_addr)
+            / TCP(sport=80, dport=external_port)
+        )
         self.pg3.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg3.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -1485,30 +1631,33 @@ class TestNAT64(VppTestCase):
             raise
 
     def test_frag_in_order(self):
             raise
 
     def test_frag_in_order(self):
-        """ NAT64 translate fragments arriving in order """
+        """NAT64 translate fragments arriving in order"""
         self.tcp_port_in = random.randint(1025, 65535)
 
         self.tcp_port_in = random.randint(1025, 65535)
 
-        self.vapi.nat64_add_del_pool_addr_range(start_addr=self.nat_addr,
-                                                end_addr=self.nat_addr,
-                                                vrf_id=0xFFFFFFFF,
-                                                is_add=1)
+        self.vapi.nat64_add_del_pool_addr_range(
+            start_addr=self.nat_addr,
+            end_addr=self.nat_addr,
+            vrf_id=0xFFFFFFFF,
+            is_add=1,
+        )
         flags = self.config_flags.NAT_IS_INSIDE
         flags = self.config_flags.NAT_IS_INSIDE
-        self.vapi.nat64_add_del_interface(is_add=1, flags=flags,
-                                          sw_if_index=self.pg0.sw_if_index)
-        self.vapi.nat64_add_del_interface(is_add=1, flags=0,
-                                          sw_if_index=self.pg1.sw_if_index)
+        self.vapi.nat64_add_del_interface(
+            is_add=1, flags=flags, sw_if_index=self.pg0.sw_if_index
+        )
+        self.vapi.nat64_add_del_interface(
+            is_add=1, flags=0, sw_if_index=self.pg1.sw_if_index
+        )
 
         # in2out
 
         # in2out
-        data = b'a' * 200
-        pkts = self.create_stream_frag_ip6(self.pg0, self.pg1.remote_ip4,
-                                           self.tcp_port_in, 20, data)
+        data = b"a" * 200
+        pkts = self.create_stream_frag_ip6(
+            self.pg0, self.pg1.remote_ip4, self.tcp_port_in, 20, data
+        )
         self.pg0.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         frags = self.pg1.get_capture(len(pkts))
         self.pg0.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         frags = self.pg1.get_capture(len(pkts))
-        p = self.reass_frags_and_verify(frags,
-                                        self.nat_addr,
-                                        self.pg1.remote_ip4)
+        p = self.reass_frags_and_verify(frags, self.nat_addr, self.pg1.remote_ip4)
         self.assertEqual(p[TCP].dport, 20)
         self.assertNotEqual(p[TCP].sport, self.tcp_port_in)
         self.tcp_port_out = p[TCP].sport
         self.assertEqual(p[TCP].dport, 20)
         self.assertNotEqual(p[TCP].sport, self.tcp_port_in)
         self.tcp_port_out = p[TCP].sport
@@ -1516,56 +1665,59 @@ class TestNAT64(VppTestCase):
 
         # out2in
         data = b"A" * 4 + b"b" * 16 + b"C" * 3
 
         # out2in
         data = b"A" * 4 + b"b" * 16 + b"C" * 3
-        pkts = self.create_stream_frag(self.pg1,
-                                       self.nat_addr,
-                                       20,
-                                       self.tcp_port_out,
-                                       data)
+        pkts = self.create_stream_frag(
+            self.pg1, self.nat_addr, 20, self.tcp_port_out, data
+        )
         self.pg1.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         frags = self.pg0.get_capture(len(pkts))
         self.logger.debug(ppc("Captured:", frags))
         self.pg1.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         frags = self.pg0.get_capture(len(pkts))
         self.logger.debug(ppc("Captured:", frags))
-        src = self.compose_ip6(self.pg1.remote_ip4, '64:ff9b::', 96)
+        src = self.compose_ip6(self.pg1.remote_ip4, "64:ff9b::", 96)
         p = self.reass_frags_and_verify_ip6(frags, src, self.pg0.remote_ip6)
         self.assertEqual(p[TCP].sport, 20)
         self.assertEqual(p[TCP].dport, self.tcp_port_in)
         self.assertEqual(data, p[Raw].load)
 
     def test_reass_hairpinning(self):
         p = self.reass_frags_and_verify_ip6(frags, src, self.pg0.remote_ip6)
         self.assertEqual(p[TCP].sport, 20)
         self.assertEqual(p[TCP].dport, self.tcp_port_in)
         self.assertEqual(data, p[Raw].load)
 
     def test_reass_hairpinning(self):
-        """ NAT64 fragments hairpinning """
-        data = b'a' * 200
+        """NAT64 fragments hairpinning"""
+        data = b"a" * 200
         server = self.pg0.remote_hosts[1]
         server_in_port = random.randint(1025, 65535)
         server_out_port = random.randint(1025, 65535)
         client_in_port = random.randint(1025, 65535)
         server = self.pg0.remote_hosts[1]
         server_in_port = random.randint(1025, 65535)
         server_out_port = random.randint(1025, 65535)
         client_in_port = random.randint(1025, 65535)
-        ip = IPv6(src=''.join(['64:ff9b::', self.nat_addr]))
+        ip = IPv6(src="".join(["64:ff9b::", self.nat_addr]))
         nat_addr_ip6 = ip.src
 
         nat_addr_ip6 = ip.src
 
-        self.vapi.nat64_add_del_pool_addr_range(start_addr=self.nat_addr,
-                                                end_addr=self.nat_addr,
-                                                vrf_id=0xFFFFFFFF,
-                                                is_add=1)
+        self.vapi.nat64_add_del_pool_addr_range(
+            start_addr=self.nat_addr,
+            end_addr=self.nat_addr,
+            vrf_id=0xFFFFFFFF,
+            is_add=1,
+        )
         flags = self.config_flags.NAT_IS_INSIDE
         flags = self.config_flags.NAT_IS_INSIDE
-        self.vapi.nat64_add_del_interface(is_add=1, flags=flags,
-                                          sw_if_index=self.pg0.sw_if_index)
-        self.vapi.nat64_add_del_interface(is_add=1, flags=0,
-                                          sw_if_index=self.pg1.sw_if_index)
+        self.vapi.nat64_add_del_interface(
+            is_add=1, flags=flags, sw_if_index=self.pg0.sw_if_index
+        )
+        self.vapi.nat64_add_del_interface(
+            is_add=1, flags=0, sw_if_index=self.pg1.sw_if_index
+        )
 
         # add static BIB entry for server
 
         # add static BIB entry for server
-        self.vapi.nat64_add_del_static_bib(i_addr=server.ip6n,
-                                           o_addr=self.nat_addr,
-                                           i_port=server_in_port,
-                                           o_port=server_out_port,
-                                           proto=IP_PROTOS.tcp, vrf_id=0,
-                                           is_add=1)
+        self.vapi.nat64_add_del_static_bib(
+            i_addr=server.ip6n,
+            o_addr=self.nat_addr,
+            i_port=server_in_port,
+            o_port=server_out_port,
+            proto=IP_PROTOS.tcp,
+            vrf_id=0,
+            is_add=1,
+        )
 
         # send packet from host to server
 
         # send packet from host to server
-        pkts = self.create_stream_frag_ip6(self.pg0,
-                                           self.nat_addr,
-                                           client_in_port,
-                                           server_out_port,
-                                           data)
+        pkts = self.create_stream_frag_ip6(
+            self.pg0, self.nat_addr, client_in_port, server_out_port, data
+        )
         self.pg0.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg0.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -1577,31 +1729,34 @@ class TestNAT64(VppTestCase):
         self.assertEqual(data, p[Raw].load)
 
     def test_frag_out_of_order(self):
         self.assertEqual(data, p[Raw].load)
 
     def test_frag_out_of_order(self):
-        """ NAT64 translate fragments arriving out of order """
+        """NAT64 translate fragments arriving out of order"""
         self.tcp_port_in = random.randint(1025, 65535)
 
         self.tcp_port_in = random.randint(1025, 65535)
 
-        self.vapi.nat64_add_del_pool_addr_range(start_addr=self.nat_addr,
-                                                end_addr=self.nat_addr,
-                                                vrf_id=0xFFFFFFFF,
-                                                is_add=1)
+        self.vapi.nat64_add_del_pool_addr_range(
+            start_addr=self.nat_addr,
+            end_addr=self.nat_addr,
+            vrf_id=0xFFFFFFFF,
+            is_add=1,
+        )
         flags = self.config_flags.NAT_IS_INSIDE
         flags = self.config_flags.NAT_IS_INSIDE
-        self.vapi.nat64_add_del_interface(is_add=1, flags=flags,
-                                          sw_if_index=self.pg0.sw_if_index)
-        self.vapi.nat64_add_del_interface(is_add=1, flags=0,
-                                          sw_if_index=self.pg1.sw_if_index)
+        self.vapi.nat64_add_del_interface(
+            is_add=1, flags=flags, sw_if_index=self.pg0.sw_if_index
+        )
+        self.vapi.nat64_add_del_interface(
+            is_add=1, flags=0, sw_if_index=self.pg1.sw_if_index
+        )
 
         # in2out
 
         # in2out
-        data = b'a' * 200
-        pkts = self.create_stream_frag_ip6(self.pg0, self.pg1.remote_ip4,
-                                           self.tcp_port_in, 20, data)
+        data = b"a" * 200
+        pkts = self.create_stream_frag_ip6(
+            self.pg0, self.pg1.remote_ip4, self.tcp_port_in, 20, data
+        )
         pkts.reverse()
         self.pg0.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         frags = self.pg1.get_capture(len(pkts))
         pkts.reverse()
         self.pg0.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         frags = self.pg1.get_capture(len(pkts))
-        p = self.reass_frags_and_verify(frags,
-                                        self.nat_addr,
-                                        self.pg1.remote_ip4)
+        p = self.reass_frags_and_verify(frags, self.nat_addr, self.pg1.remote_ip4)
         self.assertEqual(p[TCP].dport, 20)
         self.assertNotEqual(p[TCP].sport, self.tcp_port_in)
         self.tcp_port_out = p[TCP].sport
         self.assertEqual(p[TCP].dport, 20)
         self.assertNotEqual(p[TCP].sport, self.tcp_port_in)
         self.tcp_port_out = p[TCP].sport
@@ -1609,27 +1764,25 @@ class TestNAT64(VppTestCase):
 
         # out2in
         data = b"A" * 4 + b"B" * 16 + b"C" * 3
 
         # out2in
         data = b"A" * 4 + b"B" * 16 + b"C" * 3
-        pkts = self.create_stream_frag(self.pg1,
-                                       self.nat_addr,
-                                       20,
-                                       self.tcp_port_out,
-                                       data)
+        pkts = self.create_stream_frag(
+            self.pg1, self.nat_addr, 20, self.tcp_port_out, data
+        )
         pkts.reverse()
         self.pg1.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         frags = self.pg0.get_capture(len(pkts))
         pkts.reverse()
         self.pg1.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         frags = self.pg0.get_capture(len(pkts))
-        src = self.compose_ip6(self.pg1.remote_ip4, '64:ff9b::', 96)
+        src = self.compose_ip6(self.pg1.remote_ip4, "64:ff9b::", 96)
         p = self.reass_frags_and_verify_ip6(frags, src, self.pg0.remote_ip6)
         self.assertEqual(p[TCP].sport, 20)
         self.assertEqual(p[TCP].dport, self.tcp_port_in)
         self.assertEqual(data, p[Raw].load)
 
     def test_interface_addr(self):
         p = self.reass_frags_and_verify_ip6(frags, src, self.pg0.remote_ip6)
         self.assertEqual(p[TCP].sport, 20)
         self.assertEqual(p[TCP].dport, self.tcp_port_in)
         self.assertEqual(data, p[Raw].load)
 
     def test_interface_addr(self):
-        """ Acquire NAT64 pool addresses from interface """
+        """Acquire NAT64 pool addresses from interface"""
         self.vapi.nat64_add_del_interface_addr(
         self.vapi.nat64_add_del_interface_addr(
-            is_add=1,
-            sw_if_index=self.pg4.sw_if_index)
+            is_add=1, sw_if_index=self.pg4.sw_if_index
+        )
 
         # no address in NAT64 pool
         addresses = self.vapi.nat44_address_dump()
 
         # no address in NAT64 pool
         addresses = self.vapi.nat44_address_dump()
@@ -1640,8 +1793,7 @@ class TestNAT64(VppTestCase):
         addresses = self.vapi.nat64_pool_addr_dump()
         self.assertEqual(len(addresses), 1)
 
         addresses = self.vapi.nat64_pool_addr_dump()
         self.assertEqual(len(addresses), 1)
 
-        self.assertEqual(str(addresses[0].address),
-                         self.pg4.local_ip4)
+        self.assertEqual(str(addresses[0].address), self.pg4.local_ip4)
 
         # remove interface address and check NAT64 address pool
         self.pg4.unconfig_ip4()
 
         # remove interface address and check NAT64 address pool
         self.pg4.unconfig_ip4()
@@ -1650,51 +1802,61 @@ class TestNAT64(VppTestCase):
 
     @unittest.skipUnless(config.extended, "part of extended tests")
     def test_ipfix_max_bibs_sessions(self):
 
     @unittest.skipUnless(config.extended, "part of extended tests")
     def test_ipfix_max_bibs_sessions(self):
-        """ IPFIX logging maximum session and BIB entries exceeded """
+        """IPFIX logging maximum session and BIB entries exceeded"""
         max_bibs = 1280
         max_sessions = 2560
         max_bibs = 1280
         max_sessions = 2560
-        remote_host_ip6 = self.compose_ip6(self.pg1.remote_ip4,
-                                           '64:ff9b::',
-                                           96)
-
-        self.vapi.nat64_add_del_pool_addr_range(start_addr=self.nat_addr,
-                                                end_addr=self.nat_addr,
-                                                vrf_id=0xFFFFFFFF,
-                                                is_add=1)
+        remote_host_ip6 = self.compose_ip6(self.pg1.remote_ip4, "64:ff9b::", 96)
+
+        self.vapi.nat64_add_del_pool_addr_range(
+            start_addr=self.nat_addr,
+            end_addr=self.nat_addr,
+            vrf_id=0xFFFFFFFF,
+            is_add=1,
+        )
         flags = self.config_flags.NAT_IS_INSIDE
         flags = self.config_flags.NAT_IS_INSIDE
-        self.vapi.nat64_add_del_interface(is_add=1, flags=flags,
-                                          sw_if_index=self.pg0.sw_if_index)
-        self.vapi.nat64_add_del_interface(is_add=1, flags=0,
-                                          sw_if_index=self.pg1.sw_if_index)
+        self.vapi.nat64_add_del_interface(
+            is_add=1, flags=flags, sw_if_index=self.pg0.sw_if_index
+        )
+        self.vapi.nat64_add_del_interface(
+            is_add=1, flags=0, sw_if_index=self.pg1.sw_if_index
+        )
 
         pkts = []
         src = ""
         for i in range(0, max_bibs):
             src = "fd01:aa::%x" % (i)
 
         pkts = []
         src = ""
         for i in range(0, max_bibs):
             src = "fd01:aa::%x" % (i)
-            p = (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-                 IPv6(src=src, dst=remote_host_ip6) /
-                 TCP(sport=12345, dport=80))
+            p = (
+                Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+                / IPv6(src=src, dst=remote_host_ip6)
+                / TCP(sport=12345, dport=80)
+            )
             pkts.append(p)
             pkts.append(p)
-            p = (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-                 IPv6(src=src, dst=remote_host_ip6) /
-                 TCP(sport=12345, dport=22))
+            p = (
+                Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+                / IPv6(src=src, dst=remote_host_ip6)
+                / TCP(sport=12345, dport=22)
+            )
             pkts.append(p)
         self.pg0.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg1.get_capture(max_sessions)
 
             pkts.append(p)
         self.pg0.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg1.get_capture(max_sessions)
 
-        self.vapi.set_ipfix_exporter(collector_address=self.pg3.remote_ip4,
-                                     src_address=self.pg3.local_ip4,
-                                     path_mtu=512,
-                                     template_interval=10)
-        self.vapi.nat_ipfix_enable_disable(domain_id=self.ipfix_domain_id,
-                                           src_port=self.ipfix_src_port,
-                                           enable=1)
-
-        p = (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-             IPv6(src=src, dst=remote_host_ip6) /
-             TCP(sport=12345, dport=25))
+        self.vapi.set_ipfix_exporter(
+            collector_address=self.pg3.remote_ip4,
+            src_address=self.pg3.local_ip4,
+            path_mtu=512,
+            template_interval=10,
+        )
+        self.vapi.nat_ipfix_enable_disable(
+            domain_id=self.ipfix_domain_id, src_port=self.ipfix_src_port, enable=1
+        )
+
+        p = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IPv6(src=src, dst=remote_host_ip6)
+            / TCP(sport=12345, dport=25)
+        )
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -1709,8 +1871,7 @@ class TestNAT64(VppTestCase):
             self.assertEqual(p[IP].dst, self.pg3.remote_ip4)
             self.assertEqual(p[UDP].sport, self.ipfix_src_port)
             self.assertEqual(p[UDP].dport, 4739)
             self.assertEqual(p[IP].dst, self.pg3.remote_ip4)
             self.assertEqual(p[UDP].sport, self.ipfix_src_port)
             self.assertEqual(p[UDP].dport, 4739)
-            self.assertEqual(p[IPFIX].observationDomainID,
-                             self.ipfix_domain_id)
+            self.assertEqual(p[IPFIX].observationDomainID, self.ipfix_domain_id)
             if p.haslayer(Template):
                 ipfix.add_template(p.getlayer(Template))
         # verify events in data set
             if p.haslayer(Template):
                 ipfix.add_template(p.getlayer(Template))
         # verify events in data set
@@ -1719,9 +1880,11 @@ class TestNAT64(VppTestCase):
                 data = ipfix.decode_data_set(p.getlayer(Set))
                 self.verify_ipfix_max_sessions(data, max_sessions)
 
                 data = ipfix.decode_data_set(p.getlayer(Set))
                 self.verify_ipfix_max_sessions(data, max_sessions)
 
-        p = (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-             IPv6(src=self.pg0.remote_ip6, dst=remote_host_ip6) /
-             TCP(sport=12345, dport=80))
+        p = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IPv6(src=self.pg0.remote_ip6, dst=remote_host_ip6)
+            / TCP(sport=12345, dport=80)
+        )
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -1735,40 +1898,45 @@ class TestNAT64(VppTestCase):
             self.assertEqual(p[IP].dst, self.pg3.remote_ip4)
             self.assertEqual(p[UDP].sport, self.ipfix_src_port)
             self.assertEqual(p[UDP].dport, 4739)
             self.assertEqual(p[IP].dst, self.pg3.remote_ip4)
             self.assertEqual(p[UDP].sport, self.ipfix_src_port)
             self.assertEqual(p[UDP].dport, 4739)
-            self.assertEqual(p[IPFIX].observationDomainID,
-                             self.ipfix_domain_id)
+            self.assertEqual(p[IPFIX].observationDomainID, self.ipfix_domain_id)
             if p.haslayer(Data):
                 data = ipfix.decode_data_set(p.getlayer(Set))
                 self.verify_ipfix_max_bibs(data, max_bibs)
 
     def test_ipfix_bib_ses(self):
             if p.haslayer(Data):
                 data = ipfix.decode_data_set(p.getlayer(Set))
                 self.verify_ipfix_max_bibs(data, max_bibs)
 
     def test_ipfix_bib_ses(self):
-        """ IPFIX logging NAT64 BIB/session create and delete events """
+        """IPFIX logging NAT64 BIB/session create and delete events"""
         self.tcp_port_in = random.randint(1025, 65535)
         self.tcp_port_in = random.randint(1025, 65535)
-        remote_host_ip6 = self.compose_ip6(self.pg1.remote_ip4,
-                                           '64:ff9b::',
-                                           96)
-
-        self.vapi.nat64_add_del_pool_addr_range(start_addr=self.nat_addr,
-                                                end_addr=self.nat_addr,
-                                                vrf_id=0xFFFFFFFF,
-                                                is_add=1)
+        remote_host_ip6 = self.compose_ip6(self.pg1.remote_ip4, "64:ff9b::", 96)
+
+        self.vapi.nat64_add_del_pool_addr_range(
+            start_addr=self.nat_addr,
+            end_addr=self.nat_addr,
+            vrf_id=0xFFFFFFFF,
+            is_add=1,
+        )
         flags = self.config_flags.NAT_IS_INSIDE
         flags = self.config_flags.NAT_IS_INSIDE
-        self.vapi.nat64_add_del_interface(is_add=1, flags=flags,
-                                          sw_if_index=self.pg0.sw_if_index)
-        self.vapi.nat64_add_del_interface(is_add=1, flags=0,
-                                          sw_if_index=self.pg1.sw_if_index)
-        self.vapi.set_ipfix_exporter(collector_address=self.pg3.remote_ip4,
-                                     src_address=self.pg3.local_ip4,
-                                     path_mtu=512,
-                                     template_interval=10)
-        self.vapi.nat_ipfix_enable_disable(domain_id=self.ipfix_domain_id,
-                                           src_port=self.ipfix_src_port,
-                                           enable=1)
+        self.vapi.nat64_add_del_interface(
+            is_add=1, flags=flags, sw_if_index=self.pg0.sw_if_index
+        )
+        self.vapi.nat64_add_del_interface(
+            is_add=1, flags=0, sw_if_index=self.pg1.sw_if_index
+        )
+        self.vapi.set_ipfix_exporter(
+            collector_address=self.pg3.remote_ip4,
+            src_address=self.pg3.local_ip4,
+            path_mtu=512,
+            template_interval=10,
+        )
+        self.vapi.nat_ipfix_enable_disable(
+            domain_id=self.ipfix_domain_id, src_port=self.ipfix_src_port, enable=1
+        )
 
         # Create
 
         # Create
-        p = (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-             IPv6(src=self.pg0.remote_ip6, dst=remote_host_ip6) /
-             TCP(sport=self.tcp_port_in, dport=25))
+        p = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IPv6(src=self.pg0.remote_ip6, dst=remote_host_ip6)
+            / TCP(sport=self.tcp_port_in, dport=25)
+        )
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -1784,8 +1952,7 @@ class TestNAT64(VppTestCase):
             self.assertEqual(p[IP].dst, self.pg3.remote_ip4)
             self.assertEqual(p[UDP].sport, self.ipfix_src_port)
             self.assertEqual(p[UDP].dport, 4739)
             self.assertEqual(p[IP].dst, self.pg3.remote_ip4)
             self.assertEqual(p[UDP].sport, self.ipfix_src_port)
             self.assertEqual(p[UDP].dport, 4739)
-            self.assertEqual(p[IPFIX].observationDomainID,
-                             self.ipfix_domain_id)
+            self.assertEqual(p[IPFIX].observationDomainID, self.ipfix_domain_id)
             if p.haslayer(Template):
                 ipfix.add_template(p.getlayer(Template))
         # verify events in data set
             if p.haslayer(Template):
                 ipfix.add_template(p.getlayer(Template))
         # verify events in data set
@@ -1795,20 +1962,20 @@ class TestNAT64(VppTestCase):
                 if scapy.compat.orb(data[0][230]) == 10:
                     self.verify_ipfix_bib(data, 1, self.pg0.remote_ip6)
                 elif scapy.compat.orb(data[0][230]) == 6:
                 if scapy.compat.orb(data[0][230]) == 10:
                     self.verify_ipfix_bib(data, 1, self.pg0.remote_ip6)
                 elif scapy.compat.orb(data[0][230]) == 6:
-                    self.verify_ipfix_nat64_ses(data,
-                                                1,
-                                                self.pg0.remote_ip6,
-                                                self.pg1.remote_ip4,
-                                                25)
+                    self.verify_ipfix_nat64_ses(
+                        data, 1, self.pg0.remote_ip6, self.pg1.remote_ip4, 25
+                    )
                 else:
                     self.logger.error(ppp("Unexpected or invalid packet: ", p))
 
         # Delete
         self.pg_enable_capture(self.pg_interfaces)
                 else:
                     self.logger.error(ppp("Unexpected or invalid packet: ", p))
 
         # Delete
         self.pg_enable_capture(self.pg_interfaces)
-        self.vapi.nat64_add_del_pool_addr_range(start_addr=self.nat_addr,
-                                                end_addr=self.nat_addr,
-                                                vrf_id=0xFFFFFFFF,
-                                                is_add=0)
+        self.vapi.nat64_add_del_pool_addr_range(
+            start_addr=self.nat_addr,
+            end_addr=self.nat_addr,
+            vrf_id=0xFFFFFFFF,
+            is_add=0,
+        )
         self.vapi.ipfix_flush()
         capture = self.pg3.get_capture(2)
         # verify events in data set
         self.vapi.ipfix_flush()
         capture = self.pg3.get_capture(2)
         # verify events in data set
@@ -1818,44 +1985,44 @@ class TestNAT64(VppTestCase):
             self.assertEqual(p[IP].dst, self.pg3.remote_ip4)
             self.assertEqual(p[UDP].sport, self.ipfix_src_port)
             self.assertEqual(p[UDP].dport, 4739)
             self.assertEqual(p[IP].dst, self.pg3.remote_ip4)
             self.assertEqual(p[UDP].sport, self.ipfix_src_port)
             self.assertEqual(p[UDP].dport, 4739)
-            self.assertEqual(p[IPFIX].observationDomainID,
-                             self.ipfix_domain_id)
+            self.assertEqual(p[IPFIX].observationDomainID, self.ipfix_domain_id)
             if p.haslayer(Data):
                 data = ipfix.decode_data_set(p.getlayer(Set))
                 if scapy.compat.orb(data[0][230]) == 11:
                     self.verify_ipfix_bib(data, 0, self.pg0.remote_ip6)
                 elif scapy.compat.orb(data[0][230]) == 7:
             if p.haslayer(Data):
                 data = ipfix.decode_data_set(p.getlayer(Set))
                 if scapy.compat.orb(data[0][230]) == 11:
                     self.verify_ipfix_bib(data, 0, self.pg0.remote_ip6)
                 elif scapy.compat.orb(data[0][230]) == 7:
-                    self.verify_ipfix_nat64_ses(data,
-                                                0,
-                                                self.pg0.remote_ip6,
-                                                self.pg1.remote_ip4,
-                                                25)
+                    self.verify_ipfix_nat64_ses(
+                        data, 0, self.pg0.remote_ip6, self.pg1.remote_ip4, 25
+                    )
                 else:
                     self.logger.error(ppp("Unexpected or invalid packet: ", p))
 
     def test_syslog_sess(self):
                 else:
                     self.logger.error(ppp("Unexpected or invalid packet: ", p))
 
     def test_syslog_sess(self):
-        """ Test syslog session creation and deletion """
+        """Test syslog session creation and deletion"""
         self.tcp_port_in = random.randint(1025, 65535)
         self.tcp_port_in = random.randint(1025, 65535)
-        remote_host_ip6 = self.compose_ip6(self.pg1.remote_ip4,
-                                           '64:ff9b::',
-                                           96)
-
-        self.vapi.nat64_add_del_pool_addr_range(start_addr=self.nat_addr,
-                                                end_addr=self.nat_addr,
-                                                vrf_id=0xFFFFFFFF,
-                                                is_add=1)
+        remote_host_ip6 = self.compose_ip6(self.pg1.remote_ip4, "64:ff9b::", 96)
+
+        self.vapi.nat64_add_del_pool_addr_range(
+            start_addr=self.nat_addr,
+            end_addr=self.nat_addr,
+            vrf_id=0xFFFFFFFF,
+            is_add=1,
+        )
         flags = self.config_flags.NAT_IS_INSIDE
         flags = self.config_flags.NAT_IS_INSIDE
-        self.vapi.nat64_add_del_interface(is_add=1, flags=flags,
-                                          sw_if_index=self.pg0.sw_if_index)
-        self.vapi.nat64_add_del_interface(is_add=1, flags=0,
-                                          sw_if_index=self.pg1.sw_if_index)
-        self.vapi.syslog_set_filter(
-            self.SYSLOG_SEVERITY.SYSLOG_API_SEVERITY_INFO)
+        self.vapi.nat64_add_del_interface(
+            is_add=1, flags=flags, sw_if_index=self.pg0.sw_if_index
+        )
+        self.vapi.nat64_add_del_interface(
+            is_add=1, flags=0, sw_if_index=self.pg1.sw_if_index
+        )
+        self.vapi.syslog_set_filter(self.SYSLOG_SEVERITY.SYSLOG_API_SEVERITY_INFO)
         self.vapi.syslog_set_sender(self.pg3.local_ip4, self.pg3.remote_ip4)
 
         self.vapi.syslog_set_sender(self.pg3.local_ip4, self.pg3.remote_ip4)
 
-        p = (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-             IPv6(src=self.pg0.remote_ip6, dst=remote_host_ip6) /
-             TCP(sport=self.tcp_port_in, dport=self.tcp_external_port))
+        p = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IPv6(src=self.pg0.remote_ip6, dst=remote_host_ip6)
+            / TCP(sport=self.tcp_port_in, dport=self.tcp_external_port)
+        )
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -1866,10 +2033,12 @@ class TestNAT64(VppTestCase):
 
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
-        self.vapi.nat64_add_del_pool_addr_range(start_addr=self.nat_addr,
-                                                end_addr=self.nat_addr,
-                                                vrf_id=0xFFFFFFFF,
-                                                is_add=0)
+        self.vapi.nat64_add_del_pool_addr_range(
+            start_addr=self.nat_addr,
+            end_addr=self.nat_addr,
+            vrf_id=0xFFFFFFFF,
+            is_add=0,
+        )
         capture = self.pg3.get_capture(1)
         self.verify_syslog_sess(capture[0][Raw].load, False, True)
 
         capture = self.pg3.get_capture(1)
         self.verify_syslog_sess(capture[0][Raw].load, False, True)
 
@@ -1884,51 +2053,57 @@ class TestNAT64(VppTestCase):
         """
         Clear NAT64 configuration.
         """
         """
         Clear NAT64 configuration.
         """
-        self.vapi.nat_ipfix_enable_disable(domain_id=self.ipfix_domain_id,
-                                           src_port=self.ipfix_src_port,
-                                           enable=0)
+        self.vapi.nat_ipfix_enable_disable(
+            domain_id=self.ipfix_domain_id, src_port=self.ipfix_src_port, enable=0
+        )
         self.ipfix_src_port = 4739
         self.ipfix_domain_id = 1
 
         self.ipfix_src_port = 4739
         self.ipfix_domain_id = 1
 
-        self.vapi.syslog_set_filter(
-            self.SYSLOG_SEVERITY.SYSLOG_API_SEVERITY_EMERG)
+        self.vapi.syslog_set_filter(self.SYSLOG_SEVERITY.SYSLOG_API_SEVERITY_EMERG)
 
 
-        self.vapi.nat64_set_timeouts(udp=300, tcp_established=7440,
-                                     tcp_transitory=240, icmp=60)
+        self.vapi.nat64_set_timeouts(
+            udp=300, tcp_established=7440, tcp_transitory=240, icmp=60
+        )
 
         interfaces = self.vapi.nat64_interface_dump()
         for intf in interfaces:
 
         interfaces = self.vapi.nat64_interface_dump()
         for intf in interfaces:
-            self.vapi.nat64_add_del_interface(is_add=0, flags=intf.flags,
-                                              sw_if_index=intf.sw_if_index)
+            self.vapi.nat64_add_del_interface(
+                is_add=0, flags=intf.flags, sw_if_index=intf.sw_if_index
+            )
 
         bib = self.vapi.nat64_bib_dump(proto=255)
         for bibe in bib:
             if bibe.flags & self.config_flags.NAT_IS_STATIC:
 
         bib = self.vapi.nat64_bib_dump(proto=255)
         for bibe in bib:
             if bibe.flags & self.config_flags.NAT_IS_STATIC:
-                self.vapi.nat64_add_del_static_bib(i_addr=bibe.i_addr,
-                                                   o_addr=bibe.o_addr,
-                                                   i_port=bibe.i_port,
-                                                   o_port=bibe.o_port,
-                                                   proto=bibe.proto,
-                                                   vrf_id=bibe.vrf_id,
-                                                   is_add=0)
+                self.vapi.nat64_add_del_static_bib(
+                    i_addr=bibe.i_addr,
+                    o_addr=bibe.o_addr,
+                    i_port=bibe.i_port,
+                    o_port=bibe.o_port,
+                    proto=bibe.proto,
+                    vrf_id=bibe.vrf_id,
+                    is_add=0,
+                )
 
         adresses = self.vapi.nat64_pool_addr_dump()
         for addr in adresses:
 
         adresses = self.vapi.nat64_pool_addr_dump()
         for addr in adresses:
-            self.vapi.nat64_add_del_pool_addr_range(start_addr=addr.address,
-                                                    end_addr=addr.address,
-                                                    vrf_id=addr.vrf_id,
-                                                    is_add=0)
+            self.vapi.nat64_add_del_pool_addr_range(
+                start_addr=addr.address,
+                end_addr=addr.address,
+                vrf_id=addr.vrf_id,
+                is_add=0,
+            )
 
         prefixes = self.vapi.nat64_prefix_dump()
         for prefix in prefixes:
 
         prefixes = self.vapi.nat64_prefix_dump()
         for prefix in prefixes:
-            self.vapi.nat64_add_del_prefix(prefix=str(prefix.prefix),
-                                           vrf_id=prefix.vrf_id, is_add=0)
+            self.vapi.nat64_add_del_prefix(
+                prefix=str(prefix.prefix), vrf_id=prefix.vrf_id, is_add=0
+            )
 
 
-        bibs = self.statistics.get_counter('/nat64/total-bibs')
+        bibs = self.statistics.get_counter("/nat64/total-bibs")
         self.assertEqual(bibs[0][0], 0)
         self.assertEqual(bibs[0][0], 0)
-        sessions = self.statistics.get_counter('/nat64/total-sessions')
+        sessions = self.statistics.get_counter("/nat64/total-sessions")
         self.assertEqual(sessions[0][0], 0)
 
 
         self.assertEqual(sessions[0][0], 0)
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index 02b2882..f3bec78 100644 (file)
@@ -10,15 +10,32 @@ from io import BytesIO
 import scapy.compat
 from framework import VppTestCase, VppTestRunner
 from ipfix import IPFIX, Set, Template, Data, IPFIXDecoder
 import scapy.compat
 from framework import VppTestCase, VppTestRunner
 from ipfix import IPFIX, Set, Template, Data, IPFIXDecoder
-from scapy.all import bind_layers, Packet, ByteEnumField, ShortField, \
-    IPField, IntField, LongField, XByteField, FlagsField, FieldLenField, \
-    PacketListField
+from scapy.all import (
+    bind_layers,
+    Packet,
+    ByteEnumField,
+    ShortField,
+    IPField,
+    IntField,
+    LongField,
+    XByteField,
+    FlagsField,
+    FieldLenField,
+    PacketListField,
+)
 from scapy.data import IP_PROTOS
 from scapy.layers.inet import IP, TCP, UDP, ICMP
 from scapy.layers.inet import IPerror, TCPerror, UDPerror, ICMPerror
 from scapy.layers.inet6 import ICMPv6DestUnreach, IPerror6, IPv6ExtHdrFragment
 from scapy.data import IP_PROTOS
 from scapy.layers.inet import IP, TCP, UDP, ICMP
 from scapy.layers.inet import IPerror, TCPerror, UDPerror, ICMPerror
 from scapy.layers.inet6 import ICMPv6DestUnreach, IPerror6, IPv6ExtHdrFragment
-from scapy.layers.inet6 import IPv6, ICMPv6EchoRequest, ICMPv6EchoReply, \
-    ICMPv6ND_NS, ICMPv6ND_NA, ICMPv6NDOptDstLLAddr, fragment6
+from scapy.layers.inet6 import (
+    IPv6,
+    ICMPv6EchoRequest,
+    ICMPv6EchoReply,
+    ICMPv6ND_NS,
+    ICMPv6ND_NA,
+    ICMPv6NDOptDstLLAddr,
+    fragment6,
+)
 from scapy.layers.l2 import Ether, ARP, GRE
 from scapy.packet import Raw
 from syslog_rfc5424_parser import SyslogMessage, ParseError
 from scapy.layers.l2 import Ether, ARP, GRE
 from scapy.packet import Raw
 from syslog_rfc5424_parser import SyslogMessage, ParseError
@@ -32,13 +49,13 @@ from vpp_papi import VppEnum
 
 
 class TestNAT66(VppTestCase):
 
 
 class TestNAT66(VppTestCase):
-    """ NAT66 Test Cases """
+    """NAT66 Test Cases"""
 
     @classmethod
     def setUpClass(cls):
         super(TestNAT66, cls).setUpClass()
 
 
     @classmethod
     def setUpClass(cls):
         super(TestNAT66, cls).setUpClass()
 
-        cls.nat_addr = 'fd01:ff::2'
+        cls.nat_addr = "fd01:ff::2"
         cls.create_pg_interfaces(range(2))
         cls.interfaces = list(cls.pg_interfaces)
 
         cls.create_pg_interfaces(range(2))
         cls.interfaces = list(cls.pg_interfaces)
 
@@ -67,34 +84,45 @@ class TestNAT66(VppTestCase):
             self.plugin_disable()
 
     def test_static(self):
             self.plugin_disable()
 
     def test_static(self):
-        """ 1:1 NAT66 test """
+        """1:1 NAT66 test"""
         flags = self.config_flags.NAT_IS_INSIDE
         flags = self.config_flags.NAT_IS_INSIDE
-        self.vapi.nat66_add_del_interface(is_add=1, flags=flags,
-                                          sw_if_index=self.pg0.sw_if_index)
-        self.vapi.nat66_add_del_interface(is_add=1,
-                                          sw_if_index=self.pg1.sw_if_index)
+        self.vapi.nat66_add_del_interface(
+            is_add=1, flags=flags, sw_if_index=self.pg0.sw_if_index
+        )
+        self.vapi.nat66_add_del_interface(is_add=1, sw_if_index=self.pg1.sw_if_index)
         self.vapi.nat66_add_del_static_mapping(
             local_ip_address=self.pg0.remote_ip6,
             external_ip_address=self.nat_addr,
         self.vapi.nat66_add_del_static_mapping(
             local_ip_address=self.pg0.remote_ip6,
             external_ip_address=self.nat_addr,
-            is_add=1)
+            is_add=1,
+        )
 
         # in2out
         pkts = []
 
         # in2out
         pkts = []
-        p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-             IPv6(src=self.pg0.remote_ip6, dst=self.pg1.remote_ip6) /
-             TCP())
+        p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IPv6(src=self.pg0.remote_ip6, dst=self.pg1.remote_ip6)
+            / TCP()
+        )
         pkts.append(p)
         pkts.append(p)
-        p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-             IPv6(src=self.pg0.remote_ip6, dst=self.pg1.remote_ip6) /
-             UDP())
+        p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IPv6(src=self.pg0.remote_ip6, dst=self.pg1.remote_ip6)
+            / UDP()
+        )
         pkts.append(p)
         pkts.append(p)
-        p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-             IPv6(src=self.pg0.remote_ip6, dst=self.pg1.remote_ip6) /
-             ICMPv6EchoRequest())
+        p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IPv6(src=self.pg0.remote_ip6, dst=self.pg1.remote_ip6)
+            / ICMPv6EchoRequest()
+        )
         pkts.append(p)
         pkts.append(p)
-        p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-             IPv6(src=self.pg0.remote_ip6, dst=self.pg1.remote_ip6) /
-             GRE() / IP() / TCP())
+        p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IPv6(src=self.pg0.remote_ip6, dst=self.pg1.remote_ip6)
+            / GRE()
+            / IP()
+            / TCP()
+        )
         pkts.append(p)
         self.pg0.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
         pkts.append(p)
         self.pg0.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
@@ -112,21 +140,31 @@ class TestNAT66(VppTestCase):
 
         # out2in
         pkts = []
 
         # out2in
         pkts = []
-        p = (Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac) /
-             IPv6(src=self.pg1.remote_ip6, dst=self.nat_addr) /
-             TCP())
+        p = (
+            Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac)
+            / IPv6(src=self.pg1.remote_ip6, dst=self.nat_addr)
+            / TCP()
+        )
         pkts.append(p)
         pkts.append(p)
-        p = (Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac) /
-             IPv6(src=self.pg1.remote_ip6, dst=self.nat_addr) /
-             UDP())
+        p = (
+            Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac)
+            / IPv6(src=self.pg1.remote_ip6, dst=self.nat_addr)
+            / UDP()
+        )
         pkts.append(p)
         pkts.append(p)
-        p = (Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac) /
-             IPv6(src=self.pg1.remote_ip6, dst=self.nat_addr) /
-             ICMPv6EchoReply())
+        p = (
+            Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac)
+            / IPv6(src=self.pg1.remote_ip6, dst=self.nat_addr)
+            / ICMPv6EchoReply()
+        )
         pkts.append(p)
         pkts.append(p)
-        p = (Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac) /
-             IPv6(src=self.pg1.remote_ip6, dst=self.nat_addr) /
-             GRE() / IP() / TCP())
+        p = (
+            Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac)
+            / IPv6(src=self.pg1.remote_ip6, dst=self.nat_addr)
+            / GRE()
+            / IP()
+            / TCP()
+        )
         pkts.append(p)
         self.pg1.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
         pkts.append(p)
         self.pg1.add_stream(pkts)
         self.pg_enable_capture(self.pg_interfaces)
@@ -146,21 +184,26 @@ class TestNAT66(VppTestCase):
         self.assertEqual(sm[0].total_pkts, 8)
 
     def test_check_no_translate(self):
         self.assertEqual(sm[0].total_pkts, 8)
 
     def test_check_no_translate(self):
-        """ NAT66 translate only when egress interface is outside interface """
+        """NAT66 translate only when egress interface is outside interface"""
         flags = self.config_flags.NAT_IS_INSIDE
         flags = self.config_flags.NAT_IS_INSIDE
-        self.vapi.nat66_add_del_interface(is_add=1, flags=flags,
-                                          sw_if_index=self.pg0.sw_if_index)
-        self.vapi.nat66_add_del_interface(is_add=1, flags=flags,
-                                          sw_if_index=self.pg1.sw_if_index)
+        self.vapi.nat66_add_del_interface(
+            is_add=1, flags=flags, sw_if_index=self.pg0.sw_if_index
+        )
+        self.vapi.nat66_add_del_interface(
+            is_add=1, flags=flags, sw_if_index=self.pg1.sw_if_index
+        )
         self.vapi.nat66_add_del_static_mapping(
             local_ip_address=self.pg0.remote_ip6,
             external_ip_address=self.nat_addr,
         self.vapi.nat66_add_del_static_mapping(
             local_ip_address=self.pg0.remote_ip6,
             external_ip_address=self.nat_addr,
-            is_add=1)
+            is_add=1,
+        )
 
         # in2out
 
         # in2out
-        p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-             IPv6(src=self.pg0.remote_ip6, dst=self.pg1.remote_ip6) /
-             UDP())
+        p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IPv6(src=self.pg0.remote_ip6, dst=self.pg1.remote_ip6)
+            / UDP()
+        )
         self.pg0.add_stream([p])
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         self.pg0.add_stream([p])
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -174,5 +217,5 @@ class TestNAT66(VppTestCase):
             raise
 
 
             raise
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index 0cbaf06..e1b37a0 100644 (file)
@@ -7,8 +7,15 @@ from socket import AF_INET, AF_INET6, inet_pton
 from framework import tag_fixme_vpp_workers
 from framework import VppTestCase, VppTestRunner
 from vpp_neighbor import VppNeighbor, find_nbr
 from framework import tag_fixme_vpp_workers
 from framework import VppTestCase, VppTestRunner
 from vpp_neighbor import VppNeighbor, find_nbr
-from vpp_ip_route import VppIpRoute, VppRoutePath, find_route, \
-    VppIpTable, DpoProto, FibPathType, VppIpInterfaceAddress
+from vpp_ip_route import (
+    VppIpRoute,
+    VppRoutePath,
+    find_route,
+    VppIpTable,
+    DpoProto,
+    FibPathType,
+    VppIpInterfaceAddress,
+)
 from vpp_papi import VppEnum
 from vpp_ip import VppIpPuntRedirect
 
 from vpp_papi import VppEnum
 from vpp_ip import VppIpPuntRedirect
 
@@ -28,7 +35,7 @@ arp_opts = {"who-has": 1, "is-at": 2}
 
 
 class ARPTestCase(VppTestCase):
 
 
 class ARPTestCase(VppTestCase):
-    """ ARP Test Case """
+    """ARP Test Case"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -125,8 +132,7 @@ class ARPTestCase(VppTestCase):
         self.assertEqual(arp.plen, 4)
         self.assertEqual(arp.op, arp_opts["is-at"])
         self.assertNotEqual(arp.hwsrc, smac)
         self.assertEqual(arp.plen, 4)
         self.assertEqual(arp.op, arp_opts["is-at"])
         self.assertNotEqual(arp.hwsrc, smac)
-        self.assertTrue("00:00:5e:00:01" in arp.hwsrc or
-                        "00:00:5E:00:01" in arp.hwsrc)
+        self.assertTrue("00:00:5e:00:01" in arp.hwsrc or "00:00:5E:00:01" in arp.hwsrc)
         self.assertEqual(arp.hwdst, dmac)
         self.assertEqual(arp.psrc, sip)
         self.assertEqual(arp.pdst, dip)
         self.assertEqual(arp.hwdst, dmac)
         self.assertEqual(arp.psrc, sip)
         self.assertEqual(arp.pdst, dip)
@@ -155,7 +161,7 @@ class ARPTestCase(VppTestCase):
         self.assertEqual(ip.dst, dip)
 
     def test_arp(self):
         self.assertEqual(ip.dst, dip)
 
     def test_arp(self):
-        """ ARP """
+        """ARP"""
 
         #
         # Generate some hosts on the LAN
 
         #
         # Generate some hosts on the LAN
@@ -168,15 +174,16 @@ class ARPTestCase(VppTestCase):
         #  - all neighbor events on pg1
         #  - neighbor events for host[1] on pg1
         #
         #  - all neighbor events on pg1
         #  - neighbor events for host[1] on pg1
         #
-        self.vapi.want_ip_neighbor_events(enable=1,
-                                          pid=os.getpid())
-        self.vapi.want_ip_neighbor_events(enable=1,
-                                          pid=os.getpid(),
-                                          sw_if_index=self.pg1.sw_if_index)
-        self.vapi.want_ip_neighbor_events(enable=1,
-                                          pid=os.getpid(),
-                                          sw_if_index=self.pg1.sw_if_index,
-                                          ip=self.pg1.remote_hosts[1].ip4)
+        self.vapi.want_ip_neighbor_events(enable=1, pid=os.getpid())
+        self.vapi.want_ip_neighbor_events(
+            enable=1, pid=os.getpid(), sw_if_index=self.pg1.sw_if_index
+        )
+        self.vapi.want_ip_neighbor_events(
+            enable=1,
+            pid=os.getpid(),
+            sw_if_index=self.pg1.sw_if_index,
+            ip=self.pg1.remote_hosts[1].ip4,
+        )
 
         self.logger.info(self.vapi.cli("sh ip neighbor-watcher"))
 
 
         self.logger.info(self.vapi.cli("sh ip neighbor-watcher"))
 
@@ -184,10 +191,12 @@ class ARPTestCase(VppTestCase):
         # Send IP traffic to one of these unresolved hosts.
         #  expect the generation of an ARP request
         #
         # Send IP traffic to one of these unresolved hosts.
         #  expect the generation of an ARP request
         #
-        p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-             IP(src=self.pg0.remote_ip4, dst=self.pg1._remote_hosts[1].ip4) /
-             UDP(sport=1234, dport=1234) /
-             Raw())
+        p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg1._remote_hosts[1].ip4)
+            / UDP(sport=1234, dport=1234)
+            / Raw()
+        )
 
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
 
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
@@ -195,38 +204,38 @@ class ARPTestCase(VppTestCase):
 
         rx = self.pg1.get_capture(1)
 
 
         rx = self.pg1.get_capture(1)
 
-        self.verify_arp_req(rx[0],
-                            self.pg1.local_mac,
-                            self.pg1.local_ip4,
-                            self.pg1._remote_hosts[1].ip4)
+        self.verify_arp_req(
+            rx[0], self.pg1.local_mac, self.pg1.local_ip4, self.pg1._remote_hosts[1].ip4
+        )
 
         #
         # And a dynamic ARP entry for host 1
         #
 
         #
         # And a dynamic ARP entry for host 1
         #
-        dyn_arp = VppNeighbor(self,
-                              self.pg1.sw_if_index,
-                              self.pg1.remote_hosts[1].mac,
-                              self.pg1.remote_hosts[1].ip4)
+        dyn_arp = VppNeighbor(
+            self,
+            self.pg1.sw_if_index,
+            self.pg1.remote_hosts[1].mac,
+            self.pg1.remote_hosts[1].ip4,
+        )
         dyn_arp.add_vpp_config()
         self.assertTrue(dyn_arp.query_vpp_config())
 
         self.logger.info(self.vapi.cli("show ip neighbor-watcher"))
 
         # this matches all of the listnerers
         dyn_arp.add_vpp_config()
         self.assertTrue(dyn_arp.query_vpp_config())
 
         self.logger.info(self.vapi.cli("show ip neighbor-watcher"))
 
         # this matches all of the listnerers
-        es = [self.vapi.wait_for_event(1, "ip_neighbor_event")
-              for i in range(3)]
+        es = [self.vapi.wait_for_event(1, "ip_neighbor_event") for i in range(3)]
         for e in es:
         for e in es:
-            self.assertEqual(str(e.neighbor.ip_address),
-                             self.pg1.remote_hosts[1].ip4)
+            self.assertEqual(str(e.neighbor.ip_address), self.pg1.remote_hosts[1].ip4)
 
         #
         # now we expect IP traffic forwarded
         #
 
         #
         # now we expect IP traffic forwarded
         #
-        dyn_p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-                 IP(src=self.pg0.remote_ip4,
-                    dst=self.pg1._remote_hosts[1].ip4) /
-                 UDP(sport=1234, dport=1234) /
-                 Raw())
+        dyn_p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg1._remote_hosts[1].ip4)
+            / UDP(sport=1234, dport=1234)
+            / Raw()
+        )
 
         self.pg0.add_stream(dyn_p)
         self.pg_enable_capture(self.pg_interfaces)
 
         self.pg0.add_stream(dyn_p)
         self.pg_enable_capture(self.pg_interfaces)
@@ -234,32 +243,35 @@ class ARPTestCase(VppTestCase):
 
         rx = self.pg1.get_capture(1)
 
 
         rx = self.pg1.get_capture(1)
 
-        self.verify_ip(rx[0],
-                       self.pg1.local_mac,
-                       self.pg1.remote_hosts[1].mac,
-                       self.pg0.remote_ip4,
-                       self.pg1._remote_hosts[1].ip4)
+        self.verify_ip(
+            rx[0],
+            self.pg1.local_mac,
+            self.pg1.remote_hosts[1].mac,
+            self.pg0.remote_ip4,
+            self.pg1._remote_hosts[1].ip4,
+        )
 
         #
         # And a Static ARP entry for host 2
         #
 
         #
         # And a Static ARP entry for host 2
         #
-        static_arp = VppNeighbor(self,
-                                 self.pg1.sw_if_index,
-                                 self.pg1.remote_hosts[2].mac,
-                                 self.pg1.remote_hosts[2].ip4,
-                                 is_static=1)
+        static_arp = VppNeighbor(
+            self,
+            self.pg1.sw_if_index,
+            self.pg1.remote_hosts[2].mac,
+            self.pg1.remote_hosts[2].ip4,
+            is_static=1,
+        )
         static_arp.add_vpp_config()
         static_arp.add_vpp_config()
-        es = [self.vapi.wait_for_event(1, "ip_neighbor_event")
-              for i in range(2)]
+        es = [self.vapi.wait_for_event(1, "ip_neighbor_event") for i in range(2)]
         for e in es:
         for e in es:
-            self.assertEqual(str(e.neighbor.ip_address),
-                             self.pg1.remote_hosts[2].ip4)
+            self.assertEqual(str(e.neighbor.ip_address), self.pg1.remote_hosts[2].ip4)
 
 
-        static_p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-                    IP(src=self.pg0.remote_ip4,
-                       dst=self.pg1._remote_hosts[2].ip4) /
-                    UDP(sport=1234, dport=1234) /
-                    Raw())
+        static_p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg1._remote_hosts[2].ip4)
+            / UDP(sport=1234, dport=1234)
+            / Raw()
+        )
 
         self.pg0.add_stream(static_p)
         self.pg_enable_capture(self.pg_interfaces)
 
         self.pg0.add_stream(static_p)
         self.pg_enable_capture(self.pg_interfaces)
@@ -267,24 +279,27 @@ class ARPTestCase(VppTestCase):
 
         rx = self.pg1.get_capture(1)
 
 
         rx = self.pg1.get_capture(1)
 
-        self.verify_ip(rx[0],
-                       self.pg1.local_mac,
-                       self.pg1.remote_hosts[2].mac,
-                       self.pg0.remote_ip4,
-                       self.pg1._remote_hosts[2].ip4)
+        self.verify_ip(
+            rx[0],
+            self.pg1.local_mac,
+            self.pg1.remote_hosts[2].mac,
+            self.pg0.remote_ip4,
+            self.pg1._remote_hosts[2].ip4,
+        )
 
         #
         # remove all the listeners
         #
 
         #
         # remove all the listeners
         #
-        self.vapi.want_ip_neighbor_events(enable=0,
-                                          pid=os.getpid())
-        self.vapi.want_ip_neighbor_events(enable=0,
-                                          pid=os.getpid(),
-                                          sw_if_index=self.pg1.sw_if_index)
-        self.vapi.want_ip_neighbor_events(enable=0,
-                                          pid=os.getpid(),
-                                          sw_if_index=self.pg1.sw_if_index,
-                                          ip=self.pg1.remote_hosts[1].ip4)
+        self.vapi.want_ip_neighbor_events(enable=0, pid=os.getpid())
+        self.vapi.want_ip_neighbor_events(
+            enable=0, pid=os.getpid(), sw_if_index=self.pg1.sw_if_index
+        )
+        self.vapi.want_ip_neighbor_events(
+            enable=0,
+            pid=os.getpid(),
+            sw_if_index=self.pg1.sw_if_index,
+            ip=self.pg1.remote_hosts[1].ip4,
+        )
 
         #
         # flap the link. dynamic ARPs get flush, statics don't
 
         #
         # flap the link. dynamic ARPs get flush, statics don't
@@ -297,69 +312,76 @@ class ARPTestCase(VppTestCase):
         self.pg_start()
         rx = self.pg1.get_capture(1)
 
         self.pg_start()
         rx = self.pg1.get_capture(1)
 
-        self.verify_ip(rx[0],
-                       self.pg1.local_mac,
-                       self.pg1.remote_hosts[2].mac,
-                       self.pg0.remote_ip4,
-                       self.pg1._remote_hosts[2].ip4)
+        self.verify_ip(
+            rx[0],
+            self.pg1.local_mac,
+            self.pg1.remote_hosts[2].mac,
+            self.pg0.remote_ip4,
+            self.pg1._remote_hosts[2].ip4,
+        )
 
         self.pg0.add_stream(dyn_p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
         rx = self.pg1.get_capture(1)
 
         self.pg0.add_stream(dyn_p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
         rx = self.pg1.get_capture(1)
-        self.verify_arp_req(rx[0],
-                            self.pg1.local_mac,
-                            self.pg1.local_ip4,
-                            self.pg1._remote_hosts[1].ip4)
+        self.verify_arp_req(
+            rx[0], self.pg1.local_mac, self.pg1.local_ip4, self.pg1._remote_hosts[1].ip4
+        )
 
         self.assertFalse(dyn_arp.query_vpp_config())
         self.assertTrue(static_arp.query_vpp_config())
         #
         # Send an ARP request from one of the so-far unlearned remote hosts
         #
 
         self.assertFalse(dyn_arp.query_vpp_config())
         self.assertTrue(static_arp.query_vpp_config())
         #
         # Send an ARP request from one of the so-far unlearned remote hosts
         #
-        p = (Ether(dst="ff:ff:ff:ff:ff:ff",
-                   src=self.pg1._remote_hosts[3].mac) /
-             ARP(op="who-has",
-                 hwsrc=self.pg1._remote_hosts[3].mac,
-                 pdst=self.pg1.local_ip4,
-                 psrc=self.pg1._remote_hosts[3].ip4))
+        p = Ether(dst="ff:ff:ff:ff:ff:ff", src=self.pg1._remote_hosts[3].mac) / ARP(
+            op="who-has",
+            hwsrc=self.pg1._remote_hosts[3].mac,
+            pdst=self.pg1.local_ip4,
+            psrc=self.pg1._remote_hosts[3].ip4,
+        )
 
         self.pg1.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
         rx = self.pg1.get_capture(1)
 
         self.pg1.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
         rx = self.pg1.get_capture(1)
-        self.verify_arp_resp(rx[0],
-                             self.pg1.local_mac,
-                             self.pg1._remote_hosts[3].mac,
-                             self.pg1.local_ip4,
-                             self.pg1._remote_hosts[3].ip4)
+        self.verify_arp_resp(
+            rx[0],
+            self.pg1.local_mac,
+            self.pg1._remote_hosts[3].mac,
+            self.pg1.local_ip4,
+            self.pg1._remote_hosts[3].ip4,
+        )
 
         #
         # VPP should have learned the mapping for the remote host
         #
 
         #
         # VPP should have learned the mapping for the remote host
         #
-        self.assertTrue(find_nbr(self,
-                                 self.pg1.sw_if_index,
-                                 self.pg1._remote_hosts[3].ip4))
+        self.assertTrue(
+            find_nbr(self, self.pg1.sw_if_index, self.pg1._remote_hosts[3].ip4)
+        )
         #
         # Fire in an ARP request before the interface becomes IP enabled
         #
         self.pg2.generate_remote_hosts(4)
 
         #
         # Fire in an ARP request before the interface becomes IP enabled
         #
         self.pg2.generate_remote_hosts(4)
 
-        p = (Ether(dst="ff:ff:ff:ff:ff:ff", src=self.pg2.remote_mac) /
-             ARP(op="who-has",
-                 hwsrc=self.pg2.remote_mac,
-                 pdst=self.pg1.local_ip4,
-                 psrc=self.pg2.remote_hosts[3].ip4))
-        pt = (Ether(dst="ff:ff:ff:ff:ff:ff", src=self.pg2.remote_mac) /
-              Dot1Q(vlan=0) /
-              ARP(op="who-has",
-                  hwsrc=self.pg2.remote_mac,
-                  pdst=self.pg1.local_ip4,
-                  psrc=self.pg2.remote_hosts[3].ip4))
-        self.send_and_assert_no_replies(self.pg2, p,
-                                        "interface not IP enabled")
+        p = Ether(dst="ff:ff:ff:ff:ff:ff", src=self.pg2.remote_mac) / ARP(
+            op="who-has",
+            hwsrc=self.pg2.remote_mac,
+            pdst=self.pg1.local_ip4,
+            psrc=self.pg2.remote_hosts[3].ip4,
+        )
+        pt = (
+            Ether(dst="ff:ff:ff:ff:ff:ff", src=self.pg2.remote_mac)
+            / Dot1Q(vlan=0)
+            / ARP(
+                op="who-has",
+                hwsrc=self.pg2.remote_mac,
+                pdst=self.pg1.local_ip4,
+                psrc=self.pg2.remote_hosts[3].ip4,
+            )
+        )
+        self.send_and_assert_no_replies(self.pg2, p, "interface not IP enabled")
 
         #
         # Make pg2 un-numbered to pg1
 
         #
         # Make pg2 un-numbered to pg1
@@ -384,12 +406,15 @@ class ARPTestCase(VppTestCase):
         # once an attached route to the source is known
         #
         self.send_and_assert_no_replies(
         # once an attached route to the source is known
         #
         self.send_and_assert_no_replies(
-            self.pg2, p,
-            "ARP req for unnumbered address - no source")
-
-        attached_host = VppIpRoute(self, self.pg2.remote_hosts[3].ip4, 32,
-                                   [VppRoutePath("0.0.0.0",
-                                                 self.pg2.sw_if_index)])
+            self.pg2, p, "ARP req for unnumbered address - no source"
+        )
+
+        attached_host = VppIpRoute(
+            self,
+            self.pg2.remote_hosts[3].ip4,
+            32,
+            [VppRoutePath("0.0.0.0", self.pg2.sw_if_index)],
+        )
         attached_host.add_vpp_config()
 
         self.pg2.add_stream(p)
         attached_host.add_vpp_config()
 
         self.pg2.add_stream(p)
@@ -397,57 +422,64 @@ class ARPTestCase(VppTestCase):
         self.pg_start()
 
         rx = self.pg2.get_capture(1)
         self.pg_start()
 
         rx = self.pg2.get_capture(1)
-        self.verify_arp_resp(rx[0],
-                             self.pg2.local_mac,
-                             self.pg2.remote_mac,
-                             self.pg1.local_ip4,
-                             self.pg2.remote_hosts[3].ip4)
+        self.verify_arp_resp(
+            rx[0],
+            self.pg2.local_mac,
+            self.pg2.remote_mac,
+            self.pg1.local_ip4,
+            self.pg2.remote_hosts[3].ip4,
+        )
 
         self.pg2.add_stream(pt)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
         rx = self.pg2.get_capture(1)
 
         self.pg2.add_stream(pt)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
         rx = self.pg2.get_capture(1)
-        self.verify_arp_resp(rx[0],
-                             self.pg2.local_mac,
-                             self.pg2.remote_mac,
-                             self.pg1.local_ip4,
-                             self.pg2.remote_hosts[3].ip4)
+        self.verify_arp_resp(
+            rx[0],
+            self.pg2.local_mac,
+            self.pg2.remote_mac,
+            self.pg1.local_ip4,
+            self.pg2.remote_hosts[3].ip4,
+        )
 
         #
         # A neighbor entry that has no associated FIB-entry
         #
 
         #
         # A neighbor entry that has no associated FIB-entry
         #
-        arp_no_fib = VppNeighbor(self,
-                                 self.pg1.sw_if_index,
-                                 self.pg1.remote_hosts[4].mac,
-                                 self.pg1.remote_hosts[4].ip4,
-                                 is_no_fib_entry=1)
+        arp_no_fib = VppNeighbor(
+            self,
+            self.pg1.sw_if_index,
+            self.pg1.remote_hosts[4].mac,
+            self.pg1.remote_hosts[4].ip4,
+            is_no_fib_entry=1,
+        )
         arp_no_fib.add_vpp_config()
 
         #
         # check we have the neighbor, but no route
         #
         arp_no_fib.add_vpp_config()
 
         #
         # check we have the neighbor, but no route
         #
-        self.assertTrue(find_nbr(self,
-                                 self.pg1.sw_if_index,
-                                 self.pg1._remote_hosts[4].ip4))
-        self.assertFalse(find_route(self,
-                                    self.pg1._remote_hosts[4].ip4,
-                                    32))
+        self.assertTrue(
+            find_nbr(self, self.pg1.sw_if_index, self.pg1._remote_hosts[4].ip4)
+        )
+        self.assertFalse(find_route(self, self.pg1._remote_hosts[4].ip4, 32))
         #
         # pg2 is unnumbered to pg1, so we can form adjacencies out of pg2
         # from within pg1's subnet
         #
         #
         # pg2 is unnumbered to pg1, so we can form adjacencies out of pg2
         # from within pg1's subnet
         #
-        arp_unnum = VppNeighbor(self,
-                                self.pg2.sw_if_index,
-                                self.pg1.remote_hosts[5].mac,
-                                self.pg1.remote_hosts[5].ip4)
+        arp_unnum = VppNeighbor(
+            self,
+            self.pg2.sw_if_index,
+            self.pg1.remote_hosts[5].mac,
+            self.pg1.remote_hosts[5].ip4,
+        )
         arp_unnum.add_vpp_config()
 
         arp_unnum.add_vpp_config()
 
-        p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-             IP(src=self.pg0.remote_ip4,
-                dst=self.pg1._remote_hosts[5].ip4) /
-             UDP(sport=1234, dport=1234) /
-             Raw())
+        p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg1._remote_hosts[5].ip4)
+            / UDP(sport=1234, dport=1234)
+            / Raw()
+        )
 
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
 
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
@@ -455,47 +487,56 @@ class ARPTestCase(VppTestCase):
 
         rx = self.pg2.get_capture(1)
 
 
         rx = self.pg2.get_capture(1)
 
-        self.verify_ip(rx[0],
-                       self.pg2.local_mac,
-                       self.pg1.remote_hosts[5].mac,
-                       self.pg0.remote_ip4,
-                       self.pg1._remote_hosts[5].ip4)
+        self.verify_ip(
+            rx[0],
+            self.pg2.local_mac,
+            self.pg1.remote_hosts[5].mac,
+            self.pg0.remote_ip4,
+            self.pg1._remote_hosts[5].ip4,
+        )
 
         #
         # ARP requests from hosts in pg1's subnet sent on pg2 are replied to
         # with the unnumbered interface's address as the source
         #
 
         #
         # ARP requests from hosts in pg1's subnet sent on pg2 are replied to
         # with the unnumbered interface's address as the source
         #
-        p = (Ether(dst="ff:ff:ff:ff:ff:ff", src=self.pg2.remote_mac) /
-             ARP(op="who-has",
-                 hwsrc=self.pg2.remote_mac,
-                 pdst=self.pg1.local_ip4,
-                 psrc=self.pg1.remote_hosts[6].ip4))
+        p = Ether(dst="ff:ff:ff:ff:ff:ff", src=self.pg2.remote_mac) / ARP(
+            op="who-has",
+            hwsrc=self.pg2.remote_mac,
+            pdst=self.pg1.local_ip4,
+            psrc=self.pg1.remote_hosts[6].ip4,
+        )
 
         self.pg2.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
         rx = self.pg2.get_capture(1)
 
         self.pg2.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
         rx = self.pg2.get_capture(1)
-        self.verify_arp_resp(rx[0],
-                             self.pg2.local_mac,
-                             self.pg2.remote_mac,
-                             self.pg1.local_ip4,
-                             self.pg1.remote_hosts[6].ip4)
+        self.verify_arp_resp(
+            rx[0],
+            self.pg2.local_mac,
+            self.pg2.remote_mac,
+            self.pg1.local_ip4,
+            self.pg1.remote_hosts[6].ip4,
+        )
 
         #
         # An attached host route out of pg2 for an undiscovered hosts generates
         # an ARP request with the unnumbered address as the source
         #
 
         #
         # An attached host route out of pg2 for an undiscovered hosts generates
         # an ARP request with the unnumbered address as the source
         #
-        att_unnum = VppIpRoute(self, self.pg1.remote_hosts[7].ip4, 32,
-                               [VppRoutePath("0.0.0.0",
-                                             self.pg2.sw_if_index)])
+        att_unnum = VppIpRoute(
+            self,
+            self.pg1.remote_hosts[7].ip4,
+            32,
+            [VppRoutePath("0.0.0.0", self.pg2.sw_if_index)],
+        )
         att_unnum.add_vpp_config()
 
         att_unnum.add_vpp_config()
 
-        p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-             IP(src=self.pg0.remote_ip4,
-                dst=self.pg1._remote_hosts[7].ip4) /
-             UDP(sport=1234, dport=1234) /
-             Raw())
+        p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg1._remote_hosts[7].ip4)
+            / UDP(sport=1234, dport=1234)
+            / Raw()
+        )
 
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
 
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
@@ -503,135 +544,158 @@ class ARPTestCase(VppTestCase):
 
         rx = self.pg2.get_capture(1)
 
 
         rx = self.pg2.get_capture(1)
 
-        self.verify_arp_req(rx[0],
-                            self.pg2.local_mac,
-                            self.pg1.local_ip4,
-                            self.pg1._remote_hosts[7].ip4)
+        self.verify_arp_req(
+            rx[0], self.pg2.local_mac, self.pg1.local_ip4, self.pg1._remote_hosts[7].ip4
+        )
 
 
-        p = (Ether(dst="ff:ff:ff:ff:ff:ff", src=self.pg2.remote_mac) /
-             ARP(op="who-has",
-                 hwsrc=self.pg2.remote_mac,
-                 pdst=self.pg1.local_ip4,
-                 psrc=self.pg1.remote_hosts[7].ip4))
+        p = Ether(dst="ff:ff:ff:ff:ff:ff", src=self.pg2.remote_mac) / ARP(
+            op="who-has",
+            hwsrc=self.pg2.remote_mac,
+            pdst=self.pg1.local_ip4,
+            psrc=self.pg1.remote_hosts[7].ip4,
+        )
 
         self.pg2.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
         rx = self.pg2.get_capture(1)
 
         self.pg2.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
         rx = self.pg2.get_capture(1)
-        self.verify_arp_resp(rx[0],
-                             self.pg2.local_mac,
-                             self.pg2.remote_mac,
-                             self.pg1.local_ip4,
-                             self.pg1.remote_hosts[7].ip4)
+        self.verify_arp_resp(
+            rx[0],
+            self.pg2.local_mac,
+            self.pg2.remote_mac,
+            self.pg1.local_ip4,
+            self.pg1.remote_hosts[7].ip4,
+        )
 
         #
         # An attached host route as yet unresolved out of pg2 for an
         # undiscovered host, an ARP requests begets a response.
         #
 
         #
         # An attached host route as yet unresolved out of pg2 for an
         # undiscovered host, an ARP requests begets a response.
         #
-        att_unnum1 = VppIpRoute(self, self.pg1.remote_hosts[8].ip4, 32,
-                                [VppRoutePath("0.0.0.0",
-                                              self.pg2.sw_if_index)])
+        att_unnum1 = VppIpRoute(
+            self,
+            self.pg1.remote_hosts[8].ip4,
+            32,
+            [VppRoutePath("0.0.0.0", self.pg2.sw_if_index)],
+        )
         att_unnum1.add_vpp_config()
 
         att_unnum1.add_vpp_config()
 
-        p = (Ether(dst="ff:ff:ff:ff:ff:ff", src=self.pg2.remote_mac) /
-             ARP(op="who-has",
-                 hwsrc=self.pg2.remote_mac,
-                 pdst=self.pg1.local_ip4,
-                 psrc=self.pg1.remote_hosts[8].ip4))
+        p = Ether(dst="ff:ff:ff:ff:ff:ff", src=self.pg2.remote_mac) / ARP(
+            op="who-has",
+            hwsrc=self.pg2.remote_mac,
+            pdst=self.pg1.local_ip4,
+            psrc=self.pg1.remote_hosts[8].ip4,
+        )
 
         self.pg2.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
         rx = self.pg2.get_capture(1)
 
         self.pg2.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
         rx = self.pg2.get_capture(1)
-        self.verify_arp_resp(rx[0],
-                             self.pg2.local_mac,
-                             self.pg2.remote_mac,
-                             self.pg1.local_ip4,
-                             self.pg1.remote_hosts[8].ip4)
+        self.verify_arp_resp(
+            rx[0],
+            self.pg2.local_mac,
+            self.pg2.remote_mac,
+            self.pg1.local_ip4,
+            self.pg1.remote_hosts[8].ip4,
+        )
 
         #
         # Send an ARP request from one of the so-far unlearned remote hosts
         # with a VLAN0 tag
         #
 
         #
         # Send an ARP request from one of the so-far unlearned remote hosts
         # with a VLAN0 tag
         #
-        p = (Ether(dst="ff:ff:ff:ff:ff:ff",
-                   src=self.pg1._remote_hosts[9].mac) /
-             Dot1Q(vlan=0) /
-             ARP(op="who-has",
-                 hwsrc=self.pg1._remote_hosts[9].mac,
-                 pdst=self.pg1.local_ip4,
-                 psrc=self.pg1._remote_hosts[9].ip4))
+        p = (
+            Ether(dst="ff:ff:ff:ff:ff:ff", src=self.pg1._remote_hosts[9].mac)
+            / Dot1Q(vlan=0)
+            / ARP(
+                op="who-has",
+                hwsrc=self.pg1._remote_hosts[9].mac,
+                pdst=self.pg1.local_ip4,
+                psrc=self.pg1._remote_hosts[9].ip4,
+            )
+        )
 
         self.pg1.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
         rx = self.pg1.get_capture(1)
 
         self.pg1.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
         rx = self.pg1.get_capture(1)
-        self.verify_arp_resp(rx[0],
-                             self.pg1.local_mac,
-                             self.pg1._remote_hosts[9].mac,
-                             self.pg1.local_ip4,
-                             self.pg1._remote_hosts[9].ip4)
+        self.verify_arp_resp(
+            rx[0],
+            self.pg1.local_mac,
+            self.pg1._remote_hosts[9].mac,
+            self.pg1.local_ip4,
+            self.pg1._remote_hosts[9].ip4,
+        )
 
         #
         # Add a hierarchy of routes for a host in the sub-net.
         # Should still get an ARP resp since the cover is attached
         #
 
         #
         # Add a hierarchy of routes for a host in the sub-net.
         # Should still get an ARP resp since the cover is attached
         #
-        p = (Ether(dst="ff:ff:ff:ff:ff:ff", src=self.pg1.remote_mac) /
-             ARP(op="who-has",
-                 hwsrc=self.pg1.remote_mac,
-                 pdst=self.pg1.local_ip4,
-                 psrc=self.pg1.remote_hosts[10].ip4))
-
-        r1 = VppIpRoute(self, self.pg1.remote_hosts[10].ip4, 30,
-                        [VppRoutePath(self.pg1.remote_hosts[10].ip4,
-                                      self.pg1.sw_if_index)])
+        p = Ether(dst="ff:ff:ff:ff:ff:ff", src=self.pg1.remote_mac) / ARP(
+            op="who-has",
+            hwsrc=self.pg1.remote_mac,
+            pdst=self.pg1.local_ip4,
+            psrc=self.pg1.remote_hosts[10].ip4,
+        )
+
+        r1 = VppIpRoute(
+            self,
+            self.pg1.remote_hosts[10].ip4,
+            30,
+            [VppRoutePath(self.pg1.remote_hosts[10].ip4, self.pg1.sw_if_index)],
+        )
         r1.add_vpp_config()
 
         self.pg1.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         rx = self.pg1.get_capture(1)
         r1.add_vpp_config()
 
         self.pg1.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         rx = self.pg1.get_capture(1)
-        self.verify_arp_resp(rx[0],
-                             self.pg1.local_mac,
-                             self.pg1.remote_mac,
-                             self.pg1.local_ip4,
-                             self.pg1.remote_hosts[10].ip4)
-
-        r2 = VppIpRoute(self, self.pg1.remote_hosts[10].ip4, 32,
-                        [VppRoutePath(self.pg1.remote_hosts[10].ip4,
-                                      self.pg1.sw_if_index)])
+        self.verify_arp_resp(
+            rx[0],
+            self.pg1.local_mac,
+            self.pg1.remote_mac,
+            self.pg1.local_ip4,
+            self.pg1.remote_hosts[10].ip4,
+        )
+
+        r2 = VppIpRoute(
+            self,
+            self.pg1.remote_hosts[10].ip4,
+            32,
+            [VppRoutePath(self.pg1.remote_hosts[10].ip4, self.pg1.sw_if_index)],
+        )
         r2.add_vpp_config()
 
         self.pg1.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         rx = self.pg1.get_capture(1)
         r2.add_vpp_config()
 
         self.pg1.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
         rx = self.pg1.get_capture(1)
-        self.verify_arp_resp(rx[0],
-                             self.pg1.local_mac,
-                             self.pg1.remote_mac,
-                             self.pg1.local_ip4,
-                             self.pg1.remote_hosts[10].ip4)
+        self.verify_arp_resp(
+            rx[0],
+            self.pg1.local_mac,
+            self.pg1.remote_mac,
+            self.pg1.local_ip4,
+            self.pg1.remote_hosts[10].ip4,
+        )
 
         #
         # add an ARP entry that's not on the sub-net and so whose
         # adj-fib fails the refinement check. then send an ARP request
         # from that source
         #
 
         #
         # add an ARP entry that's not on the sub-net and so whose
         # adj-fib fails the refinement check. then send an ARP request
         # from that source
         #
-        a1 = VppNeighbor(self,
-                         self.pg0.sw_if_index,
-                         self.pg0.remote_mac,
-                         "100.100.100.50")
+        a1 = VppNeighbor(
+            self, self.pg0.sw_if_index, self.pg0.remote_mac, "100.100.100.50"
+        )
         a1.add_vpp_config()
 
         a1.add_vpp_config()
 
-        p = (Ether(dst="ff:ff:ff:ff:ff:ff", src=self.pg0.remote_mac) /
-             ARP(op="who-has",
-                 hwsrc=self.pg0.remote_mac,
-                 psrc="100.100.100.50",
-                 pdst=self.pg0.remote_ip4))
-        self.send_and_assert_no_replies(self.pg0, p,
-                                        "ARP req for from failed adj-fib")
+        p = Ether(dst="ff:ff:ff:ff:ff:ff", src=self.pg0.remote_mac) / ARP(
+            op="who-has",
+            hwsrc=self.pg0.remote_mac,
+            psrc="100.100.100.50",
+            pdst=self.pg0.remote_ip4,
+        )
+        self.send_and_assert_no_replies(self.pg0, p, "ARP req for from failed adj-fib")
 
         #
         # ERROR Cases
 
         #
         # ERROR Cases
@@ -640,101 +704,103 @@ class ARPTestCase(VppTestCase):
         #  1b - nor within the unnumbered subnet
         #  1c - nor within the subnet of a different interface
         #
         #  1b - nor within the unnumbered subnet
         #  1c - nor within the subnet of a different interface
         #
-        p = (Ether(dst="ff:ff:ff:ff:ff:ff", src=self.pg0.remote_mac) /
-             ARP(op="who-has",
-                 hwsrc=self.pg0.remote_mac,
-                 pdst="10.10.10.3",
-                 psrc=self.pg0.remote_ip4))
-        self.send_and_assert_no_replies(self.pg0, p,
-                                        "ARP req for non-local destination")
-        self.assertFalse(find_nbr(self,
-                                  self.pg0.sw_if_index,
-                                  "10.10.10.3"))
-
-        p = (Ether(dst="ff:ff:ff:ff:ff:ff", src=self.pg2.remote_mac) /
-             ARP(op="who-has",
-                 hwsrc=self.pg2.remote_mac,
-                 pdst="10.10.10.3",
-                 psrc=self.pg1.remote_hosts[7].ip4))
+        p = Ether(dst="ff:ff:ff:ff:ff:ff", src=self.pg0.remote_mac) / ARP(
+            op="who-has",
+            hwsrc=self.pg0.remote_mac,
+            pdst="10.10.10.3",
+            psrc=self.pg0.remote_ip4,
+        )
+        self.send_and_assert_no_replies(
+            self.pg0, p, "ARP req for non-local destination"
+        )
+        self.assertFalse(find_nbr(self, self.pg0.sw_if_index, "10.10.10.3"))
+
+        p = Ether(dst="ff:ff:ff:ff:ff:ff", src=self.pg2.remote_mac) / ARP(
+            op="who-has",
+            hwsrc=self.pg2.remote_mac,
+            pdst="10.10.10.3",
+            psrc=self.pg1.remote_hosts[7].ip4,
+        )
         self.send_and_assert_no_replies(
         self.send_and_assert_no_replies(
-            self.pg0, p,
-            "ARP req for non-local destination - unnum")
+            self.pg0, p, "ARP req for non-local destination - unnum"
+        )
 
 
-        p = (Ether(dst="ff:ff:ff:ff:ff:ff", src=self.pg0.remote_mac) /
-             ARP(op="who-has",
-                 hwsrc=self.pg0.remote_mac,
-                 pdst=self.pg1.local_ip4,
-                 psrc=self.pg1.remote_ip4))
-        self.send_and_assert_no_replies(self.pg0, p,
-                                        "ARP req diff sub-net")
-        self.assertFalse(find_nbr(self,
-                                  self.pg0.sw_if_index,
-                                  self.pg1.remote_ip4))
+        p = Ether(dst="ff:ff:ff:ff:ff:ff", src=self.pg0.remote_mac) / ARP(
+            op="who-has",
+            hwsrc=self.pg0.remote_mac,
+            pdst=self.pg1.local_ip4,
+            psrc=self.pg1.remote_ip4,
+        )
+        self.send_and_assert_no_replies(self.pg0, p, "ARP req diff sub-net")
+        self.assertFalse(find_nbr(self, self.pg0.sw_if_index, self.pg1.remote_ip4))
 
         #
         #  2 - don't respond to ARP request from an address not within the
         #      interface's sub-net
         #   2b - to a proxied address
         #   2c - not within a different interface's sub-net
 
         #
         #  2 - don't respond to ARP request from an address not within the
         #      interface's sub-net
         #   2b - to a proxied address
         #   2c - not within a different interface's sub-net
-        p = (Ether(dst="ff:ff:ff:ff:ff:ff", src=self.pg0.remote_mac) /
-             ARP(op="who-has",
-                 hwsrc=self.pg0.remote_mac,
-                 psrc="10.10.10.3",
-                 pdst=self.pg0.local_ip4))
-        self.send_and_assert_no_replies(self.pg0, p,
-                                        "ARP req for non-local source")
-        p = (Ether(dst="ff:ff:ff:ff:ff:ff", src=self.pg2.remote_mac) /
-             ARP(op="who-has",
-                 hwsrc=self.pg2.remote_mac,
-                 psrc="10.10.10.3",
-                 pdst=self.pg0.local_ip4))
+        p = Ether(dst="ff:ff:ff:ff:ff:ff", src=self.pg0.remote_mac) / ARP(
+            op="who-has",
+            hwsrc=self.pg0.remote_mac,
+            psrc="10.10.10.3",
+            pdst=self.pg0.local_ip4,
+        )
+        self.send_and_assert_no_replies(self.pg0, p, "ARP req for non-local source")
+        p = Ether(dst="ff:ff:ff:ff:ff:ff", src=self.pg2.remote_mac) / ARP(
+            op="who-has",
+            hwsrc=self.pg2.remote_mac,
+            psrc="10.10.10.3",
+            pdst=self.pg0.local_ip4,
+        )
         self.send_and_assert_no_replies(
         self.send_and_assert_no_replies(
-            self.pg0, p,
-            "ARP req for non-local source - unnum")
-        p = (Ether(dst="ff:ff:ff:ff:ff:ff", src=self.pg0.remote_mac) /
-             ARP(op="who-has",
-                 hwsrc=self.pg0.remote_mac,
-                 psrc=self.pg1.remote_ip4,
-                 pdst=self.pg0.local_ip4))
-        self.send_and_assert_no_replies(self.pg0, p,
-                                        "ARP req for non-local source 2c")
+            self.pg0, p, "ARP req for non-local source - unnum"
+        )
+        p = Ether(dst="ff:ff:ff:ff:ff:ff", src=self.pg0.remote_mac) / ARP(
+            op="who-has",
+            hwsrc=self.pg0.remote_mac,
+            psrc=self.pg1.remote_ip4,
+            pdst=self.pg0.local_ip4,
+        )
+        self.send_and_assert_no_replies(self.pg0, p, "ARP req for non-local source 2c")
 
         #
         #  3 - don't respond to ARP request from an address that belongs to
         #      the router
         #
 
         #
         #  3 - don't respond to ARP request from an address that belongs to
         #      the router
         #
-        p = (Ether(dst="ff:ff:ff:ff:ff:ff", src=self.pg0.remote_mac) /
-             ARP(op="who-has",
-                 hwsrc=self.pg0.remote_mac,
-                 psrc=self.pg0.local_ip4,
-                 pdst=self.pg0.local_ip4))
-        self.send_and_assert_no_replies(self.pg0, p,
-                                        "ARP req for non-local source")
+        p = Ether(dst="ff:ff:ff:ff:ff:ff", src=self.pg0.remote_mac) / ARP(
+            op="who-has",
+            hwsrc=self.pg0.remote_mac,
+            psrc=self.pg0.local_ip4,
+            pdst=self.pg0.local_ip4,
+        )
+        self.send_and_assert_no_replies(self.pg0, p, "ARP req for non-local source")
 
         #
         #  4 - don't respond to ARP requests that has mac source different
         #      from ARP request HW source
         #
 
         #
         #  4 - don't respond to ARP requests that has mac source different
         #      from ARP request HW source
         #
-        p = (Ether(dst="ff:ff:ff:ff:ff:ff", src=self.pg0.remote_mac) /
-             ARP(op="who-has",
-                 hwsrc="00:00:00:DE:AD:BE",
-                 psrc=self.pg0.remote_ip4,
-                 pdst=self.pg0.local_ip4))
-        self.send_and_assert_no_replies(self.pg0, p,
-                                        "ARP req for non-local source")
+        p = Ether(dst="ff:ff:ff:ff:ff:ff", src=self.pg0.remote_mac) / ARP(
+            op="who-has",
+            hwsrc="00:00:00:DE:AD:BE",
+            psrc=self.pg0.remote_ip4,
+            pdst=self.pg0.local_ip4,
+        )
+        self.send_and_assert_no_replies(self.pg0, p, "ARP req for non-local source")
 
         #
         #  5 - don't respond to ARP requests for address within the
         #      interface's sub-net but not the interface's address
         #
         self.pg0.generate_remote_hosts(2)
 
         #
         #  5 - don't respond to ARP requests for address within the
         #      interface's sub-net but not the interface's address
         #
         self.pg0.generate_remote_hosts(2)
-        p = (Ether(dst="ff:ff:ff:ff:ff:ff", src=self.pg0.remote_mac) /
-             ARP(op="who-has",
-                 hwsrc=self.pg0.remote_mac,
-                 psrc=self.pg0.remote_hosts[0].ip4,
-                 pdst=self.pg0.remote_hosts[1].ip4))
-        self.send_and_assert_no_replies(self.pg0, p,
-                                        "ARP req for non-local destination")
+        p = Ether(dst="ff:ff:ff:ff:ff:ff", src=self.pg0.remote_mac) / ARP(
+            op="who-has",
+            hwsrc=self.pg0.remote_mac,
+            psrc=self.pg0.remote_hosts[0].ip4,
+            pdst=self.pg0.remote_hosts[1].ip4,
+        )
+        self.send_and_assert_no_replies(
+            self.pg0, p, "ARP req for non-local destination"
+        )
 
         #
         # cleanup
 
         #
         # cleanup
@@ -748,7 +814,7 @@ class ARPTestCase(VppTestCase):
         self.pg1.admin_down()
 
     def test_proxy_mirror_arp(self):
         self.pg1.admin_down()
 
     def test_proxy_mirror_arp(self):
-        """ Interface Mirror Proxy ARP """
+        """Interface Mirror Proxy ARP"""
 
         #
         # When VPP has an interface whose address is also applied to a TAP
 
         #
         # When VPP has an interface whose address is also applied to a TAP
@@ -759,20 +825,24 @@ class ARPTestCase(VppTestCase):
         #
         self.pg0.generate_remote_hosts(2)
 
         #
         self.pg0.generate_remote_hosts(2)
 
-        arp_req_from_me = (Ether(src=self.pg2.remote_mac,
-                                 dst="ff:ff:ff:ff:ff:ff") /
-                           ARP(op="who-has",
-                               hwsrc=self.pg2.remote_mac,
-                               pdst=self.pg0.remote_hosts[1].ip4,
-                               psrc=self.pg0.local_ip4))
+        arp_req_from_me = Ether(src=self.pg2.remote_mac, dst="ff:ff:ff:ff:ff:ff") / ARP(
+            op="who-has",
+            hwsrc=self.pg2.remote_mac,
+            pdst=self.pg0.remote_hosts[1].ip4,
+            psrc=self.pg0.local_ip4,
+        )
 
         #
         # Configure Proxy ARP for the subnet on PG0addresses on pg0
         #
 
         #
         # Configure Proxy ARP for the subnet on PG0addresses on pg0
         #
-        self.vapi.proxy_arp_add_del(proxy={'table_id': 0,
-                                           'low': self.pg0._local_ip4_subnet,
-                                           'hi': self.pg0._local_ip4_bcast},
-                                    is_add=1)
+        self.vapi.proxy_arp_add_del(
+            proxy={
+                "table_id": 0,
+                "low": self.pg0._local_ip4_subnet,
+                "hi": self.pg0._local_ip4_bcast,
+            },
+            is_add=1,
+        )
 
         # Make pg2 un-numbered to pg0
         #
 
         # Make pg2 un-numbered to pg0
         #
@@ -788,43 +858,49 @@ class ARPTestCase(VppTestCase):
         # is VPP's own address
         #
         rx = self.send_and_expect(self.pg2, [arp_req_from_me], self.pg2)
         # is VPP's own address
         #
         rx = self.send_and_expect(self.pg2, [arp_req_from_me], self.pg2)
-        self.verify_arp_resp(rx[0],
-                             self.pg2.local_mac,
-                             self.pg2.remote_mac,
-                             self.pg0.remote_hosts[1].ip4,
-                             self.pg0.local_ip4)
+        self.verify_arp_resp(
+            rx[0],
+            self.pg2.local_mac,
+            self.pg2.remote_mac,
+            self.pg0.remote_hosts[1].ip4,
+            self.pg0.local_ip4,
+        )
 
         #
         # validate we have not learned an ARP entry as a result of this
         #
 
         #
         # validate we have not learned an ARP entry as a result of this
         #
-        self.assertFalse(find_nbr(self,
-                                  self.pg2.sw_if_index,
-                                  self.pg0.local_ip4))
+        self.assertFalse(find_nbr(self, self.pg2.sw_if_index, self.pg0.local_ip4))
 
         #
         # setup a punt redirect so packets from the uplink go to the tap
         #
 
         #
         # setup a punt redirect so packets from the uplink go to the tap
         #
-        redirect = VppIpPuntRedirect(self, self.pg0.sw_if_index,
-                                     self.pg2.sw_if_index, self.pg0.local_ip4)
+        redirect = VppIpPuntRedirect(
+            self, self.pg0.sw_if_index, self.pg2.sw_if_index, self.pg0.local_ip4
+        )
         redirect.add_vpp_config()
 
         redirect.add_vpp_config()
 
-        p_tcp = (Ether(src=self.pg0.remote_mac,
-                       dst=self.pg0.local_mac,) /
-                 IP(src=self.pg0.remote_ip4,
-                    dst=self.pg0.local_ip4) /
-                 TCP(sport=80, dport=80) /
-                 Raw())
+        p_tcp = (
+            Ether(
+                src=self.pg0.remote_mac,
+                dst=self.pg0.local_mac,
+            )
+            / IP(src=self.pg0.remote_ip4, dst=self.pg0.local_ip4)
+            / TCP(sport=80, dport=80)
+            / Raw()
+        )
         rx = self.send_and_expect(self.pg0, [p_tcp], self.pg2)
 
         # there's no ARP entry so this is an ARP req
         self.assertTrue(rx[0].haslayer(ARP))
 
         # and ARP entry for VPP's pg0 address on the host interface
         rx = self.send_and_expect(self.pg0, [p_tcp], self.pg2)
 
         # there's no ARP entry so this is an ARP req
         self.assertTrue(rx[0].haslayer(ARP))
 
         # and ARP entry for VPP's pg0 address on the host interface
-        n1 = VppNeighbor(self,
-                         self.pg2.sw_if_index,
-                         self.pg2.remote_mac,
-                         self.pg0.local_ip4,
-                         is_no_fib_entry=True).add_vpp_config()
+        n1 = VppNeighbor(
+            self,
+            self.pg2.sw_if_index,
+            self.pg2.remote_mac,
+            self.pg0.local_ip4,
+            is_no_fib_entry=True,
+        ).add_vpp_config()
         # now the packets shold forward
         rx = self.send_and_expect(self.pg0, [p_tcp], self.pg2)
         self.assertFalse(rx[0].haslayer(ARP))
         # now the packets shold forward
         rx = self.send_and_expect(self.pg0, [p_tcp], self.pg2)
         self.assertFalse(rx[0].haslayer(ARP))
@@ -839,75 +915,81 @@ class ARPTestCase(VppTestCase):
         # ensure we can still resolve the ARPs on the uplink
         self.pg0.resolve_arp()
 
         # ensure we can still resolve the ARPs on the uplink
         self.pg0.resolve_arp()
 
-        self.assertTrue(find_nbr(self,
-                                 self.pg0.sw_if_index,
-                                 self.pg0.remote_ip4))
+        self.assertTrue(find_nbr(self, self.pg0.sw_if_index, self.pg0.remote_ip4))
 
         #
         # cleanup
         #
 
         #
         # cleanup
         #
-        self.vapi.proxy_arp_add_del(proxy={'table_id': 0,
-                                           'low': self.pg0._local_ip4_subnet,
-                                           'hi': self.pg0._local_ip4_bcast},
-                                    is_add=0)
+        self.vapi.proxy_arp_add_del(
+            proxy={
+                "table_id": 0,
+                "low": self.pg0._local_ip4_subnet,
+                "hi": self.pg0._local_ip4_bcast,
+            },
+            is_add=0,
+        )
         redirect.remove_vpp_config()
 
     def test_proxy_arp(self):
         redirect.remove_vpp_config()
 
     def test_proxy_arp(self):
-        """ Proxy ARP """
+        """Proxy ARP"""
 
         self.pg1.generate_remote_hosts(2)
 
         #
         # Proxy ARP request packets for each interface
         #
 
         self.pg1.generate_remote_hosts(2)
 
         #
         # Proxy ARP request packets for each interface
         #
-        arp_req_pg0 = (Ether(src=self.pg0.remote_mac,
-                             dst="ff:ff:ff:ff:ff:ff") /
-                       ARP(op="who-has",
-                           hwsrc=self.pg0.remote_mac,
-                           pdst="10.10.10.3",
-                           psrc=self.pg0.remote_ip4))
-        arp_req_pg0_tagged = (Ether(src=self.pg0.remote_mac,
-                                    dst="ff:ff:ff:ff:ff:ff") /
-                              Dot1Q(vlan=0) /
-                              ARP(op="who-has",
-                                  hwsrc=self.pg0.remote_mac,
-                                  pdst="10.10.10.3",
-                                  psrc=self.pg0.remote_ip4))
-        arp_req_pg1 = (Ether(src=self.pg1.remote_mac,
-                             dst="ff:ff:ff:ff:ff:ff") /
-                       ARP(op="who-has",
-                           hwsrc=self.pg1.remote_mac,
-                           pdst="10.10.10.3",
-                           psrc=self.pg1.remote_ip4))
-        arp_req_pg2 = (Ether(src=self.pg2.remote_mac,
-                             dst="ff:ff:ff:ff:ff:ff") /
-                       ARP(op="who-has",
-                           hwsrc=self.pg2.remote_mac,
-                           pdst="10.10.10.3",
-                           psrc=self.pg1.remote_hosts[1].ip4))
-        arp_req_pg3 = (Ether(src=self.pg3.remote_mac,
-                             dst="ff:ff:ff:ff:ff:ff") /
-                       ARP(op="who-has",
-                           hwsrc=self.pg3.remote_mac,
-                           pdst="10.10.10.3",
-                           psrc=self.pg3.remote_ip4))
+        arp_req_pg0 = Ether(src=self.pg0.remote_mac, dst="ff:ff:ff:ff:ff:ff") / ARP(
+            op="who-has",
+            hwsrc=self.pg0.remote_mac,
+            pdst="10.10.10.3",
+            psrc=self.pg0.remote_ip4,
+        )
+        arp_req_pg0_tagged = (
+            Ether(src=self.pg0.remote_mac, dst="ff:ff:ff:ff:ff:ff")
+            / Dot1Q(vlan=0)
+            / ARP(
+                op="who-has",
+                hwsrc=self.pg0.remote_mac,
+                pdst="10.10.10.3",
+                psrc=self.pg0.remote_ip4,
+            )
+        )
+        arp_req_pg1 = Ether(src=self.pg1.remote_mac, dst="ff:ff:ff:ff:ff:ff") / ARP(
+            op="who-has",
+            hwsrc=self.pg1.remote_mac,
+            pdst="10.10.10.3",
+            psrc=self.pg1.remote_ip4,
+        )
+        arp_req_pg2 = Ether(src=self.pg2.remote_mac, dst="ff:ff:ff:ff:ff:ff") / ARP(
+            op="who-has",
+            hwsrc=self.pg2.remote_mac,
+            pdst="10.10.10.3",
+            psrc=self.pg1.remote_hosts[1].ip4,
+        )
+        arp_req_pg3 = Ether(src=self.pg3.remote_mac, dst="ff:ff:ff:ff:ff:ff") / ARP(
+            op="who-has",
+            hwsrc=self.pg3.remote_mac,
+            pdst="10.10.10.3",
+            psrc=self.pg3.remote_ip4,
+        )
 
         #
         # Configure Proxy ARP for 10.10.10.0 -> 10.10.10.124
         #
 
         #
         # Configure Proxy ARP for 10.10.10.0 -> 10.10.10.124
         #
-        self.vapi.proxy_arp_add_del(proxy={'table_id': 0,
-                                           'low': "10.10.10.2",
-                                           'hi': "10.10.10.124"},
-                                    is_add=1)
+        self.vapi.proxy_arp_add_del(
+            proxy={"table_id": 0, "low": "10.10.10.2", "hi": "10.10.10.124"}, is_add=1
+        )
 
         #
         # No responses are sent when the interfaces are not enabled for proxy
         # ARP
         #
 
         #
         # No responses are sent when the interfaces are not enabled for proxy
         # ARP
         #
-        self.send_and_assert_no_replies(self.pg0, arp_req_pg0,
-                                        "ARP req from unconfigured interface")
-        self.send_and_assert_no_replies(self.pg2, arp_req_pg2,
-                                        "ARP req from unconfigured interface")
+        self.send_and_assert_no_replies(
+            self.pg0, arp_req_pg0, "ARP req from unconfigured interface"
+        )
+        self.send_and_assert_no_replies(
+            self.pg2, arp_req_pg2, "ARP req from unconfigured interface"
+        )
 
         #
         # Make pg2 un-numbered to pg1
 
         #
         # Make pg2 un-numbered to pg1
@@ -915,8 +997,9 @@ class ARPTestCase(VppTestCase):
         #
         self.pg2.set_unnumbered(self.pg1.sw_if_index)
 
         #
         self.pg2.set_unnumbered(self.pg1.sw_if_index)
 
-        self.send_and_assert_no_replies(self.pg2, arp_req_pg2,
-                                        "ARP req from unnumbered interface")
+        self.send_and_assert_no_replies(
+            self.pg2, arp_req_pg2, "ARP req from unnumbered interface"
+        )
 
         #
         # Enable each interface to reply to proxy ARPs
 
         #
         # Enable each interface to reply to proxy ARPs
@@ -933,71 +1016,82 @@ class ARPTestCase(VppTestCase):
         self.pg_start()
 
         rx = self.pg0.get_capture(1)
         self.pg_start()
 
         rx = self.pg0.get_capture(1)
-        self.verify_arp_resp(rx[0],
-                             self.pg0.local_mac,
-                             self.pg0.remote_mac,
-                             "10.10.10.3",
-                             self.pg0.remote_ip4)
+        self.verify_arp_resp(
+            rx[0],
+            self.pg0.local_mac,
+            self.pg0.remote_mac,
+            "10.10.10.3",
+            self.pg0.remote_ip4,
+        )
 
         self.pg0.add_stream(arp_req_pg0_tagged)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
         rx = self.pg0.get_capture(1)
 
         self.pg0.add_stream(arp_req_pg0_tagged)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
         rx = self.pg0.get_capture(1)
-        self.verify_arp_resp(rx[0],
-                             self.pg0.local_mac,
-                             self.pg0.remote_mac,
-                             "10.10.10.3",
-                             self.pg0.remote_ip4)
+        self.verify_arp_resp(
+            rx[0],
+            self.pg0.local_mac,
+            self.pg0.remote_mac,
+            "10.10.10.3",
+            self.pg0.remote_ip4,
+        )
 
         self.pg1.add_stream(arp_req_pg1)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
         rx = self.pg1.get_capture(1)
 
         self.pg1.add_stream(arp_req_pg1)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
         rx = self.pg1.get_capture(1)
-        self.verify_arp_resp(rx[0],
-                             self.pg1.local_mac,
-                             self.pg1.remote_mac,
-                             "10.10.10.3",
-                             self.pg1.remote_ip4)
+        self.verify_arp_resp(
+            rx[0],
+            self.pg1.local_mac,
+            self.pg1.remote_mac,
+            "10.10.10.3",
+            self.pg1.remote_ip4,
+        )
 
         self.pg2.add_stream(arp_req_pg2)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
         rx = self.pg2.get_capture(1)
 
         self.pg2.add_stream(arp_req_pg2)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
         rx = self.pg2.get_capture(1)
-        self.verify_arp_resp(rx[0],
-                             self.pg2.local_mac,
-                             self.pg2.remote_mac,
-                             "10.10.10.3",
-                             self.pg1.remote_hosts[1].ip4)
+        self.verify_arp_resp(
+            rx[0],
+            self.pg2.local_mac,
+            self.pg2.remote_mac,
+            "10.10.10.3",
+            self.pg1.remote_hosts[1].ip4,
+        )
 
         #
         # A request for an address out of the configured range
         #
 
         #
         # A request for an address out of the configured range
         #
-        arp_req_pg1_hi = (Ether(src=self.pg1.remote_mac,
-                                dst="ff:ff:ff:ff:ff:ff") /
-                          ARP(op="who-has",
-                              hwsrc=self.pg1.remote_mac,
-                              pdst="10.10.10.125",
-                              psrc=self.pg1.remote_ip4))
-        self.send_and_assert_no_replies(self.pg1, arp_req_pg1_hi,
-                                        "ARP req out of range HI")
-        arp_req_pg1_low = (Ether(src=self.pg1.remote_mac,
-                                 dst="ff:ff:ff:ff:ff:ff") /
-                           ARP(op="who-has",
-                               hwsrc=self.pg1.remote_mac,
-                               pdst="10.10.10.1",
-                               psrc=self.pg1.remote_ip4))
-        self.send_and_assert_no_replies(self.pg1, arp_req_pg1_low,
-                                        "ARP req out of range Low")
+        arp_req_pg1_hi = Ether(src=self.pg1.remote_mac, dst="ff:ff:ff:ff:ff:ff") / ARP(
+            op="who-has",
+            hwsrc=self.pg1.remote_mac,
+            pdst="10.10.10.125",
+            psrc=self.pg1.remote_ip4,
+        )
+        self.send_and_assert_no_replies(
+            self.pg1, arp_req_pg1_hi, "ARP req out of range HI"
+        )
+        arp_req_pg1_low = Ether(src=self.pg1.remote_mac, dst="ff:ff:ff:ff:ff:ff") / ARP(
+            op="who-has",
+            hwsrc=self.pg1.remote_mac,
+            pdst="10.10.10.1",
+            psrc=self.pg1.remote_ip4,
+        )
+        self.send_and_assert_no_replies(
+            self.pg1, arp_req_pg1_low, "ARP req out of range Low"
+        )
 
         #
         # Request for an address in the proxy range but from an interface
         # in a different VRF
         #
 
         #
         # Request for an address in the proxy range but from an interface
         # in a different VRF
         #
-        self.send_and_assert_no_replies(self.pg3, arp_req_pg3,
-                                        "ARP req from different VRF")
+        self.send_and_assert_no_replies(
+            self.pg3, arp_req_pg3, "ARP req from different VRF"
+        )
 
         #
         # Disable Each interface for proxy ARP
 
         #
         # Disable Each interface for proxy ARP
@@ -1006,12 +1100,9 @@ class ARPTestCase(VppTestCase):
         for i in self.pg_interfaces:
             i.set_proxy_arp(0)
 
         for i in self.pg_interfaces:
             i.set_proxy_arp(0)
 
-        self.send_and_assert_no_replies(self.pg0, arp_req_pg0,
-                                        "ARP req from disable")
-        self.send_and_assert_no_replies(self.pg1, arp_req_pg1,
-                                        "ARP req from disable")
-        self.send_and_assert_no_replies(self.pg2, arp_req_pg2,
-                                        "ARP req from disable")
+        self.send_and_assert_no_replies(self.pg0, arp_req_pg0, "ARP req from disable")
+        self.send_and_assert_no_replies(self.pg1, arp_req_pg1, "ARP req from disable")
+        self.send_and_assert_no_replies(self.pg2, arp_req_pg2, "ARP req from disable")
 
         #
         # clean up on interface 2
 
         #
         # clean up on interface 2
@@ -1019,7 +1110,7 @@ class ARPTestCase(VppTestCase):
         self.pg2.unset_unnumbered(self.pg1.sw_if_index)
 
     def test_mpls(self):
         self.pg2.unset_unnumbered(self.pg1.sw_if_index)
 
     def test_mpls(self):
-        """ MPLS """
+        """MPLS"""
 
         #
         # Interface 2 does not yet have ip4 config
 
         #
         # Interface 2 does not yet have ip4 config
@@ -1030,30 +1121,36 @@ class ARPTestCase(VppTestCase):
         #
         # Add a route with out going label via an ARP unresolved next-hop
         #
         #
         # Add a route with out going label via an ARP unresolved next-hop
         #
-        ip_10_0_0_1 = VppIpRoute(self, "10.0.0.1", 32,
-                                 [VppRoutePath(self.pg2.remote_hosts[1].ip4,
-                                               self.pg2.sw_if_index,
-                                               labels=[55])])
+        ip_10_0_0_1 = VppIpRoute(
+            self,
+            "10.0.0.1",
+            32,
+            [
+                VppRoutePath(
+                    self.pg2.remote_hosts[1].ip4, self.pg2.sw_if_index, labels=[55]
+                )
+            ],
+        )
         ip_10_0_0_1.add_vpp_config()
 
         #
         # packets should generate an ARP request
         #
         ip_10_0_0_1.add_vpp_config()
 
         #
         # packets should generate an ARP request
         #
-        p = (Ether(src=self.pg0.remote_mac,
-                   dst=self.pg0.local_mac) /
-             IP(src=self.pg0.remote_ip4, dst="10.0.0.1") /
-             UDP(sport=1234, dport=1234) /
-             Raw(b'\xa5' * 100))
+        p = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg0.remote_ip4, dst="10.0.0.1")
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
 
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
         rx = self.pg2.get_capture(1)
 
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
         rx = self.pg2.get_capture(1)
-        self.verify_arp_req(rx[0],
-                            self.pg2.local_mac,
-                            self.pg2.local_ip4,
-                            self.pg2._remote_hosts[1].ip4)
+        self.verify_arp_req(
+            rx[0], self.pg2.local_mac, self.pg2.local_ip4, self.pg2._remote_hosts[1].ip4
+        )
 
         #
         # now resolve the neighbours
 
         #
         # now resolve the neighbours
@@ -1070,42 +1167,48 @@ class ARPTestCase(VppTestCase):
         self.pg_start()
 
         rx = self.pg2.get_capture(1)
         self.pg_start()
 
         rx = self.pg2.get_capture(1)
-        self.verify_ip_o_mpls(rx[0],
-                              self.pg2.local_mac,
-                              self.pg2.remote_hosts[1].mac,
-                              55,
-                              self.pg0.remote_ip4,
-                              "10.0.0.1")
+        self.verify_ip_o_mpls(
+            rx[0],
+            self.pg2.local_mac,
+            self.pg2.remote_hosts[1].mac,
+            55,
+            self.pg0.remote_ip4,
+            "10.0.0.1",
+        )
         self.pg2.unconfig_ip4()
 
     def test_arp_vrrp(self):
         self.pg2.unconfig_ip4()
 
     def test_arp_vrrp(self):
-        """ ARP reply with VRRP virtual src hw addr """
+        """ARP reply with VRRP virtual src hw addr"""
 
         #
         # IP packet destined for pg1 remote host arrives on pg0 resulting
         # in an ARP request for the address of the remote host on pg1
         #
 
         #
         # IP packet destined for pg1 remote host arrives on pg0 resulting
         # in an ARP request for the address of the remote host on pg1
         #
-        p0 = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-              IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4) /
-              UDP(sport=1234, dport=1234) /
-              Raw())
+        p0 = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4)
+            / UDP(sport=1234, dport=1234)
+            / Raw()
+        )
 
         rx1 = self.send_and_expect(self.pg0, [p0], self.pg1)
 
 
         rx1 = self.send_and_expect(self.pg0, [p0], self.pg1)
 
-        self.verify_arp_req(rx1[0],
-                            self.pg1.local_mac,
-                            self.pg1.local_ip4,
-                            self.pg1.remote_ip4)
+        self.verify_arp_req(
+            rx1[0], self.pg1.local_mac, self.pg1.local_ip4, self.pg1.remote_ip4
+        )
 
         #
         # ARP reply for address of pg1 remote host arrives on pg1 with
         # the hw src addr set to a value in the VRRP IPv4 range of
         # MAC addresses
         #
 
         #
         # ARP reply for address of pg1 remote host arrives on pg1 with
         # the hw src addr set to a value in the VRRP IPv4 range of
         # MAC addresses
         #
-        p1 = (Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac) /
-              ARP(op="is-at", hwdst=self.pg1.local_mac,
-                  hwsrc="00:00:5e:00:01:09", pdst=self.pg1.local_ip4,
-                  psrc=self.pg1.remote_ip4))
+        p1 = Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac) / ARP(
+            op="is-at",
+            hwdst=self.pg1.local_mac,
+            hwsrc="00:00:5e:00:01:09",
+            pdst=self.pg1.local_ip4,
+            psrc=self.pg1.remote_ip4,
+        )
 
         self.send_and_assert_no_replies(self.pg1, p1, "ARP reply")
 
 
         self.send_and_assert_no_replies(self.pg1, p1, "ARP reply")
 
@@ -1116,17 +1219,19 @@ class ARPTestCase(VppTestCase):
         #
         rx1 = self.send_and_expect(self.pg0, [p0], self.pg1)
 
         #
         rx1 = self.send_and_expect(self.pg0, [p0], self.pg1)
 
-        self.verify_ip(rx1[0],
-                       self.pg1.local_mac,
-                       "00:00:5e:00:01:09",
-                       self.pg0.remote_ip4,
-                       self.pg1.remote_ip4)
+        self.verify_ip(
+            rx1[0],
+            self.pg1.local_mac,
+            "00:00:5e:00:01:09",
+            self.pg0.remote_ip4,
+            self.pg1.remote_ip4,
+        )
 
         self.pg1.admin_down()
         self.pg1.admin_up()
 
     def test_arp_duplicates(self):
 
         self.pg1.admin_down()
         self.pg1.admin_up()
 
     def test_arp_duplicates(self):
-        """ ARP Duplicates"""
+        """ARP Duplicates"""
 
         #
         # Generate some hosts on the LAN
 
         #
         # Generate some hosts on the LAN
@@ -1136,26 +1241,30 @@ class ARPTestCase(VppTestCase):
         #
         # Add host 1 on pg1 and pg2
         #
         #
         # Add host 1 on pg1 and pg2
         #
-        arp_pg1 = VppNeighbor(self,
-                              self.pg1.sw_if_index,
-                              self.pg1.remote_hosts[1].mac,
-                              self.pg1.remote_hosts[1].ip4)
+        arp_pg1 = VppNeighbor(
+            self,
+            self.pg1.sw_if_index,
+            self.pg1.remote_hosts[1].mac,
+            self.pg1.remote_hosts[1].ip4,
+        )
         arp_pg1.add_vpp_config()
         arp_pg1.add_vpp_config()
-        arp_pg2 = VppNeighbor(self,
-                              self.pg2.sw_if_index,
-                              self.pg2.remote_mac,
-                              self.pg1.remote_hosts[1].ip4)
+        arp_pg2 = VppNeighbor(
+            self,
+            self.pg2.sw_if_index,
+            self.pg2.remote_mac,
+            self.pg1.remote_hosts[1].ip4,
+        )
         arp_pg2.add_vpp_config()
 
         #
         # IP packet destined for pg1 remote host arrives on pg1 again.
         #
         arp_pg2.add_vpp_config()
 
         #
         # IP packet destined for pg1 remote host arrives on pg1 again.
         #
-        p = (Ether(dst=self.pg0.local_mac,
-                   src=self.pg0.remote_mac) /
-             IP(src=self.pg0.remote_ip4,
-                dst=self.pg1.remote_hosts[1].ip4) /
-             UDP(sport=1234, dport=1234) /
-             Raw())
+        p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_hosts[1].ip4)
+            / UDP(sport=1234, dport=1234)
+            / Raw()
+        )
 
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
 
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
@@ -1163,11 +1272,13 @@ class ARPTestCase(VppTestCase):
 
         rx1 = self.pg1.get_capture(1)
 
 
         rx1 = self.pg1.get_capture(1)
 
-        self.verify_ip(rx1[0],
-                       self.pg1.local_mac,
-                       self.pg1.remote_hosts[1].mac,
-                       self.pg0.remote_ip4,
-                       self.pg1.remote_hosts[1].ip4)
+        self.verify_ip(
+            rx1[0],
+            self.pg1.local_mac,
+            self.pg1.remote_hosts[1].mac,
+            self.pg0.remote_ip4,
+            self.pg1.remote_hosts[1].ip4,
+        )
 
         #
         # remove the duplicate on pg1
 
         #
         # remove the duplicate on pg1
@@ -1181,10 +1292,9 @@ class ARPTestCase(VppTestCase):
 
         rx1 = self.pg1.get_capture(1)
 
 
         rx1 = self.pg1.get_capture(1)
 
-        self.verify_arp_req(rx1[0],
-                            self.pg1.local_mac,
-                            self.pg1.local_ip4,
-                            self.pg1.remote_hosts[1].ip4)
+        self.verify_arp_req(
+            rx1[0], self.pg1.local_mac, self.pg1.local_ip4, self.pg1.remote_hosts[1].ip4
+        )
 
         #
         # Add it back
 
         #
         # Add it back
@@ -1197,24 +1307,28 @@ class ARPTestCase(VppTestCase):
 
         rx1 = self.pg1.get_capture(1)
 
 
         rx1 = self.pg1.get_capture(1)
 
-        self.verify_ip(rx1[0],
-                       self.pg1.local_mac,
-                       self.pg1.remote_hosts[1].mac,
-                       self.pg0.remote_ip4,
-                       self.pg1.remote_hosts[1].ip4)
+        self.verify_ip(
+            rx1[0],
+            self.pg1.local_mac,
+            self.pg1.remote_hosts[1].mac,
+            self.pg0.remote_ip4,
+            self.pg1.remote_hosts[1].ip4,
+        )
 
     def test_arp_static(self):
 
     def test_arp_static(self):
-        """ ARP Static"""
+        """ARP Static"""
         self.pg2.generate_remote_hosts(3)
 
         #
         # Add a static ARP entry
         #
         self.pg2.generate_remote_hosts(3)
 
         #
         # Add a static ARP entry
         #
-        static_arp = VppNeighbor(self,
-                                 self.pg2.sw_if_index,
-                                 self.pg2.remote_hosts[1].mac,
-                                 self.pg2.remote_hosts[1].ip4,
-                                 is_static=1)
+        static_arp = VppNeighbor(
+            self,
+            self.pg2.sw_if_index,
+            self.pg2.remote_hosts[1].mac,
+            self.pg2.remote_hosts[1].ip4,
+            is_static=1,
+        )
         static_arp.add_vpp_config()
 
         #
         static_arp.add_vpp_config()
 
         #
@@ -1225,13 +1339,12 @@ class ARPTestCase(VppTestCase):
         #
         # We should now find the adj-fib
         #
         #
         # We should now find the adj-fib
         #
-        self.assertTrue(find_nbr(self,
-                                 self.pg2.sw_if_index,
-                                 self.pg2.remote_hosts[1].ip4,
-                                 is_static=1))
-        self.assertTrue(find_route(self,
-                                   self.pg2.remote_hosts[1].ip4,
-                                   32))
+        self.assertTrue(
+            find_nbr(
+                self, self.pg2.sw_if_index, self.pg2.remote_hosts[1].ip4, is_static=1
+            )
+        )
+        self.assertTrue(find_route(self, self.pg2.remote_hosts[1].ip4, 32))
 
         #
         # remove the connected
 
         #
         # remove the connected
@@ -1248,10 +1361,7 @@ class ARPTestCase(VppTestCase):
         # adj fib in the new table
         #
         self.pg2.config_ip4()
         # adj fib in the new table
         #
         self.pg2.config_ip4()
-        self.assertTrue(find_route(self,
-                                   self.pg2.remote_hosts[1].ip4,
-                                   32,
-                                   table_id=1))
+        self.assertTrue(find_route(self, self.pg2.remote_hosts[1].ip4, 32, table_id=1))
 
         #
         # clean-up
 
         #
         # clean-up
@@ -1261,18 +1371,22 @@ class ARPTestCase(VppTestCase):
         self.pg2.set_table_ip4(0)
 
     def test_arp_static_replace_dynamic_same_mac(self):
         self.pg2.set_table_ip4(0)
 
     def test_arp_static_replace_dynamic_same_mac(self):
-        """ ARP Static can replace Dynamic (same mac) """
+        """ARP Static can replace Dynamic (same mac)"""
         self.pg2.generate_remote_hosts(1)
 
         self.pg2.generate_remote_hosts(1)
 
-        dyn_arp = VppNeighbor(self,
-                              self.pg2.sw_if_index,
-                              self.pg2.remote_hosts[0].mac,
-                              self.pg2.remote_hosts[0].ip4)
-        static_arp = VppNeighbor(self,
-                                 self.pg2.sw_if_index,
-                                 self.pg2.remote_hosts[0].mac,
-                                 self.pg2.remote_hosts[0].ip4,
-                                 is_static=1)
+        dyn_arp = VppNeighbor(
+            self,
+            self.pg2.sw_if_index,
+            self.pg2.remote_hosts[0].mac,
+            self.pg2.remote_hosts[0].ip4,
+        )
+        static_arp = VppNeighbor(
+            self,
+            self.pg2.sw_if_index,
+            self.pg2.remote_hosts[0].mac,
+            self.pg2.remote_hosts[0].ip4,
+            is_static=1,
+        )
 
         #
         # Add a dynamic ARP entry
 
         #
         # Add a dynamic ARP entry
@@ -1282,15 +1396,20 @@ class ARPTestCase(VppTestCase):
         #
         # We should find the dynamic nbr
         #
         #
         # We should find the dynamic nbr
         #
-        self.assertFalse(find_nbr(self,
-                                  self.pg2.sw_if_index,
-                                  self.pg2.remote_hosts[0].ip4,
-                                  is_static=1))
-        self.assertTrue(find_nbr(self,
-                                 self.pg2.sw_if_index,
-                                 self.pg2.remote_hosts[0].ip4,
-                                 is_static=0,
-                                 mac=self.pg2.remote_hosts[0].mac))
+        self.assertFalse(
+            find_nbr(
+                self, self.pg2.sw_if_index, self.pg2.remote_hosts[0].ip4, is_static=1
+            )
+        )
+        self.assertTrue(
+            find_nbr(
+                self,
+                self.pg2.sw_if_index,
+                self.pg2.remote_hosts[0].ip4,
+                is_static=0,
+                mac=self.pg2.remote_hosts[0].mac,
+            )
+        )
 
         #
         # Add a static ARP entry with the same mac
 
         #
         # Add a static ARP entry with the same mac
@@ -1300,15 +1419,20 @@ class ARPTestCase(VppTestCase):
         #
         # We should now find the static nbr with the same mac
         #
         #
         # We should now find the static nbr with the same mac
         #
-        self.assertFalse(find_nbr(self,
-                                  self.pg2.sw_if_index,
-                                  self.pg2.remote_hosts[0].ip4,
-                                  is_static=0))
-        self.assertTrue(find_nbr(self,
-                                 self.pg2.sw_if_index,
-                                 self.pg2.remote_hosts[0].ip4,
-                                 is_static=1,
-                                 mac=self.pg2.remote_hosts[0].mac))
+        self.assertFalse(
+            find_nbr(
+                self, self.pg2.sw_if_index, self.pg2.remote_hosts[0].ip4, is_static=0
+            )
+        )
+        self.assertTrue(
+            find_nbr(
+                self,
+                self.pg2.sw_if_index,
+                self.pg2.remote_hosts[0].ip4,
+                is_static=1,
+                mac=self.pg2.remote_hosts[0].mac,
+            )
+        )
 
         #
         # clean-up
 
         #
         # clean-up
@@ -1316,18 +1440,22 @@ class ARPTestCase(VppTestCase):
         static_arp.remove_vpp_config()
 
     def test_arp_static_replace_dynamic_diff_mac(self):
         static_arp.remove_vpp_config()
 
     def test_arp_static_replace_dynamic_diff_mac(self):
-        """ ARP Static can replace Dynamic (diff mac) """
+        """ARP Static can replace Dynamic (diff mac)"""
         self.pg2.generate_remote_hosts(2)
 
         self.pg2.generate_remote_hosts(2)
 
-        dyn_arp = VppNeighbor(self,
-                              self.pg2.sw_if_index,
-                              self.pg2.remote_hosts[0].mac,
-                              self.pg2.remote_hosts[0].ip4)
-        static_arp = VppNeighbor(self,
-                                 self.pg2.sw_if_index,
-                                 self.pg2.remote_hosts[1].mac,
-                                 self.pg2.remote_hosts[0].ip4,
-                                 is_static=1)
+        dyn_arp = VppNeighbor(
+            self,
+            self.pg2.sw_if_index,
+            self.pg2.remote_hosts[0].mac,
+            self.pg2.remote_hosts[0].ip4,
+        )
+        static_arp = VppNeighbor(
+            self,
+            self.pg2.sw_if_index,
+            self.pg2.remote_hosts[1].mac,
+            self.pg2.remote_hosts[0].ip4,
+            is_static=1,
+        )
 
         #
         # Add a dynamic ARP entry
 
         #
         # Add a dynamic ARP entry
@@ -1337,15 +1465,20 @@ class ARPTestCase(VppTestCase):
         #
         # We should find the dynamic nbr
         #
         #
         # We should find the dynamic nbr
         #
-        self.assertFalse(find_nbr(self,
-                                  self.pg2.sw_if_index,
-                                  self.pg2.remote_hosts[0].ip4,
-                                  is_static=1))
-        self.assertTrue(find_nbr(self,
-                                 self.pg2.sw_if_index,
-                                 self.pg2.remote_hosts[0].ip4,
-                                 is_static=0,
-                                 mac=self.pg2.remote_hosts[0].mac))
+        self.assertFalse(
+            find_nbr(
+                self, self.pg2.sw_if_index, self.pg2.remote_hosts[0].ip4, is_static=1
+            )
+        )
+        self.assertTrue(
+            find_nbr(
+                self,
+                self.pg2.sw_if_index,
+                self.pg2.remote_hosts[0].ip4,
+                is_static=0,
+                mac=self.pg2.remote_hosts[0].mac,
+            )
+        )
 
         #
         # Add a static ARP entry with a changed mac
 
         #
         # Add a static ARP entry with a changed mac
@@ -1355,15 +1488,20 @@ class ARPTestCase(VppTestCase):
         #
         # We should now find the static nbr with a changed mac
         #
         #
         # We should now find the static nbr with a changed mac
         #
-        self.assertFalse(find_nbr(self,
-                                  self.pg2.sw_if_index,
-                                  self.pg2.remote_hosts[0].ip4,
-                                  is_static=0))
-        self.assertTrue(find_nbr(self,
-                                 self.pg2.sw_if_index,
-                                 self.pg2.remote_hosts[0].ip4,
-                                 is_static=1,
-                                 mac=self.pg2.remote_hosts[1].mac))
+        self.assertFalse(
+            find_nbr(
+                self, self.pg2.sw_if_index, self.pg2.remote_hosts[0].ip4, is_static=0
+            )
+        )
+        self.assertTrue(
+            find_nbr(
+                self,
+                self.pg2.sw_if_index,
+                self.pg2.remote_hosts[0].ip4,
+                is_static=1,
+                mac=self.pg2.remote_hosts[1].mac,
+            )
+        )
 
         #
         # clean-up
 
         #
         # clean-up
@@ -1371,95 +1509,109 @@ class ARPTestCase(VppTestCase):
         static_arp.remove_vpp_config()
 
     def test_arp_incomplete(self):
         static_arp.remove_vpp_config()
 
     def test_arp_incomplete(self):
-        """ ARP Incomplete"""
+        """ARP Incomplete"""
         self.pg1.generate_remote_hosts(4)
 
         self.pg1.generate_remote_hosts(4)
 
-        p0 = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-              IP(src=self.pg0.remote_ip4,
-                 dst=self.pg1.remote_hosts[1].ip4) /
-              UDP(sport=1234, dport=1234) /
-              Raw())
-        p1 = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-              IP(src=self.pg0.remote_ip4,
-                 dst=self.pg1.remote_hosts[2].ip4) /
-              UDP(sport=1234, dport=1234) /
-              Raw())
-        p2 = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-              IP(src=self.pg0.remote_ip4,
-                 dst="1.1.1.1") /
-              UDP(sport=1234, dport=1234) /
-              Raw())
+        p0 = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_hosts[1].ip4)
+            / UDP(sport=1234, dport=1234)
+            / Raw()
+        )
+        p1 = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_hosts[2].ip4)
+            / UDP(sport=1234, dport=1234)
+            / Raw()
+        )
+        p2 = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(src=self.pg0.remote_ip4, dst="1.1.1.1")
+            / UDP(sport=1234, dport=1234)
+            / Raw()
+        )
 
         #
         # a packet to an unresolved destination generates an ARP request
         #
         rx = self.send_and_expect(self.pg0, [p0], self.pg1)
 
         #
         # a packet to an unresolved destination generates an ARP request
         #
         rx = self.send_and_expect(self.pg0, [p0], self.pg1)
-        self.verify_arp_req(rx[0],
-                            self.pg1.local_mac,
-                            self.pg1.local_ip4,
-                            self.pg1._remote_hosts[1].ip4)
+        self.verify_arp_req(
+            rx[0], self.pg1.local_mac, self.pg1.local_ip4, self.pg1._remote_hosts[1].ip4
+        )
 
         #
         # add a neighbour for remote host 1
         #
 
         #
         # add a neighbour for remote host 1
         #
-        static_arp = VppNeighbor(self,
-                                 self.pg1.sw_if_index,
-                                 self.pg1.remote_hosts[1].mac,
-                                 self.pg1.remote_hosts[1].ip4,
-                                 is_static=1)
+        static_arp = VppNeighbor(
+            self,
+            self.pg1.sw_if_index,
+            self.pg1.remote_hosts[1].mac,
+            self.pg1.remote_hosts[1].ip4,
+            is_static=1,
+        )
         static_arp.add_vpp_config()
 
         #
         # add a route through remote host 3 hence we get an incomplete
         #
         static_arp.add_vpp_config()
 
         #
         # add a route through remote host 3 hence we get an incomplete
         #
-        VppIpRoute(self, "1.1.1.1", 32,
-                   [VppRoutePath(self.pg1.remote_hosts[3].ip4,
-                                 self.pg1.sw_if_index)]).add_vpp_config()
+        VppIpRoute(
+            self,
+            "1.1.1.1",
+            32,
+            [VppRoutePath(self.pg1.remote_hosts[3].ip4, self.pg1.sw_if_index)],
+        ).add_vpp_config()
         rx = self.send_and_expect(self.pg0, [p2], self.pg1)
         rx = self.send_and_expect(self.pg0, [p2], self.pg1)
-        self.verify_arp_req(rx[0],
-                            self.pg1.local_mac,
-                            self.pg1.local_ip4,
-                            self.pg1._remote_hosts[3].ip4)
+        self.verify_arp_req(
+            rx[0], self.pg1.local_mac, self.pg1.local_ip4, self.pg1._remote_hosts[3].ip4
+        )
 
         #
         # change the interface's MAC
         #
 
         #
         # change the interface's MAC
         #
-        self.vapi.sw_interface_set_mac_address(self.pg1.sw_if_index,
-                                               "00:00:00:33:33:33")
+        self.vapi.sw_interface_set_mac_address(
+            self.pg1.sw_if_index, "00:00:00:33:33:33"
+        )
 
         #
         # now ARP requests come from the new source mac
         #
         rx = self.send_and_expect(self.pg0, [p1], self.pg1)
 
         #
         # now ARP requests come from the new source mac
         #
         rx = self.send_and_expect(self.pg0, [p1], self.pg1)
-        self.verify_arp_req(rx[0],
-                            "00:00:00:33:33:33",
-                            self.pg1.local_ip4,
-                            self.pg1._remote_hosts[2].ip4)
+        self.verify_arp_req(
+            rx[0],
+            "00:00:00:33:33:33",
+            self.pg1.local_ip4,
+            self.pg1._remote_hosts[2].ip4,
+        )
         rx = self.send_and_expect(self.pg0, [p2], self.pg1)
         rx = self.send_and_expect(self.pg0, [p2], self.pg1)
-        self.verify_arp_req(rx[0],
-                            "00:00:00:33:33:33",
-                            self.pg1.local_ip4,
-                            self.pg1._remote_hosts[3].ip4)
+        self.verify_arp_req(
+            rx[0],
+            "00:00:00:33:33:33",
+            self.pg1.local_ip4,
+            self.pg1._remote_hosts[3].ip4,
+        )
 
         #
         # packets to the resolved host also have the new source mac
         #
         rx = self.send_and_expect(self.pg0, [p0], self.pg1)
 
         #
         # packets to the resolved host also have the new source mac
         #
         rx = self.send_and_expect(self.pg0, [p0], self.pg1)
-        self.verify_ip(rx[0],
-                       "00:00:00:33:33:33",
-                       self.pg1.remote_hosts[1].mac,
-                       self.pg0.remote_ip4,
-                       self.pg1.remote_hosts[1].ip4)
+        self.verify_ip(
+            rx[0],
+            "00:00:00:33:33:33",
+            self.pg1.remote_hosts[1].mac,
+            self.pg0.remote_ip4,
+            self.pg1.remote_hosts[1].ip4,
+        )
 
         #
         # set the mac address on the interface that does not have a
         # configured subnet and thus no glean
         #
 
         #
         # set the mac address on the interface that does not have a
         # configured subnet and thus no glean
         #
-        self.vapi.sw_interface_set_mac_address(self.pg2.sw_if_index,
-                                               "00:00:00:33:33:33")
+        self.vapi.sw_interface_set_mac_address(
+            self.pg2.sw_if_index, "00:00:00:33:33:33"
+        )
 
     def test_garp(self):
 
     def test_garp(self):
-        """ GARP """
+        """GARP"""
 
         #
         # Generate some hosts on the LAN
 
         #
         # Generate some hosts on the LAN
@@ -1470,92 +1622,106 @@ class ARPTestCase(VppTestCase):
         #
         # And an ARP entry
         #
         #
         # And an ARP entry
         #
-        arp = VppNeighbor(self,
-                          self.pg1.sw_if_index,
-                          self.pg1.remote_hosts[1].mac,
-                          self.pg1.remote_hosts[1].ip4)
+        arp = VppNeighbor(
+            self,
+            self.pg1.sw_if_index,
+            self.pg1.remote_hosts[1].mac,
+            self.pg1.remote_hosts[1].ip4,
+        )
         arp.add_vpp_config()
 
         arp.add_vpp_config()
 
-        self.assertTrue(find_nbr(self,
-                                 self.pg1.sw_if_index,
-                                 self.pg1.remote_hosts[1].ip4,
-                                 mac=self.pg1.remote_hosts[1].mac))
+        self.assertTrue(
+            find_nbr(
+                self,
+                self.pg1.sw_if_index,
+                self.pg1.remote_hosts[1].ip4,
+                mac=self.pg1.remote_hosts[1].mac,
+            )
+        )
 
         #
         # Send a GARP (request) to swap the host 1's address to that of host 2
         #
 
         #
         # Send a GARP (request) to swap the host 1's address to that of host 2
         #
-        p1 = (Ether(dst="ff:ff:ff:ff:ff:ff",
-                    src=self.pg1.remote_hosts[2].mac) /
-              ARP(op="who-has",
-                  hwdst=self.pg1.local_mac,
-                  hwsrc=self.pg1.remote_hosts[2].mac,
-                  pdst=self.pg1.remote_hosts[1].ip4,
-                  psrc=self.pg1.remote_hosts[1].ip4))
+        p1 = Ether(dst="ff:ff:ff:ff:ff:ff", src=self.pg1.remote_hosts[2].mac) / ARP(
+            op="who-has",
+            hwdst=self.pg1.local_mac,
+            hwsrc=self.pg1.remote_hosts[2].mac,
+            pdst=self.pg1.remote_hosts[1].ip4,
+            psrc=self.pg1.remote_hosts[1].ip4,
+        )
 
         self.pg1.add_stream(p1)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
 
         self.pg1.add_stream(p1)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
-        self.assertTrue(find_nbr(self,
-                                 self.pg1.sw_if_index,
-                                 self.pg1.remote_hosts[1].ip4,
-                                 mac=self.pg1.remote_hosts[2].mac))
+        self.assertTrue(
+            find_nbr(
+                self,
+                self.pg1.sw_if_index,
+                self.pg1.remote_hosts[1].ip4,
+                mac=self.pg1.remote_hosts[2].mac,
+            )
+        )
 
         #
         # Send a GARP (reply) to swap the host 1's address to that of host 3
         #
 
         #
         # Send a GARP (reply) to swap the host 1's address to that of host 3
         #
-        p1 = (Ether(dst="ff:ff:ff:ff:ff:ff",
-                    src=self.pg1.remote_hosts[3].mac) /
-              ARP(op="is-at",
-                  hwdst=self.pg1.local_mac,
-                  hwsrc=self.pg1.remote_hosts[3].mac,
-                  pdst=self.pg1.remote_hosts[1].ip4,
-                  psrc=self.pg1.remote_hosts[1].ip4))
+        p1 = Ether(dst="ff:ff:ff:ff:ff:ff", src=self.pg1.remote_hosts[3].mac) / ARP(
+            op="is-at",
+            hwdst=self.pg1.local_mac,
+            hwsrc=self.pg1.remote_hosts[3].mac,
+            pdst=self.pg1.remote_hosts[1].ip4,
+            psrc=self.pg1.remote_hosts[1].ip4,
+        )
 
         self.pg1.add_stream(p1)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
 
         self.pg1.add_stream(p1)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
-        self.assertTrue(find_nbr(self,
-                                 self.pg1.sw_if_index,
-                                 self.pg1.remote_hosts[1].ip4,
-                                 mac=self.pg1.remote_hosts[3].mac))
+        self.assertTrue(
+            find_nbr(
+                self,
+                self.pg1.sw_if_index,
+                self.pg1.remote_hosts[1].ip4,
+                mac=self.pg1.remote_hosts[3].mac,
+            )
+        )
 
         #
         # GARPs (request nor replies) for host we don't know yet
         # don't result in new neighbour entries
         #
 
         #
         # GARPs (request nor replies) for host we don't know yet
         # don't result in new neighbour entries
         #
-        p1 = (Ether(dst="ff:ff:ff:ff:ff:ff",
-                    src=self.pg1.remote_hosts[3].mac) /
-              ARP(op="who-has",
-                  hwdst=self.pg1.local_mac,
-                  hwsrc=self.pg1.remote_hosts[3].mac,
-                  pdst=self.pg1.remote_hosts[2].ip4,
-                  psrc=self.pg1.remote_hosts[2].ip4))
+        p1 = Ether(dst="ff:ff:ff:ff:ff:ff", src=self.pg1.remote_hosts[3].mac) / ARP(
+            op="who-has",
+            hwdst=self.pg1.local_mac,
+            hwsrc=self.pg1.remote_hosts[3].mac,
+            pdst=self.pg1.remote_hosts[2].ip4,
+            psrc=self.pg1.remote_hosts[2].ip4,
+        )
 
         self.pg1.add_stream(p1)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
 
         self.pg1.add_stream(p1)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
-        self.assertFalse(find_nbr(self,
-                                  self.pg1.sw_if_index,
-                                  self.pg1.remote_hosts[2].ip4))
+        self.assertFalse(
+            find_nbr(self, self.pg1.sw_if_index, self.pg1.remote_hosts[2].ip4)
+        )
 
 
-        p1 = (Ether(dst="ff:ff:ff:ff:ff:ff",
-                    src=self.pg1.remote_hosts[3].mac) /
-              ARP(op="is-at",
-                  hwdst=self.pg1.local_mac,
-                  hwsrc=self.pg1.remote_hosts[3].mac,
-                  pdst=self.pg1.remote_hosts[2].ip4,
-                  psrc=self.pg1.remote_hosts[2].ip4))
+        p1 = Ether(dst="ff:ff:ff:ff:ff:ff", src=self.pg1.remote_hosts[3].mac) / ARP(
+            op="is-at",
+            hwdst=self.pg1.local_mac,
+            hwsrc=self.pg1.remote_hosts[3].mac,
+            pdst=self.pg1.remote_hosts[2].ip4,
+            psrc=self.pg1.remote_hosts[2].ip4,
+        )
 
         self.pg1.add_stream(p1)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
 
         self.pg1.add_stream(p1)
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
-        self.assertFalse(find_nbr(self,
-                                  self.pg1.sw_if_index,
-                                  self.pg1.remote_hosts[2].ip4))
+        self.assertFalse(
+            find_nbr(self, self.pg1.sw_if_index, self.pg1.remote_hosts[2].ip4)
+        )
 
         #
         # IP address in different subnets are not learnt
 
         #
         # IP address in different subnets are not learnt
@@ -1563,32 +1729,44 @@ class ARPTestCase(VppTestCase):
         self.pg2.configure_ipv4_neighbors()
 
         for op in ["is-at", "who-has"]:
         self.pg2.configure_ipv4_neighbors()
 
         for op in ["is-at", "who-has"]:
-            p1 = [(Ether(dst="ff:ff:ff:ff:ff:ff",
-                         src=self.pg2.remote_hosts[1].mac) /
-                   ARP(op=op,
-                       hwdst=self.pg2.local_mac,
-                       hwsrc=self.pg2.remote_hosts[1].mac,
-                       pdst=self.pg2.remote_hosts[1].ip4,
-                       psrc=self.pg2.remote_hosts[1].ip4)),
-                  (Ether(dst="ff:ff:ff:ff:ff:ff",
-                         src=self.pg2.remote_hosts[1].mac) /
-                   ARP(op=op,
-                       hwdst="ff:ff:ff:ff:ff:ff",
-                       hwsrc=self.pg2.remote_hosts[1].mac,
-                       pdst=self.pg2.remote_hosts[1].ip4,
-                       psrc=self.pg2.remote_hosts[1].ip4))]
+            p1 = [
+                (
+                    Ether(dst="ff:ff:ff:ff:ff:ff", src=self.pg2.remote_hosts[1].mac)
+                    / ARP(
+                        op=op,
+                        hwdst=self.pg2.local_mac,
+                        hwsrc=self.pg2.remote_hosts[1].mac,
+                        pdst=self.pg2.remote_hosts[1].ip4,
+                        psrc=self.pg2.remote_hosts[1].ip4,
+                    )
+                ),
+                (
+                    Ether(dst="ff:ff:ff:ff:ff:ff", src=self.pg2.remote_hosts[1].mac)
+                    / ARP(
+                        op=op,
+                        hwdst="ff:ff:ff:ff:ff:ff",
+                        hwsrc=self.pg2.remote_hosts[1].mac,
+                        pdst=self.pg2.remote_hosts[1].ip4,
+                        psrc=self.pg2.remote_hosts[1].ip4,
+                    )
+                ),
+            ]
 
             self.send_and_assert_no_replies(self.pg1, p1)
 
             self.send_and_assert_no_replies(self.pg1, p1)
-            self.assertFalse(find_nbr(self,
-                                      self.pg1.sw_if_index,
-                                      self.pg2.remote_hosts[1].ip4))
+            self.assertFalse(
+                find_nbr(self, self.pg1.sw_if_index, self.pg2.remote_hosts[1].ip4)
+            )
 
         # they are all dropped because the subnet's don't match
 
         # they are all dropped because the subnet's don't match
-        self.assertEqual(4, self.statistics.get_err_counter(
-            "/err/arp-reply/IP4 destination address not local to subnet"))
+        self.assertEqual(
+            4,
+            self.statistics.get_err_counter(
+                "/err/arp-reply/IP4 destination address not local to subnet"
+            ),
+        )
 
     def test_arp_incomplete2(self):
 
     def test_arp_incomplete2(self):
-        """ Incomplete Entries """
+        """Incomplete Entries"""
 
         #
         # ensure that we throttle the ARP and ND requests
 
         #
         # ensure that we throttle the ARP and ND requests
@@ -1598,17 +1776,20 @@ class ARPTestCase(VppTestCase):
         #
         # IPv4/ARP
         #
         #
         # IPv4/ARP
         #
-        ip_10_0_0_1 = VppIpRoute(self, "10.0.0.1", 32,
-                                 [VppRoutePath(self.pg0.remote_hosts[1].ip4,
-                                               self.pg0.sw_if_index)])
+        ip_10_0_0_1 = VppIpRoute(
+            self,
+            "10.0.0.1",
+            32,
+            [VppRoutePath(self.pg0.remote_hosts[1].ip4, self.pg0.sw_if_index)],
+        )
         ip_10_0_0_1.add_vpp_config()
 
         ip_10_0_0_1.add_vpp_config()
 
-        p1 = (Ether(dst=self.pg1.local_mac,
-                    src=self.pg1.remote_mac) /
-              IP(src=self.pg1.remote_ip4,
-                 dst="10.0.0.1") /
-              UDP(sport=1234, dport=1234) /
-              Raw())
+        p1 = (
+            Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac)
+            / IP(src=self.pg1.remote_ip4, dst="10.0.0.1")
+            / UDP(sport=1234, dport=1234)
+            / Raw()
+        )
 
         self.pg1.add_stream(p1 * 257)
         self.pg_enable_capture(self.pg_interfaces)
 
         self.pg1.add_stream(p1 * 257)
         self.pg_enable_capture(self.pg_interfaces)
@@ -1624,18 +1805,26 @@ class ARPTestCase(VppTestCase):
         #
         # IPv6/ND
         #
         #
         # IPv6/ND
         #
-        ip_10_1 = VppIpRoute(self, "10::1", 128,
-                             [VppRoutePath(self.pg0.remote_hosts[1].ip6,
-                                           self.pg0.sw_if_index,
-                                           proto=DpoProto.DPO_PROTO_IP6)])
+        ip_10_1 = VppIpRoute(
+            self,
+            "10::1",
+            128,
+            [
+                VppRoutePath(
+                    self.pg0.remote_hosts[1].ip6,
+                    self.pg0.sw_if_index,
+                    proto=DpoProto.DPO_PROTO_IP6,
+                )
+            ],
+        )
         ip_10_1.add_vpp_config()
 
         ip_10_1.add_vpp_config()
 
-        p1 = (Ether(dst=self.pg1.local_mac,
-                    src=self.pg1.remote_mac) /
-              IPv6(src=self.pg1.remote_ip6,
-                   dst="10::1") /
-              UDP(sport=1234, dport=1234) /
-              Raw())
+        p1 = (
+            Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac)
+            / IPv6(src=self.pg1.remote_ip6, dst="10::1")
+            / UDP(sport=1234, dport=1234)
+            / Raw()
+        )
 
         self.pg1.add_stream(p1 * 257)
         self.pg_enable_capture(self.pg_interfaces)
 
         self.pg1.add_stream(p1 * 257)
         self.pg_enable_capture(self.pg_interfaces)
@@ -1649,7 +1838,7 @@ class ARPTestCase(VppTestCase):
         self.assertLess(len(rx), 64)
 
     def test_arp_forus(self):
         self.assertLess(len(rx), 64)
 
     def test_arp_forus(self):
-        """ ARP for for-us """
+        """ARP for for-us"""
 
         #
         # Test that VPP responds with ARP requests to addresses that
 
         #
         # Test that VPP responds with ARP requests to addresses that
@@ -1661,27 +1850,36 @@ class ARPTestCase(VppTestCase):
         self.pg0.generate_remote_hosts(2)
 
         forus = VppIpRoute(
         self.pg0.generate_remote_hosts(2)
 
         forus = VppIpRoute(
-            self, self.pg0.remote_hosts[1].ip4, 32,
-            [VppRoutePath("0.0.0.0",
-                          self.pg0.sw_if_index,
-                          type=FibPathType.FIB_PATH_TYPE_LOCAL)])
+            self,
+            self.pg0.remote_hosts[1].ip4,
+            32,
+            [
+                VppRoutePath(
+                    "0.0.0.0",
+                    self.pg0.sw_if_index,
+                    type=FibPathType.FIB_PATH_TYPE_LOCAL,
+                )
+            ],
+        )
         forus.add_vpp_config()
 
         forus.add_vpp_config()
 
-        p = (Ether(dst="ff:ff:ff:ff:ff:ff",
-                   src=self.pg0.remote_mac) /
-             ARP(op="who-has",
-                 hwdst=self.pg0.local_mac,
-                 hwsrc=self.pg0.remote_mac,
-                 pdst=self.pg0.remote_hosts[1].ip4,
-                 psrc=self.pg0.remote_ip4))
+        p = Ether(dst="ff:ff:ff:ff:ff:ff", src=self.pg0.remote_mac) / ARP(
+            op="who-has",
+            hwdst=self.pg0.local_mac,
+            hwsrc=self.pg0.remote_mac,
+            pdst=self.pg0.remote_hosts[1].ip4,
+            psrc=self.pg0.remote_ip4,
+        )
 
         rx = self.send_and_expect(self.pg0, [p], self.pg0)
 
 
         rx = self.send_and_expect(self.pg0, [p], self.pg0)
 
-        self.verify_arp_resp(rx[0],
-                             self.pg0.local_mac,
-                             self.pg0.remote_mac,
-                             self.pg0.remote_hosts[1].ip4,
-                             self.pg0.remote_ip4)
+        self.verify_arp_resp(
+            rx[0],
+            self.pg0.local_mac,
+            self.pg0.remote_mac,
+            self.pg0.remote_hosts[1].ip4,
+            self.pg0.remote_ip4,
+        )
 
     def test_arp_table_swap(self):
         #
 
     def test_arp_table_swap(self):
         #
@@ -1692,15 +1890,21 @@ class ARPTestCase(VppTestCase):
 
         for n in range(N_NBRS):
             # a route thru each neighbour
 
         for n in range(N_NBRS):
             # a route thru each neighbour
-            VppIpRoute(self, "10.0.0.%d" % n, 32,
-                       [VppRoutePath(self.pg1.remote_hosts[n].ip4,
-                                     self.pg1.sw_if_index)]).add_vpp_config()
+            VppIpRoute(
+                self,
+                "10.0.0.%d" % n,
+                32,
+                [VppRoutePath(self.pg1.remote_hosts[n].ip4, self.pg1.sw_if_index)],
+            ).add_vpp_config()
 
             # resolve each neighbour
 
             # resolve each neighbour
-            p1 = (Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac) /
-                  ARP(op="is-at", hwdst=self.pg1.local_mac,
-                      hwsrc="00:00:5e:00:01:09", pdst=self.pg1.local_ip4,
-                      psrc=self.pg1.remote_hosts[n].ip4))
+            p1 = Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac) / ARP(
+                op="is-at",
+                hwdst=self.pg1.local_mac,
+                hwsrc="00:00:5e:00:01:09",
+                pdst=self.pg1.local_ip4,
+                psrc=self.pg1.remote_hosts[n].ip4,
+            )
 
             self.send_and_assert_no_replies(self.pg1, p1, "ARP reply")
 
 
             self.send_and_assert_no_replies(self.pg1, p1, "ARP reply")
 
@@ -1719,87 +1923,80 @@ class ARPTestCase(VppTestCase):
         # all neighbours are cleared
         #
         for n in range(N_NBRS):
         # all neighbours are cleared
         #
         for n in range(N_NBRS):
-            self.assertFalse(find_nbr(self,
-                                      self.pg1.sw_if_index,
-                                      self.pg1.remote_hosts[n].ip4))
+            self.assertFalse(
+                find_nbr(self, self.pg1.sw_if_index, self.pg1.remote_hosts[n].ip4)
+            )
 
         #
         # packets to all neighbours generate ARP requests
         #
         for n in range(N_NBRS):
             # a route thru each neighbour
 
         #
         # packets to all neighbours generate ARP requests
         #
         for n in range(N_NBRS):
             # a route thru each neighbour
-            VppIpRoute(self, "10.0.0.%d" % n, 32,
-                       [VppRoutePath(self.pg1.remote_hosts[n].ip4,
-                                     self.pg1.sw_if_index)],
-                       table_id=100).add_vpp_config()
-
-            p = (Ether(src=self.pg1.remote_hosts[n].mac,
-                       dst=self.pg1.local_mac) /
-                 IP(src=self.pg1.remote_hosts[n].ip4,
-                    dst="10.0.0.%d" % n) /
-                 Raw(b'0x5' * 100))
+            VppIpRoute(
+                self,
+                "10.0.0.%d" % n,
+                32,
+                [VppRoutePath(self.pg1.remote_hosts[n].ip4, self.pg1.sw_if_index)],
+                table_id=100,
+            ).add_vpp_config()
+
+            p = (
+                Ether(src=self.pg1.remote_hosts[n].mac, dst=self.pg1.local_mac)
+                / IP(src=self.pg1.remote_hosts[n].ip4, dst="10.0.0.%d" % n)
+                / Raw(b"0x5" * 100)
+            )
             rxs = self.send_and_expect(self.pg1, [p], self.pg1)
             for rx in rxs:
             rxs = self.send_and_expect(self.pg1, [p], self.pg1)
             for rx in rxs:
-                self.verify_arp_req(rx,
-                                    self.pg1.local_mac,
-                                    self.pg1.local_ip4,
-                                    self.pg1.remote_hosts[n].ip4)
+                self.verify_arp_req(
+                    rx,
+                    self.pg1.local_mac,
+                    self.pg1.local_ip4,
+                    self.pg1.remote_hosts[n].ip4,
+                )
 
         self.pg1.unconfig_ip4()
         self.pg1.set_table_ip4(0)
 
     def test_glean_src_select(self):
 
         self.pg1.unconfig_ip4()
         self.pg1.set_table_ip4(0)
 
     def test_glean_src_select(self):
-        """ Multi Connecteds """
+        """Multi Connecteds"""
 
         #
         # configure multiple connected subnets on an interface
         # and ensure that ARP requests for hosts on those subnets
         # pick up the correct source address
         #
 
         #
         # configure multiple connected subnets on an interface
         # and ensure that ARP requests for hosts on those subnets
         # pick up the correct source address
         #
-        conn1 = VppIpInterfaceAddress(self, self.pg1,
-                                      "10.0.0.1", 24).add_vpp_config()
-        conn2 = VppIpInterfaceAddress(self, self.pg1,
-                                      "10.0.1.1", 24).add_vpp_config()
+        conn1 = VppIpInterfaceAddress(self, self.pg1, "10.0.0.1", 24).add_vpp_config()
+        conn2 = VppIpInterfaceAddress(self, self.pg1, "10.0.1.1", 24).add_vpp_config()
 
 
-        p1 = (Ether(src=self.pg0.remote_mac,
-                    dst=self.pg0.local_mac) /
-              IP(src=self.pg1.remote_ip4,
-                 dst="10.0.0.128") /
-              Raw(b'0x5' * 100))
+        p1 = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg1.remote_ip4, dst="10.0.0.128")
+            / Raw(b"0x5" * 100)
+        )
 
         rxs = self.send_and_expect(self.pg0, [p1], self.pg1)
         for rx in rxs:
 
         rxs = self.send_and_expect(self.pg0, [p1], self.pg1)
         for rx in rxs:
-            self.verify_arp_req(rx,
-                                self.pg1.local_mac,
-                                "10.0.0.1",
-                                "10.0.0.128")
+            self.verify_arp_req(rx, self.pg1.local_mac, "10.0.0.1", "10.0.0.128")
 
 
-        p2 = (Ether(src=self.pg0.remote_mac,
-                    dst=self.pg0.local_mac) /
-              IP(src=self.pg1.remote_ip4,
-                 dst="10.0.1.128") /
-              Raw(b'0x5' * 100))
+        p2 = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg1.remote_ip4, dst="10.0.1.128")
+            / Raw(b"0x5" * 100)
+        )
 
         rxs = self.send_and_expect(self.pg0, [p2], self.pg1)
         for rx in rxs:
 
         rxs = self.send_and_expect(self.pg0, [p2], self.pg1)
         for rx in rxs:
-            self.verify_arp_req(rx,
-                                self.pg1.local_mac,
-                                "10.0.1.1",
-                                "10.0.1.128")
+            self.verify_arp_req(rx, self.pg1.local_mac, "10.0.1.1", "10.0.1.128")
 
         #
         # add a local address in the same subnet
         #  the source addresses are equivalent. VPP happens to
         #  choose the last one that was added
 
         #
         # add a local address in the same subnet
         #  the source addresses are equivalent. VPP happens to
         #  choose the last one that was added
-        conn3 = VppIpInterfaceAddress(self, self.pg1,
-                                      "10.0.1.2", 24).add_vpp_config()
+        conn3 = VppIpInterfaceAddress(self, self.pg1, "10.0.1.2", 24).add_vpp_config()
 
         rxs = self.send_and_expect(self.pg0, [p2], self.pg1)
         for rx in rxs:
 
         rxs = self.send_and_expect(self.pg0, [p2], self.pg1)
         for rx in rxs:
-            self.verify_arp_req(rx,
-                                self.pg1.local_mac,
-                                "10.0.1.2",
-                                "10.0.1.128")
+            self.verify_arp_req(rx, self.pg1.local_mac, "10.0.1.2", "10.0.1.128")
 
         #
         # remove
 
         #
         # remove
@@ -1807,44 +2004,34 @@ class ARPTestCase(VppTestCase):
         conn3.remove_vpp_config()
         rxs = self.send_and_expect(self.pg0, [p2], self.pg1)
         for rx in rxs:
         conn3.remove_vpp_config()
         rxs = self.send_and_expect(self.pg0, [p2], self.pg1)
         for rx in rxs:
-            self.verify_arp_req(rx,
-                                self.pg1.local_mac,
-                                "10.0.1.1",
-                                "10.0.1.128")
+            self.verify_arp_req(rx, self.pg1.local_mac, "10.0.1.1", "10.0.1.128")
 
         #
         # add back, this time remove the first one
         #
 
         #
         # add back, this time remove the first one
         #
-        conn3 = VppIpInterfaceAddress(self, self.pg1,
-                                      "10.0.1.2", 24).add_vpp_config()
+        conn3 = VppIpInterfaceAddress(self, self.pg1, "10.0.1.2", 24).add_vpp_config()
 
         rxs = self.send_and_expect(self.pg0, [p2], self.pg1)
         for rx in rxs:
 
         rxs = self.send_and_expect(self.pg0, [p2], self.pg1)
         for rx in rxs:
-            self.verify_arp_req(rx,
-                                self.pg1.local_mac,
-                                "10.0.1.2",
-                                "10.0.1.128")
+            self.verify_arp_req(rx, self.pg1.local_mac, "10.0.1.2", "10.0.1.128")
 
         conn1.remove_vpp_config()
         rxs = self.send_and_expect(self.pg0, [p2], self.pg1)
         for rx in rxs:
 
         conn1.remove_vpp_config()
         rxs = self.send_and_expect(self.pg0, [p2], self.pg1)
         for rx in rxs:
-            self.verify_arp_req(rx,
-                                self.pg1.local_mac,
-                                "10.0.1.2",
-                                "10.0.1.128")
+            self.verify_arp_req(rx, self.pg1.local_mac, "10.0.1.2", "10.0.1.128")
 
         # apply a connected prefix to an interface in a different table
 
         # apply a connected prefix to an interface in a different table
-        VppIpRoute(self, "10.0.1.0", 24,
-                   [VppRoutePath("0.0.0.0",
-                                 self.pg1.sw_if_index)],
-                   table_id=1).add_vpp_config()
+        VppIpRoute(
+            self,
+            "10.0.1.0",
+            24,
+            [VppRoutePath("0.0.0.0", self.pg1.sw_if_index)],
+            table_id=1,
+        ).add_vpp_config()
 
         rxs = self.send_and_expect(self.pg3, [p2], self.pg1)
         for rx in rxs:
 
         rxs = self.send_and_expect(self.pg3, [p2], self.pg1)
         for rx in rxs:
-            self.verify_arp_req(rx,
-                                self.pg1.local_mac,
-                                "10.0.1.2",
-                                "10.0.1.128")
+            self.verify_arp_req(rx, self.pg1.local_mac, "10.0.1.2", "10.0.1.128")
 
         # cleanup
         conn3.remove_vpp_config()
 
         # cleanup
         conn3.remove_vpp_config()
@@ -1853,7 +2040,7 @@ class ARPTestCase(VppTestCase):
 
 @tag_fixme_vpp_workers
 class NeighborStatsTestCase(VppTestCase):
 
 @tag_fixme_vpp_workers
 class NeighborStatsTestCase(VppTestCase):
-    """ ARP/ND Counters """
+    """ARP/ND Counters"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -1887,86 +2074,94 @@ class NeighborStatsTestCase(VppTestCase):
             i.admin_down()
 
     def test_arp_stats(self):
             i.admin_down()
 
     def test_arp_stats(self):
-        """ ARP Counters """
+        """ARP Counters"""
 
         self.vapi.cli("adj counters enable")
         self.pg1.generate_remote_hosts(2)
 
 
         self.vapi.cli("adj counters enable")
         self.pg1.generate_remote_hosts(2)
 
-        arp1 = VppNeighbor(self,
-                           self.pg1.sw_if_index,
-                           self.pg1.remote_hosts[0].mac,
-                           self.pg1.remote_hosts[0].ip4)
+        arp1 = VppNeighbor(
+            self,
+            self.pg1.sw_if_index,
+            self.pg1.remote_hosts[0].mac,
+            self.pg1.remote_hosts[0].ip4,
+        )
         arp1.add_vpp_config()
         arp1.add_vpp_config()
-        arp2 = VppNeighbor(self,
-                           self.pg1.sw_if_index,
-                           self.pg1.remote_hosts[1].mac,
-                           self.pg1.remote_hosts[1].ip4)
+        arp2 = VppNeighbor(
+            self,
+            self.pg1.sw_if_index,
+            self.pg1.remote_hosts[1].mac,
+            self.pg1.remote_hosts[1].ip4,
+        )
         arp2.add_vpp_config()
 
         arp2.add_vpp_config()
 
-        p1 = (Ether(dst=self.pg0.local_mac,
-                    src=self.pg0.remote_mac) /
-              IP(src=self.pg0.remote_ip4,
-                 dst=self.pg1.remote_hosts[0].ip4) /
-              UDP(sport=1234, dport=1234) /
-              Raw())
-        p2 = (Ether(dst=self.pg0.local_mac,
-                    src=self.pg0.remote_mac) /
-              IP(src=self.pg0.remote_ip4,
-                 dst=self.pg1.remote_hosts[1].ip4) /
-              UDP(sport=1234, dport=1234) /
-              Raw())
+        p1 = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_hosts[0].ip4)
+            / UDP(sport=1234, dport=1234)
+            / Raw()
+        )
+        p2 = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_hosts[1].ip4)
+            / UDP(sport=1234, dport=1234)
+            / Raw()
+        )
 
         rx = self.send_and_expect(self.pg0, p1 * NUM_PKTS, self.pg1)
         rx = self.send_and_expect(self.pg0, p2 * NUM_PKTS, self.pg1)
 
 
         rx = self.send_and_expect(self.pg0, p1 * NUM_PKTS, self.pg1)
         rx = self.send_and_expect(self.pg0, p2 * NUM_PKTS, self.pg1)
 
-        self.assertEqual(NUM_PKTS, arp1.get_stats()['packets'])
-        self.assertEqual(NUM_PKTS, arp2.get_stats()['packets'])
+        self.assertEqual(NUM_PKTS, arp1.get_stats()["packets"])
+        self.assertEqual(NUM_PKTS, arp2.get_stats()["packets"])
 
         rx = self.send_and_expect(self.pg0, p1 * NUM_PKTS, self.pg1)
 
         rx = self.send_and_expect(self.pg0, p1 * NUM_PKTS, self.pg1)
-        self.assertEqual(NUM_PKTS*2, arp1.get_stats()['packets'])
+        self.assertEqual(NUM_PKTS * 2, arp1.get_stats()["packets"])
 
     def test_nd_stats(self):
 
     def test_nd_stats(self):
-        """ ND Counters """
+        """ND Counters"""
 
         self.vapi.cli("adj counters enable")
         self.pg0.generate_remote_hosts(3)
 
 
         self.vapi.cli("adj counters enable")
         self.pg0.generate_remote_hosts(3)
 
-        nd1 = VppNeighbor(self,
-                          self.pg0.sw_if_index,
-                          self.pg0.remote_hosts[1].mac,
-                          self.pg0.remote_hosts[1].ip6)
+        nd1 = VppNeighbor(
+            self,
+            self.pg0.sw_if_index,
+            self.pg0.remote_hosts[1].mac,
+            self.pg0.remote_hosts[1].ip6,
+        )
         nd1.add_vpp_config()
         nd1.add_vpp_config()
-        nd2 = VppNeighbor(self,
-                          self.pg0.sw_if_index,
-                          self.pg0.remote_hosts[2].mac,
-                          self.pg0.remote_hosts[2].ip6)
+        nd2 = VppNeighbor(
+            self,
+            self.pg0.sw_if_index,
+            self.pg0.remote_hosts[2].mac,
+            self.pg0.remote_hosts[2].ip6,
+        )
         nd2.add_vpp_config()
 
         nd2.add_vpp_config()
 
-        p1 = (Ether(dst=self.pg1.local_mac,
-                    src=self.pg1.remote_mac) /
-              IPv6(src=self.pg1.remote_ip6,
-                   dst=self.pg0.remote_hosts[1].ip6) /
-              UDP(sport=1234, dport=1234) /
-              Raw())
-        p2 = (Ether(dst=self.pg1.local_mac,
-                    src=self.pg1.remote_mac) /
-              IPv6(src=self.pg1.remote_ip6,
-                   dst=self.pg0.remote_hosts[2].ip6) /
-              UDP(sport=1234, dport=1234) /
-              Raw())
+        p1 = (
+            Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac)
+            / IPv6(src=self.pg1.remote_ip6, dst=self.pg0.remote_hosts[1].ip6)
+            / UDP(sport=1234, dport=1234)
+            / Raw()
+        )
+        p2 = (
+            Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac)
+            / IPv6(src=self.pg1.remote_ip6, dst=self.pg0.remote_hosts[2].ip6)
+            / UDP(sport=1234, dport=1234)
+            / Raw()
+        )
 
         rx = self.send_and_expect(self.pg1, p1 * 16, self.pg0)
         rx = self.send_and_expect(self.pg1, p2 * 16, self.pg0)
 
 
         rx = self.send_and_expect(self.pg1, p1 * 16, self.pg0)
         rx = self.send_and_expect(self.pg1, p2 * 16, self.pg0)
 
-        self.assertEqual(16, nd1.get_stats()['packets'])
-        self.assertEqual(16, nd2.get_stats()['packets'])
+        self.assertEqual(16, nd1.get_stats()["packets"])
+        self.assertEqual(16, nd2.get_stats()["packets"])
 
         rx = self.send_and_expect(self.pg1, p1 * NUM_PKTS, self.pg0)
 
         rx = self.send_and_expect(self.pg1, p1 * NUM_PKTS, self.pg0)
-        self.assertEqual(NUM_PKTS+16, nd1.get_stats()['packets'])
+        self.assertEqual(NUM_PKTS + 16, nd1.get_stats()["packets"])
 
 
 class NeighborAgeTestCase(VppTestCase):
 
 
 class NeighborAgeTestCase(VppTestCase):
-    """ ARP/ND Aging """
+    """ARP/ND Aging"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -2016,10 +2211,10 @@ class NeighborAgeTestCase(VppTestCase):
         self.assertEqual(arp.pdst, dip)
 
     def test_age(self):
         self.assertEqual(arp.pdst, dip)
 
     def test_age(self):
-        """ Aging/Recycle """
+        """Aging/Recycle"""
 
         self.vapi.cli("set logging unthrottle 0")
 
         self.vapi.cli("set logging unthrottle 0")
-        self.vapi.cli("set logging size %d" % 0xffff)
+        self.vapi.cli("set logging size %d" % 0xFFFF)
 
         self.pg0.generate_remote_hosts(201)
 
 
         self.pg0.generate_remote_hosts(201)
 
@@ -2036,56 +2231,59 @@ class NeighborAgeTestCase(VppTestCase):
         #   age  = 0 seconds
         #   recycle = false
         #
         #   age  = 0 seconds
         #   recycle = false
         #
-        self.vapi.ip_neighbor_config(af=vaf.ADDRESS_IP4,
-                                     max_number=200,
-                                     max_age=0,
-                                     recycle=False)
+        self.vapi.ip_neighbor_config(
+            af=vaf.ADDRESS_IP4, max_number=200, max_age=0, recycle=False
+        )
 
         self.vapi.cli("sh ip neighbor-config")
 
         # add the 198 neighbours that should pass (-1 for one created in setup)
         for ii in range(200):
 
         self.vapi.cli("sh ip neighbor-config")
 
         # add the 198 neighbours that should pass (-1 for one created in setup)
         for ii in range(200):
-            VppNeighbor(self,
-                        self.pg0.sw_if_index,
-                        self.pg0.remote_hosts[ii].mac,
-                        self.pg0.remote_hosts[ii].ip4).add_vpp_config()
+            VppNeighbor(
+                self,
+                self.pg0.sw_if_index,
+                self.pg0.remote_hosts[ii].mac,
+                self.pg0.remote_hosts[ii].ip4,
+            ).add_vpp_config()
 
         # one more neighbor over the limit should fail
         with self.vapi.assert_negative_api_retval():
 
         # one more neighbor over the limit should fail
         with self.vapi.assert_negative_api_retval():
-            VppNeighbor(self,
-                        self.pg0.sw_if_index,
-                        self.pg0.remote_hosts[200].mac,
-                        self.pg0.remote_hosts[200].ip4).add_vpp_config()
+            VppNeighbor(
+                self,
+                self.pg0.sw_if_index,
+                self.pg0.remote_hosts[200].mac,
+                self.pg0.remote_hosts[200].ip4,
+            ).add_vpp_config()
 
         #
         # change the config to allow recycling the old neighbors
         #
 
         #
         # change the config to allow recycling the old neighbors
         #
-        self.vapi.ip_neighbor_config(af=vaf.ADDRESS_IP4,
-                                     max_number=200,
-                                     max_age=0,
-                                     recycle=True)
+        self.vapi.ip_neighbor_config(
+            af=vaf.ADDRESS_IP4, max_number=200, max_age=0, recycle=True
+        )
 
         # now new additions are allowed
 
         # now new additions are allowed
-        VppNeighbor(self,
-                    self.pg0.sw_if_index,
-                    self.pg0.remote_hosts[200].mac,
-                    self.pg0.remote_hosts[200].ip4).add_vpp_config()
+        VppNeighbor(
+            self,
+            self.pg0.sw_if_index,
+            self.pg0.remote_hosts[200].mac,
+            self.pg0.remote_hosts[200].ip4,
+        ).add_vpp_config()
 
         # add the first neighbor we configured has been re-used
 
         # add the first neighbor we configured has been re-used
-        self.assertFalse(find_nbr(self,
-                                  self.pg0.sw_if_index,
-                                  self.pg0.remote_hosts[0].ip4))
-        self.assertTrue(find_nbr(self,
-                                 self.pg0.sw_if_index,
-                                 self.pg0.remote_hosts[200].ip4))
+        self.assertFalse(
+            find_nbr(self, self.pg0.sw_if_index, self.pg0.remote_hosts[0].ip4)
+        )
+        self.assertTrue(
+            find_nbr(self, self.pg0.sw_if_index, self.pg0.remote_hosts[200].ip4)
+        )
 
         #
         # change the config to age old neighbors
         #
 
         #
         # change the config to age old neighbors
         #
-        self.vapi.ip_neighbor_config(af=vaf.ADDRESS_IP4,
-                                     max_number=200,
-                                     max_age=2,
-                                     recycle=True)
+        self.vapi.ip_neighbor_config(
+            af=vaf.ADDRESS_IP4, max_number=200, max_age=2, recycle=True
+        )
 
         self.vapi.cli("sh ip4 neighbor-sorted")
 
 
         self.vapi.cli("sh ip4 neighbor-sorted")
 
@@ -2099,7 +2297,7 @@ class NeighborAgeTestCase(VppTestCase):
 
         for ii in range(3):
             for jj in range(200):
 
         for ii in range(3):
             for jj in range(200):
-                rx = rxs[ii*200 + jj]
+                rx = rxs[ii * 200 + jj]
                 # rx.show()
 
         #
                 # rx.show()
 
         #
@@ -2108,8 +2306,9 @@ class NeighborAgeTestCase(VppTestCase):
         #
         self.virtual_sleep(1)
 
         #
         self.virtual_sleep(1)
 
-        self.assertFalse(self.vapi.ip_neighbor_dump(sw_if_index=0xffffffff,
-                                                    af=vaf.ADDRESS_IP4))
+        self.assertFalse(
+            self.vapi.ip_neighbor_dump(sw_if_index=0xFFFFFFFF, af=vaf.ADDRESS_IP4)
+        )
 
         #
         # load up some neighbours again with 2s aging enabled
 
         #
         # load up some neighbours again with 2s aging enabled
@@ -2120,28 +2319,27 @@ class NeighborAgeTestCase(VppTestCase):
 
         self.vapi.want_ip_neighbor_events_v2(enable=1)
         for ii in range(10):
 
         self.vapi.want_ip_neighbor_events_v2(enable=1)
         for ii in range(10):
-            VppNeighbor(self,
-                        self.pg0.sw_if_index,
-                        self.pg0.remote_hosts[ii].mac,
-                        self.pg0.remote_hosts[ii].ip4).add_vpp_config()
+            VppNeighbor(
+                self,
+                self.pg0.sw_if_index,
+                self.pg0.remote_hosts[ii].mac,
+                self.pg0.remote_hosts[ii].ip4,
+            ).add_vpp_config()
 
             e = self.vapi.wait_for_event(1, "ip_neighbor_event_v2")
 
             e = self.vapi.wait_for_event(1, "ip_neighbor_event_v2")
-            self.assertEqual(e.flags,
-                             enum.IP_NEIGHBOR_API_EVENT_FLAG_ADDED)
-            self.assertEqual(str(e.neighbor.ip_address),
-                             self.pg0.remote_hosts[ii].ip4)
-            self.assertEqual(e.neighbor.mac_address,
-                             self.pg0.remote_hosts[ii].mac)
+            self.assertEqual(e.flags, enum.IP_NEIGHBOR_API_EVENT_FLAG_ADDED)
+            self.assertEqual(str(e.neighbor.ip_address), self.pg0.remote_hosts[ii].ip4)
+            self.assertEqual(e.neighbor.mac_address, self.pg0.remote_hosts[ii].mac)
 
         self.virtual_sleep(10)
 
         self.virtual_sleep(10)
-        self.assertFalse(self.vapi.ip_neighbor_dump(sw_if_index=0xffffffff,
-                                                    af=vaf.ADDRESS_IP4))
+        self.assertFalse(
+            self.vapi.ip_neighbor_dump(sw_if_index=0xFFFFFFFF, af=vaf.ADDRESS_IP4)
+        )
 
         evs = []
         for ii in range(10):
             e = self.vapi.wait_for_event(1, "ip_neighbor_event_v2")
 
         evs = []
         for ii in range(10):
             e = self.vapi.wait_for_event(1, "ip_neighbor_event_v2")
-            self.assertEqual(e.flags,
-                             enum.IP_NEIGHBOR_API_EVENT_FLAG_REMOVED)
+            self.assertEqual(e.flags, enum.IP_NEIGHBOR_API_EVENT_FLAG_REMOVED)
             evs.append(e)
 
         # check we got the correct mac/ip pairs - done separately
             evs.append(e)
 
         # check we got the correct mac/ip pairs - done separately
@@ -2153,8 +2351,7 @@ class NeighborAgeTestCase(VppTestCase):
             ip = self.pg0.remote_hosts[ii].ip4
 
             for e in evs:
             ip = self.pg0.remote_hosts[ii].ip4
 
             for e in evs:
-                if (e.neighbor.mac_address == mac and
-                   str(e.neighbor.ip_address) == ip):
+                if e.neighbor.mac_address == mac and str(e.neighbor.ip_address) == ip:
                     found = True
                     break
             self.assertTrue(found)
                     found = True
                     break
             self.assertTrue(found)
@@ -2162,33 +2359,33 @@ class NeighborAgeTestCase(VppTestCase):
         #
         # check if we can set age and recycle with empty neighbor list
         #
         #
         # check if we can set age and recycle with empty neighbor list
         #
-        self.vapi.ip_neighbor_config(af=vaf.ADDRESS_IP4,
-                                     max_number=200,
-                                     max_age=1000,
-                                     recycle=True)
+        self.vapi.ip_neighbor_config(
+            af=vaf.ADDRESS_IP4, max_number=200, max_age=1000, recycle=True
+        )
 
         #
         # load up some neighbours again, then disable the aging
         # they should still be there in 10 seconds time
         #
         for ii in range(10):
 
         #
         # load up some neighbours again, then disable the aging
         # they should still be there in 10 seconds time
         #
         for ii in range(10):
-            VppNeighbor(self,
-                        self.pg0.sw_if_index,
-                        self.pg0.remote_hosts[ii].mac,
-                        self.pg0.remote_hosts[ii].ip4).add_vpp_config()
-        self.vapi.ip_neighbor_config(af=vaf.ADDRESS_IP4,
-                                     max_number=200,
-                                     max_age=0,
-                                     recycle=False)
+            VppNeighbor(
+                self,
+                self.pg0.sw_if_index,
+                self.pg0.remote_hosts[ii].mac,
+                self.pg0.remote_hosts[ii].ip4,
+            ).add_vpp_config()
+        self.vapi.ip_neighbor_config(
+            af=vaf.ADDRESS_IP4, max_number=200, max_age=0, recycle=False
+        )
 
         self.virtual_sleep(10)
 
         self.virtual_sleep(10)
-        self.assertTrue(find_nbr(self,
-                                 self.pg0.sw_if_index,
-                                 self.pg0.remote_hosts[0].ip4))
+        self.assertTrue(
+            find_nbr(self, self.pg0.sw_if_index, self.pg0.remote_hosts[0].ip4)
+        )
 
 
 class NeighborReplaceTestCase(VppTestCase):
 
 
 class NeighborReplaceTestCase(VppTestCase):
-    """ ARP/ND Replacement """
+    """ARP/ND Replacement"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -2222,7 +2419,7 @@ class NeighborReplaceTestCase(VppTestCase):
             i.admin_down()
 
     def test_replace(self):
             i.admin_down()
 
     def test_replace(self):
-        """ replace """
+        """replace"""
 
         N_HOSTS = 16
 
 
         N_HOSTS = 16
 
@@ -2237,26 +2434,24 @@ class NeighborReplaceTestCase(VppTestCase):
 
         for i in self.pg_interfaces:
             for h in range(N_HOSTS):
 
         for i in self.pg_interfaces:
             for h in range(N_HOSTS):
-                self.assertFalse(find_nbr(self,
-                                          self.pg0.sw_if_index,
-                                          self.pg0.remote_hosts[h].ip4))
-                self.assertFalse(find_nbr(self,
-                                          self.pg0.sw_if_index,
-                                          self.pg0.remote_hosts[h].ip6))
+                self.assertFalse(
+                    find_nbr(self, self.pg0.sw_if_index, self.pg0.remote_hosts[h].ip4)
+                )
+                self.assertFalse(
+                    find_nbr(self, self.pg0.sw_if_index, self.pg0.remote_hosts[h].ip6)
+                )
 
         #
         # and them all back via the API
         #
         for i in self.pg_interfaces:
             for h in range(N_HOSTS):
 
         #
         # and them all back via the API
         #
         for i in self.pg_interfaces:
             for h in range(N_HOSTS):
-                VppNeighbor(self,
-                            i.sw_if_index,
-                            i.remote_hosts[h].mac,
-                            i.remote_hosts[h].ip4).add_vpp_config()
-                VppNeighbor(self,
-                            i.sw_if_index,
-                            i.remote_hosts[h].mac,
-                            i.remote_hosts[h].ip6).add_vpp_config()
+                VppNeighbor(
+                    self, i.sw_if_index, i.remote_hosts[h].mac, i.remote_hosts[h].ip4
+                ).add_vpp_config()
+                VppNeighbor(
+                    self, i.sw_if_index, i.remote_hosts[h].mac, i.remote_hosts[h].ip6
+                ).add_vpp_config()
 
         #
         # begin the replacement again, this time touch some
 
         #
         # begin the replacement again, this time touch some
@@ -2266,14 +2461,18 @@ class NeighborReplaceTestCase(VppTestCase):
 
         # update from the API all neighbours on pg1
         for h in range(N_HOSTS):
 
         # update from the API all neighbours on pg1
         for h in range(N_HOSTS):
-            VppNeighbor(self,
-                        self.pg1.sw_if_index,
-                        self.pg1.remote_hosts[h].mac,
-                        self.pg1.remote_hosts[h].ip4).add_vpp_config()
-            VppNeighbor(self,
-                        self.pg1.sw_if_index,
-                        self.pg1.remote_hosts[h].mac,
-                        self.pg1.remote_hosts[h].ip6).add_vpp_config()
+            VppNeighbor(
+                self,
+                self.pg1.sw_if_index,
+                self.pg1.remote_hosts[h].mac,
+                self.pg1.remote_hosts[h].ip4,
+            ).add_vpp_config()
+            VppNeighbor(
+                self,
+                self.pg1.sw_if_index,
+                self.pg1.remote_hosts[h].mac,
+                self.pg1.remote_hosts[h].ip6,
+            ).add_vpp_config()
 
         # update from the data-plane all neighbours on pg3
         self.pg3.configure_ipv4_neighbors()
 
         # update from the data-plane all neighbours on pg3
         self.pg3.configure_ipv4_neighbors()
@@ -2287,25 +2486,25 @@ class NeighborReplaceTestCase(VppTestCase):
             if i == self.pg1 or i == self.pg3:
                 # neighbours on pg1 and pg3 are still present
                 for h in range(N_HOSTS):
             if i == self.pg1 or i == self.pg3:
                 # neighbours on pg1 and pg3 are still present
                 for h in range(N_HOSTS):
-                    self.assertTrue(find_nbr(self,
-                                             i.sw_if_index,
-                                             i.remote_hosts[h].ip4))
-                    self.assertTrue(find_nbr(self,
-                                             i.sw_if_index,
-                                             i.remote_hosts[h].ip6))
+                    self.assertTrue(
+                        find_nbr(self, i.sw_if_index, i.remote_hosts[h].ip4)
+                    )
+                    self.assertTrue(
+                        find_nbr(self, i.sw_if_index, i.remote_hosts[h].ip6)
+                    )
             else:
                 # all other neighbours are toast
                 for h in range(N_HOSTS):
             else:
                 # all other neighbours are toast
                 for h in range(N_HOSTS):
-                    self.assertFalse(find_nbr(self,
-                                              i.sw_if_index,
-                                              i.remote_hosts[h].ip4))
-                    self.assertFalse(find_nbr(self,
-                                              i.sw_if_index,
-                                              i.remote_hosts[h].ip6))
+                    self.assertFalse(
+                        find_nbr(self, i.sw_if_index, i.remote_hosts[h].ip4)
+                    )
+                    self.assertFalse(
+                        find_nbr(self, i.sw_if_index, i.remote_hosts[h].ip6)
+                    )
 
 
 class NeighborFlush(VppTestCase):
 
 
 class NeighborFlush(VppTestCase):
-    """ Neighbor Flush """
+    """Neighbor Flush"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -2336,7 +2535,7 @@ class NeighborFlush(VppTestCase):
             i.admin_down()
 
     def test_flush(self):
             i.admin_down()
 
     def test_flush(self):
-        """ Neighbour Flush """
+        """Neighbour Flush"""
 
         e = VppEnum
         nf = e.vl_api_ip_neighbor_flags_t
 
         e = VppEnum
         nf = e.vl_api_ip_neighbor_flags_t
@@ -2349,72 +2548,88 @@ class NeighborFlush(VppTestCase):
         for s in static:
             # a few v4 and v6 dynamic neoghbors
             for n in range(N_HOSTS):
         for s in static:
             # a few v4 and v6 dynamic neoghbors
             for n in range(N_HOSTS):
-                VppNeighbor(self,
-                            self.pg0.sw_if_index,
-                            self.pg0.remote_hosts[n].mac,
-                            self.pg0.remote_hosts[n].ip4,
-                            is_static=s).add_vpp_config()
-                VppNeighbor(self,
-                            self.pg1.sw_if_index,
-                            self.pg1.remote_hosts[n].mac,
-                            self.pg1.remote_hosts[n].ip6,
-                            is_static=s).add_vpp_config()
+                VppNeighbor(
+                    self,
+                    self.pg0.sw_if_index,
+                    self.pg0.remote_hosts[n].mac,
+                    self.pg0.remote_hosts[n].ip4,
+                    is_static=s,
+                ).add_vpp_config()
+                VppNeighbor(
+                    self,
+                    self.pg1.sw_if_index,
+                    self.pg1.remote_hosts[n].mac,
+                    self.pg1.remote_hosts[n].ip6,
+                    is_static=s,
+                ).add_vpp_config()
 
             # flush the interfaces individually
             self.vapi.ip_neighbor_flush(af.ADDRESS_IP4, self.pg0.sw_if_index)
 
             # check we haven't flushed that which we shouldn't
             for n in range(N_HOSTS):
 
             # flush the interfaces individually
             self.vapi.ip_neighbor_flush(af.ADDRESS_IP4, self.pg0.sw_if_index)
 
             # check we haven't flushed that which we shouldn't
             for n in range(N_HOSTS):
-                self.assertTrue(find_nbr(self,
-                                         self.pg1.sw_if_index,
-                                         self.pg1.remote_hosts[n].ip6,
-                                         is_static=s))
+                self.assertTrue(
+                    find_nbr(
+                        self,
+                        self.pg1.sw_if_index,
+                        self.pg1.remote_hosts[n].ip6,
+                        is_static=s,
+                    )
+                )
 
             self.vapi.ip_neighbor_flush(af.ADDRESS_IP6, self.pg1.sw_if_index)
 
             for n in range(N_HOSTS):
 
             self.vapi.ip_neighbor_flush(af.ADDRESS_IP6, self.pg1.sw_if_index)
 
             for n in range(N_HOSTS):
-                self.assertFalse(find_nbr(self,
-                                          self.pg0.sw_if_index,
-                                          self.pg0.remote_hosts[n].ip4))
-                self.assertFalse(find_nbr(self,
-                                          self.pg1.sw_if_index,
-                                          self.pg1.remote_hosts[n].ip6))
+                self.assertFalse(
+                    find_nbr(self, self.pg0.sw_if_index, self.pg0.remote_hosts[n].ip4)
+                )
+                self.assertFalse(
+                    find_nbr(self, self.pg1.sw_if_index, self.pg1.remote_hosts[n].ip6)
+                )
 
             # add the nieghbours back
             for n in range(N_HOSTS):
 
             # add the nieghbours back
             for n in range(N_HOSTS):
-                VppNeighbor(self,
-                            self.pg0.sw_if_index,
-                            self.pg0.remote_hosts[n].mac,
-                            self.pg0.remote_hosts[n].ip4,
-                            is_static=s).add_vpp_config()
-                VppNeighbor(self,
-                            self.pg1.sw_if_index,
-                            self.pg1.remote_hosts[n].mac,
-                            self.pg1.remote_hosts[n].ip6,
-                            is_static=s).add_vpp_config()
+                VppNeighbor(
+                    self,
+                    self.pg0.sw_if_index,
+                    self.pg0.remote_hosts[n].mac,
+                    self.pg0.remote_hosts[n].ip4,
+                    is_static=s,
+                ).add_vpp_config()
+                VppNeighbor(
+                    self,
+                    self.pg1.sw_if_index,
+                    self.pg1.remote_hosts[n].mac,
+                    self.pg1.remote_hosts[n].ip6,
+                    is_static=s,
+                ).add_vpp_config()
 
             self.logger.info(self.vapi.cli("sh ip neighbor"))
 
             # flush both interfaces at the same time
 
             self.logger.info(self.vapi.cli("sh ip neighbor"))
 
             # flush both interfaces at the same time
-            self.vapi.ip_neighbor_flush(af.ADDRESS_IP6, 0xffffffff)
+            self.vapi.ip_neighbor_flush(af.ADDRESS_IP6, 0xFFFFFFFF)
 
             # check we haven't flushed that which we shouldn't
             for n in range(N_HOSTS):
 
             # check we haven't flushed that which we shouldn't
             for n in range(N_HOSTS):
-                self.assertTrue(find_nbr(self,
-                                         self.pg0.sw_if_index,
-                                         self.pg0.remote_hosts[n].ip4,
-                                         is_static=s))
+                self.assertTrue(
+                    find_nbr(
+                        self,
+                        self.pg0.sw_if_index,
+                        self.pg0.remote_hosts[n].ip4,
+                        is_static=s,
+                    )
+                )
 
 
-            self.vapi.ip_neighbor_flush(af.ADDRESS_IP4, 0xffffffff)
+            self.vapi.ip_neighbor_flush(af.ADDRESS_IP4, 0xFFFFFFFF)
 
             for n in range(N_HOSTS):
 
             for n in range(N_HOSTS):
-                self.assertFalse(find_nbr(self,
-                                          self.pg0.sw_if_index,
-                                          self.pg0.remote_hosts[n].ip4))
-                self.assertFalse(find_nbr(self,
-                                          self.pg1.sw_if_index,
-                                          self.pg1.remote_hosts[n].ip6))
+                self.assertFalse(
+                    find_nbr(self, self.pg0.sw_if_index, self.pg0.remote_hosts[n].ip4)
+                )
+                self.assertFalse(
+                    find_nbr(self, self.pg1.sw_if_index, self.pg1.remote_hosts[n].ip6)
+                )
 
 
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index 3632910..a5c9137 100644 (file)
@@ -13,15 +13,14 @@ def skipVariant(variant):
     with open("/proc/cpuinfo") as f:
         cpuinfo = f.read()
 
     with open("/proc/cpuinfo") as f:
         cpuinfo = f.read()
 
-    exp = re.compile(
-        r'(?:flags\s+:)(?:\s\w+)+(?:\s(' + variant + r'))(?:\s\w+)+')
+    exp = re.compile(r"(?:flags\s+:)(?:\s\w+)+(?:\s(" + variant + r"))(?:\s\w+)+")
     match = exp.search(cpuinfo, re.DOTALL | re.MULTILINE)
 
     return checkX86() and match is not None
 
 
 class TestNodeVariant(VppTestCase):
     match = exp.search(cpuinfo, re.DOTALL | re.MULTILINE)
 
     return checkX86() and match is not None
 
 
 class TestNodeVariant(VppTestCase):
-    """ Test Node Variants """
+    """Test Node Variants"""
 
     @classmethod
     def setUpConstants(cls, variant):
 
     @classmethod
     def setUpConstants(cls, variant):
@@ -30,9 +29,10 @@ class TestNodeVariant(VppTestCase):
 
         if checkX86():
             node_variants = cls.vpp_cmdline.index("node { ") + 1
 
         if checkX86():
             node_variants = cls.vpp_cmdline.index("node { ") + 1
-            cls.vpp_cmdline[node_variants] = ("default { variant default } "
-                                              "ip4-rewrite { variant " +
-                                              variant + " } ")
+            cls.vpp_cmdline[node_variants] = (
+                "default { variant default } "
+                "ip4-rewrite { variant " + variant + " } "
+            )
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -52,13 +52,14 @@ class TestNodeVariant(VppTestCase):
         node_desc = self.vapi.cli("show node " + node)
         self.logger.info(node_desc)
 
         node_desc = self.vapi.cli("show node " + node)
         self.logger.info(node_desc)
 
-        match = re.search(r'\s+(\S+)\s+(\d+)\s+(:?yes)',
-                          node_desc, re.DOTALL | re.MULTILINE)
+        match = re.search(
+            r"\s+(\S+)\s+(\d+)\s+(:?yes)", node_desc, re.DOTALL | re.MULTILINE
+        )
 
         return match.groups(0)
 
     def checkVariant(self, variant):
 
         return match.groups(0)
 
     def checkVariant(self, variant):
-        """ Test node variants defaults """
+        """Test node variants defaults"""
 
         variant_info = self.getActiveVariant("ip4-lookup")
         self.assertEqual(variant_info[0], "default")
 
         variant_info = self.getActiveVariant("ip4-lookup")
         self.assertEqual(variant_info[0], "default")
@@ -68,7 +69,7 @@ class TestNodeVariant(VppTestCase):
 
 
 class TestICLVariant(TestNodeVariant):
 
 
 class TestICLVariant(TestNodeVariant):
-    """ Test icl Node Variants """
+    """Test icl Node Variants"""
 
     VARIANT = "icl"
     LINUX_VARIANT = "avx512_bitalg"
 
     VARIANT = "icl"
     LINUX_VARIANT = "avx512_bitalg"
@@ -85,14 +86,15 @@ class TestICLVariant(TestNodeVariant):
     def tearDownClass(cls):
         super(TestICLVariant, cls).tearDownClass()
 
     def tearDownClass(cls):
         super(TestICLVariant, cls).tearDownClass()
 
-    @unittest.skipUnless(skipVariant(LINUX_VARIANT),
-                         VARIANT + " not a supported variant, skip.")
+    @unittest.skipUnless(
+        skipVariant(LINUX_VARIANT), VARIANT + " not a supported variant, skip."
+    )
     def test_icl(self):
         self.checkVariant(self.VARIANT)
 
 
 class TestSKXVariant(TestNodeVariant):
     def test_icl(self):
         self.checkVariant(self.VARIANT)
 
 
 class TestSKXVariant(TestNodeVariant):
-    """ Test skx Node Variants """
+    """Test skx Node Variants"""
 
     VARIANT = "skx"
     LINUX_VARIANT = "avx512f"
 
     VARIANT = "skx"
     LINUX_VARIANT = "avx512f"
@@ -109,14 +111,15 @@ class TestSKXVariant(TestNodeVariant):
     def tearDownClass(cls):
         super(TestSKXVariant, cls).tearDownClass()
 
     def tearDownClass(cls):
         super(TestSKXVariant, cls).tearDownClass()
 
-    @unittest.skipUnless(skipVariant(LINUX_VARIANT),
-                         VARIANT + " not a supported variant, skip.")
+    @unittest.skipUnless(
+        skipVariant(LINUX_VARIANT), VARIANT + " not a supported variant, skip."
+    )
     def test_skx(self):
         self.checkVariant(self.VARIANT)
 
 
 class TestHSWVariant(TestNodeVariant):
     def test_skx(self):
         self.checkVariant(self.VARIANT)
 
 
 class TestHSWVariant(TestNodeVariant):
-    """ Test avx2 Node Variants """
+    """Test avx2 Node Variants"""
 
     VARIANT = "hsw"
     LINUX_VARIANT = "avx2"
 
     VARIANT = "hsw"
     LINUX_VARIANT = "avx2"
@@ -133,7 +136,8 @@ class TestHSWVariant(TestNodeVariant):
     def tearDownClass(cls):
         super(TestHSWVariant, cls).tearDownClass()
 
     def tearDownClass(cls):
         super(TestHSWVariant, cls).tearDownClass()
 
-    @unittest.skipUnless(skipVariant(LINUX_VARIANT),
-                         VARIANT + " not a supported variant, skip.")
+    @unittest.skipUnless(
+        skipVariant(LINUX_VARIANT), VARIANT + " not a supported variant, skip."
+    )
     def test_hsw(self):
         self.checkVariant(self.VARIANT)
     def test_hsw(self):
         self.checkVariant(self.VARIANT)
index ae5a5b3..d84f8ba 100644 (file)
@@ -7,7 +7,7 @@ from vpp_ip_route import VppIpTable, VppIpRoute, VppRoutePath
 
 
 class TestOffload(VppTestCase):
 
 
 class TestOffload(VppTestCase):
-    """ Offload Unit Test Cases """
+    """Offload Unit Test Cases"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -24,52 +24,55 @@ class TestOffload(VppTestCase):
         super(TestOffload, self).tearDown()
 
     def test_offload_unittest(self):
         super(TestOffload, self).tearDown()
 
     def test_offload_unittest(self):
-        """ Checksum Offload Test """
-        cmds = ["loop create",
-                "set int ip address loop0 11.22.33.1/24",
-                "set int state loop0 up",
-                "loop create",
-                "set int ip address loop1 11.22.34.1/24",
-                "set int state loop1 up",
-                "set ip neighbor loop1 11.22.34.44 03:00:11:22:34:44",
-                "packet-generator new {\n"
-                "  name s0\n"
-                "  limit 100\n"
-                "  size 128-128\n"
-                "  interface loop0\n"
-                "  tx-interface loop1\n"
-                "  node loop1-output\n"
-                "  buffer-flags ip4 offload\n"
-                "  buffer-offload-flags offload-ip-cksum offload-udp-cksum\n"
-                "  data {\n"
-                "    IP4: 1.2.3 -> dead.0000.0001\n"
-                "    UDP: 11.22.33.44 -> 11.22.34.44\n"
-                "      ttl 2 checksum 13\n"
-                "    UDP: 1234 -> 2345\n"
-                "      checksum 11\n"
-                "    incrementing 114\n"
-                "  }\n"
-                "}",
-                "trace add pg-input 1",
-                "pa en",
-                "show error"]
+        """Checksum Offload Test"""
+        cmds = [
+            "loop create",
+            "set int ip address loop0 11.22.33.1/24",
+            "set int state loop0 up",
+            "loop create",
+            "set int ip address loop1 11.22.34.1/24",
+            "set int state loop1 up",
+            "set ip neighbor loop1 11.22.34.44 03:00:11:22:34:44",
+            "packet-generator new {\n"
+            "  name s0\n"
+            "  limit 100\n"
+            "  size 128-128\n"
+            "  interface loop0\n"
+            "  tx-interface loop1\n"
+            "  node loop1-output\n"
+            "  buffer-flags ip4 offload\n"
+            "  buffer-offload-flags offload-ip-cksum offload-udp-cksum\n"
+            "  data {\n"
+            "    IP4: 1.2.3 -> dead.0000.0001\n"
+            "    UDP: 11.22.33.44 -> 11.22.34.44\n"
+            "      ttl 2 checksum 13\n"
+            "    UDP: 1234 -> 2345\n"
+            "      checksum 11\n"
+            "    incrementing 114\n"
+            "  }\n"
+            "}",
+            "trace add pg-input 1",
+            "pa en",
+            "show error",
+        ]
 
         for cmd in cmds:
             r = self.vapi.cli_return_response(cmd)
             if r.retval != 0:
 
         for cmd in cmds:
             r = self.vapi.cli_return_response(cmd)
             if r.retval != 0:
-                if hasattr(r, 'reply'):
+                if hasattr(r, "reply"):
                     self.logger.info(cmd + " FAIL reply " + r.reply)
                 else:
                     self.logger.info(cmd + " FAIL retval " + str(r.retval))
 
         r = self.vapi.cli_return_response("show trace")
         self.assertTrue(r.retval == 0)
                     self.logger.info(cmd + " FAIL reply " + r.reply)
                 else:
                     self.logger.info(cmd + " FAIL retval " + str(r.retval))
 
         r = self.vapi.cli_return_response("show trace")
         self.assertTrue(r.retval == 0)
-        self.assertTrue(hasattr(r, 'reply'))
+        self.assertTrue(hasattr(r, "reply"))
         rv = r.reply
         rv = r.reply
-        look_here = rv.find('ethernet-input')
+        look_here = rv.find("ethernet-input")
         self.assertFalse(look_here == -1)
         self.assertFalse(look_here == -1)
-        bad_checksum_index = rv[look_here:].find('should be')
+        bad_checksum_index = rv[look_here:].find("should be")
         self.assertTrue(bad_checksum_index == -1)
 
         self.assertTrue(bad_checksum_index == -1)
 
-if __name__ == '__main__':
+
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index fb55a36..97cd7b4 100644 (file)
@@ -41,8 +41,7 @@ class P2PEthernetAPI(VppTestCase):
         self.p2p_sub_ifs.append(p2p)
 
     def delete_p2p_ethernet(self, parent_if, remote_mac):
         self.p2p_sub_ifs.append(p2p)
 
     def delete_p2p_ethernet(self, parent_if, remote_mac):
-        self.vapi.p2p_ethernet_del(parent_if.sw_if_index,
-                                   mac_pton(remote_mac))
+        self.vapi.p2p_ethernet_del(parent_if.sw_if_index, mac_pton(remote_mac))
 
     def test_api(self):
         """delete/create p2p subif"""
 
     def test_api(self):
         """delete/create p2p subif"""
@@ -52,22 +51,22 @@ class P2PEthernetAPI(VppTestCase):
         self.create_p2p_ethernet(self.pg0, 2, "de:ad:00:00:00:02")
         intfs = self.vapi.cli("show interface")
 
         self.create_p2p_ethernet(self.pg0, 2, "de:ad:00:00:00:02")
         intfs = self.vapi.cli("show interface")
 
-        self.assertIn('pg0.1', intfs)
-        self.assertIn('pg0.2', intfs)
-        self.assertNotIn('pg0.5', intfs)
+        self.assertIn("pg0.1", intfs)
+        self.assertIn("pg0.2", intfs)
+        self.assertNotIn("pg0.5", intfs)
 
         # create pg2.5 subif
         self.create_p2p_ethernet(self.pg0, 5, "de:ad:00:00:00:ff")
         intfs = self.vapi.cli("show interface")
 
         # create pg2.5 subif
         self.create_p2p_ethernet(self.pg0, 5, "de:ad:00:00:00:ff")
         intfs = self.vapi.cli("show interface")
-        self.assertIn('pg0.5', intfs)
+        self.assertIn("pg0.5", intfs)
         # delete pg2.5 subif
         self.delete_p2p_ethernet(self.pg0, "de:ad:00:00:00:ff")
 
         intfs = self.vapi.cli("show interface")
 
         # delete pg2.5 subif
         self.delete_p2p_ethernet(self.pg0, "de:ad:00:00:00:ff")
 
         intfs = self.vapi.cli("show interface")
 
-        self.assertIn('pg0.1', intfs)
-        self.assertIn('pg0.2', intfs)
-        self.assertNotIn('pg0.5', intfs)
+        self.assertIn("pg0.1", intfs)
+        self.assertIn("pg0.2", intfs)
+        self.assertNotIn("pg0.5", intfs)
 
         self.logger.info("FFP_TEST_FINISH_0000")
 
 
         self.logger.info("FFP_TEST_FINISH_0000")
 
@@ -79,22 +78,20 @@ class P2PEthernetAPI(VppTestCase):
         clients = 1000
         mac = int("dead00000000", 16)
 
         clients = 1000
         mac = int("dead00000000", 16)
 
-        for i in range(1, clients+1):
+        for i in range(1, clients + 1):
             try:
             try:
-                macs.append(':'.join(re.findall('..', '{:02x}'.format(
-                    mac+i))))
-                self.vapi.p2p_ethernet_add(self.pg2.sw_if_index,
-                                           mac_pton(macs[i-1]),
-                                           i)
+                macs.append(":".join(re.findall("..", "{:02x}".format(mac + i))))
+                self.vapi.p2p_ethernet_add(
+                    self.pg2.sw_if_index, mac_pton(macs[i - 1]), i
+                )
             except Exception:
             except Exception:
-                self.logger.info("Failed to create subif %d %s" % (
-                    i, macs[i-1]))
+                self.logger.info("Failed to create subif %d %s" % (i, macs[i - 1]))
                 raise
 
         intfs = self.vapi.cli("show interface").split("\n")
         count = 0
         for intf in intfs:
                 raise
 
         intfs = self.vapi.cli("show interface").split("\n")
         count = 0
         for intf in intfs:
-            if intf.startswith('pg2.'):
+            if intf.startswith("pg2."):
                 count += 1
         self.assertEqual(count, clients)
 
                 count += 1
         self.assertEqual(count, clients)
 
@@ -138,11 +135,11 @@ class P2PEthernetIPV6(VppTestCase):
         for p in self.packets:
             self.packets.remove(p)
         self.p2p_sub_ifs.append(
         for p in self.packets:
             self.packets.remove(p)
         self.p2p_sub_ifs.append(
-            self.create_p2p_ethernet(self.pg0, 1,
-                                     self.pg0._remote_hosts[0].mac))
+            self.create_p2p_ethernet(self.pg0, 1, self.pg0._remote_hosts[0].mac)
+        )
         self.p2p_sub_ifs.append(
         self.p2p_sub_ifs.append(
-            self.create_p2p_ethernet(self.pg0, 2,
-                                     self.pg0._remote_hosts[1].mac))
+            self.create_p2p_ethernet(self.pg0, 2, self.pg0._remote_hosts[1].mac)
+        )
         self.vapi.cli("trace add p2p-ethernet-input 50")
 
     def tearDown(self):
         self.vapi.cli("trace add p2p-ethernet-input 50")
 
     def tearDown(self):
@@ -162,17 +159,17 @@ class P2PEthernetIPV6(VppTestCase):
     def delete_p2p_ethernet(self, p2p):
         p2p.unconfig_ip6()
         p2p.admin_down()
     def delete_p2p_ethernet(self, p2p):
         p2p.unconfig_ip6()
         p2p.admin_down()
-        self.vapi.p2p_ethernet_del(p2p.parent.sw_if_index,
-                                   p2p.p2p_remote_mac)
+        self.vapi.p2p_ethernet_del(p2p.parent.sw_if_index, p2p.p2p_remote_mac)
 
 
-    def create_stream(self, src_mac=None, dst_mac=None,
-                      src_ip=None, dst_ip=None, size=None):
+    def create_stream(
+        self, src_mac=None, dst_mac=None, src_ip=None, dst_ip=None, size=None
+    ):
         pkt_size = size
         if size is None:
             pkt_size = random.choice(self.pg_if_packet_sizes)
         p = Ether(src=src_mac, dst=dst_mac)
         p /= IPv6(src=src_ip, dst=dst_ip)
         pkt_size = size
         if size is None:
             pkt_size = random.choice(self.pg_if_packet_sizes)
         p = Ether(src=src_mac, dst=dst_mac)
         p /= IPv6(src=src_ip, dst=dst_ip)
-        p /= (UDP(sport=1234, dport=4321) / Raw(b'\xa5' * 20))
+        p /= UDP(sport=1234, dport=4321) / Raw(b"\xa5" * 20)
         self.extend_packet(p, pkt_size)
         return p
 
         self.extend_packet(p, pkt_size)
         return p
 
@@ -191,16 +188,22 @@ class P2PEthernetIPV6(VppTestCase):
         self.logger.info("FFP_TEST_START_0001")
 
         self.pg0.config_ip6()
         self.logger.info("FFP_TEST_START_0001")
 
         self.pg0.config_ip6()
-        route_8000 = VppIpRoute(self, "8000::", 64,
-                                [VppRoutePath(self.pg0.remote_ip6,
-                                              self.pg0.sw_if_index)])
+        route_8000 = VppIpRoute(
+            self,
+            "8000::",
+            64,
+            [VppRoutePath(self.pg0.remote_ip6, self.pg0.sw_if_index)],
+        )
         route_8000.add_vpp_config()
 
         route_8000.add_vpp_config()
 
-        self.packets = [(Ether(dst=self.pg1.local_mac,
-                               src=self.pg1.remote_mac) /
-                         IPv6(src="3001::1", dst="8000::100") /
-                         UDP(sport=1234, dport=1234) /
-                         Raw(b'\xa5' * 100))]
+        self.packets = [
+            (
+                Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac)
+                / IPv6(src="3001::1", dst="8000::100")
+                / UDP(sport=1234, dport=1234)
+                / Raw(b"\xa5" * 100)
+            )
+        ]
         self.send_packets(self.pg1, self.pg0)
 
         self.pg0.unconfig_ip6()
         self.send_packets(self.pg1, self.pg0)
 
         self.pg0.unconfig_ip6()
@@ -210,19 +213,25 @@ class P2PEthernetIPV6(VppTestCase):
         """receive ipv6 packet via p2p subinterface"""
         self.logger.info("FFP_TEST_START_0002")
 
         """receive ipv6 packet via p2p subinterface"""
         self.logger.info("FFP_TEST_START_0002")
 
-        route_9001 = VppIpRoute(self, "9001::", 64,
-                                [VppRoutePath(self.pg1.remote_ip6,
-                                              self.pg1.sw_if_index)])
+        route_9001 = VppIpRoute(
+            self,
+            "9001::",
+            64,
+            [VppRoutePath(self.pg1.remote_ip6, self.pg1.sw_if_index)],
+        )
         route_9001.add_vpp_config()
 
         self.packets.append(
         route_9001.add_vpp_config()
 
         self.packets.append(
-            self.create_stream(src_mac=self.pg0._remote_hosts[0].mac,
-                               dst_mac=self.pg0.local_mac,
-                               src_ip=self.p2p_sub_ifs[0].remote_ip6,
-                               dst_ip="9001::100"))
+            self.create_stream(
+                src_mac=self.pg0._remote_hosts[0].mac,
+                dst_mac=self.pg0.local_mac,
+                src_ip=self.p2p_sub_ifs[0].remote_ip6,
+                dst_ip="9001::100",
+            )
+        )
 
         self.send_packets(self.pg0, self.pg1, self.packets)
 
         self.send_packets(self.pg0, self.pg1, self.packets)
-        self.assert_packet_counter_equal('p2p-ethernet-input', 1)
+        self.assert_packet_counter_equal("p2p-ethernet-input", 1)
 
         route_9001.remove_vpp_config()
         self.logger.info("FFP_TEST_FINISH_0002")
 
         route_9001.remove_vpp_config()
         self.logger.info("FFP_TEST_FINISH_0002")
@@ -233,16 +242,22 @@ class P2PEthernetIPV6(VppTestCase):
 
         self.pg0.config_ip6()
 
 
         self.pg0.config_ip6()
 
-        route_3 = VppIpRoute(self, "9000::", 64,
-                             [VppRoutePath(self.pg1._remote_hosts[0].ip6,
-                                           self.pg1.sw_if_index)])
+        route_3 = VppIpRoute(
+            self,
+            "9000::",
+            64,
+            [VppRoutePath(self.pg1._remote_hosts[0].ip6, self.pg1.sw_if_index)],
+        )
         route_3.add_vpp_config()
 
         self.packets.append(
         route_3.add_vpp_config()
 
         self.packets.append(
-            self.create_stream(src_mac="02:03:00:00:ff:ff",
-                               dst_mac=self.pg0.local_mac,
-                               src_ip="a000::100",
-                               dst_ip="9000::100"))
+            self.create_stream(
+                src_mac="02:03:00:00:ff:ff",
+                dst_mac=self.pg0.local_mac,
+                src_ip="a000::100",
+                dst_ip="9000::100",
+            )
+        )
 
         self.send_packets(self.pg0, self.pg1)
 
 
         self.send_packets(self.pg0, self.pg1)
 
@@ -256,16 +271,22 @@ class P2PEthernetIPV6(VppTestCase):
         """drop rx packet not matching p2p subinterface"""
         self.logger.info("FFP_TEST_START_0004")
 
         """drop rx packet not matching p2p subinterface"""
         self.logger.info("FFP_TEST_START_0004")
 
-        route_9001 = VppIpRoute(self, "9000::", 64,
-                                [VppRoutePath(self.pg1._remote_hosts[0].ip6,
-                                              self.pg1.sw_if_index)])
+        route_9001 = VppIpRoute(
+            self,
+            "9000::",
+            64,
+            [VppRoutePath(self.pg1._remote_hosts[0].ip6, self.pg1.sw_if_index)],
+        )
         route_9001.add_vpp_config()
 
         self.packets.append(
         route_9001.add_vpp_config()
 
         self.packets.append(
-            self.create_stream(src_mac="02:03:00:00:ff:ff",
-                               dst_mac=self.pg0.local_mac,
-                               src_ip="a000::100",
-                               dst_ip="9000::100"))
+            self.create_stream(
+                src_mac="02:03:00:00:ff:ff",
+                dst_mac=self.pg0.local_mac,
+                src_ip="a000::100",
+                dst_ip="9000::100",
+            )
+        )
 
         # no packet received
         self.send_packets(self.pg0, self.pg1, count=0)
 
         # no packet received
         self.send_packets(self.pg0, self.pg1, count=0)
@@ -277,27 +298,45 @@ class P2PEthernetIPV6(VppTestCase):
 
         self.pg0.config_ip6()
 
 
         self.pg0.config_ip6()
 
-        route_8000 = VppIpRoute(self, "8000::", 64,
-                                [VppRoutePath(self.pg0.remote_hosts[0].ip6,
-                                              self.pg0.sw_if_index)])
+        route_8000 = VppIpRoute(
+            self,
+            "8000::",
+            64,
+            [VppRoutePath(self.pg0.remote_hosts[0].ip6, self.pg0.sw_if_index)],
+        )
         route_8000.add_vpp_config()
         route_8000.add_vpp_config()
-        route_8001 = VppIpRoute(self, "8001::", 64,
-                                [VppRoutePath(
-                                    self.p2p_sub_ifs[0].remote_ip6,
-                                    self.p2p_sub_ifs[0].sw_if_index)])
+        route_8001 = VppIpRoute(
+            self,
+            "8001::",
+            64,
+            [
+                VppRoutePath(
+                    self.p2p_sub_ifs[0].remote_ip6, self.p2p_sub_ifs[0].sw_if_index
+                )
+            ],
+        )
         route_8001.add_vpp_config()
         route_8001.add_vpp_config()
-        route_8002 = VppIpRoute(self, "8002::", 64,
-                                [VppRoutePath(
-                                    self.p2p_sub_ifs[1].remote_ip6,
-                                    self.p2p_sub_ifs[1].sw_if_index)])
+        route_8002 = VppIpRoute(
+            self,
+            "8002::",
+            64,
+            [
+                VppRoutePath(
+                    self.p2p_sub_ifs[1].remote_ip6, self.p2p_sub_ifs[1].sw_if_index
+                )
+            ],
+        )
         route_8002.add_vpp_config()
 
         for i in range(0, 3):
             self.packets.append(
         route_8002.add_vpp_config()
 
         for i in range(0, 3):
             self.packets.append(
-                self.create_stream(src_mac=self.pg1.remote_mac,
-                                   dst_mac=self.pg1.local_mac,
-                                   src_ip=self.pg1.remote_ip6,
-                                   dst_ip="800%d::100" % i))
+                self.create_stream(
+                    src_mac=self.pg1.remote_mac,
+                    dst_mac=self.pg1.local_mac,
+                    src_ip=self.pg1.remote_ip6,
+                    dst_ip="800%d::100" % i,
+                )
+            )
 
         self.send_packets(self.pg1, self.pg0, count=3)
 
 
         self.send_packets(self.pg1, self.pg0, count=3)
 
@@ -313,10 +352,13 @@ class P2PEthernetIPV6(VppTestCase):
         self.logger.info("FFP_TEST_START_0006")
 
         self.packets.append(
         self.logger.info("FFP_TEST_START_0006")
 
         self.packets.append(
-            self.create_stream(src_mac="02:03:00:00:ff:ff",
-                               dst_mac=self.pg0.local_mac,
-                               src_ip="a000::100",
-                               dst_ip="9000::100"))
+            self.create_stream(
+                src_mac="02:03:00:00:ff:ff",
+                dst_mac=self.pg0.local_mac,
+                src_ip="a000::100",
+                dst_ip="9000::100",
+            )
+        )
 
         # no packet received
         self.send_packets(self.pg0, self.pg1, count=0)
 
         # no packet received
         self.send_packets(self.pg0, self.pg1, count=0)
@@ -360,11 +402,11 @@ class P2PEthernetIPV4(VppTestCase):
         for p in self.packets:
             self.packets.remove(p)
         self.p2p_sub_ifs.append(
         for p in self.packets:
             self.packets.remove(p)
         self.p2p_sub_ifs.append(
-            self.create_p2p_ethernet(self.pg0, 1,
-                                     self.pg0._remote_hosts[0].mac))
+            self.create_p2p_ethernet(self.pg0, 1, self.pg0._remote_hosts[0].mac)
+        )
         self.p2p_sub_ifs.append(
         self.p2p_sub_ifs.append(
-            self.create_p2p_ethernet(self.pg0, 2,
-                                     self.pg0._remote_hosts[1].mac))
+            self.create_p2p_ethernet(self.pg0, 2, self.pg0._remote_hosts[1].mac)
+        )
         self.vapi.cli("trace add p2p-ethernet-input 50")
 
     def tearDown(self):
         self.vapi.cli("trace add p2p-ethernet-input 50")
 
     def tearDown(self):
@@ -373,14 +415,15 @@ class P2PEthernetIPV4(VppTestCase):
             self.delete_p2p_ethernet(p2p)
         super(P2PEthernetIPV4, self).tearDown()
 
             self.delete_p2p_ethernet(p2p)
         super(P2PEthernetIPV4, self).tearDown()
 
-    def create_stream(self, src_mac=None, dst_mac=None,
-                      src_ip=None, dst_ip=None, size=None):
+    def create_stream(
+        self, src_mac=None, dst_mac=None, src_ip=None, dst_ip=None, size=None
+    ):
         pkt_size = size
         if size is None:
             pkt_size = random.choice(self.pg_if_packet_sizes)
         p = Ether(src=src_mac, dst=dst_mac)
         p /= IP(src=src_ip, dst=dst_ip)
         pkt_size = size
         if size is None:
             pkt_size = random.choice(self.pg_if_packet_sizes)
         p = Ether(src=src_mac, dst=dst_mac)
         p /= IP(src=src_ip, dst=dst_ip)
-        p /= (UDP(sport=1234, dport=4321) / Raw(b'\xa5' * 20))
+        p /= UDP(sport=1234, dport=4321) / Raw(b"\xa5" * 20)
         self.extend_packet(p, pkt_size)
         return p
 
         self.extend_packet(p, pkt_size)
         return p
 
@@ -403,27 +446,32 @@ class P2PEthernetIPV4(VppTestCase):
     def delete_p2p_ethernet(self, p2p):
         p2p.unconfig_ip4()
         p2p.admin_down()
     def delete_p2p_ethernet(self, p2p):
         p2p.unconfig_ip4()
         p2p.admin_down()
-        self.vapi.p2p_ethernet_del(p2p.parent.sw_if_index,
-                                   p2p.p2p_remote_mac)
+        self.vapi.p2p_ethernet_del(p2p.parent.sw_if_index, p2p.p2p_remote_mac)
 
     def test_ip4_rx_p2p_subif(self):
         """receive ipv4 packet via p2p subinterface"""
         self.logger.info("FFP_TEST_START_0002")
 
 
     def test_ip4_rx_p2p_subif(self):
         """receive ipv4 packet via p2p subinterface"""
         self.logger.info("FFP_TEST_START_0002")
 
-        route_9000 = VppIpRoute(self, "9.0.0.0", 16,
-                                [VppRoutePath(self.pg1.remote_ip4,
-                                              self.pg1.sw_if_index)])
+        route_9000 = VppIpRoute(
+            self,
+            "9.0.0.0",
+            16,
+            [VppRoutePath(self.pg1.remote_ip4, self.pg1.sw_if_index)],
+        )
         route_9000.add_vpp_config()
 
         self.packets.append(
         route_9000.add_vpp_config()
 
         self.packets.append(
-            self.create_stream(src_mac=self.pg0._remote_hosts[0].mac,
-                               dst_mac=self.pg0.local_mac,
-                               src_ip=self.p2p_sub_ifs[0].remote_ip4,
-                               dst_ip="9.0.0.100"))
+            self.create_stream(
+                src_mac=self.pg0._remote_hosts[0].mac,
+                dst_mac=self.pg0.local_mac,
+                src_ip=self.p2p_sub_ifs[0].remote_ip4,
+                dst_ip="9.0.0.100",
+            )
+        )
 
         self.send_packets(self.pg0, self.pg1, self.packets)
 
 
         self.send_packets(self.pg0, self.pg1, self.packets)
 
-        self.assert_packet_counter_equal('p2p-ethernet-input', 1)
+        self.assert_packet_counter_equal("p2p-ethernet-input", 1)
 
         route_9000.remove_vpp_config()
         self.logger.info("FFP_TEST_FINISH_0002")
 
         route_9000.remove_vpp_config()
         self.logger.info("FFP_TEST_FINISH_0002")
@@ -432,16 +480,22 @@ class P2PEthernetIPV4(VppTestCase):
         """route rx packet not matching p2p subinterface"""
         self.logger.info("FFP_TEST_START_0003")
 
         """route rx packet not matching p2p subinterface"""
         self.logger.info("FFP_TEST_START_0003")
 
-        route_9001 = VppIpRoute(self, "9.0.0.0", 24,
-                                [VppRoutePath(self.pg1.remote_ip4,
-                                              self.pg1.sw_if_index)])
+        route_9001 = VppIpRoute(
+            self,
+            "9.0.0.0",
+            24,
+            [VppRoutePath(self.pg1.remote_ip4, self.pg1.sw_if_index)],
+        )
         route_9001.add_vpp_config()
 
         self.packets.append(
         route_9001.add_vpp_config()
 
         self.packets.append(
-            self.create_stream(src_mac="02:01:00:00:ff:ff",
-                               dst_mac=self.pg0.local_mac,
-                               src_ip="8.0.0.100",
-                               dst_ip="9.0.0.100"))
+            self.create_stream(
+                src_mac="02:01:00:00:ff:ff",
+                dst_mac=self.pg0.local_mac,
+                src_ip="8.0.0.100",
+                dst_ip="9.0.0.100",
+            )
+        )
 
         self.send_packets(self.pg0, self.pg1)
 
 
         self.send_packets(self.pg0, self.pg1)
 
@@ -453,28 +507,51 @@ class P2PEthernetIPV4(VppTestCase):
         """send ip4 packet via p2p subinterface"""
         self.logger.info("FFP_TEST_START_0005")
 
         """send ip4 packet via p2p subinterface"""
         self.logger.info("FFP_TEST_START_0005")
 
-        route_9100 = VppIpRoute(self, "9.1.0.100", 24,
-                                [VppRoutePath(self.pg0.remote_ip4,
-                                              self.pg0.sw_if_index,
-                                              )])
+        route_9100 = VppIpRoute(
+            self,
+            "9.1.0.100",
+            24,
+            [
+                VppRoutePath(
+                    self.pg0.remote_ip4,
+                    self.pg0.sw_if_index,
+                )
+            ],
+        )
         route_9100.add_vpp_config()
         route_9100.add_vpp_config()
-        route_9200 = VppIpRoute(self, "9.2.0.100", 24,
-                                [VppRoutePath(self.p2p_sub_ifs[0].remote_ip4,
-                                              self.p2p_sub_ifs[0].sw_if_index,
-                                              )])
+        route_9200 = VppIpRoute(
+            self,
+            "9.2.0.100",
+            24,
+            [
+                VppRoutePath(
+                    self.p2p_sub_ifs[0].remote_ip4,
+                    self.p2p_sub_ifs[0].sw_if_index,
+                )
+            ],
+        )
         route_9200.add_vpp_config()
         route_9200.add_vpp_config()
-        route_9300 = VppIpRoute(self, "9.3.0.100", 24,
-                                [VppRoutePath(self.p2p_sub_ifs[1].remote_ip4,
-                                              self.p2p_sub_ifs[1].sw_if_index
-                                              )])
+        route_9300 = VppIpRoute(
+            self,
+            "9.3.0.100",
+            24,
+            [
+                VppRoutePath(
+                    self.p2p_sub_ifs[1].remote_ip4, self.p2p_sub_ifs[1].sw_if_index
+                )
+            ],
+        )
         route_9300.add_vpp_config()
 
         for i in range(0, 3):
             self.packets.append(
         route_9300.add_vpp_config()
 
         for i in range(0, 3):
             self.packets.append(
-                self.create_stream(src_mac=self.pg1.remote_mac,
-                                   dst_mac=self.pg1.local_mac,
-                                   src_ip=self.pg1.remote_ip4,
-                                   dst_ip="9.%d.0.100" % (i+1)))
+                self.create_stream(
+                    src_mac=self.pg1.remote_mac,
+                    dst_mac=self.pg1.local_mac,
+                    src_ip=self.pg1.remote_ip4,
+                    dst_ip="9.%d.0.100" % (i + 1),
+                )
+            )
 
         self.send_packets(self.pg1, self.pg0)
 
 
         self.send_packets(self.pg1, self.pg0)
 
@@ -490,15 +567,18 @@ class P2PEthernetIPV4(VppTestCase):
         self.logger.info("FFP_TEST_START_0006")
 
         self.packets.append(
         self.logger.info("FFP_TEST_START_0006")
 
         self.packets.append(
-            self.create_stream(src_mac="02:01:00:00:ff:ff",
-                               dst_mac=self.pg0.local_mac,
-                               src_ip="8.0.0.100",
-                               dst_ip="9.0.0.100"))
+            self.create_stream(
+                src_mac="02:01:00:00:ff:ff",
+                dst_mac=self.pg0.local_mac,
+                src_ip="8.0.0.100",
+                dst_ip="9.0.0.100",
+            )
+        )
 
         # no packet received
         self.send_packets(self.pg0, self.pg1, count=0)
         self.logger.info("FFP_TEST_FINISH_0006")
 
 
 
         # no packet received
         self.send_packets(self.pg0, self.pg1, count=0)
         self.logger.info("FFP_TEST_FINISH_0006")
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index 5bfac52..7405d2e 100644 (file)
@@ -8,7 +8,7 @@ from vpp_ip_route import VppIpTable, VppIpRoute, VppRoutePath
 
 
 class TestPcap(VppTestCase):
 
 
 class TestPcap(VppTestCase):
-    """ Pcap Unit Test Cases """
+    """Pcap Unit Test Cases"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -24,67 +24,68 @@ class TestPcap(VppTestCase):
     def tearDown(self):
         super(TestPcap, self).tearDown()
 
     def tearDown(self):
         super(TestPcap, self).tearDown()
 
-# This is a code coverage test, but it only runs for 0.3 seconds
-# might as well just run it...
+    # This is a code coverage test, but it only runs for 0.3 seconds
+    # might as well just run it...
     def test_pcap_unittest(self):
     def test_pcap_unittest(self):
-        """ PCAP Capture Tests """
-        cmds = ["loop create",
-                "set int ip address loop0 11.22.33.1/24",
-                "set int state loop0 up",
-                "loop create",
-                "set int ip address loop1 11.22.34.1/24",
-                "set int state loop1 up",
-                "set ip neighbor loop1 11.22.34.44 03:00:11:22:34:44",
-                "packet-generator new {\n"
-                "  name s0\n"
-                "  limit 10\n"
-                "  size 128-128\n"
-                "  interface loop0\n"
-                "  tx-interface loop1\n"
-                "  node loop1-output\n"
-                "  buffer-flags ip4 offload\n"
-                "  buffer-offload-flags offload-ip-cksum offload-udp-cksum\n"
-                "  data {\n"
-                "    IP4: 1.2.3 -> dead.0000.0001\n"
-                "    UDP: 11.22.33.44 -> 11.22.34.44\n"
-                "      ttl 2 checksum 13\n"
-                "    UDP: 1234 -> 2345\n"
-                "      checksum 11\n"
-                "    incrementing 114\n"
-                "  }\n"
-                "}",
-                "pcap dispatch trace on max 100 buffer-trace pg-input 10",
-                "pa en",
-                "pcap dispatch trace off",
-                "pcap trace rx tx max 1000 intfc any",
-                "pa en",
-                "pcap trace status",
-                "pcap trace rx tx off",
-                "classify filter pcap mask l3 ip4 src "
-                "match l3 ip4 src 11.22.33.44",
-                "pcap trace rx tx max 1000 intfc any file filt.pcap filter",
-                "show cla t verbose 2",
-                "show cla t verbose",
-                "show cla t",
-                "pa en",
-                "pcap trace rx tx off",
-                "classify filter pcap del mask l3 ip4 src"]
+        """PCAP Capture Tests"""
+        cmds = [
+            "loop create",
+            "set int ip address loop0 11.22.33.1/24",
+            "set int state loop0 up",
+            "loop create",
+            "set int ip address loop1 11.22.34.1/24",
+            "set int state loop1 up",
+            "set ip neighbor loop1 11.22.34.44 03:00:11:22:34:44",
+            "packet-generator new {\n"
+            "  name s0\n"
+            "  limit 10\n"
+            "  size 128-128\n"
+            "  interface loop0\n"
+            "  tx-interface loop1\n"
+            "  node loop1-output\n"
+            "  buffer-flags ip4 offload\n"
+            "  buffer-offload-flags offload-ip-cksum offload-udp-cksum\n"
+            "  data {\n"
+            "    IP4: 1.2.3 -> dead.0000.0001\n"
+            "    UDP: 11.22.33.44 -> 11.22.34.44\n"
+            "      ttl 2 checksum 13\n"
+            "    UDP: 1234 -> 2345\n"
+            "      checksum 11\n"
+            "    incrementing 114\n"
+            "  }\n"
+            "}",
+            "pcap dispatch trace on max 100 buffer-trace pg-input 10",
+            "pa en",
+            "pcap dispatch trace off",
+            "pcap trace rx tx max 1000 intfc any",
+            "pa en",
+            "pcap trace status",
+            "pcap trace rx tx off",
+            "classify filter pcap mask l3 ip4 src match l3 ip4 src 11.22.33.44",
+            "pcap trace rx tx max 1000 intfc any file filt.pcap filter",
+            "show cla t verbose 2",
+            "show cla t verbose",
+            "show cla t",
+            "pa en",
+            "pcap trace rx tx off",
+            "classify filter pcap del mask l3 ip4 src",
+        ]
 
         for cmd in cmds:
             r = self.vapi.cli_return_response(cmd)
             if r.retval != 0:
 
         for cmd in cmds:
             r = self.vapi.cli_return_response(cmd)
             if r.retval != 0:
-                if hasattr(r, 'reply'):
+                if hasattr(r, "reply"):
                     self.logger.info(cmd + " FAIL reply " + r.reply)
                 else:
                     self.logger.info(cmd + " FAIL retval " + str(r.retval))
 
                     self.logger.info(cmd + " FAIL reply " + r.reply)
                 else:
                     self.logger.info(cmd + " FAIL retval " + str(r.retval))
 
-        self.assertTrue(os.path.exists('/tmp/dispatch.pcap'))
-        self.assertTrue(os.path.exists('/tmp/rxtx.pcap'))
-        self.assertTrue(os.path.exists('/tmp/filt.pcap'))
-        os.remove('/tmp/dispatch.pcap')
-        os.remove('/tmp/rxtx.pcap')
-        os.remove('/tmp/filt.pcap')
+        self.assertTrue(os.path.exists("/tmp/dispatch.pcap"))
+        self.assertTrue(os.path.exists("/tmp/rxtx.pcap"))
+        self.assertTrue(os.path.exists("/tmp/filt.pcap"))
+        os.remove("/tmp/dispatch.pcap")
+        os.remove("/tmp/rxtx.pcap")
+        os.remove("/tmp/filt.pcap")
 
 
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index 76b7fd7..f2a23e5 100644 (file)
@@ -12,7 +12,7 @@ from framework import VppTestCase, VppTestRunner
 
 
 class TestPgTun(VppTestCase):
 
 
 class TestPgTun(VppTestCase):
-    """ PG Test Case """
+    """PG Test Case"""
 
     def setUp(self):
         super(TestPgTun, self).setUp()
 
     def setUp(self):
         super(TestPgTun, self).setUp()
@@ -41,7 +41,7 @@ class TestPgTun(VppTestCase):
         super(TestPgTun, self).tearDown()
 
     def test_pg_tun(self):
         super(TestPgTun, self).tearDown()
 
     def test_pg_tun(self):
-        """ IP[46] Tunnel Mode PG """
+        """IP[46] Tunnel Mode PG"""
 
         #
         # test that we can send and receive IP encap'd packets on the
 
         #
         # test that we can send and receive IP encap'd packets on the
@@ -50,9 +50,11 @@ class TestPgTun(VppTestCase):
         N_PKTS = 31
 
         # v4 tun to ethernet
         N_PKTS = 31
 
         # v4 tun to ethernet
-        p = (IP(src=self.pg1.remote_ip4, dst=self.pg0.remote_ip4) /
-             UDP(sport=1234, dport=1234) /
-             Raw('0' * 48))
+        p = (
+            IP(src=self.pg1.remote_ip4, dst=self.pg0.remote_ip4)
+            / UDP(sport=1234, dport=1234)
+            / Raw("0" * 48)
+        )
 
         rxs = self.send_and_expect(self.pg1, p * N_PKTS, self.pg0)
         for rx in rxs:
 
         rxs = self.send_and_expect(self.pg1, p * N_PKTS, self.pg0)
         for rx in rxs:
@@ -60,9 +62,11 @@ class TestPgTun(VppTestCase):
             self.assertEqual(rx[IP].dst, self.pg0.remote_ip4)
 
         # v6 tun to ethernet
             self.assertEqual(rx[IP].dst, self.pg0.remote_ip4)
 
         # v6 tun to ethernet
-        p = (IPv6(src=self.pg2.remote_ip6, dst=self.pg0.remote_ip6) /
-             UDP(sport=1234, dport=1234) /
-             Raw('0' * 48))
+        p = (
+            IPv6(src=self.pg2.remote_ip6, dst=self.pg0.remote_ip6)
+            / UDP(sport=1234, dport=1234)
+            / Raw("0" * 48)
+        )
 
         rxs = self.send_and_expect(self.pg2, p * N_PKTS, self.pg0)
         for rx in rxs:
 
         rxs = self.send_and_expect(self.pg2, p * N_PKTS, self.pg0)
         for rx in rxs:
@@ -70,10 +74,12 @@ class TestPgTun(VppTestCase):
             self.assertEqual(rx[IPv6].dst, self.pg0.remote_ip6)
 
         # eth to v4 tun
             self.assertEqual(rx[IPv6].dst, self.pg0.remote_ip6)
 
         # eth to v4 tun
-        p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-             IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4) /
-             UDP(sport=1234, dport=1234) /
-             Raw('0' * 48))
+        p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4)
+            / UDP(sport=1234, dport=1234)
+            / Raw("0" * 48)
+        )
 
         rxs = self.send_and_expect(self.pg0, p * N_PKTS, self.pg1)
         for rx in rxs:
 
         rxs = self.send_and_expect(self.pg0, p * N_PKTS, self.pg1)
         for rx in rxs:
@@ -82,10 +88,12 @@ class TestPgTun(VppTestCase):
             self.assertEqual(rx[IP].dst, self.pg1.remote_ip4)
 
         # eth to v6 tun
             self.assertEqual(rx[IP].dst, self.pg1.remote_ip4)
 
         # eth to v6 tun
-        p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-             IPv6(src=self.pg0.remote_ip6, dst=self.pg2.remote_ip6) /
-             UDP(sport=1234, dport=1234) /
-             Raw('0' * 48))
+        p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IPv6(src=self.pg0.remote_ip6, dst=self.pg2.remote_ip6)
+            / UDP(sport=1234, dport=1234)
+            / Raw("0" * 48)
+        )
 
         rxs = self.send_and_expect(self.pg0, p * N_PKTS, self.pg2)
         for rx in rxs:
 
         rxs = self.send_and_expect(self.pg0, p * N_PKTS, self.pg2)
         for rx in rxs:
@@ -94,5 +102,5 @@ class TestPgTun(VppTestCase):
             self.assertEqual(rx[IPv6].dst, self.pg2.remote_ip6)
 
 
             self.assertEqual(rx[IPv6].dst, self.pg2.remote_ip6)
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index 8c5c087..c2eb8b7 100644 (file)
@@ -18,7 +18,7 @@ Basic test for sanity check of the ping.
 
 
 class TestPing(VppTestCase):
 
 
 class TestPing(VppTestCase):
-    """ Ping Test Case """
+    """Ping Test Case"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -64,7 +64,7 @@ class TestPing(VppTestCase):
         return icmp
 
     def test_ping_basic(self):
         return icmp
 
     def test_ping_basic(self):
-        """ basic ping test """
+        """basic ping test"""
         try:
             self.pg_enable_capture(self.pg_interfaces)
             self.pg_start()
         try:
             self.pg_enable_capture(self.pg_interfaces)
             self.pg_start()
@@ -79,8 +79,9 @@ class TestPing(VppTestCase):
             icmp_id = None
             icmp_seq = 1
             for p in out:
             icmp_id = None
             icmp_seq = 1
             for p in out:
-                icmp = self.verify_ping_request(p, self.pg1.local_ip4,
-                                                self.pg1.remote_ip4, icmp_seq)
+                icmp = self.verify_ping_request(
+                    p, self.pg1.local_ip4, self.pg1.remote_ip4, icmp_seq
+                )
                 icmp_seq = icmp_seq + 1
                 if icmp_id is None:
                     icmp_id = icmp.id
                 icmp_seq = icmp_seq + 1
                 if icmp_id is None:
                     icmp_id = icmp.id
@@ -90,7 +91,7 @@ class TestPing(VppTestCase):
             self.vapi.cli("show error")
 
     def test_ping_burst(self):
             self.vapi.cli("show error")
 
     def test_ping_burst(self):
-        """ burst ping test """
+        """burst ping test"""
         try:
             self.pg_enable_capture(self.pg_interfaces)
             self.pg_start()
         try:
             self.pg_enable_capture(self.pg_interfaces)
             self.pg_start()
@@ -100,13 +101,14 @@ class TestPing(VppTestCase):
             ping_cmd = "ping " + remote_ip4 + " interval 0.01 burst 3"
             ret = self.vapi.cli(ping_cmd)
             self.logger.info(ret)
             ping_cmd = "ping " + remote_ip4 + " interval 0.01 burst 3"
             ret = self.vapi.cli(ping_cmd)
             self.logger.info(ret)
-            out = self.pg1.get_capture(3*5)
+            out = self.pg1.get_capture(3 * 5)
             icmp_id = None
             icmp_seq = 1
             count = 0
             for p in out:
             icmp_id = None
             icmp_seq = 1
             count = 0
             for p in out:
-                icmp = self.verify_ping_request(p, self.pg1.local_ip4,
-                                                self.pg1.remote_ip4, icmp_seq)
+                icmp = self.verify_ping_request(
+                    p, self.pg1.local_ip4, self.pg1.remote_ip4, icmp_seq
+                )
                 count = count + 1
                 if count >= 3:
                     icmp_seq = icmp_seq + 1
                 count = count + 1
                 if count >= 3:
                     icmp_seq = icmp_seq + 1
@@ -119,7 +121,7 @@ class TestPing(VppTestCase):
             self.vapi.cli("show error")
 
     def test_ping_src(self):
             self.vapi.cli("show error")
 
     def test_ping_src(self):
-        """ ping with source address set """
+        """ping with source address set"""
 
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
@@ -128,17 +130,18 @@ class TestPing(VppTestCase):
 
         nbr_addr = "10.0.0.2"
         VppIpInterfaceAddress(self, self.pg1, "10.0.0.1", 24).add_vpp_config()
 
         nbr_addr = "10.0.0.2"
         VppIpInterfaceAddress(self, self.pg1, "10.0.0.1", 24).add_vpp_config()
-        VppNeighbor(self, self.pg1.sw_if_index,
-                    "00:11:22:33:44:55",
-                    nbr_addr).add_vpp_config()
+        VppNeighbor(
+            self, self.pg1.sw_if_index, "00:11:22:33:44:55", nbr_addr
+        ).add_vpp_config()
 
         ping_cmd = "ping %s interval 0.01 repeat 3" % self.pg1.remote_ip4
         ret = self.vapi.cli(ping_cmd)
         out = self.pg1.get_capture(3)
         icmp_seq = 1
         for p in out:
 
         ping_cmd = "ping %s interval 0.01 repeat 3" % self.pg1.remote_ip4
         ret = self.vapi.cli(ping_cmd)
         out = self.pg1.get_capture(3)
         icmp_seq = 1
         for p in out:
-            icmp = self.verify_ping_request(p, self.pg1.local_ip4,
-                                            self.pg1.remote_ip4, icmp_seq)
+            icmp = self.verify_ping_request(
+                p, self.pg1.local_ip4, self.pg1.remote_ip4, icmp_seq
+            )
             icmp_seq = icmp_seq + 1
 
         self.pg_enable_capture(self.pg_interfaces)
             icmp_seq = icmp_seq + 1
 
         self.pg_enable_capture(self.pg_interfaces)
@@ -152,7 +155,7 @@ class TestPing(VppTestCase):
             icmp_seq = icmp_seq + 1
 
     def test_ping_fib_routed_dst(self):
             icmp_seq = icmp_seq + 1
 
     def test_ping_fib_routed_dst(self):
-        """ ping destination routed according to FIB table """
+        """ping destination routed according to FIB table"""
 
         try:
             self.pg1.generate_remote_hosts(1)
 
         try:
             self.pg1.generate_remote_hosts(1)
@@ -160,17 +163,19 @@ class TestPing(VppTestCase):
             self.pg_start()
             routed_dst = "10.0.2.0"
             self.logger.info(self.vapi.cli("show ip4 neighbors"))
             self.pg_start()
             routed_dst = "10.0.2.0"
             self.logger.info(self.vapi.cli("show ip4 neighbors"))
-            VppIpRoute(self, routed_dst, 24,
-                       [VppRoutePath(self.pg1.remote_hosts[0].ip4,
-                                     self.pg1.sw_if_index)]).add_vpp_config()
+            VppIpRoute(
+                self,
+                routed_dst,
+                24,
+                [VppRoutePath(self.pg1.remote_hosts[0].ip4, self.pg1.sw_if_index)],
+            ).add_vpp_config()
             ping_cmd = "ping %s interval 0.01 repeat 3" % routed_dst
             ret = self.vapi.cli(ping_cmd)
             self.logger.info(ret)
             out = self.pg1.get_capture(3)
             icmp_seq = 1
             for p in out:
             ping_cmd = "ping %s interval 0.01 repeat 3" % routed_dst
             ret = self.vapi.cli(ping_cmd)
             self.logger.info(ret)
             out = self.pg1.get_capture(3)
             icmp_seq = 1
             for p in out:
-                self.verify_ping_request(p, self.pg1.local_ip4, routed_dst,
-                                         icmp_seq)
+                self.verify_ping_request(p, self.pg1.local_ip4, routed_dst, icmp_seq)
                 icmp_seq = icmp_seq + 1
         finally:
             self.vapi.cli("show error")
                 icmp_seq = icmp_seq + 1
         finally:
             self.vapi.cli("show error")
index 937a28e..3054099 100644 (file)
@@ -28,20 +28,19 @@ class VppPipe(VppInterface):
     def west(self):
         return self.result.pipe_sw_if_index[0]
 
     def west(self):
         return self.result.pipe_sw_if_index[0]
 
-    def __init__(self, test, instance=0xffffffff):
+    def __init__(self, test, instance=0xFFFFFFFF):
         super(VppPipe, self).__init__(test)
         self._test = test
         self.instance = instance
 
     def add_vpp_config(self):
         self.result = self._test.vapi.pipe_create(
         super(VppPipe, self).__init__(test)
         self._test = test
         self.instance = instance
 
     def add_vpp_config(self):
         self.result = self._test.vapi.pipe_create(
-            0 if self.instance == 0xffffffff else 1,
-            self.instance)
+            0 if self.instance == 0xFFFFFFFF else 1, self.instance
+        )
         self.set_sw_if_index(self.result.sw_if_index)
 
     def remove_vpp_config(self):
         self.set_sw_if_index(self.result.sw_if_index)
 
     def remove_vpp_config(self):
-        self._test.vapi.pipe_delete(
-            self.result.sw_if_index)
+        self._test.vapi.pipe_delete(self.result.sw_if_index)
 
     def object_id(self):
         return "pipe-%d" % (self._sw_if_index)
 
     def object_id(self):
         return "pipe-%d" % (self._sw_if_index)
@@ -56,14 +55,16 @@ class VppPipe(VppInterface):
     def set_unnumbered(self, ip_sw_if_index, is_east, is_add=True):
         if is_east:
             res = self._test.vapi.sw_interface_set_unnumbered(
     def set_unnumbered(self, ip_sw_if_index, is_east, is_add=True):
         if is_east:
             res = self._test.vapi.sw_interface_set_unnumbered(
-                ip_sw_if_index, self.east, is_add)
+                ip_sw_if_index, self.east, is_add
+            )
         else:
             res = self._test.vapi.sw_interface_set_unnumbered(
         else:
             res = self._test.vapi.sw_interface_set_unnumbered(
-                ip_sw_if_index, self.west, is_add)
+                ip_sw_if_index, self.west, is_add
+            )
 
 
 class TestPipe(VppTestCase):
 
 
 class TestPipe(VppTestCase):
-    """ Pipes """
+    """Pipes"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -88,7 +89,7 @@ class TestPipe(VppTestCase):
         super(TestPipe, self).tearDown()
 
     def test_pipe(self):
         super(TestPipe, self).tearDown()
 
     def test_pipe(self):
-        """ Pipes """
+        """Pipes"""
 
         pipes = [VppPipe(self), VppPipe(self, 10)]
 
 
         pipes = [VppPipe(self), VppPipe(self, 10)]
 
@@ -99,26 +100,26 @@ class TestPipe(VppTestCase):
         #
         # L2 cross-connect pipe0 east with pg0 and west with pg1
         #
         #
         # L2 cross-connect pipe0 east with pg0 and west with pg1
         #
-        self.vapi.sw_interface_set_l2_xconnect(self.pg0.sw_if_index,
-                                               pipes[0].east,
-                                               enable=1)
-        self.vapi.sw_interface_set_l2_xconnect(pipes[0].east,
-                                               self.pg0.sw_if_index,
-                                               enable=1)
-        self.vapi.sw_interface_set_l2_xconnect(self.pg1.sw_if_index,
-                                               pipes[0].west,
-                                               enable=1)
-        self.vapi.sw_interface_set_l2_xconnect(pipes[0].west,
-                                               self.pg1.sw_if_index,
-                                               enable=1)
+        self.vapi.sw_interface_set_l2_xconnect(
+            self.pg0.sw_if_index, pipes[0].east, enable=1
+        )
+        self.vapi.sw_interface_set_l2_xconnect(
+            pipes[0].east, self.pg0.sw_if_index, enable=1
+        )
+        self.vapi.sw_interface_set_l2_xconnect(
+            self.pg1.sw_if_index, pipes[0].west, enable=1
+        )
+        self.vapi.sw_interface_set_l2_xconnect(
+            pipes[0].west, self.pg1.sw_if_index, enable=1
+        )
 
         # test bi-directional L2 flow pg0<->pg1
 
         # test bi-directional L2 flow pg0<->pg1
-        p = (Ether(src=self.pg0.remote_mac,
-                   dst=self.pg1.remote_mac) /
-             IP(src="1.1.1.1",
-                dst="1.1.1.2") /
-             UDP(sport=1234, dport=1234) /
-             Raw(b'\xa5' * 100))
+        p = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg1.remote_mac)
+            / IP(src="1.1.1.1", dst="1.1.1.2")
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
 
         self.send_and_expect(self.pg0, p * NUM_PKTS, self.pg1)
         self.send_and_expect(self.pg1, p * NUM_PKTS, self.pg0)
 
         self.send_and_expect(self.pg0, p * NUM_PKTS, self.pg1)
         self.send_and_expect(self.pg1, p * NUM_PKTS, self.pg0)
@@ -126,15 +127,20 @@ class TestPipe(VppTestCase):
         #
         # Attach ACL to ensure features are run on the pipe
         #
         #
         # Attach ACL to ensure features are run on the pipe
         #
-        rule_1 = AclRule(is_permit=0, proto=17,
-                         src_prefix=IPv4Network("1.1.1.1/32"),
-                         dst_prefix=IPv4Network("1.1.1.2/32"), ports=1234)
+        rule_1 = AclRule(
+            is_permit=0,
+            proto=17,
+            src_prefix=IPv4Network("1.1.1.1/32"),
+            dst_prefix=IPv4Network("1.1.1.2/32"),
+            ports=1234,
+        )
         acl = VppAcl(self, rules=[rule_1])
         acl.add_vpp_config()
 
         # Apply the ACL on the pipe on output
         acl = VppAcl(self, rules=[rule_1])
         acl.add_vpp_config()
 
         # Apply the ACL on the pipe on output
-        acl_if_e = VppAclInterface(self, sw_if_index=pipes[0].east, n_input=0,
-                                   acls=[acl])
+        acl_if_e = VppAclInterface(
+            self, sw_if_index=pipes[0].east, n_input=0, acls=[acl]
+        )
         acl_if_e.add_vpp_config()
 
         self.send_and_assert_no_replies(self.pg0, p * NUM_PKTS)
         acl_if_e.add_vpp_config()
 
         self.send_and_assert_no_replies(self.pg0, p * NUM_PKTS)
@@ -142,8 +148,9 @@ class TestPipe(VppTestCase):
 
         # remove from output and apply on input
         acl_if_e.remove_vpp_config()
 
         # remove from output and apply on input
         acl_if_e.remove_vpp_config()
-        acl_if_w = VppAclInterface(self, sw_if_index=pipes[0].west, n_input=1,
-                                   acls=[acl])
+        acl_if_w = VppAclInterface(
+            self, sw_if_index=pipes[0].west, n_input=1, acls=[acl]
+        )
         acl_if_w.add_vpp_config()
 
         self.send_and_assert_no_replies(self.pg0, p * NUM_PKTS)
         acl_if_w.add_vpp_config()
 
         self.send_and_assert_no_replies(self.pg0, p * NUM_PKTS)
@@ -172,30 +179,52 @@ class TestPipe(VppTestCase):
         self.pg3.resolve_arp()
 
         routes = []
         self.pg3.resolve_arp()
 
         routes = []
-        routes.append(VppIpRoute(self, "1.1.1.1", 32,
-                                 [VppRoutePath(self.pg3.remote_ip4,
-                                               self.pg3.sw_if_index)],
-                                 table_id=2))
-        routes.append(VppIpRoute(self, "1.1.1.1", 32,
-                                 [VppRoutePath("0.0.0.0", pipes[1].east)],
-                                 table_id=1))
-        routes.append(VppIpRoute(self, "1.1.1.2", 32,
-                                 [VppRoutePath("0.0.0.0", pipes[1].west)],
-                                 table_id=2))
-        routes.append(VppIpRoute(self, "1.1.1.2", 32,
-                                 [VppRoutePath(self.pg2.remote_ip4,
-                                               self.pg2.sw_if_index)],
-                                 table_id=1))
+        routes.append(
+            VppIpRoute(
+                self,
+                "1.1.1.1",
+                32,
+                [VppRoutePath(self.pg3.remote_ip4, self.pg3.sw_if_index)],
+                table_id=2,
+            )
+        )
+        routes.append(
+            VppIpRoute(
+                self,
+                "1.1.1.1",
+                32,
+                [VppRoutePath("0.0.0.0", pipes[1].east)],
+                table_id=1,
+            )
+        )
+        routes.append(
+            VppIpRoute(
+                self,
+                "1.1.1.2",
+                32,
+                [VppRoutePath("0.0.0.0", pipes[1].west)],
+                table_id=2,
+            )
+        )
+        routes.append(
+            VppIpRoute(
+                self,
+                "1.1.1.2",
+                32,
+                [VppRoutePath(self.pg2.remote_ip4, self.pg2.sw_if_index)],
+                table_id=1,
+            )
+        )
 
         for r in routes:
             r.add_vpp_config()
 
 
         for r in routes:
             r.add_vpp_config()
 
-        p_east = (Ether(src=self.pg2.remote_mac,
-                        dst=self.pg2.local_mac) /
-                  IP(src="1.1.1.2",
-                     dst="1.1.1.1") /
-                  UDP(sport=1234, dport=1234) /
-                  Raw(b'\xa5' * 100))
+        p_east = (
+            Ether(src=self.pg2.remote_mac, dst=self.pg2.local_mac)
+            / IP(src="1.1.1.2", dst="1.1.1.1")
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
 
         # bind the pipe ends to the correct tables
         self.vapi.sw_interface_set_table(pipes[1].west, 0, 2)
 
         # bind the pipe ends to the correct tables
         self.vapi.sw_interface_set_table(pipes[1].west, 0, 2)
@@ -211,27 +240,29 @@ class TestPipe(VppTestCase):
         self.send_and_expect(self.pg2, p_east * NUM_PKTS, self.pg3)
 
         # and the return path
         self.send_and_expect(self.pg2, p_east * NUM_PKTS, self.pg3)
 
         # and the return path
-        p_west = (Ether(src=self.pg3.remote_mac,
-                        dst=self.pg3.local_mac) /
-                  IP(src="1.1.1.1",
-                     dst="1.1.1.2") /
-                  UDP(sport=1234, dport=1234) /
-                  Raw(b'\xa5' * 100))
+        p_west = (
+            Ether(src=self.pg3.remote_mac, dst=self.pg3.local_mac)
+            / IP(src="1.1.1.1", dst="1.1.1.2")
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
         self.send_and_expect(self.pg3, p_west * NUM_PKTS, self.pg2)
 
         #
         # Use ACLs to test features run on the Pipes
         #
         self.send_and_expect(self.pg3, p_west * NUM_PKTS, self.pg2)
 
         #
         # Use ACLs to test features run on the Pipes
         #
-        acl_if_e1 = VppAclInterface(self, sw_if_index=pipes[1].east, n_input=0,
-                                    acls=[acl])
+        acl_if_e1 = VppAclInterface(
+            self, sw_if_index=pipes[1].east, n_input=0, acls=[acl]
+        )
         acl_if_e1.add_vpp_config()
         self.send_and_assert_no_replies(self.pg2, p_east * NUM_PKTS)
         self.send_and_expect(self.pg3, p_west * NUM_PKTS, self.pg2)
 
         # remove from output and apply on input
         acl_if_e1.remove_vpp_config()
         acl_if_e1.add_vpp_config()
         self.send_and_assert_no_replies(self.pg2, p_east * NUM_PKTS)
         self.send_and_expect(self.pg3, p_west * NUM_PKTS, self.pg2)
 
         # remove from output and apply on input
         acl_if_e1.remove_vpp_config()
-        acl_if_w1 = VppAclInterface(self, sw_if_index=pipes[1].west, n_input=1,
-                                    acls=[acl])
+        acl_if_w1 = VppAclInterface(
+            self, sw_if_index=pipes[1].west, n_input=1, acls=[acl]
+        )
         acl_if_w1.add_vpp_config()
         self.send_and_assert_no_replies(self.pg2, p_east * NUM_PKTS)
         self.send_and_expect(self.pg3, p_west * NUM_PKTS, self.pg2)
         acl_if_w1.add_vpp_config()
         self.send_and_assert_no_replies(self.pg2, p_east * NUM_PKTS)
         self.send_and_expect(self.pg3, p_west * NUM_PKTS, self.pg2)
@@ -249,5 +280,5 @@ class TestPipe(VppTestCase):
         self.vapi.sw_interface_set_table(pipes[1].east, 0, 0)
 
 
         self.vapi.sw_interface_set_table(pipes[1].east, 0, 0)
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index d5b6005..faf66e6 100644 (file)
@@ -8,7 +8,8 @@ from vpp_papi import VppEnum
 
 
 class TestPNAT(VppTestCase):
 
 
 class TestPNAT(VppTestCase):
-    """ PNAT Test Case """
+    """PNAT Test Case"""
+
     maxDiff = None
 
     @classmethod
     maxDiff = None
 
     @classmethod
@@ -42,147 +43,187 @@ class TestPNAT(VppTestCase):
         self.assertEqual(rx, expected)
 
     def ping_check(self):
         self.assertEqual(rx, expected)
 
     def ping_check(self):
-        """ Verify non matching traffic works. """
+        """Verify non matching traffic works."""
         p_ether = Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
 
         p_ether = Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
 
-        icmpecho = (IP(src=self.pg0.remote_ip4, dst=self.pg0.local_ip4) /
-                    ICMP())
-        reply = (IP(src=self.pg0.local_ip4, dst=self.pg0.remote_ip4) /
-                 ICMP(type='echo-reply'))
-        rx = self.send_and_expect(self.pg0, p_ether/icmpecho * 1, self.pg0)
+        icmpecho = IP(src=self.pg0.remote_ip4, dst=self.pg0.local_ip4) / ICMP()
+        reply = IP(src=self.pg0.local_ip4, dst=self.pg0.remote_ip4) / ICMP(
+            type="echo-reply"
+        )
+        rx = self.send_and_expect(self.pg0, p_ether / icmpecho * 1, self.pg0)
         for p in rx:
             reply[IP].id = p[IP].id
             self.validate(p[1], reply)
 
     def test_pnat(self):
         for p in rx:
             reply[IP].id = p[IP].id
             self.validate(p[1], reply)
 
     def test_pnat(self):
-        """ PNAT test """
+        """PNAT test"""
 
         PNAT_IP4_INPUT = VppEnum.vl_api_pnat_attachment_point_t.PNAT_IP4_INPUT
 
         PNAT_IP4_INPUT = VppEnum.vl_api_pnat_attachment_point_t.PNAT_IP4_INPUT
-        PNAT_IP4_OUTPUT = \
-            VppEnum.vl_api_pnat_attachment_point_t.PNAT_IP4_OUTPUT
+        PNAT_IP4_OUTPUT = VppEnum.vl_api_pnat_attachment_point_t.PNAT_IP4_OUTPUT
 
         tests = [
             {
 
         tests = [
             {
-                'input': PNAT_IP4_INPUT,
-                'sw_if_index': self.pg0.sw_if_index,
-                'match': {'mask': 0xa, 'dst': '10.10.10.10', 'proto': 17,
-                          'dport': 6871},
-                'rewrite': {'mask': 0x2, 'dst': self.pg1.remote_ip4},
-                'send': (IP(src=self.pg0.remote_ip4, dst='10.10.10.10') /
-                         UDP(dport=6871)),
-                'reply': (IP(src=self.pg0.remote_ip4,
-                             dst=self.pg1.remote_ip4) /
-                          UDP(dport=6871))
+                "input": PNAT_IP4_INPUT,
+                "sw_if_index": self.pg0.sw_if_index,
+                "match": {
+                    "mask": 0xA,
+                    "dst": "10.10.10.10",
+                    "proto": 17,
+                    "dport": 6871,
+                },
+                "rewrite": {"mask": 0x2, "dst": self.pg1.remote_ip4},
+                "send": (
+                    IP(src=self.pg0.remote_ip4, dst="10.10.10.10") / UDP(dport=6871)
+                ),
+                "reply": (
+                    IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4)
+                    / UDP(dport=6871)
+                ),
             },
             {
             },
             {
-                'input': PNAT_IP4_OUTPUT,
-                'sw_if_index': self.pg1.sw_if_index,
-                'match': {'mask': 0x9, 'src': self.pg0.remote_ip4, 'proto': 17,
-                          'dport': 6871},
-                'rewrite': {'mask': 0x1, 'src': '11.11.11.11'},
-                'send': (IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4) /
-                         UDP(dport=6871)),
-                'reply': (IP(src='11.11.11.11', dst=self.pg1.remote_ip4) /
-                          UDP(dport=6871))
+                "input": PNAT_IP4_OUTPUT,
+                "sw_if_index": self.pg1.sw_if_index,
+                "match": {
+                    "mask": 0x9,
+                    "src": self.pg0.remote_ip4,
+                    "proto": 17,
+                    "dport": 6871,
+                },
+                "rewrite": {"mask": 0x1, "src": "11.11.11.11"},
+                "send": (
+                    IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4)
+                    / UDP(dport=6871)
+                ),
+                "reply": (
+                    IP(src="11.11.11.11", dst=self.pg1.remote_ip4) / UDP(dport=6871)
+                ),
             },
             {
             },
             {
-                'input': PNAT_IP4_INPUT,
-                'sw_if_index': self.pg0.sw_if_index,
-                'match': {'mask': 0xa, 'dst': '10.10.10.10', 'proto': 17,
-                          'dport': 6871},
-                'rewrite': {'mask': 0xa, 'dst': self.pg1.remote_ip4,
-                            'dport': 5555},
-                'send': (IP(src=self.pg0.remote_ip4, dst='10.10.10.10') /
-                         UDP(sport=65530, dport=6871)),
-                'reply': (IP(src=self.pg0.remote_ip4,
-                             dst=self.pg1.remote_ip4) /
-                          UDP(sport=65530, dport=5555))
+                "input": PNAT_IP4_INPUT,
+                "sw_if_index": self.pg0.sw_if_index,
+                "match": {
+                    "mask": 0xA,
+                    "dst": "10.10.10.10",
+                    "proto": 17,
+                    "dport": 6871,
+                },
+                "rewrite": {"mask": 0xA, "dst": self.pg1.remote_ip4, "dport": 5555},
+                "send": (
+                    IP(src=self.pg0.remote_ip4, dst="10.10.10.10")
+                    / UDP(sport=65530, dport=6871)
+                ),
+                "reply": (
+                    IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4)
+                    / UDP(sport=65530, dport=5555)
+                ),
             },
             {
             },
             {
-                'input': PNAT_IP4_INPUT,
-                'sw_if_index': self.pg0.sw_if_index,
-                'match': {'mask': 0xa, 'dst': self.pg1.remote_ip4, 'proto': 17,
-                          'dport': 6871},
-                'rewrite': {'mask': 0x8, 'dport': 5555},
-                'send': (IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4) /
-                         UDP(dport=6871, chksum=0)),
-                'reply': (IP(src=self.pg0.remote_ip4,
-                             dst=self.pg1.remote_ip4) /
-                          UDP(dport=5555, chksum=0))
+                "input": PNAT_IP4_INPUT,
+                "sw_if_index": self.pg0.sw_if_index,
+                "match": {
+                    "mask": 0xA,
+                    "dst": self.pg1.remote_ip4,
+                    "proto": 17,
+                    "dport": 6871,
+                },
+                "rewrite": {"mask": 0x8, "dport": 5555},
+                "send": (
+                    IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4)
+                    / UDP(dport=6871, chksum=0)
+                ),
+                "reply": (
+                    IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4)
+                    / UDP(dport=5555, chksum=0)
+                ),
             },
             {
             },
             {
-                'input': PNAT_IP4_INPUT,
-                'sw_if_index': self.pg0.sw_if_index,
-                'match': {'mask': 0x2, 'dst': self.pg1.remote_ip4, 'proto': 1},
-                'rewrite': {'mask': 0x1, 'src': '8.8.8.8'},
-                'send': (IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4) /
-                         ICMP()),
-                'reply': IP(src='8.8.8.8', dst=self.pg1.remote_ip4)/ICMP(),
+                "input": PNAT_IP4_INPUT,
+                "sw_if_index": self.pg0.sw_if_index,
+                "match": {"mask": 0x2, "dst": self.pg1.remote_ip4, "proto": 1},
+                "rewrite": {"mask": 0x1, "src": "8.8.8.8"},
+                "send": (IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4) / ICMP()),
+                "reply": IP(src="8.8.8.8", dst=self.pg1.remote_ip4) / ICMP(),
             },
         ]
 
         p_ether = Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
         for t in tests:
             },
         ]
 
         p_ether = Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
         for t in tests:
-            rv = self.vapi.pnat_binding_add(match=t['match'],
-                                            rewrite=t['rewrite'])
-            self.vapi.pnat_binding_attach(sw_if_index=t['sw_if_index'],
-                                          attachment=t['input'],
-                                          binding_index=rv.binding_index)
-
-            reply = t['reply']
+            rv = self.vapi.pnat_binding_add(match=t["match"], rewrite=t["rewrite"])
+            self.vapi.pnat_binding_attach(
+                sw_if_index=t["sw_if_index"],
+                attachment=t["input"],
+                binding_index=rv.binding_index,
+            )
+
+            reply = t["reply"]
             reply[IP].ttl -= 1
             reply[IP].ttl -= 1
-            rx = self.send_and_expect(self.pg0, p_ether/t['send']*1, self.pg1)
+            rx = self.send_and_expect(self.pg0, p_ether / t["send"] * 1, self.pg1)
             for p in rx:
                 # p.show2()
                 self.validate(p[1], reply)
 
             self.ping_check()
 
             for p in rx:
                 # p.show2()
                 self.validate(p[1], reply)
 
             self.ping_check()
 
-            self.vapi.pnat_binding_detach(sw_if_index=t['sw_if_index'],
-                                          attachment=t['input'],
-                                          binding_index=rv.binding_index)
+            self.vapi.pnat_binding_detach(
+                sw_if_index=t["sw_if_index"],
+                attachment=t["input"],
+                binding_index=rv.binding_index,
+            )
             self.vapi.pnat_binding_del(binding_index=rv.binding_index)
 
     def test_pnat_show(self):
             self.vapi.pnat_binding_del(binding_index=rv.binding_index)
 
     def test_pnat_show(self):
-        """ PNAT show tests """
+        """PNAT show tests"""
 
         PNAT_IP4_INPUT = VppEnum.vl_api_pnat_attachment_point_t.PNAT_IP4_INPUT
 
         PNAT_IP4_INPUT = VppEnum.vl_api_pnat_attachment_point_t.PNAT_IP4_INPUT
-        PNAT_IP4_OUTPUT = \
-            VppEnum.vl_api_pnat_attachment_point_t.PNAT_IP4_OUTPUT
+        PNAT_IP4_OUTPUT = VppEnum.vl_api_pnat_attachment_point_t.PNAT_IP4_OUTPUT
 
         tests = [
             {
 
         tests = [
             {
-                'input': PNAT_IP4_INPUT,
-                'sw_if_index': self.pg0.sw_if_index,
-                'match': {'mask': 0xa, 'dst': '10.10.10.10', 'proto': 17,
-                          'dport': 6871},
-                'rewrite': {'mask': 0x2, 'dst': self.pg1.remote_ip4},
-                'send': (IP(src=self.pg0.remote_ip4, dst='10.10.10.10') /
-                         UDP(dport=6871)),
-                'reply': (IP(src=self.pg0.remote_ip4,
-                             dst=self.pg1.remote_ip4) /
-                          UDP(dport=6871))
+                "input": PNAT_IP4_INPUT,
+                "sw_if_index": self.pg0.sw_if_index,
+                "match": {
+                    "mask": 0xA,
+                    "dst": "10.10.10.10",
+                    "proto": 17,
+                    "dport": 6871,
+                },
+                "rewrite": {"mask": 0x2, "dst": self.pg1.remote_ip4},
+                "send": (
+                    IP(src=self.pg0.remote_ip4, dst="10.10.10.10") / UDP(dport=6871)
+                ),
+                "reply": (
+                    IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4)
+                    / UDP(dport=6871)
+                ),
             },
             {
             },
             {
-                'input': PNAT_IP4_OUTPUT,
-                'sw_if_index': self.pg1.sw_if_index,
-                'match': {'mask': 0x9, 'src': self.pg0.remote_ip4, 'proto': 17,
-                          'dport': 6871},
-                'rewrite': {'mask': 0x1, 'src': '11.11.11.11'},
-                'send': (IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4) /
-                         UDP(dport=6871)),
-                'reply': (IP(src='11.11.11.11', dst=self.pg1.remote_ip4) /
-                          UDP(dport=6871))
+                "input": PNAT_IP4_OUTPUT,
+                "sw_if_index": self.pg1.sw_if_index,
+                "match": {
+                    "mask": 0x9,
+                    "src": self.pg0.remote_ip4,
+                    "proto": 17,
+                    "dport": 6871,
+                },
+                "rewrite": {"mask": 0x1, "src": "11.11.11.11"},
+                "send": (
+                    IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4)
+                    / UDP(dport=6871)
+                ),
+                "reply": (
+                    IP(src="11.11.11.11", dst=self.pg1.remote_ip4) / UDP(dport=6871)
+                ),
             },
         ]
         binding_index = []
         for t in tests:
             },
         ]
         binding_index = []
         for t in tests:
-            rv = self.vapi.pnat_binding_add(match=t['match'],
-                                            rewrite=t['rewrite'])
+            rv = self.vapi.pnat_binding_add(match=t["match"], rewrite=t["rewrite"])
             binding_index.append(rv.binding_index)
             binding_index.append(rv.binding_index)
-            self.vapi.pnat_binding_attach(sw_if_index=t['sw_if_index'],
-                                          attachment=t['input'],
-                                          binding_index=rv.binding_index)
+            self.vapi.pnat_binding_attach(
+                sw_if_index=t["sw_if_index"],
+                attachment=t["input"],
+                binding_index=rv.binding_index,
+            )
 
         rv, l = self.vapi.pnat_bindings_get()
         self.assertEqual(len(l), len(tests))
 
         rv, l = self.vapi.pnat_bindings_get()
         self.assertEqual(len(l), len(tests))
@@ -194,10 +235,13 @@ class TestPNAT(VppTestCase):
         self.logger.info(self.vapi.cli("show pnat interfaces"))
 
         for i, t in enumerate(tests):
         self.logger.info(self.vapi.cli("show pnat interfaces"))
 
         for i, t in enumerate(tests):
-            self.vapi.pnat_binding_detach(sw_if_index=t['sw_if_index'],
-                                          attachment=t['input'],
-                                          binding_index=binding_index[i])
+            self.vapi.pnat_binding_detach(
+                sw_if_index=t["sw_if_index"],
+                attachment=t["input"],
+                binding_index=binding_index[i],
+            )
             self.vapi.pnat_binding_del(binding_index=binding_index[i])
 
             self.vapi.pnat_binding_del(binding_index=binding_index[i])
 
-if __name__ == '__main__':
+
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index 6b15a02..01ee2b7 100644 (file)
@@ -9,42 +9,53 @@ from vpp_policer import VppPolicer, PolicerAction
 # Default for the tests is 10s of "Green" packets at 8Mbps, ie. 10M bytes.
 # The policer helper CLI "sends" 500 byte packets, so default is 20000.
 
 # Default for the tests is 10s of "Green" packets at 8Mbps, ie. 10M bytes.
 # The policer helper CLI "sends" 500 byte packets, so default is 20000.
 
-TEST_RATE = 8000    # kbps
+TEST_RATE = 8000  # kbps
 TEST_BURST = 10000  # ms
 
 TEST_BURST = 10000  # ms
 
-CIR_OK = 8500       # CIR in kbps, above test rate
-CIR_LOW = 7000      # CIR in kbps, below test rate
-EIR_OK = 9000       # EIR in kbps, above test rate
-EIR_LOW = 7500      # EIR in kbps, below test rate
+CIR_OK = 8500  # CIR in kbps, above test rate
+CIR_LOW = 7000  # CIR in kbps, below test rate
+EIR_OK = 9000  # EIR in kbps, above test rate
+EIR_LOW = 7500  # EIR in kbps, below test rate
 
 NUM_PKTS = 20000
 
 
 NUM_PKTS = 20000
 
-CBURST = 100000     # Committed burst in bytes
-EBURST = 200000     # Excess burst in bytes
+CBURST = 100000  # Committed burst in bytes
+EBURST = 200000  # Excess burst in bytes
 
 
 class TestPolicer(VppTestCase):
 
 
 class TestPolicer(VppTestCase):
-    """ Policer Test Case """
+    """Policer Test Case"""
 
 
-    def run_policer_test(self, type, cir, cb, eir, eb, rate=8000, burst=10000,
-                         colour=0):
+    def run_policer_test(
+        self, type, cir, cb, eir, eb, rate=8000, burst=10000, colour=0
+    ):
         """
         Configure a Policer and push traffic through it.
         """
         types = {
         """
         Configure a Policer and push traffic through it.
         """
         types = {
-            '1R2C': 0,
-            '1R3C': 1,
-            '2R3C': 3,
+            "1R2C": 0,
+            "1R3C": 1,
+            "2R3C": 3,
         }
 
         pol_type = types.get(type)
         }
 
         pol_type = types.get(type)
-        policer = VppPolicer(self, "pol1", cir, eir, cb, eb, rate_type=0,
-                             type=pol_type, color_aware=colour)
+        policer = VppPolicer(
+            self,
+            "pol1",
+            cir,
+            eir,
+            cb,
+            eb,
+            rate_type=0,
+            type=pol_type,
+            color_aware=colour,
+        )
         policer.add_vpp_config()
 
         error = self.vapi.cli(
             f"test policing index {policer.policer_index} rate {rate} "
         policer.add_vpp_config()
 
         error = self.vapi.cli(
             f"test policing index {policer.policer_index} rate {rate} "
-            f"burst {burst} colour {colour}")
+            f"burst {burst} colour {colour}"
+        )
 
         stats = policer.get_stats()
         policer.remove_vpp_config()
 
         stats = policer.get_stats()
         policer.remove_vpp_config()
@@ -52,66 +63,64 @@ class TestPolicer(VppTestCase):
         return stats
 
     def test_policer_1r2c(self):
         return stats
 
     def test_policer_1r2c(self):
-        """ Single rate, 2 colour policer """
+        """Single rate, 2 colour policer"""
         stats = self.run_policer_test("1R2C", CIR_OK, CBURST, 0, 0)
         stats = self.run_policer_test("1R2C", CIR_OK, CBURST, 0, 0)
-        self.assertEqual(stats['conform_packets'], NUM_PKTS)
+        self.assertEqual(stats["conform_packets"], NUM_PKTS)
 
         stats = self.run_policer_test("1R2C", CIR_LOW, CBURST, 0, 0)
 
         stats = self.run_policer_test("1R2C", CIR_LOW, CBURST, 0, 0)
-        self.assertLess(stats['conform_packets'], NUM_PKTS)
-        self.assertEqual(stats['exceed_packets'], 0)
-        self.assertGreater(stats['violate_packets'], 0)
+        self.assertLess(stats["conform_packets"], NUM_PKTS)
+        self.assertEqual(stats["exceed_packets"], 0)
+        self.assertGreater(stats["violate_packets"], 0)
 
         stats = self.run_policer_test("1R2C", CIR_LOW, CBURST, 0, 0, colour=2)
 
         stats = self.run_policer_test("1R2C", CIR_LOW, CBURST, 0, 0, colour=2)
-        self.assertEqual(stats['violate_packets'], NUM_PKTS)
+        self.assertEqual(stats["violate_packets"], NUM_PKTS)
 
     def test_policer_1r3c(self):
 
     def test_policer_1r3c(self):
-        """ Single rate, 3 colour policer """
+        """Single rate, 3 colour policer"""
         stats = self.run_policer_test("1R3C", CIR_OK, CBURST, 0, 0)
         stats = self.run_policer_test("1R3C", CIR_OK, CBURST, 0, 0)
-        self.assertEqual(stats['conform_packets'], NUM_PKTS)
+        self.assertEqual(stats["conform_packets"], NUM_PKTS)
 
         stats = self.run_policer_test("1R3C", CIR_LOW, CBURST, 0, EBURST)
 
         stats = self.run_policer_test("1R3C", CIR_LOW, CBURST, 0, EBURST)
-        self.assertLess(stats['conform_packets'], NUM_PKTS)
-        self.assertGreater(stats['exceed_packets'], 0)
-        self.assertGreater(stats['violate_packets'], 0)
+        self.assertLess(stats["conform_packets"], NUM_PKTS)
+        self.assertGreater(stats["exceed_packets"], 0)
+        self.assertGreater(stats["violate_packets"], 0)
 
 
-        stats = self.run_policer_test("1R3C", CIR_LOW, CBURST, 0, EBURST,
-                                      colour=1)
-        self.assertEqual(stats['conform_packets'], 0)
-        self.assertGreater(stats['exceed_packets'], 0)
-        self.assertGreater(stats['violate_packets'], 0)
+        stats = self.run_policer_test("1R3C", CIR_LOW, CBURST, 0, EBURST, colour=1)
+        self.assertEqual(stats["conform_packets"], 0)
+        self.assertGreater(stats["exceed_packets"], 0)
+        self.assertGreater(stats["violate_packets"], 0)
 
 
-        stats = self.run_policer_test("1R3C", CIR_LOW, CBURST, 0, EBURST,
-                                      colour=2)
-        self.assertEqual(stats['violate_packets'], NUM_PKTS)
+        stats = self.run_policer_test("1R3C", CIR_LOW, CBURST, 0, EBURST, colour=2)
+        self.assertEqual(stats["violate_packets"], NUM_PKTS)
 
     def test_policer_2r3c(self):
 
     def test_policer_2r3c(self):
-        """ Dual rate, 3 colour policer """
+        """Dual rate, 3 colour policer"""
         stats = self.run_policer_test("2R3C", CIR_OK, CBURST, EIR_OK, EBURST)
         stats = self.run_policer_test("2R3C", CIR_OK, CBURST, EIR_OK, EBURST)
-        self.assertEqual(stats['conform_packets'], NUM_PKTS)
+        self.assertEqual(stats["conform_packets"], NUM_PKTS)
 
         stats = self.run_policer_test("2R3C", CIR_LOW, CBURST, EIR_OK, EBURST)
 
         stats = self.run_policer_test("2R3C", CIR_LOW, CBURST, EIR_OK, EBURST)
-        self.assertLess(stats['conform_packets'], NUM_PKTS)
-        self.assertGreater(stats['exceed_packets'], 0)
-        self.assertEqual(stats['violate_packets'], 0)
+        self.assertLess(stats["conform_packets"], NUM_PKTS)
+        self.assertGreater(stats["exceed_packets"], 0)
+        self.assertEqual(stats["violate_packets"], 0)
 
         stats = self.run_policer_test("2R3C", CIR_LOW, CBURST, EIR_LOW, EBURST)
 
         stats = self.run_policer_test("2R3C", CIR_LOW, CBURST, EIR_LOW, EBURST)
-        self.assertLess(stats['conform_packets'], NUM_PKTS)
-        self.assertGreater(stats['exceed_packets'], 0)
-        self.assertGreater(stats['violate_packets'], 0)
+        self.assertLess(stats["conform_packets"], NUM_PKTS)
+        self.assertGreater(stats["exceed_packets"], 0)
+        self.assertGreater(stats["violate_packets"], 0)
 
 
-        stats = self.run_policer_test("2R3C", CIR_LOW, CBURST, EIR_OK, EBURST,
-                                      colour=1)
-        self.assertEqual(stats['exceed_packets'], NUM_PKTS)
+        stats = self.run_policer_test("2R3C", CIR_LOW, CBURST, EIR_OK, EBURST, colour=1)
+        self.assertEqual(stats["exceed_packets"], NUM_PKTS)
 
 
-        stats = self.run_policer_test("2R3C", CIR_LOW, CBURST, EIR_LOW, EBURST,
-                                      colour=1)
-        self.assertEqual(stats['conform_packets'], 0)
-        self.assertGreater(stats['exceed_packets'], 0)
-        self.assertGreater(stats['violate_packets'], 0)
+        stats = self.run_policer_test(
+            "2R3C", CIR_LOW, CBURST, EIR_LOW, EBURST, colour=1
+        )
+        self.assertEqual(stats["conform_packets"], 0)
+        self.assertGreater(stats["exceed_packets"], 0)
+        self.assertGreater(stats["violate_packets"], 0)
 
 
-        stats = self.run_policer_test("2R3C", CIR_LOW, CBURST, EIR_OK, EBURST,
-                                      colour=2)
-        self.assertEqual(stats['violate_packets'], NUM_PKTS)
+        stats = self.run_policer_test("2R3C", CIR_LOW, CBURST, EIR_OK, EBURST, colour=2)
+        self.assertEqual(stats["violate_packets"], NUM_PKTS)
 
 
-if __name__ == '__main__':
+
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index 9a4266c..9d44fc1 100644 (file)
@@ -14,7 +14,8 @@ NUM_PKTS = 67
 
 
 class TestPolicerInput(VppTestCase):
 
 
 class TestPolicerInput(VppTestCase):
-    """ Policer on an interface """
+    """Policer on an interface"""
+
     vpp_worker_count = 2
 
     def setUp(self):
     vpp_worker_count = 2
 
     def setUp(self):
@@ -26,11 +27,12 @@ class TestPolicerInput(VppTestCase):
             i.config_ip4()
             i.resolve_arp()
 
             i.config_ip4()
             i.resolve_arp()
 
-        self.pkt = (Ether(src=self.pg0.remote_mac,
-                          dst=self.pg0.local_mac) /
-                    IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4) /
-                    UDP(sport=1234, dport=1234) /
-                    Raw(b'\xa5' * 100))
+        self.pkt = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4)
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
 
     def tearDown(self):
         for i in self.pg_interfaces:
 
     def tearDown(self):
         for i in self.pg_interfaces:
@@ -42,17 +44,22 @@ class TestPolicerInput(VppTestCase):
         pkts = self.pkt * NUM_PKTS
 
         action_tx = PolicerAction(
         pkts = self.pkt * NUM_PKTS
 
         action_tx = PolicerAction(
-            VppEnum.vl_api_sse2_qos_action_type_t.SSE2_QOS_ACTION_API_TRANSMIT,
-            0)
-        policer = VppPolicer(self, "pol1", 80, 0, 1000, 0,
-                             conform_action=action_tx,
-                             exceed_action=action_tx,
-                             violate_action=action_tx)
+            VppEnum.vl_api_sse2_qos_action_type_t.SSE2_QOS_ACTION_API_TRANSMIT, 0
+        )
+        policer = VppPolicer(
+            self,
+            "pol1",
+            80,
+            0,
+            1000,
+            0,
+            conform_action=action_tx,
+            exceed_action=action_tx,
+            violate_action=action_tx,
+        )
         policer.add_vpp_config()
 
         policer.add_vpp_config()
 
-        sw_if_index = (self.pg0.sw_if_index
-                       if dir == Dir.RX
-                       else self.pg1.sw_if_index)
+        sw_if_index = self.pg0.sw_if_index if dir == Dir.RX else self.pg1.sw_if_index
 
         # Start policing on pg0
         policer.apply_vpp_config(sw_if_index, dir, True)
 
         # Start policing on pg0
         policer.apply_vpp_config(sw_if_index, dir, True)
@@ -61,9 +68,9 @@ class TestPolicerInput(VppTestCase):
         stats = policer.get_stats()
 
         # Single rate, 2 colour policer - expect conform, violate but no exceed
         stats = policer.get_stats()
 
         # Single rate, 2 colour policer - expect conform, violate but no exceed
-        self.assertGreater(stats['conform_packets'], 0)
-        self.assertEqual(stats['exceed_packets'], 0)
-        self.assertGreater(stats['violate_packets'], 0)
+        self.assertGreater(stats["conform_packets"], 0)
+        self.assertEqual(stats["exceed_packets"], 0)
+        self.assertGreater(stats["violate_packets"], 0)
 
         # Stop policing on pg0
         policer.apply_vpp_config(sw_if_index, dir, False)
 
         # Stop policing on pg0
         policer.apply_vpp_config(sw_if_index, dir, False)
@@ -78,28 +85,33 @@ class TestPolicerInput(VppTestCase):
         policer.remove_vpp_config()
 
     def test_policer_input(self):
         policer.remove_vpp_config()
 
     def test_policer_input(self):
-        """ Input Policing """
+        """Input Policing"""
         self.policer_interface_test(Dir.RX)
 
     def test_policer_output(self):
         self.policer_interface_test(Dir.RX)
 
     def test_policer_output(self):
-        """ Output Policing """
+        """Output Policing"""
         self.policer_interface_test(Dir.TX)
 
     def policer_handoff_test(self, dir: Dir):
         pkts = self.pkt * NUM_PKTS
 
         action_tx = PolicerAction(
         self.policer_interface_test(Dir.TX)
 
     def policer_handoff_test(self, dir: Dir):
         pkts = self.pkt * NUM_PKTS
 
         action_tx = PolicerAction(
-            VppEnum.vl_api_sse2_qos_action_type_t.SSE2_QOS_ACTION_API_TRANSMIT,
-            0)
-        policer = VppPolicer(self, "pol2", 80, 0, 1000, 0,
-                             conform_action=action_tx,
-                             exceed_action=action_tx,
-                             violate_action=action_tx)
+            VppEnum.vl_api_sse2_qos_action_type_t.SSE2_QOS_ACTION_API_TRANSMIT, 0
+        )
+        policer = VppPolicer(
+            self,
+            "pol2",
+            80,
+            0,
+            1000,
+            0,
+            conform_action=action_tx,
+            exceed_action=action_tx,
+            violate_action=action_tx,
+        )
         policer.add_vpp_config()
 
         policer.add_vpp_config()
 
-        sw_if_index = (self.pg0.sw_if_index
-                       if dir == Dir.RX
-                       else self.pg1.sw_if_index)
+        sw_if_index = self.pg0.sw_if_index if dir == Dir.RX else self.pg1.sw_if_index
 
         # Bind the policer to worker 1
         policer.bind_vpp_config(1, True)
 
         # Bind the policer to worker 1
         policer.bind_vpp_config(1, True)
@@ -119,9 +131,9 @@ class TestPolicerInput(VppTestCase):
         self.assertEqual(stats, stats1)
 
         # Worker 0, should have handed everything off
         self.assertEqual(stats, stats1)
 
         # Worker 0, should have handed everything off
-        self.assertEqual(stats0['conform_packets'], 0)
-        self.assertEqual(stats0['exceed_packets'], 0)
-        self.assertEqual(stats0['violate_packets'], 0)
+        self.assertEqual(stats0["conform_packets"], 0)
+        self.assertEqual(stats0["exceed_packets"], 0)
+        self.assertEqual(stats0["violate_packets"], 0)
 
         # Unbind the policer from worker 1 and repeat
         policer.bind_vpp_config(1, False)
 
         # Unbind the policer from worker 1 and repeat
         policer.bind_vpp_config(1, False)
@@ -137,19 +149,23 @@ class TestPolicerInput(VppTestCase):
         stats0 = policer.get_stats(worker=0)
         stats1 = policer.get_stats(worker=1)
 
         stats0 = policer.get_stats(worker=0)
         stats1 = policer.get_stats(worker=1)
 
-        self.assertGreater(stats0['conform_packets'], 0)
-        self.assertEqual(stats0['exceed_packets'], 0)
-        self.assertGreater(stats0['violate_packets'], 0)
+        self.assertGreater(stats0["conform_packets"], 0)
+        self.assertEqual(stats0["exceed_packets"], 0)
+        self.assertGreater(stats0["violate_packets"], 0)
 
 
-        self.assertGreater(stats1['conform_packets'], 0)
-        self.assertEqual(stats1['exceed_packets'], 0)
-        self.assertGreater(stats1['violate_packets'], 0)
+        self.assertGreater(stats1["conform_packets"], 0)
+        self.assertEqual(stats1["exceed_packets"], 0)
+        self.assertGreater(stats1["violate_packets"], 0)
 
 
-        self.assertEqual(stats0['conform_packets'] + stats1['conform_packets'],
-                         stats['conform_packets'])
+        self.assertEqual(
+            stats0["conform_packets"] + stats1["conform_packets"],
+            stats["conform_packets"],
+        )
 
 
-        self.assertEqual(stats0['violate_packets'] + stats1['violate_packets'],
-                         stats['violate_packets'])
+        self.assertEqual(
+            stats0["violate_packets"] + stats1["violate_packets"],
+            stats["violate_packets"],
+        )
 
         # Stop policing on pg0
         policer.apply_vpp_config(sw_if_index, dir, False)
 
         # Stop policing on pg0
         policer.apply_vpp_config(sw_if_index, dir, False)
@@ -157,13 +173,13 @@ class TestPolicerInput(VppTestCase):
         policer.remove_vpp_config()
 
     def test_policer_handoff_input(self):
         policer.remove_vpp_config()
 
     def test_policer_handoff_input(self):
-        """ Worker thread handoff policer input"""
+        """Worker thread handoff policer input"""
         self.policer_handoff_test(Dir.RX)
 
     def test_policer_handoff_output(self):
         self.policer_handoff_test(Dir.RX)
 
     def test_policer_handoff_output(self):
-        """ Worker thread handoff policer output"""
+        """Worker thread handoff policer output"""
         self.policer_handoff_test(Dir.TX)
 
 
         self.policer_handoff_test(Dir.TX)
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index 99dba01..c83d7d5 100644 (file)
@@ -15,7 +15,7 @@ from util import ppp, ppc
 
 
 class TestPPPoE(VppTestCase):
 
 
 class TestPPPoE(VppTestCase):
-    """ PPPoE Test Case """
+    """PPPoE Test Case"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -54,8 +54,7 @@ class TestPPPoE(VppTestCase):
         self.logger.info(self.vapi.cli("show ip fib"))
         self.logger.info(self.vapi.cli("show trace"))
 
         self.logger.info(self.vapi.cli("show ip fib"))
         self.logger.info(self.vapi.cli("show trace"))
 
-    def create_stream_pppoe_discovery(self, src_if, dst_if,
-                                      client_mac, count=1):
+    def create_stream_pppoe_discovery(self, src_if, dst_if, client_mac, count=1):
         packets = []
         for i in range(count):
             # create packet info stored in the test case instance
         packets = []
         for i in range(count):
             # create packet info stored in the test case instance
@@ -63,9 +62,11 @@ class TestPPPoE(VppTestCase):
             # convert the info into packet payload
             payload = self.info_to_payload(info)
             # create the packet itself
             # convert the info into packet payload
             payload = self.info_to_payload(info)
             # create the packet itself
-            p = (Ether(dst=src_if.local_mac, src=client_mac) /
-                 PPPoED(sessionid=0) /
-                 Raw(payload))
+            p = (
+                Ether(dst=src_if.local_mac, src=client_mac)
+                / PPPoED(sessionid=0)
+                / Raw(payload)
+            )
             # store a copy of the packet in the packet info
             info.data = p.copy()
             # append the packet to the list
             # store a copy of the packet in the packet info
             info.data = p.copy()
             # append the packet to the list
@@ -74,8 +75,7 @@ class TestPPPoE(VppTestCase):
         # return the created packet list
         return packets
 
         # return the created packet list
         return packets
 
-    def create_stream_pppoe_lcp(self, src_if, dst_if,
-                                client_mac, session_id, count=1):
+    def create_stream_pppoe_lcp(self, src_if, dst_if, client_mac, session_id, count=1):
         packets = []
         for i in range(count):
             # create packet info stored in the test case instance
         packets = []
         for i in range(count):
             # create packet info stored in the test case instance
@@ -83,10 +83,12 @@ class TestPPPoE(VppTestCase):
             # convert the info into packet payload
             payload = self.info_to_payload(info)
             # create the packet itself
             # convert the info into packet payload
             payload = self.info_to_payload(info)
             # create the packet itself
-            p = (Ether(dst=src_if.local_mac, src=client_mac) /
-                 PPPoE(sessionid=session_id) /
-                 PPP(proto=0xc021) /
-                 Raw(payload))
+            p = (
+                Ether(dst=src_if.local_mac, src=client_mac)
+                / PPPoE(sessionid=session_id)
+                / PPP(proto=0xC021)
+                / Raw(payload)
+            )
             # store a copy of the packet in the packet info
             info.data = p.copy()
             # append the packet to the list
             # store a copy of the packet in the packet info
             info.data = p.copy()
             # append the packet to the list
@@ -95,8 +97,9 @@ class TestPPPoE(VppTestCase):
         # return the created packet list
         return packets
 
         # return the created packet list
         return packets
 
-    def create_stream_pppoe_ip4(self, src_if, dst_if,
-                                client_mac, session_id, client_ip, count=1):
+    def create_stream_pppoe_ip4(
+        self, src_if, dst_if, client_mac, session_id, client_ip, count=1
+    ):
         packets = []
         for i in range(count):
             # create packet info stored in the test case instance
         packets = []
         for i in range(count):
             # create packet info stored in the test case instance
@@ -104,11 +107,13 @@ class TestPPPoE(VppTestCase):
             # convert the info into packet payload
             payload = self.info_to_payload(info)
             # create the packet itself
             # convert the info into packet payload
             payload = self.info_to_payload(info)
             # create the packet itself
-            p = (Ether(dst=src_if.local_mac, src=client_mac) /
-                 PPPoE(sessionid=session_id) /
-                 PPP(proto=0x0021) /
-                 IP(src=client_ip, dst=self.dst_ip) /
-                 Raw(payload))
+            p = (
+                Ether(dst=src_if.local_mac, src=client_mac)
+                / PPPoE(sessionid=session_id)
+                / PPP(proto=0x0021)
+                / IP(src=client_ip, dst=self.dst_ip)
+                / Raw(payload)
+            )
             # store a copy of the packet in the packet info
             info.data = p.copy()
             # append the packet to the list
             # store a copy of the packet in the packet info
             info.data = p.copy()
             # append the packet to the list
@@ -125,9 +130,11 @@ class TestPPPoE(VppTestCase):
             # convert the info into packet payload
             payload = self.info_to_payload(info)
             # create the packet itself
             # convert the info into packet payload
             payload = self.info_to_payload(info)
             # create the packet itself
-            p = (Ether(dst=src_if.local_mac, src=src_if.remote_mac) /
-                 IP(src=dst_ip, dst=client_ip) /
-                 Raw(payload))
+            p = (
+                Ether(dst=src_if.local_mac, src=src_if.remote_mac)
+                / IP(src=dst_ip, dst=client_ip)
+                / Raw(payload)
+            )
             # store a copy of the packet in the packet info
             info.data = p.copy()
             # append the packet to the list
             # store a copy of the packet in the packet info
             info.data = p.copy()
             # append the packet to the list
@@ -180,36 +187,39 @@ class TestPPPoE(VppTestCase):
                 raise
 
     def test_PPPoE_Decap(self):
                 raise
 
     def test_PPPoE_Decap(self):
-        """ PPPoE Decap Test """
+        """PPPoE Decap Test"""
 
         self.vapi.cli("clear trace")
 
         #
         # Add a route that resolves the server's destination
         #
 
         self.vapi.cli("clear trace")
 
         #
         # Add a route that resolves the server's destination
         #
-        route_sever_dst = VppIpRoute(self, "100.1.1.100", 32,
-                                     [VppRoutePath(self.pg1.remote_ip4,
-                                                   self.pg1.sw_if_index)])
+        route_sever_dst = VppIpRoute(
+            self,
+            "100.1.1.100",
+            32,
+            [VppRoutePath(self.pg1.remote_ip4, self.pg1.sw_if_index)],
+        )
         route_sever_dst.add_vpp_config()
 
         # Send PPPoE Discovery
         route_sever_dst.add_vpp_config()
 
         # Send PPPoE Discovery
-        tx0 = self.create_stream_pppoe_discovery(self.pg0, self.pg1,
-                                                 self.pg0.remote_mac)
+        tx0 = self.create_stream_pppoe_discovery(
+            self.pg0, self.pg1, self.pg0.remote_mac
+        )
         self.pg0.add_stream(tx0)
         self.pg_start()
 
         # Send PPPoE PPP LCP
         self.pg0.add_stream(tx0)
         self.pg_start()
 
         # Send PPPoE PPP LCP
-        tx1 = self.create_stream_pppoe_lcp(self.pg0, self.pg1,
-                                           self.pg0.remote_mac,
-                                           self.session_id)
+        tx1 = self.create_stream_pppoe_lcp(
+            self.pg0, self.pg1, self.pg0.remote_mac, self.session_id
+        )
         self.pg0.add_stream(tx1)
         self.pg_start()
 
         # Create PPPoE session
         self.pg0.add_stream(tx1)
         self.pg_start()
 
         # Create PPPoE session
-        pppoe_if = VppPppoeInterface(self,
-                                     self.pg0.remote_ip4,
-                                     self.pg0.remote_mac,
-                                     self.session_id)
+        pppoe_if = VppPppoeInterface(
+            self, self.pg0.remote_ip4, self.pg0.remote_mac, self.session_id
+        )
         pppoe_if.add_vpp_config()
         pppoe_if.set_unnumbered(self.pg0.sw_if_index)
 
         pppoe_if.add_vpp_config()
         pppoe_if.set_unnumbered(self.pg0.sw_if_index)
 
@@ -217,10 +227,13 @@ class TestPPPoE(VppTestCase):
         # Send tunneled packets that match the created tunnel and
         # are decapped and forwarded
         #
         # Send tunneled packets that match the created tunnel and
         # are decapped and forwarded
         #
-        tx2 = self.create_stream_pppoe_ip4(self.pg0, self.pg1,
-                                           self.pg0.remote_mac,
-                                           self.session_id,
-                                           self.pg0.remote_ip4)
+        tx2 = self.create_stream_pppoe_ip4(
+            self.pg0,
+            self.pg1,
+            self.pg0.remote_mac,
+            self.session_id,
+            self.pg0.remote_ip4,
+        )
         self.pg0.add_stream(tx2)
 
         self.pg_enable_capture(self.pg_interfaces)
         self.pg0.add_stream(tx2)
 
         self.pg_enable_capture(self.pg_interfaces)
@@ -244,36 +257,39 @@ class TestPPPoE(VppTestCase):
         route_sever_dst.remove_vpp_config()
 
     def test_PPPoE_Encap(self):
         route_sever_dst.remove_vpp_config()
 
     def test_PPPoE_Encap(self):
-        """ PPPoE Encap Test """
+        """PPPoE Encap Test"""
 
         self.vapi.cli("clear trace")
 
         #
         # Add a route that resolves the server's destination
         #
 
         self.vapi.cli("clear trace")
 
         #
         # Add a route that resolves the server's destination
         #
-        route_sever_dst = VppIpRoute(self, "100.1.1.100", 32,
-                                     [VppRoutePath(self.pg1.remote_ip4,
-                                                   self.pg1.sw_if_index)])
+        route_sever_dst = VppIpRoute(
+            self,
+            "100.1.1.100",
+            32,
+            [VppRoutePath(self.pg1.remote_ip4, self.pg1.sw_if_index)],
+        )
         route_sever_dst.add_vpp_config()
 
         # Send PPPoE Discovery
         route_sever_dst.add_vpp_config()
 
         # Send PPPoE Discovery
-        tx0 = self.create_stream_pppoe_discovery(self.pg0, self.pg1,
-                                                 self.pg0.remote_mac)
+        tx0 = self.create_stream_pppoe_discovery(
+            self.pg0, self.pg1, self.pg0.remote_mac
+        )
         self.pg0.add_stream(tx0)
         self.pg_start()
 
         # Send PPPoE PPP LCP
         self.pg0.add_stream(tx0)
         self.pg_start()
 
         # Send PPPoE PPP LCP
-        tx1 = self.create_stream_pppoe_lcp(self.pg0, self.pg1,
-                                           self.pg0.remote_mac,
-                                           self.session_id)
+        tx1 = self.create_stream_pppoe_lcp(
+            self.pg0, self.pg1, self.pg0.remote_mac, self.session_id
+        )
         self.pg0.add_stream(tx1)
         self.pg_start()
 
         # Create PPPoE session
         self.pg0.add_stream(tx1)
         self.pg_start()
 
         # Create PPPoE session
-        pppoe_if = VppPppoeInterface(self,
-                                     self.pg0.remote_ip4,
-                                     self.pg0.remote_mac,
-                                     self.session_id)
+        pppoe_if = VppPppoeInterface(
+            self, self.pg0.remote_ip4, self.pg0.remote_mac, self.session_id
+        )
         pppoe_if.add_vpp_config()
         pppoe_if.set_unnumbered(self.pg0.sw_if_index)
 
         pppoe_if.add_vpp_config()
         pppoe_if.set_unnumbered(self.pg0.sw_if_index)
 
@@ -282,8 +298,9 @@ class TestPPPoE(VppTestCase):
         #  - packets are PPPoE encapped
         #
         self.vapi.cli("clear trace")
         #  - packets are PPPoE encapped
         #
         self.vapi.cli("clear trace")
-        tx2 = self.create_stream_ip4(self.pg1, self.pg0,
-                                     self.pg0.remote_ip4, self.dst_ip, 65)
+        tx2 = self.create_stream_ip4(
+            self.pg1, self.pg0, self.pg0.remote_ip4, self.dst_ip, 65
+        )
         self.pg1.add_stream(tx2)
 
         self.pg_enable_capture(self.pg_interfaces)
         self.pg1.add_stream(tx2)
 
         self.pg_enable_capture(self.pg_interfaces)
@@ -308,36 +325,39 @@ class TestPPPoE(VppTestCase):
         route_sever_dst.remove_vpp_config()
 
     def test_PPPoE_Add_Twice(self):
         route_sever_dst.remove_vpp_config()
 
     def test_PPPoE_Add_Twice(self):
-        """ PPPoE Add Same Session Twice Test """
+        """PPPoE Add Same Session Twice Test"""
 
         self.vapi.cli("clear trace")
 
         #
         # Add a route that resolves the server's destination
         #
 
         self.vapi.cli("clear trace")
 
         #
         # Add a route that resolves the server's destination
         #
-        route_sever_dst = VppIpRoute(self, "100.1.1.100", 32,
-                                     [VppRoutePath(self.pg1.remote_ip4,
-                                                   self.pg1.sw_if_index)])
+        route_sever_dst = VppIpRoute(
+            self,
+            "100.1.1.100",
+            32,
+            [VppRoutePath(self.pg1.remote_ip4, self.pg1.sw_if_index)],
+        )
         route_sever_dst.add_vpp_config()
 
         # Send PPPoE Discovery
         route_sever_dst.add_vpp_config()
 
         # Send PPPoE Discovery
-        tx0 = self.create_stream_pppoe_discovery(self.pg0, self.pg1,
-                                                 self.pg0.remote_mac)
+        tx0 = self.create_stream_pppoe_discovery(
+            self.pg0, self.pg1, self.pg0.remote_mac
+        )
         self.pg0.add_stream(tx0)
         self.pg_start()
 
         # Send PPPoE PPP LCP
         self.pg0.add_stream(tx0)
         self.pg_start()
 
         # Send PPPoE PPP LCP
-        tx1 = self.create_stream_pppoe_lcp(self.pg0, self.pg1,
-                                           self.pg0.remote_mac,
-                                           self.session_id)
+        tx1 = self.create_stream_pppoe_lcp(
+            self.pg0, self.pg1, self.pg0.remote_mac, self.session_id
+        )
         self.pg0.add_stream(tx1)
         self.pg_start()
 
         # Create PPPoE session
         self.pg0.add_stream(tx1)
         self.pg_start()
 
         # Create PPPoE session
-        pppoe_if = VppPppoeInterface(self,
-                                     self.pg0.remote_ip4,
-                                     self.pg0.remote_mac,
-                                     self.session_id)
+        pppoe_if = VppPppoeInterface(
+            self, self.pg0.remote_ip4, self.pg0.remote_mac, self.session_id
+        )
         pppoe_if.add_vpp_config()
         pppoe_if.set_unnumbered(self.pg0.sw_if_index)
 
         pppoe_if.add_vpp_config()
         pppoe_if.set_unnumbered(self.pg0.sw_if_index)
 
@@ -363,36 +383,39 @@ class TestPPPoE(VppTestCase):
         route_sever_dst.remove_vpp_config()
 
     def test_PPPoE_Del_Twice(self):
         route_sever_dst.remove_vpp_config()
 
     def test_PPPoE_Del_Twice(self):
-        """ PPPoE Delete Same Session Twice Test """
+        """PPPoE Delete Same Session Twice Test"""
 
         self.vapi.cli("clear trace")
 
         #
         # Add a route that resolves the server's destination
         #
 
         self.vapi.cli("clear trace")
 
         #
         # Add a route that resolves the server's destination
         #
-        route_sever_dst = VppIpRoute(self, "100.1.1.100", 32,
-                                     [VppRoutePath(self.pg1.remote_ip4,
-                                                   self.pg1.sw_if_index)])
+        route_sever_dst = VppIpRoute(
+            self,
+            "100.1.1.100",
+            32,
+            [VppRoutePath(self.pg1.remote_ip4, self.pg1.sw_if_index)],
+        )
         route_sever_dst.add_vpp_config()
 
         # Send PPPoE Discovery
         route_sever_dst.add_vpp_config()
 
         # Send PPPoE Discovery
-        tx0 = self.create_stream_pppoe_discovery(self.pg0, self.pg1,
-                                                 self.pg0.remote_mac)
+        tx0 = self.create_stream_pppoe_discovery(
+            self.pg0, self.pg1, self.pg0.remote_mac
+        )
         self.pg0.add_stream(tx0)
         self.pg_start()
 
         # Send PPPoE PPP LCP
         self.pg0.add_stream(tx0)
         self.pg_start()
 
         # Send PPPoE PPP LCP
-        tx1 = self.create_stream_pppoe_lcp(self.pg0, self.pg1,
-                                           self.pg0.remote_mac,
-                                           self.session_id)
+        tx1 = self.create_stream_pppoe_lcp(
+            self.pg0, self.pg1, self.pg0.remote_mac, self.session_id
+        )
         self.pg0.add_stream(tx1)
         self.pg_start()
 
         # Create PPPoE session
         self.pg0.add_stream(tx1)
         self.pg_start()
 
         # Create PPPoE session
-        pppoe_if = VppPppoeInterface(self,
-                                     self.pg0.remote_ip4,
-                                     self.pg0.remote_mac,
-                                     self.session_id)
+        pppoe_if = VppPppoeInterface(
+            self, self.pg0.remote_ip4, self.pg0.remote_mac, self.session_id
+        )
         pppoe_if.add_vpp_config()
 
         # Delete PPPoE session
         pppoe_if.add_vpp_config()
 
         # Delete PPPoE session
@@ -417,57 +440,60 @@ class TestPPPoE(VppTestCase):
         route_sever_dst.remove_vpp_config()
 
     def test_PPPoE_Decap_Multiple(self):
         route_sever_dst.remove_vpp_config()
 
     def test_PPPoE_Decap_Multiple(self):
-        """ PPPoE Decap Multiple Sessions Test """
+        """PPPoE Decap Multiple Sessions Test"""
 
         self.vapi.cli("clear trace")
 
         #
         # Add a route that resolves the server's destination
         #
 
         self.vapi.cli("clear trace")
 
         #
         # Add a route that resolves the server's destination
         #
-        route_sever_dst = VppIpRoute(self, "100.1.1.100", 32,
-                                     [VppRoutePath(self.pg1.remote_ip4,
-                                                   self.pg1.sw_if_index)])
+        route_sever_dst = VppIpRoute(
+            self,
+            "100.1.1.100",
+            32,
+            [VppRoutePath(self.pg1.remote_ip4, self.pg1.sw_if_index)],
+        )
         route_sever_dst.add_vpp_config()
 
         # Send PPPoE Discovery 1
         route_sever_dst.add_vpp_config()
 
         # Send PPPoE Discovery 1
-        tx0 = self.create_stream_pppoe_discovery(self.pg0, self.pg1,
-                                                 self.pg0.remote_mac)
+        tx0 = self.create_stream_pppoe_discovery(
+            self.pg0, self.pg1, self.pg0.remote_mac
+        )
         self.pg0.add_stream(tx0)
         self.pg_start()
 
         # Send PPPoE PPP LCP 1
         self.pg0.add_stream(tx0)
         self.pg_start()
 
         # Send PPPoE PPP LCP 1
-        tx1 = self.create_stream_pppoe_lcp(self.pg0, self.pg1,
-                                           self.pg0.remote_mac,
-                                           self.session_id)
+        tx1 = self.create_stream_pppoe_lcp(
+            self.pg0, self.pg1, self.pg0.remote_mac, self.session_id
+        )
         self.pg0.add_stream(tx1)
         self.pg_start()
 
         # Create PPPoE session 1
         self.pg0.add_stream(tx1)
         self.pg_start()
 
         # Create PPPoE session 1
-        pppoe_if1 = VppPppoeInterface(self,
-                                      self.pg0.remote_ip4,
-                                      self.pg0.remote_mac,
-                                      self.session_id)
+        pppoe_if1 = VppPppoeInterface(
+            self, self.pg0.remote_ip4, self.pg0.remote_mac, self.session_id
+        )
         pppoe_if1.add_vpp_config()
         pppoe_if1.set_unnumbered(self.pg0.sw_if_index)
 
         # Send PPPoE Discovery 2
         pppoe_if1.add_vpp_config()
         pppoe_if1.set_unnumbered(self.pg0.sw_if_index)
 
         # Send PPPoE Discovery 2
-        tx3 = self.create_stream_pppoe_discovery(self.pg2, self.pg1,
-                                                 self.pg2.remote_mac)
+        tx3 = self.create_stream_pppoe_discovery(
+            self.pg2, self.pg1, self.pg2.remote_mac
+        )
         self.pg2.add_stream(tx3)
         self.pg_start()
 
         # Send PPPoE PPP LCP 2
         self.pg2.add_stream(tx3)
         self.pg_start()
 
         # Send PPPoE PPP LCP 2
-        tx4 = self.create_stream_pppoe_lcp(self.pg2, self.pg1,
-                                           self.pg2.remote_mac,
-                                           self.session_id + 1)
+        tx4 = self.create_stream_pppoe_lcp(
+            self.pg2, self.pg1, self.pg2.remote_mac, self.session_id + 1
+        )
         self.pg2.add_stream(tx4)
         self.pg_start()
 
         # Create PPPoE session 2
         self.pg2.add_stream(tx4)
         self.pg_start()
 
         # Create PPPoE session 2
-        pppoe_if2 = VppPppoeInterface(self,
-                                      self.pg2.remote_ip4,
-                                      self.pg2.remote_mac,
-                                      self.session_id + 1)
+        pppoe_if2 = VppPppoeInterface(
+            self, self.pg2.remote_ip4, self.pg2.remote_mac, self.session_id + 1
+        )
         pppoe_if2.add_vpp_config()
         pppoe_if2.set_unnumbered(self.pg0.sw_if_index)
 
         pppoe_if2.add_vpp_config()
         pppoe_if2.set_unnumbered(self.pg0.sw_if_index)
 
@@ -475,10 +501,13 @@ class TestPPPoE(VppTestCase):
         # Send tunneled packets that match the created tunnel and
         # are decapped and forwarded
         #
         # Send tunneled packets that match the created tunnel and
         # are decapped and forwarded
         #
-        tx2 = self.create_stream_pppoe_ip4(self.pg0, self.pg1,
-                                           self.pg0.remote_mac,
-                                           self.session_id,
-                                           self.pg0.remote_ip4)
+        tx2 = self.create_stream_pppoe_ip4(
+            self.pg0,
+            self.pg1,
+            self.pg0.remote_mac,
+            self.session_id,
+            self.pg0.remote_ip4,
+        )
         self.pg0.add_stream(tx2)
 
         self.pg_enable_capture(self.pg_interfaces)
         self.pg0.add_stream(tx2)
 
         self.pg_enable_capture(self.pg_interfaces)
@@ -487,10 +516,13 @@ class TestPPPoE(VppTestCase):
         rx2 = self.pg1.get_capture(len(tx2))
         self.verify_decapped_pppoe(self.pg0, rx2, tx2)
 
         rx2 = self.pg1.get_capture(len(tx2))
         self.verify_decapped_pppoe(self.pg0, rx2, tx2)
 
-        tx5 = self.create_stream_pppoe_ip4(self.pg2, self.pg1,
-                                           self.pg2.remote_mac,
-                                           self.session_id + 1,
-                                           self.pg2.remote_ip4)
+        tx5 = self.create_stream_pppoe_ip4(
+            self.pg2,
+            self.pg1,
+            self.pg2.remote_mac,
+            self.session_id + 1,
+            self.pg2.remote_ip4,
+        )
         self.pg2.add_stream(tx5)
 
         self.pg_enable_capture(self.pg_interfaces)
         self.pg2.add_stream(tx5)
 
         self.pg_enable_capture(self.pg_interfaces)
@@ -515,56 +547,59 @@ class TestPPPoE(VppTestCase):
         route_sever_dst.remove_vpp_config()
 
     def test_PPPoE_Encap_Multiple(self):
         route_sever_dst.remove_vpp_config()
 
     def test_PPPoE_Encap_Multiple(self):
-        """ PPPoE Encap Multiple Sessions Test """
+        """PPPoE Encap Multiple Sessions Test"""
 
         self.vapi.cli("clear trace")
 
         #
         # Add a route that resolves the server's destination
         #
 
         self.vapi.cli("clear trace")
 
         #
         # Add a route that resolves the server's destination
         #
-        route_sever_dst = VppIpRoute(self, "100.1.1.100", 32,
-                                     [VppRoutePath(self.pg1.remote_ip4,
-                                                   self.pg1.sw_if_index)])
+        route_sever_dst = VppIpRoute(
+            self,
+            "100.1.1.100",
+            32,
+            [VppRoutePath(self.pg1.remote_ip4, self.pg1.sw_if_index)],
+        )
         route_sever_dst.add_vpp_config()
 
         # Send PPPoE Discovery 1
         route_sever_dst.add_vpp_config()
 
         # Send PPPoE Discovery 1
-        tx0 = self.create_stream_pppoe_discovery(self.pg0, self.pg1,
-                                                 self.pg0.remote_mac)
+        tx0 = self.create_stream_pppoe_discovery(
+            self.pg0, self.pg1, self.pg0.remote_mac
+        )
         self.pg0.add_stream(tx0)
         self.pg_start()
 
         # Send PPPoE PPP LCP 1
         self.pg0.add_stream(tx0)
         self.pg_start()
 
         # Send PPPoE PPP LCP 1
-        tx1 = self.create_stream_pppoe_lcp(self.pg0, self.pg1,
-                                           self.pg0.remote_mac,
-                                           self.session_id)
+        tx1 = self.create_stream_pppoe_lcp(
+            self.pg0, self.pg1, self.pg0.remote_mac, self.session_id
+        )
         self.pg0.add_stream(tx1)
         self.pg_start()
 
         # Create PPPoE session 1
         self.pg0.add_stream(tx1)
         self.pg_start()
 
         # Create PPPoE session 1
-        pppoe_if1 = VppPppoeInterface(self,
-                                      self.pg0.remote_ip4,
-                                      self.pg0.remote_mac,
-                                      self.session_id)
+        pppoe_if1 = VppPppoeInterface(
+            self, self.pg0.remote_ip4, self.pg0.remote_mac, self.session_id
+        )
         pppoe_if1.add_vpp_config()
 
         # Send PPPoE Discovery 2
         pppoe_if1.add_vpp_config()
 
         # Send PPPoE Discovery 2
-        tx3 = self.create_stream_pppoe_discovery(self.pg2, self.pg1,
-                                                 self.pg2.remote_mac)
+        tx3 = self.create_stream_pppoe_discovery(
+            self.pg2, self.pg1, self.pg2.remote_mac
+        )
         self.pg2.add_stream(tx3)
         self.pg_start()
 
         # Send PPPoE PPP LCP 2
         self.pg2.add_stream(tx3)
         self.pg_start()
 
         # Send PPPoE PPP LCP 2
-        tx4 = self.create_stream_pppoe_lcp(self.pg2, self.pg1,
-                                           self.pg2.remote_mac,
-                                           self.session_id + 1)
+        tx4 = self.create_stream_pppoe_lcp(
+            self.pg2, self.pg1, self.pg2.remote_mac, self.session_id + 1
+        )
         self.pg2.add_stream(tx4)
         self.pg_start()
 
         # Create PPPoE session 2
         self.pg2.add_stream(tx4)
         self.pg_start()
 
         # Create PPPoE session 2
-        pppoe_if2 = VppPppoeInterface(self,
-                                      self.pg2.remote_ip4,
-                                      self.pg2.remote_mac,
-                                      self.session_id + 1)
+        pppoe_if2 = VppPppoeInterface(
+            self, self.pg2.remote_ip4, self.pg2.remote_mac, self.session_id + 1
+        )
         pppoe_if2.add_vpp_config()
 
         #
         pppoe_if2.add_vpp_config()
 
         #
@@ -572,8 +607,9 @@ class TestPPPoE(VppTestCase):
         #  - packets are PPPoE encapped
         #
         self.vapi.cli("clear trace")
         #  - packets are PPPoE encapped
         #
         self.vapi.cli("clear trace")
-        tx2 = self.create_stream_ip4(self.pg1, self.pg0,
-                                     self.pg0.remote_ip4, self.dst_ip)
+        tx2 = self.create_stream_ip4(
+            self.pg1, self.pg0, self.pg0.remote_ip4, self.dst_ip
+        )
         self.pg1.add_stream(tx2)
 
         self.pg_enable_capture(self.pg_interfaces)
         self.pg1.add_stream(tx2)
 
         self.pg_enable_capture(self.pg_interfaces)
@@ -582,8 +618,9 @@ class TestPPPoE(VppTestCase):
         rx2 = self.pg0.get_capture(len(tx2))
         self.verify_encaped_pppoe(self.pg1, rx2, tx2, self.session_id)
 
         rx2 = self.pg0.get_capture(len(tx2))
         self.verify_encaped_pppoe(self.pg1, rx2, tx2, self.session_id)
 
-        tx5 = self.create_stream_ip4(self.pg1, self.pg2,
-                                     self.pg2.remote_ip4, self.dst_ip)
+        tx5 = self.create_stream_ip4(
+            self.pg1, self.pg2, self.pg2.remote_ip4, self.dst_ip
+        )
         self.pg1.add_stream(tx5)
 
         self.pg_enable_capture(self.pg_interfaces)
         self.pg1.add_stream(tx5)
 
         self.pg_enable_capture(self.pg_interfaces)
@@ -607,5 +644,6 @@ class TestPPPoE(VppTestCase):
         # Delete a route that resolves the server's destination
         route_sever_dst.remove_vpp_config()
 
         # Delete a route that resolves the server's destination
         route_sever_dst.remove_vpp_config()
 
-if __name__ == '__main__':
+
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index ac059e9..f33ab4c 100644 (file)
@@ -38,7 +38,7 @@ NUM_PKTS = 67
 
 
 class serverSocketThread(threading.Thread):
 
 
 class serverSocketThread(threading.Thread):
-    """ Socket server thread"""
+    """Socket server thread"""
 
     def __init__(self, threadID, sockName):
         threading.Thread.__init__(self)
 
     def __init__(self, threadID, sockName):
         threading.Thread.__init__(self)
@@ -90,7 +90,7 @@ class serverSocketThread(threading.Thread):
 
 
 class TestPuntSocket(VppTestCase):
 
 
 class TestPuntSocket(VppTestCase):
-    """ Punt Socket """
+    """Punt Socket"""
 
     ports = [1111, 2222, 3333, 4444]
     sock_servers = list()
 
     ports = [1111, 2222, 3333, 4444]
     sock_servers = list()
@@ -109,7 +109,12 @@ class TestPuntSocket(VppTestCase):
     @classmethod
     def setUpConstants(cls):
         cls.extra_vpp_punt_config = [
     @classmethod
     def setUpConstants(cls):
         cls.extra_vpp_punt_config = [
-            "punt", "{", "socket", cls.tempdir+"/socket_punt", "}"]
+            "punt",
+            "{",
+            "socket",
+            cls.tempdir + "/socket_punt",
+            "}",
+        ]
         super(TestPuntSocket, cls).setUpConstants()
 
     def setUp(self):
         super(TestPuntSocket, cls).setUpConstants()
 
     def setUp(self):
@@ -137,25 +142,21 @@ class TestPuntSocket(VppTestCase):
         return rx_pkts
 
     def verify_port(self, pr, vpr):
         return rx_pkts
 
     def verify_port(self, pr, vpr):
-        self.assertEqual(vpr.punt.type, pr['type'])
-        self.assertEqual(vpr.punt.punt.l4.port,
-                         pr['punt']['l4']['port'])
-        self.assertEqual(vpr.punt.punt.l4.protocol,
-                         pr['punt']['l4']['protocol'])
-        self.assertEqual(vpr.punt.punt.l4.af,
-                         pr['punt']['l4']['af'])
+        self.assertEqual(vpr.punt.type, pr["type"])
+        self.assertEqual(vpr.punt.punt.l4.port, pr["punt"]["l4"]["port"])
+        self.assertEqual(vpr.punt.punt.l4.protocol, pr["punt"]["l4"]["protocol"])
+        self.assertEqual(vpr.punt.punt.l4.af, pr["punt"]["l4"]["af"])
 
     def verify_exception(self, pr, vpr):
 
     def verify_exception(self, pr, vpr):
-        self.assertEqual(vpr.punt.type, pr['type'])
-        self.assertEqual(vpr.punt.punt.exception.id,
-                         pr['punt']['exception']['id'])
+        self.assertEqual(vpr.punt.type, pr["type"])
+        self.assertEqual(vpr.punt.punt.exception.id, pr["punt"]["exception"]["id"])
 
     def verify_ip_proto(self, pr, vpr):
 
     def verify_ip_proto(self, pr, vpr):
-        self.assertEqual(vpr.punt.type, pr['type'])
-        self.assertEqual(vpr.punt.punt.ip_proto.af,
-                         pr['punt']['ip_proto']['af'])
-        self.assertEqual(vpr.punt.punt.ip_proto.protocol,
-                         pr['punt']['ip_proto']['protocol'])
+        self.assertEqual(vpr.punt.type, pr["type"])
+        self.assertEqual(vpr.punt.punt.ip_proto.af, pr["punt"]["ip_proto"]["af"])
+        self.assertEqual(
+            vpr.punt.punt.ip_proto.protocol, pr["punt"]["ip_proto"]["protocol"]
+        )
 
     def verify_udp_pkts(self, rxs, n_rx, port):
         n_match = 0
 
     def verify_udp_pkts(self, rxs, n_rx, port):
         n_match = 0
@@ -167,12 +168,12 @@ class TestPuntSocket(VppTestCase):
 
 
 def set_port(pr, port):
 
 
 def set_port(pr, port):
-    pr['punt']['l4']['port'] = port
+    pr["punt"]["l4"]["port"] = port
     return pr
 
 
 def set_reason(pr, reason):
     return pr
 
 
 def set_reason(pr, reason):
-    pr['punt']['exception']['id'] = reason
+    pr["punt"]["exception"]["id"] = reason
     return pr
 
 
     return pr
 
 
@@ -180,15 +181,7 @@ def mk_vpp_cfg4():
     pt_l4 = VppEnum.vl_api_punt_type_t.PUNT_API_TYPE_L4
     af_ip4 = VppEnum.vl_api_address_family_t.ADDRESS_IP4
     udp_proto = VppEnum.vl_api_ip_proto_t.IP_API_PROTO_UDP
     pt_l4 = VppEnum.vl_api_punt_type_t.PUNT_API_TYPE_L4
     af_ip4 = VppEnum.vl_api_address_family_t.ADDRESS_IP4
     udp_proto = VppEnum.vl_api_ip_proto_t.IP_API_PROTO_UDP
-    punt_l4 = {
-        'type': pt_l4,
-        'punt': {
-            'l4': {
-                'af': af_ip4,
-                'protocol': udp_proto
-            }
-        }
-    }
+    punt_l4 = {"type": pt_l4, "punt": {"l4": {"af": af_ip4, "protocol": udp_proto}}}
     return punt_l4
 
 
     return punt_l4
 
 
@@ -196,20 +189,12 @@ def mk_vpp_cfg6():
     pt_l4 = VppEnum.vl_api_punt_type_t.PUNT_API_TYPE_L4
     af_ip6 = VppEnum.vl_api_address_family_t.ADDRESS_IP6
     udp_proto = VppEnum.vl_api_ip_proto_t.IP_API_PROTO_UDP
     pt_l4 = VppEnum.vl_api_punt_type_t.PUNT_API_TYPE_L4
     af_ip6 = VppEnum.vl_api_address_family_t.ADDRESS_IP6
     udp_proto = VppEnum.vl_api_ip_proto_t.IP_API_PROTO_UDP
-    punt_l4 = {
-        'type': pt_l4,
-        'punt': {
-            'l4': {
-                'af': af_ip6,
-                'protocol': udp_proto
-            }
-        }
-    }
+    punt_l4 = {"type": pt_l4, "punt": {"l4": {"af": af_ip6, "protocol": udp_proto}}}
     return punt_l4
 
 
 class TestIP4PuntSocket(TestPuntSocket):
     return punt_l4
 
 
 class TestIP4PuntSocket(TestPuntSocket):
-    """ Punt Socket for IPv4 UDP """
+    """Punt Socket for IPv4 UDP"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -233,7 +218,7 @@ class TestIP4PuntSocket(TestPuntSocket):
             i.admin_down()
 
     def test_punt_socket_dump(self):
             i.admin_down()
 
     def test_punt_socket_dump(self):
-        """ Punt socket registration/deregistration"""
+        """Punt socket registration/deregistration"""
 
         pt_l4 = VppEnum.vl_api_punt_type_t.PUNT_API_TYPE_L4
         af_ip4 = VppEnum.vl_api_address_family_t.ADDRESS_IP4
 
         pt_l4 = VppEnum.vl_api_punt_type_t.PUNT_API_TYPE_L4
         af_ip4 = VppEnum.vl_api_address_family_t.ADDRESS_IP4
@@ -247,10 +232,12 @@ class TestIP4PuntSocket(TestPuntSocket):
         #
         punt_l4 = mk_vpp_cfg4()
 
         #
         punt_l4 = mk_vpp_cfg4()
 
-        self.vapi.punt_socket_register(set_port(punt_l4, 1111),
-                                       "%s/socket_punt_1111" % self.tempdir)
-        self.vapi.punt_socket_register(set_port(punt_l4, 2222),
-                                       "%s/socket_punt_2222" % self.tempdir)
+        self.vapi.punt_socket_register(
+            set_port(punt_l4, 1111), "%s/socket_punt_1111" % self.tempdir
+        )
+        self.vapi.punt_socket_register(
+            set_port(punt_l4, 2222), "%s/socket_punt_2222" % self.tempdir
+        )
         punts = self.vapi.punt_socket_dump(type=pt_l4)
         self.assertEqual(len(punts), 2)
         self.verify_port(set_port(punt_l4, 1111), punts[0])
         punts = self.vapi.punt_socket_dump(type=pt_l4)
         self.assertEqual(len(punts), 2)
         self.verify_port(set_port(punt_l4, 1111), punts[0])
@@ -266,10 +253,12 @@ class TestIP4PuntSocket(TestPuntSocket):
         #
         # configure a punt socket again
         #
         #
         # configure a punt socket again
         #
-        self.vapi.punt_socket_register(set_port(punt_l4, 1111),
-                                       "%s/socket_punt_1111" % self.tempdir)
-        self.vapi.punt_socket_register(set_port(punt_l4, 3333),
-                                       "%s/socket_punt_3333" % self.tempdir)
+        self.vapi.punt_socket_register(
+            set_port(punt_l4, 1111), "%s/socket_punt_1111" % self.tempdir
+        )
+        self.vapi.punt_socket_register(
+            set_port(punt_l4, 3333), "%s/socket_punt_3333" % self.tempdir
+        )
         punts = self.vapi.punt_socket_dump(type=pt_l4)
         self.assertEqual(len(punts), 3)
 
         punts = self.vapi.punt_socket_dump(type=pt_l4)
         self.assertEqual(len(punts), 3)
 
@@ -285,17 +274,18 @@ class TestIP4PuntSocket(TestPuntSocket):
         self.assertEqual(len(punts), 0)
 
     def test_punt_socket_traffic_single_port_single_socket(self):
         self.assertEqual(len(punts), 0)
 
     def test_punt_socket_traffic_single_port_single_socket(self):
-        """ Punt socket traffic single port single socket"""
+        """Punt socket traffic single port single socket"""
 
         port = self.ports[0]
         pt_l4 = VppEnum.vl_api_punt_type_t.PUNT_API_TYPE_L4
         punt_l4 = set_port(mk_vpp_cfg4(), port)
 
 
         port = self.ports[0]
         pt_l4 = VppEnum.vl_api_punt_type_t.PUNT_API_TYPE_L4
         punt_l4 = set_port(mk_vpp_cfg4(), port)
 
-        p = (Ether(src=self.pg0.remote_mac,
-                   dst=self.pg0.local_mac) /
-             IP(src=self.pg0.remote_ip4, dst=self.pg0.local_ip4) /
-             UDP(sport=9876, dport=port) /
-             Raw(b'\xa5' * 100))
+        p = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg0.local_ip4)
+            / UDP(sport=9876, dport=port)
+            / Raw(b"\xa5" * 100)
+        )
 
         pkts = p * self.nr_packets
 
 
         pkts = p * self.nr_packets
 
@@ -308,15 +298,14 @@ class TestIP4PuntSocket(TestPuntSocket):
         rx = self.send_and_expect_some(self.pg0, pkts, self.pg0)
 
         for p in rx:
         rx = self.send_and_expect_some(self.pg0, pkts, self.pg0)
 
         for p in rx:
-            self.assertEqual(int(p[IP].proto), 1)   # ICMP
+            self.assertEqual(int(p[IP].proto), 1)  # ICMP
             self.assertEqual(int(p[ICMP].code), 3)  # unreachable
 
         #
         # configure a punt socket
         #
         self.socket_client_create("%s/socket_%d" % (self.tempdir, port))
             self.assertEqual(int(p[ICMP].code), 3)  # unreachable
 
         #
         # configure a punt socket
         #
         self.socket_client_create("%s/socket_%d" % (self.tempdir, port))
-        self.vapi.punt_socket_register(punt_l4, "%s/socket_%d" %
-                                       (self.tempdir, port))
+        self.vapi.punt_socket_register(punt_l4, "%s/socket_%d" % (self.tempdir, port))
         punts = self.vapi.punt_socket_dump(type=pt_l4)
         self.assertEqual(len(punts), 1)
 
         punts = self.vapi.punt_socket_dump(type=pt_l4)
         self.assertEqual(len(punts), 1)
 
@@ -336,11 +325,11 @@ class TestIP4PuntSocket(TestPuntSocket):
 
         rx = self.send_and_expect_some(self.pg0, pkts, self.pg0)
         for p in rx:
 
         rx = self.send_and_expect_some(self.pg0, pkts, self.pg0)
         for p in rx:
-            self.assertEqual(int(p[IP].proto), 1)   # ICMP
+            self.assertEqual(int(p[IP].proto), 1)  # ICMP
             self.assertEqual(int(p[ICMP].code), 3)  # unreachable
 
     def test_punt_socket_traffic_multi_ports_multi_sockets(self):
             self.assertEqual(int(p[ICMP].code), 3)  # unreachable
 
     def test_punt_socket_traffic_multi_ports_multi_sockets(self):
-        """ Punt socket traffic multi ports and multi sockets"""
+        """Punt socket traffic multi ports and multi sockets"""
 
         punt_l4 = mk_vpp_cfg4()
 
 
         punt_l4 = mk_vpp_cfg4()
 
@@ -354,38 +343,40 @@ class TestIP4PuntSocket(TestPuntSocket):
             # choose port from port list
             cfgs[port] = {}
 
             # choose port from port list
             cfgs[port] = {}
 
-            pkt = (Ether(src=self.pg0.remote_mac,
-                         dst=self.pg0.local_mac) /
-                   IP(src=self.pg0.remote_ip4, dst=self.pg0.local_ip4) /
-                   UDP(sport=9876, dport=port) /
-                   Raw(b'\xa5' * 100))
-            cfgs[port]['pkts'] = pkt * self.nr_packets
-            cfgs[port]['port'] = port
-            cfgs[port]['vpp'] = copy.deepcopy(set_port(punt_l4, port))
+            pkt = (
+                Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+                / IP(src=self.pg0.remote_ip4, dst=self.pg0.local_ip4)
+                / UDP(sport=9876, dport=port)
+                / Raw(b"\xa5" * 100)
+            )
+            cfgs[port]["pkts"] = pkt * self.nr_packets
+            cfgs[port]["port"] = port
+            cfgs[port]["vpp"] = copy.deepcopy(set_port(punt_l4, port))
 
             # configure punt sockets
 
             # configure punt sockets
-            cfgs[port]['sock'] = self.socket_client_create(
-                "%s/socket_%d" % (self.tempdir, port))
+            cfgs[port]["sock"] = self.socket_client_create(
+                "%s/socket_%d" % (self.tempdir, port)
+            )
             self.vapi.punt_socket_register(
             self.vapi.punt_socket_register(
-                cfgs[port]['vpp'],
-                "%s/socket_%d" % (self.tempdir, port))
+                cfgs[port]["vpp"], "%s/socket_%d" % (self.tempdir, port)
+            )
 
         #
         # send the packets that get punted
         #
         for cfg in cfgs.values():
 
         #
         # send the packets that get punted
         #
         for cfg in cfgs.values():
-            self.send_and_assert_no_replies(self.pg0, cfg['pkts'])
+            self.send_and_assert_no_replies(self.pg0, cfg["pkts"])
 
         #
         # test that we got the excepted packets on the expected socket
         #
         for cfg in cfgs.values():
 
         #
         # test that we got the excepted packets on the expected socket
         #
         for cfg in cfgs.values():
-            rx = cfg['sock'].close()
-            self.verify_udp_pkts(rx, len(cfg['pkts']), cfg['port'])
-            self.vapi.punt_socket_deregister(cfg['vpp'])
+            rx = cfg["sock"].close()
+            self.verify_udp_pkts(rx, len(cfg["pkts"]), cfg["port"])
+            self.vapi.punt_socket_deregister(cfg["vpp"])
 
     def test_punt_socket_traffic_multi_ports_single_socket(self):
 
     def test_punt_socket_traffic_multi_ports_single_socket(self):
-        """ Punt socket traffic multi ports and single socket"""
+        """Punt socket traffic multi ports and single socket"""
 
         pt_l4 = VppEnum.vl_api_punt_type_t.PUNT_API_TYPE_L4
         punt_l4 = mk_vpp_cfg4()
 
         pt_l4 = VppEnum.vl_api_punt_type_t.PUNT_API_TYPE_L4
         punt_l4 = mk_vpp_cfg4()
@@ -396,11 +387,12 @@ class TestIP4PuntSocket(TestPuntSocket):
         pkts = []
         for port in self.ports:
             # choose port from port list
         pkts = []
         for port in self.ports:
             # choose port from port list
-            pkt = (Ether(src=self.pg0.remote_mac,
-                         dst=self.pg0.local_mac) /
-                   IP(src=self.pg0.remote_ip4, dst=self.pg0.local_ip4) /
-                   UDP(sport=9876, dport=port) /
-                   Raw(b'\xa5' * 100))
+            pkt = (
+                Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+                / IP(src=self.pg0.remote_ip4, dst=self.pg0.local_ip4)
+                / UDP(sport=9876, dport=port)
+                / Raw(b"\xa5" * 100)
+            )
             pkts += pkt * self.nr_packets
 
         #
             pkts += pkt * self.nr_packets
 
         #
@@ -408,8 +400,9 @@ class TestIP4PuntSocket(TestPuntSocket):
         #
         self.socket_client_create("%s/socket_multi" % self.tempdir)
         for p in self.ports:
         #
         self.socket_client_create("%s/socket_multi" % self.tempdir)
         for p in self.ports:
-            self.vapi.punt_socket_register(set_port(punt_l4, p),
-                                           "%s/socket_multi" % self.tempdir)
+            self.vapi.punt_socket_register(
+                set_port(punt_l4, p), "%s/socket_multi" % self.tempdir
+            )
         punts = self.vapi.punt_socket_dump(type=pt_l4)
         self.assertEqual(len(punts), len(self.ports))
 
         punts = self.vapi.punt_socket_dump(type=pt_l4)
         self.assertEqual(len(punts), len(self.ports))
 
@@ -428,7 +421,7 @@ class TestIP4PuntSocket(TestPuntSocket):
 
 
 class TestIP6PuntSocket(TestPuntSocket):
 
 
 class TestIP6PuntSocket(TestPuntSocket):
-    """ Punt Socket for IPv6 UDP """
+    """Punt Socket for IPv6 UDP"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -452,7 +445,7 @@ class TestIP6PuntSocket(TestPuntSocket):
             i.admin_down()
 
     def test_punt_socket_dump(self):
             i.admin_down()
 
     def test_punt_socket_dump(self):
-        """ Punt socket registration """
+        """Punt socket registration"""
 
         pt_l4 = VppEnum.vl_api_punt_type_t.PUNT_API_TYPE_L4
         af_ip6 = VppEnum.vl_api_address_family_t.ADDRESS_IP6
 
         pt_l4 = VppEnum.vl_api_punt_type_t.PUNT_API_TYPE_L4
         af_ip6 = VppEnum.vl_api_address_family_t.ADDRESS_IP6
@@ -460,15 +453,7 @@ class TestIP6PuntSocket(TestPuntSocket):
         #
         # configure a punt socket
         #
         #
         # configure a punt socket
         #
-        punt_l4 = {
-            'type': pt_l4,
-            'punt': {
-                'l4': {
-                    'af': af_ip6,
-                    'protocol': udp_proto
-                }
-            }
-        }
+        punt_l4 = {"type": pt_l4, "punt": {"l4": {"af": af_ip6, "protocol": udp_proto}}}
 
         punts = self.vapi.punt_socket_dump(type=pt_l4)
         self.assertEqual(len(punts), 0)
 
         punts = self.vapi.punt_socket_dump(type=pt_l4)
         self.assertEqual(len(punts), 0)
@@ -476,10 +461,12 @@ class TestIP6PuntSocket(TestPuntSocket):
         #
         # configure a punt socket
         #
         #
         # configure a punt socket
         #
-        self.vapi.punt_socket_register(set_port(punt_l4, 1111),
-                                       "%s/socket_1111" % self.tempdir)
-        self.vapi.punt_socket_register(set_port(punt_l4, 2222),
-                                       "%s/socket_2222" % self.tempdir)
+        self.vapi.punt_socket_register(
+            set_port(punt_l4, 1111), "%s/socket_1111" % self.tempdir
+        )
+        self.vapi.punt_socket_register(
+            set_port(punt_l4, 2222), "%s/socket_2222" % self.tempdir
+        )
         punts = self.vapi.punt_socket_dump(type=pt_l4)
         self.assertEqual(len(punts), 2)
         self.verify_port(set_port(punt_l4, 1111), punts[0])
         punts = self.vapi.punt_socket_dump(type=pt_l4)
         self.assertEqual(len(punts), 2)
         self.verify_port(set_port(punt_l4, 1111), punts[0])
@@ -495,8 +482,9 @@ class TestIP6PuntSocket(TestPuntSocket):
         #
         # configure a punt socket again
         #
         #
         # configure a punt socket again
         #
-        self.vapi.punt_socket_register(set_port(punt_l4, 1111),
-                                       "%s/socket_1111" % self.tempdir)
+        self.vapi.punt_socket_register(
+            set_port(punt_l4, 1111), "%s/socket_1111" % self.tempdir
+        )
         punts = self.vapi.punt_socket_dump(type=pt_l4)
         self.assertEqual(len(punts), 2)
 
         punts = self.vapi.punt_socket_dump(type=pt_l4)
         self.assertEqual(len(punts), 2)
 
@@ -510,28 +498,29 @@ class TestIP6PuntSocket(TestPuntSocket):
         self.assertEqual(len(punts), 0)
 
     def test_punt_socket_traffic_single_port_single_socket(self):
         self.assertEqual(len(punts), 0)
 
     def test_punt_socket_traffic_single_port_single_socket(self):
-        """ Punt socket traffic single port single socket"""
+        """Punt socket traffic single port single socket"""
 
         port = self.ports[0]
         pt_l4 = VppEnum.vl_api_punt_type_t.PUNT_API_TYPE_L4
         af_ip6 = VppEnum.vl_api_address_family_t.ADDRESS_IP6
         udp_proto = VppEnum.vl_api_ip_proto_t.IP_API_PROTO_UDP
         punt_l4 = {
 
         port = self.ports[0]
         pt_l4 = VppEnum.vl_api_punt_type_t.PUNT_API_TYPE_L4
         af_ip6 = VppEnum.vl_api_address_family_t.ADDRESS_IP6
         udp_proto = VppEnum.vl_api_ip_proto_t.IP_API_PROTO_UDP
         punt_l4 = {
-            'type': pt_l4,
-            'punt': {
-                'l4': {
-                    'af': af_ip6,
-                    'protocol': udp_proto,
-                    'port': port,
+            "type": pt_l4,
+            "punt": {
+                "l4": {
+                    "af": af_ip6,
+                    "protocol": udp_proto,
+                    "port": port,
                 }
                 }
-            }
+            },
         }
 
         }
 
-        p = (Ether(src=self.pg0.remote_mac,
-                   dst=self.pg0.local_mac) /
-             IPv6(src=self.pg0.remote_ip6, dst=self.pg0.local_ip6) /
-             inet6.UDP(sport=9876, dport=port) /
-             Raw(b'\xa5' * 100))
+        p = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IPv6(src=self.pg0.remote_ip6, dst=self.pg0.local_ip6)
+            / inet6.UDP(sport=9876, dport=port)
+            / Raw(b"\xa5" * 100)
+        )
 
         pkts = p * self.nr_packets
 
 
         pkts = p * self.nr_packets
 
@@ -555,8 +544,7 @@ class TestIP6PuntSocket(TestPuntSocket):
         # configure a punt socket
         #
         self.socket_client_create("%s/socket_%d" % (self.tempdir, port))
         # configure a punt socket
         #
         self.socket_client_create("%s/socket_%d" % (self.tempdir, port))
-        self.vapi.punt_socket_register(punt_l4, "%s/socket_%d" %
-                                       (self.tempdir, port))
+        self.vapi.punt_socket_register(punt_l4, "%s/socket_%d" % (self.tempdir, port))
         punts = self.vapi.punt_socket_dump(type=pt_l4)
         self.assertEqual(len(punts), 1)
 
         punts = self.vapi.punt_socket_dump(type=pt_l4)
         self.assertEqual(len(punts), 1)
 
@@ -586,7 +574,7 @@ class TestIP6PuntSocket(TestPuntSocket):
         # self.pg0.get_capture(nr_packets)
 
     def test_punt_socket_traffic_multi_ports_multi_sockets(self):
         # self.pg0.get_capture(nr_packets)
 
     def test_punt_socket_traffic_multi_ports_multi_sockets(self):
-        """ Punt socket traffic multi ports and multi sockets"""
+        """Punt socket traffic multi ports and multi sockets"""
 
         punt_l4 = mk_vpp_cfg6()
 
 
         punt_l4 = mk_vpp_cfg6()
 
@@ -600,50 +588,52 @@ class TestIP6PuntSocket(TestPuntSocket):
             # choose port from port list
             cfgs[port] = {}
 
             # choose port from port list
             cfgs[port] = {}
 
-            pkt = (Ether(src=self.pg0.remote_mac,
-                         dst=self.pg0.local_mac) /
-                   IPv6(src=self.pg0.remote_ip6, dst=self.pg0.local_ip6) /
-                   UDP(sport=9876, dport=port) /
-                   Raw(b'\xa5' * 100))
-            cfgs[port]['pkts'] = pkt * self.nr_packets
-            cfgs[port]['port'] = port
-            cfgs[port]['vpp'] = copy.deepcopy(set_port(punt_l4, port))
+            pkt = (
+                Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+                / IPv6(src=self.pg0.remote_ip6, dst=self.pg0.local_ip6)
+                / UDP(sport=9876, dport=port)
+                / Raw(b"\xa5" * 100)
+            )
+            cfgs[port]["pkts"] = pkt * self.nr_packets
+            cfgs[port]["port"] = port
+            cfgs[port]["vpp"] = copy.deepcopy(set_port(punt_l4, port))
 
             # configure punt sockets
 
             # configure punt sockets
-            cfgs[port]['sock'] = self.socket_client_create(
-                "%s/socket_%d" % (self.tempdir, port))
+            cfgs[port]["sock"] = self.socket_client_create(
+                "%s/socket_%d" % (self.tempdir, port)
+            )
             self.vapi.punt_socket_register(
             self.vapi.punt_socket_register(
-                cfgs[port]['vpp'],
-                "%s/socket_%d" % (self.tempdir, port))
+                cfgs[port]["vpp"], "%s/socket_%d" % (self.tempdir, port)
+            )
 
         #
         # send the packets that get punted
         #
         for cfg in cfgs.values():
 
         #
         # send the packets that get punted
         #
         for cfg in cfgs.values():
-            self.send_and_assert_no_replies(self.pg0, cfg['pkts'])
+            self.send_and_assert_no_replies(self.pg0, cfg["pkts"])
 
         #
         # test that we got the excepted packets on the expected socket
         #
         for cfg in cfgs.values():
 
         #
         # test that we got the excepted packets on the expected socket
         #
         for cfg in cfgs.values():
-            rx = cfg['sock'].close()
-            self.verify_udp_pkts(rx, len(cfg['pkts']), cfg['port'])
-            self.vapi.punt_socket_deregister(cfg['vpp'])
+            rx = cfg["sock"].close()
+            self.verify_udp_pkts(rx, len(cfg["pkts"]), cfg["port"])
+            self.vapi.punt_socket_deregister(cfg["vpp"])
 
     def test_punt_socket_traffic_multi_ports_single_socket(self):
 
     def test_punt_socket_traffic_multi_ports_single_socket(self):
-        """ Punt socket traffic multi ports and single socket"""
+        """Punt socket traffic multi ports and single socket"""
 
         pt_l4 = VppEnum.vl_api_punt_type_t.PUNT_API_TYPE_L4
         af_ip6 = VppEnum.vl_api_address_family_t.ADDRESS_IP6
         udp_proto = VppEnum.vl_api_ip_proto_t.IP_API_PROTO_UDP
         punt_l4 = {
 
         pt_l4 = VppEnum.vl_api_punt_type_t.PUNT_API_TYPE_L4
         af_ip6 = VppEnum.vl_api_address_family_t.ADDRESS_IP6
         udp_proto = VppEnum.vl_api_ip_proto_t.IP_API_PROTO_UDP
         punt_l4 = {
-            'type': pt_l4,
-            'punt': {
-                'l4': {
-                    'af': af_ip6,
-                    'protocol': udp_proto,
+            "type": pt_l4,
+            "punt": {
+                "l4": {
+                    "af": af_ip6,
+                    "protocol": udp_proto,
                 }
                 }
-            }
+            },
         }
 
         #
         }
 
         #
@@ -652,11 +642,12 @@ class TestIP6PuntSocket(TestPuntSocket):
         pkts = []
         for port in self.ports:
             # choose port from port list
         pkts = []
         for port in self.ports:
             # choose port from port list
-            pkt = (Ether(src=self.pg0.remote_mac,
-                         dst=self.pg0.local_mac) /
-                   IPv6(src=self.pg0.remote_ip6, dst=self.pg0.local_ip6) /
-                   UDP(sport=9876, dport=port) /
-                   Raw(b'\xa5' * 100))
+            pkt = (
+                Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+                / IPv6(src=self.pg0.remote_ip6, dst=self.pg0.local_ip6)
+                / UDP(sport=9876, dport=port)
+                / Raw(b"\xa5" * 100)
+            )
             pkts += pkt * self.nr_packets
 
         #
             pkts += pkt * self.nr_packets
 
         #
@@ -670,8 +661,9 @@ class TestIP6PuntSocket(TestPuntSocket):
         #
         self.socket_client_create("%s/socket_multi" % self.tempdir)
         for p in self.ports:
         #
         self.socket_client_create("%s/socket_multi" % self.tempdir)
         for p in self.ports:
-            self.vapi.punt_socket_register(set_port(punt_l4, p),
-                                           "%s/socket_multi" % self.tempdir)
+            self.vapi.punt_socket_register(
+                set_port(punt_l4, p), "%s/socket_multi" % self.tempdir
+            )
         punts = self.vapi.punt_socket_dump(type=pt_l4)
         self.assertEqual(len(punts), len(self.ports))
 
         punts = self.vapi.punt_socket_dump(type=pt_l4)
         self.assertEqual(len(punts), len(self.ports))
 
@@ -696,7 +688,7 @@ class TestIP6PuntSocket(TestPuntSocket):
 
 
 class TestExceptionPuntSocket(TestPuntSocket):
 
 
 class TestExceptionPuntSocket(TestPuntSocket):
-    """ Punt Socket for Exceptions """
+    """Punt Socket for Exceptions"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -721,7 +713,7 @@ class TestExceptionPuntSocket(TestPuntSocket):
             i.admin_down()
 
     def test_registration(self):
             i.admin_down()
 
     def test_registration(self):
-        """ Punt socket registration/deregistration"""
+        """Punt socket registration/deregistration"""
 
         pt_ex = VppEnum.vl_api_punt_type_t.PUNT_API_TYPE_EXCEPTION
 
 
         pt_ex = VppEnum.vl_api_punt_type_t.PUNT_API_TYPE_EXCEPTION
 
@@ -731,17 +723,14 @@ class TestExceptionPuntSocket(TestPuntSocket):
         #
         # configure a punt socket
         #
         #
         # configure a punt socket
         #
-        punt_ex = {
-            'type': pt_ex,
-            'punt': {
-                'exception': {}
-            }
-        }
+        punt_ex = {"type": pt_ex, "punt": {"exception": {}}}
 
 
-        self.vapi.punt_socket_register(set_reason(punt_ex, 1),
-                                       "%s/socket_punt_1" % self.tempdir)
-        self.vapi.punt_socket_register(set_reason(punt_ex, 2),
-                                       "%s/socket_punt_2" % self.tempdir)
+        self.vapi.punt_socket_register(
+            set_reason(punt_ex, 1), "%s/socket_punt_1" % self.tempdir
+        )
+        self.vapi.punt_socket_register(
+            set_reason(punt_ex, 2), "%s/socket_punt_2" % self.tempdir
+        )
         punts = self.vapi.punt_socket_dump(type=pt_ex)
         self.assertEqual(len(punts), 2)
         self.verify_exception(set_reason(punt_ex, 1), punts[0])
         punts = self.vapi.punt_socket_dump(type=pt_ex)
         self.assertEqual(len(punts), 2)
         self.verify_exception(set_reason(punt_ex, 1), punts[0])
@@ -757,10 +746,12 @@ class TestExceptionPuntSocket(TestPuntSocket):
         #
         # configure a punt socket again
         #
         #
         # configure a punt socket again
         #
-        self.vapi.punt_socket_register(set_reason(punt_ex, 1),
-                                       "%s/socket_punt_1" % self.tempdir)
-        self.vapi.punt_socket_register(set_reason(punt_ex, 3),
-                                       "%s/socket_punt_3" % self.tempdir)
+        self.vapi.punt_socket_register(
+            set_reason(punt_ex, 1), "%s/socket_punt_1" % self.tempdir
+        )
+        self.vapi.punt_socket_register(
+            set_reason(punt_ex, 3), "%s/socket_punt_3" % self.tempdir
+        )
         punts = self.vapi.punt_socket_dump(type=pt_ex)
         self.assertEqual(len(punts), 3)
 
         punts = self.vapi.punt_socket_dump(type=pt_ex)
         self.assertEqual(len(punts), 3)
 
@@ -785,25 +776,18 @@ class TestExceptionPuntSocket(TestPuntSocket):
                 self.assertTrue(rx.haslayer(UDP))
 
     def test_traffic(self):
                 self.assertTrue(rx.haslayer(UDP))
 
     def test_traffic(self):
-        """ Punt socket traffic """
+        """Punt socket traffic"""
 
         port = self.ports[0]
         pt_ex = VppEnum.vl_api_punt_type_t.PUNT_API_TYPE_EXCEPTION
 
         port = self.ports[0]
         pt_ex = VppEnum.vl_api_punt_type_t.PUNT_API_TYPE_EXCEPTION
-        punt_ex = {
-            'type': pt_ex,
-            'punt': {
-                'exception': {}
-            }
-        }
+        punt_ex = {"type": pt_ex, "punt": {"exception": {}}}
 
         #
         # we're dealing with IPSec tunnels punting for no-such-tunnel
         # (SPI=0 goes to ikev2)
         #
         cfgs = dict()
 
         #
         # we're dealing with IPSec tunnels punting for no-such-tunnel
         # (SPI=0 goes to ikev2)
         #
         cfgs = dict()
-        cfgs['ipsec4-no-such-tunnel'] = {'spi': 99,
-                                         'udp': False,
-                                         'itf': self.pg0}
+        cfgs["ipsec4-no-such-tunnel"] = {"spi": 99, "udp": False, "itf": self.pg0}
 
         #
         # find the VPP ID for these punt exception reasin
 
         #
         # find the VPP ID for these punt exception reasin
@@ -814,99 +798,99 @@ class TestExceptionPuntSocket(TestPuntSocket):
                 print(r.reason.name)
                 print(key)
                 if r.reason.name == key:
                 print(r.reason.name)
                 print(key)
                 if r.reason.name == key:
-                    cfgs[key]['id'] = r.reason.id
-                    cfgs[key]['vpp'] = copy.deepcopy(
-                        set_reason(punt_ex,
-                                   cfgs[key]['id']))
+                    cfgs[key]["id"] = r.reason.id
+                    cfgs[key]["vpp"] = copy.deepcopy(
+                        set_reason(punt_ex, cfgs[key]["id"])
+                    )
                     break
 
         #
         # configure punt sockets
         #
         for cfg in cfgs.values():
                     break
 
         #
         # configure punt sockets
         #
         for cfg in cfgs.values():
-            cfg['sock'] = self.socket_client_create("%s/socket_%d" %
-                                                    (self.tempdir, cfg['id']))
+            cfg["sock"] = self.socket_client_create(
+                "%s/socket_%d" % (self.tempdir, cfg["id"])
+            )
             self.vapi.punt_socket_register(
             self.vapi.punt_socket_register(
-                cfg['vpp'], "%s/socket_%d" % (self.tempdir, cfg['id']))
+                cfg["vpp"], "%s/socket_%d" % (self.tempdir, cfg["id"])
+            )
 
         #
         # create packet streams for 'no-such-tunnel' exception
         #
         for cfg in cfgs.values():
 
         #
         # create packet streams for 'no-such-tunnel' exception
         #
         for cfg in cfgs.values():
-            pkt = (Ether(src=cfg['itf'].remote_mac,
-                         dst=cfg['itf'].local_mac) /
-                   IP(src=cfg['itf'].remote_ip4,
-                      dst=cfg['itf'].local_ip4))
-            if (cfg['udp']):
+            pkt = Ether(src=cfg["itf"].remote_mac, dst=cfg["itf"].local_mac) / IP(
+                src=cfg["itf"].remote_ip4, dst=cfg["itf"].local_ip4
+            )
+            if cfg["udp"]:
                 pkt = pkt / UDP(sport=666, dport=4500)
                 pkt = pkt / UDP(sport=666, dport=4500)
-            pkt = (pkt / ESP(spi=cfg['spi'], seq=3) /
-                   Raw(b'\xa5' * 100))
-            cfg['pkts'] = [pkt]
+            pkt = pkt / ESP(spi=cfg["spi"], seq=3) / Raw(b"\xa5" * 100)
+            cfg["pkts"] = [pkt]
 
         #
         # send packets for each SPI we expect to be punted
         #
         for cfg in cfgs.values():
 
         #
         # send packets for each SPI we expect to be punted
         #
         for cfg in cfgs.values():
-            self.send_and_assert_no_replies(cfg['itf'], cfg['pkts'])
+            self.send_and_assert_no_replies(cfg["itf"], cfg["pkts"])
 
         #
         # verify the punted packets arrived on the associated socket
         #
         for cfg in cfgs.values():
 
         #
         # verify the punted packets arrived on the associated socket
         #
         for cfg in cfgs.values():
-            rx = cfg['sock'].close()
-            self.verify_esp_pkts(rx, len(cfg['pkts']),
-                                 cfg['spi'], cfg['udp'])
+            rx = cfg["sock"].close()
+            self.verify_esp_pkts(rx, len(cfg["pkts"]), cfg["spi"], cfg["udp"])
 
         #
         # add some tunnels, make sure it still punts
         #
         tun = VppIpsecInterface(self).add_vpp_config()
 
         #
         # add some tunnels, make sure it still punts
         #
         tun = VppIpsecInterface(self).add_vpp_config()
-        sa_in = VppIpsecSA(self, 11, 11,
-                           (VppEnum.vl_api_ipsec_integ_alg_t.
-                            IPSEC_API_INTEG_ALG_SHA1_96),
-                           b"0123456701234567",
-                           (VppEnum.vl_api_ipsec_crypto_alg_t.
-                            IPSEC_API_CRYPTO_ALG_AES_CBC_128),
-                           b"0123456701234567",
-                           50,
-                           self.pg0.local_ip4,
-                           self.pg0.remote_ip4).add_vpp_config()
-        sa_out = VppIpsecSA(self, 22, 22,
-                            (VppEnum.vl_api_ipsec_integ_alg_t.
-                             IPSEC_API_INTEG_ALG_SHA1_96),
-                            b"0123456701234567",
-                            (VppEnum.vl_api_ipsec_crypto_alg_t.
-                             IPSEC_API_CRYPTO_ALG_AES_CBC_128),
-                            b"0123456701234567",
-                            50,
-                            self.pg0.local_ip4,
-                            self.pg0.remote_ip4).add_vpp_config()
-        protect = VppIpsecTunProtect(self, tun,
-                                     sa_out,
-                                     [sa_in]).add_vpp_config()
+        sa_in = VppIpsecSA(
+            self,
+            11,
+            11,
+            (VppEnum.vl_api_ipsec_integ_alg_t.IPSEC_API_INTEG_ALG_SHA1_96),
+            b"0123456701234567",
+            (VppEnum.vl_api_ipsec_crypto_alg_t.IPSEC_API_CRYPTO_ALG_AES_CBC_128),
+            b"0123456701234567",
+            50,
+            self.pg0.local_ip4,
+            self.pg0.remote_ip4,
+        ).add_vpp_config()
+        sa_out = VppIpsecSA(
+            self,
+            22,
+            22,
+            (VppEnum.vl_api_ipsec_integ_alg_t.IPSEC_API_INTEG_ALG_SHA1_96),
+            b"0123456701234567",
+            (VppEnum.vl_api_ipsec_crypto_alg_t.IPSEC_API_CRYPTO_ALG_AES_CBC_128),
+            b"0123456701234567",
+            50,
+            self.pg0.local_ip4,
+            self.pg0.remote_ip4,
+        ).add_vpp_config()
+        protect = VppIpsecTunProtect(self, tun, sa_out, [sa_in]).add_vpp_config()
 
         #
         # send packets for each SPI we expect to be punted
         #
         for cfg in cfgs.values():
 
         #
         # send packets for each SPI we expect to be punted
         #
         for cfg in cfgs.values():
-            self.send_and_assert_no_replies(cfg['itf'], cfg['pkts'])
+            self.send_and_assert_no_replies(cfg["itf"], cfg["pkts"])
 
         #
         # verify the punted packets arrived on the associated socket
         #
         for cfg in cfgs.values():
 
         #
         # verify the punted packets arrived on the associated socket
         #
         for cfg in cfgs.values():
-            rx = cfg['sock'].close()
-            self.verify_esp_pkts(rx, len(cfg['pkts']),
-                                 cfg['spi'], cfg['udp'])
+            rx = cfg["sock"].close()
+            self.verify_esp_pkts(rx, len(cfg["pkts"]), cfg["spi"], cfg["udp"])
         #
         # socket deregister
         #
         for cfg in cfgs.values():
         #
         # socket deregister
         #
         for cfg in cfgs.values():
-            self.vapi.punt_socket_deregister(cfg['vpp'])
+            self.vapi.punt_socket_deregister(cfg["vpp"])
 
 
 class TestIpProtoPuntSocket(TestPuntSocket):
 
 
 class TestIpProtoPuntSocket(TestPuntSocket):
-    """ Punt Socket for IP packets """
+    """Punt Socket for IP packets"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -930,7 +914,7 @@ class TestIpProtoPuntSocket(TestPuntSocket):
             i.admin_down()
 
     def test_registration(self):
             i.admin_down()
 
     def test_registration(self):
-        """ Punt socket registration/deregistration"""
+        """Punt socket registration/deregistration"""
 
         af_ip4 = VppEnum.vl_api_address_family_t.ADDRESS_IP4
         pt_ip = VppEnum.vl_api_punt_type_t.PUNT_API_TYPE_IP_PROTO
 
         af_ip4 = VppEnum.vl_api_address_family_t.ADDRESS_IP4
         pt_ip = VppEnum.vl_api_punt_type_t.PUNT_API_TYPE_IP_PROTO
@@ -944,28 +928,16 @@ class TestIpProtoPuntSocket(TestPuntSocket):
         # configure a punt socket
         #
         punt_ospf = {
         # configure a punt socket
         #
         punt_ospf = {
-            'type': pt_ip,
-            'punt': {
-                'ip_proto': {
-                    'af': af_ip4,
-                    'protocol': proto_ospf
-                }
-            }
+            "type": pt_ip,
+            "punt": {"ip_proto": {"af": af_ip4, "protocol": proto_ospf}},
         }
         punt_eigrp = {
         }
         punt_eigrp = {
-            'type': pt_ip,
-            'punt': {
-                'ip_proto': {
-                    'af': af_ip4,
-                    'protocol': proto_eigrp
-                }
-            }
+            "type": pt_ip,
+            "punt": {"ip_proto": {"af": af_ip4, "protocol": proto_eigrp}},
         }
 
         }
 
-        self.vapi.punt_socket_register(punt_ospf,
-                                       "%s/socket_punt_1" % self.tempdir)
-        self.vapi.punt_socket_register(punt_eigrp,
-                                       "%s/socket_punt_2" % self.tempdir)
+        self.vapi.punt_socket_register(punt_ospf, "%s/socket_punt_1" % self.tempdir)
+        self.vapi.punt_socket_register(punt_eigrp, "%s/socket_punt_2" % self.tempdir)
         self.logger.info(self.vapi.cli("sh punt sock reg ip"))
         punts = self.vapi.punt_socket_dump(type=pt_ip)
         self.assertEqual(len(punts), 2)
         self.logger.info(self.vapi.cli("sh punt sock reg ip"))
         punts = self.vapi.punt_socket_dump(type=pt_ip)
         self.assertEqual(len(punts), 2)
@@ -982,8 +954,7 @@ class TestIpProtoPuntSocket(TestPuntSocket):
         #
         # configure a punt socket again
         #
         #
         # configure a punt socket again
         #
-        self.vapi.punt_socket_register(punt_ospf,
-                                       "%s/socket_punt_3" % self.tempdir)
+        self.vapi.punt_socket_register(punt_ospf, "%s/socket_punt_3" % self.tempdir)
         punts = self.vapi.punt_socket_dump(type=pt_ip)
         self.assertEqual(len(punts), 2)
 
         punts = self.vapi.punt_socket_dump(type=pt_ip)
         self.assertEqual(len(punts), 2)
 
@@ -1003,7 +974,7 @@ class TestIpProtoPuntSocket(TestPuntSocket):
             self.assertTrue(rx.haslayer(OSPF_Hdr))
 
     def test_traffic(self):
             self.assertTrue(rx.haslayer(OSPF_Hdr))
 
     def test_traffic(self):
-        """ Punt socket traffic """
+        """Punt socket traffic"""
 
         af_ip4 = VppEnum.vl_api_address_family_t.ADDRESS_IP4
         pt_ip = VppEnum.vl_api_punt_type_t.PUNT_API_TYPE_IP_PROTO
 
         af_ip4 = VppEnum.vl_api_address_family_t.ADDRESS_IP4
         pt_ip = VppEnum.vl_api_punt_type_t.PUNT_API_TYPE_IP_PROTO
@@ -1013,28 +984,23 @@ class TestIpProtoPuntSocket(TestPuntSocket):
         # configure a punt socket to capture OSPF packets
         #
         punt_ospf = {
         # configure a punt socket to capture OSPF packets
         #
         punt_ospf = {
-            'type': pt_ip,
-            'punt': {
-                'ip_proto': {
-                    'af': af_ip4,
-                    'protocol': proto_ospf
-                }
-            }
+            "type": pt_ip,
+            "punt": {"ip_proto": {"af": af_ip4, "protocol": proto_ospf}},
         }
 
         #
         # create packet streams and configure a punt sockets
         #
         }
 
         #
         # create packet streams and configure a punt sockets
         #
-        pkt = (Ether(src=self.pg0.remote_mac,
-                     dst=self.pg0.local_mac) /
-               IP(src=self.pg0.remote_ip4, dst=self.pg0.local_ip4) /
-               OSPF_Hdr() /
-               OSPFv3_Hello())
+        pkt = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg0.local_ip4)
+            / OSPF_Hdr()
+            / OSPFv3_Hello()
+        )
         pkts = pkt * 7
 
         sock = self.socket_client_create("%s/socket_1" % self.tempdir)
         pkts = pkt * 7
 
         sock = self.socket_client_create("%s/socket_1" % self.tempdir)
-        self.vapi.punt_socket_register(
-            punt_ospf, "%s/socket_1" % self.tempdir)
+        self.vapi.punt_socket_register(punt_ospf, "%s/socket_1" % self.tempdir)
 
         #
         # send packets for each SPI we expect to be punted
 
         #
         # send packets for each SPI we expect to be punted
@@ -1051,7 +1017,7 @@ class TestIpProtoPuntSocket(TestPuntSocket):
 
 @tag_fixme_vpp_workers
 class TestPunt(VppTestCase):
 
 @tag_fixme_vpp_workers
 class TestPunt(VppTestCase):
-    """ Exception Punt Test Case """
+    """Exception Punt Test Case"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -1081,7 +1047,7 @@ class TestPunt(VppTestCase):
         super(TestPunt, self).tearDown()
 
     def test_punt(self):
         super(TestPunt, self).tearDown()
 
     def test_punt(self):
-        """ Exception Path testing """
+        """Exception Path testing"""
 
         #
         # dump the punt registered reasons
 
         #
         # dump the punt registered reasons
@@ -1089,9 +1055,11 @@ class TestPunt(VppTestCase):
         #
         rs = self.vapi.punt_reason_dump()
 
         #
         rs = self.vapi.punt_reason_dump()
 
-        reasons = ["ipsec6-no-such-tunnel",
-                   "ipsec4-no-such-tunnel",
-                   "ipsec4-spi-o-udp-0"]
+        reasons = [
+            "ipsec6-no-such-tunnel",
+            "ipsec4-no-such-tunnel",
+            "ipsec4-spi-o-udp-0",
+        ]
 
         for reason in reasons:
             found = False
 
         for reason in reasons:
             found = False
@@ -1106,28 +1074,41 @@ class TestPunt(VppTestCase):
         # send ACL deny packets out of pg0 and pg1.
         # the ACL is src,dst = 1.1.1.1,1.1.1.2
         #
         # send ACL deny packets out of pg0 and pg1.
         # the ACL is src,dst = 1.1.1.1,1.1.1.2
         #
-        ip_1_1_1_2 = VppIpRoute(self, "1.1.1.2", 32,
-                                [VppRoutePath(self.pg3.remote_ip4,
-                                              self.pg3.sw_if_index)])
+        ip_1_1_1_2 = VppIpRoute(
+            self,
+            "1.1.1.2",
+            32,
+            [VppRoutePath(self.pg3.remote_ip4, self.pg3.sw_if_index)],
+        )
         ip_1_1_1_2.add_vpp_config()
         ip_1_1_1_2.add_vpp_config()
-        ip_1_2 = VppIpRoute(self, "1::2", 128,
-                            [VppRoutePath(self.pg3.remote_ip6,
-                                          self.pg3.sw_if_index,
-                                          proto=DpoProto.DPO_PROTO_IP6)])
+        ip_1_2 = VppIpRoute(
+            self,
+            "1::2",
+            128,
+            [
+                VppRoutePath(
+                    self.pg3.remote_ip6,
+                    self.pg3.sw_if_index,
+                    proto=DpoProto.DPO_PROTO_IP6,
+                )
+            ],
+        )
         ip_1_2.add_vpp_config()
 
         ip_1_2.add_vpp_config()
 
-        p4 = (Ether(src=self.pg2.remote_mac,
-                    dst=self.pg2.local_mac) /
-              IP(src="1.1.1.1", dst="1.1.1.2") /
-              UDP(sport=1234, dport=1234) /
-              Raw(b'\xa5' * 100))
-        p6 = (Ether(src=self.pg2.remote_mac,
-                    dst=self.pg2.local_mac) /
-              IPv6(src="1::1", dst="1::2") /
-              UDP(sport=1234, dport=1234) /
-              Raw(b'\xa5' * 100))
-        self.send_and_expect(self.pg2, p4*1, self.pg3)
-        self.send_and_expect(self.pg2, p6*1, self.pg3)
+        p4 = (
+            Ether(src=self.pg2.remote_mac, dst=self.pg2.local_mac)
+            / IP(src="1.1.1.1", dst="1.1.1.2")
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
+        p6 = (
+            Ether(src=self.pg2.remote_mac, dst=self.pg2.local_mac)
+            / IPv6(src="1::1", dst="1::2")
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
+        self.send_and_expect(self.pg2, p4 * 1, self.pg3)
+        self.send_and_expect(self.pg2, p6 * 1, self.pg3)
 
         #
         # apply the punting features
 
         #
         # apply the punting features
@@ -1137,16 +1118,16 @@ class TestPunt(VppTestCase):
         #
         # dump the punt reasons to learn the IDs assigned
         #
         #
         # dump the punt reasons to learn the IDs assigned
         #
-        rs = self.vapi.punt_reason_dump(reason={'name': "reason-v4"})
+        rs = self.vapi.punt_reason_dump(reason={"name": "reason-v4"})
         r4 = rs[0].reason.id
         r4 = rs[0].reason.id
-        rs = self.vapi.punt_reason_dump(reason={'name': "reason-v6"})
+        rs = self.vapi.punt_reason_dump(reason={"name": "reason-v6"})
         r6 = rs[0].reason.id
 
         #
         # pkts now dropped
         #
         r6 = rs[0].reason.id
 
         #
         # pkts now dropped
         #
-        self.send_and_assert_no_replies(self.pg2, p4*NUM_PKTS)
-        self.send_and_assert_no_replies(self.pg2, p6*NUM_PKTS)
+        self.send_and_assert_no_replies(self.pg2, p4 * NUM_PKTS)
+        self.send_and_assert_no_replies(self.pg2, p6 * NUM_PKTS)
 
         #
         # Check state:
 
         #
         # Check state:
@@ -1154,13 +1135,12 @@ class TestPunt(VppTestCase):
         #  2 - per-reason counters
         #    2, 3 are the index of the assigned punt reason
         #
         #  2 - per-reason counters
         #    2, 3 are the index of the assigned punt reason
         #
-        stats = self.statistics.get_err_counter(
-            "/err/punt-dispatch/No registrations")
-        self.assertEqual(stats, 2*NUM_PKTS)
+        stats = self.statistics.get_err_counter("/err/punt-dispatch/No registrations")
+        self.assertEqual(stats, 2 * NUM_PKTS)
 
         stats = self.statistics.get_counter("/net/punt")
 
         stats = self.statistics.get_counter("/net/punt")
-        self.assertEqual(stats[0][r4]['packets'], NUM_PKTS)
-        self.assertEqual(stats[0][r6]['packets'], NUM_PKTS)
+        self.assertEqual(stats[0][r4]["packets"], NUM_PKTS)
+        self.assertEqual(stats[0][r6]["packets"], NUM_PKTS)
 
         #
         # use the test CLI to test a client that punts exception
 
         #
         # use the test CLI to test a client that punts exception
@@ -1169,8 +1149,8 @@ class TestPunt(VppTestCase):
         self.vapi.cli("test punt pg0 %s" % self.pg0.remote_ip4)
         self.vapi.cli("test punt pg0 %s" % self.pg0.remote_ip6)
 
         self.vapi.cli("test punt pg0 %s" % self.pg0.remote_ip4)
         self.vapi.cli("test punt pg0 %s" % self.pg0.remote_ip6)
 
-        rx4s = self.send_and_expect(self.pg2, p4*NUM_PKTS, self.pg0)
-        rx6s = self.send_and_expect(self.pg2, p6*NUM_PKTS, self.pg0)
+        rx4s = self.send_and_expect(self.pg2, p4 * NUM_PKTS, self.pg0)
+        rx6s = self.send_and_expect(self.pg2, p6 * NUM_PKTS, self.pg0)
 
         #
         # check the packets come out IP unmodified but destined to pg0 host
 
         #
         # check the packets come out IP unmodified but destined to pg0 host
@@ -1187,8 +1167,8 @@ class TestPunt(VppTestCase):
             self.assertEqual(p6[IPv6].hlim, rx[IPv6].hlim)
 
         stats = self.statistics.get_counter("/net/punt")
             self.assertEqual(p6[IPv6].hlim, rx[IPv6].hlim)
 
         stats = self.statistics.get_counter("/net/punt")
-        self.assertEqual(stats[0][r4]['packets'], 2*NUM_PKTS)
-        self.assertEqual(stats[0][r6]['packets'], 2*NUM_PKTS)
+        self.assertEqual(stats[0][r4]["packets"], 2 * NUM_PKTS)
+        self.assertEqual(stats[0][r6]["packets"], 2 * NUM_PKTS)
 
         #
         # add another registration for the same reason to send packets
 
         #
         # add another registration for the same reason to send packets
@@ -1234,8 +1214,8 @@ class TestPunt(VppTestCase):
             self.assertEqual(p6[IPv6].hlim, rx[IPv6].hlim)
 
         stats = self.statistics.get_counter("/net/punt")
             self.assertEqual(p6[IPv6].hlim, rx[IPv6].hlim)
 
         stats = self.statistics.get_counter("/net/punt")
-        self.assertEqual(stats[0][r4]['packets'], 3*NUM_PKTS)
-        self.assertEqual(stats[0][r6]['packets'], 3*NUM_PKTS)
+        self.assertEqual(stats[0][r4]["packets"], 3 * NUM_PKTS)
+        self.assertEqual(stats[0][r6]["packets"], 3 * NUM_PKTS)
 
         self.logger.info(self.vapi.cli("show vlib graph punt-dispatch"))
         self.logger.info(self.vapi.cli("show punt client"))
 
         self.logger.info(self.vapi.cli("show vlib graph punt-dispatch"))
         self.logger.info(self.vapi.cli("show punt client"))
@@ -1244,5 +1224,5 @@ class TestPunt(VppTestCase):
         self.logger.info(self.vapi.cli("show punt db"))
 
 
         self.logger.info(self.vapi.cli("show punt db"))
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index 02941a1..40a3dde 100644 (file)
@@ -5,8 +5,14 @@ import unittest
 from framework import VppTestCase, VppTestRunner
 from vpp_sub_interface import VppDot1QSubint
 from vpp_ip import DpoProto
 from framework import VppTestCase, VppTestRunner
 from vpp_sub_interface import VppDot1QSubint
 from vpp_ip import DpoProto
-from vpp_ip_route import VppIpRoute, VppRoutePath, VppMplsRoute, \
-    VppMplsLabel, VppMplsTable, FibPathProto
+from vpp_ip_route import (
+    VppIpRoute,
+    VppRoutePath,
+    VppMplsRoute,
+    VppMplsLabel,
+    VppMplsTable,
+    FibPathProto,
+)
 
 import scapy.compat
 from scapy.packet import Raw
 
 import scapy.compat
 from scapy.packet import Raw
@@ -21,7 +27,7 @@ NUM_PKTS = 67
 
 
 class TestQOS(VppTestCase):
 
 
 class TestQOS(VppTestCase):
-    """ QOS Test Case """
+    """QOS Test Case"""
 
     # Note: Since the enums aren't created dynamically until after
     #       the papi client attaches to VPP, we put it in a property to
 
     # Note: Since the enums aren't created dynamically until after
     #       the papi client attaches to VPP, we put it in a property to
@@ -63,7 +69,7 @@ class TestQOS(VppTestCase):
         super(TestQOS, self).tearDown()
 
     def test_qos_ip(self):
         super(TestQOS, self).tearDown()
 
     def test_qos_ip(self):
-        """ QoS Mark/Record/Store IP """
+        """QoS Mark/Record/Store IP"""
 
         #
         # for table 1 map the n=0xff possible values of input QoS mark,
 
         #
         # for table 1 map the n=0xff possible values of input QoS mark,
@@ -72,11 +78,8 @@ class TestQOS(VppTestCase):
         output = [scapy.compat.chb(0)] * 256
         for i in range(0, 255):
             output[i] = scapy.compat.chb(255 - i)
         output = [scapy.compat.chb(0)] * 256
         for i in range(0, 255):
             output[i] = scapy.compat.chb(255 - i)
-        os = b''.join(output)
-        rows = [{'outputs': os},
-                {'outputs': os},
-                {'outputs': os},
-                {'outputs': os}]
+        os = b"".join(output)
+        rows = [{"outputs": os}, {"outputs": os}, {"outputs": os}, {"outputs": os}]
 
         qem1 = VppQosEgressMap(self, 1, rows).add_vpp_config()
 
 
         qem1 = VppQosEgressMap(self, 1, rows).add_vpp_config()
 
@@ -84,29 +87,20 @@ class TestQOS(VppTestCase):
         # For table 2 (and up) use the value n for everything
         #
         output = [scapy.compat.chb(2)] * 256
         # For table 2 (and up) use the value n for everything
         #
         output = [scapy.compat.chb(2)] * 256
-        os = b''.join(output)
-        rows = [{'outputs': os},
-                {'outputs': os},
-                {'outputs': os},
-                {'outputs': os}]
+        os = b"".join(output)
+        rows = [{"outputs": os}, {"outputs": os}, {"outputs": os}, {"outputs": os}]
 
         qem2 = VppQosEgressMap(self, 2, rows).add_vpp_config()
 
         output = [scapy.compat.chb(3)] * 256
 
         qem2 = VppQosEgressMap(self, 2, rows).add_vpp_config()
 
         output = [scapy.compat.chb(3)] * 256
-        os = b''.join(output)
-        rows = [{'outputs': os},
-                {'outputs': os},
-                {'outputs': os},
-                {'outputs': os}]
+        os = b"".join(output)
+        rows = [{"outputs": os}, {"outputs": os}, {"outputs": os}, {"outputs": os}]
 
         qem3 = VppQosEgressMap(self, 3, rows).add_vpp_config()
 
         output = [scapy.compat.chb(4)] * 256
 
         qem3 = VppQosEgressMap(self, 3, rows).add_vpp_config()
 
         output = [scapy.compat.chb(4)] * 256
-        os = b''.join(output)
-        rows = [{'outputs': os},
-                {'outputs': os},
-                {'outputs': os},
-                {'outputs': os}]
+        os = b"".join(output)
+        rows = [{"outputs": os}, {"outputs": os}, {"outputs": os}, {"outputs": os}]
 
         qem4 = VppQosEgressMap(self, 4, rows).add_vpp_config()
         qem5 = VppQosEgressMap(self, 5, rows).add_vpp_config()
 
         qem4 = VppQosEgressMap(self, 4, rows).add_vpp_config()
         qem5 = VppQosEgressMap(self, 5, rows).add_vpp_config()
@@ -119,14 +113,18 @@ class TestQOS(VppTestCase):
         #
         # Bind interface pgN to table n
         #
         #
         # Bind interface pgN to table n
         #
-        qm1 = VppQosMark(self, self.pg1, qem1,
-                         self.QOS_SOURCE.QOS_API_SOURCE_IP).add_vpp_config()
-        qm2 = VppQosMark(self, self.pg2, qem2,
-                         self.QOS_SOURCE.QOS_API_SOURCE_IP).add_vpp_config()
-        qm3 = VppQosMark(self, self.pg3, qem3,
-                         self.QOS_SOURCE.QOS_API_SOURCE_IP).add_vpp_config()
-        qm4 = VppQosMark(self, self.pg4, qem4,
-                         self.QOS_SOURCE.QOS_API_SOURCE_IP).add_vpp_config()
+        qm1 = VppQosMark(
+            self, self.pg1, qem1, self.QOS_SOURCE.QOS_API_SOURCE_IP
+        ).add_vpp_config()
+        qm2 = VppQosMark(
+            self, self.pg2, qem2, self.QOS_SOURCE.QOS_API_SOURCE_IP
+        ).add_vpp_config()
+        qm3 = VppQosMark(
+            self, self.pg3, qem3, self.QOS_SOURCE.QOS_API_SOURCE_IP
+        ).add_vpp_config()
+        qm4 = VppQosMark(
+            self, self.pg4, qem4, self.QOS_SOURCE.QOS_API_SOURCE_IP
+        ).add_vpp_config()
         self.assertTrue(qm3.query_vpp_config())
 
         self.logger.info(self.vapi.cli("sh qos mark"))
         self.assertTrue(qm3.query_vpp_config())
 
         self.logger.info(self.vapi.cli("sh qos mark"))
@@ -134,15 +132,18 @@ class TestQOS(VppTestCase):
         #
         # packets ingress on Pg0
         #
         #
         # packets ingress on Pg0
         #
-        p_v4 = (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-                IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4, tos=1) /
-                UDP(sport=1234, dport=1234) /
-                Raw(scapy.compat.chb(100) * NUM_PKTS))
-        p_v6 = (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-                IPv6(src=self.pg0.remote_ip6, dst=self.pg1.remote_ip6,
-                     tc=1) /
-                UDP(sport=1234, dport=1234) /
-                Raw(scapy.compat.chb(100) * NUM_PKTS))
+        p_v4 = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4, tos=1)
+            / UDP(sport=1234, dport=1234)
+            / Raw(scapy.compat.chb(100) * NUM_PKTS)
+        )
+        p_v6 = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IPv6(src=self.pg0.remote_ip6, dst=self.pg1.remote_ip6, tc=1)
+            / UDP(sport=1234, dport=1234)
+            / Raw(scapy.compat.chb(100) * NUM_PKTS)
+        )
 
         #
         # Since we have not yet enabled the recording of the input QoS
 
         #
         # Since we have not yet enabled the recording of the input QoS
@@ -158,8 +159,7 @@ class TestQOS(VppTestCase):
         #
         # Enable QoS recording on IP input for pg0
         #
         #
         # Enable QoS recording on IP input for pg0
         #
-        qr1 = VppQosRecord(self, self.pg0,
-                           self.QOS_SOURCE.QOS_API_SOURCE_IP)
+        qr1 = VppQosRecord(self, self.pg0, self.QOS_SOURCE.QOS_API_SOURCE_IP)
         qr1.add_vpp_config()
         self.logger.info(self.vapi.cli("sh qos record"))
 
         qr1.add_vpp_config()
         self.logger.info(self.vapi.cli("sh qos record"))
 
@@ -258,9 +258,9 @@ class TestQOS(VppTestCase):
         #
         # enable QoS stroe instead of record
         #
         #
         # enable QoS stroe instead of record
         #
-        qst1 = VppQosStore(self, self.pg0,
-                           self.QOS_SOURCE.QOS_API_SOURCE_IP,
-                           5).add_vpp_config()
+        qst1 = VppQosStore(
+            self, self.pg0, self.QOS_SOURCE.QOS_API_SOURCE_IP, 5
+        ).add_vpp_config()
         self.logger.info(self.vapi.cli("sh qos store"))
 
         p_v4[IP].dst = self.pg1.remote_ip4
         self.logger.info(self.vapi.cli("sh qos store"))
 
         p_v4[IP].dst = self.pg1.remote_ip4
@@ -295,7 +295,7 @@ class TestQOS(VppTestCase):
             self.assertEqual(p[IP].tos, 254)
 
     def test_qos_mpls(self):
             self.assertEqual(p[IP].tos, 254)
 
     def test_qos_mpls(self):
-        """ QoS Mark/Record MPLS """
+        """QoS Mark/Record MPLS"""
 
         #
         # 255 QoS for all input values
 
         #
         # 255 QoS for all input values
@@ -305,58 +305,69 @@ class TestQOS(VppTestCase):
         from_mpls = 5
         from_vlan = 4
         output = [scapy.compat.chb(from_ext)] * 256
         from_mpls = 5
         from_vlan = 4
         output = [scapy.compat.chb(from_ext)] * 256
-        os1 = b''.join(output)
+        os1 = b"".join(output)
         output = [scapy.compat.chb(from_vlan)] * 256
         output = [scapy.compat.chb(from_vlan)] * 256
-        os2 = b''.join(output)
+        os2 = b"".join(output)
         output = [scapy.compat.chb(from_mpls)] * 256
         output = [scapy.compat.chb(from_mpls)] * 256
-        os3 = b''.join(output)
+        os3 = b"".join(output)
         output = [scapy.compat.chb(from_ip)] * 256
         output = [scapy.compat.chb(from_ip)] * 256
-        os4 = b''.join(output)
-        rows = [{'outputs': os1},
-                {'outputs': os2},
-                {'outputs': os3},
-                {'outputs': os4}]
+        os4 = b"".join(output)
+        rows = [{"outputs": os1}, {"outputs": os2}, {"outputs": os3}, {"outputs": os4}]
 
         qem1 = VppQosEgressMap(self, 1, rows).add_vpp_config()
 
         #
         # a route with 1 MPLS label
         #
 
         qem1 = VppQosEgressMap(self, 1, rows).add_vpp_config()
 
         #
         # a route with 1 MPLS label
         #
-        route_10_0_0_1 = VppIpRoute(self, "10.0.0.1", 32,
-                                    [VppRoutePath(self.pg1.remote_ip4,
-                                                  self.pg1.sw_if_index,
-                                                  labels=[32])])
+        route_10_0_0_1 = VppIpRoute(
+            self,
+            "10.0.0.1",
+            32,
+            [VppRoutePath(self.pg1.remote_ip4, self.pg1.sw_if_index, labels=[32])],
+        )
         route_10_0_0_1.add_vpp_config()
 
         #
         # a route with 3 MPLS labels
         #
         route_10_0_0_1.add_vpp_config()
 
         #
         # a route with 3 MPLS labels
         #
-        route_10_0_0_3 = VppIpRoute(self, "10.0.0.3", 32,
-                                    [VppRoutePath(self.pg1.remote_ip4,
-                                                  self.pg1.sw_if_index,
-                                                  labels=[63, 33, 34])])
+        route_10_0_0_3 = VppIpRoute(
+            self,
+            "10.0.0.3",
+            32,
+            [
+                VppRoutePath(
+                    self.pg1.remote_ip4, self.pg1.sw_if_index, labels=[63, 33, 34]
+                )
+            ],
+        )
         route_10_0_0_3.add_vpp_config()
 
         #
         # enable IP QoS recording on the input Pg0 and MPLS egress marking
         # on Pg1
         #
         route_10_0_0_3.add_vpp_config()
 
         #
         # enable IP QoS recording on the input Pg0 and MPLS egress marking
         # on Pg1
         #
-        qr1 = VppQosRecord(self, self.pg0,
-                           self.QOS_SOURCE.QOS_API_SOURCE_IP).add_vpp_config()
-        qm1 = VppQosMark(self, self.pg1, qem1,
-                         self.QOS_SOURCE.QOS_API_SOURCE_MPLS).add_vpp_config()
+        qr1 = VppQosRecord(
+            self, self.pg0, self.QOS_SOURCE.QOS_API_SOURCE_IP
+        ).add_vpp_config()
+        qm1 = VppQosMark(
+            self, self.pg1, qem1, self.QOS_SOURCE.QOS_API_SOURCE_MPLS
+        ).add_vpp_config()
 
         #
         # packet that will get one label added and 3 labels added resp.
         #
 
         #
         # packet that will get one label added and 3 labels added resp.
         #
-        p_1 = (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-               IP(src=self.pg0.remote_ip4, dst="10.0.0.1", tos=1) /
-               UDP(sport=1234, dport=1234) /
-               Raw(scapy.compat.chb(100) * NUM_PKTS))
-        p_3 = (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-               IP(src=self.pg0.remote_ip4, dst="10.0.0.3", tos=1) /
-               UDP(sport=1234, dport=1234) /
-               Raw(scapy.compat.chb(100) * NUM_PKTS))
+        p_1 = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg0.remote_ip4, dst="10.0.0.1", tos=1)
+            / UDP(sport=1234, dport=1234)
+            / Raw(scapy.compat.chb(100) * NUM_PKTS)
+        )
+        p_3 = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg0.remote_ip4, dst="10.0.0.3", tos=1)
+            / UDP(sport=1234, dport=1234)
+            / Raw(scapy.compat.chb(100) * NUM_PKTS)
+        )
 
         rx = self.send_and_expect(self.pg0, p_1 * NUM_PKTS, self.pg1)
 
 
         rx = self.send_and_expect(self.pg0, p_1 * NUM_PKTS, self.pg1)
 
@@ -387,26 +398,34 @@ class TestQOS(VppTestCase):
         # on Pg1
         #
         qr2 = VppQosRecord(
         # on Pg1
         #
         qr2 = VppQosRecord(
-            self, self.pg0,
-            self.QOS_SOURCE.QOS_API_SOURCE_MPLS).add_vpp_config()
+            self, self.pg0, self.QOS_SOURCE.QOS_API_SOURCE_MPLS
+        ).add_vpp_config()
         qm2 = VppQosMark(
         qm2 = VppQosMark(
-            self, self.pg1, qem1,
-            self.QOS_SOURCE.QOS_API_SOURCE_IP).add_vpp_config()
+            self, self.pg1, qem1, self.QOS_SOURCE.QOS_API_SOURCE_IP
+        ).add_vpp_config()
 
         #
         # MPLS x-connect - COS according to pg1 map
         #
 
         #
         # MPLS x-connect - COS according to pg1 map
         #
-        route_32_eos = VppMplsRoute(self, 32, 1,
-                                    [VppRoutePath(self.pg1.remote_ip4,
-                                                  self.pg1.sw_if_index,
-                                                  labels=[VppMplsLabel(33)])])
+        route_32_eos = VppMplsRoute(
+            self,
+            32,
+            1,
+            [
+                VppRoutePath(
+                    self.pg1.remote_ip4, self.pg1.sw_if_index, labels=[VppMplsLabel(33)]
+                )
+            ],
+        )
         route_32_eos.add_vpp_config()
 
         route_32_eos.add_vpp_config()
 
-        p_m1 = (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-                MPLS(label=32, cos=3, ttl=2) /
-                IP(src=self.pg0.remote_ip4, dst="10.0.0.1", tos=1) /
-                UDP(sport=1234, dport=1234) /
-                Raw(scapy.compat.chb(100) * NUM_PKTS))
+        p_m1 = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / MPLS(label=32, cos=3, ttl=2)
+            / IP(src=self.pg0.remote_ip4, dst="10.0.0.1", tos=1)
+            / UDP(sport=1234, dport=1234)
+            / Raw(scapy.compat.chb(100) * NUM_PKTS)
+        )
 
         rx = self.send_and_expect(self.pg0, p_m1 * NUM_PKTS, self.pg1)
         for p in rx:
 
         rx = self.send_and_expect(self.pg0, p_m1 * NUM_PKTS, self.pg1)
         for p in rx:
@@ -417,22 +436,26 @@ class TestQOS(VppTestCase):
         #
         # MPLS deag - COS is copied from MPLS to IP
         #
         #
         # MPLS deag - COS is copied from MPLS to IP
         #
-        route_33_eos = VppMplsRoute(self, 33, 1,
-                                    [VppRoutePath("0.0.0.0",
-                                                  0xffffffff,
-                                                  nh_table_id=0)])
+        route_33_eos = VppMplsRoute(
+            self, 33, 1, [VppRoutePath("0.0.0.0", 0xFFFFFFFF, nh_table_id=0)]
+        )
         route_33_eos.add_vpp_config()
 
         route_33_eos.add_vpp_config()
 
-        route_10_0_0_4 = VppIpRoute(self, "10.0.0.4", 32,
-                                    [VppRoutePath(self.pg1.remote_ip4,
-                                                  self.pg1.sw_if_index)])
+        route_10_0_0_4 = VppIpRoute(
+            self,
+            "10.0.0.4",
+            32,
+            [VppRoutePath(self.pg1.remote_ip4, self.pg1.sw_if_index)],
+        )
         route_10_0_0_4.add_vpp_config()
 
         route_10_0_0_4.add_vpp_config()
 
-        p_m2 = (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-                MPLS(label=33, ttl=2, cos=3) /
-                IP(src=self.pg0.remote_ip4, dst="10.0.0.4", tos=1) /
-                UDP(sport=1234, dport=1234) /
-                Raw(scapy.compat.chb(100) * NUM_PKTS))
+        p_m2 = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / MPLS(label=33, ttl=2, cos=3)
+            / IP(src=self.pg0.remote_ip4, dst="10.0.0.4", tos=1)
+            / UDP(sport=1234, dport=1234)
+            / Raw(scapy.compat.chb(100) * NUM_PKTS)
+        )
 
         rx = self.send_and_expect(self.pg0, p_m2 * NUM_PKTS, self.pg1)
 
 
         rx = self.send_and_expect(self.pg0, p_m2 * NUM_PKTS, self.pg1)
 
@@ -440,7 +463,7 @@ class TestQOS(VppTestCase):
             self.assertEqual(p[IP].tos, from_mpls)
 
     def test_qos_vlan(self):
             self.assertEqual(p[IP].tos, from_mpls)
 
     def test_qos_vlan(self):
-        """QoS mark/record VLAN """
+        """QoS mark/record VLAN"""
 
         #
         # QoS for all input values
 
         #
         # QoS for all input values
@@ -448,11 +471,8 @@ class TestQOS(VppTestCase):
         output = [scapy.compat.chb(0)] * 256
         for i in range(0, 255):
             output[i] = scapy.compat.chb(255 - i)
         output = [scapy.compat.chb(0)] * 256
         for i in range(0, 255):
             output[i] = scapy.compat.chb(255 - i)
-        os = b''.join(output)
-        rows = [{'outputs': os},
-                {'outputs': os},
-                {'outputs': os},
-                {'outputs': os}]
+        os = b"".join(output)
+        rows = [{"outputs": os}, {"outputs": os}, {"outputs": os}, {"outputs": os}]
 
         qem1 = VppQosEgressMap(self, 1, rows).add_vpp_config()
 
 
         qem1 = VppQosEgressMap(self, 1, rows).add_vpp_config()
 
@@ -468,58 +488,70 @@ class TestQOS(VppTestCase):
         # enable VLAN QoS recording/marking on the input Pg0 subinterface and
         #
         qr_v = VppQosRecord(
         # enable VLAN QoS recording/marking on the input Pg0 subinterface and
         #
         qr_v = VppQosRecord(
-            self, sub_if,
-            self.QOS_SOURCE.QOS_API_SOURCE_VLAN).add_vpp_config()
+            self, sub_if, self.QOS_SOURCE.QOS_API_SOURCE_VLAN
+        ).add_vpp_config()
         qm_v = VppQosMark(
         qm_v = VppQosMark(
-            self, sub_if, qem1,
-            self.QOS_SOURCE.QOS_API_SOURCE_VLAN).add_vpp_config()
+            self, sub_if, qem1, self.QOS_SOURCE.QOS_API_SOURCE_VLAN
+        ).add_vpp_config()
 
         #
         # IP marking/recording on pg1
         #
         qr_ip = VppQosRecord(
 
         #
         # IP marking/recording on pg1
         #
         qr_ip = VppQosRecord(
-            self, self.pg1,
-            self.QOS_SOURCE.QOS_API_SOURCE_IP).add_vpp_config()
+            self, self.pg1, self.QOS_SOURCE.QOS_API_SOURCE_IP
+        ).add_vpp_config()
         qm_ip = VppQosMark(
         qm_ip = VppQosMark(
-            self, self.pg1, qem1,
-            self.QOS_SOURCE.QOS_API_SOURCE_IP).add_vpp_config()
+            self, self.pg1, qem1, self.QOS_SOURCE.QOS_API_SOURCE_IP
+        ).add_vpp_config()
 
         #
         # a routes to/from sub-interface
         #
 
         #
         # a routes to/from sub-interface
         #
-        route_10_0_0_1 = VppIpRoute(self, "10.0.0.1", 32,
-                                    [VppRoutePath(sub_if.remote_ip4,
-                                                  sub_if.sw_if_index)])
+        route_10_0_0_1 = VppIpRoute(
+            self, "10.0.0.1", 32, [VppRoutePath(sub_if.remote_ip4, sub_if.sw_if_index)]
+        )
         route_10_0_0_1.add_vpp_config()
         route_10_0_0_1.add_vpp_config()
-        route_10_0_0_2 = VppIpRoute(self, "10.0.0.2", 32,
-                                    [VppRoutePath(self.pg1.remote_ip4,
-                                                  self.pg1.sw_if_index)])
+        route_10_0_0_2 = VppIpRoute(
+            self,
+            "10.0.0.2",
+            32,
+            [VppRoutePath(self.pg1.remote_ip4, self.pg1.sw_if_index)],
+        )
         route_10_0_0_2.add_vpp_config()
         route_10_0_0_2.add_vpp_config()
-        route_2001_1 = VppIpRoute(self, "2001::1", 128,
-                                  [VppRoutePath(sub_if.remote_ip6,
-                                                sub_if.sw_if_index)])
+        route_2001_1 = VppIpRoute(
+            self, "2001::1", 128, [VppRoutePath(sub_if.remote_ip6, sub_if.sw_if_index)]
+        )
         route_2001_1.add_vpp_config()
         route_2001_1.add_vpp_config()
-        route_2001_2 = VppIpRoute(self, "2001::2", 128,
-                                  [VppRoutePath(self.pg1.remote_ip6,
-                                                self.pg1.sw_if_index)])
+        route_2001_2 = VppIpRoute(
+            self,
+            "2001::2",
+            128,
+            [VppRoutePath(self.pg1.remote_ip6, self.pg1.sw_if_index)],
+        )
         route_2001_2.add_vpp_config()
 
         route_2001_2.add_vpp_config()
 
-        p_v1 = (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-                Dot1Q(vlan=11, prio=1) /
-                IP(src="1.1.1.1", dst="10.0.0.2", tos=1) /
-                UDP(sport=1234, dport=1234) /
-                Raw(scapy.compat.chb(100) * NUM_PKTS))
-
-        p_v2 = (Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac) /
-                IP(src="1.1.1.1", dst="10.0.0.1", tos=1) /
-                UDP(sport=1234, dport=1234) /
-                Raw(scapy.compat.chb(100) * NUM_PKTS))
-
-        p_v3 = (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-                Dot1Q(vlan=11, prio=1, id=1) /
-                IP(src="1.1.1.1", dst="10.0.0.2", tos=2) /
-                UDP(sport=1234, dport=1234) /
-                Raw(scapy.compat.chb(100) * NUM_PKTS))
+        p_v1 = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / Dot1Q(vlan=11, prio=1)
+            / IP(src="1.1.1.1", dst="10.0.0.2", tos=1)
+            / UDP(sport=1234, dport=1234)
+            / Raw(scapy.compat.chb(100) * NUM_PKTS)
+        )
+
+        p_v2 = (
+            Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
+            / IP(src="1.1.1.1", dst="10.0.0.1", tos=1)
+            / UDP(sport=1234, dport=1234)
+            / Raw(scapy.compat.chb(100) * NUM_PKTS)
+        )
+
+        p_v3 = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / Dot1Q(vlan=11, prio=1, id=1)
+            / IP(src="1.1.1.1", dst="10.0.0.2", tos=2)
+            / UDP(sport=1234, dport=1234)
+            / Raw(scapy.compat.chb(100) * NUM_PKTS)
+        )
 
         rx = self.send_and_expect(self.pg1, p_v2 * NUM_PKTS, self.pg0)
 
 
         rx = self.send_and_expect(self.pg1, p_v2 * NUM_PKTS, self.pg0)
 
@@ -537,16 +569,20 @@ class TestQOS(VppTestCase):
         for p in rx:
             self.assertEqual(p[IP].tos, 253)
 
         for p in rx:
             self.assertEqual(p[IP].tos, 253)
 
-        p_v1 = (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-                Dot1Q(vlan=11, prio=2) /
-                IPv6(src="2001::1", dst="2001::2", tc=1) /
-                UDP(sport=1234, dport=1234) /
-                Raw(scapy.compat.chb(100) * NUM_PKTS))
-
-        p_v2 = (Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac) /
-                IPv6(src="3001::1", dst="2001::1", tc=1) /
-                UDP(sport=1234, dport=1234) /
-                Raw(scapy.compat.chb(100) * NUM_PKTS))
+        p_v1 = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / Dot1Q(vlan=11, prio=2)
+            / IPv6(src="2001::1", dst="2001::2", tc=1)
+            / UDP(sport=1234, dport=1234)
+            / Raw(scapy.compat.chb(100) * NUM_PKTS)
+        )
+
+        p_v2 = (
+            Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
+            / IPv6(src="3001::1", dst="2001::1", tc=1)
+            / UDP(sport=1234, dport=1234)
+            / Raw(scapy.compat.chb(100) * NUM_PKTS)
+        )
 
         rx = self.send_and_expect(self.pg1, p_v2 * NUM_PKTS, self.pg0)
 
 
         rx = self.send_and_expect(self.pg1, p_v2 * NUM_PKTS, self.pg0)
 
@@ -566,5 +602,5 @@ class TestQOS(VppTestCase):
         sub_if.unconfig_ip6()
 
 
         sub_if.unconfig_ip6()
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index 339557d..fde781c 100644 (file)
@@ -12,20 +12,29 @@ from vpp_ip_route import VppIpTable, VppIpRoute, VppRoutePath
 
 
 class QUICAppWorker(Worker):
 
 
 class QUICAppWorker(Worker):
-    """ QUIC Test Application Worker """
+    """QUIC Test Application Worker"""
+
     process = None
 
     process = None
 
-    def __init__(self, appname, executable_args, logger, role,
-                 testcase, env=None, *args, **kwargs):
+    def __init__(
+        self,
+        appname,
+        executable_args,
+        logger,
+        role,
+        testcase,
+        env=None,
+        *args,
+        **kwargs,
+    ):
         if env is None:
             env = {}
         app = f"{config.vpp_build_dir}/vpp/bin/{appname}"
         self.args = [app] + executable_args
         self.role = role
         if env is None:
             env = {}
         app = f"{config.vpp_build_dir}/vpp/bin/{appname}"
         self.args = [app] + executable_args
         self.role = role
-        self.wait_for_gdb = 'wait-for-gdb'
+        self.wait_for_gdb = "wait-for-gdb"
         self.testcase = testcase
         self.testcase = testcase
-        super(QUICAppWorker, self).__init__(self.args, logger, env,
-                                            *args, **kwargs)
+        super(QUICAppWorker, self).__init__(self.args, logger, env, *args, **kwargs)
 
     def run(self):
         super(QUICAppWorker, self).run()
 
     def run(self):
         super(QUICAppWorker, self).run()
@@ -44,7 +53,7 @@ class QUICAppWorker(Worker):
 
 
 class QUICTestCase(VppTestCase):
 
 
 class QUICTestCase(VppTestCase):
-    """ QUIC Test Case """
+    """QUIC Test Case"""
 
     timeout = 20
     pre_test_sleep = 0.3
 
     timeout = 20
     pre_test_sleep = 0.3
@@ -57,7 +66,7 @@ class QUICTestCase(VppTestCase):
 
     def setUp(self):
         super(QUICTestCase, self).setUp()
 
     def setUp(self):
         super(QUICTestCase, self).setUp()
-        self.vppDebug = 'vpp_debug' in config.vpp_build_dir
+        self.vppDebug = "vpp_debug" in config.vpp_build_dir
 
         self.create_loopback_interfaces(2)
         self.uri = "quic://%s/1234" % self.loop0.local_ip4
 
         self.create_loopback_interfaces(2)
         self.uri = "quic://%s/1234" % self.loop0.local_ip4
@@ -74,20 +83,28 @@ class QUICTestCase(VppTestCase):
             table_id += 1
 
         # Configure namespaces
             table_id += 1
 
         # Configure namespaces
-        self.vapi.app_namespace_add_del(namespace_id="server",
-                                        sw_if_index=self.loop0.sw_if_index)
-        self.vapi.app_namespace_add_del(namespace_id="client",
-                                        sw_if_index=self.loop1.sw_if_index)
+        self.vapi.app_namespace_add_del(
+            namespace_id="server", sw_if_index=self.loop0.sw_if_index
+        )
+        self.vapi.app_namespace_add_del(
+            namespace_id="client", sw_if_index=self.loop1.sw_if_index
+        )
 
         # Add inter-table routes
 
         # Add inter-table routes
-        self.ip_t01 = VppIpRoute(self, self.loop1.local_ip4, 32,
-                                 [VppRoutePath("0.0.0.0",
-                                               0xffffffff,
-                                               nh_table_id=2)], table_id=1)
-        self.ip_t10 = VppIpRoute(self, self.loop0.local_ip4, 32,
-                                 [VppRoutePath("0.0.0.0",
-                                               0xffffffff,
-                                               nh_table_id=1)], table_id=2)
+        self.ip_t01 = VppIpRoute(
+            self,
+            self.loop1.local_ip4,
+            32,
+            [VppRoutePath("0.0.0.0", 0xFFFFFFFF, nh_table_id=2)],
+            table_id=1,
+        )
+        self.ip_t10 = VppIpRoute(
+            self,
+            self.loop0.local_ip4,
+            32,
+            [VppRoutePath("0.0.0.0", 0xFFFFFFFF, nh_table_id=1)],
+            table_id=2,
+        )
         self.ip_t01.add_vpp_config()
         self.ip_t10.add_vpp_config()
         self.logger.debug(self.vapi.cli("show ip fib"))
         self.ip_t01.add_vpp_config()
         self.ip_t10.add_vpp_config()
         self.logger.debug(self.vapi.cli("show ip fib"))
@@ -106,13 +123,15 @@ class QUICTestCase(VppTestCase):
 
 class QUICEchoIntTestCase(QUICTestCase):
     """QUIC Echo Internal Test Case"""
 
 class QUICEchoIntTestCase(QUICTestCase):
     """QUIC Echo Internal Test Case"""
-    test_bytes = ' test-bytes'
+
+    test_bytes = " test-bytes"
     extra_vpp_punt_config = ["session", "{", "enable", "poll-main", "}"]
 
     def setUp(self):
         super(QUICEchoIntTestCase, self).setUp()
     extra_vpp_punt_config = ["session", "{", "enable", "poll-main", "}"]
 
     def setUp(self):
         super(QUICEchoIntTestCase, self).setUp()
-        self.client_args = 'uri {uri} fifo-size 64{testbytes} appns client' \
-            .format(uri=self.uri, testbytes=self.test_bytes)
+        self.client_args = "uri {uri} fifo-size 64{testbytes} appns client".format(
+            uri=self.uri, testbytes=self.test_bytes
+        )
         self.server_args = "uri %s fifo-size 64 appns server" % self.uri
 
     def tearDown(self):
         self.server_args = "uri %s fifo-size 64 appns server" % self.uri
 
     def tearDown(self):
@@ -120,16 +139,16 @@ class QUICEchoIntTestCase(QUICTestCase):
 
     def server(self, *args):
         error = self.vapi.cli(
 
     def server(self, *args):
         error = self.vapi.cli(
-            "test echo server %s %s" %
-            (self.server_args, ' '.join(args)))
+            "test echo server %s %s" % (self.server_args, " ".join(args))
+        )
         if error:
             self.logger.critical(error)
             self.assertNotIn("failed", error)
 
     def client(self, *args):
         error = self.vapi.cli(
         if error:
             self.logger.critical(error)
             self.assertNotIn("failed", error)
 
     def client(self, *args):
         error = self.vapi.cli(
-            "test echo client %s %s" %
-            (self.client_args, ' '.join(args)))
+            "test echo client %s %s" % (self.client_args, " ".join(args))
+        )
         if error:
             self.logger.critical(error)
             self.assertNotIn("failed", error)
         if error:
             self.logger.critical(error)
             self.assertNotIn("failed", error)
@@ -138,6 +157,7 @@ class QUICEchoIntTestCase(QUICTestCase):
 @tag_fixme_vpp_workers
 class QUICEchoIntTransferTestCase(QUICEchoIntTestCase):
     """QUIC Echo Internal Transfer Test Case"""
 @tag_fixme_vpp_workers
 class QUICEchoIntTransferTestCase(QUICEchoIntTestCase):
     """QUIC Echo Internal Transfer Test Case"""
+
     def test_quic_int_transfer(self):
         """QUIC internal transfer"""
         self.server()
     def test_quic_int_transfer(self):
         """QUIC internal transfer"""
         self.server()
@@ -147,6 +167,7 @@ class QUICEchoIntTransferTestCase(QUICEchoIntTestCase):
 @tag_fixme_vpp_workers
 class QUICEchoIntSerialTestCase(QUICEchoIntTestCase):
     """QUIC Echo Internal Serial Transfer Test Case"""
 @tag_fixme_vpp_workers
 class QUICEchoIntSerialTestCase(QUICEchoIntTestCase):
     """QUIC Echo Internal Serial Transfer Test Case"""
+
     def test_quic_serial_int_transfer(self):
         """QUIC serial internal transfer"""
         self.server()
     def test_quic_serial_int_transfer(self):
         """QUIC serial internal transfer"""
         self.server()
@@ -160,6 +181,7 @@ class QUICEchoIntSerialTestCase(QUICEchoIntTestCase):
 @tag_fixme_vpp_workers
 class QUICEchoIntMStreamTestCase(QUICEchoIntTestCase):
     """QUIC Echo Internal MultiStream Test Case"""
 @tag_fixme_vpp_workers
 class QUICEchoIntMStreamTestCase(QUICEchoIntTestCase):
     """QUIC Echo Internal MultiStream Test Case"""
+
     def test_quic_int_multistream_transfer(self):
         """QUIC internal multi-stream transfer"""
         self.server()
     def test_quic_int_multistream_transfer(self):
         """QUIC internal multi-stream transfer"""
         self.server()
@@ -176,36 +198,63 @@ class QUICEchoExtTestCase(QUICTestCase):
     vpp_worker_count = 1
     server_fifo_size = "1M"
     client_fifo_size = "4M"
     vpp_worker_count = 1
     server_fifo_size = "1M"
     client_fifo_size = "4M"
-    extra_vpp_punt_config = ["session", "{",
-                             "enable", "poll-main", "evt_qs_memfd_seg",
-                             "evt_qs_seg_size", "64M",
-                             "event-queue-length", f"{evt_q_len}",
-                             "preallocated-sessions", "1024",
-                             "v4-session-table-buckets", "20000",
-                             "v4-session-table-memory", "64M",
-                             "v4-halfopen-table-buckets", "20000",
-                             "v4-halfopen-table-memory", "64M",
-                             "local-endpoints-table-buckets", "250000",
-                             "local-endpoints-table-memory", "512M",
-                             "}"]
+    extra_vpp_punt_config = [
+        "session",
+        "{",
+        "enable",
+        "poll-main",
+        "evt_qs_memfd_seg",
+        "evt_qs_seg_size",
+        "64M",
+        "event-queue-length",
+        f"{evt_q_len}",
+        "preallocated-sessions",
+        "1024",
+        "v4-session-table-buckets",
+        "20000",
+        "v4-session-table-memory",
+        "64M",
+        "v4-halfopen-table-buckets",
+        "20000",
+        "v4-halfopen-table-memory",
+        "64M",
+        "local-endpoints-table-buckets",
+        "250000",
+        "local-endpoints-table-memory",
+        "512M",
+        "}",
+    ]
 
     def setUp(self):
         super(QUICEchoExtTestCase, self).setUp()
         common_args = [
 
     def setUp(self):
         super(QUICEchoExtTestCase, self).setUp()
         common_args = [
-            "uri", self.uri,
+            "uri",
+            self.uri,
             "json",
             self.test_bytes,
             "json",
             self.test_bytes,
-            "socket-name", self.get_api_sock_path(),
-            "quic-setup", self.quic_setup,
-            "nthreads", "1",
-            "mq-size", f"{self.evt_q_len}"
+            "socket-name",
+            self.get_api_sock_path(),
+            "quic-setup",
+            self.quic_setup,
+            "nthreads",
+            "1",
+            "mq-size",
+            f"{self.evt_q_len}",
+        ]
+        self.server_echo_test_args = common_args + [
+            "server",
+            "appns",
+            "server",
+            "fifo-size",
+            f"{self.server_fifo_size}",
+        ]
+        self.client_echo_test_args = common_args + [
+            "client",
+            "appns",
+            "client",
+            "fifo-size",
+            f"{self.client_fifo_size}",
         ]
         ]
-        self.server_echo_test_args = common_args + \
-            ["server", "appns", "server", "fifo-size",
-             f"{self.server_fifo_size}"]
-        self.client_echo_test_args = common_args + \
-            ["client", "appns", "client", "fifo-size",
-             f"{self.client_fifo_size}"]
         error = self.vapi.cli("quic set fifo-size 2M")
         if error:
             self.logger.critical(error)
         error = self.vapi.cli("quic set fifo-size 2M")
         if error:
             self.logger.critical(error)
@@ -213,23 +262,13 @@ class QUICEchoExtTestCase(QUICTestCase):
 
     def server(self, *args):
         _args = self.server_echo_test_args + list(args)
 
     def server(self, *args):
         _args = self.server_echo_test_args + list(args)
-        self.worker_server = QUICAppWorker(
-            self.app,
-            _args,
-            self.logger,
-            'server',
-            self)
+        self.worker_server = QUICAppWorker(self.app, _args, self.logger, "server", self)
         self.worker_server.start()
         self.sleep(self.pre_test_sleep)
 
     def client(self, *args):
         _args = self.client_echo_test_args + list(args)
         self.worker_server.start()
         self.sleep(self.pre_test_sleep)
 
     def client(self, *args):
         _args = self.client_echo_test_args + list(args)
-        self.worker_client = QUICAppWorker(
-            self.app,
-            _args,
-            self.logger,
-            'client',
-            self)
+        self.worker_client = QUICAppWorker(self.app, _args, self.logger, "client", self)
         self.worker_client.start()
         timeout = None if self.debug_all else self.timeout
         self.worker_client.join(timeout)
         self.worker_client.start()
         timeout = None if self.debug_all else self.timeout
         self.worker_client.join(timeout)
@@ -246,22 +285,18 @@ class QUICEchoExtTestCase(QUICTestCase):
     def validate_ext_test_results(self):
         server_result = self.worker_server.result
         client_result = self.worker_client.result
     def validate_ext_test_results(self):
         server_result = self.worker_server.result
         client_result = self.worker_client.result
-        self.logger.info("Server worker result is `%s'" %
-                         server_result)
-        self.logger.info("Client worker result is `%s'" %
-                         client_result)
+        self.logger.info("Server worker result is `%s'" % server_result)
+        self.logger.info("Client worker result is `%s'" % client_result)
         server_kill_error = False
         if self.worker_server.result is None:
         server_kill_error = False
         if self.worker_server.result is None:
-            server_kill_error = self.worker_server.teardown(
-                self.logger, self.timeout)
+            server_kill_error = self.worker_server.teardown(self.logger, self.timeout)
         if self.worker_client.result is None:
             self.worker_client.teardown(self.logger, self.timeout)
         err_msg = "Wrong server worker return code (%s)" % server_result
         self.assertEqual(server_result, 0, err_msg)
         self.assertIsNotNone(
         if self.worker_client.result is None:
             self.worker_client.teardown(self.logger, self.timeout)
         err_msg = "Wrong server worker return code (%s)" % server_result
         self.assertEqual(server_result, 0, err_msg)
         self.assertIsNotNone(
-            client_result,
-            "Timeout! Client worker did not finish in %ss" %
-            self.timeout)
+            client_result, "Timeout! Client worker did not finish in %ss" % self.timeout
+        )
         err_msg = "Wrong client worker return code (%s)" % client_result
         self.assertEqual(client_result, 0, err_msg)
         self.assertFalse(server_kill_error, "Server kill errored")
         err_msg = "Wrong client worker return code (%s)" % client_result
         self.assertEqual(client_result, 0, err_msg)
         self.assertFalse(server_kill_error, "Server kill errored")
@@ -269,6 +304,7 @@ class QUICEchoExtTestCase(QUICTestCase):
 
 class QUICEchoExtTransferTestCase(QUICEchoExtTestCase):
     """QUIC Echo External Transfer Test Case"""
 
 class QUICEchoExtTransferTestCase(QUICEchoExtTestCase):
     """QUIC Echo External Transfer Test Case"""
+
     timeout = 60
 
     def test_quic_ext_transfer(self):
     timeout = 60
 
     def test_quic_ext_transfer(self):
@@ -280,9 +316,10 @@ class QUICEchoExtTransferTestCase(QUICEchoExtTestCase):
 
 class QUICEchoExtTransferBigTestCase(QUICEchoExtTestCase):
     """QUIC Echo External Transfer Big Test Case"""
 
 class QUICEchoExtTransferBigTestCase(QUICEchoExtTestCase):
     """QUIC Echo External Transfer Big Test Case"""
-    server_fifo_size = '4M'
-    client_fifo_size = '4M'
-    test_bytes = ''
+
+    server_fifo_size = "4M"
+    client_fifo_size = "4M"
+    test_bytes = ""
     timeout = 60
 
     @unittest.skipUnless(config.extended, "part of extended tests")
     timeout = 60
 
     @unittest.skipUnless(config.extended, "part of extended tests")
@@ -312,8 +349,7 @@ class QUICEchoExtQcloseTxTestCase(QUICEchoExtTestCase):
     @unittest.skip("testcase under development")
     def test_quic_ext_qclose_tx(self):
         """QUIC external transfer, tx close"""
     @unittest.skip("testcase under development")
     def test_quic_ext_qclose_tx(self):
         """QUIC external transfer, tx close"""
-        self.server("TX=0", "RX=10M", "qclose=W", "sclose=W",
-                    "rx-results-diff")
+        self.server("TX=0", "RX=10M", "qclose=W", "sclose=W", "rx-results-diff")
         self.client("TX=10M", "RX=0", "qclose=Y", "sclose=N")
         self.validate_ext_test_results()
 
         self.client("TX=10M", "RX=0", "qclose=Y", "sclose=N")
         self.validate_ext_test_results()
 
@@ -326,8 +362,7 @@ class QUICEchoExtEarlyQcloseRxTestCase(QUICEchoExtTestCase):
     def test_quic_ext_early_qclose_rx(self):
         """QUIC external transfer, early rx close"""
         self.server("TX=0", "RX=10M", "qclose=Y", "sclose=N")
     def test_quic_ext_early_qclose_rx(self):
         """QUIC external transfer, early rx close"""
         self.server("TX=0", "RX=10M", "qclose=Y", "sclose=N")
-        self.client("TX=20M", "RX=0", "qclose=W", "sclose=W",
-                    "tx-results-diff")
+        self.client("TX=20M", "RX=0", "qclose=W", "sclose=W", "tx-results-diff")
         self.validate_ext_test_results()
 
 
         self.validate_ext_test_results()
 
 
@@ -338,8 +373,7 @@ class QUICEchoExtEarlyQcloseTxTestCase(QUICEchoExtTestCase):
     @unittest.skip("testcase under development")
     def test_quic_ext_early_qclose_tx(self):
         """QUIC external transfer, early tx close"""
     @unittest.skip("testcase under development")
     def test_quic_ext_early_qclose_tx(self):
         """QUIC external transfer, early tx close"""
-        self.server("TX=0", "RX=20M", "qclose=W", "sclose=W",
-                    "rx-results-diff")
+        self.server("TX=0", "RX=20M", "qclose=W", "sclose=W", "rx-results-diff")
         self.client("TX=10M", "RX=0", "qclose=Y", "sclose=N")
         self.validate_ext_test_results()
 
         self.client("TX=10M", "RX=0", "qclose=Y", "sclose=N")
         self.validate_ext_test_results()
 
@@ -376,8 +410,7 @@ class QUICEchoExtEarlyScloseRxTestCase(QUICEchoExtTestCase):
     def test_quic_ext_early_sclose_rx(self):
         """QUIC external transfer, early rx stream close"""
         self.server("TX=0", "RX=10M", "qclose=N", "sclose=Y")
     def test_quic_ext_early_sclose_rx(self):
         """QUIC external transfer, early rx stream close"""
         self.server("TX=0", "RX=10M", "qclose=N", "sclose=Y")
-        self.client("TX=20M", "RX=0", "qclose=W", "sclose=W",
-                    "tx-results-diff")
+        self.client("TX=20M", "RX=0", "qclose=W", "sclose=W", "tx-results-diff")
         self.validate_ext_test_results()
 
 
         self.validate_ext_test_results()
 
 
@@ -388,14 +421,14 @@ class QUICEchoExtEarlyScloseTxTestCase(QUICEchoExtTestCase):
     @unittest.skip("testcase under development")
     def test_quic_ext_early_sclose_tx(self):
         """QUIC external transfer, early tx stream close"""
     @unittest.skip("testcase under development")
     def test_quic_ext_early_sclose_tx(self):
         """QUIC external transfer, early tx stream close"""
-        self.server("TX=0", "RX=20M", "qclose=W", "sclose=W",
-                    "rx-results-diff")
+        self.server("TX=0", "RX=20M", "qclose=W", "sclose=W", "rx-results-diff")
         self.client("TX=10M", "RX=0", "qclose=Y", "sclose=Y")
         self.validate_ext_test_results()
 
 
 class QUICEchoExtServerStreamTestCase(QUICEchoExtTestCase):
     """QUIC Echo External Transfer Server Stream Test Case"""
         self.client("TX=10M", "RX=0", "qclose=Y", "sclose=Y")
         self.validate_ext_test_results()
 
 
 class QUICEchoExtServerStreamTestCase(QUICEchoExtTestCase):
     """QUIC Echo External Transfer Server Stream Test Case"""
+
     quic_setup = "serverstream"
     timeout = 60
 
     quic_setup = "serverstream"
     timeout = 60
 
@@ -408,10 +441,11 @@ class QUICEchoExtServerStreamTestCase(QUICEchoExtTestCase):
 
 class QUICEchoExtServerStreamBigTestCase(QUICEchoExtTestCase):
     """QUIC Echo External Transfer Server Stream Big Test Case"""
 
 class QUICEchoExtServerStreamBigTestCase(QUICEchoExtTestCase):
     """QUIC Echo External Transfer Server Stream Big Test Case"""
+
     quic_setup = "serverstream"
     quic_setup = "serverstream"
-    server_fifo_size = '4M'
-    client_fifo_size = '4M'
-    test_bytes = ''
+    server_fifo_size = "4M"
+    client_fifo_size = "4M"
+    test_bytes = ""
     timeout = 60
 
     @unittest.skipUnless(config.extended, "part of extended tests")
     timeout = 60
 
     @unittest.skipUnless(config.extended, "part of extended tests")
@@ -424,6 +458,7 @@ class QUICEchoExtServerStreamBigTestCase(QUICEchoExtTestCase):
 
 class QUICEchoExtServerStreamQcloseRxTestCase(QUICEchoExtTestCase):
     """QUIC Echo External Transfer Server Stream Qclose Rx Test Case"""
 
 class QUICEchoExtServerStreamQcloseRxTestCase(QUICEchoExtTestCase):
     """QUIC Echo External Transfer Server Stream Qclose Rx Test Case"""
+
     quic_setup = "serverstream"
 
     @unittest.skipUnless(config.extended, "part of extended tests")
     quic_setup = "serverstream"
 
     @unittest.skipUnless(config.extended, "part of extended tests")
@@ -437,6 +472,7 @@ class QUICEchoExtServerStreamQcloseRxTestCase(QUICEchoExtTestCase):
 
 class QUICEchoExtServerStreamQcloseTxTestCase(QUICEchoExtTestCase):
     """QUIC Echo External Transfer Server Stream Qclose Tx Test Case"""
 
 class QUICEchoExtServerStreamQcloseTxTestCase(QUICEchoExtTestCase):
     """QUIC Echo External Transfer Server Stream Qclose Tx Test Case"""
+
     quic_setup = "serverstream"
 
     @unittest.skipUnless(config.extended, "part of extended tests")
     quic_setup = "serverstream"
 
     @unittest.skipUnless(config.extended, "part of extended tests")
@@ -444,27 +480,27 @@ class QUICEchoExtServerStreamQcloseTxTestCase(QUICEchoExtTestCase):
     def test_quic_ext_server_stream_qclose_tx(self):
         """QUIC external server transfer, tx close"""
         self.server("TX=10M", "RX=0", "qclose=Y", "sclose=N")
     def test_quic_ext_server_stream_qclose_tx(self):
         """QUIC external server transfer, tx close"""
         self.server("TX=10M", "RX=0", "qclose=Y", "sclose=N")
-        self.client("TX=0", "RX=10M", "qclose=W", "sclose=W",
-                    "rx-results-diff")
+        self.client("TX=0", "RX=10M", "qclose=W", "sclose=W", "rx-results-diff")
         self.validate_ext_test_results()
 
 
 class QUICEchoExtServerStreamEarlyQcloseRxTestCase(QUICEchoExtTestCase):
     """QUIC Echo External Transfer Server Stream Early Qclose Rx Test Case"""
         self.validate_ext_test_results()
 
 
 class QUICEchoExtServerStreamEarlyQcloseRxTestCase(QUICEchoExtTestCase):
     """QUIC Echo External Transfer Server Stream Early Qclose Rx Test Case"""
+
     quic_setup = "serverstream"
 
     @unittest.skipUnless(config.extended, "part of extended tests")
     @unittest.skip("testcase under development")
     def test_quic_ext_server_stream_early_qclose_rx(self):
         """QUIC external server transfer, early rx close"""
     quic_setup = "serverstream"
 
     @unittest.skipUnless(config.extended, "part of extended tests")
     @unittest.skip("testcase under development")
     def test_quic_ext_server_stream_early_qclose_rx(self):
         """QUIC external server transfer, early rx close"""
-        self.server("TX=20M", "RX=0", "qclose=W", "sclose=W",
-                    "tx-results-diff")
+        self.server("TX=20M", "RX=0", "qclose=W", "sclose=W", "tx-results-diff")
         self.client("TX=0", "RX=10M", "qclose=Y", "sclose=N")
         self.validate_ext_test_results()
 
 
 class QUICEchoExtServerStreamEarlyQcloseTxTestCase(QUICEchoExtTestCase):
     """QUIC Echo External Transfer Server Stream Early Qclose Tx Test Case"""
         self.client("TX=0", "RX=10M", "qclose=Y", "sclose=N")
         self.validate_ext_test_results()
 
 
 class QUICEchoExtServerStreamEarlyQcloseTxTestCase(QUICEchoExtTestCase):
     """QUIC Echo External Transfer Server Stream Early Qclose Tx Test Case"""
+
     quic_setup = "serverstream"
 
     @unittest.skipUnless(config.extended, "part of extended tests")
     quic_setup = "serverstream"
 
     @unittest.skipUnless(config.extended, "part of extended tests")
@@ -472,13 +508,13 @@ class QUICEchoExtServerStreamEarlyQcloseTxTestCase(QUICEchoExtTestCase):
     def test_quic_ext_server_stream_early_qclose_tx(self):
         """QUIC external server transfer, early tx close"""
         self.server("TX=10M", "RX=0", "qclose=Y", "sclose=N")
     def test_quic_ext_server_stream_early_qclose_tx(self):
         """QUIC external server transfer, early tx close"""
         self.server("TX=10M", "RX=0", "qclose=Y", "sclose=N")
-        self.client("TX=0", "RX=20M", "qclose=W", "sclose=W",
-                    "rx-results-diff")
+        self.client("TX=0", "RX=20M", "qclose=W", "sclose=W", "rx-results-diff")
         self.validate_ext_test_results()
 
 
 class QUICEchoExtServerStreamScloseRxTestCase(QUICEchoExtTestCase):
     """QUIC Echo External Transfer Server Stream Sclose Rx Test Case"""
         self.validate_ext_test_results()
 
 
 class QUICEchoExtServerStreamScloseRxTestCase(QUICEchoExtTestCase):
     """QUIC Echo External Transfer Server Stream Sclose Rx Test Case"""
+
     quic_setup = "serverstream"
 
     @unittest.skipUnless(config.extended, "part of extended tests")
     quic_setup = "serverstream"
 
     @unittest.skipUnless(config.extended, "part of extended tests")
@@ -492,6 +528,7 @@ class QUICEchoExtServerStreamScloseRxTestCase(QUICEchoExtTestCase):
 
 class QUICEchoExtServerStreamScloseTxTestCase(QUICEchoExtTestCase):
     """QUIC Echo External Transfer Server Stream Sclose Tx Test Case"""
 
 class QUICEchoExtServerStreamScloseTxTestCase(QUICEchoExtTestCase):
     """QUIC Echo External Transfer Server Stream Sclose Tx Test Case"""
+
     quic_setup = "serverstream"
 
     @unittest.skipUnless(config.extended, "part of extended tests")
     quic_setup = "serverstream"
 
     @unittest.skipUnless(config.extended, "part of extended tests")
@@ -505,20 +542,21 @@ class QUICEchoExtServerStreamScloseTxTestCase(QUICEchoExtTestCase):
 
 class QUICEchoExtServerStreamEarlyScloseRxTestCase(QUICEchoExtTestCase):
     """QUIC Echo External Transfer Server Stream Early Sclose Rx Test Case"""
 
 class QUICEchoExtServerStreamEarlyScloseRxTestCase(QUICEchoExtTestCase):
     """QUIC Echo External Transfer Server Stream Early Sclose Rx Test Case"""
+
     quic_setup = "serverstream"
 
     @unittest.skipUnless(config.extended, "part of extended tests")
     @unittest.skip("testcase under development")
     def test_quic_ext_server_stream_early_sclose_rx(self):
         """QUIC external server transfer, early rx stream close"""
     quic_setup = "serverstream"
 
     @unittest.skipUnless(config.extended, "part of extended tests")
     @unittest.skip("testcase under development")
     def test_quic_ext_server_stream_early_sclose_rx(self):
         """QUIC external server transfer, early rx stream close"""
-        self.server("TX=20M", "RX=0", "qclose=W", "sclose=W",
-                    "tx-results-diff")
+        self.server("TX=20M", "RX=0", "qclose=W", "sclose=W", "tx-results-diff")
         self.client("TX=0", "RX=10M", "qclose=N", "sclose=Y")
         self.validate_ext_test_results()
 
 
 class QUICEchoExtServerStreamEarlyScloseTxTestCase(QUICEchoExtTestCase):
     """QUIC Echo Ext Transfer Server Stream Early Sclose Tx Test Case"""
         self.client("TX=0", "RX=10M", "qclose=N", "sclose=Y")
         self.validate_ext_test_results()
 
 
 class QUICEchoExtServerStreamEarlyScloseTxTestCase(QUICEchoExtTestCase):
     """QUIC Echo Ext Transfer Server Stream Early Sclose Tx Test Case"""
+
     quic_setup = "serverstream"
 
     @unittest.skipUnless(config.extended, "part of extended tests")
     quic_setup = "serverstream"
 
     @unittest.skipUnless(config.extended, "part of extended tests")
@@ -526,13 +564,13 @@ class QUICEchoExtServerStreamEarlyScloseTxTestCase(QUICEchoExtTestCase):
     def test_quic_ext_server_stream_early_sclose_tx(self):
         """QUIC external server transfer, early tx stream close"""
         self.server("TX=10M", "RX=0", "qclose=Y", "sclose=Y")
     def test_quic_ext_server_stream_early_sclose_tx(self):
         """QUIC external server transfer, early tx stream close"""
         self.server("TX=10M", "RX=0", "qclose=Y", "sclose=Y")
-        self.client("TX=0", "RX=20M", "qclose=W", "sclose=W",
-                    "rx-results-diff")
+        self.client("TX=0", "RX=20M", "qclose=W", "sclose=W", "rx-results-diff")
         self.validate_ext_test_results()
 
 
 class QUICEchoExtServerStreamWorkersTestCase(QUICEchoExtTestCase):
     """QUIC Echo External Transfer Server Stream MultiWorker Test Case"""
         self.validate_ext_test_results()
 
 
 class QUICEchoExtServerStreamWorkersTestCase(QUICEchoExtTestCase):
     """QUIC Echo External Transfer Server Stream MultiWorker Test Case"""
+
     quic_setup = "serverstream"
 
     @unittest.skipUnless(config.extended, "part of extended tests")
     quic_setup = "serverstream"
 
     @unittest.skipUnless(config.extended, "part of extended tests")
@@ -544,5 +582,5 @@ class QUICEchoExtServerStreamWorkersTestCase(QUICEchoExtTestCase):
         self.validate_ext_test_results()
 
 
         self.validate_ext_test_results()
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index 4c7a7cd..cebe583 100644 (file)
@@ -9,10 +9,18 @@ import scapy.compat
 from scapy.packet import Raw
 from scapy.layers.l2 import Ether, GRE
 from scapy.layers.inet import IP, UDP, ICMP, icmptypes
 from scapy.packet import Raw
 from scapy.layers.l2 import Ether, GRE
 from scapy.layers.inet import IP, UDP, ICMP, icmptypes
-from scapy.layers.inet6 import HBHOptUnknown, ICMPv6ParamProblem,\
-    ICMPv6TimeExceeded, IPv6, IPv6ExtHdrFragment,\
-    IPv6ExtHdrHopByHop, IPv6ExtHdrDestOpt, PadN, ICMPv6EchoRequest,\
-    ICMPv6EchoReply
+from scapy.layers.inet6 import (
+    HBHOptUnknown,
+    ICMPv6ParamProblem,
+    ICMPv6TimeExceeded,
+    IPv6,
+    IPv6ExtHdrFragment,
+    IPv6ExtHdrHopByHop,
+    IPv6ExtHdrDestOpt,
+    PadN,
+    ICMPv6EchoRequest,
+    ICMPv6EchoReply,
+)
 from framework import VppTestCase, VppTestRunner
 from util import ppp, ppc, fragment_rfc791, fragment_rfc8200
 from vpp_gre_interface import VppGreInterface
 from framework import VppTestCase, VppTestRunner
 from util import ppp, ppc, fragment_rfc791, fragment_rfc8200
 from vpp_gre_interface import VppGreInterface
@@ -25,7 +33,7 @@ test_packet_count = 35
 
 
 class TestIPv4Reassembly(VppTestCase):
 
 
 class TestIPv4Reassembly(VppTestCase):
-    """ IPv4 Reassembly """
+    """IPv4 Reassembly"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -52,21 +60,29 @@ class TestIPv4Reassembly(VppTestCase):
         super().tearDownClass()
 
     def setUp(self):
         super().tearDownClass()
 
     def setUp(self):
-        """ Test setup - force timeout on existing reassemblies """
+        """Test setup - force timeout on existing reassemblies"""
         super().setUp()
         self.vapi.ip_reassembly_enable_disable(
         super().setUp()
         self.vapi.ip_reassembly_enable_disable(
-            sw_if_index=self.src_if.sw_if_index, enable_ip4=True)
-        self.vapi.ip_reassembly_set(timeout_ms=0, max_reassemblies=1000,
-                                    max_reassembly_length=1000,
-                                    expire_walk_interval_ms=10)
-        self.virtual_sleep(.25)
-        self.vapi.ip_reassembly_set(timeout_ms=1000000, max_reassemblies=1000,
-                                    max_reassembly_length=1000,
-                                    expire_walk_interval_ms=10000)
+            sw_if_index=self.src_if.sw_if_index, enable_ip4=True
+        )
+        self.vapi.ip_reassembly_set(
+            timeout_ms=0,
+            max_reassemblies=1000,
+            max_reassembly_length=1000,
+            expire_walk_interval_ms=10,
+        )
+        self.virtual_sleep(0.25)
+        self.vapi.ip_reassembly_set(
+            timeout_ms=1000000,
+            max_reassemblies=1000,
+            max_reassembly_length=1000,
+            expire_walk_interval_ms=10000,
+        )
 
     def tearDown(self):
         self.vapi.ip_reassembly_enable_disable(
 
     def tearDown(self):
         self.vapi.ip_reassembly_enable_disable(
-            sw_if_index=self.src_if.sw_if_index, enable_ip4=False)
+            sw_if_index=self.src_if.sw_if_index, enable_ip4=False
+        )
         super().tearDown()
 
     def show_commands_at_teardown(self):
         super().tearDown()
 
     def show_commands_at_teardown(self):
@@ -82,11 +98,14 @@ class TestIPv4Reassembly(VppTestCase):
         for i in range(0, packet_count):
             info = cls.create_packet_info(cls.src_if, cls.src_if)
             payload = cls.info_to_payload(info)
         for i in range(0, packet_count):
             info = cls.create_packet_info(cls.src_if, cls.src_if)
             payload = cls.info_to_payload(info)
-            p = (Ether(dst=cls.src_if.local_mac, src=cls.src_if.remote_mac) /
-                 IP(id=info.index, src=cls.src_if.remote_ip4,
-                    dst=cls.dst_if.remote_ip4) /
-                 UDP(sport=1234, dport=5678) /
-                 Raw(payload))
+            p = (
+                Ether(dst=cls.src_if.local_mac, src=cls.src_if.remote_mac)
+                / IP(
+                    id=info.index, src=cls.src_if.remote_ip4, dst=cls.dst_if.remote_ip4
+                )
+                / UDP(sport=1234, dport=5678)
+                / Raw(payload)
+            )
             size = packet_sizes[(i // 2) % len(packet_sizes)]
             cls.extend_packet(p, size, cls.padding)
             info.data = p
             size = packet_sizes[(i // 2) % len(packet_sizes)]
             cls.extend_packet(p, size, cls.padding)
             info.data = p
@@ -101,20 +120,21 @@ class TestIPv4Reassembly(VppTestCase):
             #                      p.__class__(scapy.compat.raw(p))))
             fragments_400 = fragment_rfc791(p, 400)
             fragments_300 = fragment_rfc791(p, 300)
             #                      p.__class__(scapy.compat.raw(p))))
             fragments_400 = fragment_rfc791(p, 400)
             fragments_300 = fragment_rfc791(p, 300)
-            fragments_200 = [
-                x for f in fragments_400 for x in fragment_rfc791(f, 200)]
-            cls.pkt_infos.append(
-                (index, fragments_400, fragments_300, fragments_200))
-        cls.fragments_400 = [
-            x for (_, frags, _, _) in cls.pkt_infos for x in frags]
-        cls.fragments_300 = [
-            x for (_, _, frags, _) in cls.pkt_infos for x in frags]
-        cls.fragments_200 = [
-            x for (_, _, _, frags) in cls.pkt_infos for x in frags]
-        cls.logger.debug("Fragmented %s packets into %s 400-byte fragments, "
-                         "%s 300-byte fragments and %s 200-byte fragments" %
-                         (len(infos), len(cls.fragments_400),
-                             len(cls.fragments_300), len(cls.fragments_200)))
+            fragments_200 = [x for f in fragments_400 for x in fragment_rfc791(f, 200)]
+            cls.pkt_infos.append((index, fragments_400, fragments_300, fragments_200))
+        cls.fragments_400 = [x for (_, frags, _, _) in cls.pkt_infos for x in frags]
+        cls.fragments_300 = [x for (_, _, frags, _) in cls.pkt_infos for x in frags]
+        cls.fragments_200 = [x for (_, _, _, frags) in cls.pkt_infos for x in frags]
+        cls.logger.debug(
+            "Fragmented %s packets into %s 400-byte fragments, "
+            "%s 300-byte fragments and %s 200-byte fragments"
+            % (
+                len(infos),
+                len(cls.fragments_400),
+                len(cls.fragments_300),
+                len(cls.fragments_200),
+            )
+        )
 
     def verify_capture(self, capture, dropped_packet_indexes=[]):
         """Verify captured packet stream.
 
     def verify_capture(self, capture, dropped_packet_indexes=[]):
         """Verify captured packet stream.
@@ -132,7 +152,8 @@ class TestIPv4Reassembly(VppTestCase):
                 packet_index = payload_info.index
                 self.assertTrue(
                     packet_index not in dropped_packet_indexes,
                 packet_index = payload_info.index
                 self.assertTrue(
                     packet_index not in dropped_packet_indexes,
-                    ppp("Packet received, but should be dropped:", packet))
+                    ppp("Packet received, but should be dropped:", packet),
+                )
                 if packet_index in seen:
                     raise Exception(ppp("Duplicate packet received", packet))
                 seen.add(packet_index)
                 if packet_index in seen:
                     raise Exception(ppp("Duplicate packet received", packet))
                 seen.add(packet_index)
@@ -148,11 +169,13 @@ class TestIPv4Reassembly(VppTestCase):
                 self.logger.error(ppp("Unexpected or invalid packet:", packet))
                 raise
         for index in self._packet_infos:
                 self.logger.error(ppp("Unexpected or invalid packet:", packet))
                 raise
         for index in self._packet_infos:
-            self.assertTrue(index in seen or index in dropped_packet_indexes,
-                            "Packet with packet_index %d not received" % index)
+            self.assertTrue(
+                index in seen or index in dropped_packet_indexes,
+                "Packet with packet_index %d not received" % index,
+            )
 
     def test_reassembly(self):
 
     def test_reassembly(self):
-        """ basic reassembly """
+        """basic reassembly"""
 
         self.pg_enable_capture()
         self.src_if.add_stream(self.fragments_200)
 
         self.pg_enable_capture()
         self.src_if.add_stream(self.fragments_200)
@@ -172,7 +195,7 @@ class TestIPv4Reassembly(VppTestCase):
         self.src_if.assert_nothing_captured()
 
     def test_verify_clear_trace_mid_reassembly(self):
         self.src_if.assert_nothing_captured()
 
     def test_verify_clear_trace_mid_reassembly(self):
-        """ verify clear trace works mid-reassembly """
+        """verify clear trace works mid-reassembly"""
 
         self.pg_enable_capture()
         self.src_if.add_stream(self.fragments_200[0:-1])
 
         self.pg_enable_capture()
         self.src_if.add_stream(self.fragments_200[0:-1])
@@ -187,7 +210,7 @@ class TestIPv4Reassembly(VppTestCase):
         self.verify_capture(packets)
 
     def test_reversed(self):
         self.verify_capture(packets)
 
     def test_reversed(self):
-        """ reverse order reassembly """
+        """reverse order reassembly"""
 
         fragments = list(self.fragments_200)
         fragments.reverse()
 
         fragments = list(self.fragments_200)
         fragments.reverse()
@@ -210,27 +233,33 @@ class TestIPv4Reassembly(VppTestCase):
         self.src_if.assert_nothing_captured()
 
     def test_long_fragment_chain(self):
         self.src_if.assert_nothing_captured()
 
     def test_long_fragment_chain(self):
-        """ long fragment chain """
+        """long fragment chain"""
 
 
-        error_cnt_str = \
+        error_cnt_str = (
             "/err/ip4-full-reassembly-feature/fragment chain too long (drop)"
             "/err/ip4-full-reassembly-feature/fragment chain too long (drop)"
+        )
 
         error_cnt = self.statistics.get_err_counter(error_cnt_str)
 
 
         error_cnt = self.statistics.get_err_counter(error_cnt_str)
 
-        self.vapi.ip_reassembly_set(timeout_ms=100, max_reassemblies=1000,
-                                    max_reassembly_length=3,
-                                    expire_walk_interval_ms=50)
-
-        p1 = (Ether(dst=self.src_if.local_mac, src=self.src_if.remote_mac) /
-              IP(id=1000, src=self.src_if.remote_ip4,
-                 dst=self.dst_if.remote_ip4) /
-              UDP(sport=1234, dport=5678) /
-              Raw(b"X" * 1000))
-        p2 = (Ether(dst=self.src_if.local_mac, src=self.src_if.remote_mac) /
-              IP(id=1001, src=self.src_if.remote_ip4,
-                 dst=self.dst_if.remote_ip4) /
-              UDP(sport=1234, dport=5678) /
-              Raw(b"X" * 1000))
+        self.vapi.ip_reassembly_set(
+            timeout_ms=100,
+            max_reassemblies=1000,
+            max_reassembly_length=3,
+            expire_walk_interval_ms=50,
+        )
+
+        p1 = (
+            Ether(dst=self.src_if.local_mac, src=self.src_if.remote_mac)
+            / IP(id=1000, src=self.src_if.remote_ip4, dst=self.dst_if.remote_ip4)
+            / UDP(sport=1234, dport=5678)
+            / Raw(b"X" * 1000)
+        )
+        p2 = (
+            Ether(dst=self.src_if.local_mac, src=self.src_if.remote_mac)
+            / IP(id=1001, src=self.src_if.remote_ip4, dst=self.dst_if.remote_ip4)
+            / UDP(sport=1234, dport=5678)
+            / Raw(b"X" * 1000)
+        )
         frags = fragment_rfc791(p1, 200) + fragment_rfc791(p2, 500)
 
         self.pg_enable_capture()
         frags = fragment_rfc791(p1, 200) + fragment_rfc791(p2, 500)
 
         self.pg_enable_capture()
@@ -241,19 +270,20 @@ class TestIPv4Reassembly(VppTestCase):
         self.assert_error_counter_equal(error_cnt_str, error_cnt + 1)
 
     def test_5737(self):
         self.assert_error_counter_equal(error_cnt_str, error_cnt + 1)
 
     def test_5737(self):
-        """ fragment length + ip header size > 65535 """
+        """fragment length + ip header size > 65535"""
         self.vapi.cli("clear errors")
         self.vapi.cli("clear errors")
-        raw = b'''E\x00\x00\x88,\xf8\x1f\xfe@\x01\x98\x00\xc0\xa8\n-\xc0\xa8\n\
+        raw = b"""E\x00\x00\x88,\xf8\x1f\xfe@\x01\x98\x00\xc0\xa8\n-\xc0\xa8\n\
 \x01\x08\x00\xf0J\xed\xcb\xf1\xf5Test-group: IPv4.IPv4.ipv4-message.\
 \x01\x08\x00\xf0J\xed\xcb\xf1\xf5Test-group: IPv4.IPv4.ipv4-message.\
-Ethernet-Payload.IPv4-Packet.IPv4-Header.Fragment-Offset; Test-case: 5737'''
-        malformed_packet = (Ether(dst=self.src_if.local_mac,
-                                  src=self.src_if.remote_mac) /
-                            IP(raw))
-        p = (Ether(dst=self.src_if.local_mac, src=self.src_if.remote_mac) /
-             IP(id=1000, src=self.src_if.remote_ip4,
-                dst=self.dst_if.remote_ip4) /
-             UDP(sport=1234, dport=5678) /
-             Raw(b"X" * 1000))
+Ethernet-Payload.IPv4-Packet.IPv4-Header.Fragment-Offset; Test-case: 5737"""
+        malformed_packet = Ether(
+            dst=self.src_if.local_mac, src=self.src_if.remote_mac
+        ) / IP(raw)
+        p = (
+            Ether(dst=self.src_if.local_mac, src=self.src_if.remote_mac)
+            / IP(id=1000, src=self.src_if.remote_ip4, dst=self.dst_if.remote_ip4)
+            / UDP(sport=1234, dport=5678)
+            / Raw(b"X" * 1000)
+        )
         valid_fragments = fragment_rfc791(p, 400)
 
         counter = "/err/ip4-full-reassembly-feature/malformed packets"
         valid_fragments = fragment_rfc791(p, 400)
 
         counter = "/err/ip4-full-reassembly-feature/malformed packets"
@@ -264,33 +294,50 @@ Ethernet-Payload.IPv4-Packet.IPv4-Header.Fragment-Offset; Test-case: 5737'''
 
         self.dst_if.get_capture(1)
         self.logger.debug(self.vapi.ppcli("show error"))
 
         self.dst_if.get_capture(1)
         self.logger.debug(self.vapi.ppcli("show error"))
-        self.assertEqual(self.statistics.get_err_counter(counter),
-                         error_counter + 1)
+        self.assertEqual(self.statistics.get_err_counter(counter), error_counter + 1)
 
     def test_44924(self):
 
     def test_44924(self):
-        """ compress tiny fragments """
-        packets = [(Ether(dst=self.src_if.local_mac,
-                          src=self.src_if.remote_mac) /
-                    IP(id=24339, flags="MF", frag=0, ttl=64,
-                       src=self.src_if.remote_ip4,
-                       dst=self.dst_if.remote_ip4) /
-                    ICMP(type="echo-request", code=0, id=0x1fe6, seq=0x2407) /
-                    Raw(load='Test-group: IPv4')),
-                   (Ether(dst=self.src_if.local_mac,
-                          src=self.src_if.remote_mac) /
-                    IP(id=24339, flags="MF", frag=3, ttl=64,
-                       src=self.src_if.remote_ip4,
-                       dst=self.dst_if.remote_ip4) /
-                    ICMP(type="echo-request", code=0, id=0x1fe6, seq=0x2407) /
-                    Raw(load='.IPv4.Fragmentation.vali')),
-                   (Ether(dst=self.src_if.local_mac,
-                          src=self.src_if.remote_mac) /
-                    IP(id=24339, frag=6, ttl=64,
-                       src=self.src_if.remote_ip4,
-                       dst=self.dst_if.remote_ip4) /
-                    ICMP(type="echo-request", code=0, id=0x1fe6, seq=0x2407) /
-                    Raw(load='d; Test-case: 44924'))
-                   ]
+        """compress tiny fragments"""
+        packets = [
+            (
+                Ether(dst=self.src_if.local_mac, src=self.src_if.remote_mac)
+                / IP(
+                    id=24339,
+                    flags="MF",
+                    frag=0,
+                    ttl=64,
+                    src=self.src_if.remote_ip4,
+                    dst=self.dst_if.remote_ip4,
+                )
+                / ICMP(type="echo-request", code=0, id=0x1FE6, seq=0x2407)
+                / Raw(load="Test-group: IPv4")
+            ),
+            (
+                Ether(dst=self.src_if.local_mac, src=self.src_if.remote_mac)
+                / IP(
+                    id=24339,
+                    flags="MF",
+                    frag=3,
+                    ttl=64,
+                    src=self.src_if.remote_ip4,
+                    dst=self.dst_if.remote_ip4,
+                )
+                / ICMP(type="echo-request", code=0, id=0x1FE6, seq=0x2407)
+                / Raw(load=".IPv4.Fragmentation.vali")
+            ),
+            (
+                Ether(dst=self.src_if.local_mac, src=self.src_if.remote_mac)
+                / IP(
+                    id=24339,
+                    frag=6,
+                    ttl=64,
+                    src=self.src_if.remote_ip4,
+                    dst=self.dst_if.remote_ip4,
+                )
+                / ICMP(type="echo-request", code=0, id=0x1FE6, seq=0x2407)
+                / Raw(load="d; Test-case: 44924")
+            ),
+        ]
 
         self.pg_enable_capture()
         self.src_if.add_stream(packets)
 
         self.pg_enable_capture()
         self.src_if.add_stream(packets)
@@ -299,27 +346,42 @@ Ethernet-Payload.IPv4-Packet.IPv4-Header.Fragment-Offset; Test-case: 5737'''
         self.dst_if.get_capture(1)
 
     def test_frag_1(self):
         self.dst_if.get_capture(1)
 
     def test_frag_1(self):
-        """ fragment of size 1 """
+        """fragment of size 1"""
         self.vapi.cli("clear errors")
         self.vapi.cli("clear errors")
-        malformed_packets = [(Ether(dst=self.src_if.local_mac,
-                                    src=self.src_if.remote_mac) /
-                              IP(id=7, len=21, flags="MF", frag=0, ttl=64,
-                                 src=self.src_if.remote_ip4,
-                                 dst=self.dst_if.remote_ip4) /
-                              ICMP(type="echo-request")),
-                             (Ether(dst=self.src_if.local_mac,
-                                    src=self.src_if.remote_mac) /
-                              IP(id=7, len=21, frag=1, ttl=64,
-                                 src=self.src_if.remote_ip4,
-                                 dst=self.dst_if.remote_ip4) /
-                              Raw(load=b'\x08')),
-                             ]
-
-        p = (Ether(dst=self.src_if.local_mac, src=self.src_if.remote_mac) /
-             IP(id=1000, src=self.src_if.remote_ip4,
-                dst=self.dst_if.remote_ip4) /
-             UDP(sport=1234, dport=5678) /
-             Raw(b"X" * 1000))
+        malformed_packets = [
+            (
+                Ether(dst=self.src_if.local_mac, src=self.src_if.remote_mac)
+                / IP(
+                    id=7,
+                    len=21,
+                    flags="MF",
+                    frag=0,
+                    ttl=64,
+                    src=self.src_if.remote_ip4,
+                    dst=self.dst_if.remote_ip4,
+                )
+                / ICMP(type="echo-request")
+            ),
+            (
+                Ether(dst=self.src_if.local_mac, src=self.src_if.remote_mac)
+                / IP(
+                    id=7,
+                    len=21,
+                    frag=1,
+                    ttl=64,
+                    src=self.src_if.remote_ip4,
+                    dst=self.dst_if.remote_ip4,
+                )
+                / Raw(load=b"\x08")
+            ),
+        ]
+
+        p = (
+            Ether(dst=self.src_if.local_mac, src=self.src_if.remote_mac)
+            / IP(id=1000, src=self.src_if.remote_ip4, dst=self.dst_if.remote_ip4)
+            / UDP(sport=1234, dport=5678)
+            / Raw(b"X" * 1000)
+        )
         valid_fragments = fragment_rfc791(p, 400)
 
         self.pg_enable_capture()
         valid_fragments = fragment_rfc791(p, 400)
 
         self.pg_enable_capture()
@@ -335,7 +397,7 @@ Ethernet-Payload.IPv4-Packet.IPv4-Header.Fragment-Offset; Test-case: 5737'''
         #     "/err/ip4-full-reassembly-feature/malformed packets", 1)
 
     def test_random(self):
         #     "/err/ip4-full-reassembly-feature/malformed packets", 1)
 
     def test_random(self):
-        """ random order reassembly """
+        """random order reassembly"""
 
         fragments = list(self.fragments_200)
         shuffle(fragments)
 
         fragments = list(self.fragments_200)
         shuffle(fragments)
@@ -358,10 +420,11 @@ Ethernet-Payload.IPv4-Packet.IPv4-Header.Fragment-Offset; Test-case: 5737'''
         self.src_if.assert_nothing_captured()
 
     def test_duplicates(self):
         self.src_if.assert_nothing_captured()
 
     def test_duplicates(self):
-        """ duplicate fragments """
+        """duplicate fragments"""
 
         fragments = [
 
         fragments = [
-            x for (_, frags, _, _) in self.pkt_infos
+            x
+            for (_, frags, _, _) in self.pkt_infos
             for x in frags
             for _ in range(0, min(2, len(frags)))
         ]
             for x in frags
             for _ in range(0, min(2, len(frags)))
         ]
@@ -375,7 +438,7 @@ Ethernet-Payload.IPv4-Packet.IPv4-Header.Fragment-Offset; Test-case: 5737'''
         self.src_if.assert_nothing_captured()
 
     def test_overlap1(self):
         self.src_if.assert_nothing_captured()
 
     def test_overlap1(self):
-        """ overlapping fragments case #1 """
+        """overlapping fragments case #1"""
 
         fragments = []
         for _, _, frags_300, frags_200 in self.pkt_infos:
 
         fragments = []
         for _, _, frags_300, frags_200 in self.pkt_infos:
@@ -404,7 +467,7 @@ Ethernet-Payload.IPv4-Packet.IPv4-Header.Fragment-Offset; Test-case: 5737'''
         self.src_if.assert_nothing_captured()
 
     def test_overlap2(self):
         self.src_if.assert_nothing_captured()
 
     def test_overlap2(self):
-        """ overlapping fragments case #2 """
+        """overlapping fragments case #2"""
 
         fragments = []
         for _, _, frags_300, frags_200 in self.pkt_infos:
 
         fragments = []
         for _, _, frags_300, frags_200 in self.pkt_infos:
@@ -439,94 +502,112 @@ Ethernet-Payload.IPv4-Packet.IPv4-Header.Fragment-Offset; Test-case: 5737'''
         self.src_if.assert_nothing_captured()
 
     def test_timeout_inline(self):
         self.src_if.assert_nothing_captured()
 
     def test_timeout_inline(self):
-        """ timeout (inline) """
+        """timeout (inline)"""
 
         dropped_packet_indexes = set(
             index for (index, frags, _, _) in self.pkt_infos if len(frags) > 1
         )
 
 
         dropped_packet_indexes = set(
             index for (index, frags, _, _) in self.pkt_infos if len(frags) > 1
         )
 
-        self.vapi.ip_reassembly_set(timeout_ms=0, max_reassemblies=1000,
-                                    max_reassembly_length=3,
-                                    expire_walk_interval_ms=10000)
+        self.vapi.ip_reassembly_set(
+            timeout_ms=0,
+            max_reassemblies=1000,
+            max_reassembly_length=3,
+            expire_walk_interval_ms=10000,
+        )
 
         self.pg_enable_capture()
         self.src_if.add_stream(self.fragments_400)
         self.pg_start()
 
         packets = self.dst_if.get_capture(
 
         self.pg_enable_capture()
         self.src_if.add_stream(self.fragments_400)
         self.pg_start()
 
         packets = self.dst_if.get_capture(
-            len(self.pkt_infos) - len(dropped_packet_indexes))
+            len(self.pkt_infos) - len(dropped_packet_indexes)
+        )
         self.verify_capture(packets, dropped_packet_indexes)
         self.src_if.assert_nothing_captured()
 
     def test_timeout_cleanup(self):
         self.verify_capture(packets, dropped_packet_indexes)
         self.src_if.assert_nothing_captured()
 
     def test_timeout_cleanup(self):
-        """ timeout (cleanup) """
+        """timeout (cleanup)"""
 
         # whole packets + fragmented packets sans last fragment
         fragments = [
 
         # whole packets + fragmented packets sans last fragment
         fragments = [
-            x for (_, frags_400, _, _) in self.pkt_infos
-            for x in frags_400[:-1 if len(frags_400) > 1 else None]
+            x
+            for (_, frags_400, _, _) in self.pkt_infos
+            for x in frags_400[: -1 if len(frags_400) > 1 else None]
         ]
 
         # last fragments for fragmented packets
         ]
 
         # last fragments for fragmented packets
-        fragments2 = [frags_400[-1]
-                      for (_, frags_400, _, _) in self.pkt_infos
-                      if len(frags_400) > 1]
+        fragments2 = [
+            frags_400[-1]
+            for (_, frags_400, _, _) in self.pkt_infos
+            if len(frags_400) > 1
+        ]
 
         dropped_packet_indexes = set(
 
         dropped_packet_indexes = set(
-            index for (index, frags_400, _, _) in self.pkt_infos
-            if len(frags_400) > 1)
+            index for (index, frags_400, _, _) in self.pkt_infos if len(frags_400) > 1
+        )
 
 
-        self.vapi.ip_reassembly_set(timeout_ms=100, max_reassemblies=1000,
-                                    max_reassembly_length=1000,
-                                    expire_walk_interval_ms=50)
+        self.vapi.ip_reassembly_set(
+            timeout_ms=100,
+            max_reassemblies=1000,
+            max_reassembly_length=1000,
+            expire_walk_interval_ms=50,
+        )
 
         self.pg_enable_capture()
         self.src_if.add_stream(fragments)
         self.pg_start()
 
 
         self.pg_enable_capture()
         self.src_if.add_stream(fragments)
         self.pg_start()
 
-        self.virtual_sleep(.25, "wait before sending rest of fragments")
+        self.virtual_sleep(0.25, "wait before sending rest of fragments")
 
         self.src_if.add_stream(fragments2)
         self.pg_start()
 
         packets = self.dst_if.get_capture(
 
         self.src_if.add_stream(fragments2)
         self.pg_start()
 
         packets = self.dst_if.get_capture(
-            len(self.pkt_infos) - len(dropped_packet_indexes))
+            len(self.pkt_infos) - len(dropped_packet_indexes)
+        )
         self.verify_capture(packets, dropped_packet_indexes)
         self.src_if.assert_nothing_captured()
 
     def test_disabled(self):
         self.verify_capture(packets, dropped_packet_indexes)
         self.src_if.assert_nothing_captured()
 
     def test_disabled(self):
-        """ reassembly disabled """
+        """reassembly disabled"""
 
         dropped_packet_indexes = set(
 
         dropped_packet_indexes = set(
-            index for (index, frags_400, _, _) in self.pkt_infos
-            if len(frags_400) > 1)
+            index for (index, frags_400, _, _) in self.pkt_infos if len(frags_400) > 1
+        )
 
 
-        self.vapi.ip_reassembly_set(timeout_ms=1000, max_reassemblies=0,
-                                    max_reassembly_length=3,
-                                    expire_walk_interval_ms=10000)
+        self.vapi.ip_reassembly_set(
+            timeout_ms=1000,
+            max_reassemblies=0,
+            max_reassembly_length=3,
+            expire_walk_interval_ms=10000,
+        )
 
         self.pg_enable_capture()
         self.src_if.add_stream(self.fragments_400)
         self.pg_start()
 
         packets = self.dst_if.get_capture(
 
         self.pg_enable_capture()
         self.src_if.add_stream(self.fragments_400)
         self.pg_start()
 
         packets = self.dst_if.get_capture(
-            len(self.pkt_infos) - len(dropped_packet_indexes))
+            len(self.pkt_infos) - len(dropped_packet_indexes)
+        )
         self.verify_capture(packets, dropped_packet_indexes)
         self.src_if.assert_nothing_captured()
 
     def test_local_enable_disable(self):
         self.verify_capture(packets, dropped_packet_indexes)
         self.src_if.assert_nothing_captured()
 
     def test_local_enable_disable(self):
-        """ local reassembly enabled/disable """
+        """local reassembly enabled/disable"""
         self.vapi.ip_reassembly_enable_disable(
         self.vapi.ip_reassembly_enable_disable(
-            sw_if_index=self.src_if.sw_if_index, enable_ip4=False)
+            sw_if_index=self.src_if.sw_if_index, enable_ip4=False
+        )
         self.vapi.ip_local_reass_enable_disable(enable_ip4=True)
         self.vapi.ip_local_reass_enable_disable(enable_ip4=True)
-        p = (Ether(src=self.src_if.remote_mac, dst=self.src_if.local_mac) /
-             IP(src=self.src_if.remote_ip4, dst=self.src_if.local_ip4) /
-             ICMP(id=1234, type='echo-request') /
-             Raw('x' * 1000))
+        p = (
+            Ether(src=self.src_if.remote_mac, dst=self.src_if.local_mac)
+            / IP(src=self.src_if.remote_ip4, dst=self.src_if.local_ip4)
+            / ICMP(id=1234, type="echo-request")
+            / Raw("x" * 1000)
+        )
         frags = fragment_rfc791(p, 400)
         r = self.send_and_expect(self.src_if, frags, self.src_if, n_rx=1)[0]
         self.assertEqual(1234, r[ICMP].id)
         frags = fragment_rfc791(p, 400)
         r = self.send_and_expect(self.src_if, frags, self.src_if, n_rx=1)[0]
         self.assertEqual(1234, r[ICMP].id)
-        self.assertEqual(icmptypes[r[ICMP].type], 'echo-reply')
+        self.assertEqual(icmptypes[r[ICMP].type], "echo-reply")
         self.vapi.ip_local_reass_enable_disable()
 
         self.send_and_assert_no_replies(self.src_if, frags)
         self.vapi.ip_local_reass_enable_disable()
 
         self.send_and_assert_no_replies(self.src_if, frags)
@@ -534,7 +615,7 @@ Ethernet-Payload.IPv4-Packet.IPv4-Header.Fragment-Offset; Test-case: 5737'''
 
 
 class TestIPv4SVReassembly(VppTestCase):
 
 
 class TestIPv4SVReassembly(VppTestCase):
-    """ IPv4 Shallow Virtual Reassembly """
+    """IPv4 Shallow Virtual Reassembly"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -551,22 +632,28 @@ class TestIPv4SVReassembly(VppTestCase):
             i.resolve_arp()
 
     def setUp(self):
             i.resolve_arp()
 
     def setUp(self):
-        """ Test setup - force timeout on existing reassemblies """
+        """Test setup - force timeout on existing reassemblies"""
         super().setUp()
         self.vapi.ip_reassembly_enable_disable(
         super().setUp()
         self.vapi.ip_reassembly_enable_disable(
-            sw_if_index=self.src_if.sw_if_index, enable_ip4=True,
-            type=VppEnum.vl_api_ip_reass_type_t.IP_REASS_TYPE_SHALLOW_VIRTUAL)
+            sw_if_index=self.src_if.sw_if_index,
+            enable_ip4=True,
+            type=VppEnum.vl_api_ip_reass_type_t.IP_REASS_TYPE_SHALLOW_VIRTUAL,
+        )
         self.vapi.ip_reassembly_set(
         self.vapi.ip_reassembly_set(
-            timeout_ms=0, max_reassemblies=1000,
+            timeout_ms=0,
+            max_reassemblies=1000,
             max_reassembly_length=1000,
             type=VppEnum.vl_api_ip_reass_type_t.IP_REASS_TYPE_SHALLOW_VIRTUAL,
             max_reassembly_length=1000,
             type=VppEnum.vl_api_ip_reass_type_t.IP_REASS_TYPE_SHALLOW_VIRTUAL,
-            expire_walk_interval_ms=10)
-        self.virtual_sleep(.25)
+            expire_walk_interval_ms=10,
+        )
+        self.virtual_sleep(0.25)
         self.vapi.ip_reassembly_set(
         self.vapi.ip_reassembly_set(
-            timeout_ms=1000000, max_reassemblies=1000,
+            timeout_ms=1000000,
+            max_reassemblies=1000,
             max_reassembly_length=1000,
             type=VppEnum.vl_api_ip_reass_type_t.IP_REASS_TYPE_SHALLOW_VIRTUAL,
             max_reassembly_length=1000,
             type=VppEnum.vl_api_ip_reass_type_t.IP_REASS_TYPE_SHALLOW_VIRTUAL,
-            expire_walk_interval_ms=10000)
+            expire_walk_interval_ms=10000,
+        )
 
     def tearDown(self):
         super().tearDown()
 
     def tearDown(self):
         super().tearDown()
@@ -574,7 +661,7 @@ class TestIPv4SVReassembly(VppTestCase):
         self.logger.debug(self.vapi.ppcli("show buffers"))
 
     def test_basic(self):
         self.logger.debug(self.vapi.ppcli("show buffers"))
 
     def test_basic(self):
-        """ basic reassembly """
+        """basic reassembly"""
         payload_len = 1000
         payload = ""
         counter = 0
         payload_len = 1000
         payload = ""
         counter = 0
@@ -582,12 +669,13 @@ class TestIPv4SVReassembly(VppTestCase):
             payload += "%u " % counter
             counter += 1
 
             payload += "%u " % counter
             counter += 1
 
-        p = (Ether(dst=self.src_if.local_mac, src=self.src_if.remote_mac) /
-             IP(id=1, src=self.src_if.remote_ip4,
-                dst=self.dst_if.remote_ip4) /
-             UDP(sport=1234, dport=5678) /
-             Raw(payload))
-        fragments = fragment_rfc791(p, payload_len/4)
+        p = (
+            Ether(dst=self.src_if.local_mac, src=self.src_if.remote_mac)
+            / IP(id=1, src=self.src_if.remote_ip4, dst=self.dst_if.remote_ip4)
+            / UDP(sport=1234, dport=5678)
+            / Raw(payload)
+        )
+        fragments = fragment_rfc791(p, payload_len / 4)
 
         # send fragment #2 - should be cached inside reassembly
         self.pg_enable_capture()
 
         # send fragment #2 - should be cached inside reassembly
         self.pg_enable_capture()
@@ -623,7 +711,7 @@ class TestIPv4SVReassembly(VppTestCase):
             self.assertEqual(sent[Raw].payload, recvd[Raw].payload)
 
     def test_verify_clear_trace_mid_reassembly(self):
             self.assertEqual(sent[Raw].payload, recvd[Raw].payload)
 
     def test_verify_clear_trace_mid_reassembly(self):
-        """ verify clear trace works mid-reassembly """
+        """verify clear trace works mid-reassembly"""
         payload_len = 1000
         payload = ""
         counter = 0
         payload_len = 1000
         payload = ""
         counter = 0
@@ -631,12 +719,13 @@ class TestIPv4SVReassembly(VppTestCase):
             payload += "%u " % counter
             counter += 1
 
             payload += "%u " % counter
             counter += 1
 
-        p = (Ether(dst=self.src_if.local_mac, src=self.src_if.remote_mac) /
-             IP(id=1, src=self.src_if.remote_ip4,
-                dst=self.dst_if.remote_ip4) /
-             UDP(sport=1234, dport=5678) /
-             Raw(payload))
-        fragments = fragment_rfc791(p, payload_len/4)
+        p = (
+            Ether(dst=self.src_if.local_mac, src=self.src_if.remote_mac)
+            / IP(id=1, src=self.src_if.remote_ip4, dst=self.dst_if.remote_ip4)
+            / UDP(sport=1234, dport=5678)
+            / Raw(payload)
+        )
+        fragments = fragment_rfc791(p, payload_len / 4)
 
         self.pg_enable_capture()
         self.src_if.add_stream(fragments[1])
 
         self.pg_enable_capture()
         self.src_if.add_stream(fragments[1])
@@ -659,7 +748,7 @@ class TestIPv4SVReassembly(VppTestCase):
         self.dst_if.get_capture(len(fragments[2:]))
 
     def test_timeout(self):
         self.dst_if.get_capture(len(fragments[2:]))
 
     def test_timeout(self):
-        """ reassembly timeout """
+        """reassembly timeout"""
         payload_len = 1000
         payload = ""
         counter = 0
         payload_len = 1000
         payload = ""
         counter = 0
@@ -667,18 +756,21 @@ class TestIPv4SVReassembly(VppTestCase):
             payload += "%u " % counter
             counter += 1
 
             payload += "%u " % counter
             counter += 1
 
-        p = (Ether(dst=self.src_if.local_mac, src=self.src_if.remote_mac) /
-             IP(id=1, src=self.src_if.remote_ip4,
-                dst=self.dst_if.remote_ip4) /
-             UDP(sport=1234, dport=5678) /
-             Raw(payload))
-        fragments = fragment_rfc791(p, payload_len/4)
+        p = (
+            Ether(dst=self.src_if.local_mac, src=self.src_if.remote_mac)
+            / IP(id=1, src=self.src_if.remote_ip4, dst=self.dst_if.remote_ip4)
+            / UDP(sport=1234, dport=5678)
+            / Raw(payload)
+        )
+        fragments = fragment_rfc791(p, payload_len / 4)
 
         self.vapi.ip_reassembly_set(
 
         self.vapi.ip_reassembly_set(
-            timeout_ms=100, max_reassemblies=1000,
+            timeout_ms=100,
+            max_reassemblies=1000,
             max_reassembly_length=1000,
             expire_walk_interval_ms=50,
             max_reassembly_length=1000,
             expire_walk_interval_ms=50,
-            type=VppEnum.vl_api_ip_reass_type_t.IP_REASS_TYPE_SHALLOW_VIRTUAL)
+            type=VppEnum.vl_api_ip_reass_type_t.IP_REASS_TYPE_SHALLOW_VIRTUAL,
+        )
 
         # send fragments #2 and #1 - should be forwarded
         self.pg_enable_capture()
 
         # send fragments #2 and #1 - should be forwarded
         self.pg_enable_capture()
@@ -694,7 +786,7 @@ class TestIPv4SVReassembly(VppTestCase):
             self.assertEqual(sent[Raw].payload, recvd[Raw].payload)
 
         # wait for cleanup
             self.assertEqual(sent[Raw].payload, recvd[Raw].payload)
 
         # wait for cleanup
-        self.virtual_sleep(.25, "wait before sending rest of fragments")
+        self.virtual_sleep(0.25, "wait before sending rest of fragments")
 
         # send rest of fragments - shouldn't be forwarded
         self.pg_enable_capture()
 
         # send rest of fragments - shouldn't be forwarded
         self.pg_enable_capture()
@@ -703,13 +795,15 @@ class TestIPv4SVReassembly(VppTestCase):
         self.dst_if.assert_nothing_captured()
 
     def test_lru(self):
         self.dst_if.assert_nothing_captured()
 
     def test_lru(self):
-        """ reassembly reuses LRU element """
+        """reassembly reuses LRU element"""
 
         self.vapi.ip_reassembly_set(
 
         self.vapi.ip_reassembly_set(
-            timeout_ms=1000000, max_reassemblies=1,
+            timeout_ms=1000000,
+            max_reassemblies=1,
             max_reassembly_length=1000,
             type=VppEnum.vl_api_ip_reass_type_t.IP_REASS_TYPE_SHALLOW_VIRTUAL,
             max_reassembly_length=1000,
             type=VppEnum.vl_api_ip_reass_type_t.IP_REASS_TYPE_SHALLOW_VIRTUAL,
-            expire_walk_interval_ms=10000)
+            expire_walk_interval_ms=10000,
+        )
 
         payload_len = 1000
         payload = ""
 
         payload_len = 1000
         payload = ""
@@ -720,15 +814,17 @@ class TestIPv4SVReassembly(VppTestCase):
 
         packet_count = 10
 
 
         packet_count = 10
 
-        fragments = [f
-                     for i in range(packet_count)
-                     for p in (Ether(dst=self.src_if.local_mac,
-                                     src=self.src_if.remote_mac) /
-                               IP(id=i, src=self.src_if.remote_ip4,
-                                   dst=self.dst_if.remote_ip4) /
-                               UDP(sport=1234, dport=5678) /
-                               Raw(payload))
-                     for f in fragment_rfc791(p, payload_len/4)]
+        fragments = [
+            f
+            for i in range(packet_count)
+            for p in (
+                Ether(dst=self.src_if.local_mac, src=self.src_if.remote_mac)
+                / IP(id=i, src=self.src_if.remote_ip4, dst=self.dst_if.remote_ip4)
+                / UDP(sport=1234, dport=5678)
+                / Raw(payload)
+            )
+            for f in fragment_rfc791(p, payload_len / 4)
+        ]
 
         self.pg_enable_capture()
         self.src_if.add_stream(fragments)
 
         self.pg_enable_capture()
         self.src_if.add_stream(fragments)
@@ -742,16 +838,20 @@ class TestIPv4SVReassembly(VppTestCase):
     def send_mixed_and_verify_capture(self, traffic):
         stream = []
         for t in traffic:
     def send_mixed_and_verify_capture(self, traffic):
         stream = []
         for t in traffic:
-            for c in range(t['count']):
+            for c in range(t["count"]):
                 stream.append(
                 stream.append(
-                    (Ether(dst=self.src_if.local_mac,
-                           src=self.src_if.remote_mac) /
-                     IP(id=self.counter,
-                        flags=t['flags'],
-                        src=self.src_if.remote_ip4,
-                        dst=self.dst_if.remote_ip4) /
-                     UDP(sport=1234, dport=5678) /
-                     Raw("abcdef")))
+                    (
+                        Ether(dst=self.src_if.local_mac, src=self.src_if.remote_mac)
+                        / IP(
+                            id=self.counter,
+                            flags=t["flags"],
+                            src=self.src_if.remote_ip4,
+                            dst=self.dst_if.remote_ip4,
+                        )
+                        / UDP(sport=1234, dport=5678)
+                        / Raw("abcdef")
+                    )
+                )
                 self.counter = self.counter + 1
 
         self.pg_enable_capture()
                 self.counter = self.counter + 1
 
         self.pg_enable_capture()
@@ -763,58 +863,89 @@ class TestIPv4SVReassembly(VppTestCase):
         self.dst_if.get_capture(len(stream))
 
     def test_mixed(self):
         self.dst_if.get_capture(len(stream))
 
     def test_mixed(self):
-        """ mixed traffic correctly passes through SVR """
+        """mixed traffic correctly passes through SVR"""
         self.counter = 1
 
         self.counter = 1
 
-        self.send_mixed_and_verify_capture([{'count': 1, 'flags': ''}])
-        self.send_mixed_and_verify_capture([{'count': 2, 'flags': ''}])
-        self.send_mixed_and_verify_capture([{'count': 3, 'flags': ''}])
-        self.send_mixed_and_verify_capture([{'count': 8, 'flags': ''}])
-        self.send_mixed_and_verify_capture([{'count': 257, 'flags': ''}])
+        self.send_mixed_and_verify_capture([{"count": 1, "flags": ""}])
+        self.send_mixed_and_verify_capture([{"count": 2, "flags": ""}])
+        self.send_mixed_and_verify_capture([{"count": 3, "flags": ""}])
+        self.send_mixed_and_verify_capture([{"count": 8, "flags": ""}])
+        self.send_mixed_and_verify_capture([{"count": 257, "flags": ""}])
 
 
-        self.send_mixed_and_verify_capture([{'count': 1, 'flags': 'MF'}])
-        self.send_mixed_and_verify_capture([{'count': 2, 'flags': 'MF'}])
-        self.send_mixed_and_verify_capture([{'count': 3, 'flags': 'MF'}])
-        self.send_mixed_and_verify_capture([{'count': 8, 'flags': 'MF'}])
-        self.send_mixed_and_verify_capture([{'count': 257, 'flags': 'MF'}])
+        self.send_mixed_and_verify_capture([{"count": 1, "flags": "MF"}])
+        self.send_mixed_and_verify_capture([{"count": 2, "flags": "MF"}])
+        self.send_mixed_and_verify_capture([{"count": 3, "flags": "MF"}])
+        self.send_mixed_and_verify_capture([{"count": 8, "flags": "MF"}])
+        self.send_mixed_and_verify_capture([{"count": 257, "flags": "MF"}])
 
         self.send_mixed_and_verify_capture(
 
         self.send_mixed_and_verify_capture(
-            [{'count': 1, 'flags': ''}, {'count': 1, 'flags': 'MF'}])
+            [{"count": 1, "flags": ""}, {"count": 1, "flags": "MF"}]
+        )
         self.send_mixed_and_verify_capture(
         self.send_mixed_and_verify_capture(
-            [{'count': 2, 'flags': ''}, {'count': 2, 'flags': 'MF'}])
+            [{"count": 2, "flags": ""}, {"count": 2, "flags": "MF"}]
+        )
         self.send_mixed_and_verify_capture(
         self.send_mixed_and_verify_capture(
-            [{'count': 3, 'flags': ''}, {'count': 3, 'flags': 'MF'}])
+            [{"count": 3, "flags": ""}, {"count": 3, "flags": "MF"}]
+        )
         self.send_mixed_and_verify_capture(
         self.send_mixed_and_verify_capture(
-            [{'count': 8, 'flags': ''}, {'count': 8, 'flags': 'MF'}])
+            [{"count": 8, "flags": ""}, {"count": 8, "flags": "MF"}]
+        )
         self.send_mixed_and_verify_capture(
         self.send_mixed_and_verify_capture(
-            [{'count': 129, 'flags': ''}, {'count': 129, 'flags': 'MF'}])
+            [{"count": 129, "flags": ""}, {"count": 129, "flags": "MF"}]
+        )
 
         self.send_mixed_and_verify_capture(
 
         self.send_mixed_and_verify_capture(
-            [{'count': 1, 'flags': ''}, {'count': 1, 'flags': 'MF'},
-             {'count': 1, 'flags': ''}, {'count': 1, 'flags': 'MF'}])
+            [
+                {"count": 1, "flags": ""},
+                {"count": 1, "flags": "MF"},
+                {"count": 1, "flags": ""},
+                {"count": 1, "flags": "MF"},
+            ]
+        )
         self.send_mixed_and_verify_capture(
         self.send_mixed_and_verify_capture(
-            [{'count': 2, 'flags': ''}, {'count': 2, 'flags': 'MF'},
-             {'count': 2, 'flags': ''}, {'count': 2, 'flags': 'MF'}])
+            [
+                {"count": 2, "flags": ""},
+                {"count": 2, "flags": "MF"},
+                {"count": 2, "flags": ""},
+                {"count": 2, "flags": "MF"},
+            ]
+        )
         self.send_mixed_and_verify_capture(
         self.send_mixed_and_verify_capture(
-            [{'count': 3, 'flags': ''}, {'count': 3, 'flags': 'MF'},
-             {'count': 3, 'flags': ''}, {'count': 3, 'flags': 'MF'}])
+            [
+                {"count": 3, "flags": ""},
+                {"count": 3, "flags": "MF"},
+                {"count": 3, "flags": ""},
+                {"count": 3, "flags": "MF"},
+            ]
+        )
         self.send_mixed_and_verify_capture(
         self.send_mixed_and_verify_capture(
-            [{'count': 8, 'flags': ''}, {'count': 8, 'flags': 'MF'},
-             {'count': 8, 'flags': ''}, {'count': 8, 'flags': 'MF'}])
+            [
+                {"count": 8, "flags": ""},
+                {"count": 8, "flags": "MF"},
+                {"count": 8, "flags": ""},
+                {"count": 8, "flags": "MF"},
+            ]
+        )
         self.send_mixed_and_verify_capture(
         self.send_mixed_and_verify_capture(
-            [{'count': 65, 'flags': ''}, {'count': 65, 'flags': 'MF'},
-             {'count': 65, 'flags': ''}, {'count': 65, 'flags': 'MF'}])
+            [
+                {"count": 65, "flags": ""},
+                {"count": 65, "flags": "MF"},
+                {"count": 65, "flags": ""},
+                {"count": 65, "flags": "MF"},
+            ]
+        )
 
 
 class TestIPv4MWReassembly(VppTestCase):
 
 
 class TestIPv4MWReassembly(VppTestCase):
-    """ IPv4 Reassembly (multiple workers) """
+    """IPv4 Reassembly (multiple workers)"""
+
     vpp_worker_count = 3
 
     @classmethod
     def setUpClass(cls):
         super().setUpClass()
 
     vpp_worker_count = 3
 
     @classmethod
     def setUpClass(cls):
         super().setUpClass()
 
-        cls.create_pg_interfaces(range(cls.vpp_worker_count+1))
+        cls.create_pg_interfaces(range(cls.vpp_worker_count + 1))
         cls.src_if = cls.pg0
         cls.send_ifs = cls.pg_interfaces[:-1]
         cls.dst_if = cls.pg_interfaces[-1]
         cls.src_if = cls.pg0
         cls.send_ifs = cls.pg_interfaces[:-1]
         cls.dst_if = cls.pg_interfaces[-1]
@@ -828,8 +959,12 @@ class TestIPv4MWReassembly(VppTestCase):
         # packets sizes reduced here because we are generating packets without
         # Ethernet headers, which are added later (diff fragments go via
         # different interfaces)
         # packets sizes reduced here because we are generating packets without
         # Ethernet headers, which are added later (diff fragments go via
         # different interfaces)
-        cls.packet_sizes = [64-len(Ether()), 512-len(Ether()),
-                            1518-len(Ether()), 9018-len(Ether())]
+        cls.packet_sizes = [
+            64 - len(Ether()),
+            512 - len(Ether()),
+            1518 - len(Ether()),
+            9018 - len(Ether()),
+        ]
         cls.padding = " abcdefghijklmn"
         cls.create_stream(cls.packet_sizes)
         cls.create_fragments()
         cls.padding = " abcdefghijklmn"
         cls.create_stream(cls.packet_sizes)
         cls.create_fragments()
@@ -839,23 +974,31 @@ class TestIPv4MWReassembly(VppTestCase):
         super().tearDownClass()
 
     def setUp(self):
         super().tearDownClass()
 
     def setUp(self):
-        """ Test setup - force timeout on existing reassemblies """
+        """Test setup - force timeout on existing reassemblies"""
         super().setUp()
         for intf in self.send_ifs:
             self.vapi.ip_reassembly_enable_disable(
         super().setUp()
         for intf in self.send_ifs:
             self.vapi.ip_reassembly_enable_disable(
-                sw_if_index=intf.sw_if_index, enable_ip4=True)
-        self.vapi.ip_reassembly_set(timeout_ms=0, max_reassemblies=1000,
-                                    max_reassembly_length=1000,
-                                    expire_walk_interval_ms=10)
-        self.virtual_sleep(.25)
-        self.vapi.ip_reassembly_set(timeout_ms=1000000, max_reassemblies=1000,
-                                    max_reassembly_length=1000,
-                                    expire_walk_interval_ms=10000)
+                sw_if_index=intf.sw_if_index, enable_ip4=True
+            )
+        self.vapi.ip_reassembly_set(
+            timeout_ms=0,
+            max_reassemblies=1000,
+            max_reassembly_length=1000,
+            expire_walk_interval_ms=10,
+        )
+        self.virtual_sleep(0.25)
+        self.vapi.ip_reassembly_set(
+            timeout_ms=1000000,
+            max_reassemblies=1000,
+            max_reassembly_length=1000,
+            expire_walk_interval_ms=10000,
+        )
 
     def tearDown(self):
         for intf in self.send_ifs:
             self.vapi.ip_reassembly_enable_disable(
 
     def tearDown(self):
         for intf in self.send_ifs:
             self.vapi.ip_reassembly_enable_disable(
-                sw_if_index=intf.sw_if_index, enable_ip4=False)
+                sw_if_index=intf.sw_if_index, enable_ip4=False
+            )
         super().tearDown()
 
     def show_commands_at_teardown(self):
         super().tearDown()
 
     def show_commands_at_teardown(self):
@@ -871,10 +1014,11 @@ class TestIPv4MWReassembly(VppTestCase):
         for i in range(0, packet_count):
             info = cls.create_packet_info(cls.src_if, cls.src_if)
             payload = cls.info_to_payload(info)
         for i in range(0, packet_count):
             info = cls.create_packet_info(cls.src_if, cls.src_if)
             payload = cls.info_to_payload(info)
-            p = (IP(id=info.index, src=cls.src_if.remote_ip4,
-                    dst=cls.dst_if.remote_ip4) /
-                 UDP(sport=1234, dport=5678) /
-                 Raw(payload))
+            p = (
+                IP(id=info.index, src=cls.src_if.remote_ip4, dst=cls.dst_if.remote_ip4)
+                / UDP(sport=1234, dport=5678)
+                / Raw(payload)
+            )
             size = packet_sizes[(i // 2) % len(packet_sizes)]
             cls.extend_packet(p, size, cls.padding)
             info.data = p
             size = packet_sizes[(i // 2) % len(packet_sizes)]
             cls.extend_packet(p, size, cls.padding)
             info.data = p
@@ -889,10 +1033,11 @@ class TestIPv4MWReassembly(VppTestCase):
             #                      p.__class__(scapy.compat.raw(p))))
             fragments_400 = fragment_rfc791(p, 400)
             cls.pkt_infos.append((index, fragments_400))
             #                      p.__class__(scapy.compat.raw(p))))
             fragments_400 = fragment_rfc791(p, 400)
             cls.pkt_infos.append((index, fragments_400))
-        cls.fragments_400 = [
-            x for (_, frags) in cls.pkt_infos for x in frags]
-        cls.logger.debug("Fragmented %s packets into %s 400-byte fragments, " %
-                         (len(infos), len(cls.fragments_400)))
+        cls.fragments_400 = [x for (_, frags) in cls.pkt_infos for x in frags]
+        cls.logger.debug(
+            "Fragmented %s packets into %s 400-byte fragments, "
+            % (len(infos), len(cls.fragments_400))
+        )
 
     def verify_capture(self, capture, dropped_packet_indexes=[]):
         """Verify captured packet stream.
 
     def verify_capture(self, capture, dropped_packet_indexes=[]):
         """Verify captured packet stream.
@@ -910,7 +1055,8 @@ class TestIPv4MWReassembly(VppTestCase):
                 packet_index = payload_info.index
                 self.assertTrue(
                     packet_index not in dropped_packet_indexes,
                 packet_index = payload_info.index
                 self.assertTrue(
                     packet_index not in dropped_packet_indexes,
-                    ppp("Packet received, but should be dropped:", packet))
+                    ppp("Packet received, but should be dropped:", packet),
+                )
                 if packet_index in seen:
                     raise Exception(ppp("Duplicate packet received", packet))
                 seen.add(packet_index)
                 if packet_index in seen:
                     raise Exception(ppp("Duplicate packet received", packet))
                 seen.add(packet_index)
@@ -926,8 +1072,10 @@ class TestIPv4MWReassembly(VppTestCase):
                 self.logger.error(ppp("Unexpected or invalid packet:", packet))
                 raise
         for index in self._packet_infos:
                 self.logger.error(ppp("Unexpected or invalid packet:", packet))
                 raise
         for index in self._packet_infos:
-            self.assertTrue(index in seen or index in dropped_packet_indexes,
-                            "Packet with packet_index %d not received" % index)
+            self.assertTrue(
+                index in seen or index in dropped_packet_indexes,
+                "Packet with packet_index %d not received" % index,
+            )
 
     def send_packets(self, packets):
         for counter in range(self.vpp_worker_count):
 
     def send_packets(self, packets):
         for counter in range(self.vpp_worker_count):
@@ -935,13 +1083,16 @@ class TestIPv4MWReassembly(VppTestCase):
                 continue
             send_if = self.send_ifs[counter]
             send_if.add_stream(
                 continue
             send_if = self.send_ifs[counter]
             send_if.add_stream(
-                (Ether(dst=send_if.local_mac, src=send_if.remote_mac) / x
-                 for x in packets[counter]),
-                worker=counter)
+                (
+                    Ether(dst=send_if.local_mac, src=send_if.remote_mac) / x
+                    for x in packets[counter]
+                ),
+                worker=counter,
+            )
         self.pg_start()
 
     def test_worker_conflict(self):
         self.pg_start()
 
     def test_worker_conflict(self):
-        """ 1st and FO=0 fragments on different workers """
+        """1st and FO=0 fragments on different workers"""
 
         # in first wave we send fragments which don't start at offset 0
         # then we send fragments with offset 0 on a different thread
 
         # in first wave we send fragments which don't start at offset 0
         # then we send fragments with offset 0 on a different thread
@@ -988,7 +1139,7 @@ class TestIPv4MWReassembly(VppTestCase):
 
 
 class TestIPv6Reassembly(VppTestCase):
 
 
 class TestIPv6Reassembly(VppTestCase):
-    """ IPv6 Reassembly """
+    """IPv6 Reassembly"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -1015,23 +1166,33 @@ class TestIPv6Reassembly(VppTestCase):
         super().tearDownClass()
 
     def setUp(self):
         super().tearDownClass()
 
     def setUp(self):
-        """ Test setup - force timeout on existing reassemblies """
+        """Test setup - force timeout on existing reassemblies"""
         super().setUp()
         self.vapi.ip_reassembly_enable_disable(
         super().setUp()
         self.vapi.ip_reassembly_enable_disable(
-            sw_if_index=self.src_if.sw_if_index, enable_ip6=True)
-        self.vapi.ip_reassembly_set(timeout_ms=0, max_reassemblies=1000,
-                                    max_reassembly_length=1000,
-                                    expire_walk_interval_ms=10, is_ip6=1)
-        self.virtual_sleep(.25)
-        self.vapi.ip_reassembly_set(timeout_ms=1000000, max_reassemblies=1000,
-                                    max_reassembly_length=1000,
-                                    expire_walk_interval_ms=10000, is_ip6=1)
+            sw_if_index=self.src_if.sw_if_index, enable_ip6=True
+        )
+        self.vapi.ip_reassembly_set(
+            timeout_ms=0,
+            max_reassemblies=1000,
+            max_reassembly_length=1000,
+            expire_walk_interval_ms=10,
+            is_ip6=1,
+        )
+        self.virtual_sleep(0.25)
+        self.vapi.ip_reassembly_set(
+            timeout_ms=1000000,
+            max_reassemblies=1000,
+            max_reassembly_length=1000,
+            expire_walk_interval_ms=10000,
+            is_ip6=1,
+        )
         self.logger.debug(self.vapi.ppcli("show ip6-full-reassembly details"))
         self.logger.debug(self.vapi.ppcli("show buffers"))
 
     def tearDown(self):
         self.vapi.ip_reassembly_enable_disable(
         self.logger.debug(self.vapi.ppcli("show ip6-full-reassembly details"))
         self.logger.debug(self.vapi.ppcli("show buffers"))
 
     def tearDown(self):
         self.vapi.ip_reassembly_enable_disable(
-            sw_if_index=self.src_if.sw_if_index, enable_ip6=False)
+            sw_if_index=self.src_if.sw_if_index, enable_ip6=False
+        )
         super().tearDown()
 
     def show_commands_at_teardown(self):
         super().tearDown()
 
     def show_commands_at_teardown(self):
@@ -1047,11 +1208,12 @@ class TestIPv6Reassembly(VppTestCase):
         for i in range(0, packet_count):
             info = cls.create_packet_info(cls.src_if, cls.src_if)
             payload = cls.info_to_payload(info)
         for i in range(0, packet_count):
             info = cls.create_packet_info(cls.src_if, cls.src_if)
             payload = cls.info_to_payload(info)
-            p = (Ether(dst=cls.src_if.local_mac, src=cls.src_if.remote_mac) /
-                 IPv6(src=cls.src_if.remote_ip6,
-                      dst=cls.dst_if.remote_ip6) /
-                 UDP(sport=1234, dport=5678) /
-                 Raw(payload))
+            p = (
+                Ether(dst=cls.src_if.local_mac, src=cls.src_if.remote_mac)
+                / IPv6(src=cls.src_if.remote_ip6, dst=cls.dst_if.remote_ip6)
+                / UDP(sport=1234, dport=5678)
+                / Raw(payload)
+            )
             size = packet_sizes[(i // 2) % len(packet_sizes)]
             cls.extend_packet(p, size, cls.padding)
             info.data = p
             size = packet_sizes[(i // 2) % len(packet_sizes)]
             cls.extend_packet(p, size, cls.padding)
             info.data = p
@@ -1067,14 +1229,13 @@ class TestIPv6Reassembly(VppTestCase):
             fragments_400 = fragment_rfc8200(p, info.index, 400)
             fragments_300 = fragment_rfc8200(p, info.index, 300)
             cls.pkt_infos.append((index, fragments_400, fragments_300))
             fragments_400 = fragment_rfc8200(p, info.index, 400)
             fragments_300 = fragment_rfc8200(p, info.index, 300)
             cls.pkt_infos.append((index, fragments_400, fragments_300))
-        cls.fragments_400 = [
-            x for _, frags, _ in cls.pkt_infos for x in frags]
-        cls.fragments_300 = [
-            x for _, _, frags in cls.pkt_infos for x in frags]
-        cls.logger.debug("Fragmented %s packets into %s 400-byte fragments, "
-                         "and %s 300-byte fragments" %
-                         (len(infos), len(cls.fragments_400),
-                             len(cls.fragments_300)))
+        cls.fragments_400 = [x for _, frags, _ in cls.pkt_infos for x in frags]
+        cls.fragments_300 = [x for _, _, frags in cls.pkt_infos for x in frags]
+        cls.logger.debug(
+            "Fragmented %s packets into %s 400-byte fragments, "
+            "and %s 300-byte fragments"
+            % (len(infos), len(cls.fragments_400), len(cls.fragments_300))
+        )
 
     def verify_capture(self, capture, dropped_packet_indexes=[]):
         """Verify captured packet strea .
 
     def verify_capture(self, capture, dropped_packet_indexes=[]):
         """Verify captured packet strea .
@@ -1092,7 +1253,8 @@ class TestIPv6Reassembly(VppTestCase):
                 packet_index = payload_info.index
                 self.assertTrue(
                     packet_index not in dropped_packet_indexes,
                 packet_index = payload_info.index
                 self.assertTrue(
                     packet_index not in dropped_packet_indexes,
-                    ppp("Packet received, but should be dropped:", packet))
+                    ppp("Packet received, but should be dropped:", packet),
+                )
                 if packet_index in seen:
                     raise Exception(ppp("Duplicate packet received", packet))
                 seen.add(packet_index)
                 if packet_index in seen:
                     raise Exception(ppp("Duplicate packet received", packet))
                 seen.add(packet_index)
@@ -1108,11 +1270,13 @@ class TestIPv6Reassembly(VppTestCase):
                 self.logger.error(ppp("Unexpected or invalid packet:", packet))
                 raise
         for index in self._packet_infos:
                 self.logger.error(ppp("Unexpected or invalid packet:", packet))
                 raise
         for index in self._packet_infos:
-            self.assertTrue(index in seen or index in dropped_packet_indexes,
-                            "Packet with packet_index %d not received" % index)
+            self.assertTrue(
+                index in seen or index in dropped_packet_indexes,
+                "Packet with packet_index %d not received" % index,
+            )
 
     def test_reassembly(self):
 
     def test_reassembly(self):
-        """ basic reassembly """
+        """basic reassembly"""
 
         self.pg_enable_capture()
         self.src_if.add_stream(self.fragments_400)
 
         self.pg_enable_capture()
         self.src_if.add_stream(self.fragments_400)
@@ -1132,16 +1296,16 @@ class TestIPv6Reassembly(VppTestCase):
         self.src_if.assert_nothing_captured()
 
     def test_buffer_boundary(self):
         self.src_if.assert_nothing_captured()
 
     def test_buffer_boundary(self):
-        """ fragment header crossing buffer boundary """
-
-        p = (Ether(dst=self.src_if.local_mac, src=self.src_if.remote_mac) /
-             IPv6(src=self.src_if.remote_ip6,
-                  dst=self.src_if.local_ip6) /
-             IPv6ExtHdrHopByHop(
-                 options=[HBHOptUnknown(otype=0xff, optlen=0)] * 1000) /
-             IPv6ExtHdrFragment(m=1) /
-             UDP(sport=1234, dport=5678) /
-             Raw())
+        """fragment header crossing buffer boundary"""
+
+        p = (
+            Ether(dst=self.src_if.local_mac, src=self.src_if.remote_mac)
+            / IPv6(src=self.src_if.remote_ip6, dst=self.src_if.local_ip6)
+            / IPv6ExtHdrHopByHop(options=[HBHOptUnknown(otype=0xFF, optlen=0)] * 1000)
+            / IPv6ExtHdrFragment(m=1)
+            / UDP(sport=1234, dport=5678)
+            / Raw()
+        )
         self.pg_enable_capture()
         self.src_if.add_stream([p])
         self.pg_start()
         self.pg_enable_capture()
         self.src_if.add_stream([p])
         self.pg_start()
@@ -1149,7 +1313,7 @@ class TestIPv6Reassembly(VppTestCase):
         self.dst_if.assert_nothing_captured()
 
     def test_verify_clear_trace_mid_reassembly(self):
         self.dst_if.assert_nothing_captured()
 
     def test_verify_clear_trace_mid_reassembly(self):
-        """ verify clear trace works mid-reassembly """
+        """verify clear trace works mid-reassembly"""
 
         self.pg_enable_capture()
         self.src_if.add_stream(self.fragments_400[0:-1])
 
         self.pg_enable_capture()
         self.src_if.add_stream(self.fragments_400[0:-1])
@@ -1164,7 +1328,7 @@ class TestIPv6Reassembly(VppTestCase):
         self.verify_capture(packets)
 
     def test_reversed(self):
         self.verify_capture(packets)
 
     def test_reversed(self):
-        """ reverse order reassembly """
+        """reverse order reassembly"""
 
         fragments = list(self.fragments_400)
         fragments.reverse()
 
         fragments = list(self.fragments_400)
         fragments.reverse()
@@ -1187,7 +1351,7 @@ class TestIPv6Reassembly(VppTestCase):
         self.src_if.assert_nothing_captured()
 
     def test_random(self):
         self.src_if.assert_nothing_captured()
 
     def test_random(self):
-        """ random order reassembly """
+        """random order reassembly"""
 
         fragments = list(self.fragments_400)
         shuffle(fragments)
 
         fragments = list(self.fragments_400)
         shuffle(fragments)
@@ -1210,10 +1374,11 @@ class TestIPv6Reassembly(VppTestCase):
         self.src_if.assert_nothing_captured()
 
     def test_duplicates(self):
         self.src_if.assert_nothing_captured()
 
     def test_duplicates(self):
-        """ duplicate fragments """
+        """duplicate fragments"""
 
         fragments = [
 
         fragments = [
-            x for (_, frags, _) in self.pkt_infos
+            x
+            for (_, frags, _) in self.pkt_infos
             for x in frags
             for _ in range(0, min(2, len(frags)))
         ]
             for x in frags
             for _ in range(0, min(2, len(frags)))
         ]
@@ -1227,22 +1392,28 @@ class TestIPv6Reassembly(VppTestCase):
         self.src_if.assert_nothing_captured()
 
     def test_long_fragment_chain(self):
         self.src_if.assert_nothing_captured()
 
     def test_long_fragment_chain(self):
-        """ long fragment chain """
+        """long fragment chain"""
 
 
-        error_cnt_str = \
+        error_cnt_str = (
             "/err/ip6-full-reassembly-feature/fragment chain too long (drop)"
             "/err/ip6-full-reassembly-feature/fragment chain too long (drop)"
+        )
 
         error_cnt = self.statistics.get_err_counter(error_cnt_str)
 
 
         error_cnt = self.statistics.get_err_counter(error_cnt_str)
 
-        self.vapi.ip_reassembly_set(timeout_ms=100, max_reassemblies=1000,
-                                    max_reassembly_length=3,
-                                    expire_walk_interval_ms=50, is_ip6=1)
+        self.vapi.ip_reassembly_set(
+            timeout_ms=100,
+            max_reassemblies=1000,
+            max_reassembly_length=3,
+            expire_walk_interval_ms=50,
+            is_ip6=1,
+        )
 
 
-        p = (Ether(dst=self.src_if.local_mac, src=self.src_if.remote_mac) /
-             IPv6(src=self.src_if.remote_ip6,
-                  dst=self.dst_if.remote_ip6) /
-             UDP(sport=1234, dport=5678) /
-             Raw(b"X" * 1000))
+        p = (
+            Ether(dst=self.src_if.local_mac, src=self.src_if.remote_mac)
+            / IPv6(src=self.src_if.remote_ip6, dst=self.dst_if.remote_ip6)
+            / UDP(sport=1234, dport=5678)
+            / Raw(b"X" * 1000)
+        )
         frags = fragment_rfc8200(p, 1, 300) + fragment_rfc8200(p, 2, 500)
 
         self.pg_enable_capture()
         frags = fragment_rfc8200(p, 1, 300) + fragment_rfc8200(p, 2, 500)
 
         self.pg_enable_capture()
@@ -1253,7 +1424,7 @@ class TestIPv6Reassembly(VppTestCase):
         self.assert_error_counter_equal(error_cnt_str, error_cnt + 1)
 
     def test_overlap1(self):
         self.assert_error_counter_equal(error_cnt_str, error_cnt + 1)
 
     def test_overlap1(self):
-        """ overlapping fragments case #1 """
+        """overlapping fragments case #1"""
 
         fragments = []
         for _, frags_400, frags_300 in self.pkt_infos:
 
         fragments = []
         for _, frags_400, frags_300 in self.pkt_infos:
@@ -1273,12 +1444,13 @@ class TestIPv6Reassembly(VppTestCase):
         self.pg_start()
 
         packets = self.dst_if.get_capture(
         self.pg_start()
 
         packets = self.dst_if.get_capture(
-            len(self.pkt_infos) - len(dropped_packet_indexes))
+            len(self.pkt_infos) - len(dropped_packet_indexes)
+        )
         self.verify_capture(packets, dropped_packet_indexes)
         self.src_if.assert_nothing_captured()
 
     def test_overlap2(self):
         self.verify_capture(packets, dropped_packet_indexes)
         self.src_if.assert_nothing_captured()
 
     def test_overlap2(self):
-        """ overlapping fragments case #2 """
+        """overlapping fragments case #2"""
 
         fragments = []
         for _, frags_400, frags_300 in self.pkt_infos:
 
         fragments = []
         for _, frags_400, frags_300 in self.pkt_infos:
@@ -1304,27 +1476,33 @@ class TestIPv6Reassembly(VppTestCase):
         self.pg_start()
 
         packets = self.dst_if.get_capture(
         self.pg_start()
 
         packets = self.dst_if.get_capture(
-            len(self.pkt_infos) - len(dropped_packet_indexes))
+            len(self.pkt_infos) - len(dropped_packet_indexes)
+        )
         self.verify_capture(packets, dropped_packet_indexes)
         self.src_if.assert_nothing_captured()
 
     def test_timeout_inline(self):
         self.verify_capture(packets, dropped_packet_indexes)
         self.src_if.assert_nothing_captured()
 
     def test_timeout_inline(self):
-        """ timeout (inline) """
+        """timeout (inline)"""
 
         dropped_packet_indexes = set(
             index for (index, frags, _) in self.pkt_infos if len(frags) > 1
         )
 
 
         dropped_packet_indexes = set(
             index for (index, frags, _) in self.pkt_infos if len(frags) > 1
         )
 
-        self.vapi.ip_reassembly_set(timeout_ms=0, max_reassemblies=1000,
-                                    max_reassembly_length=3,
-                                    expire_walk_interval_ms=10000, is_ip6=1)
+        self.vapi.ip_reassembly_set(
+            timeout_ms=0,
+            max_reassemblies=1000,
+            max_reassembly_length=3,
+            expire_walk_interval_ms=10000,
+            is_ip6=1,
+        )
 
         self.pg_enable_capture()
         self.src_if.add_stream(self.fragments_400)
         self.pg_start()
 
         packets = self.dst_if.get_capture(
 
         self.pg_enable_capture()
         self.src_if.add_stream(self.fragments_400)
         self.pg_start()
 
         packets = self.dst_if.get_capture(
-            len(self.pkt_infos) - len(dropped_packet_indexes))
+            len(self.pkt_infos) - len(dropped_packet_indexes)
+        )
         self.verify_capture(packets, dropped_packet_indexes)
         pkts = self.src_if._get_capture(1)
         for icmp in pkts:
         self.verify_capture(packets, dropped_packet_indexes)
         pkts = self.src_if._get_capture(1)
         for icmp in pkts:
@@ -1334,42 +1512,51 @@ class TestIPv6Reassembly(VppTestCase):
             dropped_packet_indexes.remove(icmp[IPv6ExtHdrFragment].id)
 
     def test_timeout_cleanup(self):
             dropped_packet_indexes.remove(icmp[IPv6ExtHdrFragment].id)
 
     def test_timeout_cleanup(self):
-        """ timeout (cleanup) """
+        """timeout (cleanup)"""
 
         # whole packets + fragmented packets sans last fragment
         fragments = [
 
         # whole packets + fragmented packets sans last fragment
         fragments = [
-            x for (_, frags_400, _) in self.pkt_infos
-            for x in frags_400[:-1 if len(frags_400) > 1 else None]
+            x
+            for (_, frags_400, _) in self.pkt_infos
+            for x in frags_400[: -1 if len(frags_400) > 1 else None]
         ]
 
         # last fragments for fragmented packets
         ]
 
         # last fragments for fragmented packets
-        fragments2 = [frags_400[-1]
-                      for (_, frags_400, _) in self.pkt_infos
-                      if len(frags_400) > 1]
+        fragments2 = [
+            frags_400[-1] for (_, frags_400, _) in self.pkt_infos if len(frags_400) > 1
+        ]
 
         dropped_packet_indexes = set(
 
         dropped_packet_indexes = set(
-            index for (index, frags_400, _) in self.pkt_infos
-            if len(frags_400) > 1)
+            index for (index, frags_400, _) in self.pkt_infos if len(frags_400) > 1
+        )
 
 
-        self.vapi.ip_reassembly_set(timeout_ms=100, max_reassemblies=1000,
-                                    max_reassembly_length=1000,
-                                    expire_walk_interval_ms=50)
+        self.vapi.ip_reassembly_set(
+            timeout_ms=100,
+            max_reassemblies=1000,
+            max_reassembly_length=1000,
+            expire_walk_interval_ms=50,
+        )
 
 
-        self.vapi.ip_reassembly_set(timeout_ms=100, max_reassemblies=1000,
-                                    max_reassembly_length=1000,
-                                    expire_walk_interval_ms=50, is_ip6=1)
+        self.vapi.ip_reassembly_set(
+            timeout_ms=100,
+            max_reassemblies=1000,
+            max_reassembly_length=1000,
+            expire_walk_interval_ms=50,
+            is_ip6=1,
+        )
 
         self.pg_enable_capture()
         self.src_if.add_stream(fragments)
         self.pg_start()
 
 
         self.pg_enable_capture()
         self.src_if.add_stream(fragments)
         self.pg_start()
 
-        self.virtual_sleep(.25, "wait before sending rest of fragments")
+        self.virtual_sleep(0.25, "wait before sending rest of fragments")
 
         self.src_if.add_stream(fragments2)
         self.pg_start()
 
         packets = self.dst_if.get_capture(
 
         self.src_if.add_stream(fragments2)
         self.pg_start()
 
         packets = self.dst_if.get_capture(
-            len(self.pkt_infos) - len(dropped_packet_indexes))
+            len(self.pkt_infos) - len(dropped_packet_indexes)
+        )
         self.verify_capture(packets, dropped_packet_indexes)
         pkts = self.src_if._get_capture(1)
         for icmp in pkts:
         self.verify_capture(packets, dropped_packet_indexes)
         pkts = self.src_if._get_capture(1)
         for icmp in pkts:
@@ -1379,34 +1566,41 @@ class TestIPv6Reassembly(VppTestCase):
             dropped_packet_indexes.remove(icmp[IPv6ExtHdrFragment].id)
 
     def test_disabled(self):
             dropped_packet_indexes.remove(icmp[IPv6ExtHdrFragment].id)
 
     def test_disabled(self):
-        """ reassembly disabled """
+        """reassembly disabled"""
 
         dropped_packet_indexes = set(
 
         dropped_packet_indexes = set(
-            index for (index, frags_400, _) in self.pkt_infos
-            if len(frags_400) > 1)
+            index for (index, frags_400, _) in self.pkt_infos if len(frags_400) > 1
+        )
 
 
-        self.vapi.ip_reassembly_set(timeout_ms=1000, max_reassemblies=0,
-                                    max_reassembly_length=3,
-                                    expire_walk_interval_ms=10000, is_ip6=1)
+        self.vapi.ip_reassembly_set(
+            timeout_ms=1000,
+            max_reassemblies=0,
+            max_reassembly_length=3,
+            expire_walk_interval_ms=10000,
+            is_ip6=1,
+        )
 
         self.pg_enable_capture()
         self.src_if.add_stream(self.fragments_400)
         self.pg_start()
 
         packets = self.dst_if.get_capture(
 
         self.pg_enable_capture()
         self.src_if.add_stream(self.fragments_400)
         self.pg_start()
 
         packets = self.dst_if.get_capture(
-            len(self.pkt_infos) - len(dropped_packet_indexes))
+            len(self.pkt_infos) - len(dropped_packet_indexes)
+        )
         self.verify_capture(packets, dropped_packet_indexes)
         self.src_if.assert_nothing_captured()
 
     def test_missing_upper(self):
         self.verify_capture(packets, dropped_packet_indexes)
         self.src_if.assert_nothing_captured()
 
     def test_missing_upper(self):
-        """ missing upper layer """
-        optdata = '\x00' * 100
-        p = (Ether(dst=self.src_if.local_mac, src=self.src_if.remote_mac) /
-             IPv6(src=self.src_if.remote_ip6,
-                  dst=self.src_if.local_ip6) /
-             IPv6ExtHdrFragment(m=1) /
-             IPv6ExtHdrDestOpt(nh=17, options=PadN(optdata='\101' * 255) /
-             PadN(optdata='\102'*255)))
+        """missing upper layer"""
+        optdata = "\x00" * 100
+        p = (
+            Ether(dst=self.src_if.local_mac, src=self.src_if.remote_mac)
+            / IPv6(src=self.src_if.remote_ip6, dst=self.src_if.local_ip6)
+            / IPv6ExtHdrFragment(m=1)
+            / IPv6ExtHdrDestOpt(
+                nh=17, options=PadN(optdata="\101" * 255) / PadN(optdata="\102" * 255)
+            )
+        )
 
         self.pg_enable_capture()
         self.src_if.add_stream([p])
 
         self.pg_enable_capture()
         self.src_if.add_stream([p])
@@ -1417,21 +1611,23 @@ class TestIPv6Reassembly(VppTestCase):
         self.assert_equal(icmp[ICMPv6ParamProblem].code, 3, "ICMP code")
 
     def test_truncated_fragment(self):
         self.assert_equal(icmp[ICMPv6ParamProblem].code, 3, "ICMP code")
 
     def test_truncated_fragment(self):
-        """ truncated fragment """
-        pkt = (Ether(src=self.pg0.local_mac, dst=self.pg0.remote_mac) /
-               IPv6(src=self.pg0.remote_ip6, dst=self.pg0.local_ip6,
-                    nh=44, plen=2) /
-               IPv6ExtHdrFragment(nh=6))
+        """truncated fragment"""
+        pkt = (
+            Ether(src=self.pg0.local_mac, dst=self.pg0.remote_mac)
+            / IPv6(src=self.pg0.remote_ip6, dst=self.pg0.local_ip6, nh=44, plen=2)
+            / IPv6ExtHdrFragment(nh=6)
+        )
 
         self.send_and_assert_no_replies(self.pg0, [pkt], self.pg0)
 
     def test_invalid_frag_size(self):
 
         self.send_and_assert_no_replies(self.pg0, [pkt], self.pg0)
 
     def test_invalid_frag_size(self):
-        """ fragment size not a multiple of 8 """
-        p = (Ether(dst=self.src_if.local_mac, src=self.src_if.remote_mac) /
-             IPv6(src=self.src_if.remote_ip6,
-                  dst=self.src_if.local_ip6) /
-             UDP(sport=1234, dport=5678) /
-             Raw())
+        """fragment size not a multiple of 8"""
+        p = (
+            Ether(dst=self.src_if.local_mac, src=self.src_if.remote_mac)
+            / IPv6(src=self.src_if.remote_ip6, dst=self.src_if.local_ip6)
+            / UDP(sport=1234, dport=5678)
+            / Raw()
+        )
         self.extend_packet(p, 1000, self.padding)
         fragments = fragment_rfc8200(p, 1, 500)
         bad_fragment = fragments[0]
         self.extend_packet(p, 1000, self.padding)
         fragments = fragment_rfc8200(p, 1, 500)
         bad_fragment = fragments[0]
@@ -1445,12 +1641,13 @@ class TestIPv6Reassembly(VppTestCase):
         self.assert_equal(icmp[ICMPv6ParamProblem].code, 0, "ICMP code")
 
     def test_invalid_packet_size(self):
         self.assert_equal(icmp[ICMPv6ParamProblem].code, 0, "ICMP code")
 
     def test_invalid_packet_size(self):
-        """ total packet size > 65535 """
-        p = (Ether(dst=self.src_if.local_mac, src=self.src_if.remote_mac) /
-             IPv6(src=self.src_if.remote_ip6,
-                  dst=self.src_if.local_ip6) /
-             UDP(sport=1234, dport=5678) /
-             Raw())
+        """total packet size > 65535"""
+        p = (
+            Ether(dst=self.src_if.local_mac, src=self.src_if.remote_mac)
+            / IPv6(src=self.src_if.remote_ip6, dst=self.src_if.local_ip6)
+            / UDP(sport=1234, dport=5678)
+            / Raw()
+        )
         self.extend_packet(p, 1000, self.padding)
         fragments = fragment_rfc8200(p, 1, 500)
         bad_fragment = fragments[1]
         self.extend_packet(p, 1000, self.padding)
         fragments = fragment_rfc8200(p, 1, 500)
         bad_fragment = fragments[1]
@@ -1464,44 +1661,56 @@ class TestIPv6Reassembly(VppTestCase):
         self.assert_equal(icmp[ICMPv6ParamProblem].code, 0, "ICMP code")
 
     def test_atomic_fragment(self):
         self.assert_equal(icmp[ICMPv6ParamProblem].code, 0, "ICMP code")
 
     def test_atomic_fragment(self):
-        """ IPv6 atomic fragment """
-        pkt = (Ether(src=self.pg0.local_mac, dst=self.pg0.remote_mac) /
-               IPv6(src=self.pg0.remote_ip6, dst=self.pg0.local_ip6,
-                    nh=44, plen=65535) /
-               IPv6ExtHdrFragment(offset=8191, m=1, res1=0xFF, res2=0xFF,
-                                  nh=255, id=0xffff)/('X'*1452))
+        """IPv6 atomic fragment"""
+        pkt = (
+            Ether(src=self.pg0.local_mac, dst=self.pg0.remote_mac)
+            / IPv6(src=self.pg0.remote_ip6, dst=self.pg0.local_ip6, nh=44, plen=65535)
+            / IPv6ExtHdrFragment(
+                offset=8191, m=1, res1=0xFF, res2=0xFF, nh=255, id=0xFFFF
+            )
+            / ("X" * 1452)
+        )
 
         rx = self.send_and_expect(self.pg0, [pkt], self.pg0)
         self.assertIn(ICMPv6ParamProblem, rx[0])
 
     def test_truncated_fragment(self):
 
         rx = self.send_and_expect(self.pg0, [pkt], self.pg0)
         self.assertIn(ICMPv6ParamProblem, rx[0])
 
     def test_truncated_fragment(self):
-        """ IPv6 truncated fragment header """
-        pkt = (Ether(src=self.pg0.local_mac, dst=self.pg0.remote_mac) /
-               IPv6(src=self.pg0.remote_ip6, dst=self.pg0.local_ip6,
-                    nh=44, plen=2) /
-               IPv6ExtHdrFragment(nh=6))
+        """IPv6 truncated fragment header"""
+        pkt = (
+            Ether(src=self.pg0.local_mac, dst=self.pg0.remote_mac)
+            / IPv6(src=self.pg0.remote_ip6, dst=self.pg0.local_ip6, nh=44, plen=2)
+            / IPv6ExtHdrFragment(nh=6)
+        )
 
         self.send_and_assert_no_replies(self.pg0, [pkt])
 
 
         self.send_and_assert_no_replies(self.pg0, [pkt])
 
-        pkt = (Ether(src=self.pg0.local_mac, dst=self.pg0.remote_mac) /
-               IPv6(src=self.pg0.remote_ip6, dst=self.pg0.remote_ip6) /
-               ICMPv6EchoRequest())
+        pkt = (
+            Ether(src=self.pg0.local_mac, dst=self.pg0.remote_mac)
+            / IPv6(src=self.pg0.remote_ip6, dst=self.pg0.remote_ip6)
+            / ICMPv6EchoRequest()
+        )
         rx = self.send_and_expect(self.pg0, [pkt], self.pg0)
 
     def test_one_fragment(self):
         rx = self.send_and_expect(self.pg0, [pkt], self.pg0)
 
     def test_one_fragment(self):
-        """ whole packet in one fragment processed independently """
-        pkt = (Ether(src=self.pg0.local_mac, dst=self.pg0.remote_mac) /
-               IPv6(src=self.pg0.remote_ip6, dst=self.pg0.local_ip6) /
-               ICMPv6EchoRequest()/Raw('X' * 1600))
+        """whole packet in one fragment processed independently"""
+        pkt = (
+            Ether(src=self.pg0.local_mac, dst=self.pg0.remote_mac)
+            / IPv6(src=self.pg0.remote_ip6, dst=self.pg0.local_ip6)
+            / ICMPv6EchoRequest()
+            / Raw("X" * 1600)
+        )
         frags = fragment_rfc8200(pkt, 1, 400)
 
         # send a fragment with known id
         self.send_and_assert_no_replies(self.pg0, [frags[0]])
 
         # send an atomic fragment with same id - should be reassembled
         frags = fragment_rfc8200(pkt, 1, 400)
 
         # send a fragment with known id
         self.send_and_assert_no_replies(self.pg0, [frags[0]])
 
         # send an atomic fragment with same id - should be reassembled
-        pkt = (Ether(src=self.pg0.local_mac, dst=self.pg0.remote_mac) /
-               IPv6(src=self.pg0.remote_ip6, dst=self.pg0.local_ip6) /
-               IPv6ExtHdrFragment(id=1)/ICMPv6EchoRequest())
+        pkt = (
+            Ether(src=self.pg0.local_mac, dst=self.pg0.remote_mac)
+            / IPv6(src=self.pg0.remote_ip6, dst=self.pg0.local_ip6)
+            / IPv6ExtHdrFragment(id=1)
+            / ICMPv6EchoRequest()
+        )
         rx = self.send_and_expect(self.pg0, [pkt], self.pg0)
         self.assertNotIn(IPv6ExtHdrFragment, rx)
 
         rx = self.send_and_expect(self.pg0, [pkt], self.pg0)
         self.assertNotIn(IPv6ExtHdrFragment, rx)
 
@@ -1510,33 +1719,46 @@ class TestIPv6Reassembly(VppTestCase):
         self.assertNotIn(IPv6ExtHdrFragment, rx)
 
     def test_bunch_of_fragments(self):
         self.assertNotIn(IPv6ExtHdrFragment, rx)
 
     def test_bunch_of_fragments(self):
-        """ valid fragments followed by rogue fragments and atomic fragment"""
-        pkt = (Ether(src=self.pg0.local_mac, dst=self.pg0.remote_mac) /
-               IPv6(src=self.pg0.remote_ip6, dst=self.pg0.local_ip6) /
-               ICMPv6EchoRequest()/Raw('X' * 1600))
+        """valid fragments followed by rogue fragments and atomic fragment"""
+        pkt = (
+            Ether(src=self.pg0.local_mac, dst=self.pg0.remote_mac)
+            / IPv6(src=self.pg0.remote_ip6, dst=self.pg0.local_ip6)
+            / ICMPv6EchoRequest()
+            / Raw("X" * 1600)
+        )
         frags = fragment_rfc8200(pkt, 1, 400)
         self.send_and_expect(self.pg0, frags, self.pg0, n_rx=1)
 
         frags = fragment_rfc8200(pkt, 1, 400)
         self.send_and_expect(self.pg0, frags, self.pg0, n_rx=1)
 
-        inc_frag = (Ether(src=self.pg0.local_mac, dst=self.pg0.remote_mac) /
-                    IPv6(src=self.pg0.remote_ip6, dst=self.pg0.local_ip6) /
-                    IPv6ExtHdrFragment(id=1, nh=58, offset=608)/Raw('X'*308))
+        inc_frag = (
+            Ether(src=self.pg0.local_mac, dst=self.pg0.remote_mac)
+            / IPv6(src=self.pg0.remote_ip6, dst=self.pg0.local_ip6)
+            / IPv6ExtHdrFragment(id=1, nh=58, offset=608)
+            / Raw("X" * 308)
+        )
 
 
-        self.send_and_assert_no_replies(self.pg0, inc_frag*604)
+        self.send_and_assert_no_replies(self.pg0, inc_frag * 604)
 
 
-        pkt = (Ether(src=self.pg0.local_mac, dst=self.pg0.remote_mac) /
-               IPv6(src=self.pg0.remote_ip6, dst=self.pg0.local_ip6) /
-               IPv6ExtHdrFragment(id=1)/ICMPv6EchoRequest())
+        pkt = (
+            Ether(src=self.pg0.local_mac, dst=self.pg0.remote_mac)
+            / IPv6(src=self.pg0.remote_ip6, dst=self.pg0.local_ip6)
+            / IPv6ExtHdrFragment(id=1)
+            / ICMPv6EchoRequest()
+        )
         rx = self.send_and_expect(self.pg0, [pkt], self.pg0)
         self.assertNotIn(IPv6ExtHdrFragment, rx)
 
     def test_local_enable_disable(self):
         rx = self.send_and_expect(self.pg0, [pkt], self.pg0)
         self.assertNotIn(IPv6ExtHdrFragment, rx)
 
     def test_local_enable_disable(self):
-        """ local reassembly enabled/disable """
+        """local reassembly enabled/disable"""
         self.vapi.ip_reassembly_enable_disable(
         self.vapi.ip_reassembly_enable_disable(
-            sw_if_index=self.src_if.sw_if_index, enable_ip6=False)
+            sw_if_index=self.src_if.sw_if_index, enable_ip6=False
+        )
         self.vapi.ip_local_reass_enable_disable(enable_ip6=True)
         self.vapi.ip_local_reass_enable_disable(enable_ip6=True)
-        pkt = (Ether(src=self.src_if.local_mac, dst=self.src_if.remote_mac) /
-               IPv6(src=self.src_if.remote_ip6, dst=self.src_if.local_ip6) /
-               ICMPv6EchoRequest(id=1234)/Raw('X' * 1600))
+        pkt = (
+            Ether(src=self.src_if.local_mac, dst=self.src_if.remote_mac)
+            / IPv6(src=self.src_if.remote_ip6, dst=self.src_if.local_ip6)
+            / ICMPv6EchoRequest(id=1234)
+            / Raw("X" * 1600)
+        )
         frags = fragment_rfc8200(pkt, 1, 400)
         r = self.send_and_expect(self.src_if, frags, self.src_if, n_rx=1)[0]
         self.assertEqual(1234, r[ICMPv6EchoReply].id)
         frags = fragment_rfc8200(pkt, 1, 400)
         r = self.send_and_expect(self.src_if, frags, self.src_if, n_rx=1)[0]
         self.assertEqual(1234, r[ICMPv6EchoReply].id)
@@ -1547,14 +1769,15 @@ class TestIPv6Reassembly(VppTestCase):
 
 
 class TestIPv6MWReassembly(VppTestCase):
 
 
 class TestIPv6MWReassembly(VppTestCase):
-    """ IPv6 Reassembly (multiple workers) """
+    """IPv6 Reassembly (multiple workers)"""
+
     vpp_worker_count = 3
 
     @classmethod
     def setUpClass(cls):
         super().setUpClass()
 
     vpp_worker_count = 3
 
     @classmethod
     def setUpClass(cls):
         super().setUpClass()
 
-        cls.create_pg_interfaces(range(cls.vpp_worker_count+1))
+        cls.create_pg_interfaces(range(cls.vpp_worker_count + 1))
         cls.src_if = cls.pg0
         cls.send_ifs = cls.pg_interfaces[:-1]
         cls.dst_if = cls.pg_interfaces[-1]
         cls.src_if = cls.pg0
         cls.send_ifs = cls.pg_interfaces[:-1]
         cls.dst_if = cls.pg_interfaces[-1]
@@ -1568,8 +1791,12 @@ class TestIPv6MWReassembly(VppTestCase):
         # packets sizes reduced here because we are generating packets without
         # Ethernet headers, which are added later (diff fragments go via
         # different interfaces)
         # packets sizes reduced here because we are generating packets without
         # Ethernet headers, which are added later (diff fragments go via
         # different interfaces)
-        cls.packet_sizes = [64-len(Ether()), 512-len(Ether()),
-                            1518-len(Ether()), 9018-len(Ether())]
+        cls.packet_sizes = [
+            64 - len(Ether()),
+            512 - len(Ether()),
+            1518 - len(Ether()),
+            9018 - len(Ether()),
+        ]
         cls.padding = " abcdefghijklmn"
         cls.create_stream(cls.packet_sizes)
         cls.create_fragments()
         cls.padding = " abcdefghijklmn"
         cls.create_stream(cls.packet_sizes)
         cls.create_fragments()
@@ -1579,23 +1806,33 @@ class TestIPv6MWReassembly(VppTestCase):
         super().tearDownClass()
 
     def setUp(self):
         super().tearDownClass()
 
     def setUp(self):
-        """ Test setup - force timeout on existing reassemblies """
+        """Test setup - force timeout on existing reassemblies"""
         super().setUp()
         for intf in self.send_ifs:
             self.vapi.ip_reassembly_enable_disable(
         super().setUp()
         for intf in self.send_ifs:
             self.vapi.ip_reassembly_enable_disable(
-                sw_if_index=intf.sw_if_index, enable_ip6=True)
-        self.vapi.ip_reassembly_set(timeout_ms=0, max_reassemblies=1000,
-                                    max_reassembly_length=1000,
-                                    expire_walk_interval_ms=10, is_ip6=1)
-        self.virtual_sleep(.25)
-        self.vapi.ip_reassembly_set(timeout_ms=1000000, max_reassemblies=1000,
-                                    max_reassembly_length=1000,
-                                    expire_walk_interval_ms=1000, is_ip6=1)
+                sw_if_index=intf.sw_if_index, enable_ip6=True
+            )
+        self.vapi.ip_reassembly_set(
+            timeout_ms=0,
+            max_reassemblies=1000,
+            max_reassembly_length=1000,
+            expire_walk_interval_ms=10,
+            is_ip6=1,
+        )
+        self.virtual_sleep(0.25)
+        self.vapi.ip_reassembly_set(
+            timeout_ms=1000000,
+            max_reassemblies=1000,
+            max_reassembly_length=1000,
+            expire_walk_interval_ms=1000,
+            is_ip6=1,
+        )
 
     def tearDown(self):
         for intf in self.send_ifs:
             self.vapi.ip_reassembly_enable_disable(
 
     def tearDown(self):
         for intf in self.send_ifs:
             self.vapi.ip_reassembly_enable_disable(
-                sw_if_index=intf.sw_if_index, enable_ip6=False)
+                sw_if_index=intf.sw_if_index, enable_ip6=False
+            )
         super().tearDown()
 
     def show_commands_at_teardown(self):
         super().tearDown()
 
     def show_commands_at_teardown(self):
@@ -1611,10 +1848,11 @@ class TestIPv6MWReassembly(VppTestCase):
         for i in range(0, packet_count):
             info = cls.create_packet_info(cls.src_if, cls.src_if)
             payload = cls.info_to_payload(info)
         for i in range(0, packet_count):
             info = cls.create_packet_info(cls.src_if, cls.src_if)
             payload = cls.info_to_payload(info)
-            p = (IPv6(src=cls.src_if.remote_ip6,
-                      dst=cls.dst_if.remote_ip6) /
-                 UDP(sport=1234, dport=5678) /
-                 Raw(payload))
+            p = (
+                IPv6(src=cls.src_if.remote_ip6, dst=cls.dst_if.remote_ip6)
+                / UDP(sport=1234, dport=5678)
+                / Raw(payload)
+            )
             size = packet_sizes[(i // 2) % len(packet_sizes)]
             cls.extend_packet(p, size, cls.padding)
             info.data = p
             size = packet_sizes[(i // 2) % len(packet_sizes)]
             cls.extend_packet(p, size, cls.padding)
             info.data = p
@@ -1629,10 +1867,11 @@ class TestIPv6MWReassembly(VppTestCase):
             #                      p.__class__(scapy.compat.raw(p))))
             fragments_400 = fragment_rfc8200(p, index, 400)
             cls.pkt_infos.append((index, fragments_400))
             #                      p.__class__(scapy.compat.raw(p))))
             fragments_400 = fragment_rfc8200(p, index, 400)
             cls.pkt_infos.append((index, fragments_400))
-        cls.fragments_400 = [
-            x for (_, frags) in cls.pkt_infos for x in frags]
-        cls.logger.debug("Fragmented %s packets into %s 400-byte fragments, " %
-                         (len(infos), len(cls.fragments_400)))
+        cls.fragments_400 = [x for (_, frags) in cls.pkt_infos for x in frags]
+        cls.logger.debug(
+            "Fragmented %s packets into %s 400-byte fragments, "
+            % (len(infos), len(cls.fragments_400))
+        )
 
     def verify_capture(self, capture, dropped_packet_indexes=[]):
         """Verify captured packet strea .
 
     def verify_capture(self, capture, dropped_packet_indexes=[]):
         """Verify captured packet strea .
@@ -1650,7 +1889,8 @@ class TestIPv6MWReassembly(VppTestCase):
                 packet_index = payload_info.index
                 self.assertTrue(
                     packet_index not in dropped_packet_indexes,
                 packet_index = payload_info.index
                 self.assertTrue(
                     packet_index not in dropped_packet_indexes,
-                    ppp("Packet received, but should be dropped:", packet))
+                    ppp("Packet received, but should be dropped:", packet),
+                )
                 if packet_index in seen:
                     raise Exception(ppp("Duplicate packet received", packet))
                 seen.add(packet_index)
                 if packet_index in seen:
                     raise Exception(ppp("Duplicate packet received", packet))
                 seen.add(packet_index)
@@ -1666,8 +1906,10 @@ class TestIPv6MWReassembly(VppTestCase):
                 self.logger.error(ppp("Unexpected or invalid packet:", packet))
                 raise
         for index in self._packet_infos:
                 self.logger.error(ppp("Unexpected or invalid packet:", packet))
                 raise
         for index in self._packet_infos:
-            self.assertTrue(index in seen or index in dropped_packet_indexes,
-                            "Packet with packet_index %d not received" % index)
+            self.assertTrue(
+                index in seen or index in dropped_packet_indexes,
+                "Packet with packet_index %d not received" % index,
+            )
 
     def send_packets(self, packets):
         for counter in range(self.vpp_worker_count):
 
     def send_packets(self, packets):
         for counter in range(self.vpp_worker_count):
@@ -1675,13 +1917,16 @@ class TestIPv6MWReassembly(VppTestCase):
                 continue
             send_if = self.send_ifs[counter]
             send_if.add_stream(
                 continue
             send_if = self.send_ifs[counter]
             send_if.add_stream(
-                (Ether(dst=send_if.local_mac, src=send_if.remote_mac) / x
-                 for x in packets[counter]),
-                worker=counter)
+                (
+                    Ether(dst=send_if.local_mac, src=send_if.remote_mac) / x
+                    for x in packets[counter]
+                ),
+                worker=counter,
+            )
         self.pg_start()
 
     def test_worker_conflict(self):
         self.pg_start()
 
     def test_worker_conflict(self):
-        """ 1st and FO=0 fragments on different workers """
+        """1st and FO=0 fragments on different workers"""
 
         # in first wave we send fragments which don't start at offset 0
         # then we send fragments with offset 0 on a different thread
 
         # in first wave we send fragments which don't start at offset 0
         # then we send fragments with offset 0 on a different thread
@@ -1728,7 +1973,7 @@ class TestIPv6MWReassembly(VppTestCase):
 
 
 class TestIPv6SVReassembly(VppTestCase):
 
 
 class TestIPv6SVReassembly(VppTestCase):
-    """ IPv6 Shallow Virtual Reassembly """
+    """IPv6 Shallow Virtual Reassembly"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -1745,22 +1990,30 @@ class TestIPv6SVReassembly(VppTestCase):
             i.resolve_ndp()
 
     def setUp(self):
             i.resolve_ndp()
 
     def setUp(self):
-        """ Test setup - force timeout on existing reassemblies """
+        """Test setup - force timeout on existing reassemblies"""
         super().setUp()
         self.vapi.ip_reassembly_enable_disable(
         super().setUp()
         self.vapi.ip_reassembly_enable_disable(
-            sw_if_index=self.src_if.sw_if_index, enable_ip6=True,
-            type=VppEnum.vl_api_ip_reass_type_t.IP_REASS_TYPE_SHALLOW_VIRTUAL)
+            sw_if_index=self.src_if.sw_if_index,
+            enable_ip6=True,
+            type=VppEnum.vl_api_ip_reass_type_t.IP_REASS_TYPE_SHALLOW_VIRTUAL,
+        )
         self.vapi.ip_reassembly_set(
         self.vapi.ip_reassembly_set(
-            timeout_ms=0, max_reassemblies=1000,
+            timeout_ms=0,
+            max_reassemblies=1000,
             max_reassembly_length=1000,
             type=VppEnum.vl_api_ip_reass_type_t.IP_REASS_TYPE_SHALLOW_VIRTUAL,
             max_reassembly_length=1000,
             type=VppEnum.vl_api_ip_reass_type_t.IP_REASS_TYPE_SHALLOW_VIRTUAL,
-            expire_walk_interval_ms=10, is_ip6=1)
-        self.virtual_sleep(.25)
+            expire_walk_interval_ms=10,
+            is_ip6=1,
+        )
+        self.virtual_sleep(0.25)
         self.vapi.ip_reassembly_set(
         self.vapi.ip_reassembly_set(
-            timeout_ms=1000000, max_reassemblies=1000,
+            timeout_ms=1000000,
+            max_reassemblies=1000,
             max_reassembly_length=1000,
             type=VppEnum.vl_api_ip_reass_type_t.IP_REASS_TYPE_SHALLOW_VIRTUAL,
             max_reassembly_length=1000,
             type=VppEnum.vl_api_ip_reass_type_t.IP_REASS_TYPE_SHALLOW_VIRTUAL,
-            expire_walk_interval_ms=10000, is_ip6=1)
+            expire_walk_interval_ms=10000,
+            is_ip6=1,
+        )
 
     def tearDown(self):
         super().tearDown()
 
     def tearDown(self):
         super().tearDown()
@@ -1768,7 +2021,7 @@ class TestIPv6SVReassembly(VppTestCase):
         self.logger.debug(self.vapi.ppcli("show buffers"))
 
     def test_basic(self):
         self.logger.debug(self.vapi.ppcli("show buffers"))
 
     def test_basic(self):
-        """ basic reassembly """
+        """basic reassembly"""
         payload_len = 1000
         payload = ""
         counter = 0
         payload_len = 1000
         payload = ""
         counter = 0
@@ -1776,11 +2029,13 @@ class TestIPv6SVReassembly(VppTestCase):
             payload += "%u " % counter
             counter += 1
 
             payload += "%u " % counter
             counter += 1
 
-        p = (Ether(dst=self.src_if.local_mac, src=self.src_if.remote_mac) /
-             IPv6(src=self.src_if.remote_ip6, dst=self.dst_if.remote_ip6) /
-             UDP(sport=1234, dport=5678) /
-             Raw(payload))
-        fragments = fragment_rfc8200(p, 1, payload_len/4)
+        p = (
+            Ether(dst=self.src_if.local_mac, src=self.src_if.remote_mac)
+            / IPv6(src=self.src_if.remote_ip6, dst=self.dst_if.remote_ip6)
+            / UDP(sport=1234, dport=5678)
+            / Raw(payload)
+        )
+        fragments = fragment_rfc8200(p, 1, payload_len / 4)
 
         # send fragment #2 - should be cached inside reassembly
         self.pg_enable_capture()
 
         # send fragment #2 - should be cached inside reassembly
         self.pg_enable_capture()
@@ -1816,7 +2071,7 @@ class TestIPv6SVReassembly(VppTestCase):
             self.assertEqual(sent[Raw].payload, recvd[Raw].payload)
 
     def test_verify_clear_trace_mid_reassembly(self):
             self.assertEqual(sent[Raw].payload, recvd[Raw].payload)
 
     def test_verify_clear_trace_mid_reassembly(self):
-        """ verify clear trace works mid-reassembly """
+        """verify clear trace works mid-reassembly"""
         payload_len = 1000
         payload = ""
         counter = 0
         payload_len = 1000
         payload = ""
         counter = 0
@@ -1824,11 +2079,13 @@ class TestIPv6SVReassembly(VppTestCase):
             payload += "%u " % counter
             counter += 1
 
             payload += "%u " % counter
             counter += 1
 
-        p = (Ether(dst=self.src_if.local_mac, src=self.src_if.remote_mac) /
-             IPv6(src=self.src_if.remote_ip6, dst=self.dst_if.remote_ip6) /
-             UDP(sport=1234, dport=5678) /
-             Raw(payload))
-        fragments = fragment_rfc8200(p, 1, payload_len/4)
+        p = (
+            Ether(dst=self.src_if.local_mac, src=self.src_if.remote_mac)
+            / IPv6(src=self.src_if.remote_ip6, dst=self.dst_if.remote_ip6)
+            / UDP(sport=1234, dport=5678)
+            / Raw(payload)
+        )
+        fragments = fragment_rfc8200(p, 1, payload_len / 4)
 
         self.pg_enable_capture()
         self.src_if.add_stream(fragments[1])
 
         self.pg_enable_capture()
         self.src_if.add_stream(fragments[1])
@@ -1851,7 +2108,7 @@ class TestIPv6SVReassembly(VppTestCase):
         self.dst_if.get_capture(len(fragments[2:]))
 
     def test_timeout(self):
         self.dst_if.get_capture(len(fragments[2:]))
 
     def test_timeout(self):
-        """ reassembly timeout """
+        """reassembly timeout"""
         payload_len = 1000
         payload = ""
         counter = 0
         payload_len = 1000
         payload = ""
         counter = 0
@@ -1859,18 +2116,22 @@ class TestIPv6SVReassembly(VppTestCase):
             payload += "%u " % counter
             counter += 1
 
             payload += "%u " % counter
             counter += 1
 
-        p = (Ether(dst=self.src_if.local_mac, src=self.src_if.remote_mac) /
-             IPv6(src=self.src_if.remote_ip6, dst=self.dst_if.remote_ip6) /
-             UDP(sport=1234, dport=5678) /
-             Raw(payload))
-        fragments = fragment_rfc8200(p, 1, payload_len/4)
+        p = (
+            Ether(dst=self.src_if.local_mac, src=self.src_if.remote_mac)
+            / IPv6(src=self.src_if.remote_ip6, dst=self.dst_if.remote_ip6)
+            / UDP(sport=1234, dport=5678)
+            / Raw(payload)
+        )
+        fragments = fragment_rfc8200(p, 1, payload_len / 4)
 
         self.vapi.ip_reassembly_set(
 
         self.vapi.ip_reassembly_set(
-            timeout_ms=100, max_reassemblies=1000,
+            timeout_ms=100,
+            max_reassemblies=1000,
             max_reassembly_length=1000,
             expire_walk_interval_ms=50,
             is_ip6=1,
             max_reassembly_length=1000,
             expire_walk_interval_ms=50,
             is_ip6=1,
-            type=VppEnum.vl_api_ip_reass_type_t.IP_REASS_TYPE_SHALLOW_VIRTUAL)
+            type=VppEnum.vl_api_ip_reass_type_t.IP_REASS_TYPE_SHALLOW_VIRTUAL,
+        )
 
         # send fragments #2 and #1 - should be forwarded
         self.pg_enable_capture()
 
         # send fragments #2 and #1 - should be forwarded
         self.pg_enable_capture()
@@ -1886,7 +2147,7 @@ class TestIPv6SVReassembly(VppTestCase):
             self.assertEqual(sent[Raw].payload, recvd[Raw].payload)
 
         # wait for cleanup
             self.assertEqual(sent[Raw].payload, recvd[Raw].payload)
 
         # wait for cleanup
-        self.virtual_sleep(.25, "wait before sending rest of fragments")
+        self.virtual_sleep(0.25, "wait before sending rest of fragments")
 
         # send rest of fragments - shouldn't be forwarded
         self.pg_enable_capture()
 
         # send rest of fragments - shouldn't be forwarded
         self.pg_enable_capture()
@@ -1895,13 +2156,16 @@ class TestIPv6SVReassembly(VppTestCase):
         self.dst_if.assert_nothing_captured()
 
     def test_lru(self):
         self.dst_if.assert_nothing_captured()
 
     def test_lru(self):
-        """ reassembly reuses LRU element """
+        """reassembly reuses LRU element"""
 
         self.vapi.ip_reassembly_set(
 
         self.vapi.ip_reassembly_set(
-            timeout_ms=1000000, max_reassemblies=1,
+            timeout_ms=1000000,
+            max_reassemblies=1,
             max_reassembly_length=1000,
             type=VppEnum.vl_api_ip_reass_type_t.IP_REASS_TYPE_SHALLOW_VIRTUAL,
             max_reassembly_length=1000,
             type=VppEnum.vl_api_ip_reass_type_t.IP_REASS_TYPE_SHALLOW_VIRTUAL,
-            is_ip6=1, expire_walk_interval_ms=10000)
+            is_ip6=1,
+            expire_walk_interval_ms=10000,
+        )
 
         payload_len = 1000
         payload = ""
 
         payload_len = 1000
         payload = ""
@@ -1912,15 +2176,17 @@ class TestIPv6SVReassembly(VppTestCase):
 
         packet_count = 10
 
 
         packet_count = 10
 
-        fragments = [f
-                     for i in range(packet_count)
-                     for p in (Ether(dst=self.src_if.local_mac,
-                                     src=self.src_if.remote_mac) /
-                               IPv6(src=self.src_if.remote_ip6,
-                                    dst=self.dst_if.remote_ip6) /
-                               UDP(sport=1234, dport=5678) /
-                               Raw(payload))
-                     for f in fragment_rfc8200(p, i, payload_len/4)]
+        fragments = [
+            f
+            for i in range(packet_count)
+            for p in (
+                Ether(dst=self.src_if.local_mac, src=self.src_if.remote_mac)
+                / IPv6(src=self.src_if.remote_ip6, dst=self.dst_if.remote_ip6)
+                / UDP(sport=1234, dport=5678)
+                / Raw(payload)
+            )
+            for f in fragment_rfc8200(p, i, payload_len / 4)
+        ]
 
         self.pg_enable_capture()
         self.src_if.add_stream(fragments)
 
         self.pg_enable_capture()
         self.src_if.add_stream(fragments)
@@ -1932,55 +2198,71 @@ class TestIPv6SVReassembly(VppTestCase):
             self.assertEqual(sent[Raw].payload, recvd[Raw].payload)
 
     def test_one_fragment(self):
             self.assertEqual(sent[Raw].payload, recvd[Raw].payload)
 
     def test_one_fragment(self):
-        """ whole packet in one fragment processed independently """
-        pkt = (Ether(src=self.src_if.local_mac, dst=self.src_if.remote_mac) /
-               IPv6(src=self.src_if.remote_ip6, dst=self.dst_if.remote_ip6) /
-               ICMPv6EchoRequest()/Raw('X' * 1600))
+        """whole packet in one fragment processed independently"""
+        pkt = (
+            Ether(src=self.src_if.local_mac, dst=self.src_if.remote_mac)
+            / IPv6(src=self.src_if.remote_ip6, dst=self.dst_if.remote_ip6)
+            / ICMPv6EchoRequest()
+            / Raw("X" * 1600)
+        )
         frags = fragment_rfc8200(pkt, 1, 400)
 
         # send a fragment with known id
         self.send_and_expect(self.src_if, [frags[0]], self.dst_if)
 
         # send an atomic fragment with same id - should be reassembled
         frags = fragment_rfc8200(pkt, 1, 400)
 
         # send a fragment with known id
         self.send_and_expect(self.src_if, [frags[0]], self.dst_if)
 
         # send an atomic fragment with same id - should be reassembled
-        pkt = (Ether(src=self.src_if.local_mac, dst=self.src_if.remote_mac) /
-               IPv6(src=self.src_if.remote_ip6, dst=self.dst_if.remote_ip6) /
-               IPv6ExtHdrFragment(id=1)/ICMPv6EchoRequest())
+        pkt = (
+            Ether(src=self.src_if.local_mac, dst=self.src_if.remote_mac)
+            / IPv6(src=self.src_if.remote_ip6, dst=self.dst_if.remote_ip6)
+            / IPv6ExtHdrFragment(id=1)
+            / ICMPv6EchoRequest()
+        )
         rx = self.send_and_expect(self.src_if, [pkt], self.dst_if)
 
         # now forward packets matching original reassembly, should still work
         rx = self.send_and_expect(self.src_if, frags[1:], self.dst_if)
 
     def test_bunch_of_fragments(self):
         rx = self.send_and_expect(self.src_if, [pkt], self.dst_if)
 
         # now forward packets matching original reassembly, should still work
         rx = self.send_and_expect(self.src_if, frags[1:], self.dst_if)
 
     def test_bunch_of_fragments(self):
-        """ valid fragments followed by rogue fragments and atomic fragment"""
-        pkt = (Ether(src=self.src_if.local_mac, dst=self.src_if.remote_mac) /
-               IPv6(src=self.src_if.remote_ip6, dst=self.dst_if.remote_ip6) /
-               ICMPv6EchoRequest()/Raw('X' * 1600))
+        """valid fragments followed by rogue fragments and atomic fragment"""
+        pkt = (
+            Ether(src=self.src_if.local_mac, dst=self.src_if.remote_mac)
+            / IPv6(src=self.src_if.remote_ip6, dst=self.dst_if.remote_ip6)
+            / ICMPv6EchoRequest()
+            / Raw("X" * 1600)
+        )
         frags = fragment_rfc8200(pkt, 1, 400)
         rx = self.send_and_expect(self.src_if, frags, self.dst_if)
 
         frags = fragment_rfc8200(pkt, 1, 400)
         rx = self.send_and_expect(self.src_if, frags, self.dst_if)
 
-        rogue = (Ether(src=self.src_if.local_mac, dst=self.src_if.remote_mac) /
-                 IPv6(src=self.src_if.remote_ip6, dst=self.dst_if.remote_ip6) /
-                 IPv6ExtHdrFragment(id=1, nh=58, offset=608)/Raw('X'*308))
+        rogue = (
+            Ether(src=self.src_if.local_mac, dst=self.src_if.remote_mac)
+            / IPv6(src=self.src_if.remote_ip6, dst=self.dst_if.remote_ip6)
+            / IPv6ExtHdrFragment(id=1, nh=58, offset=608)
+            / Raw("X" * 308)
+        )
 
 
-        self.send_and_expect(self.src_if, rogue*604, self.dst_if)
+        self.send_and_expect(self.src_if, rogue * 604, self.dst_if)
 
 
-        pkt = (Ether(src=self.src_if.local_mac, dst=self.src_if.remote_mac) /
-               IPv6(src=self.src_if.remote_ip6, dst=self.dst_if.remote_ip6) /
-               IPv6ExtHdrFragment(id=1)/ICMPv6EchoRequest())
+        pkt = (
+            Ether(src=self.src_if.local_mac, dst=self.src_if.remote_mac)
+            / IPv6(src=self.src_if.remote_ip6, dst=self.dst_if.remote_ip6)
+            / IPv6ExtHdrFragment(id=1)
+            / ICMPv6EchoRequest()
+        )
         rx = self.send_and_expect(self.src_if, [pkt], self.dst_if)
 
     def test_truncated_fragment(self):
         rx = self.send_and_expect(self.src_if, [pkt], self.dst_if)
 
     def test_truncated_fragment(self):
-        """ truncated fragment """
-        pkt = (Ether(src=self.pg0.local_mac, dst=self.pg0.remote_mac) /
-               IPv6(src=self.pg0.remote_ip6, dst=self.pg0.local_ip6,
-                    nh=44, plen=2) /
-               IPv6ExtHdrFragment(nh=6))
+        """truncated fragment"""
+        pkt = (
+            Ether(src=self.pg0.local_mac, dst=self.pg0.remote_mac)
+            / IPv6(src=self.pg0.remote_ip6, dst=self.pg0.local_ip6, nh=44, plen=2)
+            / IPv6ExtHdrFragment(nh=6)
+        )
 
         self.send_and_assert_no_replies(self.pg0, [pkt], self.pg0)
 
 
 class TestIPv4ReassemblyLocalNode(VppTestCase):
 
         self.send_and_assert_no_replies(self.pg0, [pkt], self.pg0)
 
 
 class TestIPv4ReassemblyLocalNode(VppTestCase):
-    """ IPv4 Reassembly for packets coming to ip4-local node """
+    """IPv4 Reassembly for packets coming to ip4-local node"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -2004,15 +2286,21 @@ class TestIPv4ReassemblyLocalNode(VppTestCase):
         super().tearDownClass()
 
     def setUp(self):
         super().tearDownClass()
 
     def setUp(self):
-        """ Test setup - force timeout on existing reassemblies """
+        """Test setup - force timeout on existing reassemblies"""
         super().setUp()
         super().setUp()
-        self.vapi.ip_reassembly_set(timeout_ms=0, max_reassemblies=1000,
-                                    max_reassembly_length=1000,
-                                    expire_walk_interval_ms=10)
-        self.virtual_sleep(.25)
-        self.vapi.ip_reassembly_set(timeout_ms=1000000, max_reassemblies=1000,
-                                    max_reassembly_length=1000,
-                                    expire_walk_interval_ms=10000)
+        self.vapi.ip_reassembly_set(
+            timeout_ms=0,
+            max_reassemblies=1000,
+            max_reassembly_length=1000,
+            expire_walk_interval_ms=10,
+        )
+        self.virtual_sleep(0.25)
+        self.vapi.ip_reassembly_set(
+            timeout_ms=1000000,
+            max_reassemblies=1000,
+            max_reassembly_length=1000,
+            expire_walk_interval_ms=10000,
+        )
 
     def tearDown(self):
         super().tearDown()
 
     def tearDown(self):
         super().tearDown()
@@ -2030,12 +2318,16 @@ class TestIPv4ReassemblyLocalNode(VppTestCase):
         for i in range(0, packet_count):
             info = cls.create_packet_info(cls.src_dst_if, cls.src_dst_if)
             payload = cls.info_to_payload(info)
         for i in range(0, packet_count):
             info = cls.create_packet_info(cls.src_dst_if, cls.src_dst_if)
             payload = cls.info_to_payload(info)
-            p = (Ether(dst=cls.src_dst_if.local_mac,
-                       src=cls.src_dst_if.remote_mac) /
-                 IP(id=info.index, src=cls.src_dst_if.remote_ip4,
-                    dst=cls.src_dst_if.local_ip4) /
-                 ICMP(type='echo-request', id=1234) /
-                 Raw(payload))
+            p = (
+                Ether(dst=cls.src_dst_if.local_mac, src=cls.src_dst_if.remote_mac)
+                / IP(
+                    id=info.index,
+                    src=cls.src_dst_if.remote_ip4,
+                    dst=cls.src_dst_if.local_ip4,
+                )
+                / ICMP(type="echo-request", id=1234)
+                / Raw(payload)
+            )
             cls.extend_packet(p, 1518, cls.padding)
             info.data = p
 
             cls.extend_packet(p, 1518, cls.padding)
             info.data = p
 
@@ -2050,8 +2342,10 @@ class TestIPv4ReassemblyLocalNode(VppTestCase):
             fragments_300 = fragment_rfc791(p, 300)
             cls.pkt_infos.append((index, fragments_300))
         cls.fragments_300 = [x for (_, frags) in cls.pkt_infos for x in frags]
             fragments_300 = fragment_rfc791(p, 300)
             cls.pkt_infos.append((index, fragments_300))
         cls.fragments_300 = [x for (_, frags) in cls.pkt_infos for x in frags]
-        cls.logger.debug("Fragmented %s packets into %s 300-byte fragments" %
-                         (len(infos), len(cls.fragments_300)))
+        cls.logger.debug(
+            "Fragmented %s packets into %s 300-byte fragments"
+            % (len(infos), len(cls.fragments_300))
+        )
 
     def verify_capture(self, capture):
         """Verify captured packet stream.
 
     def verify_capture(self, capture):
         """Verify captured packet stream.
@@ -2084,11 +2378,12 @@ class TestIPv4ReassemblyLocalNode(VppTestCase):
                 self.logger.error(ppp("Unexpected or invalid packet:", packet))
                 raise
         for index in self._packet_infos:
                 self.logger.error(ppp("Unexpected or invalid packet:", packet))
                 raise
         for index in self._packet_infos:
-            self.assertIn(index, seen,
-                          "Packet with packet_index %d not received" % index)
+            self.assertIn(
+                index, seen, "Packet with packet_index %d not received" % index
+            )
 
     def test_reassembly(self):
 
     def test_reassembly(self):
-        """ basic reassembly """
+        """basic reassembly"""
 
         self.pg_enable_capture()
         self.src_dst_if.add_stream(self.fragments_300)
 
         self.pg_enable_capture()
         self.src_dst_if.add_stream(self.fragments_300)
@@ -2107,7 +2402,7 @@ class TestIPv4ReassemblyLocalNode(VppTestCase):
 
 
 class TestFIFReassembly(VppTestCase):
 
 
 class TestFIFReassembly(VppTestCase):
-    """ Fragments in fragments reassembly """
+    """Fragments in fragments reassembly"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -2131,27 +2426,41 @@ class TestFIFReassembly(VppTestCase):
         super().tearDownClass()
 
     def setUp(self):
         super().tearDownClass()
 
     def setUp(self):
-        """ Test setup - force timeout on existing reassemblies """
+        """Test setup - force timeout on existing reassemblies"""
         super().setUp()
         self.vapi.ip_reassembly_enable_disable(
         super().setUp()
         self.vapi.ip_reassembly_enable_disable(
-            sw_if_index=self.src_if.sw_if_index, enable_ip4=True,
-            enable_ip6=True)
+            sw_if_index=self.src_if.sw_if_index, enable_ip4=True, enable_ip6=True
+        )
         self.vapi.ip_reassembly_enable_disable(
         self.vapi.ip_reassembly_enable_disable(
-            sw_if_index=self.dst_if.sw_if_index, enable_ip4=True,
-            enable_ip6=True)
-        self.vapi.ip_reassembly_set(timeout_ms=0, max_reassemblies=1000,
-                                    max_reassembly_length=1000,
-                                    expire_walk_interval_ms=10)
-        self.vapi.ip_reassembly_set(timeout_ms=0, max_reassemblies=1000,
-                                    max_reassembly_length=1000,
-                                    expire_walk_interval_ms=10, is_ip6=1)
-        self.virtual_sleep(.25)
-        self.vapi.ip_reassembly_set(timeout_ms=1000000, max_reassemblies=1000,
-                                    max_reassembly_length=1000,
-                                    expire_walk_interval_ms=10000)
-        self.vapi.ip_reassembly_set(timeout_ms=1000000, max_reassemblies=1000,
-                                    max_reassembly_length=1000,
-                                    expire_walk_interval_ms=10000, is_ip6=1)
+            sw_if_index=self.dst_if.sw_if_index, enable_ip4=True, enable_ip6=True
+        )
+        self.vapi.ip_reassembly_set(
+            timeout_ms=0,
+            max_reassemblies=1000,
+            max_reassembly_length=1000,
+            expire_walk_interval_ms=10,
+        )
+        self.vapi.ip_reassembly_set(
+            timeout_ms=0,
+            max_reassemblies=1000,
+            max_reassembly_length=1000,
+            expire_walk_interval_ms=10,
+            is_ip6=1,
+        )
+        self.virtual_sleep(0.25)
+        self.vapi.ip_reassembly_set(
+            timeout_ms=1000000,
+            max_reassemblies=1000,
+            max_reassembly_length=1000,
+            expire_walk_interval_ms=10000,
+        )
+        self.vapi.ip_reassembly_set(
+            timeout_ms=1000000,
+            max_reassemblies=1000,
+            max_reassembly_length=1000,
+            expire_walk_interval_ms=10000,
+            is_ip6=1,
+        )
 
     def tearDown(self):
         super().tearDown()
 
     def tearDown(self):
         super().tearDown()
@@ -2177,7 +2486,8 @@ class TestFIFReassembly(VppTestCase):
                 packet_index = payload_info.index
                 self.assertTrue(
                     packet_index not in dropped_packet_indexes,
                 packet_index = payload_info.index
                 self.assertTrue(
                     packet_index not in dropped_packet_indexes,
-                    ppp("Packet received, but should be dropped:", packet))
+                    ppp("Packet received, but should be dropped:", packet),
+                )
                 if packet_index in seen:
                     raise Exception(ppp("Duplicate packet received", packet))
                 seen.add(packet_index)
                 if packet_index in seen:
                     raise Exception(ppp("Duplicate packet received", packet))
                 seen.add(packet_index)
@@ -2193,11 +2503,13 @@ class TestFIFReassembly(VppTestCase):
                 self.logger.error(ppp("Unexpected or invalid packet:", packet))
                 raise
         for index in self._packet_infos:
                 self.logger.error(ppp("Unexpected or invalid packet:", packet))
                 raise
         for index in self._packet_infos:
-            self.assertTrue(index in seen or index in dropped_packet_indexes,
-                            "Packet with packet_index %d not received" % index)
+            self.assertTrue(
+                index in seen or index in dropped_packet_indexes,
+                "Packet with packet_index %d not received" % index,
+            )
 
     def test_fif4(self):
 
     def test_fif4(self):
-        """ Fragments in fragments (4o4) """
+        """Fragments in fragments (4o4)"""
 
         # TODO this should be ideally in setUpClass, but then we hit a bug
         # with VppIpRoute incorrectly reporting it's present when it's not
 
         # TODO this should be ideally in setUpClass, but then we hit a bug
         # with VppIpRoute incorrectly reporting it's present when it's not
@@ -2211,11 +2523,15 @@ class TestFIFReassembly(VppTestCase):
         self.gre4.config_ip4()
 
         self.vapi.ip_reassembly_enable_disable(
         self.gre4.config_ip4()
 
         self.vapi.ip_reassembly_enable_disable(
-            sw_if_index=self.gre4.sw_if_index, enable_ip4=True)
+            sw_if_index=self.gre4.sw_if_index, enable_ip4=True
+        )
 
 
-        self.route4 = VppIpRoute(self, self.tun_ip4, 32,
-                                 [VppRoutePath(self.src_if.remote_ip4,
-                                               self.src_if.sw_if_index)])
+        self.route4 = VppIpRoute(
+            self,
+            self.tun_ip4,
+            32,
+            [VppRoutePath(self.src_if.remote_ip4, self.src_if.sw_if_index)],
+        )
         self.route4.add_vpp_config()
 
         self.reset_packet_infos()
         self.route4.add_vpp_config()
 
         self.reset_packet_infos()
@@ -2225,28 +2541,33 @@ class TestFIFReassembly(VppTestCase):
             # Ethernet header here is only for size calculation, thus it
             # doesn't matter how it's initialized. This is to ensure that
             # reassembled packet is not > 9000 bytes, so that it's not dropped
             # Ethernet header here is only for size calculation, thus it
             # doesn't matter how it's initialized. This is to ensure that
             # reassembled packet is not > 9000 bytes, so that it's not dropped
-            p = (Ether() /
-                 IP(id=i, src=self.src_if.remote_ip4,
-                    dst=self.dst_if.remote_ip4) /
-                 UDP(sport=1234, dport=5678) /
-                 Raw(payload))
+            p = (
+                Ether()
+                / IP(id=i, src=self.src_if.remote_ip4, dst=self.dst_if.remote_ip4)
+                / UDP(sport=1234, dport=5678)
+                / Raw(payload)
+            )
             size = self.packet_sizes[(i // 2) % len(self.packet_sizes)]
             self.extend_packet(p, size, self.padding)
             info.data = p[IP]  # use only IP part, without ethernet header
 
             size = self.packet_sizes[(i // 2) % len(self.packet_sizes)]
             self.extend_packet(p, size, self.padding)
             info.data = p[IP]  # use only IP part, without ethernet header
 
-        fragments = [x for _, p in self._packet_infos.items()
-                     for x in fragment_rfc791(p.data, 400)]
+        fragments = [
+            x
+            for _, p in self._packet_infos.items()
+            for x in fragment_rfc791(p.data, 400)
+        ]
 
 
-        encapped_fragments = \
-            [Ether(dst=self.src_if.local_mac, src=self.src_if.remote_mac) /
-             IP(src=self.tun_ip4, dst=self.src_if.local_ip4) /
-                GRE() /
-                p
-                for p in fragments]
+        encapped_fragments = [
+            Ether(dst=self.src_if.local_mac, src=self.src_if.remote_mac)
+            / IP(src=self.tun_ip4, dst=self.src_if.local_ip4)
+            / GRE()
+            / p
+            for p in fragments
+        ]
 
 
-        fragmented_encapped_fragments = \
-            [x for p in encapped_fragments
-             for x in fragment_rfc791(p, 200)]
+        fragmented_encapped_fragments = [
+            x for p in encapped_fragments for x in fragment_rfc791(p, 200)
+        ]
 
         self.src_if.add_stream(fragmented_encapped_fragments)
 
 
         self.src_if.add_stream(fragmented_encapped_fragments)
 
@@ -2263,7 +2584,7 @@ class TestFIFReassembly(VppTestCase):
         self.logger.debug(self.vapi.ppcli("show interface"))
 
     def test_fif6(self):
         self.logger.debug(self.vapi.ppcli("show interface"))
 
     def test_fif6(self):
-        """ Fragments in fragments (6o6) """
+        """Fragments in fragments (6o6)"""
         # TODO this should be ideally in setUpClass, but then we hit a bug
         # with VppIpRoute incorrectly reporting it's present when it's not
         # so we need to manually remove the vpp config, thus we cannot have
         # TODO this should be ideally in setUpClass, but then we hit a bug
         # with VppIpRoute incorrectly reporting it's present when it's not
         # so we need to manually remove the vpp config, thus we cannot have
@@ -2276,12 +2597,15 @@ class TestFIFReassembly(VppTestCase):
         self.gre6.config_ip6()
 
         self.vapi.ip_reassembly_enable_disable(
         self.gre6.config_ip6()
 
         self.vapi.ip_reassembly_enable_disable(
-            sw_if_index=self.gre6.sw_if_index, enable_ip6=True)
+            sw_if_index=self.gre6.sw_if_index, enable_ip6=True
+        )
 
 
-        self.route6 = VppIpRoute(self, self.tun_ip6, 128,
-                                 [VppRoutePath(
-                                     self.src_if.remote_ip6,
-                                     self.src_if.sw_if_index)])
+        self.route6 = VppIpRoute(
+            self,
+            self.tun_ip6,
+            128,
+            [VppRoutePath(self.src_if.remote_ip6, self.src_if.sw_if_index)],
+        )
         self.route6.add_vpp_config()
 
         self.reset_packet_infos()
         self.route6.add_vpp_config()
 
         self.reset_packet_infos()
@@ -2291,34 +2615,41 @@ class TestFIFReassembly(VppTestCase):
             # Ethernet header here is only for size calculation, thus it
             # doesn't matter how it's initialized. This is to ensure that
             # reassembled packet is not > 9000 bytes, so that it's not dropped
             # Ethernet header here is only for size calculation, thus it
             # doesn't matter how it's initialized. This is to ensure that
             # reassembled packet is not > 9000 bytes, so that it's not dropped
-            p = (Ether() /
-                 IPv6(src=self.src_if.remote_ip6, dst=self.dst_if.remote_ip6) /
-                 UDP(sport=1234, dport=5678) /
-                 Raw(payload))
+            p = (
+                Ether()
+                / IPv6(src=self.src_if.remote_ip6, dst=self.dst_if.remote_ip6)
+                / UDP(sport=1234, dport=5678)
+                / Raw(payload)
+            )
             size = self.packet_sizes[(i // 2) % len(self.packet_sizes)]
             self.extend_packet(p, size, self.padding)
             info.data = p[IPv6]  # use only IPv6 part, without ethernet header
 
             size = self.packet_sizes[(i // 2) % len(self.packet_sizes)]
             self.extend_packet(p, size, self.padding)
             info.data = p[IPv6]  # use only IPv6 part, without ethernet header
 
-        fragments = [x for _, i in self._packet_infos.items()
-                     for x in fragment_rfc8200(
-                         i.data, i.index, 400)]
+        fragments = [
+            x
+            for _, i in self._packet_infos.items()
+            for x in fragment_rfc8200(i.data, i.index, 400)
+        ]
 
 
-        encapped_fragments = \
-            [Ether(dst=self.src_if.local_mac, src=self.src_if.remote_mac) /
-             IPv6(src=self.tun_ip6, dst=self.src_if.local_ip6) /
-                GRE() /
-                p
-                for p in fragments]
+        encapped_fragments = [
+            Ether(dst=self.src_if.local_mac, src=self.src_if.remote_mac)
+            / IPv6(src=self.tun_ip6, dst=self.src_if.local_ip6)
+            / GRE()
+            / p
+            for p in fragments
+        ]
 
 
-        fragmented_encapped_fragments = \
-            [x for p in encapped_fragments for x in (
+        fragmented_encapped_fragments = [
+            x
+            for p in encapped_fragments
+            for x in (
                 fragment_rfc8200(
                 fragment_rfc8200(
-                    p,
-                    2 * len(self._packet_infos) + p[IPv6ExtHdrFragment].id,
-                    200)
-                if IPv6ExtHdrFragment in p else [p]
+                    p, 2 * len(self._packet_infos) + p[IPv6ExtHdrFragment].id, 200
+                )
+                if IPv6ExtHdrFragment in p
+                else [p]
             )
             )
-            ]
+        ]
 
         self.src_if.add_stream(fragmented_encapped_fragments)
 
 
         self.src_if.add_stream(fragmented_encapped_fragments)
 
@@ -2334,5 +2665,5 @@ class TestFIFReassembly(VppTestCase):
         self.gre6.remove_vpp_config()
 
 
         self.gre6.remove_vpp_config()
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index 6c48e54..699ebaf 100644 (file)
@@ -10,7 +10,7 @@ from vpp_ip_route import VppIpTable, VppIpRoute, VppRoutePath
 
 @tag_fixme_vpp_workers
 class TestSession(VppTestCase):
 
 @tag_fixme_vpp_workers
 class TestSession(VppTestCase):
-    """ Session Test Case """
+    """Session Test Case"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -40,10 +40,12 @@ class TestSession(VppTestCase):
             table_id += 1
 
         # Configure namespaces
             table_id += 1
 
         # Configure namespaces
-        self.vapi.app_namespace_add_del(namespace_id="0",
-                                        sw_if_index=self.loop0.sw_if_index)
-        self.vapi.app_namespace_add_del(namespace_id="1",
-                                        sw_if_index=self.loop1.sw_if_index)
+        self.vapi.app_namespace_add_del(
+            namespace_id="0", sw_if_index=self.loop0.sw_if_index
+        )
+        self.vapi.app_namespace_add_del(
+            namespace_id="1", sw_if_index=self.loop1.sw_if_index
+        )
 
     def tearDown(self):
         for i in self.lo_interfaces:
 
     def tearDown(self):
         for i in self.lo_interfaces:
@@ -55,31 +57,42 @@ class TestSession(VppTestCase):
         self.vapi.session_enable_disable(is_enable=1)
 
     def test_segment_manager_alloc(self):
         self.vapi.session_enable_disable(is_enable=1)
 
     def test_segment_manager_alloc(self):
-        """ Session Segment Manager Multiple Segment Allocation """
+        """Session Segment Manager Multiple Segment Allocation"""
 
         # Add inter-table routes
 
         # Add inter-table routes
-        ip_t01 = VppIpRoute(self, self.loop1.local_ip4, 32,
-                            [VppRoutePath("0.0.0.0",
-                                          0xffffffff,
-                                          nh_table_id=1)])
-        ip_t10 = VppIpRoute(self, self.loop0.local_ip4, 32,
-                            [VppRoutePath("0.0.0.0",
-                                          0xffffffff,
-                                          nh_table_id=0)], table_id=1)
+        ip_t01 = VppIpRoute(
+            self,
+            self.loop1.local_ip4,
+            32,
+            [VppRoutePath("0.0.0.0", 0xFFFFFFFF, nh_table_id=1)],
+        )
+        ip_t10 = VppIpRoute(
+            self,
+            self.loop0.local_ip4,
+            32,
+            [VppRoutePath("0.0.0.0", 0xFFFFFFFF, nh_table_id=0)],
+            table_id=1,
+        )
         ip_t01.add_vpp_config()
         ip_t10.add_vpp_config()
 
         # Start builtin server and client with small private segments
         uri = "tcp://" + self.loop0.local_ip4 + "/1234"
         ip_t01.add_vpp_config()
         ip_t10.add_vpp_config()
 
         # Start builtin server and client with small private segments
         uri = "tcp://" + self.loop0.local_ip4 + "/1234"
-        error = self.vapi.cli("test echo server appns 0 fifo-size 64 " +
-                              "private-segment-size 1m uri " + uri)
+        error = self.vapi.cli(
+            "test echo server appns 0 fifo-size 64 "
+            + "private-segment-size 1m uri "
+            + uri
+        )
         if error:
             self.logger.critical(error)
             self.assertNotIn("failed", error)
 
         if error:
             self.logger.critical(error)
             self.assertNotIn("failed", error)
 
-        error = self.vapi.cli("test echo client nclients 100 appns 1 " +
-                              "no-output fifo-size 64 syn-timeout 2 " +
-                              "private-segment-size 1m uri " + uri)
+        error = self.vapi.cli(
+            "test echo client nclients 100 appns 1 "
+            + "no-output fifo-size 64 syn-timeout 2 "
+            + "private-segment-size 1m uri "
+            + uri
+        )
         if error:
             self.logger.critical(error)
             self.assertNotIn("failed", error)
         if error:
             self.logger.critical(error)
             self.assertNotIn("failed", error)
@@ -94,7 +107,7 @@ class TestSession(VppTestCase):
 
 @tag_fixme_vpp_workers
 class TestSessionUnitTests(VppTestCase):
 
 @tag_fixme_vpp_workers
 class TestSessionUnitTests(VppTestCase):
-    """ Session Unit Tests Case """
+    """Session Unit Tests Case"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -109,7 +122,7 @@ class TestSessionUnitTests(VppTestCase):
         self.vapi.session_enable_disable(is_enable=1)
 
     def test_session(self):
         self.vapi.session_enable_disable(is_enable=1)
 
     def test_session(self):
-        """ Session Unit Tests """
+        """Session Unit Tests"""
         error = self.vapi.cli("test session all")
 
         if error:
         error = self.vapi.cli("test session all")
 
         if error:
@@ -123,7 +136,7 @@ class TestSessionUnitTests(VppTestCase):
 
 @tag_run_solo
 class TestSegmentManagerTests(VppTestCase):
 
 @tag_run_solo
 class TestSegmentManagerTests(VppTestCase):
-    """ SVM Fifo Unit Tests Case """
+    """SVM Fifo Unit Tests Case"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -137,7 +150,7 @@ class TestSegmentManagerTests(VppTestCase):
         super(TestSegmentManagerTests, self).setUp()
 
     def test_segment_manager(self):
         super(TestSegmentManagerTests, self).setUp()
 
     def test_segment_manager(self):
-        """ Segment manager Tests """
+        """Segment manager Tests"""
         error = self.vapi.cli("test segment-manager all")
 
         if error:
         error = self.vapi.cli("test segment-manager all")
 
         if error:
@@ -150,7 +163,7 @@ class TestSegmentManagerTests(VppTestCase):
 
 @tag_run_solo
 class TestSvmFifoUnitTests(VppTestCase):
 
 @tag_run_solo
 class TestSvmFifoUnitTests(VppTestCase):
-    """ SVM Fifo Unit Tests Case """
+    """SVM Fifo Unit Tests Case"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -164,7 +177,7 @@ class TestSvmFifoUnitTests(VppTestCase):
         super(TestSvmFifoUnitTests, self).setUp()
 
     def test_svm_fifo(self):
         super(TestSvmFifoUnitTests, self).setUp()
 
     def test_svm_fifo(self):
-        """ SVM Fifo Unit Tests """
+        """SVM Fifo Unit Tests"""
         error = self.vapi.cli("test svm fifo all")
 
         if error:
         error = self.vapi.cli("test svm fifo all")
 
         if error:
@@ -174,5 +187,6 @@ class TestSvmFifoUnitTests(VppTestCase):
     def tearDown(self):
         super(TestSvmFifoUnitTests, self).tearDown()
 
     def tearDown(self):
         super(TestSvmFifoUnitTests, self).tearDown()
 
-if __name__ == '__main__':
+
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index 24ff74b..70ff1fc 100644 (file)
@@ -18,7 +18,7 @@ from socket import AF_INET, AF_INET6, inet_pton
 
 
 class Test6RD(VppTestCase):
 
 
 class Test6RD(VppTestCase):
-    """ 6RD Test Case """
+    """6RD Test Case"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -41,7 +41,7 @@ class Test6RD(VppTestCase):
         for n in range(4):
             i = self.pg_interfaces[n]
             i.admin_up()
         for n in range(4):
             i = self.pg_interfaces[n]
             i.admin_up()
-            if (n > 1):
+            if n > 1:
                 i.set_table_ip4(10)
                 i.set_table_ip6(20)
             i.config_ip4()
                 i.set_table_ip4(10)
                 i.set_table_ip6(20)
             i.config_ip4()
@@ -82,28 +82,31 @@ class Test6RD(VppTestCase):
         self.assertEqual(rx[IPv6].nh, expected[IPv6].nh)
 
     def payload(self, len):
         self.assertEqual(rx[IPv6].nh, expected[IPv6].nh)
 
     def payload(self, len):
-        return 'x' * len
+        return "x" * len
 
     def test_6rd_ip6_to_ip4(self):
 
     def test_6rd_ip6_to_ip4(self):
-        """ ip6 -> ip4 (encap) 6rd test """
+        """ip6 -> ip4 (encap) 6rd test"""
         p_ether = Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
         p_ether = Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
-        p_ip6 = IPv6(src="1::1", dst="2002:AC10:0202::1", nh='UDP')
+        p_ip6 = IPv6(src="1::1", dst="2002:AC10:0202::1", nh="UDP")
 
 
-        rv = self.vapi.ipip_6rd_add_tunnel(ip6_table_id=0,
-                                           ip4_table_id=0,
-                                           ip6_prefix='2002::/16',
-                                           ip4_prefix='0.0.0.0/0',
-                                           ip4_src=self.pg0.local_ip4,
-                                           security_check=True)
+        rv = self.vapi.ipip_6rd_add_tunnel(
+            ip6_table_id=0,
+            ip4_table_id=0,
+            ip6_prefix="2002::/16",
+            ip4_prefix="0.0.0.0/0",
+            ip4_src=self.pg0.local_ip4,
+            security_check=True,
+        )
 
         self.tunnel_index = rv.sw_if_index
 
         self.vapi.cli("show ip6 fib")
         p_payload = UDP(sport=1234, dport=1234)
 
         self.tunnel_index = rv.sw_if_index
 
         self.vapi.cli("show ip6 fib")
         p_payload = UDP(sport=1234, dport=1234)
-        p = (p_ether / p_ip6 / p_payload)
+        p = p_ether / p_ip6 / p_payload
 
 
-        p_reply = (IP(src=self.pg0.local_ip4, dst=self.pg1.remote_ip4,
-                      proto='ipv6') / p_ip6)
+        p_reply = (
+            IP(src=self.pg0.local_ip4, dst=self.pg1.remote_ip4, proto="ipv6") / p_ip6
+        )
 
         rx = self.send_and_expect(self.pg0, p * 10, self.pg1)
         for p in rx:
 
         rx = self.send_and_expect(self.pg0, p * 10, self.pg1)
         for p in rx:
@@ -113,32 +116,37 @@ class Test6RD(VppTestCase):
         plen = 1481 - 40 - 8
         p_ip6 = IPv6(src="1::1", dst="2002:AC10:0202::1")
         p_payload = UDP(sport=1234, dport=1234) / Raw(self.payload(plen))
         plen = 1481 - 40 - 8
         p_ip6 = IPv6(src="1::1", dst="2002:AC10:0202::1")
         p_payload = UDP(sport=1234, dport=1234) / Raw(self.payload(plen))
-        p = (p_ether / p_ip6 / p_payload)
+        p = p_ether / p_ip6 / p_payload
 
 
-        p_reply = (IP(src=self.pg0.local_ip4, dst=self.pg1.remote_ip4,
-                      proto='ipv6') / p_ip6)
+        p_reply = (
+            IP(src=self.pg0.local_ip4, dst=self.pg1.remote_ip4, proto="ipv6") / p_ip6
+        )
 
         rx = self.send_and_assert_no_replies(self.pg0, p * 10)
         self.vapi.ipip_6rd_del_tunnel(self.tunnel_index)
 
     def test_6rd_ip6_to_ip4_vrf(self):
 
         rx = self.send_and_assert_no_replies(self.pg0, p * 10)
         self.vapi.ipip_6rd_del_tunnel(self.tunnel_index)
 
     def test_6rd_ip6_to_ip4_vrf(self):
-        """ ip6 -> ip4 (encap) 6rd VRF test """
+        """ip6 -> ip4 (encap) 6rd VRF test"""
         p_ether = Ether(src=self.pg2.remote_mac, dst=self.pg2.local_mac)
         p_ether = Ether(src=self.pg2.remote_mac, dst=self.pg2.local_mac)
-        p_ip6 = IPv6(src="1::1", dst="2002:AC10:0402::1", nh='UDP')
-
-        rv = self.vapi.ipip_6rd_add_tunnel(ip6_table_id=20, ip4_table_id=10,
-                                           ip6_prefix='2002::/16',
-                                           ip4_prefix='0.0.0.0/0',
-                                           ip4_src=self.pg2.local_ip4,
-                                           security_check=True)
+        p_ip6 = IPv6(src="1::1", dst="2002:AC10:0402::1", nh="UDP")
+
+        rv = self.vapi.ipip_6rd_add_tunnel(
+            ip6_table_id=20,
+            ip4_table_id=10,
+            ip6_prefix="2002::/16",
+            ip4_prefix="0.0.0.0/0",
+            ip4_src=self.pg2.local_ip4,
+            security_check=True,
+        )
         self.tunnel_index = rv.sw_if_index
 
         self.vapi.cli("show ip6 fib")
         p_payload = UDP(sport=1234, dport=1234)
         self.tunnel_index = rv.sw_if_index
 
         self.vapi.cli("show ip6 fib")
         p_payload = UDP(sport=1234, dport=1234)
-        p = (p_ether / p_ip6 / p_payload)
+        p = p_ether / p_ip6 / p_payload
 
 
-        p_reply = (IP(src=self.pg2.local_ip4, dst=self.pg3.remote_ip4,
-                      proto='ipv6') / p_ip6)
+        p_reply = (
+            IP(src=self.pg2.local_ip4, dst=self.pg3.remote_ip4, proto="ipv6") / p_ip6
+        )
 
         rx = self.send_and_expect(self.pg2, p * 10, self.pg3)
         for p in rx:
 
         rx = self.send_and_expect(self.pg2, p * 10, self.pg3)
         for p in rx:
@@ -148,40 +156,47 @@ class Test6RD(VppTestCase):
         plen = 1481 - 40 - 8
         p_ip6 = IPv6(src="1::1", dst="2002:AC10:0402::1")
         p_payload = UDP(sport=1234, dport=1234) / Raw(self.payload(plen))
         plen = 1481 - 40 - 8
         p_ip6 = IPv6(src="1::1", dst="2002:AC10:0402::1")
         p_payload = UDP(sport=1234, dport=1234) / Raw(self.payload(plen))
-        p = (p_ether / p_ip6 / p_payload)
+        p = p_ether / p_ip6 / p_payload
 
 
-        p_reply = (IP(src=self.pg2.local_ip4, dst=self.pg3.remote_ip4,
-                      proto='ipv6') / p_ip6)
+        p_reply = (
+            IP(src=self.pg2.local_ip4, dst=self.pg3.remote_ip4, proto="ipv6") / p_ip6
+        )
 
         rx = self.send_and_assert_no_replies(self.pg0, p * 10)
         self.vapi.ipip_6rd_del_tunnel(self.tunnel_index)
 
     def test_6rd_ip4_to_ip6(self):
 
         rx = self.send_and_assert_no_replies(self.pg0, p * 10)
         self.vapi.ipip_6rd_del_tunnel(self.tunnel_index)
 
     def test_6rd_ip4_to_ip6(self):
-        """ ip4 -> ip6 (decap) 6rd test """
-
-        rv = self.vapi.ipip_6rd_add_tunnel(ip6_table_id=0,
-                                           ip4_table_id=0,
-                                           ip6_prefix='2002::/16',
-                                           ip4_prefix='0.0.0.0/0',
-                                           ip4_src=self.pg0.local_ip4,
-                                           security_check=True)
+        """ip4 -> ip6 (decap) 6rd test"""
+
+        rv = self.vapi.ipip_6rd_add_tunnel(
+            ip6_table_id=0,
+            ip4_table_id=0,
+            ip6_prefix="2002::/16",
+            ip4_prefix="0.0.0.0/0",
+            ip4_src=self.pg0.local_ip4,
+            security_check=True,
+        )
         self.tunnel_index = rv.sw_if_index
         rv = self.vapi.ipip_6rd_del_tunnel(rv.sw_if_index)
         self.tunnel_index = rv.sw_if_index
         rv = self.vapi.ipip_6rd_del_tunnel(rv.sw_if_index)
-        rv = self.vapi.ipip_6rd_add_tunnel(ip6_table_id=0,
-                                           ip4_table_id=0,
-                                           ip6_prefix='2002::/16',
-                                           ip4_prefix='0.0.0.0/0',
-                                           ip4_src=self.pg0.local_ip4,
-                                           security_check=True)
+        rv = self.vapi.ipip_6rd_add_tunnel(
+            ip6_table_id=0,
+            ip4_table_id=0,
+            ip6_prefix="2002::/16",
+            ip4_prefix="0.0.0.0/0",
+            ip4_src=self.pg0.local_ip4,
+            security_check=True,
+        )
         self.tunnel_index = rv.sw_if_index
 
         self.tunnel_index = rv.sw_if_index
 
-        p_ip6 = (IPv6(src="2002:AC10:0202::1", dst=self.pg1.remote_ip6) /
-                 UDP(sport=1234, dport=1234))
+        p_ip6 = IPv6(src="2002:AC10:0202::1", dst=self.pg1.remote_ip6) / UDP(
+            sport=1234, dport=1234
+        )
 
 
-        p = (Ether(src=self.pg0.remote_mac,
-                   dst=self.pg0.local_mac) /
-             IP(src=self.pg1.remote_ip4, dst=self.pg0.local_ip4) /
-             p_ip6)
+        p = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg1.remote_ip4, dst=self.pg0.local_ip4)
+            / p_ip6
+        )
 
         p_reply = p_ip6
 
 
         p_reply = p_ip6
 
@@ -191,32 +206,38 @@ class Test6RD(VppTestCase):
         self.vapi.ipip_6rd_del_tunnel(self.tunnel_index)
 
     def test_6rd_ip4_to_ip6_vrf(self):
         self.vapi.ipip_6rd_del_tunnel(self.tunnel_index)
 
     def test_6rd_ip4_to_ip6_vrf(self):
-        """ ip4 -> ip6 (decap) 6rd VRF test """
-
-        rv = self.vapi.ipip_6rd_add_tunnel(ip6_table_id=20,
-                                           ip4_table_id=10,
-                                           ip6_prefix='2002::/16',
-                                           ip4_prefix='0.0.0.0/0',
-                                           ip4_src=self.pg2.local_ip4,
-                                           security_check=True)
+        """ip4 -> ip6 (decap) 6rd VRF test"""
+
+        rv = self.vapi.ipip_6rd_add_tunnel(
+            ip6_table_id=20,
+            ip4_table_id=10,
+            ip6_prefix="2002::/16",
+            ip4_prefix="0.0.0.0/0",
+            ip4_src=self.pg2.local_ip4,
+            security_check=True,
+        )
         self.tunnel_index = rv.sw_if_index
         rv = self.vapi.ipip_6rd_del_tunnel(rv.sw_if_index)
         self.tunnel_index = rv.sw_if_index
         rv = self.vapi.ipip_6rd_del_tunnel(rv.sw_if_index)
-        rv = self.vapi.ipip_6rd_add_tunnel(ip6_table_id=20,
-                                           ip4_table_id=10,
-                                           ip6_prefix='2002::/16',
-                                           ip4_prefix='0.0.0.0/0',
-                                           ip4_src=self.pg2.local_ip4,
-                                           security_check=True)
+        rv = self.vapi.ipip_6rd_add_tunnel(
+            ip6_table_id=20,
+            ip4_table_id=10,
+            ip6_prefix="2002::/16",
+            ip4_prefix="0.0.0.0/0",
+            ip4_src=self.pg2.local_ip4,
+            security_check=True,
+        )
         self.tunnel_index = rv.sw_if_index
         self.vapi.sw_interface_set_table(self.tunnel_index, 1, 20)
 
         self.tunnel_index = rv.sw_if_index
         self.vapi.sw_interface_set_table(self.tunnel_index, 1, 20)
 
-        p_ip6 = (IPv6(src="2002:AC10:0402::1", dst=self.pg3.remote_ip6) /
-                 UDP(sport=1234, dport=1234))
+        p_ip6 = IPv6(src="2002:AC10:0402::1", dst=self.pg3.remote_ip6) / UDP(
+            sport=1234, dport=1234
+        )
 
 
-        p = (Ether(src=self.pg2.remote_mac,
-                   dst=self.pg2.local_mac) /
-             IP(src=self.pg3.remote_ip4, dst=self.pg2.local_ip4) /
-             p_ip6)
+        p = (
+            Ether(src=self.pg2.remote_mac, dst=self.pg2.local_mac)
+            / IP(src=self.pg3.remote_ip4, dst=self.pg2.local_ip4)
+            / p_ip6
+        )
 
         p_reply = p_ip6
 
 
         p_reply = p_ip6
 
@@ -227,39 +248,45 @@ class Test6RD(VppTestCase):
         self.vapi.ipip_6rd_del_tunnel(self.tunnel_index)
 
     def test_6rd_ip4_to_ip6_multiple(self):
         self.vapi.ipip_6rd_del_tunnel(self.tunnel_index)
 
     def test_6rd_ip4_to_ip6_multiple(self):
-        """ ip4 -> ip6 (decap) 6rd test """
+        """ip4 -> ip6 (decap) 6rd test"""
 
         self.tunnel_index = []
 
         self.tunnel_index = []
-        rv = self.vapi.ipip_6rd_add_tunnel(ip6_table_id=0,
-                                           ip4_table_id=0,
-                                           ip6_prefix='2002::/16',
-                                           ip4_prefix='0.0.0.0/0',
-                                           ip4_src=self.pg0.local_ip4,
-                                           security_check=True)
+        rv = self.vapi.ipip_6rd_add_tunnel(
+            ip6_table_id=0,
+            ip4_table_id=0,
+            ip6_prefix="2002::/16",
+            ip4_prefix="0.0.0.0/0",
+            ip4_src=self.pg0.local_ip4,
+            security_check=True,
+        )
         self.tunnel_index.append(rv.sw_if_index)
         self.tunnel_index.append(rv.sw_if_index)
-        rv = self.vapi.ipip_6rd_add_tunnel(ip6_table_id=0,
-                                           ip4_table_id=0,
-                                           ip6_prefix='2003::/16',
-                                           ip4_prefix='0.0.0.0/0',
-                                           ip4_src=self.pg1.local_ip4,
-                                           security_check=True)
+        rv = self.vapi.ipip_6rd_add_tunnel(
+            ip6_table_id=0,
+            ip4_table_id=0,
+            ip6_prefix="2003::/16",
+            ip4_prefix="0.0.0.0/0",
+            ip4_src=self.pg1.local_ip4,
+            security_check=True,
+        )
 
         self.tunnel_index.append(rv.sw_if_index)
 
         self.vapi.cli("show ip6 fib")
         p_ether = Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
         p_ip4 = IP(src=self.pg1.remote_ip4, dst=self.pg0.local_ip4)
 
         self.tunnel_index.append(rv.sw_if_index)
 
         self.vapi.cli("show ip6 fib")
         p_ether = Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
         p_ip4 = IP(src=self.pg1.remote_ip4, dst=self.pg0.local_ip4)
-        p_ip6_1 = (IPv6(src="2002:AC10:0202::1", dst=self.pg1.remote_ip6) /
-                   UDP(sport=1234, dport=1234))
-        p_ip6_2 = (IPv6(src="2003:AC10:0202::1", dst=self.pg1.remote_ip6) /
-                   UDP(sport=1234, dport=1234))
-
-        p = (p_ether / p_ip4 / p_ip6_1)
+        p_ip6_1 = IPv6(src="2002:AC10:0202::1", dst=self.pg1.remote_ip6) / UDP(
+            sport=1234, dport=1234
+        )
+        p_ip6_2 = IPv6(src="2003:AC10:0202::1", dst=self.pg1.remote_ip6) / UDP(
+            sport=1234, dport=1234
+        )
+
+        p = p_ether / p_ip4 / p_ip6_1
         rx = self.send_and_expect(self.pg0, p * 10, self.pg1)
         for p in rx:
             self.validate_4in6(p, p_ip6_1)
 
         rx = self.send_and_expect(self.pg0, p * 10, self.pg1)
         for p in rx:
             self.validate_4in6(p, p_ip6_1)
 
-        p = (p_ether / p_ip4 / p_ip6_2)
+        p = p_ether / p_ip4 / p_ip6_2
         rx = self.send_and_expect(self.pg0, p * 10, self.pg1)
         for p in rx:
             self.validate_4in6(p, p_ip6_2)
         rx = self.send_and_expect(self.pg0, p * 10, self.pg1)
         for p in rx:
             self.validate_4in6(p, p_ip6_2)
@@ -267,49 +294,57 @@ class Test6RD(VppTestCase):
             self.vapi.ipip_6rd_del_tunnel(i)
 
     def test_6rd_ip4_to_ip6_suffix(self):
             self.vapi.ipip_6rd_del_tunnel(i)
 
     def test_6rd_ip4_to_ip6_suffix(self):
-        """ ip4 -> ip6 (decap) 6rd test """
-
-        rv = self.vapi.ipip_6rd_add_tunnel(ip6_table_id=0,
-                                           ip4_table_id=0,
-                                           ip6_prefix='2002::/16',
-                                           ip4_prefix='172.0.0.0/8',
-                                           ip4_src=self.pg0.local_ip4,
-                                           security_check=True)
+        """ip4 -> ip6 (decap) 6rd test"""
+
+        rv = self.vapi.ipip_6rd_add_tunnel(
+            ip6_table_id=0,
+            ip4_table_id=0,
+            ip6_prefix="2002::/16",
+            ip4_prefix="172.0.0.0/8",
+            ip4_src=self.pg0.local_ip4,
+            security_check=True,
+        )
         self.tunnel_index = rv.sw_if_index
 
         self.vapi.cli("show ip6 fib")
         p_ether = Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
         p_ip4 = IP(src=self.pg1.remote_ip4, dst=self.pg0.local_ip4)
         self.tunnel_index = rv.sw_if_index
 
         self.vapi.cli("show ip6 fib")
         p_ether = Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
         p_ip4 = IP(src=self.pg1.remote_ip4, dst=self.pg0.local_ip4)
-        p_ip6 = (IPv6(src="2002:1002:0200::1", dst=self.pg1.remote_ip6) /
-                 UDP(sport=1234, dport=1234))
+        p_ip6 = IPv6(src="2002:1002:0200::1", dst=self.pg1.remote_ip6) / UDP(
+            sport=1234, dport=1234
+        )
 
 
-        p = (p_ether / p_ip4 / p_ip6)
+        p = p_ether / p_ip4 / p_ip6
         rx = self.send_and_expect(self.pg0, p * 10, self.pg1)
         for p in rx:
             self.validate_4in6(p, p_ip6)
         self.vapi.ipip_6rd_del_tunnel(self.tunnel_index)
 
     def test_6rd_ip4_to_ip6_sec_check(self):
         rx = self.send_and_expect(self.pg0, p * 10, self.pg1)
         for p in rx:
             self.validate_4in6(p, p_ip6)
         self.vapi.ipip_6rd_del_tunnel(self.tunnel_index)
 
     def test_6rd_ip4_to_ip6_sec_check(self):
-        """ ip4 -> ip6 (decap) security check 6rd test """
-
-        rv = self.vapi.ipip_6rd_add_tunnel(ip6_table_id=0,
-                                           ip4_table_id=0,
-                                           ip6_prefix='2002::/16',
-                                           ip4_prefix='0.0.0.0/0',
-                                           ip4_src=self.pg0.local_ip4,
-                                           security_check=True)
+        """ip4 -> ip6 (decap) security check 6rd test"""
+
+        rv = self.vapi.ipip_6rd_add_tunnel(
+            ip6_table_id=0,
+            ip4_table_id=0,
+            ip6_prefix="2002::/16",
+            ip4_prefix="0.0.0.0/0",
+            ip4_src=self.pg0.local_ip4,
+            security_check=True,
+        )
         self.tunnel_index = rv.sw_if_index
 
         self.vapi.cli("show ip6 fib")
         self.tunnel_index = rv.sw_if_index
 
         self.vapi.cli("show ip6 fib")
-        p_ip6 = (IPv6(src="2002:AC10:0202::1", dst=self.pg1.remote_ip6) /
-                 UDP(sport=1234, dport=1234))
-        p_ip6_fail = (IPv6(src="2002:DEAD:0202::1", dst=self.pg1.remote_ip6) /
-                      UDP(sport=1234, dport=1234))
-
-        p = (Ether(src=self.pg0.remote_mac,
-                   dst=self.pg0.local_mac) /
-             IP(src=self.pg1.remote_ip4, dst=self.pg0.local_ip4) /
-             p_ip6)
+        p_ip6 = IPv6(src="2002:AC10:0202::1", dst=self.pg1.remote_ip6) / UDP(
+            sport=1234, dport=1234
+        )
+        p_ip6_fail = IPv6(src="2002:DEAD:0202::1", dst=self.pg1.remote_ip6) / UDP(
+            sport=1234, dport=1234
+        )
+
+        p = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg1.remote_ip4, dst=self.pg0.local_ip4)
+            / p_ip6
+        )
 
         p_reply = p_ip6
 
 
         p_reply = p_ip6
 
@@ -317,55 +352,62 @@ class Test6RD(VppTestCase):
         for p in rx:
             self.validate_4in6(p, p_reply)
 
         for p in rx:
             self.validate_4in6(p, p_reply)
 
-        p = (Ether(src=self.pg0.remote_mac,
-                   dst=self.pg0.local_mac) /
-             IP(src=self.pg1.remote_ip4, dst=self.pg0.local_ip4) /
-             p_ip6_fail)
+        p = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg1.remote_ip4, dst=self.pg0.local_ip4)
+            / p_ip6_fail
+        )
         rx = self.send_and_assert_no_replies(self.pg0, p * 10)
         self.vapi.ipip_6rd_del_tunnel(self.tunnel_index)
 
     def test_6rd_bgp_tunnel(self):
         rx = self.send_and_assert_no_replies(self.pg0, p * 10)
         self.vapi.ipip_6rd_del_tunnel(self.tunnel_index)
 
     def test_6rd_bgp_tunnel(self):
-        """ 6rd BGP tunnel """
+        """6rd BGP tunnel"""
 
 
-        rv = self.vapi.ipip_6rd_add_tunnel(ip6_table_id=0,
-                                           ip4_table_id=0,
-                                           ip6_prefix='2002::/16',
-                                           ip4_prefix='0.0.0.0/0',
-                                           ip4_src=self.pg0.local_ip4,
-                                           security_check=False)
+        rv = self.vapi.ipip_6rd_add_tunnel(
+            ip6_table_id=0,
+            ip4_table_id=0,
+            ip6_prefix="2002::/16",
+            ip4_prefix="0.0.0.0/0",
+            ip4_src=self.pg0.local_ip4,
+            security_check=False,
+        )
 
         self.tunnel_index = rv.sw_if_index
 
 
         self.tunnel_index = rv.sw_if_index
 
-        default_route = VppIpRoute(self, "DEAD::", 16,
-                                   [VppRoutePath("2002:0808:0808::",
-                                                 self.tunnel_index)])
+        default_route = VppIpRoute(
+            self, "DEAD::", 16, [VppRoutePath("2002:0808:0808::", self.tunnel_index)]
+        )
         default_route.add_vpp_config()
 
         default_route.add_vpp_config()
 
-        ip4_route = VppIpRoute(self, "8.0.0.0", 8,
-                               [VppRoutePath(self.pg1.remote_ip4, 0xFFFFFFFF)])
+        ip4_route = VppIpRoute(
+            self, "8.0.0.0", 8, [VppRoutePath(self.pg1.remote_ip4, 0xFFFFFFFF)]
+        )
         ip4_route.add_vpp_config()
 
         # Via recursive route 6 -> 4
         ip4_route.add_vpp_config()
 
         # Via recursive route 6 -> 4
-        p = (Ether(src=self.pg0.remote_mac,
-                   dst=self.pg0.local_mac) /
-             IPv6(src="1::1", dst="DEAD:BEEF::1") /
-             UDP(sport=1234, dport=1234))
+        p = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IPv6(src="1::1", dst="DEAD:BEEF::1")
+            / UDP(sport=1234, dport=1234)
+        )
 
 
-        p_reply = (IP(src=self.pg0.local_ip4, dst="8.8.8.8",
-                      proto='ipv6') /
-                   IPv6(src='1::1', dst='DEAD:BEEF::1', nh='UDP'))
+        p_reply = IP(src=self.pg0.local_ip4, dst="8.8.8.8", proto="ipv6") / IPv6(
+            src="1::1", dst="DEAD:BEEF::1", nh="UDP"
+        )
 
         rx = self.send_and_expect(self.pg0, p * 10, self.pg1)
         for p in rx:
             self.validate_6in4(p, p_reply)
 
         # Via recursive route 4 -> 6 (Security check must be disabled)
 
         rx = self.send_and_expect(self.pg0, p * 10, self.pg1)
         for p in rx:
             self.validate_6in4(p, p_reply)
 
         # Via recursive route 4 -> 6 (Security check must be disabled)
-        p_ip6 = (IPv6(src="DEAD:BEEF::1", dst=self.pg1.remote_ip6) /
-                 UDP(sport=1234, dport=1234))
-        p = (Ether(src=self.pg0.remote_mac,
-                   dst=self.pg0.local_mac) /
-             IP(src="8.8.8.8", dst=self.pg0.local_ip4) /
-             p_ip6)
+        p_ip6 = IPv6(src="DEAD:BEEF::1", dst=self.pg1.remote_ip6) / UDP(
+            sport=1234, dport=1234
+        )
+        p = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src="8.8.8.8", dst=self.pg0.local_ip4)
+            / p_ip6
+        )
 
         p_reply = p_ip6
 
 
         p_reply = p_ip6
 
@@ -377,5 +419,5 @@ class Test6RD(VppTestCase):
         self.vapi.ipip_6rd_del_tunnel(self.tunnel_index)
 
 
         self.vapi.ipip_6rd_del_tunnel(self.tunnel_index)
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index ecefe15..3572d64 100644 (file)
@@ -16,19 +16,19 @@ from collections import namedtuple
 from vpp_papi import VppEnum
 
 
 from vpp_papi import VppEnum
 
 
-Tag = namedtuple('Tag', ['dot1', 'vlan'])
+Tag = namedtuple("Tag", ["dot1", "vlan"])
 DOT1AD = 0x88A8
 DOT1Q = 0x8100
 
 
 class TestSpan(VppTestCase):
 DOT1AD = 0x88A8
 DOT1Q = 0x8100
 
 
 class TestSpan(VppTestCase):
-    """ SPAN Test Case """
+    """SPAN Test Case"""
 
     @classmethod
     def setUpClass(cls):
         super(TestSpan, cls).setUpClass()
         # Test variables
 
     @classmethod
     def setUpClass(cls):
         super(TestSpan, cls).setUpClass()
         # Test variables
-        cls.pkts_per_burst = 257    # Number of packets per burst
+        cls.pkts_per_burst = 257  # Number of packets per burst
         # create 3 pg interfaces
         cls.create_pg_interfaces(range(3))
 
         # create 3 pg interfaces
         cls.create_pg_interfaces(range(3))
 
@@ -56,8 +56,9 @@ class TestSpan(VppTestCase):
 
     def setUp(self):
         super(TestSpan, self).setUp()
 
     def setUp(self):
         super(TestSpan, self).setUp()
-        self.vxlan = VppVxlanTunnel(self, src=self.pg2.local_ip4,
-                                    dst=self.pg2.remote_ip4, vni=1111)
+        self.vxlan = VppVxlanTunnel(
+            self, src=self.pg2.local_ip4, dst=self.pg2.remote_ip4, vni=1111
+        )
         self.vxlan.add_vpp_config()
         self.reset_packet_infos()
 
         self.vxlan.add_vpp_config()
         self.reset_packet_infos()
 
@@ -72,8 +73,9 @@ class TestSpan(VppTestCase):
         self.vapi.sw_interface_set_l2_xconnect(b, a, enable=is_add)
 
     def bridge(self, sw_if_index, is_add=1):
         self.vapi.sw_interface_set_l2_xconnect(b, a, enable=is_add)
 
     def bridge(self, sw_if_index, is_add=1):
-        self.vapi.sw_interface_set_l2_bridge(rx_sw_if_index=sw_if_index,
-                                             bd_id=self.bd_id, enable=is_add)
+        self.vapi.sw_interface_set_l2_bridge(
+            rx_sw_if_index=sw_if_index, bd_id=self.bd_id, enable=is_add
+        )
 
     def _remove_tag(self, packet, vlan, tag_type):
         self.assertEqual(packet.type, tag_type)
 
     def _remove_tag(self, packet, vlan, tag_type):
         self.assertEqual(packet.type, tag_type)
@@ -145,10 +147,12 @@ class TestSpan(VppTestCase):
         for i in range(0, self.pkts_per_burst):
             payload = "span test"
             size = packet_sizes[int((i / 2) % len(packet_sizes))]
         for i in range(0, self.pkts_per_burst):
             payload = "span test"
             size = packet_sizes[int((i / 2) % len(packet_sizes))]
-            p = (Ether(src=src_if.local_mac, dst=dst_mac) /
-                 IP(src=src_if.remote_ip4, dst=dst_if.remote_ip4) /
-                 UDP(sport=10000 + src_if.sw_if_index * 1000 + i, dport=1234) /
-                 Raw(payload))
+            p = (
+                Ether(src=src_if.local_mac, dst=dst_mac)
+                / IP(src=src_if.remote_ip4, dst=dst_if.remote_ip4)
+                / UDP(sport=10000 + src_if.sw_if_index * 1000 + i, dport=1234)
+                / Raw(payload)
+            )
             if do_dot1:
                 p = self.sub_if.add_dot1_layer(p)
             self.extend_packet(p, size)
             if do_dot1:
                 p = self.sub_if.add_dot1_layer(p)
             self.extend_packet(p, size)
@@ -156,9 +160,12 @@ class TestSpan(VppTestCase):
         return pkts
 
     def verify_capture(self, cap1, cap2):
         return pkts
 
     def verify_capture(self, cap1, cap2):
-        self.assertEqual(len(cap1), len(cap2),
-                         "Different number of sent and mirrored packets :"
-                         "%u != %u" % (len(cap1), len(cap2)))
+        self.assertEqual(
+            len(cap1),
+            len(cap2),
+            "Different number of sent and mirrored packets :"
+            "%u != %u" % (len(cap1), len(cap2)),
+        )
 
         pkts1 = [(pkt[Ether] / pkt[IP] / pkt[UDP]) for pkt in cap1]
         pkts2 = [(pkt[Ether] / pkt[IP] / pkt[UDP]) for pkt in cap2]
 
         pkts1 = [(pkt[Ether] / pkt[IP] / pkt[UDP]) for pkt in cap1]
         pkts2 = [(pkt[Ether] / pkt[IP] / pkt[UDP]) for pkt in cap2]
@@ -166,7 +173,7 @@ class TestSpan(VppTestCase):
         self.assertEqual(pkts1.sort(), pkts2.sort())
 
     def test_device_span(self):
         self.assertEqual(pkts1.sort(), pkts2.sort())
 
     def test_device_span(self):
-        """ SPAN device rx mirror """
+        """SPAN device rx mirror"""
 
         # Create bi-directional cross-connects between pg0 and pg1
         self.xconnect(self.pg0.sw_if_index, self.pg1.sw_if_index)
 
         # Create bi-directional cross-connects between pg0 and pg1
         self.xconnect(self.pg0.sw_if_index, self.pg1.sw_if_index)
@@ -176,7 +183,8 @@ class TestSpan(VppTestCase):
 
         # Enable SPAN on pg0 (mirrored to pg2)
         self.vapi.sw_interface_span_enable_disable(
 
         # Enable SPAN on pg0 (mirrored to pg2)
         self.vapi.sw_interface_span_enable_disable(
-            self.pg0.sw_if_index, self.pg2.sw_if_index)
+            self.pg0.sw_if_index, self.pg2.sw_if_index
+        )
 
         self.logger.info(self.vapi.ppcli("show interface span"))
         # Enable packet capturing and start packet sending
 
         self.logger.info(self.vapi.ppcli("show interface span"))
         # Enable packet capturing and start packet sending
@@ -190,13 +198,14 @@ class TestSpan(VppTestCase):
 
         # Disable SPAN on pg0 (mirrored to pg2)
         self.vapi.sw_interface_span_enable_disable(
 
         # Disable SPAN on pg0 (mirrored to pg2)
         self.vapi.sw_interface_span_enable_disable(
-            self.pg0.sw_if_index, self.pg2.sw_if_index, state=0)
+            self.pg0.sw_if_index, self.pg2.sw_if_index, state=0
+        )
         self.xconnect(self.pg0.sw_if_index, self.pg1.sw_if_index, is_add=0)
 
         self.verify_capture(pg1_pkts, pg2_pkts)
 
     def test_span_l2_rx(self):
         self.xconnect(self.pg0.sw_if_index, self.pg1.sw_if_index, is_add=0)
 
         self.verify_capture(pg1_pkts, pg2_pkts)
 
     def test_span_l2_rx(self):
-        """ SPAN l2 rx mirror """
+        """SPAN l2 rx mirror"""
 
         self.sub_if.admin_up()
 
 
         self.sub_if.admin_up()
 
@@ -204,13 +213,13 @@ class TestSpan(VppTestCase):
         # Create bi-directional cross-connects between pg0 subif and pg1
         self.xconnect(self.sub_if.sw_if_index, self.pg1.sw_if_index)
         # Create incoming packet streams for packet-generator interfaces
         # Create bi-directional cross-connects between pg0 subif and pg1
         self.xconnect(self.sub_if.sw_if_index, self.pg1.sw_if_index)
         # Create incoming packet streams for packet-generator interfaces
-        pkts = self.create_stream(
-            self.pg0, self.pg_if_packet_sizes, do_dot1=True)
+        pkts = self.create_stream(self.pg0, self.pg_if_packet_sizes, do_dot1=True)
         self.pg0.add_stream(pkts)
 
         # Enable SPAN on pg0 (mirrored to pg2)
         self.vapi.sw_interface_span_enable_disable(
         self.pg0.add_stream(pkts)
 
         # Enable SPAN on pg0 (mirrored to pg2)
         self.vapi.sw_interface_span_enable_disable(
-            self.sub_if.sw_if_index, self.pg2.sw_if_index, is_l2=1)
+            self.sub_if.sw_if_index, self.pg2.sw_if_index, is_l2=1
+        )
 
         self.logger.info(self.vapi.ppcli("show interface span"))
         # Enable packet capturing and start packet sending
 
         self.logger.info(self.vapi.ppcli("show interface span"))
         # Enable packet capturing and start packet sending
@@ -225,29 +234,29 @@ class TestSpan(VppTestCase):
 
         # Disable SPAN on pg0 (mirrored to pg2)
         self.vapi.sw_interface_span_enable_disable(
 
         # Disable SPAN on pg0 (mirrored to pg2)
         self.vapi.sw_interface_span_enable_disable(
-            self.sub_if.sw_if_index, self.pg2.sw_if_index, state=0, is_l2=1)
+            self.sub_if.sw_if_index, self.pg2.sw_if_index, state=0, is_l2=1
+        )
         self.xconnect(self.sub_if.sw_if_index, self.pg1.sw_if_index, is_add=0)
 
         self.verify_capture(pg1_pkts, pg2_pkts)
 
     def test_span_l2_rx_dst_vxlan(self):
         self.xconnect(self.sub_if.sw_if_index, self.pg1.sw_if_index, is_add=0)
 
         self.verify_capture(pg1_pkts, pg2_pkts)
 
     def test_span_l2_rx_dst_vxlan(self):
-        """ SPAN l2 rx mirror into vxlan """
+        """SPAN l2 rx mirror into vxlan"""
 
         self.sub_if.admin_up()
 
         self.sub_if.admin_up()
-        self.vapi.sw_interface_set_flags(self.vxlan.sw_if_index,
-                                         flags=1)
+        self.vapi.sw_interface_set_flags(self.vxlan.sw_if_index, flags=1)
 
         self.bridge(self.vxlan.sw_if_index, is_add=1)
         # Create bi-directional cross-connects between pg0 subif and pg1
         self.xconnect(self.sub_if.sw_if_index, self.pg1.sw_if_index)
         # Create incoming packet streams for packet-generator interfaces
 
         self.bridge(self.vxlan.sw_if_index, is_add=1)
         # Create bi-directional cross-connects between pg0 subif and pg1
         self.xconnect(self.sub_if.sw_if_index, self.pg1.sw_if_index)
         # Create incoming packet streams for packet-generator interfaces
-        pkts = self.create_stream(
-            self.pg0, self.pg_if_packet_sizes, do_dot1=True)
+        pkts = self.create_stream(self.pg0, self.pg_if_packet_sizes, do_dot1=True)
         self.pg0.add_stream(pkts)
 
         # Enable SPAN on pg0 sub if (mirrored to vxlan)
         self.vapi.sw_interface_span_enable_disable(
         self.pg0.add_stream(pkts)
 
         # Enable SPAN on pg0 sub if (mirrored to vxlan)
         self.vapi.sw_interface_span_enable_disable(
-            self.sub_if.sw_if_index, self.vxlan.sw_if_index, is_l2=1)
+            self.sub_if.sw_if_index, self.vxlan.sw_if_index, is_l2=1
+        )
 
         self.logger.info(self.vapi.ppcli("show interface span"))
         # Enable packet capturing and start packet sending
 
         self.logger.info(self.vapi.ppcli("show interface span"))
         # Enable packet capturing and start packet sending
@@ -262,20 +271,23 @@ class TestSpan(VppTestCase):
         self.bridge(self.vxlan.sw_if_index, is_add=0)
         # Disable SPAN on pg0 sub if (mirrored to vxlan)
         self.vapi.sw_interface_span_enable_disable(
         self.bridge(self.vxlan.sw_if_index, is_add=0)
         # Disable SPAN on pg0 sub if (mirrored to vxlan)
         self.vapi.sw_interface_span_enable_disable(
-            self.sub_if.sw_if_index, self.vxlan.sw_if_index, state=0, is_l2=1)
+            self.sub_if.sw_if_index, self.vxlan.sw_if_index, state=0, is_l2=1
+        )
         self.xconnect(self.sub_if.sw_if_index, self.pg1.sw_if_index, is_add=0)
         self.verify_capture(pg1_pkts, pg2_pkts)
 
     def test_span_l2_rx_dst_gre_erspan(self):
         self.xconnect(self.sub_if.sw_if_index, self.pg1.sw_if_index, is_add=0)
         self.verify_capture(pg1_pkts, pg2_pkts)
 
     def test_span_l2_rx_dst_gre_erspan(self):
-        """ SPAN l2 rx mirror into gre-erspan """
+        """SPAN l2 rx mirror into gre-erspan"""
 
         self.sub_if.admin_up()
 
 
         self.sub_if.admin_up()
 
-        gre_if = VppGreInterface(self, self.pg2.local_ip4,
-                                 self.pg2.remote_ip4,
-                                 session=543,
-                                 type=(VppEnum.vl_api_gre_tunnel_type_t.
-                                       GRE_API_TUNNEL_TYPE_ERSPAN))
+        gre_if = VppGreInterface(
+            self,
+            self.pg2.local_ip4,
+            self.pg2.remote_ip4,
+            session=543,
+            type=(VppEnum.vl_api_gre_tunnel_type_t.GRE_API_TUNNEL_TYPE_ERSPAN),
+        )
 
         gre_if.add_vpp_config()
         gre_if.admin_up()
 
         gre_if.add_vpp_config()
         gre_if.admin_up()
@@ -285,13 +297,13 @@ class TestSpan(VppTestCase):
         self.xconnect(self.sub_if.sw_if_index, self.pg1.sw_if_index, is_add=1)
 
         # Create incoming packet streams for packet-generator interfaces
         self.xconnect(self.sub_if.sw_if_index, self.pg1.sw_if_index, is_add=1)
 
         # Create incoming packet streams for packet-generator interfaces
-        pkts = self.create_stream(
-            self.pg0, self.pg_if_packet_sizes, do_dot1=True)
+        pkts = self.create_stream(self.pg0, self.pg_if_packet_sizes, do_dot1=True)
         self.pg0.add_stream(pkts)
 
         # Enable SPAN on pg0 sub if (mirrored to gre-erspan)
         self.vapi.sw_interface_span_enable_disable(
         self.pg0.add_stream(pkts)
 
         # Enable SPAN on pg0 sub if (mirrored to gre-erspan)
         self.vapi.sw_interface_span_enable_disable(
-            self.sub_if.sw_if_index, gre_if.sw_if_index, is_l2=1)
+            self.sub_if.sw_if_index, gre_if.sw_if_index, is_l2=1
+        )
 
         # Enable packet capturing and start packet sending
         self.pg_enable_capture(self.pg_interfaces)
 
         # Enable packet capturing and start packet sending
         self.pg_enable_capture(self.pg_interfaces)
@@ -302,28 +314,33 @@ class TestSpan(VppTestCase):
         pg1_pkts = self.pg1.get_capture(n_pkts)
         pg2_pkts = self.pg2.get_capture(n_pkts)
 
         pg1_pkts = self.pg1.get_capture(n_pkts)
         pg2_pkts = self.pg2.get_capture(n_pkts)
 
-        def decap(p): return self.decap_erspan(p, session=543)
+        def decap(p):
+            return self.decap_erspan(p, session=543)
+
         pg2_decaped = [decap(p) for p in pg2_pkts]
 
         self.bridge(gre_if.sw_if_index, is_add=0)
 
         # Disable SPAN on pg0 sub if
         self.vapi.sw_interface_span_enable_disable(
         pg2_decaped = [decap(p) for p in pg2_pkts]
 
         self.bridge(gre_if.sw_if_index, is_add=0)
 
         # Disable SPAN on pg0 sub if
         self.vapi.sw_interface_span_enable_disable(
-            self.sub_if.sw_if_index, gre_if.sw_if_index, state=0, is_l2=1)
+            self.sub_if.sw_if_index, gre_if.sw_if_index, state=0, is_l2=1
+        )
         gre_if.remove_vpp_config()
         self.xconnect(self.sub_if.sw_if_index, self.pg1.sw_if_index, is_add=0)
 
         self.verify_capture(pg1_pkts, pg2_decaped)
 
     def test_span_l2_rx_dst_gre_subif_vtr(self):
         gre_if.remove_vpp_config()
         self.xconnect(self.sub_if.sw_if_index, self.pg1.sw_if_index, is_add=0)
 
         self.verify_capture(pg1_pkts, pg2_decaped)
 
     def test_span_l2_rx_dst_gre_subif_vtr(self):
-        """ SPAN l2 rx mirror into gre-subif+vtr """
+        """SPAN l2 rx mirror into gre-subif+vtr"""
 
         self.sub_if.admin_up()
 
 
         self.sub_if.admin_up()
 
-        gre_if = VppGreInterface(self, self.pg2.local_ip4,
-                                 self.pg2.remote_ip4,
-                                 type=(VppEnum.vl_api_gre_tunnel_type_t.
-                                       GRE_API_TUNNEL_TYPE_TEB))
+        gre_if = VppGreInterface(
+            self,
+            self.pg2.local_ip4,
+            self.pg2.remote_ip4,
+            type=(VppEnum.vl_api_gre_tunnel_type_t.GRE_API_TUNNEL_TYPE_TEB),
+        )
 
         gre_if.add_vpp_config()
         gre_if.admin_up()
 
         gre_if.add_vpp_config()
         gre_if.admin_up()
@@ -337,13 +354,13 @@ class TestSpan(VppTestCase):
         self.xconnect(self.sub_if.sw_if_index, self.pg1.sw_if_index, is_add=1)
 
         # Create incoming packet streams for packet-generator interfaces
         self.xconnect(self.sub_if.sw_if_index, self.pg1.sw_if_index, is_add=1)
 
         # Create incoming packet streams for packet-generator interfaces
-        pkts = self.create_stream(
-            self.pg0, self.pg_if_packet_sizes, do_dot1=True)
+        pkts = self.create_stream(self.pg0, self.pg_if_packet_sizes, do_dot1=True)
         self.pg0.add_stream(pkts)
 
         # Enable SPAN on pg0 sub if (mirrored to gre sub if)
         self.vapi.sw_interface_span_enable_disable(
         self.pg0.add_stream(pkts)
 
         # Enable SPAN on pg0 sub if (mirrored to gre sub if)
         self.vapi.sw_interface_span_enable_disable(
-            self.sub_if.sw_if_index, gre_sub_if.sw_if_index, is_l2=1)
+            self.sub_if.sw_if_index, gre_sub_if.sw_if_index, is_l2=1
+        )
 
         # Enable packet capturing and start packet sending
         self.pg_enable_capture(self.pg_interfaces)
 
         # Enable packet capturing and start packet sending
         self.pg_enable_capture(self.pg_interfaces)
@@ -354,22 +371,24 @@ class TestSpan(VppTestCase):
         pg1_pkts = self.pg1.get_capture(n_pkts)
         pg2_pkts = self.pg2.get_capture(n_pkts)
 
         pg1_pkts = self.pg1.get_capture(n_pkts)
         pg2_pkts = self.pg2.get_capture(n_pkts)
 
-        def decap(p): return self.remove_tags(
-            self.decap_gre(p), [Tag(dot1=DOT1Q, vlan=500)])
+        def decap(p):
+            return self.remove_tags(self.decap_gre(p), [Tag(dot1=DOT1Q, vlan=500)])
+
         pg2_decaped = [decap(p) for p in pg2_pkts]
 
         self.bridge(gre_sub_if.sw_if_index, is_add=0)
 
         # Disable SPAN on pg0 sub if
         self.vapi.sw_interface_span_enable_disable(
         pg2_decaped = [decap(p) for p in pg2_pkts]
 
         self.bridge(gre_sub_if.sw_if_index, is_add=0)
 
         # Disable SPAN on pg0 sub if
         self.vapi.sw_interface_span_enable_disable(
-            self.sub_if.sw_if_index, gre_sub_if.sw_if_index, state=0, is_l2=1)
+            self.sub_if.sw_if_index, gre_sub_if.sw_if_index, state=0, is_l2=1
+        )
         gre_if.remove_vpp_config()
         self.xconnect(self.sub_if.sw_if_index, self.pg1.sw_if_index, is_add=0)
 
         self.verify_capture(pg1_pkts, pg2_decaped)
 
     def test_span_l2_rx_dst_1q_vtr(self):
         gre_if.remove_vpp_config()
         self.xconnect(self.sub_if.sw_if_index, self.pg1.sw_if_index, is_add=0)
 
         self.verify_capture(pg1_pkts, pg2_decaped)
 
     def test_span_l2_rx_dst_1q_vtr(self):
-        """ SPAN l2 rx mirror into 1q subif+vtr """
+        """SPAN l2 rx mirror into 1q subif+vtr"""
 
         self.sub_if.admin_up()
         self.vlan_sub_if.admin_up()
 
         self.sub_if.admin_up()
         self.vlan_sub_if.admin_up()
@@ -379,12 +398,12 @@ class TestSpan(VppTestCase):
         self.xconnect(self.sub_if.sw_if_index, self.pg1.sw_if_index, is_add=1)
 
         # Create incoming packet streams for packet-generator interfaces
         self.xconnect(self.sub_if.sw_if_index, self.pg1.sw_if_index, is_add=1)
 
         # Create incoming packet streams for packet-generator interfaces
-        pkts = self.create_stream(
-            self.pg0, self.pg_if_packet_sizes, do_dot1=True)
+        pkts = self.create_stream(self.pg0, self.pg_if_packet_sizes, do_dot1=True)
         self.pg0.add_stream(pkts)
 
         self.vapi.sw_interface_span_enable_disable(
         self.pg0.add_stream(pkts)
 
         self.vapi.sw_interface_span_enable_disable(
-            self.sub_if.sw_if_index, self.vlan_sub_if.sw_if_index, is_l2=1)
+            self.sub_if.sw_if_index, self.vlan_sub_if.sw_if_index, is_l2=1
+        )
 
         # Enable packet capturing and start packet sending
         self.pg_enable_capture(self.pg_interfaces)
 
         # Enable packet capturing and start packet sending
         self.pg_enable_capture(self.pg_interfaces)
@@ -394,20 +413,21 @@ class TestSpan(VppTestCase):
         n_pkts = len(pkts)
         pg1_pkts = self.pg1.get_capture(n_pkts)
         pg2_pkts = self.pg2.get_capture(n_pkts)
         n_pkts = len(pkts)
         pg1_pkts = self.pg1.get_capture(n_pkts)
         pg2_pkts = self.pg2.get_capture(n_pkts)
-        pg2_untagged = [self.remove_tags(p, [Tag(dot1=DOT1Q, vlan=300)])
-                        for p in pg2_pkts]
+        pg2_untagged = [
+            self.remove_tags(p, [Tag(dot1=DOT1Q, vlan=300)]) for p in pg2_pkts
+        ]
 
         self.bridge(self.vlan_sub_if.sw_if_index, is_add=0)
         # Disable SPAN on pg0 sub if (mirrored to vxlan)
         self.vapi.sw_interface_span_enable_disable(
 
         self.bridge(self.vlan_sub_if.sw_if_index, is_add=0)
         # Disable SPAN on pg0 sub if (mirrored to vxlan)
         self.vapi.sw_interface_span_enable_disable(
-            self.sub_if.sw_if_index, self.vlan_sub_if.sw_if_index, state=0,
-            is_l2=1)
+            self.sub_if.sw_if_index, self.vlan_sub_if.sw_if_index, state=0, is_l2=1
+        )
         self.xconnect(self.sub_if.sw_if_index, self.pg1.sw_if_index, is_add=0)
 
         self.verify_capture(pg1_pkts, pg2_untagged)
 
     def test_span_l2_rx_dst_1ad_vtr(self):
         self.xconnect(self.sub_if.sw_if_index, self.pg1.sw_if_index, is_add=0)
 
         self.verify_capture(pg1_pkts, pg2_untagged)
 
     def test_span_l2_rx_dst_1ad_vtr(self):
-        """ SPAN l2 rx mirror into 1ad subif+vtr """
+        """SPAN l2 rx mirror into 1ad subif+vtr"""
 
         self.sub_if.admin_up()
         self.qinq_sub_if.admin_up()
 
         self.sub_if.admin_up()
         self.qinq_sub_if.admin_up()
@@ -417,12 +437,12 @@ class TestSpan(VppTestCase):
         self.xconnect(self.sub_if.sw_if_index, self.pg1.sw_if_index, is_add=1)
 
         # Create incoming packet streams for packet-generator interfaces
         self.xconnect(self.sub_if.sw_if_index, self.pg1.sw_if_index, is_add=1)
 
         # Create incoming packet streams for packet-generator interfaces
-        pkts = self.create_stream(
-            self.pg0, self.pg_if_packet_sizes, do_dot1=True)
+        pkts = self.create_stream(self.pg0, self.pg_if_packet_sizes, do_dot1=True)
         self.pg0.add_stream(pkts)
 
         self.vapi.sw_interface_span_enable_disable(
         self.pg0.add_stream(pkts)
 
         self.vapi.sw_interface_span_enable_disable(
-            self.sub_if.sw_if_index, self.qinq_sub_if.sw_if_index, is_l2=1)
+            self.sub_if.sw_if_index, self.qinq_sub_if.sw_if_index, is_l2=1
+        )
 
         # Enable packet capturing and start packet sending
         self.pg_enable_capture(self.pg_interfaces)
 
         # Enable packet capturing and start packet sending
         self.pg_enable_capture(self.pg_interfaces)
@@ -432,34 +452,35 @@ class TestSpan(VppTestCase):
         n_pkts = len(pkts)
         pg1_pkts = self.pg1.get_capture(n_pkts)
         pg2_pkts = self.pg2.get_capture(n_pkts)
         n_pkts = len(pkts)
         pg1_pkts = self.pg1.get_capture(n_pkts)
         pg2_pkts = self.pg2.get_capture(n_pkts)
-        pg2_untagged = [self.remove_tags(p, [Tag(dot1=DOT1AD, vlan=400),
-                                             Tag(dot1=DOT1Q, vlan=500)])
-                        for p in pg2_pkts]
+        pg2_untagged = [
+            self.remove_tags(p, [Tag(dot1=DOT1AD, vlan=400), Tag(dot1=DOT1Q, vlan=500)])
+            for p in pg2_pkts
+        ]
 
         self.bridge(self.qinq_sub_if.sw_if_index, is_add=0)
         # Disable SPAN on pg0 sub if (mirrored to vxlan)
         self.vapi.sw_interface_span_enable_disable(
 
         self.bridge(self.qinq_sub_if.sw_if_index, is_add=0)
         # Disable SPAN on pg0 sub if (mirrored to vxlan)
         self.vapi.sw_interface_span_enable_disable(
-            self.sub_if.sw_if_index, self.qinq_sub_if.sw_if_index, state=0,
-            is_l2=1)
+            self.sub_if.sw_if_index, self.qinq_sub_if.sw_if_index, state=0, is_l2=1
+        )
         self.xconnect(self.sub_if.sw_if_index, self.pg1.sw_if_index, is_add=0)
 
         self.verify_capture(pg1_pkts, pg2_untagged)
 
     def test_l2_tx_span(self):
         self.xconnect(self.sub_if.sw_if_index, self.pg1.sw_if_index, is_add=0)
 
         self.verify_capture(pg1_pkts, pg2_untagged)
 
     def test_l2_tx_span(self):
-        """ SPAN l2 tx mirror """
+        """SPAN l2 tx mirror"""
 
         self.sub_if.admin_up()
         self.bridge(self.pg2.sw_if_index)
         # Create bi-directional cross-connects between pg0 and pg1
         self.xconnect(self.sub_if.sw_if_index, self.pg1.sw_if_index)
         # Create incoming packet streams for packet-generator interfaces
 
         self.sub_if.admin_up()
         self.bridge(self.pg2.sw_if_index)
         # Create bi-directional cross-connects between pg0 and pg1
         self.xconnect(self.sub_if.sw_if_index, self.pg1.sw_if_index)
         # Create incoming packet streams for packet-generator interfaces
-        pkts = self.create_stream(
-            self.pg0, self.pg_if_packet_sizes, do_dot1=True)
+        pkts = self.create_stream(self.pg0, self.pg_if_packet_sizes, do_dot1=True)
         self.pg0.add_stream(pkts)
 
         # Enable SPAN on pg1 (mirrored to pg2)
         self.vapi.sw_interface_span_enable_disable(
         self.pg0.add_stream(pkts)
 
         # Enable SPAN on pg1 (mirrored to pg2)
         self.vapi.sw_interface_span_enable_disable(
-            self.pg1.sw_if_index, self.pg2.sw_if_index, is_l2=1, state=2)
+            self.pg1.sw_if_index, self.pg2.sw_if_index, is_l2=1, state=2
+        )
 
         self.logger.info(self.vapi.ppcli("show interface span"))
         # Enable packet capturing and start packet sending
 
         self.logger.info(self.vapi.ppcli("show interface span"))
         # Enable packet capturing and start packet sending
@@ -473,13 +494,14 @@ class TestSpan(VppTestCase):
         self.bridge(self.pg2.sw_if_index, is_add=0)
         # Disable SPAN on pg0 (mirrored to pg2)
         self.vapi.sw_interface_span_enable_disable(
         self.bridge(self.pg2.sw_if_index, is_add=0)
         # Disable SPAN on pg0 (mirrored to pg2)
         self.vapi.sw_interface_span_enable_disable(
-            self.pg1.sw_if_index, self.pg2.sw_if_index, state=0, is_l2=1)
+            self.pg1.sw_if_index, self.pg2.sw_if_index, state=0, is_l2=1
+        )
         self.xconnect(self.sub_if.sw_if_index, self.pg1.sw_if_index, is_add=0)
 
         self.verify_capture(pg1_pkts, pg2_pkts)
 
     def test_l2_rx_tx_span(self):
         self.xconnect(self.sub_if.sw_if_index, self.pg1.sw_if_index, is_add=0)
 
         self.verify_capture(pg1_pkts, pg2_pkts)
 
     def test_l2_rx_tx_span(self):
-        """ SPAN l2 rx tx mirror """
+        """SPAN l2 rx tx mirror"""
 
         self.sub_if.admin_up()
         self.bridge(self.pg2.sw_if_index)
 
         self.sub_if.admin_up()
         self.bridge(self.pg2.sw_if_index)
@@ -487,16 +509,15 @@ class TestSpan(VppTestCase):
         self.xconnect(self.sub_if.sw_if_index, self.pg1.sw_if_index)
 
         # Create incoming packet streams for packet-generator interfaces
         self.xconnect(self.sub_if.sw_if_index, self.pg1.sw_if_index)
 
         # Create incoming packet streams for packet-generator interfaces
-        pg0_pkts = self.create_stream(
-            self.pg0, self.pg_if_packet_sizes, do_dot1=True)
+        pg0_pkts = self.create_stream(self.pg0, self.pg_if_packet_sizes, do_dot1=True)
         self.pg0.add_stream(pg0_pkts)
         self.pg0.add_stream(pg0_pkts)
-        pg1_pkts = self.create_stream(
-            self.pg1, self.pg_if_packet_sizes, do_dot1=False)
+        pg1_pkts = self.create_stream(self.pg1, self.pg_if_packet_sizes, do_dot1=False)
         self.pg1.add_stream(pg1_pkts)
 
         # Enable SPAN on pg0 (mirrored to pg2)
         self.vapi.sw_interface_span_enable_disable(
         self.pg1.add_stream(pg1_pkts)
 
         # Enable SPAN on pg0 (mirrored to pg2)
         self.vapi.sw_interface_span_enable_disable(
-            self.sub_if.sw_if_index, self.pg2.sw_if_index, is_l2=1, state=3)
+            self.sub_if.sw_if_index, self.pg2.sw_if_index, is_l2=1, state=3
+        )
         self.logger.info(self.vapi.ppcli("show interface span"))
 
         # Enable packet capturing and start packet sending
         self.logger.info(self.vapi.ppcli("show interface span"))
 
         # Enable packet capturing and start packet sending
@@ -515,34 +536,40 @@ class TestSpan(VppTestCase):
         self.bridge(self.pg2.sw_if_index, is_add=0)
         # Disable SPAN on pg0 (mirrored to pg2)
         self.vapi.sw_interface_span_enable_disable(
         self.bridge(self.pg2.sw_if_index, is_add=0)
         # Disable SPAN on pg0 (mirrored to pg2)
         self.vapi.sw_interface_span_enable_disable(
-            self.sub_if.sw_if_index, self.pg2.sw_if_index, state=0, is_l2=1)
+            self.sub_if.sw_if_index, self.pg2.sw_if_index, state=0, is_l2=1
+        )
         self.xconnect(self.sub_if.sw_if_index, self.pg1.sw_if_index, is_add=0)
 
         self.verify_capture(pg0_pkts + pg1_pkts, pg2_pkts)
 
     def test_l2_bcast_mirror(self):
         self.xconnect(self.sub_if.sw_if_index, self.pg1.sw_if_index, is_add=0)
 
         self.verify_capture(pg0_pkts + pg1_pkts, pg2_pkts)
 
     def test_l2_bcast_mirror(self):
-        """ SPAN l2 broadcast mirror """
+        """SPAN l2 broadcast mirror"""
 
         self.sub_if.admin_up()
         self.bridge(self.pg2.sw_if_index)
 
         # Create bi-directional cross-connects between pg0 and pg1
         self.vapi.sw_interface_set_l2_bridge(
 
         self.sub_if.admin_up()
         self.bridge(self.pg2.sw_if_index)
 
         # Create bi-directional cross-connects between pg0 and pg1
         self.vapi.sw_interface_set_l2_bridge(
-            rx_sw_if_index=self.sub_if.sw_if_index, bd_id=99, enable=1)
+            rx_sw_if_index=self.sub_if.sw_if_index, bd_id=99, enable=1
+        )
         self.vapi.sw_interface_set_l2_bridge(
         self.vapi.sw_interface_set_l2_bridge(
-            rx_sw_if_index=self.pg1.sw_if_index, bd_id=99, enable=1)
+            rx_sw_if_index=self.pg1.sw_if_index, bd_id=99, enable=1
+        )
 
         # Create incoming packet streams for packet-generator interfaces
         pg0_pkts = self.create_stream(
 
         # Create incoming packet streams for packet-generator interfaces
         pg0_pkts = self.create_stream(
-            self.pg0, self.pg_if_packet_sizes, do_dot1=True, bcast=True)
+            self.pg0, self.pg_if_packet_sizes, do_dot1=True, bcast=True
+        )
         self.pg0.add_stream(pg0_pkts)
         pg1_pkts = self.create_stream(
         self.pg0.add_stream(pg0_pkts)
         pg1_pkts = self.create_stream(
-            self.pg1, self.pg_if_packet_sizes, do_dot1=False, bcast=True)
+            self.pg1, self.pg_if_packet_sizes, do_dot1=False, bcast=True
+        )
         self.pg1.add_stream(pg1_pkts)
 
         # Enable SPAN on pg0 (mirrored to pg2)
         self.vapi.sw_interface_span_enable_disable(
         self.pg1.add_stream(pg1_pkts)
 
         # Enable SPAN on pg0 (mirrored to pg2)
         self.vapi.sw_interface_span_enable_disable(
-            self.sub_if.sw_if_index, self.pg2.sw_if_index, is_l2=1, state=3)
+            self.sub_if.sw_if_index, self.pg2.sw_if_index, is_l2=1, state=3
+        )
         self.logger.info(self.vapi.ppcli("show interface span"))
 
         # Enable packet capturing and start packet sending
         self.logger.info(self.vapi.ppcli("show interface span"))
 
         # Enable packet capturing and start packet sending
@@ -560,15 +587,18 @@ class TestSpan(VppTestCase):
 
         self.bridge(self.pg2.sw_if_index, is_add=0)
         self.vapi.sw_interface_set_l2_bridge(
 
         self.bridge(self.pg2.sw_if_index, is_add=0)
         self.vapi.sw_interface_set_l2_bridge(
-            rx_sw_if_index=self.sub_if.sw_if_index, bd_id=99, enable=0)
+            rx_sw_if_index=self.sub_if.sw_if_index, bd_id=99, enable=0
+        )
         self.vapi.sw_interface_set_l2_bridge(
         self.vapi.sw_interface_set_l2_bridge(
-            rx_sw_if_index=self.pg1.sw_if_index, bd_id=99, enable=0)
+            rx_sw_if_index=self.pg1.sw_if_index, bd_id=99, enable=0
+        )
         # Disable SPAN on pg0 (mirrored to pg2)
         self.vapi.sw_interface_span_enable_disable(
         # Disable SPAN on pg0 (mirrored to pg2)
         self.vapi.sw_interface_span_enable_disable(
-            self.sub_if.sw_if_index, self.pg2.sw_if_index, state=0, is_l2=1)
+            self.sub_if.sw_if_index, self.pg2.sw_if_index, state=0, is_l2=1
+        )
 
         self.verify_capture(pg0_pkts + pg1_pkts, pg2_pkts)
 
 
 
         self.verify_capture(pg0_pkts + pg1_pkts, pg2_pkts)
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index a683fae..6b1cb28 100644 (file)
@@ -7,7 +7,7 @@ from vpp_ip_route import VppIpTable, VppIpRoute, VppRoutePath
 
 
 class TestSparseVec(VppTestCase):
 
 
 class TestSparseVec(VppTestCase):
-    """ SparseVec Test Cases """
+    """SparseVec Test Cases"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -24,11 +24,12 @@ class TestSparseVec(VppTestCase):
         super(TestSparseVec, self).tearDown()
 
     def test_string_unittest(self):
         super(TestSparseVec, self).tearDown()
 
     def test_string_unittest(self):
-        """ SparseVec unit tests """
+        """SparseVec unit tests"""
         error = self.vapi.cli("test sparse_vec")
         if error.find("failed") != -1:
             self.logger.critical("FAILURE in the sparse_vec test")
         self.assertNotIn("failed", error)
 
         error = self.vapi.cli("test sparse_vec")
         if error.find("failed") != -1:
             self.logger.critical("FAILURE in the sparse_vec test")
         self.assertNotIn("failed", error)
 
-if __name__ == '__main__':
+
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index b9abeae..bac3eff 100644 (file)
@@ -5,8 +5,14 @@ import socket
 
 from framework import VppTestCase, VppTestRunner
 from vpp_ip import DpoProto
 
 from framework import VppTestCase, VppTestRunner
 from vpp_ip import DpoProto
-from vpp_ip_route import VppIpRoute, VppRoutePath, VppMplsRoute, \
-    VppIpTable, VppMplsTable, VppMplsLabel
+from vpp_ip_route import (
+    VppIpRoute,
+    VppRoutePath,
+    VppMplsRoute,
+    VppIpTable,
+    VppMplsTable,
+    VppMplsLabel,
+)
 from vpp_mpls_tunnel_interface import VppMPLSTunnelInterface
 
 from scapy.packet import Raw
 from vpp_mpls_tunnel_interface import VppMPLSTunnelInterface
 
 from scapy.packet import Raw
@@ -47,7 +53,7 @@ def verify_mpls_stack(tst, rx, mpls_labels):
 
 
 class TestSRMPLS(VppTestCase):
 
 
 class TestSRMPLS(VppTestCase):
-    """ SR-MPLS Test Case """
+    """SR-MPLS Test Case"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -94,17 +100,19 @@ class TestSRMPLS(VppTestCase):
         for i in range(0, 257):
             info = self.create_packet_info(src_if, src_if)
             payload = self.info_to_payload(info)
         for i in range(0, 257):
             info = self.create_packet_info(src_if, src_if)
             payload = self.info_to_payload(info)
-            p = (Ether(dst=src_if.local_mac, src=src_if.remote_mac) /
-                 IP(src=src_if.remote_ip4, dst=dst_ip,
-                    ttl=ip_ttl, tos=ip_dscp) /
-                 UDP(sport=1234, dport=1234) /
-                 Raw(payload))
+            p = (
+                Ether(dst=src_if.local_mac, src=src_if.remote_mac)
+                / IP(src=src_if.remote_ip4, dst=dst_ip, ttl=ip_ttl, tos=ip_dscp)
+                / UDP(sport=1234, dport=1234)
+                / Raw(payload)
+            )
             info.data = p.copy()
             pkts.append(p)
         return pkts
 
             info.data = p.copy()
             pkts.append(p)
         return pkts
 
-    def verify_capture_labelled_ip4(self, src_if, capture, sent,
-                                    mpls_labels, ip_ttl=None):
+    def verify_capture_labelled_ip4(
+        self, src_if, capture, sent, mpls_labels, ip_ttl=None
+    ):
         try:
             capture = verify_filter(capture, sent)
 
         try:
             capture = verify_filter(capture, sent)
 
@@ -152,15 +160,21 @@ class TestSRMPLS(VppTestCase):
             raise
 
     def test_sr_mpls(self):
             raise
 
     def test_sr_mpls(self):
-        """ SR MPLS """
+        """SR MPLS"""
 
         #
         # A simple MPLS xconnect - neos label in label out
         #
 
         #
         # A simple MPLS xconnect - neos label in label out
         #
-        route_32_eos = VppMplsRoute(self, 32, 0,
-                                    [VppRoutePath(self.pg0.remote_ip4,
-                                                  self.pg0.sw_if_index,
-                                                  labels=[VppMplsLabel(32)])])
+        route_32_eos = VppMplsRoute(
+            self,
+            32,
+            0,
+            [
+                VppRoutePath(
+                    self.pg0.remote_ip4, self.pg0.sw_if_index, labels=[VppMplsLabel(32)]
+                )
+            ],
+        )
         route_32_eos.add_vpp_config()
 
         #
         route_32_eos.add_vpp_config()
 
         #
@@ -171,32 +185,38 @@ class TestSRMPLS(VppTestCase):
         #
         # A labeled IP route that resolves thru the binding SID
         #
         #
         # A labeled IP route that resolves thru the binding SID
         #
-        ip_10_0_0_1 = VppIpRoute(self, "10.0.0.1", 32,
-                                 [VppRoutePath("0.0.0.0",
-                                               0xffffffff,
-                                               nh_via_label=999,
-                                               labels=[VppMplsLabel(55)])])
+        ip_10_0_0_1 = VppIpRoute(
+            self,
+            "10.0.0.1",
+            32,
+            [
+                VppRoutePath(
+                    "0.0.0.0", 0xFFFFFFFF, nh_via_label=999, labels=[VppMplsLabel(55)]
+                )
+            ],
+        )
         ip_10_0_0_1.add_vpp_config()
 
         tx = self.create_stream_ip4(self.pg1, "10.0.0.1")
         rx = self.send_and_expect(self.pg1, tx, self.pg0)
         ip_10_0_0_1.add_vpp_config()
 
         tx = self.create_stream_ip4(self.pg1, "10.0.0.1")
         rx = self.send_and_expect(self.pg1, tx, self.pg0)
-        self.verify_capture_labelled_ip4(self.pg0, rx, tx,
-                                         [VppMplsLabel(32),
-                                          VppMplsLabel(55)])
+        self.verify_capture_labelled_ip4(
+            self.pg0, rx, tx, [VppMplsLabel(32), VppMplsLabel(55)]
+        )
 
         #
         # An unlabeled IP route that resolves thru the binding SID
         #
 
         #
         # An unlabeled IP route that resolves thru the binding SID
         #
-        ip_10_0_0_1 = VppIpRoute(self, "10.0.0.2", 32,
-                                 [VppRoutePath("0.0.0.0",
-                                               0xffffffff,
-                                               nh_via_label=999)])
+        ip_10_0_0_1 = VppIpRoute(
+            self,
+            "10.0.0.2",
+            32,
+            [VppRoutePath("0.0.0.0", 0xFFFFFFFF, nh_via_label=999)],
+        )
         ip_10_0_0_1.add_vpp_config()
 
         tx = self.create_stream_ip4(self.pg1, "10.0.0.2")
         rx = self.send_and_expect(self.pg1, tx, self.pg0)
         ip_10_0_0_1.add_vpp_config()
 
         tx = self.create_stream_ip4(self.pg1, "10.0.0.2")
         rx = self.send_and_expect(self.pg1, tx, self.pg0)
-        self.verify_capture_labelled_ip4(self.pg0, rx, tx,
-                                         [VppMplsLabel(32)])
+        self.verify_capture_labelled_ip4(self.pg0, rx, tx, [VppMplsLabel(32)])
 
         self.vapi.sr_mpls_policy_del(999)
 
 
         self.vapi.sr_mpls_policy_del(999)
 
@@ -207,71 +227,89 @@ class TestSRMPLS(VppTestCase):
 
         tx = self.create_stream_ip4(self.pg1, "10.0.0.1")
         rx = self.send_and_expect(self.pg1, tx, self.pg0)
 
         tx = self.create_stream_ip4(self.pg1, "10.0.0.1")
         rx = self.send_and_expect(self.pg1, tx, self.pg0)
-        self.verify_capture_labelled_ip4(self.pg0, rx, tx,
-                                         [VppMplsLabel(32),
-                                          VppMplsLabel(33),
-                                          VppMplsLabel(34),
-                                          VppMplsLabel(55)])
+        self.verify_capture_labelled_ip4(
+            self.pg0,
+            rx,
+            tx,
+            [VppMplsLabel(32), VppMplsLabel(33), VppMplsLabel(34), VppMplsLabel(55)],
+        )
         tx = self.create_stream_ip4(self.pg1, "10.0.0.2")
         rx = self.send_and_expect(self.pg1, tx, self.pg0)
         tx = self.create_stream_ip4(self.pg1, "10.0.0.2")
         rx = self.send_and_expect(self.pg1, tx, self.pg0)
-        self.verify_capture_labelled_ip4(self.pg0, rx, tx,
-                                         [VppMplsLabel(32),
-                                          VppMplsLabel(33),
-                                          VppMplsLabel(34)])
+        self.verify_capture_labelled_ip4(
+            self.pg0, rx, tx, [VppMplsLabel(32), VppMplsLabel(33), VppMplsLabel(34)]
+        )
 
         #
         # Resolve an MPLS tunnel via the SID
         #
         mpls_tun = VppMPLSTunnelInterface(
             self,
 
         #
         # Resolve an MPLS tunnel via the SID
         #
         mpls_tun = VppMPLSTunnelInterface(
             self,
-            [VppRoutePath("0.0.0.0",
-                          0xffffffff,
-                          nh_via_label=999,
-                          labels=[VppMplsLabel(44),
-                                  VppMplsLabel(46)])])
+            [
+                VppRoutePath(
+                    "0.0.0.0",
+                    0xFFFFFFFF,
+                    nh_via_label=999,
+                    labels=[VppMplsLabel(44), VppMplsLabel(46)],
+                )
+            ],
+        )
         mpls_tun.add_vpp_config()
         mpls_tun.admin_up()
 
         #
         # add an unlabelled route through the new tunnel
         #
         mpls_tun.add_vpp_config()
         mpls_tun.admin_up()
 
         #
         # add an unlabelled route through the new tunnel
         #
-        route_10_0_0_3 = VppIpRoute(self, "10.0.0.3", 32,
-                                    [VppRoutePath("0.0.0.0",
-                                                  mpls_tun._sw_if_index)])
+        route_10_0_0_3 = VppIpRoute(
+            self, "10.0.0.3", 32, [VppRoutePath("0.0.0.0", mpls_tun._sw_if_index)]
+        )
         route_10_0_0_3.add_vpp_config()
         self.logger.info(self.vapi.cli("sh mpls tun 0"))
         self.logger.info(self.vapi.cli("sh adj 21"))
 
         tx = self.create_stream_ip4(self.pg1, "10.0.0.3")
         rx = self.send_and_expect(self.pg1, tx, self.pg0)
         route_10_0_0_3.add_vpp_config()
         self.logger.info(self.vapi.cli("sh mpls tun 0"))
         self.logger.info(self.vapi.cli("sh adj 21"))
 
         tx = self.create_stream_ip4(self.pg1, "10.0.0.3")
         rx = self.send_and_expect(self.pg1, tx, self.pg0)
-        self.verify_capture_tunneled_ip4(self.pg0, rx, tx,
-                                         [VppMplsLabel(32),
-                                          VppMplsLabel(33),
-                                          VppMplsLabel(34),
-                                          VppMplsLabel(44),
-                                          VppMplsLabel(46)])
+        self.verify_capture_tunneled_ip4(
+            self.pg0,
+            rx,
+            tx,
+            [
+                VppMplsLabel(32),
+                VppMplsLabel(33),
+                VppMplsLabel(34),
+                VppMplsLabel(44),
+                VppMplsLabel(46),
+            ],
+        )
 
         #
         # add a labelled route through the new tunnel
         #
 
         #
         # add a labelled route through the new tunnel
         #
-        route_10_0_0_3 = VppIpRoute(self, "10.0.0.4", 32,
-                                    [VppRoutePath("0.0.0.0",
-                                                  mpls_tun._sw_if_index,
-                                                  labels=[VppMplsLabel(55)])])
+        route_10_0_0_3 = VppIpRoute(
+            self,
+            "10.0.0.4",
+            32,
+            [VppRoutePath("0.0.0.0", mpls_tun._sw_if_index, labels=[VppMplsLabel(55)])],
+        )
         route_10_0_0_3.add_vpp_config()
 
         tx = self.create_stream_ip4(self.pg1, "10.0.0.4")
         rx = self.send_and_expect(self.pg1, tx, self.pg0)
         route_10_0_0_3.add_vpp_config()
 
         tx = self.create_stream_ip4(self.pg1, "10.0.0.4")
         rx = self.send_and_expect(self.pg1, tx, self.pg0)
-        self.verify_capture_tunneled_ip4(self.pg0, rx, tx,
-                                         [VppMplsLabel(32),
-                                          VppMplsLabel(33),
-                                          VppMplsLabel(34),
-                                          VppMplsLabel(44),
-                                          VppMplsLabel(46),
-                                          VppMplsLabel(55)])
+        self.verify_capture_tunneled_ip4(
+            self.pg0,
+            rx,
+            tx,
+            [
+                VppMplsLabel(32),
+                VppMplsLabel(33),
+                VppMplsLabel(34),
+                VppMplsLabel(44),
+                VppMplsLabel(46),
+                VppMplsLabel(55),
+            ],
+        )
 
         self.vapi.sr_mpls_policy_del(999)
 
 
 
         self.vapi.sr_mpls_policy_del(999)
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index ec2fb6d..40b5337 100644 (file)
@@ -6,8 +6,14 @@ from socket import AF_INET6
 
 from framework import VppTestCase, VppTestRunner
 from vpp_ip_route import VppIpRoute, VppRoutePath, FibPathProto, VppIpTable
 
 from framework import VppTestCase, VppTestRunner
 from vpp_ip_route import VppIpRoute, VppRoutePath, FibPathProto, VppIpTable
-from vpp_srv6 import SRv6LocalSIDBehaviors, VppSRv6LocalSID, VppSRv6Policy, \
-    SRv6PolicyType, VppSRv6Steering, SRv6PolicySteeringTypes
+from vpp_srv6 import (
+    SRv6LocalSIDBehaviors,
+    VppSRv6LocalSID,
+    VppSRv6Policy,
+    SRv6PolicyType,
+    VppSRv6Steering,
+    SRv6PolicySteeringTypes,
+)
 
 import scapy.compat
 from scapy.packet import Raw
 
 import scapy.compat
 from scapy.packet import Raw
@@ -19,7 +25,7 @@ from util import ppp
 
 
 class TestSRv6(VppTestCase):
 
 
 class TestSRv6(VppTestCase):
-    """ SRv6 Test Case """
+    """SRv6 Test Case"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -30,8 +36,7 @@ class TestSRv6(VppTestCase):
         super(TestSRv6, cls).tearDownClass()
 
     def setUp(self):
         super(TestSRv6, cls).tearDownClass()
 
     def setUp(self):
-        """ Perform test setup before each test case.
-        """
+        """Perform test setup before each test case."""
         super(TestSRv6, self).setUp()
 
         # packet sizes, inclusive L2 overhead
         super(TestSRv6, self).setUp()
 
         # packet sizes, inclusive L2 overhead
@@ -41,17 +46,15 @@ class TestSRv6(VppTestCase):
         self.reset_packet_infos()
 
     def tearDown(self):
         self.reset_packet_infos()
 
     def tearDown(self):
-        """ Clean up test setup after each test case.
-        """
+        """Clean up test setup after each test case."""
         self.teardown_interfaces()
 
         super(TestSRv6, self).tearDown()
 
         self.teardown_interfaces()
 
         super(TestSRv6, self).tearDown()
 
-    def configure_interface(self,
-                            interface,
-                            ipv6=False, ipv4=False,
-                            ipv6_table_id=0, ipv4_table_id=0):
-        """ Configure interface.
+    def configure_interface(
+        self, interface, ipv6=False, ipv4=False, ipv6_table_id=0, ipv4_table_id=0
+    ):
+        """Configure interface.
         :param ipv6: configure IPv6 on interface
         :param ipv4: configure IPv4 on interface
         :param ipv6_table_id: FIB table_id for IPv6
         :param ipv6: configure IPv6 on interface
         :param ipv4: configure IPv4 on interface
         :param ipv6_table_id: FIB table_id for IPv6
@@ -70,9 +73,8 @@ class TestSRv6(VppTestCase):
             interface.resolve_arp()
         interface.admin_up()
 
             interface.resolve_arp()
         interface.admin_up()
 
-    def setup_interfaces(self, ipv6=[], ipv4=[],
-                         ipv6_table_id=[], ipv4_table_id=[]):
-        """ Create and configure interfaces.
+    def setup_interfaces(self, ipv6=[], ipv4=[], ipv6_table_id=[], ipv4_table_id=[]):
+        """Create and configure interfaces.
 
         :param ipv6: list of interface IPv6 capabilities
         :param ipv4: list of interface IPv4 capabilities
 
         :param ipv6: list of interface IPv6 capabilities
         :param ipv4: list of interface IPv4 capabilities
@@ -107,9 +109,9 @@ class TestSRv6(VppTestCase):
         # setup all interfaces
         for i in range(count):
             intf = self.pg_interfaces[i]
         # setup all interfaces
         for i in range(count):
             intf = self.pg_interfaces[i]
-            self.configure_interface(intf,
-                                     ipv6[i], ipv4[i],
-                                     ipv6_table_id[i], ipv4_table_id[i])
+            self.configure_interface(
+                intf, ipv6[i], ipv4[i], ipv6_table_id[i], ipv4_table_id[i]
+            )
 
         if any(ipv6):
             self.logger.debug(self.vapi.cli("show ip6 neighbors"))
 
         if any(ipv6):
             self.logger.debug(self.vapi.cli("show ip6 neighbors"))
@@ -121,8 +123,7 @@ class TestSRv6(VppTestCase):
         return self.pg_interfaces
 
     def teardown_interfaces(self):
         return self.pg_interfaces
 
     def teardown_interfaces(self):
-        """ Unconfigure and bring down interface.
-        """
+        """Unconfigure and bring down interface."""
         self.logger.debug("Tearing down interfaces")
         # tear down all interfaces
         # AFAIK they cannot be deleted
         self.logger.debug("Tearing down interfaces")
         # tear down all interfaces
         # AFAIK they cannot be deleted
@@ -135,16 +136,15 @@ class TestSRv6(VppTestCase):
 
     @unittest.skipUnless(0, "PC to fix")
     def test_SRv6_T_Encaps(self):
 
     @unittest.skipUnless(0, "PC to fix")
     def test_SRv6_T_Encaps(self):
-        """ Test SRv6 Transit.Encaps behavior for IPv6.
-        """
+        """Test SRv6 Transit.Encaps behavior for IPv6."""
         # send traffic to one destination interface
         # source and destination are IPv6 only
         self.setup_interfaces(ipv6=[True, True])
 
         # configure FIB entries
         # send traffic to one destination interface
         # source and destination are IPv6 only
         self.setup_interfaces(ipv6=[True, True])
 
         # configure FIB entries
-        route = VppIpRoute(self, "a4::", 64,
-                           [VppRoutePath(self.pg1.remote_ip6,
-                                         self.pg1.sw_if_index)])
+        route = VppIpRoute(
+            self, "a4::", 64, [VppRoutePath(self.pg1.remote_ip6, self.pg1.sw_if_index)]
+        )
         route.add_vpp_config()
 
         # configure encaps IPv6 source address
         route.add_vpp_config()
 
         # configure encaps IPv6 source address
@@ -152,16 +152,19 @@ class TestSRv6(VppTestCase):
         # TODO: API?
         self.vapi.cli("set sr encaps source addr a3::")
 
         # TODO: API?
         self.vapi.cli("set sr encaps source addr a3::")
 
-        bsid = 'a3::9999:1'
+        bsid = "a3::9999:1"
         # configure SRv6 Policy
         # Note: segment list order: first -> last
         sr_policy = VppSRv6Policy(
         # configure SRv6 Policy
         # Note: segment list order: first -> last
         sr_policy = VppSRv6Policy(
-            self, bsid=bsid,
+            self,
+            bsid=bsid,
             is_encap=1,
             sr_type=SRv6PolicyType.SR_POLICY_TYPE_DEFAULT,
             is_encap=1,
             sr_type=SRv6PolicyType.SR_POLICY_TYPE_DEFAULT,
-            weight=1, fib_table=0,
-            segments=['a4::', 'a5::', 'a6::c7'],
-            source='a3::')
+            weight=1,
+            fib_table=0,
+            segments=["a4::", "a5::", "a6::c7"],
+            source="a3::",
+        )
         sr_policy.add_vpp_config()
         self.sr_policy = sr_policy
 
         sr_policy.add_vpp_config()
         self.sr_policy = sr_policy
 
@@ -171,12 +174,15 @@ class TestSRv6(VppTestCase):
         # steer IPv6 traffic to a7::/64 into SRv6 Policy
         # use the bsid of the above self.sr_policy
         pol_steering = VppSRv6Steering(
         # steer IPv6 traffic to a7::/64 into SRv6 Policy
         # use the bsid of the above self.sr_policy
         pol_steering = VppSRv6Steering(
-                        self,
-                        bsid=self.sr_policy.bsid,
-                        prefix="a7::", mask_width=64,
-                        traffic_type=SRv6PolicySteeringTypes.SR_STEER_IPV6,
-                        sr_policy_index=0, table_id=0,
-                        sw_if_index=0)
+            self,
+            bsid=self.sr_policy.bsid,
+            prefix="a7::",
+            mask_width=64,
+            traffic_type=SRv6PolicySteeringTypes.SR_STEER_IPV6,
+            sr_policy_index=0,
+            table_id=0,
+            sw_if_index=0,
+        )
         pol_steering.add_vpp_config()
 
         # log the sr steering policies
         pol_steering.add_vpp_config()
 
         # log the sr steering policies
@@ -184,37 +190,46 @@ class TestSRv6(VppTestCase):
 
         # create packets
         count = len(self.pg_packet_sizes)
 
         # create packets
         count = len(self.pg_packet_sizes)
-        dst_inner = 'a7::1234'
+        dst_inner = "a7::1234"
         pkts = []
 
         # create IPv6 packets without SRH
         packet_header = self.create_packet_header_IPv6(dst_inner)
         # create traffic stream pg0->pg1
         pkts = []
 
         # create IPv6 packets without SRH
         packet_header = self.create_packet_header_IPv6(dst_inner)
         # create traffic stream pg0->pg1
-        pkts.extend(self.create_stream(self.pg0, self.pg1, packet_header,
-                                       self.pg_packet_sizes, count))
+        pkts.extend(
+            self.create_stream(
+                self.pg0, self.pg1, packet_header, self.pg_packet_sizes, count
+            )
+        )
 
         # create IPv6 packets with SRH
         # packets with segments-left 1, active segment a7::
         packet_header = self.create_packet_header_IPv6_SRH(
 
         # create IPv6 packets with SRH
         # packets with segments-left 1, active segment a7::
         packet_header = self.create_packet_header_IPv6_SRH(
-            sidlist=['a8::', 'a7::', 'a6::'],
-            segleft=1)
+            sidlist=["a8::", "a7::", "a6::"], segleft=1
+        )
         # create traffic stream pg0->pg1
         # create traffic stream pg0->pg1
-        pkts.extend(self.create_stream(self.pg0, self.pg1, packet_header,
-                                       self.pg_packet_sizes, count))
+        pkts.extend(
+            self.create_stream(
+                self.pg0, self.pg1, packet_header, self.pg_packet_sizes, count
+            )
+        )
 
         # create IPv6 packets with SRH and IPv6
         # packets with segments-left 1, active segment a7::
         packet_header = self.create_packet_header_IPv6_SRH_IPv6(
 
         # create IPv6 packets with SRH and IPv6
         # packets with segments-left 1, active segment a7::
         packet_header = self.create_packet_header_IPv6_SRH_IPv6(
-            dst_inner,
-            sidlist=['a8::', 'a7::', 'a6::'],
-            segleft=1)
+            dst_inner, sidlist=["a8::", "a7::", "a6::"], segleft=1
+        )
         # create traffic stream pg0->pg1
         # create traffic stream pg0->pg1
-        pkts.extend(self.create_stream(self.pg0, self.pg1, packet_header,
-                                       self.pg_packet_sizes, count))
+        pkts.extend(
+            self.create_stream(
+                self.pg0, self.pg1, packet_header, self.pg_packet_sizes, count
+            )
+        )
 
         # send packets and verify received packets
 
         # send packets and verify received packets
-        self.send_and_verify_pkts(self.pg0, pkts, self.pg1,
-                                  self.compare_rx_tx_packet_T_Encaps)
+        self.send_and_verify_pkts(
+            self.pg0, pkts, self.pg1, self.compare_rx_tx_packet_T_Encaps
+        )
 
         # log the localsid counters
         self.logger.info(self.vapi.cli("show sr localsid"))
 
         # log the localsid counters
         self.logger.info(self.vapi.cli("show sr localsid"))
@@ -235,16 +250,15 @@ class TestSRv6(VppTestCase):
 
     @unittest.skipUnless(0, "PC to fix")
     def test_SRv6_T_Insert(self):
 
     @unittest.skipUnless(0, "PC to fix")
     def test_SRv6_T_Insert(self):
-        """ Test SRv6 Transit.Insert behavior (IPv6 only).
-        """
+        """Test SRv6 Transit.Insert behavior (IPv6 only)."""
         # send traffic to one destination interface
         # source and destination are IPv6 only
         self.setup_interfaces(ipv6=[True, True])
 
         # configure FIB entries
         # send traffic to one destination interface
         # source and destination are IPv6 only
         self.setup_interfaces(ipv6=[True, True])
 
         # configure FIB entries
-        route = VppIpRoute(self, "a4::", 64,
-                           [VppRoutePath(self.pg1.remote_ip6,
-                                         self.pg1.sw_if_index)])
+        route = VppIpRoute(
+            self, "a4::", 64, [VppRoutePath(self.pg1.remote_ip6, self.pg1.sw_if_index)]
+        )
         route.add_vpp_config()
 
         # configure encaps IPv6 source address
         route.add_vpp_config()
 
         # configure encaps IPv6 source address
@@ -252,16 +266,19 @@ class TestSRv6(VppTestCase):
         # TODO: API?
         self.vapi.cli("set sr encaps source addr a3::")
 
         # TODO: API?
         self.vapi.cli("set sr encaps source addr a3::")
 
-        bsid = 'a3::9999:1'
+        bsid = "a3::9999:1"
         # configure SRv6 Policy
         # Note: segment list order: first -> last
         sr_policy = VppSRv6Policy(
         # configure SRv6 Policy
         # Note: segment list order: first -> last
         sr_policy = VppSRv6Policy(
-            self, bsid=bsid,
+            self,
+            bsid=bsid,
             is_encap=0,
             sr_type=SRv6PolicyType.SR_POLICY_TYPE_DEFAULT,
             is_encap=0,
             sr_type=SRv6PolicyType.SR_POLICY_TYPE_DEFAULT,
-            weight=1, fib_table=0,
-            segments=['a4::', 'a5::', 'a6::c7'],
-            source='a3::')
+            weight=1,
+            fib_table=0,
+            segments=["a4::", "a5::", "a6::c7"],
+            source="a3::",
+        )
         sr_policy.add_vpp_config()
         self.sr_policy = sr_policy
 
         sr_policy.add_vpp_config()
         self.sr_policy = sr_policy
 
@@ -271,12 +288,15 @@ class TestSRv6(VppTestCase):
         # steer IPv6 traffic to a7::/64 into SRv6 Policy
         # use the bsid of the above self.sr_policy
         pol_steering = VppSRv6Steering(
         # steer IPv6 traffic to a7::/64 into SRv6 Policy
         # use the bsid of the above self.sr_policy
         pol_steering = VppSRv6Steering(
-                        self,
-                        bsid=self.sr_policy.bsid,
-                        prefix="a7::", mask_width=64,
-                        traffic_type=SRv6PolicySteeringTypes.SR_STEER_IPV6,
-                        sr_policy_index=0, table_id=0,
-                        sw_if_index=0)
+            self,
+            bsid=self.sr_policy.bsid,
+            prefix="a7::",
+            mask_width=64,
+            traffic_type=SRv6PolicySteeringTypes.SR_STEER_IPV6,
+            sr_policy_index=0,
+            table_id=0,
+            sw_if_index=0,
+        )
         pol_steering.add_vpp_config()
 
         # log the sr steering policies
         pol_steering.add_vpp_config()
 
         # log the sr steering policies
@@ -284,27 +304,34 @@ class TestSRv6(VppTestCase):
 
         # create packets
         count = len(self.pg_packet_sizes)
 
         # create packets
         count = len(self.pg_packet_sizes)
-        dst_inner = 'a7::1234'
+        dst_inner = "a7::1234"
         pkts = []
 
         # create IPv6 packets without SRH
         packet_header = self.create_packet_header_IPv6(dst_inner)
         # create traffic stream pg0->pg1
         pkts = []
 
         # create IPv6 packets without SRH
         packet_header = self.create_packet_header_IPv6(dst_inner)
         # create traffic stream pg0->pg1
-        pkts.extend(self.create_stream(self.pg0, self.pg1, packet_header,
-                                       self.pg_packet_sizes, count))
+        pkts.extend(
+            self.create_stream(
+                self.pg0, self.pg1, packet_header, self.pg_packet_sizes, count
+            )
+        )
 
         # create IPv6 packets with SRH
         # packets with segments-left 1, active segment a7::
         packet_header = self.create_packet_header_IPv6_SRH(
 
         # create IPv6 packets with SRH
         # packets with segments-left 1, active segment a7::
         packet_header = self.create_packet_header_IPv6_SRH(
-            sidlist=['a8::', 'a7::', 'a6::'],
-            segleft=1)
+            sidlist=["a8::", "a7::", "a6::"], segleft=1
+        )
         # create traffic stream pg0->pg1
         # create traffic stream pg0->pg1
-        pkts.extend(self.create_stream(self.pg0, self.pg1, packet_header,
-                                       self.pg_packet_sizes, count))
+        pkts.extend(
+            self.create_stream(
+                self.pg0, self.pg1, packet_header, self.pg_packet_sizes, count
+            )
+        )
 
         # send packets and verify received packets
 
         # send packets and verify received packets
-        self.send_and_verify_pkts(self.pg0, pkts, self.pg1,
-                                  self.compare_rx_tx_packet_T_Insert)
+        self.send_and_verify_pkts(
+            self.pg0, pkts, self.pg1, self.compare_rx_tx_packet_T_Insert
+        )
 
         # log the localsid counters
         self.logger.info(self.vapi.cli("show sr localsid"))
 
         # log the localsid counters
         self.logger.info(self.vapi.cli("show sr localsid"))
@@ -325,17 +352,16 @@ class TestSRv6(VppTestCase):
 
     @unittest.skipUnless(0, "PC to fix")
     def test_SRv6_T_Encaps_IPv4(self):
 
     @unittest.skipUnless(0, "PC to fix")
     def test_SRv6_T_Encaps_IPv4(self):
-        """ Test SRv6 Transit.Encaps behavior for IPv4.
-        """
+        """Test SRv6 Transit.Encaps behavior for IPv4."""
         # send traffic to one destination interface
         # source interface is IPv4 only
         # destination interface is IPv6 only
         self.setup_interfaces(ipv6=[False, True], ipv4=[True, False])
 
         # configure FIB entries
         # send traffic to one destination interface
         # source interface is IPv4 only
         # destination interface is IPv6 only
         self.setup_interfaces(ipv6=[False, True], ipv4=[True, False])
 
         # configure FIB entries
-        route = VppIpRoute(self, "a4::", 64,
-                           [VppRoutePath(self.pg1.remote_ip6,
-                                         self.pg1.sw_if_index)])
+        route = VppIpRoute(
+            self, "a4::", 64, [VppRoutePath(self.pg1.remote_ip6, self.pg1.sw_if_index)]
+        )
         route.add_vpp_config()
 
         # configure encaps IPv6 source address
         route.add_vpp_config()
 
         # configure encaps IPv6 source address
@@ -343,16 +369,19 @@ class TestSRv6(VppTestCase):
         # TODO: API?
         self.vapi.cli("set sr encaps source addr a3::")
 
         # TODO: API?
         self.vapi.cli("set sr encaps source addr a3::")
 
-        bsid = 'a3::9999:1'
+        bsid = "a3::9999:1"
         # configure SRv6 Policy
         # Note: segment list order: first -> last
         sr_policy = VppSRv6Policy(
         # configure SRv6 Policy
         # Note: segment list order: first -> last
         sr_policy = VppSRv6Policy(
-            self, bsid=bsid,
+            self,
+            bsid=bsid,
             is_encap=1,
             sr_type=SRv6PolicyType.SR_POLICY_TYPE_DEFAULT,
             is_encap=1,
             sr_type=SRv6PolicyType.SR_POLICY_TYPE_DEFAULT,
-            weight=1, fib_table=0,
-            segments=['a4::', 'a5::', 'a6::c7'],
-            source='a3::')
+            weight=1,
+            fib_table=0,
+            segments=["a4::", "a5::", "a6::c7"],
+            source="a3::",
+        )
         sr_policy.add_vpp_config()
         self.sr_policy = sr_policy
 
         sr_policy.add_vpp_config()
         self.sr_policy = sr_policy
 
@@ -362,12 +391,15 @@ class TestSRv6(VppTestCase):
         # steer IPv4 traffic to 7.1.1.0/24 into SRv6 Policy
         # use the bsid of the above self.sr_policy
         pol_steering = VppSRv6Steering(
         # steer IPv4 traffic to 7.1.1.0/24 into SRv6 Policy
         # use the bsid of the above self.sr_policy
         pol_steering = VppSRv6Steering(
-                        self,
-                        bsid=self.sr_policy.bsid,
-                        prefix="7.1.1.0", mask_width=24,
-                        traffic_type=SRv6PolicySteeringTypes.SR_STEER_IPV4,
-                        sr_policy_index=0, table_id=0,
-                        sw_if_index=0)
+            self,
+            bsid=self.sr_policy.bsid,
+            prefix="7.1.1.0",
+            mask_width=24,
+            traffic_type=SRv6PolicySteeringTypes.SR_STEER_IPV4,
+            sr_policy_index=0,
+            table_id=0,
+            sw_if_index=0,
+        )
         pol_steering.add_vpp_config()
 
         # log the sr steering policies
         pol_steering.add_vpp_config()
 
         # log the sr steering policies
@@ -375,18 +407,22 @@ class TestSRv6(VppTestCase):
 
         # create packets
         count = len(self.pg_packet_sizes)
 
         # create packets
         count = len(self.pg_packet_sizes)
-        dst_inner = '7.1.1.123'
+        dst_inner = "7.1.1.123"
         pkts = []
 
         # create IPv4 packets
         packet_header = self.create_packet_header_IPv4(dst_inner)
         # create traffic stream pg0->pg1
         pkts = []
 
         # create IPv4 packets
         packet_header = self.create_packet_header_IPv4(dst_inner)
         # create traffic stream pg0->pg1
-        pkts.extend(self.create_stream(self.pg0, self.pg1, packet_header,
-                                       self.pg_packet_sizes, count))
+        pkts.extend(
+            self.create_stream(
+                self.pg0, self.pg1, packet_header, self.pg_packet_sizes, count
+            )
+        )
 
         # send packets and verify received packets
 
         # send packets and verify received packets
-        self.send_and_verify_pkts(self.pg0, pkts, self.pg1,
-                                  self.compare_rx_tx_packet_T_Encaps_IPv4)
+        self.send_and_verify_pkts(
+            self.pg0, pkts, self.pg1, self.compare_rx_tx_packet_T_Encaps_IPv4
+        )
 
         # log the localsid counters
         self.logger.info(self.vapi.cli("show sr localsid"))
 
         # log the localsid counters
         self.logger.info(self.vapi.cli("show sr localsid"))
@@ -407,17 +443,16 @@ class TestSRv6(VppTestCase):
 
     @unittest.skip("VPP crashes after running this test")
     def test_SRv6_T_Encaps_L2(self):
 
     @unittest.skip("VPP crashes after running this test")
     def test_SRv6_T_Encaps_L2(self):
-        """ Test SRv6 Transit.Encaps behavior for L2.
-        """
+        """Test SRv6 Transit.Encaps behavior for L2."""
         # send traffic to one destination interface
         # source interface is IPv4 only TODO?
         # destination interface is IPv6 only
         self.setup_interfaces(ipv6=[False, True], ipv4=[False, False])
 
         # configure FIB entries
         # send traffic to one destination interface
         # source interface is IPv4 only TODO?
         # destination interface is IPv6 only
         self.setup_interfaces(ipv6=[False, True], ipv4=[False, False])
 
         # configure FIB entries
-        route = VppIpRoute(self, "a4::", 64,
-                           [VppRoutePath(self.pg1.remote_ip6,
-                                         self.pg1.sw_if_index)])
+        route = VppIpRoute(
+            self, "a4::", 64, [VppRoutePath(self.pg1.remote_ip6, self.pg1.sw_if_index)]
+        )
         route.add_vpp_config()
 
         # configure encaps IPv6 source address
         route.add_vpp_config()
 
         # configure encaps IPv6 source address
@@ -425,16 +460,19 @@ class TestSRv6(VppTestCase):
         # TODO: API?
         self.vapi.cli("set sr encaps source addr a3::")
 
         # TODO: API?
         self.vapi.cli("set sr encaps source addr a3::")
 
-        bsid = 'a3::9999:1'
+        bsid = "a3::9999:1"
         # configure SRv6 Policy
         # Note: segment list order: first -> last
         sr_policy = VppSRv6Policy(
         # configure SRv6 Policy
         # Note: segment list order: first -> last
         sr_policy = VppSRv6Policy(
-            self, bsid=bsid,
+            self,
+            bsid=bsid,
             is_encap=1,
             sr_type=SRv6PolicyType.SR_POLICY_TYPE_DEFAULT,
             is_encap=1,
             sr_type=SRv6PolicyType.SR_POLICY_TYPE_DEFAULT,
-            weight=1, fib_table=0,
-            segments=['a4::', 'a5::', 'a6::c7'],
-            source='a3::')
+            weight=1,
+            fib_table=0,
+            segments=["a4::", "a5::", "a6::c7"],
+            source="a3::",
+        )
         sr_policy.add_vpp_config()
         self.sr_policy = sr_policy
 
         sr_policy.add_vpp_config()
         self.sr_policy = sr_policy
 
@@ -444,12 +482,15 @@ class TestSRv6(VppTestCase):
         # steer L2 traffic into SRv6 Policy
         # use the bsid of the above self.sr_policy
         pol_steering = VppSRv6Steering(
         # steer L2 traffic into SRv6 Policy
         # use the bsid of the above self.sr_policy
         pol_steering = VppSRv6Steering(
-                        self,
-                        bsid=self.sr_policy.bsid,
-                        prefix="::", mask_width=0,
-                        traffic_type=SRv6PolicySteeringTypes.SR_STEER_L2,
-                        sr_policy_index=0, table_id=0,
-                        sw_if_index=self.pg0.sw_if_index)
+            self,
+            bsid=self.sr_policy.bsid,
+            prefix="::",
+            mask_width=0,
+            traffic_type=SRv6PolicySteeringTypes.SR_STEER_L2,
+            sr_policy_index=0,
+            table_id=0,
+            sw_if_index=self.pg0.sw_if_index,
+        )
         pol_steering.add_vpp_config()
 
         # log the sr steering policies
         pol_steering.add_vpp_config()
 
         # log the sr steering policies
@@ -462,18 +503,25 @@ class TestSRv6(VppTestCase):
         # create L2 packets without dot1q header
         packet_header = self.create_packet_header_L2()
         # create traffic stream pg0->pg1
         # create L2 packets without dot1q header
         packet_header = self.create_packet_header_L2()
         # create traffic stream pg0->pg1
-        pkts.extend(self.create_stream(self.pg0, self.pg1, packet_header,
-                                       self.pg_packet_sizes, count))
+        pkts.extend(
+            self.create_stream(
+                self.pg0, self.pg1, packet_header, self.pg_packet_sizes, count
+            )
+        )
 
         # create L2 packets with dot1q header
         packet_header = self.create_packet_header_L2(vlan=123)
         # create traffic stream pg0->pg1
 
         # create L2 packets with dot1q header
         packet_header = self.create_packet_header_L2(vlan=123)
         # create traffic stream pg0->pg1
-        pkts.extend(self.create_stream(self.pg0, self.pg1, packet_header,
-                                       self.pg_packet_sizes, count))
+        pkts.extend(
+            self.create_stream(
+                self.pg0, self.pg1, packet_header, self.pg_packet_sizes, count
+            )
+        )
 
         # send packets and verify received packets
 
         # send packets and verify received packets
-        self.send_and_verify_pkts(self.pg0, pkts, self.pg1,
-                                  self.compare_rx_tx_packet_T_Encaps_L2)
+        self.send_and_verify_pkts(
+            self.pg0, pkts, self.pg1, self.compare_rx_tx_packet_T_Encaps_L2
+        )
 
         # log the localsid counters
         self.logger.info(self.vapi.cli("show sr localsid"))
 
         # log the localsid counters
         self.logger.info(self.vapi.cli("show sr localsid"))
@@ -493,27 +541,28 @@ class TestSRv6(VppTestCase):
         self.teardown_interfaces()
 
     def test_SRv6_End(self):
         self.teardown_interfaces()
 
     def test_SRv6_End(self):
-        """ Test SRv6 End (without PSP) behavior.
-        """
+        """Test SRv6 End (without PSP) behavior."""
         # send traffic to one destination interface
         # source and destination interfaces are IPv6 only
         self.setup_interfaces(ipv6=[True, True])
 
         # configure FIB entries
         # send traffic to one destination interface
         # source and destination interfaces are IPv6 only
         self.setup_interfaces(ipv6=[True, True])
 
         # configure FIB entries
-        route = VppIpRoute(self, "a4::", 64,
-                           [VppRoutePath(self.pg1.remote_ip6,
-                                         self.pg1.sw_if_index)])
+        route = VppIpRoute(
+            self, "a4::", 64, [VppRoutePath(self.pg1.remote_ip6, self.pg1.sw_if_index)]
+        )
         route.add_vpp_config()
 
         # configure SRv6 localSID End without PSP behavior
         localsid = VppSRv6LocalSID(
         route.add_vpp_config()
 
         # configure SRv6 localSID End without PSP behavior
         localsid = VppSRv6LocalSID(
-                        self, localsid='A3::0',
-                        behavior=SRv6LocalSIDBehaviors.SR_BEHAVIOR_END,
-                        nh_addr=0,
-                        end_psp=0,
-                        sw_if_index=0,
-                        vlan_index=0,
-                        fib_table=0)
+            self,
+            localsid="A3::0",
+            behavior=SRv6LocalSIDBehaviors.SR_BEHAVIOR_END,
+            nh_addr=0,
+            end_psp=0,
+            sw_if_index=0,
+            vlan_index=0,
+            fib_table=0,
+        )
         localsid.add_vpp_config()
         # log the localsids
         self.logger.debug(self.vapi.cli("show sr localsid"))
         localsid.add_vpp_config()
         # log the localsids
         self.logger.debug(self.vapi.cli("show sr localsid"))
@@ -522,41 +571,52 @@ class TestSRv6(VppTestCase):
         # send one packet per SL value per packet size
         # SL=0 packet with localSID End with USP needs 2nd SRH
         count = len(self.pg_packet_sizes)
         # send one packet per SL value per packet size
         # SL=0 packet with localSID End with USP needs 2nd SRH
         count = len(self.pg_packet_sizes)
-        dst_inner = 'a4::1234'
+        dst_inner = "a4::1234"
         pkts = []
 
         # packets with segments-left 2, active segment a3::
         packet_header = self.create_packet_header_IPv6_SRH_IPv6(
         pkts = []
 
         # packets with segments-left 2, active segment a3::
         packet_header = self.create_packet_header_IPv6_SRH_IPv6(
-                dst_inner,
-                sidlist=['a5::', 'a4::', 'a3::'],
-                segleft=2)
+            dst_inner, sidlist=["a5::", "a4::", "a3::"], segleft=2
+        )
         # create traffic stream pg0->pg1
         # create traffic stream pg0->pg1
-        pkts.extend(self.create_stream(self.pg0, self.pg1, packet_header,
-                                       self.pg_packet_sizes, count))
+        pkts.extend(
+            self.create_stream(
+                self.pg0, self.pg1, packet_header, self.pg_packet_sizes, count
+            )
+        )
 
         # packets with segments-left 1, active segment a3::
         packet_header = self.create_packet_header_IPv6_SRH_IPv6(
 
         # packets with segments-left 1, active segment a3::
         packet_header = self.create_packet_header_IPv6_SRH_IPv6(
-                dst_inner,
-                sidlist=['a4::', 'a3::', 'a2::'],
-                segleft=1)
+            dst_inner, sidlist=["a4::", "a3::", "a2::"], segleft=1
+        )
         # add to traffic stream pg0->pg1
         # add to traffic stream pg0->pg1
-        pkts.extend(self.create_stream(self.pg0, self.pg1, packet_header,
-                                       self.pg_packet_sizes, count))
+        pkts.extend(
+            self.create_stream(
+                self.pg0, self.pg1, packet_header, self.pg_packet_sizes, count
+            )
+        )
 
         # TODO: test behavior with SL=0 packet (needs 2*SRH?)
 
         expected_count = len(pkts)
 
         # packets without SRH (should not crash)
 
         # TODO: test behavior with SL=0 packet (needs 2*SRH?)
 
         expected_count = len(pkts)
 
         # packets without SRH (should not crash)
-        packet_header = self.create_packet_header_IPv6('a3::')
+        packet_header = self.create_packet_header_IPv6("a3::")
         # create traffic stream pg0->pg1
         # create traffic stream pg0->pg1
-        pkts.extend(self.create_stream(self.pg0, self.pg1, packet_header,
-                                       self.pg_packet_sizes, count))
+        pkts.extend(
+            self.create_stream(
+                self.pg0, self.pg1, packet_header, self.pg_packet_sizes, count
+            )
+        )
 
         # send packets and verify received packets
 
         # send packets and verify received packets
-        self.send_and_verify_pkts(self.pg0, pkts, self.pg1,
-                                  self.compare_rx_tx_packet_End,
-                                  expected_count=expected_count)
+        self.send_and_verify_pkts(
+            self.pg0,
+            pkts,
+            self.pg1,
+            self.compare_rx_tx_packet_End,
+            expected_count=expected_count,
+        )
 
         # log the localsid counters
         self.logger.info(self.vapi.cli("show sr localsid"))
 
         # log the localsid counters
         self.logger.info(self.vapi.cli("show sr localsid"))
@@ -571,27 +631,28 @@ class TestSRv6(VppTestCase):
         self.teardown_interfaces()
 
     def test_SRv6_End_with_PSP(self):
         self.teardown_interfaces()
 
     def test_SRv6_End_with_PSP(self):
-        """ Test SRv6 End with PSP behavior.
-        """
+        """Test SRv6 End with PSP behavior."""
         # send traffic to one destination interface
         # source and destination interfaces are IPv6 only
         self.setup_interfaces(ipv6=[True, True])
 
         # configure FIB entries
         # send traffic to one destination interface
         # source and destination interfaces are IPv6 only
         self.setup_interfaces(ipv6=[True, True])
 
         # configure FIB entries
-        route = VppIpRoute(self, "a4::", 64,
-                           [VppRoutePath(self.pg1.remote_ip6,
-                                         self.pg1.sw_if_index)])
+        route = VppIpRoute(
+            self, "a4::", 64, [VppRoutePath(self.pg1.remote_ip6, self.pg1.sw_if_index)]
+        )
         route.add_vpp_config()
 
         # configure SRv6 localSID End with PSP behavior
         localsid = VppSRv6LocalSID(
         route.add_vpp_config()
 
         # configure SRv6 localSID End with PSP behavior
         localsid = VppSRv6LocalSID(
-                        self, localsid='A3::0',
-                        behavior=SRv6LocalSIDBehaviors.SR_BEHAVIOR_END,
-                        nh_addr=0,
-                        end_psp=1,
-                        sw_if_index=0,
-                        vlan_index=0,
-                        fib_table=0)
+            self,
+            localsid="A3::0",
+            behavior=SRv6LocalSIDBehaviors.SR_BEHAVIOR_END,
+            nh_addr=0,
+            end_psp=1,
+            sw_if_index=0,
+            vlan_index=0,
+            fib_table=0,
+        )
         localsid.add_vpp_config()
         # log the localsids
         self.logger.debug(self.vapi.cli("show sr localsid"))
         localsid.add_vpp_config()
         # log the localsids
         self.logger.debug(self.vapi.cli("show sr localsid"))
@@ -600,30 +661,35 @@ class TestSRv6(VppTestCase):
         # send one packet per SL value per packet size
         # SL=0 packet with localSID End with PSP is dropped
         count = len(self.pg_packet_sizes)
         # send one packet per SL value per packet size
         # SL=0 packet with localSID End with PSP is dropped
         count = len(self.pg_packet_sizes)
-        dst_inner = 'a4::1234'
+        dst_inner = "a4::1234"
         pkts = []
 
         # packets with segments-left 2, active segment a3::
         packet_header = self.create_packet_header_IPv6_SRH_IPv6(
         pkts = []
 
         # packets with segments-left 2, active segment a3::
         packet_header = self.create_packet_header_IPv6_SRH_IPv6(
-                    dst_inner,
-                    sidlist=['a5::', 'a4::', 'a3::'],
-                    segleft=2)
+            dst_inner, sidlist=["a5::", "a4::", "a3::"], segleft=2
+        )
         # create traffic stream pg0->pg1
         # create traffic stream pg0->pg1
-        pkts.extend(self.create_stream(self.pg0, self.pg1, packet_header,
-                                       self.pg_packet_sizes, count))
+        pkts.extend(
+            self.create_stream(
+                self.pg0, self.pg1, packet_header, self.pg_packet_sizes, count
+            )
+        )
 
         # packets with segments-left 1, active segment a3::
         packet_header = self.create_packet_header_IPv6_SRH_IPv6(
 
         # packets with segments-left 1, active segment a3::
         packet_header = self.create_packet_header_IPv6_SRH_IPv6(
-                    dst_inner,
-                    sidlist=['a4::', 'a3::', 'a2::'],
-                    segleft=1)
+            dst_inner, sidlist=["a4::", "a3::", "a2::"], segleft=1
+        )
         # add to traffic stream pg0->pg1
         # add to traffic stream pg0->pg1
-        pkts.extend(self.create_stream(self.pg0, self.pg1, packet_header,
-                                       self.pg_packet_sizes, count))
+        pkts.extend(
+            self.create_stream(
+                self.pg0, self.pg1, packet_header, self.pg_packet_sizes, count
+            )
+        )
 
         # send packets and verify received packets
 
         # send packets and verify received packets
-        self.send_and_verify_pkts(self.pg0, pkts, self.pg1,
-                                  self.compare_rx_tx_packet_End_PSP)
+        self.send_and_verify_pkts(
+            self.pg0, pkts, self.pg1, self.compare_rx_tx_packet_End_PSP
+        )
 
         # log the localsid counters
         self.logger.info(self.vapi.cli("show sr localsid"))
 
         # log the localsid counters
         self.logger.info(self.vapi.cli("show sr localsid"))
@@ -638,32 +704,37 @@ class TestSRv6(VppTestCase):
         self.teardown_interfaces()
 
     def test_SRv6_End_X(self):
         self.teardown_interfaces()
 
     def test_SRv6_End_X(self):
-        """ Test SRv6 End.X (without PSP) behavior.
-        """
+        """Test SRv6 End.X (without PSP) behavior."""
         # create three interfaces (1 source, 2 destinations)
         # source and destination interfaces are IPv6 only
         self.setup_interfaces(ipv6=[True, True, True])
 
         # configure FIB entries
         # a4::/64 via pg1 and pg2
         # create three interfaces (1 source, 2 destinations)
         # source and destination interfaces are IPv6 only
         self.setup_interfaces(ipv6=[True, True, True])
 
         # configure FIB entries
         # a4::/64 via pg1 and pg2
-        route = VppIpRoute(self, "a4::", 64,
-                           [VppRoutePath(self.pg1.remote_ip6,
-                                         self.pg1.sw_if_index),
-                            VppRoutePath(self.pg2.remote_ip6,
-                                         self.pg2.sw_if_index)])
+        route = VppIpRoute(
+            self,
+            "a4::",
+            64,
+            [
+                VppRoutePath(self.pg1.remote_ip6, self.pg1.sw_if_index),
+                VppRoutePath(self.pg2.remote_ip6, self.pg2.sw_if_index),
+            ],
+        )
         route.add_vpp_config()
         self.logger.debug(self.vapi.cli("show ip6 fib"))
 
         # configure SRv6 localSID End.X without PSP behavior
         # End.X points to interface pg1
         localsid = VppSRv6LocalSID(
         route.add_vpp_config()
         self.logger.debug(self.vapi.cli("show ip6 fib"))
 
         # configure SRv6 localSID End.X without PSP behavior
         # End.X points to interface pg1
         localsid = VppSRv6LocalSID(
-                        self, localsid='A3::C4',
-                        behavior=SRv6LocalSIDBehaviors.SR_BEHAVIOR_X,
-                        nh_addr=self.pg1.remote_ip6,
-                        end_psp=0,
-                        sw_if_index=self.pg1.sw_if_index,
-                        vlan_index=0,
-                        fib_table=0)
+            self,
+            localsid="A3::C4",
+            behavior=SRv6LocalSIDBehaviors.SR_BEHAVIOR_X,
+            nh_addr=self.pg1.remote_ip6,
+            end_psp=0,
+            sw_if_index=self.pg1.sw_if_index,
+            vlan_index=0,
+            fib_table=0,
+        )
         localsid.add_vpp_config()
         # log the localsids
         self.logger.debug(self.vapi.cli("show sr localsid"))
         localsid.add_vpp_config()
         # log the localsids
         self.logger.debug(self.vapi.cli("show sr localsid"))
@@ -672,31 +743,36 @@ class TestSRv6(VppTestCase):
         # send one packet per SL value per packet size
         # SL=0 packet with localSID End with PSP is dropped
         count = len(self.pg_packet_sizes)
         # send one packet per SL value per packet size
         # SL=0 packet with localSID End with PSP is dropped
         count = len(self.pg_packet_sizes)
-        dst_inner = 'a4::1234'
+        dst_inner = "a4::1234"
         pkts = []
 
         # packets with segments-left 2, active segment a3::c4
         packet_header = self.create_packet_header_IPv6_SRH_IPv6(
         pkts = []
 
         # packets with segments-left 2, active segment a3::c4
         packet_header = self.create_packet_header_IPv6_SRH_IPv6(
-                    dst_inner,
-                    sidlist=['a5::', 'a4::', 'a3::c4'],
-                    segleft=2)
+            dst_inner, sidlist=["a5::", "a4::", "a3::c4"], segleft=2
+        )
         # create traffic stream pg0->pg1
         # create traffic stream pg0->pg1
-        pkts.extend(self.create_stream(self.pg0, self.pg1, packet_header,
-                                       self.pg_packet_sizes, count))
+        pkts.extend(
+            self.create_stream(
+                self.pg0, self.pg1, packet_header, self.pg_packet_sizes, count
+            )
+        )
 
         # packets with segments-left 1, active segment a3::c4
         packet_header = self.create_packet_header_IPv6_SRH_IPv6(
 
         # packets with segments-left 1, active segment a3::c4
         packet_header = self.create_packet_header_IPv6_SRH_IPv6(
-                    dst_inner,
-                    sidlist=['a4::', 'a3::c4', 'a2::'],
-                    segleft=1)
+            dst_inner, sidlist=["a4::", "a3::c4", "a2::"], segleft=1
+        )
         # add to traffic stream pg0->pg1
         # add to traffic stream pg0->pg1
-        pkts.extend(self.create_stream(self.pg0, self.pg1, packet_header,
-                                       self.pg_packet_sizes, count))
+        pkts.extend(
+            self.create_stream(
+                self.pg0, self.pg1, packet_header, self.pg_packet_sizes, count
+            )
+        )
 
         # send packets and verify received packets
         # using same comparison function as End (no PSP)
 
         # send packets and verify received packets
         # using same comparison function as End (no PSP)
-        self.send_and_verify_pkts(self.pg0, pkts, self.pg1,
-                                  self.compare_rx_tx_packet_End)
+        self.send_and_verify_pkts(
+            self.pg0, pkts, self.pg1, self.compare_rx_tx_packet_End
+        )
 
         # assert nothing was received on the other interface (pg2)
         self.pg2.assert_nothing_captured(remark="mis-directed packet(s)")
 
         # assert nothing was received on the other interface (pg2)
         self.pg2.assert_nothing_captured(remark="mis-directed packet(s)")
@@ -714,31 +790,35 @@ class TestSRv6(VppTestCase):
         self.teardown_interfaces()
 
     def test_SRv6_End_X_with_PSP(self):
         self.teardown_interfaces()
 
     def test_SRv6_End_X_with_PSP(self):
-        """ Test SRv6 End.X with PSP behavior.
-        """
+        """Test SRv6 End.X with PSP behavior."""
         # create three interfaces (1 source, 2 destinations)
         # source and destination interfaces are IPv6 only
         self.setup_interfaces(ipv6=[True, True, True])
 
         # configure FIB entries
         # a4::/64 via pg1 and pg2
         # create three interfaces (1 source, 2 destinations)
         # source and destination interfaces are IPv6 only
         self.setup_interfaces(ipv6=[True, True, True])
 
         # configure FIB entries
         # a4::/64 via pg1 and pg2
-        route = VppIpRoute(self, "a4::", 64,
-                           [VppRoutePath(
-                               self.pg1.remote_ip6,
-                               self.pg1.sw_if_index),
-                            VppRoutePath(self.pg2.remote_ip6,
-                                         self.pg2.sw_if_index)])
+        route = VppIpRoute(
+            self,
+            "a4::",
+            64,
+            [
+                VppRoutePath(self.pg1.remote_ip6, self.pg1.sw_if_index),
+                VppRoutePath(self.pg2.remote_ip6, self.pg2.sw_if_index),
+            ],
+        )
         route.add_vpp_config()
 
         # configure SRv6 localSID End with PSP behavior
         localsid = VppSRv6LocalSID(
         route.add_vpp_config()
 
         # configure SRv6 localSID End with PSP behavior
         localsid = VppSRv6LocalSID(
-                        self, localsid='A3::C4',
-                        behavior=SRv6LocalSIDBehaviors.SR_BEHAVIOR_X,
-                        nh_addr=self.pg1.remote_ip6,
-                        end_psp=1,
-                        sw_if_index=self.pg1.sw_if_index,
-                        vlan_index=0,
-                        fib_table=0)
+            self,
+            localsid="A3::C4",
+            behavior=SRv6LocalSIDBehaviors.SR_BEHAVIOR_X,
+            nh_addr=self.pg1.remote_ip6,
+            end_psp=1,
+            sw_if_index=self.pg1.sw_if_index,
+            vlan_index=0,
+            fib_table=0,
+        )
         localsid.add_vpp_config()
         # log the localsids
         self.logger.debug(self.vapi.cli("show sr localsid"))
         localsid.add_vpp_config()
         # log the localsids
         self.logger.debug(self.vapi.cli("show sr localsid"))
@@ -747,31 +827,36 @@ class TestSRv6(VppTestCase):
         # send one packet per SL value per packet size
         # SL=0 packet with localSID End with PSP is dropped
         count = len(self.pg_packet_sizes)
         # send one packet per SL value per packet size
         # SL=0 packet with localSID End with PSP is dropped
         count = len(self.pg_packet_sizes)
-        dst_inner = 'a4::1234'
+        dst_inner = "a4::1234"
         pkts = []
 
         # packets with segments-left 2, active segment a3::
         packet_header = self.create_packet_header_IPv6_SRH_IPv6(
         pkts = []
 
         # packets with segments-left 2, active segment a3::
         packet_header = self.create_packet_header_IPv6_SRH_IPv6(
-                    dst_inner,
-                    sidlist=['a5::', 'a4::', 'a3::c4'],
-                    segleft=2)
+            dst_inner, sidlist=["a5::", "a4::", "a3::c4"], segleft=2
+        )
         # create traffic stream pg0->pg1
         # create traffic stream pg0->pg1
-        pkts.extend(self.create_stream(self.pg0, self.pg1, packet_header,
-                                       self.pg_packet_sizes, count))
+        pkts.extend(
+            self.create_stream(
+                self.pg0, self.pg1, packet_header, self.pg_packet_sizes, count
+            )
+        )
 
         # packets with segments-left 1, active segment a3::
         packet_header = self.create_packet_header_IPv6_SRH_IPv6(
 
         # packets with segments-left 1, active segment a3::
         packet_header = self.create_packet_header_IPv6_SRH_IPv6(
-                    dst_inner,
-                    sidlist=['a4::', 'a3::c4', 'a2::'],
-                    segleft=1)
+            dst_inner, sidlist=["a4::", "a3::c4", "a2::"], segleft=1
+        )
         # add to traffic stream pg0->pg1
         # add to traffic stream pg0->pg1
-        pkts.extend(self.create_stream(self.pg0, self.pg1, packet_header,
-                                       self.pg_packet_sizes, count))
+        pkts.extend(
+            self.create_stream(
+                self.pg0, self.pg1, packet_header, self.pg_packet_sizes, count
+            )
+        )
 
         # send packets and verify received packets
         # using same comparison function as End with PSP
 
         # send packets and verify received packets
         # using same comparison function as End with PSP
-        self.send_and_verify_pkts(self.pg0, pkts, self.pg1,
-                                  self.compare_rx_tx_packet_End_PSP)
+        self.send_and_verify_pkts(
+            self.pg0, pkts, self.pg1, self.compare_rx_tx_packet_End_PSP
+        )
 
         # assert nothing was received on the other interface (pg2)
         self.pg2.assert_nothing_captured(remark="mis-directed packet(s)")
 
         # assert nothing was received on the other interface (pg2)
         self.pg2.assert_nothing_captured(remark="mis-directed packet(s)")
@@ -789,21 +874,22 @@ class TestSRv6(VppTestCase):
         self.teardown_interfaces()
 
     def test_SRv6_End_DX6(self):
         self.teardown_interfaces()
 
     def test_SRv6_End_DX6(self):
-        """ Test SRv6 End.DX6 behavior.
-        """
+        """Test SRv6 End.DX6 behavior."""
         # send traffic to one destination interface
         # source and destination interfaces are IPv6 only
         self.setup_interfaces(ipv6=[True, True])
 
         # configure SRv6 localSID End.DX6 behavior
         localsid = VppSRv6LocalSID(
         # send traffic to one destination interface
         # source and destination interfaces are IPv6 only
         self.setup_interfaces(ipv6=[True, True])
 
         # configure SRv6 localSID End.DX6 behavior
         localsid = VppSRv6LocalSID(
-                        self, localsid='A3::C4',
-                        behavior=SRv6LocalSIDBehaviors.SR_BEHAVIOR_DX6,
-                        nh_addr=self.pg1.remote_ip6,
-                        end_psp=0,
-                        sw_if_index=self.pg1.sw_if_index,
-                        vlan_index=0,
-                        fib_table=0)
+            self,
+            localsid="A3::C4",
+            behavior=SRv6LocalSIDBehaviors.SR_BEHAVIOR_DX6,
+            nh_addr=self.pg1.remote_ip6,
+            end_psp=0,
+            sw_if_index=self.pg1.sw_if_index,
+            vlan_index=0,
+            fib_table=0,
+        )
         localsid.add_vpp_config()
         # log the localsids
         self.logger.debug(self.vapi.cli("show sr localsid"))
         localsid.add_vpp_config()
         # log the localsids
         self.logger.debug(self.vapi.cli("show sr localsid"))
@@ -811,30 +897,36 @@ class TestSRv6(VppTestCase):
         # create IPv6 packets with SRH (SL=0)
         # send one packet per packet size
         count = len(self.pg_packet_sizes)
         # create IPv6 packets with SRH (SL=0)
         # send one packet per packet size
         count = len(self.pg_packet_sizes)
-        dst_inner = 'a4::1234'  # inner header destination address
+        dst_inner = "a4::1234"  # inner header destination address
         pkts = []
 
         # packets with SRH, segments-left 0, active segment a3::c4
         packet_header = self.create_packet_header_IPv6_SRH_IPv6(
         pkts = []
 
         # packets with SRH, segments-left 0, active segment a3::c4
         packet_header = self.create_packet_header_IPv6_SRH_IPv6(
-                        dst_inner,
-                        sidlist=['a3::c4', 'a2::', 'a1::'],
-                        segleft=0)
+            dst_inner, sidlist=["a3::c4", "a2::", "a1::"], segleft=0
+        )
         # add to traffic stream pg0->pg1
         # add to traffic stream pg0->pg1
-        pkts.extend(self.create_stream(self.pg0, self.pg1, packet_header,
-                                       self.pg_packet_sizes, count))
+        pkts.extend(
+            self.create_stream(
+                self.pg0, self.pg1, packet_header, self.pg_packet_sizes, count
+            )
+        )
 
         # packets without SRH, IPv6 in IPv6
         # outer IPv6 dest addr is the localsid End.DX6
         packet_header = self.create_packet_header_IPv6_IPv6(
 
         # packets without SRH, IPv6 in IPv6
         # outer IPv6 dest addr is the localsid End.DX6
         packet_header = self.create_packet_header_IPv6_IPv6(
-                                            dst_inner,
-                                            dst_outer='a3::c4')
+            dst_inner, dst_outer="a3::c4"
+        )
         # add to traffic stream pg0->pg1
         # add to traffic stream pg0->pg1
-        pkts.extend(self.create_stream(self.pg0, self.pg1, packet_header,
-                                       self.pg_packet_sizes, count))
+        pkts.extend(
+            self.create_stream(
+                self.pg0, self.pg1, packet_header, self.pg_packet_sizes, count
+            )
+        )
 
         # send packets and verify received packets
 
         # send packets and verify received packets
-        self.send_and_verify_pkts(self.pg0, pkts, self.pg1,
-                                  self.compare_rx_tx_packet_End_DX6)
+        self.send_and_verify_pkts(
+            self.pg0, pkts, self.pg1, self.compare_rx_tx_packet_End_DX6
+        )
 
         # log the localsid counters
         self.logger.info(self.vapi.cli("show sr localsid"))
 
         # log the localsid counters
         self.logger.info(self.vapi.cli("show sr localsid"))
@@ -846,8 +938,7 @@ class TestSRv6(VppTestCase):
         self.teardown_interfaces()
 
     def test_SRv6_End_DT6(self):
         self.teardown_interfaces()
 
     def test_SRv6_End_DT6(self):
-        """ Test SRv6 End.DT6 behavior.
-        """
+        """Test SRv6 End.DT6 behavior."""
         # create three interfaces (1 source, 2 destinations)
         # all interfaces are IPv6 only
         # source interface in global FIB (0)
         # create three interfaces (1 source, 2 destinations)
         # all interfaces are IPv6 only
         # source interface in global FIB (0)
@@ -855,24 +946,31 @@ class TestSRv6(VppTestCase):
         vrf_1 = 1
         ipt = VppIpTable(self, vrf_1, is_ip6=True)
         ipt.add_vpp_config()
         vrf_1 = 1
         ipt = VppIpTable(self, vrf_1, is_ip6=True)
         ipt.add_vpp_config()
-        self.setup_interfaces(ipv6=[True, True, True],
-                              ipv6_table_id=[0, 0, vrf_1])
+        self.setup_interfaces(ipv6=[True, True, True], ipv6_table_id=[0, 0, vrf_1])
 
         # configure FIB entries
         # a4::/64 is reachable
         #     via pg1 in table 0 (global)
         #     and via pg2 in table vrf_1
 
         # configure FIB entries
         # a4::/64 is reachable
         #     via pg1 in table 0 (global)
         #     and via pg2 in table vrf_1
-        route0 = VppIpRoute(self, "a4::", 64,
-                            [VppRoutePath(self.pg1.remote_ip6,
-                                          self.pg1.sw_if_index,
-                                          nh_table_id=0)],
-                            table_id=0)
+        route0 = VppIpRoute(
+            self,
+            "a4::",
+            64,
+            [VppRoutePath(self.pg1.remote_ip6, self.pg1.sw_if_index, nh_table_id=0)],
+            table_id=0,
+        )
         route0.add_vpp_config()
         route0.add_vpp_config()
-        route1 = VppIpRoute(self, "a4::", 64,
-                            [VppRoutePath(self.pg2.remote_ip6,
-                                          self.pg2.sw_if_index,
-                                          nh_table_id=vrf_1)],
-                            table_id=vrf_1)
+        route1 = VppIpRoute(
+            self,
+            "a4::",
+            64,
+            [
+                VppRoutePath(
+                    self.pg2.remote_ip6, self.pg2.sw_if_index, nh_table_id=vrf_1
+                )
+            ],
+            table_id=vrf_1,
+        )
         route1.add_vpp_config()
         self.logger.debug(self.vapi.cli("show ip6 fib"))
 
         route1.add_vpp_config()
         self.logger.debug(self.vapi.cli("show ip6 fib"))
 
@@ -881,13 +979,15 @@ class TestSRv6(VppTestCase):
         # fib_table: where the localsid is installed
         # sw_if_index: in T-variants of localsid this is the vrf table_id
         localsid = VppSRv6LocalSID(
         # fib_table: where the localsid is installed
         # sw_if_index: in T-variants of localsid this is the vrf table_id
         localsid = VppSRv6LocalSID(
-                        self, localsid='A3::C4',
-                        behavior=SRv6LocalSIDBehaviors.SR_BEHAVIOR_DT6,
-                        nh_addr=0,
-                        end_psp=0,
-                        sw_if_index=vrf_1,
-                        vlan_index=0,
-                        fib_table=0)
+            self,
+            localsid="A3::C4",
+            behavior=SRv6LocalSIDBehaviors.SR_BEHAVIOR_DT6,
+            nh_addr=0,
+            end_psp=0,
+            sw_if_index=vrf_1,
+            vlan_index=0,
+            fib_table=0,
+        )
         localsid.add_vpp_config()
         # log the localsids
         self.logger.debug(self.vapi.cli("show sr localsid"))
         localsid.add_vpp_config()
         # log the localsids
         self.logger.debug(self.vapi.cli("show sr localsid"))
@@ -895,31 +995,37 @@ class TestSRv6(VppTestCase):
         # create IPv6 packets with SRH (SL=0)
         # send one packet per packet size
         count = len(self.pg_packet_sizes)
         # create IPv6 packets with SRH (SL=0)
         # send one packet per packet size
         count = len(self.pg_packet_sizes)
-        dst_inner = 'a4::1234'  # inner header destination address
+        dst_inner = "a4::1234"  # inner header destination address
         pkts = []
 
         # packets with SRH, segments-left 0, active segment a3::c4
         packet_header = self.create_packet_header_IPv6_SRH_IPv6(
         pkts = []
 
         # packets with SRH, segments-left 0, active segment a3::c4
         packet_header = self.create_packet_header_IPv6_SRH_IPv6(
-                        dst_inner,
-                        sidlist=['a3::c4', 'a2::', 'a1::'],
-                        segleft=0)
+            dst_inner, sidlist=["a3::c4", "a2::", "a1::"], segleft=0
+        )
         # add to traffic stream pg0->pg1
         # add to traffic stream pg0->pg1
-        pkts.extend(self.create_stream(self.pg0, self.pg2, packet_header,
-                                       self.pg_packet_sizes, count))
+        pkts.extend(
+            self.create_stream(
+                self.pg0, self.pg2, packet_header, self.pg_packet_sizes, count
+            )
+        )
 
         # packets without SRH, IPv6 in IPv6
         # outer IPv6 dest addr is the localsid End.DT6
         packet_header = self.create_packet_header_IPv6_IPv6(
 
         # packets without SRH, IPv6 in IPv6
         # outer IPv6 dest addr is the localsid End.DT6
         packet_header = self.create_packet_header_IPv6_IPv6(
-                                            dst_inner,
-                                            dst_outer='a3::c4')
+            dst_inner, dst_outer="a3::c4"
+        )
         # add to traffic stream pg0->pg1
         # add to traffic stream pg0->pg1
-        pkts.extend(self.create_stream(self.pg0, self.pg2, packet_header,
-                                       self.pg_packet_sizes, count))
+        pkts.extend(
+            self.create_stream(
+                self.pg0, self.pg2, packet_header, self.pg_packet_sizes, count
+            )
+        )
 
         # send packets and verify received packets
         # using same comparison function as End.DX6
 
         # send packets and verify received packets
         # using same comparison function as End.DX6
-        self.send_and_verify_pkts(self.pg0, pkts, self.pg2,
-                                  self.compare_rx_tx_packet_End_DX6)
+        self.send_and_verify_pkts(
+            self.pg0, pkts, self.pg2, self.compare_rx_tx_packet_End_DX6
+        )
 
         # assert nothing was received on the other interface (pg2)
         self.pg1.assert_nothing_captured(remark="mis-directed packet(s)")
 
         # assert nothing was received on the other interface (pg2)
         self.pg1.assert_nothing_captured(remark="mis-directed packet(s)")
@@ -937,8 +1043,7 @@ class TestSRv6(VppTestCase):
         self.teardown_interfaces()
 
     def test_SRv6_End_DX4(self):
         self.teardown_interfaces()
 
     def test_SRv6_End_DX4(self):
-        """ Test SRv6 End.DX4 behavior.
-        """
+        """Test SRv6 End.DX4 behavior."""
         # send traffic to one destination interface
         # source interface is IPv6 only
         # destination interface is IPv4 only
         # send traffic to one destination interface
         # source interface is IPv6 only
         # destination interface is IPv4 only
@@ -946,43 +1051,51 @@ class TestSRv6(VppTestCase):
 
         # configure SRv6 localSID End.DX4 behavior
         localsid = VppSRv6LocalSID(
 
         # configure SRv6 localSID End.DX4 behavior
         localsid = VppSRv6LocalSID(
-                        self, localsid='A3::C4',
-                        behavior=SRv6LocalSIDBehaviors.SR_BEHAVIOR_DX4,
-                        nh_addr=self.pg1.remote_ip4,
-                        end_psp=0,
-                        sw_if_index=self.pg1.sw_if_index,
-                        vlan_index=0,
-                        fib_table=0)
+            self,
+            localsid="A3::C4",
+            behavior=SRv6LocalSIDBehaviors.SR_BEHAVIOR_DX4,
+            nh_addr=self.pg1.remote_ip4,
+            end_psp=0,
+            sw_if_index=self.pg1.sw_if_index,
+            vlan_index=0,
+            fib_table=0,
+        )
         localsid.add_vpp_config()
         # log the localsids
         self.logger.debug(self.vapi.cli("show sr localsid"))
 
         # send one packet per packet size
         count = len(self.pg_packet_sizes)
         localsid.add_vpp_config()
         # log the localsids
         self.logger.debug(self.vapi.cli("show sr localsid"))
 
         # send one packet per packet size
         count = len(self.pg_packet_sizes)
-        dst_inner = '4.1.1.123'  # inner header destination address
+        dst_inner = "4.1.1.123"  # inner header destination address
         pkts = []
 
         # packets with SRH, segments-left 0, active segment a3::c4
         packet_header = self.create_packet_header_IPv6_SRH_IPv4(
         pkts = []
 
         # packets with SRH, segments-left 0, active segment a3::c4
         packet_header = self.create_packet_header_IPv6_SRH_IPv4(
-                        dst_inner,
-                        sidlist=['a3::c4', 'a2::', 'a1::'],
-                        segleft=0)
+            dst_inner, sidlist=["a3::c4", "a2::", "a1::"], segleft=0
+        )
         # add to traffic stream pg0->pg1
         # add to traffic stream pg0->pg1
-        pkts.extend(self.create_stream(self.pg0, self.pg1, packet_header,
-                                       self.pg_packet_sizes, count))
+        pkts.extend(
+            self.create_stream(
+                self.pg0, self.pg1, packet_header, self.pg_packet_sizes, count
+            )
+        )
 
         # packets without SRH, IPv4 in IPv6
         # outer IPv6 dest addr is the localsid End.DX4
         packet_header = self.create_packet_header_IPv6_IPv4(
 
         # packets without SRH, IPv4 in IPv6
         # outer IPv6 dest addr is the localsid End.DX4
         packet_header = self.create_packet_header_IPv6_IPv4(
-                                            dst_inner,
-                                            dst_outer='a3::c4')
+            dst_inner, dst_outer="a3::c4"
+        )
         # add to traffic stream pg0->pg1
         # add to traffic stream pg0->pg1
-        pkts.extend(self.create_stream(self.pg0, self.pg1, packet_header,
-                                       self.pg_packet_sizes, count))
+        pkts.extend(
+            self.create_stream(
+                self.pg0, self.pg1, packet_header, self.pg_packet_sizes, count
+            )
+        )
 
         # send packets and verify received packets
 
         # send packets and verify received packets
-        self.send_and_verify_pkts(self.pg0, pkts, self.pg1,
-                                  self.compare_rx_tx_packet_End_DX4)
+        self.send_and_verify_pkts(
+            self.pg0, pkts, self.pg1, self.compare_rx_tx_packet_End_DX4
+        )
 
         # log the localsid counters
         self.logger.info(self.vapi.cli("show sr localsid"))
 
         # log the localsid counters
         self.logger.info(self.vapi.cli("show sr localsid"))
@@ -994,8 +1107,7 @@ class TestSRv6(VppTestCase):
         self.teardown_interfaces()
 
     def test_SRv6_End_DT4(self):
         self.teardown_interfaces()
 
     def test_SRv6_End_DT4(self):
-        """ Test SRv6 End.DT4 behavior.
-        """
+        """Test SRv6 End.DT4 behavior."""
         # create three interfaces (1 source, 2 destinations)
         # source interface is IPv6-only
         # destination interfaces are IPv4 only
         # create three interfaces (1 source, 2 destinations)
         # source interface is IPv6-only
         # destination interfaces are IPv4 only
@@ -1004,26 +1116,36 @@ class TestSRv6(VppTestCase):
         vrf_1 = 1
         ipt = VppIpTable(self, vrf_1)
         ipt.add_vpp_config()
         vrf_1 = 1
         ipt = VppIpTable(self, vrf_1)
         ipt.add_vpp_config()
-        self.setup_interfaces(ipv6=[True, False, False],
-                              ipv4=[False, True, True],
-                              ipv6_table_id=[0, 0, 0],
-                              ipv4_table_id=[0, 0, vrf_1])
+        self.setup_interfaces(
+            ipv6=[True, False, False],
+            ipv4=[False, True, True],
+            ipv6_table_id=[0, 0, 0],
+            ipv4_table_id=[0, 0, vrf_1],
+        )
 
         # configure FIB entries
         # 4.1.1.0/24 is reachable
         #     via pg1 in table 0 (global)
         #     and via pg2 in table vrf_1
 
         # configure FIB entries
         # 4.1.1.0/24 is reachable
         #     via pg1 in table 0 (global)
         #     and via pg2 in table vrf_1
-        route0 = VppIpRoute(self, "4.1.1.0", 24,
-                            [VppRoutePath(self.pg1.remote_ip4,
-                                          self.pg1.sw_if_index,
-                                          nh_table_id=0)],
-                            table_id=0)
+        route0 = VppIpRoute(
+            self,
+            "4.1.1.0",
+            24,
+            [VppRoutePath(self.pg1.remote_ip4, self.pg1.sw_if_index, nh_table_id=0)],
+            table_id=0,
+        )
         route0.add_vpp_config()
         route0.add_vpp_config()
-        route1 = VppIpRoute(self, "4.1.1.0", 24,
-                            [VppRoutePath(self.pg2.remote_ip4,
-                                          self.pg2.sw_if_index,
-                                          nh_table_id=vrf_1)],
-                            table_id=vrf_1)
+        route1 = VppIpRoute(
+            self,
+            "4.1.1.0",
+            24,
+            [
+                VppRoutePath(
+                    self.pg2.remote_ip4, self.pg2.sw_if_index, nh_table_id=vrf_1
+                )
+            ],
+            table_id=vrf_1,
+        )
         route1.add_vpp_config()
         self.logger.debug(self.vapi.cli("show ip fib"))
 
         route1.add_vpp_config()
         self.logger.debug(self.vapi.cli("show ip fib"))
 
@@ -1032,13 +1154,15 @@ class TestSRv6(VppTestCase):
         # fib_table: where the localsid is installed
         # sw_if_index: in T-variants of localsid: vrf table_id
         localsid = VppSRv6LocalSID(
         # fib_table: where the localsid is installed
         # sw_if_index: in T-variants of localsid: vrf table_id
         localsid = VppSRv6LocalSID(
-                        self, localsid='A3::C4',
-                        behavior=SRv6LocalSIDBehaviors.SR_BEHAVIOR_DT4,
-                        nh_addr=0,
-                        end_psp=0,
-                        sw_if_index=vrf_1,
-                        vlan_index=0,
-                        fib_table=0)
+            self,
+            localsid="A3::C4",
+            behavior=SRv6LocalSIDBehaviors.SR_BEHAVIOR_DT4,
+            nh_addr=0,
+            end_psp=0,
+            sw_if_index=vrf_1,
+            vlan_index=0,
+            fib_table=0,
+        )
         localsid.add_vpp_config()
         # log the localsids
         self.logger.debug(self.vapi.cli("show sr localsid"))
         localsid.add_vpp_config()
         # log the localsids
         self.logger.debug(self.vapi.cli("show sr localsid"))
@@ -1046,31 +1170,37 @@ class TestSRv6(VppTestCase):
         # create IPv6 packets with SRH (SL=0)
         # send one packet per packet size
         count = len(self.pg_packet_sizes)
         # create IPv6 packets with SRH (SL=0)
         # send one packet per packet size
         count = len(self.pg_packet_sizes)
-        dst_inner = '4.1.1.123'  # inner header destination address
+        dst_inner = "4.1.1.123"  # inner header destination address
         pkts = []
 
         # packets with SRH, segments-left 0, active segment a3::c4
         packet_header = self.create_packet_header_IPv6_SRH_IPv4(
         pkts = []
 
         # packets with SRH, segments-left 0, active segment a3::c4
         packet_header = self.create_packet_header_IPv6_SRH_IPv4(
-                        dst_inner,
-                        sidlist=['a3::c4', 'a2::', 'a1::'],
-                        segleft=0)
+            dst_inner, sidlist=["a3::c4", "a2::", "a1::"], segleft=0
+        )
         # add to traffic stream pg0->pg1
         # add to traffic stream pg0->pg1
-        pkts.extend(self.create_stream(self.pg0, self.pg2, packet_header,
-                                       self.pg_packet_sizes, count))
+        pkts.extend(
+            self.create_stream(
+                self.pg0, self.pg2, packet_header, self.pg_packet_sizes, count
+            )
+        )
 
         # packets without SRH, IPv6 in IPv6
         # outer IPv6 dest addr is the localsid End.DX4
         packet_header = self.create_packet_header_IPv6_IPv4(
 
         # packets without SRH, IPv6 in IPv6
         # outer IPv6 dest addr is the localsid End.DX4
         packet_header = self.create_packet_header_IPv6_IPv4(
-                                            dst_inner,
-                                            dst_outer='a3::c4')
+            dst_inner, dst_outer="a3::c4"
+        )
         # add to traffic stream pg0->pg1
         # add to traffic stream pg0->pg1
-        pkts.extend(self.create_stream(self.pg0, self.pg2, packet_header,
-                                       self.pg_packet_sizes, count))
+        pkts.extend(
+            self.create_stream(
+                self.pg0, self.pg2, packet_header, self.pg_packet_sizes, count
+            )
+        )
 
         # send packets and verify received packets
         # using same comparison function as End.DX4
 
         # send packets and verify received packets
         # using same comparison function as End.DX4
-        self.send_and_verify_pkts(self.pg0, pkts, self.pg2,
-                                  self.compare_rx_tx_packet_End_DX4)
+        self.send_and_verify_pkts(
+            self.pg0, pkts, self.pg2, self.compare_rx_tx_packet_End_DX4
+        )
 
         # assert nothing was received on the other interface (pg2)
         self.pg1.assert_nothing_captured(remark="mis-directed packet(s)")
 
         # assert nothing was received on the other interface (pg2)
         self.pg1.assert_nothing_captured(remark="mis-directed packet(s)")
@@ -1088,21 +1218,22 @@ class TestSRv6(VppTestCase):
         self.teardown_interfaces()
 
     def test_SRv6_End_DX2(self):
         self.teardown_interfaces()
 
     def test_SRv6_End_DX2(self):
-        """ Test SRv6 End.DX2 behavior.
-        """
+        """Test SRv6 End.DX2 behavior."""
         # send traffic to one destination interface
         # source interface is IPv6 only
         self.setup_interfaces(ipv6=[True, False], ipv4=[False, False])
 
         # configure SRv6 localSID End.DX2 behavior
         localsid = VppSRv6LocalSID(
         # send traffic to one destination interface
         # source interface is IPv6 only
         self.setup_interfaces(ipv6=[True, False], ipv4=[False, False])
 
         # configure SRv6 localSID End.DX2 behavior
         localsid = VppSRv6LocalSID(
-                        self, localsid='A3::C4',
-                        behavior=SRv6LocalSIDBehaviors.SR_BEHAVIOR_DX2,
-                        nh_addr=0,
-                        end_psp=0,
-                        sw_if_index=self.pg1.sw_if_index,
-                        vlan_index=0,
-                        fib_table=0)
+            self,
+            localsid="A3::C4",
+            behavior=SRv6LocalSIDBehaviors.SR_BEHAVIOR_DX2,
+            nh_addr=0,
+            end_psp=0,
+            sw_if_index=self.pg1.sw_if_index,
+            vlan_index=0,
+            fib_table=0,
+        )
         localsid.add_vpp_config()
         # log the localsids
         self.logger.debug(self.vapi.cli("show sr localsid"))
         localsid.add_vpp_config()
         # log the localsids
         self.logger.debug(self.vapi.cli("show sr localsid"))
@@ -1114,46 +1245,53 @@ class TestSRv6(VppTestCase):
         # packets with SRH, segments-left 0, active segment a3::c4
         # L2 has no dot1q header
         packet_header = self.create_packet_header_IPv6_SRH_L2(
         # packets with SRH, segments-left 0, active segment a3::c4
         # L2 has no dot1q header
         packet_header = self.create_packet_header_IPv6_SRH_L2(
-                            sidlist=['a3::c4', 'a2::', 'a1::'],
-                            segleft=0,
-                            vlan=0)
+            sidlist=["a3::c4", "a2::", "a1::"], segleft=0, vlan=0
+        )
         # add to traffic stream pg0->pg1
         # add to traffic stream pg0->pg1
-        pkts.extend(self.create_stream(self.pg0, self.pg1, packet_header,
-                                       self.pg_packet_sizes, count))
+        pkts.extend(
+            self.create_stream(
+                self.pg0, self.pg1, packet_header, self.pg_packet_sizes, count
+            )
+        )
 
         # packets with SRH, segments-left 0, active segment a3::c4
         # L2 has dot1q header
         packet_header = self.create_packet_header_IPv6_SRH_L2(
 
         # packets with SRH, segments-left 0, active segment a3::c4
         # L2 has dot1q header
         packet_header = self.create_packet_header_IPv6_SRH_L2(
-                            sidlist=['a3::c4', 'a2::', 'a1::'],
-                            segleft=0,
-                            vlan=123)
+            sidlist=["a3::c4", "a2::", "a1::"], segleft=0, vlan=123
+        )
         # add to traffic stream pg0->pg1
         # add to traffic stream pg0->pg1
-        pkts.extend(self.create_stream(self.pg0, self.pg1, packet_header,
-                                       self.pg_packet_sizes, count))
+        pkts.extend(
+            self.create_stream(
+                self.pg0, self.pg1, packet_header, self.pg_packet_sizes, count
+            )
+        )
 
         # packets without SRH, L2 in IPv6
         # outer IPv6 dest addr is the localsid End.DX2
         # L2 has no dot1q header
 
         # packets without SRH, L2 in IPv6
         # outer IPv6 dest addr is the localsid End.DX2
         # L2 has no dot1q header
-        packet_header = self.create_packet_header_IPv6_L2(
-                                            dst_outer='a3::c4',
-                                            vlan=0)
+        packet_header = self.create_packet_header_IPv6_L2(dst_outer="a3::c4", vlan=0)
         # add to traffic stream pg0->pg1
         # add to traffic stream pg0->pg1
-        pkts.extend(self.create_stream(self.pg0, self.pg1, packet_header,
-                                       self.pg_packet_sizes, count))
+        pkts.extend(
+            self.create_stream(
+                self.pg0, self.pg1, packet_header, self.pg_packet_sizes, count
+            )
+        )
 
         # packets without SRH, L2 in IPv6
         # outer IPv6 dest addr is the localsid End.DX2
         # L2 has dot1q header
 
         # packets without SRH, L2 in IPv6
         # outer IPv6 dest addr is the localsid End.DX2
         # L2 has dot1q header
-        packet_header = self.create_packet_header_IPv6_L2(
-                                            dst_outer='a3::c4',
-                                            vlan=123)
+        packet_header = self.create_packet_header_IPv6_L2(dst_outer="a3::c4", vlan=123)
         # add to traffic stream pg0->pg1
         # add to traffic stream pg0->pg1
-        pkts.extend(self.create_stream(self.pg0, self.pg1, packet_header,
-                                       self.pg_packet_sizes, count))
+        pkts.extend(
+            self.create_stream(
+                self.pg0, self.pg1, packet_header, self.pg_packet_sizes, count
+            )
+        )
 
         # send packets and verify received packets
 
         # send packets and verify received packets
-        self.send_and_verify_pkts(self.pg0, pkts, self.pg1,
-                                  self.compare_rx_tx_packet_End_DX2)
+        self.send_and_verify_pkts(
+            self.pg0, pkts, self.pg1, self.compare_rx_tx_packet_End_DX2
+        )
 
         # log the localsid counters
         self.logger.info(self.vapi.cli("show sr localsid"))
 
         # log the localsid counters
         self.logger.info(self.vapi.cli("show sr localsid"))
@@ -1166,18 +1304,17 @@ class TestSRv6(VppTestCase):
 
     @unittest.skipUnless(0, "PC to fix")
     def test_SRv6_T_Insert_Classifier(self):
 
     @unittest.skipUnless(0, "PC to fix")
     def test_SRv6_T_Insert_Classifier(self):
-        """ Test SRv6 Transit.Insert behavior (IPv6 only).
-            steer packets using the classifier
+        """Test SRv6 Transit.Insert behavior (IPv6 only).
+        steer packets using the classifier
         """
         # send traffic to one destination interface
         # source and destination are IPv6 only
         self.setup_interfaces(ipv6=[False, False, False, True, True])
 
         # configure FIB entries
         """
         # send traffic to one destination interface
         # source and destination are IPv6 only
         self.setup_interfaces(ipv6=[False, False, False, True, True])
 
         # configure FIB entries
-        route = VppIpRoute(self, "a4::", 64,
-                           [VppRoutePath(
-                               self.pg4.remote_ip6,
-                               self.pg4.sw_if_index)])
+        route = VppIpRoute(
+            self, "a4::", 64, [VppRoutePath(self.pg4.remote_ip6, self.pg4.sw_if_index)]
+        )
         route.add_vpp_config()
 
         # configure encaps IPv6 source address
         route.add_vpp_config()
 
         # configure encaps IPv6 source address
@@ -1185,16 +1322,19 @@ class TestSRv6(VppTestCase):
         # TODO: API?
         self.vapi.cli("set sr encaps source addr a3::")
 
         # TODO: API?
         self.vapi.cli("set sr encaps source addr a3::")
 
-        bsid = 'a3::9999:1'
+        bsid = "a3::9999:1"
         # configure SRv6 Policy
         # Note: segment list order: first -> last
         sr_policy = VppSRv6Policy(
         # configure SRv6 Policy
         # Note: segment list order: first -> last
         sr_policy = VppSRv6Policy(
-            self, bsid=bsid,
+            self,
+            bsid=bsid,
             is_encap=0,
             sr_type=SRv6PolicyType.SR_POLICY_TYPE_DEFAULT,
             is_encap=0,
             sr_type=SRv6PolicyType.SR_POLICY_TYPE_DEFAULT,
-            weight=1, fib_table=0,
-            segments=['a4::', 'a5::', 'a6::c7'],
-            source='a3::')
+            weight=1,
+            fib_table=0,
+            segments=["a4::", "a5::", "a6::c7"],
+            source="a3::",
+        )
         sr_policy.add_vpp_config()
         self.sr_policy = sr_policy
 
         sr_policy.add_vpp_config()
         self.sr_policy = sr_policy
 
@@ -1203,75 +1343,79 @@ class TestSRv6(VppTestCase):
 
         # add classify table
         # mask on dst ip address prefix a7::/8
 
         # add classify table
         # mask on dst ip address prefix a7::/8
-        mask = '{!s:0<16}'.format('ff')
+        mask = "{!s:0<16}".format("ff")
         r = self.vapi.classify_add_del_table(
             1,
             binascii.unhexlify(mask),
             match_n_vectors=(len(mask) - 1) // 32 + 1,
             current_data_flag=1,
         r = self.vapi.classify_add_del_table(
             1,
             binascii.unhexlify(mask),
             match_n_vectors=(len(mask) - 1) // 32 + 1,
             current_data_flag=1,
-            skip_n_vectors=2)  # data offset
-        self.assertIsNotNone(r, 'No response msg for add_del_table')
+            skip_n_vectors=2,
+        )  # data offset
+        self.assertIsNotNone(r, "No response msg for add_del_table")
         table_index = r.new_table_index
 
         # add the source routing node as a ip6 inacl netxt node
         table_index = r.new_table_index
 
         # add the source routing node as a ip6 inacl netxt node
-        r = self.vapi.add_node_next('ip6-inacl',
-                                    'sr-pl-rewrite-insert')
+        r = self.vapi.add_node_next("ip6-inacl", "sr-pl-rewrite-insert")
         inacl_next_node_index = r.node_index
 
         inacl_next_node_index = r.node_index
 
-        match = '{!s:0<16}'.format('a7')
+        match = "{!s:0<16}".format("a7")
         r = self.vapi.classify_add_del_session(
             1,
             table_index,
             binascii.unhexlify(match),
             hit_next_index=inacl_next_node_index,
             action=3,
         r = self.vapi.classify_add_del_session(
             1,
             table_index,
             binascii.unhexlify(match),
             hit_next_index=inacl_next_node_index,
             action=3,
-            metadata=0)  # sr policy index
-        self.assertIsNotNone(r, 'No response msg for add_del_session')
+            metadata=0,
+        )  # sr policy index
+        self.assertIsNotNone(r, "No response msg for add_del_session")
 
         # log the classify table used in the steering policy
         self.logger.info(self.vapi.cli("show classify table"))
 
         r = self.vapi.input_acl_set_interface(
 
         # log the classify table used in the steering policy
         self.logger.info(self.vapi.cli("show classify table"))
 
         r = self.vapi.input_acl_set_interface(
-            is_add=1,
-            sw_if_index=self.pg3.sw_if_index,
-            ip6_table_index=table_index)
-        self.assertIsNotNone(r,
-                             'No response msg for input_acl_set_interface')
+            is_add=1, sw_if_index=self.pg3.sw_if_index, ip6_table_index=table_index
+        )
+        self.assertIsNotNone(r, "No response msg for input_acl_set_interface")
 
         # log the ip6 inacl
         self.logger.info(self.vapi.cli("show inacl type ip6"))
 
         # create packets
         count = len(self.pg_packet_sizes)
 
         # log the ip6 inacl
         self.logger.info(self.vapi.cli("show inacl type ip6"))
 
         # create packets
         count = len(self.pg_packet_sizes)
-        dst_inner = 'a7::1234'
+        dst_inner = "a7::1234"
         pkts = []
 
         # create IPv6 packets without SRH
         packet_header = self.create_packet_header_IPv6(dst_inner)
         # create traffic stream pg3->pg4
         pkts = []
 
         # create IPv6 packets without SRH
         packet_header = self.create_packet_header_IPv6(dst_inner)
         # create traffic stream pg3->pg4
-        pkts.extend(self.create_stream(self.pg3, self.pg4, packet_header,
-                                       self.pg_packet_sizes, count))
+        pkts.extend(
+            self.create_stream(
+                self.pg3, self.pg4, packet_header, self.pg_packet_sizes, count
+            )
+        )
 
         # create IPv6 packets with SRH
         # packets with segments-left 1, active segment a7::
         packet_header = self.create_packet_header_IPv6_SRH(
 
         # create IPv6 packets with SRH
         # packets with segments-left 1, active segment a7::
         packet_header = self.create_packet_header_IPv6_SRH(
-            sidlist=['a8::', 'a7::', 'a6::'],
-            segleft=1)
+            sidlist=["a8::", "a7::", "a6::"], segleft=1
+        )
         # create traffic stream pg3->pg4
         # create traffic stream pg3->pg4
-        pkts.extend(self.create_stream(self.pg3, self.pg4, packet_header,
-                                       self.pg_packet_sizes, count))
+        pkts.extend(
+            self.create_stream(
+                self.pg3, self.pg4, packet_header, self.pg_packet_sizes, count
+            )
+        )
 
         # send packets and verify received packets
 
         # send packets and verify received packets
-        self.send_and_verify_pkts(self.pg3, pkts, self.pg4,
-                                  self.compare_rx_tx_packet_T_Insert)
+        self.send_and_verify_pkts(
+            self.pg3, pkts, self.pg4, self.compare_rx_tx_packet_T_Insert
+        )
 
         # remove the interface l2 input feature
         r = self.vapi.input_acl_set_interface(
 
         # remove the interface l2 input feature
         r = self.vapi.input_acl_set_interface(
-            is_add=0,
-            sw_if_index=self.pg3.sw_if_index,
-            ip6_table_index=table_index)
-        self.assertIsNotNone(r,
-                             'No response msg for input_acl_set_interface')
+            is_add=0, sw_if_index=self.pg3.sw_if_index, ip6_table_index=table_index
+        )
+        self.assertIsNotNone(r, "No response msg for input_acl_set_interface")
 
         # log the ip6 inacl after cleaning
         self.logger.info(self.vapi.cli("show inacl type ip6"))
 
         # log the ip6 inacl after cleaning
         self.logger.info(self.vapi.cli("show inacl type ip6"))
@@ -1289,16 +1433,14 @@ class TestSRv6(VppTestCase):
 
         # remove classify session and table
         r = self.vapi.classify_add_del_session(
 
         # remove classify session and table
         r = self.vapi.classify_add_del_session(
-            0,
-            table_index,
-            binascii.unhexlify(match))
-        self.assertIsNotNone(r, 'No response msg for add_del_session')
+            0, table_index, binascii.unhexlify(match)
+        )
+        self.assertIsNotNone(r, "No response msg for add_del_session")
 
         r = self.vapi.classify_add_del_table(
 
         r = self.vapi.classify_add_del_table(
-            0,
-            binascii.unhexlify(mask),
-            table_index=table_index)
-        self.assertIsNotNone(r, 'No response msg for add_del_table')
+            0, binascii.unhexlify(mask), table_index=table_index
+        )
+        self.assertIsNotNone(r, "No response msg for add_del_table")
 
         self.logger.info(self.vapi.cli("show classify table"))
 
 
         self.logger.info(self.vapi.cli("show classify table"))
 
@@ -1309,7 +1451,7 @@ class TestSRv6(VppTestCase):
         self.teardown_interfaces()
 
     def compare_rx_tx_packet_T_Encaps(self, tx_pkt, rx_pkt):
         self.teardown_interfaces()
 
     def compare_rx_tx_packet_T_Encaps(self, tx_pkt, rx_pkt):
-        """ Compare input and output packet after passing T.Encaps
+        """Compare input and output packet after passing T.Encaps
 
         :param tx_pkt: transmitted packet
         :param rx_pkt: received packet
 
         :param tx_pkt: transmitted packet
         :param rx_pkt: received packet
@@ -1350,7 +1492,7 @@ class TestSRv6(VppTestCase):
         # rx'ed seglist should be equal to expected seglist
         self.assertEqual(rx_srh.addresses, tx_seglist)
         # segleft should be equal to size expected seglist-1
         # rx'ed seglist should be equal to expected seglist
         self.assertEqual(rx_srh.addresses, tx_seglist)
         # segleft should be equal to size expected seglist-1
-        self.assertEqual(rx_srh.segleft, len(tx_seglist)-1)
+        self.assertEqual(rx_srh.segleft, len(tx_seglist) - 1)
         # segleft should be equal to lastentry
         self.assertEqual(rx_srh.segleft, rx_srh.lastentry)
 
         # segleft should be equal to lastentry
         self.assertEqual(rx_srh.segleft, rx_srh.lastentry)
 
@@ -1364,7 +1506,7 @@ class TestSRv6(VppTestCase):
         self.logger.debug("packet verification: SUCCESS")
 
     def compare_rx_tx_packet_T_Encaps_IPv4(self, tx_pkt, rx_pkt):
         self.logger.debug("packet verification: SUCCESS")
 
     def compare_rx_tx_packet_T_Encaps_IPv4(self, tx_pkt, rx_pkt):
-        """ Compare input and output packet after passing T.Encaps for IPv4
+        """Compare input and output packet after passing T.Encaps for IPv4
 
         :param tx_pkt: transmitted packet
         :param rx_pkt: received packet
 
         :param tx_pkt: transmitted packet
         :param rx_pkt: received packet
@@ -1404,7 +1546,7 @@ class TestSRv6(VppTestCase):
         # rx'ed seglist should be equal to seglist
         self.assertEqual(rx_srh.addresses, tx_seglist)
         # segleft should be equal to size seglist-1
         # rx'ed seglist should be equal to seglist
         self.assertEqual(rx_srh.addresses, tx_seglist)
         # segleft should be equal to size seglist-1
-        self.assertEqual(rx_srh.segleft, len(tx_seglist)-1)
+        self.assertEqual(rx_srh.segleft, len(tx_seglist) - 1)
         # segleft should be equal to lastentry
         self.assertEqual(rx_srh.segleft, rx_srh.lastentry)
 
         # segleft should be equal to lastentry
         self.assertEqual(rx_srh.segleft, rx_srh.lastentry)
 
@@ -1423,7 +1565,7 @@ class TestSRv6(VppTestCase):
         self.logger.debug("packet verification: SUCCESS")
 
     def compare_rx_tx_packet_T_Encaps_L2(self, tx_pkt, rx_pkt):
         self.logger.debug("packet verification: SUCCESS")
 
     def compare_rx_tx_packet_T_Encaps_L2(self, tx_pkt, rx_pkt):
-        """ Compare input and output packet after passing T.Encaps for L2
+        """Compare input and output packet after passing T.Encaps for L2
 
         :param tx_pkt: transmitted packet
         :param rx_pkt: received packet
 
         :param tx_pkt: transmitted packet
         :param rx_pkt: received packet
@@ -1461,7 +1603,7 @@ class TestSRv6(VppTestCase):
         # rx'ed seglist should be equal to seglist
         self.assertEqual(rx_srh.addresses, tx_seglist)
         # segleft should be equal to size seglist-1
         # rx'ed seglist should be equal to seglist
         self.assertEqual(rx_srh.addresses, tx_seglist)
         # segleft should be equal to size seglist-1
-        self.assertEqual(rx_srh.segleft, len(tx_seglist)-1)
+        self.assertEqual(rx_srh.segleft, len(tx_seglist) - 1)
         # segleft should be equal to lastentry
         self.assertEqual(rx_srh.segleft, rx_srh.lastentry)
         # nh should be "No Next Header" (143)
         # segleft should be equal to lastentry
         self.assertEqual(rx_srh.segleft, rx_srh.lastentry)
         # nh should be "No Next Header" (143)
@@ -1473,7 +1615,7 @@ class TestSRv6(VppTestCase):
         self.logger.debug("packet verification: SUCCESS")
 
     def compare_rx_tx_packet_T_Insert(self, tx_pkt, rx_pkt):
         self.logger.debug("packet verification: SUCCESS")
 
     def compare_rx_tx_packet_T_Insert(self, tx_pkt, rx_pkt):
-        """ Compare input and output packet after passing T.Insert
+        """Compare input and output packet after passing T.Insert
 
         :param tx_pkt: transmitted packet
         :param rx_pkt: received packet
 
         :param tx_pkt: transmitted packet
         :param rx_pkt: received packet
@@ -1529,7 +1671,7 @@ class TestSRv6(VppTestCase):
         # rx'ed seglist should be equal to expected seglist
         self.assertEqual(rx_srh.addresses, tx_seglist)
         # segleft should be equal to size(expected seglist)-1
         # rx'ed seglist should be equal to expected seglist
         self.assertEqual(rx_srh.addresses, tx_seglist)
         # segleft should be equal to size(expected seglist)-1
-        self.assertEqual(rx_srh.segleft, len(tx_seglist)-1)
+        self.assertEqual(rx_srh.segleft, len(tx_seglist) - 1)
         # segleft should be equal to lastentry
         self.assertEqual(rx_srh.segleft, rx_srh.lastentry)
 
         # segleft should be equal to lastentry
         self.assertEqual(rx_srh.segleft, rx_srh.lastentry)
 
@@ -1556,7 +1698,7 @@ class TestSRv6(VppTestCase):
         self.logger.debug("packet verification: SUCCESS")
 
     def compare_rx_tx_packet_End(self, tx_pkt, rx_pkt):
         self.logger.debug("packet verification: SUCCESS")
 
     def compare_rx_tx_packet_End(self, tx_pkt, rx_pkt):
-        """ Compare input and output packet after passing End (without PSP)
+        """Compare input and output packet after passing End (without PSP)
 
         :param tx_pkt: transmitted packet
         :param rx_pkt: received packet
 
         :param tx_pkt: transmitted packet
         :param rx_pkt: received packet
@@ -1596,7 +1738,7 @@ class TestSRv6(VppTestCase):
             # sidlist should be unchanged
             self.assertEqual(rx_srh.addresses, tx_srh.addresses)
             # segleft should have been decremented
             # sidlist should be unchanged
             self.assertEqual(rx_srh.addresses, tx_srh.addresses)
             # segleft should have been decremented
-            self.assertEqual(rx_srh.segleft, tx_srh.segleft-1)
+            self.assertEqual(rx_srh.segleft, tx_srh.segleft - 1)
             # received ip.dst should be equal to sidlist[segleft]
             self.assertEqual(rx_ip.dst, rx_srh.addresses[rx_srh.segleft])
             # lastentry should be unchanged
             # received ip.dst should be equal to sidlist[segleft]
             self.assertEqual(rx_ip.dst, rx_srh.addresses[rx_srh.segleft])
             # lastentry should be unchanged
@@ -1605,7 +1747,7 @@ class TestSRv6(VppTestCase):
             self.assertEqual(rx_ip2.src, tx_ip2.src)
             self.assertEqual(rx_ip2.dst, tx_ip2.dst)
         # else:  # tx_ip.segleft == 0
             self.assertEqual(rx_ip2.src, tx_ip2.src)
             self.assertEqual(rx_ip2.dst, tx_ip2.dst)
         # else:  # tx_ip.segleft == 0
-            # TODO: Does this work with 2 SRHs in ingress packet?
+        # TODO: Does this work with 2 SRHs in ingress packet?
 
         # UDP layer should be unchanged
         self.assertEqual(rx_udp, tx_udp)
 
         # UDP layer should be unchanged
         self.assertEqual(rx_udp, tx_udp)
@@ -1613,7 +1755,7 @@ class TestSRv6(VppTestCase):
         self.logger.debug("packet verification: SUCCESS")
 
     def compare_rx_tx_packet_End_PSP(self, tx_pkt, rx_pkt):
         self.logger.debug("packet verification: SUCCESS")
 
     def compare_rx_tx_packet_End_PSP(self, tx_pkt, rx_pkt):
-        """ Compare input and output packet after passing End with PSP
+        """Compare input and output packet after passing End with PSP
 
         :param tx_pkt: transmitted packet
         :param rx_pkt: received packet
 
         :param tx_pkt: transmitted packet
         :param rx_pkt: received packet
@@ -1658,7 +1800,7 @@ class TestSRv6(VppTestCase):
             # sidlist should be unchanged
             self.assertEqual(rx_srh.addresses, tx_srh.addresses)
             # segleft should have been decremented
             # sidlist should be unchanged
             self.assertEqual(rx_srh.addresses, tx_srh.addresses)
             # segleft should have been decremented
-            self.assertEqual(rx_srh.segleft, tx_srh.segleft-1)
+            self.assertEqual(rx_srh.segleft, tx_srh.segleft - 1)
             # received ip.dst should be equal to sidlist[segleft]
             self.assertEqual(rx_ip.dst, rx_srh.addresses[rx_srh.segleft])
             # lastentry should be unchanged
             # received ip.dst should be equal to sidlist[segleft]
             self.assertEqual(rx_ip.dst, rx_srh.addresses[rx_srh.segleft])
             # lastentry should be unchanged
@@ -1674,7 +1816,7 @@ class TestSRv6(VppTestCase):
             # outer IPv6 header ip.src should be equal to tx'ed ip.src
             self.assertEqual(rx_ip.src, tx_ip.src)
             # outer IPv6 header ip.dst should be = to tx'ed sidlist[segleft-1]
             # outer IPv6 header ip.src should be equal to tx'ed ip.src
             self.assertEqual(rx_ip.src, tx_ip.src)
             # outer IPv6 header ip.dst should be = to tx'ed sidlist[segleft-1]
-            self.assertEqual(rx_ip.dst, tx_srh.addresses[tx_srh.segleft-1])
+            self.assertEqual(rx_ip.dst, tx_srh.addresses[tx_srh.segleft - 1])
 
         # UDP layer should be unchanged
         self.assertEqual(rx_udp, tx_udp)
 
         # UDP layer should be unchanged
         self.assertEqual(rx_udp, tx_udp)
@@ -1682,7 +1824,7 @@ class TestSRv6(VppTestCase):
         self.logger.debug("packet verification: SUCCESS")
 
     def compare_rx_tx_packet_End_DX6(self, tx_pkt, rx_pkt):
         self.logger.debug("packet verification: SUCCESS")
 
     def compare_rx_tx_packet_End_DX6(self, tx_pkt, rx_pkt):
-        """ Compare input and output packet after passing End.DX6
+        """Compare input and output packet after passing End.DX6
 
         :param tx_pkt: transmitted packet
         :param rx_pkt: received packet
 
         :param tx_pkt: transmitted packet
         :param rx_pkt: received packet
@@ -1714,7 +1856,7 @@ class TestSRv6(VppTestCase):
         self.logger.debug("packet verification: SUCCESS")
 
     def compare_rx_tx_packet_End_DX4(self, tx_pkt, rx_pkt):
         self.logger.debug("packet verification: SUCCESS")
 
     def compare_rx_tx_packet_End_DX4(self, tx_pkt, rx_pkt):
-        """ Compare input and output packet after passing End.DX4
+        """Compare input and output packet after passing End.DX4
 
         :param tx_pkt: transmitted packet
         :param rx_pkt: received packet
 
         :param tx_pkt: transmitted packet
         :param rx_pkt: received packet
@@ -1751,7 +1893,7 @@ class TestSRv6(VppTestCase):
         self.logger.debug("packet verification: SUCCESS")
 
     def compare_rx_tx_packet_End_DX2(self, tx_pkt, rx_pkt):
         self.logger.debug("packet verification: SUCCESS")
 
     def compare_rx_tx_packet_End_DX2(self, tx_pkt, rx_pkt):
-        """ Compare input and output packet after passing End.DX2
+        """Compare input and output packet after passing End.DX2
 
         :param tx_pkt: transmitted packet
         :param rx_pkt: received packet
 
         :param tx_pkt: transmitted packet
         :param rx_pkt: received packet
@@ -1780,8 +1922,7 @@ class TestSRv6(VppTestCase):
 
         self.logger.debug("packet verification: SUCCESS")
 
 
         self.logger.debug("packet verification: SUCCESS")
 
-    def create_stream(self, src_if, dst_if, packet_header, packet_sizes,
-                      count):
+    def create_stream(self, src_if, dst_if, packet_header, packet_sizes, count):
         """Create SRv6 input packet stream for defined interface.
 
         :param VppInterface src_if: Interface to create packet stream for
         """Create SRv6 input packet stream for defined interface.
 
         :param VppInterface src_if: Interface to create packet stream for
@@ -1796,19 +1937,19 @@ class TestSRv6(VppTestCase):
         """
         self.logger.info("Creating packets")
         pkts = []
         """
         self.logger.info("Creating packets")
         pkts = []
-        for i in range(0, count-1):
+        for i in range(0, count - 1):
             payload_info = self.create_packet_info(src_if, dst_if)
             payload_info = self.create_packet_info(src_if, dst_if)
-            self.logger.debug(
-                "Creating packet with index %d" % (payload_info.index))
+            self.logger.debug("Creating packet with index %d" % (payload_info.index))
             payload = self.info_to_payload(payload_info)
             # add L2 header if not yet provided in packet_header
             payload = self.info_to_payload(payload_info)
             # add L2 header if not yet provided in packet_header
-            if packet_header.getlayer(0).name == 'Ethernet':
-                p = (packet_header /
-                     Raw(payload))
+            if packet_header.getlayer(0).name == "Ethernet":
+                p = packet_header / Raw(payload)
             else:
             else:
-                p = (Ether(dst=src_if.local_mac, src=src_if.remote_mac) /
-                     packet_header /
-                     Raw(payload))
+                p = (
+                    Ether(dst=src_if.local_mac, src=src_if.remote_mac)
+                    / packet_header
+                    / Raw(payload)
+                )
             size = packet_sizes[i % len(packet_sizes)]
             self.logger.debug("Packet size %d" % (size))
             self.extend_packet(p, size)
             size = packet_sizes[i % len(packet_sizes)]
             self.logger.debug("Packet size %d" % (size))
             self.extend_packet(p, size)
@@ -1823,8 +1964,9 @@ class TestSRv6(VppTestCase):
         self.logger.info("Done creating packets")
         return pkts
 
         self.logger.info("Done creating packets")
         return pkts
 
-    def send_and_verify_pkts(self, input, pkts, output, compare_func,
-                             expected_count=None):
+    def send_and_verify_pkts(
+        self, input, pkts, output, compare_func, expected_count=None
+    ):
         """Send packets and verify received packets using compare_func
 
         :param input: ingress interface of DUT
         """Send packets and verify received packets using compare_func
 
         :param input: ingress interface of DUT
@@ -1863,8 +2005,7 @@ class TestSRv6(VppTestCase):
         UDP source port and destination port are 1234
         """
 
         UDP source port and destination port are 1234
         """
 
-        p = (IPv6(src='1234::1', dst=dst) /
-             UDP(sport=1234, dport=1234))
+        p = IPv6(src="1234::1", dst=dst) / UDP(sport=1234, dport=1234)
         return p
 
     def create_packet_header_IPv6_SRH(self, sidlist, segleft):
         return p
 
     def create_packet_header_IPv6_SRH(self, sidlist, segleft):
@@ -1878,9 +2019,11 @@ class TestSRv6(VppTestCase):
         UDP source port and destination port are 1234
         """
 
         UDP source port and destination port are 1234
         """
 
-        p = (IPv6(src='1234::1', dst=sidlist[segleft]) /
-             IPv6ExtHdrSegmentRouting(addresses=sidlist) /
-             UDP(sport=1234, dport=1234))
+        p = (
+            IPv6(src="1234::1", dst=sidlist[segleft])
+            / IPv6ExtHdrSegmentRouting(addresses=sidlist)
+            / UDP(sport=1234, dport=1234)
+        )
         return p
 
     def create_packet_header_IPv6_SRH_IPv6(self, dst, sidlist, segleft):
         return p
 
     def create_packet_header_IPv6_SRH_IPv6(self, dst, sidlist, segleft):
@@ -1896,11 +2039,12 @@ class TestSRv6(VppTestCase):
         UDP source port and destination port are 1234
         """
 
         UDP source port and destination port are 1234
         """
 
-        p = (IPv6(src='1234::1', dst=sidlist[segleft]) /
-             IPv6ExtHdrSegmentRouting(addresses=sidlist,
-                                      segleft=segleft, nh=41) /
-             IPv6(src='4321::1', dst=dst) /
-             UDP(sport=1234, dport=1234))
+        p = (
+            IPv6(src="1234::1", dst=sidlist[segleft])
+            / IPv6ExtHdrSegmentRouting(addresses=sidlist, segleft=segleft, nh=41)
+            / IPv6(src="4321::1", dst=dst)
+            / UDP(sport=1234, dport=1234)
+        )
         return p
 
     def create_packet_header_IPv6_IPv6(self, dst_inner, dst_outer):
         return p
 
     def create_packet_header_IPv6_IPv6(self, dst_inner, dst_outer):
@@ -1914,13 +2058,16 @@ class TestSRv6(VppTestCase):
         UDP source port and destination port are 1234
         """
 
         UDP source port and destination port are 1234
         """
 
-        p = (IPv6(src='1234::1', dst=dst_outer) /
-             IPv6(src='4321::1', dst=dst_inner) /
-             UDP(sport=1234, dport=1234))
+        p = (
+            IPv6(src="1234::1", dst=dst_outer)
+            / IPv6(src="4321::1", dst=dst_inner)
+            / UDP(sport=1234, dport=1234)
+        )
         return p
 
         return p
 
-    def create_packet_header_IPv6_SRH_SRH_IPv6(self, dst, sidlist1, segleft1,
-                                               sidlist2, segleft2):
+    def create_packet_header_IPv6_SRH_SRH_IPv6(
+        self, dst, sidlist1, segleft1, sidlist2, segleft2
+    ):
         """Create packet header: IPv6 encapsulated in SRv6 with 2 SRH:
         IPv6 header with SRH, 2nd SRH, IPv6 header, UDP header
 
         """Create packet header: IPv6 encapsulated in SRv6 with 2 SRH:
         IPv6 header with SRH, 2nd SRH, IPv6 header, UDP header
 
@@ -1935,13 +2082,13 @@ class TestSRv6(VppTestCase):
         UDP source port and destination port are 1234
         """
 
         UDP source port and destination port are 1234
         """
 
-        p = (IPv6(src='1234::1', dst=sidlist1[segleft1]) /
-             IPv6ExtHdrSegmentRouting(addresses=sidlist1,
-                                      segleft=segleft1, nh=43) /
-             IPv6ExtHdrSegmentRouting(addresses=sidlist2,
-                                      segleft=segleft2, nh=41) /
-             IPv6(src='4321::1', dst=dst) /
-             UDP(sport=1234, dport=1234))
+        p = (
+            IPv6(src="1234::1", dst=sidlist1[segleft1])
+            / IPv6ExtHdrSegmentRouting(addresses=sidlist1, segleft=segleft1, nh=43)
+            / IPv6ExtHdrSegmentRouting(addresses=sidlist2, segleft=segleft2, nh=41)
+            / IPv6(src="4321::1", dst=dst)
+            / UDP(sport=1234, dport=1234)
+        )
         return p
 
     def create_packet_header_IPv4(self, dst):
         return p
 
     def create_packet_header_IPv4(self, dst):
@@ -1953,8 +2100,7 @@ class TestSRv6(VppTestCase):
         UDP source port and destination port are 1234
         """
 
         UDP source port and destination port are 1234
         """
 
-        p = (IP(src='123.1.1.1', dst=dst) /
-             UDP(sport=1234, dport=1234))
+        p = IP(src="123.1.1.1", dst=dst) / UDP(sport=1234, dport=1234)
         return p
 
     def create_packet_header_IPv6_IPv4(self, dst_inner, dst_outer):
         return p
 
     def create_packet_header_IPv6_IPv4(self, dst_inner, dst_outer):
@@ -1969,9 +2115,11 @@ class TestSRv6(VppTestCase):
         UDP source port and destination port are 1234
         """
 
         UDP source port and destination port are 1234
         """
 
-        p = (IPv6(src='1234::1', dst=dst_outer) /
-             IP(src='123.1.1.1', dst=dst_inner) /
-             UDP(sport=1234, dport=1234))
+        p = (
+            IPv6(src="1234::1", dst=dst_outer)
+            / IP(src="123.1.1.1", dst=dst_inner)
+            / UDP(sport=1234, dport=1234)
+        )
         return p
 
     def create_packet_header_IPv6_SRH_IPv4(self, dst, sidlist, segleft):
         return p
 
     def create_packet_header_IPv6_SRH_IPv4(self, dst, sidlist, segleft):
@@ -1988,11 +2136,12 @@ class TestSRv6(VppTestCase):
         UDP source port and destination port are 1234
         """
 
         UDP source port and destination port are 1234
         """
 
-        p = (IPv6(src='1234::1', dst=sidlist[segleft]) /
-             IPv6ExtHdrSegmentRouting(addresses=sidlist,
-                                      segleft=segleft, nh=4) /
-             IP(src='123.1.1.1', dst=dst) /
-             UDP(sport=1234, dport=1234))
+        p = (
+            IPv6(src="1234::1", dst=sidlist[segleft])
+            / IPv6ExtHdrSegmentRouting(addresses=sidlist, segleft=segleft, nh=4)
+            / IP(src="123.1.1.1", dst=dst)
+            / UDP(sport=1234, dport=1234)
+        )
         return p
 
     def create_packet_header_L2(self, vlan=0):
         return p
 
     def create_packet_header_L2(self, vlan=0):
@@ -2003,7 +2152,7 @@ class TestSRv6(VppTestCase):
         # Note: the dst addr ('00:55:44:33:22:11') is used in
         # the compare function compare_rx_tx_packet_T_Encaps_L2
         # to detect presence of L2 in SRH payload
         # Note: the dst addr ('00:55:44:33:22:11') is used in
         # the compare function compare_rx_tx_packet_T_Encaps_L2
         # to detect presence of L2 in SRH payload
-        p = Ether(src='00:11:22:33:44:55', dst='00:55:44:33:22:11')
+        p = Ether(src="00:11:22:33:44:55", dst="00:55:44:33:22:11")
         etype = 0x8137  # IPX
         if vlan:
             # add 802.1q layer
         etype = 0x8137  # IPX
         if vlan:
             # add 802.1q layer
@@ -2023,7 +2172,7 @@ class TestSRv6(VppTestCase):
         Outer IPv6 destination address is set to sidlist[segleft]
         IPv6 source address is 1234::1
         """
         Outer IPv6 destination address is set to sidlist[segleft]
         IPv6 source address is 1234::1
         """
-        eth = Ether(src='00:11:22:33:44:55', dst='00:55:44:33:22:11')
+        eth = Ether(src="00:11:22:33:44:55", dst="00:55:44:33:22:11")
         etype = 0x8137  # IPX
         if vlan:
             # add 802.1q layer
         etype = 0x8137  # IPX
         if vlan:
             # add 802.1q layer
@@ -2031,10 +2180,11 @@ class TestSRv6(VppTestCase):
         else:
             eth.type = etype
 
         else:
             eth.type = etype
 
-        p = (IPv6(src='1234::1', dst=sidlist[segleft]) /
-             IPv6ExtHdrSegmentRouting(addresses=sidlist,
-                                      segleft=segleft, nh=143) /
-             eth)
+        p = (
+            IPv6(src="1234::1", dst=sidlist[segleft])
+            / IPv6ExtHdrSegmentRouting(addresses=sidlist, segleft=segleft, nh=143)
+            / eth
+        )
         return p
 
     def create_packet_header_IPv6_L2(self, dst_outer, vlan=0):
         return p
 
     def create_packet_header_IPv6_L2(self, dst_outer, vlan=0):
@@ -2044,7 +2194,7 @@ class TestSRv6(VppTestCase):
         :param ipv6address dst_outer: outer IPv6 destination address
         :param vlan: L2 vlan; if vlan!=0 then add 802.1q header
         """
         :param ipv6address dst_outer: outer IPv6 destination address
         :param vlan: L2 vlan; if vlan!=0 then add 802.1q header
         """
-        eth = Ether(src='00:11:22:33:44:55', dst='00:55:44:33:22:11')
+        eth = Ether(src="00:11:22:33:44:55", dst="00:55:44:33:22:11")
         etype = 0x8137  # IPX
         if vlan:
             # add 802.1q layer
         etype = 0x8137  # IPX
         if vlan:
             # add 802.1q layer
@@ -2052,12 +2202,11 @@ class TestSRv6(VppTestCase):
         else:
             eth.type = etype
 
         else:
             eth.type = etype
 
-        p = (IPv6(src='1234::1', dst=dst_outer, nh=143) / eth)
+        p = IPv6(src="1234::1", dst=dst_outer, nh=143) / eth
         return p
 
     def get_payload_info(self, packet):
         return p
 
     def get_payload_info(self, packet):
-        """ Extract the payload_info from the packet
-        """
+        """Extract the payload_info from the packet"""
         # in most cases, payload_info is in packet[Raw]
         # but packet[Raw] gives the complete payload
         # (incl L2 header) for the T.Encaps L2 case
         # in most cases, payload_info is in packet[Raw]
         # but packet[Raw] gives the complete payload
         # (incl L2 header) for the T.Encaps L2 case
@@ -2068,8 +2217,7 @@ class TestSRv6(VppTestCase):
             # remote L2 header from packet[Raw]:
             # take packet[Raw], convert it to an Ether layer
             # and then extract Raw from it
             # remote L2 header from packet[Raw]:
             # take packet[Raw], convert it to an Ether layer
             # and then extract Raw from it
-            payload_info = self.payload_to_info(
-                Ether(scapy.compat.r(packet[Raw]))[Raw])
+            payload_info = self.payload_to_info(Ether(scapy.compat.r(packet[Raw]))[Raw])
 
         return payload_info
 
 
         return payload_info
 
@@ -2082,8 +2230,10 @@ class TestSRv6(VppTestCase):
         :param capture: captured packets
         :param compare_func: function to compare in and out packet
         """
         :param capture: captured packets
         :param compare_func: function to compare in and out packet
         """
-        self.logger.info("Verifying capture on interface %s using function %s"
-                         % (dst_if.name, compare_func.__name__))
+        self.logger.info(
+            "Verifying capture on interface %s using function %s"
+            % (dst_if.name, compare_func.__name__)
+        )
 
         last_info = dict()
         for i in self.pg_interfaces:
 
         last_info = dict()
         for i in self.pg_interfaces:
@@ -2096,19 +2246,19 @@ class TestSRv6(VppTestCase):
                 payload_info = self.get_payload_info(packet)
                 packet_index = payload_info.index
 
                 payload_info = self.get_payload_info(packet)
                 packet_index = payload_info.index
 
-                self.logger.debug("Verifying packet with index %d"
-                                  % (packet_index))
+                self.logger.debug("Verifying packet with index %d" % (packet_index))
                 # packet should have arrived on the expected interface
                 self.assertEqual(payload_info.dst, dst_sw_if_index)
                 self.logger.debug(
                 # packet should have arrived on the expected interface
                 self.assertEqual(payload_info.dst, dst_sw_if_index)
                 self.logger.debug(
-                    "Got packet on interface %s: src=%u (idx=%u)" %
-                    (dst_if.name, payload_info.src, packet_index))
+                    "Got packet on interface %s: src=%u (idx=%u)"
+                    % (dst_if.name, payload_info.src, packet_index)
+                )
 
                 # search for payload_info with same src and dst if_index
                 # this will give us the transmitted packet
                 next_info = self.get_next_packet_info_for_interface2(
 
                 # search for payload_info with same src and dst if_index
                 # this will give us the transmitted packet
                 next_info = self.get_next_packet_info_for_interface2(
-                    payload_info.src, dst_sw_if_index,
-                    last_info[payload_info.src])
+                    payload_info.src, dst_sw_if_index, last_info[payload_info.src]
+                )
                 last_info[payload_info.src] = next_info
                 # next_info should not be None
                 self.assertTrue(next_info is not None)
                 last_info[payload_info.src] = next_info
                 # next_info should not be None
                 self.assertTrue(next_info is not None)
@@ -2117,8 +2267,9 @@ class TestSRv6(VppTestCase):
                 # data field of next_info contains the tx packet
                 txed_packet = next_info.data
 
                 # data field of next_info contains the tx packet
                 txed_packet = next_info.data
 
-                self.logger.debug(ppp("Transmitted packet:",
-                                      txed_packet))  # ppp=Pretty Print Packet
+                self.logger.debug(
+                    ppp("Transmitted packet:", txed_packet)
+                )  # ppp=Pretty Print Packet
 
                 self.logger.debug(ppp("Received packet:", packet))
 
 
                 self.logger.debug(ppp("Received packet:", packet))
 
@@ -2143,5 +2294,5 @@ class TestSRv6(VppTestCase):
         #                    "didn't arrive" % (dst_if.name, i.name))
 
 
         #                    "didn't arrive" % (dst_if.name, i.name))
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index dad7c18..88c0b1d 100644 (file)
@@ -7,8 +7,14 @@ from socket import AF_INET6
 from framework import VppTestCase, VppTestRunner
 from vpp_ip import DpoProto
 from vpp_ip_route import VppIpRoute, VppRoutePath, VppIpTable
 from framework import VppTestCase, VppTestRunner
 from vpp_ip import DpoProto
 from vpp_ip_route import VppIpRoute, VppRoutePath, VppIpTable
-from vpp_srv6 import SRv6LocalSIDBehaviors, VppSRv6LocalSID, VppSRv6Policy, \
-    SRv6PolicyType, VppSRv6Steering, SRv6PolicySteeringTypes
+from vpp_srv6 import (
+    SRv6LocalSIDBehaviors,
+    VppSRv6LocalSID,
+    VppSRv6Policy,
+    SRv6PolicyType,
+    VppSRv6Steering,
+    SRv6PolicySteeringTypes,
+)
 
 import scapy.compat
 from scapy.packet import Raw
 
 import scapy.compat
 from scapy.packet import Raw
@@ -20,7 +26,7 @@ from util import ppp
 
 
 class TestSRv6Ad(VppTestCase):
 
 
 class TestSRv6Ad(VppTestCase):
-    """ SRv6 Dynamic Proxy plugin Test Case """
+    """SRv6 Dynamic Proxy plugin Test Case"""
 
     @classmethod
     def setUpClass(self):
 
     @classmethod
     def setUpClass(self):
@@ -31,8 +37,7 @@ class TestSRv6Ad(VppTestCase):
         super(TestSRv6Ad, cls).tearDownClass()
 
     def setUp(self):
         super(TestSRv6Ad, cls).tearDownClass()
 
     def setUp(self):
-        """ Perform test setup before each test case.
-        """
+        """Perform test setup before each test case."""
         super(TestSRv6Ad, self).setUp()
 
         # packet sizes, inclusive L2 overhead
         super(TestSRv6Ad, self).setUp()
 
         # packet sizes, inclusive L2 overhead
@@ -42,17 +47,15 @@ class TestSRv6Ad(VppTestCase):
         self.reset_packet_infos()
 
     def tearDown(self):
         self.reset_packet_infos()
 
     def tearDown(self):
-        """ Clean up test setup after each test case.
-        """
+        """Clean up test setup after each test case."""
         self.teardown_interfaces()
 
         super(TestSRv6Ad, self).tearDown()
 
         self.teardown_interfaces()
 
         super(TestSRv6Ad, self).tearDown()
 
-    def configure_interface(self,
-                            interface,
-                            ipv6=False, ipv4=False,
-                            ipv6_table_id=0, ipv4_table_id=0):
-        """ Configure interface.
+    def configure_interface(
+        self, interface, ipv6=False, ipv4=False, ipv6_table_id=0, ipv4_table_id=0
+    ):
+        """Configure interface.
         :param ipv6: configure IPv6 on interface
         :param ipv4: configure IPv4 on interface
         :param ipv6_table_id: FIB table_id for IPv6
         :param ipv6: configure IPv6 on interface
         :param ipv4: configure IPv4 on interface
         :param ipv6_table_id: FIB table_id for IPv6
@@ -71,9 +74,8 @@ class TestSRv6Ad(VppTestCase):
             interface.resolve_arp()
         interface.admin_up()
 
             interface.resolve_arp()
         interface.admin_up()
 
-    def setup_interfaces(self, ipv6=[], ipv4=[],
-                         ipv6_table_id=[], ipv4_table_id=[]):
-        """ Create and configure interfaces.
+    def setup_interfaces(self, ipv6=[], ipv4=[], ipv6_table_id=[], ipv4_table_id=[]):
+        """Create and configure interfaces.
 
         :param ipv6: list of interface IPv6 capabilities
         :param ipv4: list of interface IPv4 capabilities
 
         :param ipv6: list of interface IPv6 capabilities
         :param ipv4: list of interface IPv4 capabilities
@@ -108,9 +110,9 @@ class TestSRv6Ad(VppTestCase):
         # setup all interfaces
         for i in range(count):
             intf = self.pg_interfaces[i]
         # setup all interfaces
         for i in range(count):
             intf = self.pg_interfaces[i]
-            self.configure_interface(intf,
-                                     ipv6[i], ipv4[i],
-                                     ipv6_table_id[i], ipv4_table_id[i])
+            self.configure_interface(
+                intf, ipv6[i], ipv4[i], ipv6_table_id[i], ipv4_table_id[i]
+            )
 
         if any(ipv6):
             self.logger.debug(self.vapi.cli("show ip6 neighbors"))
 
         if any(ipv6):
             self.logger.debug(self.vapi.cli("show ip6 neighbors"))
@@ -122,8 +124,7 @@ class TestSRv6Ad(VppTestCase):
         return self.pg_interfaces
 
     def teardown_interfaces(self):
         return self.pg_interfaces
 
     def teardown_interfaces(self):
-        """ Unconfigure and bring down interface.
-        """
+        """Unconfigure and bring down interface."""
         self.logger.debug("Tearing down interfaces")
         # tear down all interfaces
         # AFAIK they cannot be deleted
         self.logger.debug("Tearing down interfaces")
         # tear down all interfaces
         # AFAIK they cannot be deleted
@@ -135,10 +136,9 @@ class TestSRv6Ad(VppTestCase):
             i.set_table_ip6(0)
 
     def test_SRv6_End_AD_IPv6(self):
             i.set_table_ip6(0)
 
     def test_SRv6_End_AD_IPv6(self):
-        """ Test SRv6 End.AD behavior with IPv6 traffic.
-        """
-        self.src_addr = 'a0::'
-        self.sid_list = ['a1::', 'a2::a6', 'a3::']
+        """Test SRv6 End.AD behavior with IPv6 traffic."""
+        self.src_addr = "a0::"
+        self.sid_list = ["a1::", "a2::a6", "a3::"]
         self.test_sid_index = 1
 
         # send traffic to one destination interface
         self.test_sid_index = 1
 
         # send traffic to one destination interface
@@ -146,19 +146,32 @@ class TestSRv6Ad(VppTestCase):
         self.setup_interfaces(ipv6=[True, True])
 
         # configure route to next segment
         self.setup_interfaces(ipv6=[True, True])
 
         # configure route to next segment
-        route = VppIpRoute(self, self.sid_list[self.test_sid_index + 1], 128,
-                           [VppRoutePath(self.pg0.remote_ip6,
-                                         self.pg0.sw_if_index,
-                                         proto=DpoProto.DPO_PROTO_IP6)])
+        route = VppIpRoute(
+            self,
+            self.sid_list[self.test_sid_index + 1],
+            128,
+            [
+                VppRoutePath(
+                    self.pg0.remote_ip6,
+                    self.pg0.sw_if_index,
+                    proto=DpoProto.DPO_PROTO_IP6,
+                )
+            ],
+        )
         route.add_vpp_config()
 
         # configure SRv6 localSID behavior
         route.add_vpp_config()
 
         # configure SRv6 localSID behavior
-        cli_str = "sr localsid address " + \
-                  self.sid_list[self.test_sid_index] + \
-                  " behavior end.ad" + \
-                  " nh " + self.pg1.remote_ip6 + \
-                  " oif " + self.pg1.name + \
-                  " iif " + self.pg1.name
+        cli_str = (
+            "sr localsid address "
+            + self.sid_list[self.test_sid_index]
+            + " behavior end.ad"
+            + " nh "
+            + self.pg1.remote_ip6
+            + " oif "
+            + self.pg1.name
+            + " iif "
+            + self.pg1.name
+        )
         self.vapi.cli(cli_str)
 
         # log the localsids
         self.vapi.cli(cli_str)
 
         # log the localsids
@@ -171,15 +184,18 @@ class TestSRv6Ad(VppTestCase):
         packet_header1 = self.create_packet_header_IPv6_SRH_IPv6(
             srcaddr=self.src_addr,
             sidlist=self.sid_list[::-1],
         packet_header1 = self.create_packet_header_IPv6_SRH_IPv6(
             srcaddr=self.src_addr,
             sidlist=self.sid_list[::-1],
-            segleft=len(self.sid_list) - self.test_sid_index - 1)
+            segleft=len(self.sid_list) - self.test_sid_index - 1,
+        )
 
         # generate packets (pg0->pg1)
 
         # generate packets (pg0->pg1)
-        pkts1 = self.create_stream(self.pg0, self.pg1, packet_header1,
-                                   self.pg_packet_sizes, count)
+        pkts1 = self.create_stream(
+            self.pg0, self.pg1, packet_header1, self.pg_packet_sizes, count
+        )
 
         # send packets and verify received packets
 
         # send packets and verify received packets
-        self.send_and_verify_pkts(self.pg0, pkts1, self.pg1,
-                                  self.compare_rx_tx_packet_End_AD_IPv6_out)
+        self.send_and_verify_pkts(
+            self.pg0, pkts1, self.pg1, self.compare_rx_tx_packet_End_AD_IPv6_out
+        )
 
         # log the localsid counters
         self.logger.info(self.vapi.cli("show sr localsid"))
 
         # log the localsid counters
         self.logger.info(self.vapi.cli("show sr localsid"))
@@ -188,26 +204,27 @@ class TestSRv6Ad(VppTestCase):
         packet_header2 = self.create_packet_header_IPv6()
 
         # generate returning packets (pg1->pg0)
         packet_header2 = self.create_packet_header_IPv6()
 
         # generate returning packets (pg1->pg0)
-        pkts2 = self.create_stream(self.pg1, self.pg0, packet_header2,
-                                   self.pg_packet_sizes, count)
+        pkts2 = self.create_stream(
+            self.pg1, self.pg0, packet_header2, self.pg_packet_sizes, count
+        )
 
         # send packets and verify received packets
 
         # send packets and verify received packets
-        self.send_and_verify_pkts(self.pg1, pkts2, self.pg0,
-                                  self.compare_rx_tx_packet_End_AD_IPv6_in)
+        self.send_and_verify_pkts(
+            self.pg1, pkts2, self.pg0, self.compare_rx_tx_packet_End_AD_IPv6_in
+        )
 
         # log the localsid counters
         self.logger.info(self.vapi.cli("show sr localsid"))
 
         # remove SRv6 localSIDs
 
         # log the localsid counters
         self.logger.info(self.vapi.cli("show sr localsid"))
 
         # remove SRv6 localSIDs
-        cli_str = "sr localsid del address " + \
-                  self.sid_list[self.test_sid_index]
+        cli_str = "sr localsid del address " + self.sid_list[self.test_sid_index]
         self.vapi.cli(cli_str)
 
         # cleanup interfaces
         self.teardown_interfaces()
 
     def compare_rx_tx_packet_End_AD_IPv6_out(self, tx_pkt, rx_pkt):
         self.vapi.cli(cli_str)
 
         # cleanup interfaces
         self.teardown_interfaces()
 
     def compare_rx_tx_packet_End_AD_IPv6_out(self, tx_pkt, rx_pkt):
-        """ Compare input and output packet after passing End.AD with IPv6
+        """Compare input and output packet after passing End.AD with IPv6
 
         :param tx_pkt: transmitted packet
         :param rx_pkt: received packet
 
         :param tx_pkt: transmitted packet
         :param rx_pkt: received packet
@@ -232,7 +249,7 @@ class TestSRv6Ad(VppTestCase):
         self.logger.debug("packet verification: SUCCESS")
 
     def compare_rx_tx_packet_End_AD_IPv6_in(self, tx_pkt, rx_pkt):
         self.logger.debug("packet verification: SUCCESS")
 
     def compare_rx_tx_packet_End_AD_IPv6_in(self, tx_pkt, rx_pkt):
-        """ Compare input and output packet after passing End.AD
+        """Compare input and output packet after passing End.AD
 
         :param tx_pkt: transmitted packet
         :param rx_pkt: received packet
 
         :param tx_pkt: transmitted packet
         :param rx_pkt: received packet
@@ -253,8 +270,7 @@ class TestSRv6Ad(VppTestCase):
         # rx'ed seglist should be equal to SID-list in reversed order
         self.assertEqual(rx_srh.addresses, self.sid_list[::-1])
         # segleft should be equal to previous segleft value minus 1
         # rx'ed seglist should be equal to SID-list in reversed order
         self.assertEqual(rx_srh.addresses, self.sid_list[::-1])
         # segleft should be equal to previous segleft value minus 1
-        self.assertEqual(rx_srh.segleft,
-                         len(self.sid_list) - self.test_sid_index - 2)
+        self.assertEqual(rx_srh.segleft, len(self.sid_list) - self.test_sid_index - 2)
         # lastentry should be equal to the SID-list length minus 1
         self.assertEqual(rx_srh.lastentry, len(self.sid_list) - 1)
 
         # lastentry should be equal to the SID-list length minus 1
         self.assertEqual(rx_srh.lastentry, len(self.sid_list) - 1)
 
@@ -269,10 +285,9 @@ class TestSRv6Ad(VppTestCase):
         self.logger.debug("packet verification: SUCCESS")
 
     def test_SRv6_End_AD_IPv4(self):
         self.logger.debug("packet verification: SUCCESS")
 
     def test_SRv6_End_AD_IPv4(self):
-        """ Test SRv6 End.AD behavior with IPv4 traffic.
-        """
-        self.src_addr = 'a0::'
-        self.sid_list = ['a1::', 'a2::a4', 'a3::']
+        """Test SRv6 End.AD behavior with IPv4 traffic."""
+        self.src_addr = "a0::"
+        self.sid_list = ["a1::", "a2::a4", "a3::"]
         self.test_sid_index = 1
 
         # send traffic to one destination interface
         self.test_sid_index = 1
 
         # send traffic to one destination interface
@@ -280,19 +295,32 @@ class TestSRv6Ad(VppTestCase):
         self.setup_interfaces(ipv6=[True, False], ipv4=[False, True])
 
         # configure route to next segment
         self.setup_interfaces(ipv6=[True, False], ipv4=[False, True])
 
         # configure route to next segment
-        route = VppIpRoute(self, self.sid_list[self.test_sid_index + 1], 128,
-                           [VppRoutePath(self.pg0.remote_ip6,
-                                         self.pg0.sw_if_index,
-                                         proto=DpoProto.DPO_PROTO_IP6)])
+        route = VppIpRoute(
+            self,
+            self.sid_list[self.test_sid_index + 1],
+            128,
+            [
+                VppRoutePath(
+                    self.pg0.remote_ip6,
+                    self.pg0.sw_if_index,
+                    proto=DpoProto.DPO_PROTO_IP6,
+                )
+            ],
+        )
         route.add_vpp_config()
 
         # configure SRv6 localSID behavior
         route.add_vpp_config()
 
         # configure SRv6 localSID behavior
-        cli_str = "sr localsid address " + \
-                  self.sid_list[self.test_sid_index] + \
-                  " behavior end.ad" + \
-                  " nh " + self.pg1.remote_ip4 + \
-                  " oif " + self.pg1.name + \
-                  " iif " + self.pg1.name
+        cli_str = (
+            "sr localsid address "
+            + self.sid_list[self.test_sid_index]
+            + " behavior end.ad"
+            + " nh "
+            + self.pg1.remote_ip4
+            + " oif "
+            + self.pg1.name
+            + " iif "
+            + self.pg1.name
+        )
         self.vapi.cli(cli_str)
 
         # log the localsids
         self.vapi.cli(cli_str)
 
         # log the localsids
@@ -305,15 +333,18 @@ class TestSRv6Ad(VppTestCase):
         packet_header1 = self.create_packet_header_IPv6_SRH_IPv4(
             srcaddr=self.src_addr,
             sidlist=self.sid_list[::-1],
         packet_header1 = self.create_packet_header_IPv6_SRH_IPv4(
             srcaddr=self.src_addr,
             sidlist=self.sid_list[::-1],
-            segleft=len(self.sid_list) - self.test_sid_index - 1)
+            segleft=len(self.sid_list) - self.test_sid_index - 1,
+        )
 
         # generate packets (pg0->pg1)
 
         # generate packets (pg0->pg1)
-        pkts1 = self.create_stream(self.pg0, self.pg1, packet_header1,
-                                   self.pg_packet_sizes, count)
+        pkts1 = self.create_stream(
+            self.pg0, self.pg1, packet_header1, self.pg_packet_sizes, count
+        )
 
         # send packets and verify received packets
 
         # send packets and verify received packets
-        self.send_and_verify_pkts(self.pg0, pkts1, self.pg1,
-                                  self.compare_rx_tx_packet_End_AD_IPv4_out)
+        self.send_and_verify_pkts(
+            self.pg0, pkts1, self.pg1, self.compare_rx_tx_packet_End_AD_IPv4_out
+        )
 
         # log the localsid counters
         self.logger.info(self.vapi.cli("show sr localsid"))
 
         # log the localsid counters
         self.logger.info(self.vapi.cli("show sr localsid"))
@@ -322,26 +353,27 @@ class TestSRv6Ad(VppTestCase):
         packet_header2 = self.create_packet_header_IPv4()
 
         # generate returning packets (pg1->pg0)
         packet_header2 = self.create_packet_header_IPv4()
 
         # generate returning packets (pg1->pg0)
-        pkts2 = self.create_stream(self.pg1, self.pg0, packet_header2,
-                                   self.pg_packet_sizes, count)
+        pkts2 = self.create_stream(
+            self.pg1, self.pg0, packet_header2, self.pg_packet_sizes, count
+        )
 
         # send packets and verify received packets
 
         # send packets and verify received packets
-        self.send_and_verify_pkts(self.pg1, pkts2, self.pg0,
-                                  self.compare_rx_tx_packet_End_AD_IPv4_in)
+        self.send_and_verify_pkts(
+            self.pg1, pkts2, self.pg0, self.compare_rx_tx_packet_End_AD_IPv4_in
+        )
 
         # log the localsid counters
         self.logger.info(self.vapi.cli("show sr localsid"))
 
         # remove SRv6 localSIDs
 
         # log the localsid counters
         self.logger.info(self.vapi.cli("show sr localsid"))
 
         # remove SRv6 localSIDs
-        cli_str = "sr localsid del address " + \
-                  self.sid_list[self.test_sid_index]
+        cli_str = "sr localsid del address " + self.sid_list[self.test_sid_index]
         self.vapi.cli(cli_str)
 
         # cleanup interfaces
         self.teardown_interfaces()
 
     def compare_rx_tx_packet_End_AD_IPv4_out(self, tx_pkt, rx_pkt):
         self.vapi.cli(cli_str)
 
         # cleanup interfaces
         self.teardown_interfaces()
 
     def compare_rx_tx_packet_End_AD_IPv4_out(self, tx_pkt, rx_pkt):
-        """ Compare input and output packet after passing End.AD with IPv4
+        """Compare input and output packet after passing End.AD with IPv4
 
         :param tx_pkt: transmitted packet
         :param rx_pkt: received packet
 
         :param tx_pkt: transmitted packet
         :param rx_pkt: received packet
@@ -371,7 +403,7 @@ class TestSRv6Ad(VppTestCase):
         self.logger.debug("packet verification: SUCCESS")
 
     def compare_rx_tx_packet_End_AD_IPv4_in(self, tx_pkt, rx_pkt):
         self.logger.debug("packet verification: SUCCESS")
 
     def compare_rx_tx_packet_End_AD_IPv4_in(self, tx_pkt, rx_pkt):
-        """ Compare input and output packet after passing End.AD
+        """Compare input and output packet after passing End.AD
 
         :param tx_pkt: transmitted packet
         :param rx_pkt: received packet
 
         :param tx_pkt: transmitted packet
         :param rx_pkt: received packet
@@ -392,8 +424,7 @@ class TestSRv6Ad(VppTestCase):
         # rx'ed seglist should be equal to SID-list in reversed order
         self.assertEqual(rx_srh.addresses, self.sid_list[::-1])
         # segleft should be equal to previous segleft value minus 1
         # rx'ed seglist should be equal to SID-list in reversed order
         self.assertEqual(rx_srh.addresses, self.sid_list[::-1])
         # segleft should be equal to previous segleft value minus 1
-        self.assertEqual(rx_srh.segleft,
-                         len(self.sid_list) - self.test_sid_index - 2)
+        self.assertEqual(rx_srh.segleft, len(self.sid_list) - self.test_sid_index - 2)
         # lastentry should be equal to the SID-list length minus 1
         self.assertEqual(rx_srh.lastentry, len(self.sid_list) - 1)
 
         # lastentry should be equal to the SID-list length minus 1
         self.assertEqual(rx_srh.lastentry, len(self.sid_list) - 1)
 
@@ -411,10 +442,9 @@ class TestSRv6Ad(VppTestCase):
         self.logger.debug("packet verification: SUCCESS")
 
     def test_SRv6_End_AD_L2(self):
         self.logger.debug("packet verification: SUCCESS")
 
     def test_SRv6_End_AD_L2(self):
-        """ Test SRv6 End.AD behavior with L2 traffic.
-        """
-        self.src_addr = 'a0::'
-        self.sid_list = ['a1::', 'a2::a4', 'a3::']
+        """Test SRv6 End.AD behavior with L2 traffic."""
+        self.src_addr = "a0::"
+        self.sid_list = ["a1::", "a2::a4", "a3::"]
         self.test_sid_index = 1
 
         # send traffic to one destination interface
         self.test_sid_index = 1
 
         # send traffic to one destination interface
@@ -422,18 +452,30 @@ class TestSRv6Ad(VppTestCase):
         self.setup_interfaces(ipv6=[True, False])
 
         # configure route to next segment
         self.setup_interfaces(ipv6=[True, False])
 
         # configure route to next segment
-        route = VppIpRoute(self, self.sid_list[self.test_sid_index + 1], 128,
-                           [VppRoutePath(self.pg0.remote_ip6,
-                                         self.pg0.sw_if_index,
-                                         proto=DpoProto.DPO_PROTO_IP6)])
+        route = VppIpRoute(
+            self,
+            self.sid_list[self.test_sid_index + 1],
+            128,
+            [
+                VppRoutePath(
+                    self.pg0.remote_ip6,
+                    self.pg0.sw_if_index,
+                    proto=DpoProto.DPO_PROTO_IP6,
+                )
+            ],
+        )
         route.add_vpp_config()
 
         # configure SRv6 localSID behavior
         route.add_vpp_config()
 
         # configure SRv6 localSID behavior
-        cli_str = "sr localsid address " + \
-                  self.sid_list[self.test_sid_index] + \
-                  " behavior end.ad" + \
-                  " oif " + self.pg1.name + \
-                  " iif " + self.pg1.name
+        cli_str = (
+            "sr localsid address "
+            + self.sid_list[self.test_sid_index]
+            + " behavior end.ad"
+            + " oif "
+            + self.pg1.name
+            + " iif "
+            + self.pg1.name
+        )
         self.vapi.cli(cli_str)
 
         # log the localsids
         self.vapi.cli(cli_str)
 
         # log the localsids
@@ -447,15 +489,18 @@ class TestSRv6Ad(VppTestCase):
             srcaddr=self.src_addr,
             sidlist=self.sid_list[::-1],
             segleft=len(self.sid_list) - self.test_sid_index - 1,
             srcaddr=self.src_addr,
             sidlist=self.sid_list[::-1],
             segleft=len(self.sid_list) - self.test_sid_index - 1,
-            vlan=0)
+            vlan=0,
+        )
 
         # generate packets (pg0->pg1)
 
         # generate packets (pg0->pg1)
-        pkts1 = self.create_stream(self.pg0, self.pg1, packet_header1,
-                                   self.pg_packet_sizes, count)
+        pkts1 = self.create_stream(
+            self.pg0, self.pg1, packet_header1, self.pg_packet_sizes, count
+        )
 
         # send packets and verify received packets
 
         # send packets and verify received packets
-        self.send_and_verify_pkts(self.pg0, pkts1, self.pg1,
-                                  self.compare_rx_tx_packet_End_AD_L2_out)
+        self.send_and_verify_pkts(
+            self.pg0, pkts1, self.pg1, self.compare_rx_tx_packet_End_AD_L2_out
+        )
 
         # log the localsid counters
         self.logger.info(self.vapi.cli("show sr localsid"))
 
         # log the localsid counters
         self.logger.info(self.vapi.cli("show sr localsid"))
@@ -464,26 +509,27 @@ class TestSRv6Ad(VppTestCase):
         packet_header2 = self.create_packet_header_L2()
 
         # generate returning packets (pg1->pg0)
         packet_header2 = self.create_packet_header_L2()
 
         # generate returning packets (pg1->pg0)
-        pkts2 = self.create_stream(self.pg1, self.pg0, packet_header2,
-                                   self.pg_packet_sizes, count)
+        pkts2 = self.create_stream(
+            self.pg1, self.pg0, packet_header2, self.pg_packet_sizes, count
+        )
 
         # send packets and verify received packets
 
         # send packets and verify received packets
-        self.send_and_verify_pkts(self.pg1, pkts2, self.pg0,
-                                  self.compare_rx_tx_packet_End_AD_L2_in)
+        self.send_and_verify_pkts(
+            self.pg1, pkts2, self.pg0, self.compare_rx_tx_packet_End_AD_L2_in
+        )
 
         # log the localsid counters
         self.logger.info(self.vapi.cli("show sr localsid"))
 
         # remove SRv6 localSIDs
 
         # log the localsid counters
         self.logger.info(self.vapi.cli("show sr localsid"))
 
         # remove SRv6 localSIDs
-        cli_str = "sr localsid del address " + \
-                  self.sid_list[self.test_sid_index]
+        cli_str = "sr localsid del address " + self.sid_list[self.test_sid_index]
         self.vapi.cli(cli_str)
 
         # cleanup interfaces
         self.teardown_interfaces()
 
     def compare_rx_tx_packet_End_AD_L2_out(self, tx_pkt, rx_pkt):
         self.vapi.cli(cli_str)
 
         # cleanup interfaces
         self.teardown_interfaces()
 
     def compare_rx_tx_packet_End_AD_L2_out(self, tx_pkt, rx_pkt):
-        """ Compare input and output packet after passing End.AD with L2
+        """Compare input and output packet after passing End.AD with L2
 
         :param tx_pkt: transmitted packet
         :param rx_pkt: received packet
 
         :param tx_pkt: transmitted packet
         :param rx_pkt: received packet
@@ -506,7 +552,7 @@ class TestSRv6Ad(VppTestCase):
         self.logger.debug("packet verification: SUCCESS")
 
     def compare_rx_tx_packet_End_AD_L2_in(self, tx_pkt, rx_pkt):
         self.logger.debug("packet verification: SUCCESS")
 
     def compare_rx_tx_packet_End_AD_L2_in(self, tx_pkt, rx_pkt):
-        """ Compare input and output packet after passing End.AD
+        """Compare input and output packet after passing End.AD
 
         :param tx_pkt: transmitted packet
         :param rx_pkt: received packet
 
         :param tx_pkt: transmitted packet
         :param rx_pkt: received packet
@@ -528,8 +574,7 @@ class TestSRv6Ad(VppTestCase):
         # rx'ed seglist should be equal to SID-list in reversed order
         self.assertEqual(rx_srh.addresses, self.sid_list[::-1])
         # segleft should be equal to previous segleft value minus 1
         # rx'ed seglist should be equal to SID-list in reversed order
         self.assertEqual(rx_srh.addresses, self.sid_list[::-1])
         # segleft should be equal to previous segleft value minus 1
-        self.assertEqual(rx_srh.segleft,
-                         len(self.sid_list) - self.test_sid_index - 2)
+        self.assertEqual(rx_srh.segleft, len(self.sid_list) - self.test_sid_index - 2)
         # lastentry should be equal to the SID-list length minus 1
         self.assertEqual(rx_srh.lastentry, len(self.sid_list) - 1)
 
         # lastentry should be equal to the SID-list length minus 1
         self.assertEqual(rx_srh.lastentry, len(self.sid_list) - 1)
 
@@ -539,8 +584,7 @@ class TestSRv6Ad(VppTestCase):
 
         self.logger.debug("packet verification: SUCCESS")
 
 
         self.logger.debug("packet verification: SUCCESS")
 
-    def create_stream(self, src_if, dst_if, packet_header, packet_sizes,
-                      count):
+    def create_stream(self, src_if, dst_if, packet_header, packet_sizes, count):
         """Create SRv6 input packet stream for defined interface.
 
         :param VppInterface src_if: Interface to create packet stream for
         """Create SRv6 input packet stream for defined interface.
 
         :param VppInterface src_if: Interface to create packet stream for
@@ -557,15 +601,17 @@ class TestSRv6Ad(VppTestCase):
         pkts = []
         for i in range(0, count - 1):
             payload_info = self.create_packet_info(src_if, dst_if)
         pkts = []
         for i in range(0, count - 1):
             payload_info = self.create_packet_info(src_if, dst_if)
-            self.logger.debug(
-                "Creating packet with index %d" % (payload_info.index))
+            self.logger.debug("Creating packet with index %d" % (payload_info.index))
             payload = self.info_to_payload(payload_info)
             # add L2 header if not yet provided in packet_header
             payload = self.info_to_payload(payload_info)
             # add L2 header if not yet provided in packet_header
-            if packet_header.getlayer(0).name == 'Ethernet':
+            if packet_header.getlayer(0).name == "Ethernet":
                 p = packet_header / Raw(payload)
             else:
                 p = packet_header / Raw(payload)
             else:
-                p = Ether(dst=src_if.local_mac, src=src_if.remote_mac) / \
-                    packet_header / Raw(payload)
+                p = (
+                    Ether(dst=src_if.local_mac, src=src_if.remote_mac)
+                    / packet_header
+                    / Raw(payload)
+                )
             size = packet_sizes[i % len(packet_sizes)]
             self.logger.debug("Packet size %d" % (size))
             self.extend_packet(p, size)
             size = packet_sizes[i % len(packet_sizes)]
             self.logger.debug("Packet size %d" % (size))
             self.extend_packet(p, size)
@@ -618,7 +664,7 @@ class TestSRv6Ad(VppTestCase):
         UDP source port and destination port are 1234
         """
 
         UDP source port and destination port are 1234
         """
 
-        p = IPv6(src='1234::1', dst='4321::1') / UDP(sport=1234, dport=1234)
+        p = IPv6(src="1234::1", dst="4321::1") / UDP(sport=1234, dport=1234)
         return p
 
     def create_packet_header_IPv6_SRH_IPv6(self, srcaddr, sidlist, segleft):
         return p
 
     def create_packet_header_IPv6_SRH_IPv6(self, srcaddr, sidlist, segleft):
@@ -636,11 +682,12 @@ class TestSRv6Ad(VppTestCase):
         UDP source port and destination port are 1234
         """
 
         UDP source port and destination port are 1234
         """
 
-        p = IPv6(src=srcaddr, dst=sidlist[segleft]) / \
-            IPv6ExtHdrSegmentRouting(addresses=sidlist,
-                                     segleft=segleft, nh=41) / \
-            IPv6(src='1234::1', dst='4321::1') / \
-            UDP(sport=1234, dport=1234)
+        p = (
+            IPv6(src=srcaddr, dst=sidlist[segleft])
+            / IPv6ExtHdrSegmentRouting(addresses=sidlist, segleft=segleft, nh=41)
+            / IPv6(src="1234::1", dst="4321::1")
+            / UDP(sport=1234, dport=1234)
+        )
         return p
 
     def create_packet_header_IPv4(self):
         return p
 
     def create_packet_header_IPv4(self):
@@ -653,7 +700,7 @@ class TestSRv6Ad(VppTestCase):
         UDP source port and destination port are 1234
         """
 
         UDP source port and destination port are 1234
         """
 
-        p = IP(src='123.1.1.1', dst='124.1.1.1') / UDP(sport=1234, dport=1234)
+        p = IP(src="123.1.1.1", dst="124.1.1.1") / UDP(sport=1234, dport=1234)
         return p
 
     def create_packet_header_IPv6_SRH_IPv4(self, srcaddr, sidlist, segleft):
         return p
 
     def create_packet_header_IPv6_SRH_IPv4(self, srcaddr, sidlist, segleft):
@@ -671,11 +718,12 @@ class TestSRv6Ad(VppTestCase):
         UDP source port and destination port are 1234
         """
 
         UDP source port and destination port are 1234
         """
 
-        p = IPv6(src=srcaddr, dst=sidlist[segleft]) / \
-            IPv6ExtHdrSegmentRouting(addresses=sidlist,
-                                     segleft=segleft, nh=4) / \
-            IP(src='123.1.1.1', dst='124.1.1.1') / \
-            UDP(sport=1234, dport=1234)
+        p = (
+            IPv6(src=srcaddr, dst=sidlist[segleft])
+            / IPv6ExtHdrSegmentRouting(addresses=sidlist, segleft=segleft, nh=4)
+            / IP(src="123.1.1.1", dst="124.1.1.1")
+            / UDP(sport=1234, dport=1234)
+        )
         return p
 
     def create_packet_header_L2(self, vlan=0):
         return p
 
     def create_packet_header_L2(self, vlan=0):
@@ -686,7 +734,7 @@ class TestSRv6Ad(VppTestCase):
         # Note: the dst addr ('00:55:44:33:22:11') is used in
         # the compare function compare_rx_tx_packet_T_Encaps_L2
         # to detect presence of L2 in SRH payload
         # Note: the dst addr ('00:55:44:33:22:11') is used in
         # the compare function compare_rx_tx_packet_T_Encaps_L2
         # to detect presence of L2 in SRH payload
-        p = Ether(src='00:11:22:33:44:55', dst='00:55:44:33:22:11')
+        p = Ether(src="00:11:22:33:44:55", dst="00:55:44:33:22:11")
         etype = 0x8137  # IPX
         if vlan:
             # add 802.1q layer
         etype = 0x8137  # IPX
         if vlan:
             # add 802.1q layer
@@ -695,8 +743,7 @@ class TestSRv6Ad(VppTestCase):
             p.type = etype
         return p
 
             p.type = etype
         return p
 
-    def create_packet_header_IPv6_SRH_L2(self, srcaddr, sidlist, segleft,
-                                         vlan=0):
+    def create_packet_header_IPv6_SRH_L2(self, srcaddr, sidlist, segleft, vlan=0):
         """Create packet header: L2 encapsulated in SRv6:
         IPv6 header with SRH, L2
 
         """Create packet header: L2 encapsulated in SRv6:
         IPv6 header with SRH, L2
 
@@ -708,7 +755,7 @@ class TestSRv6Ad(VppTestCase):
         IPv6 source address is set to srcaddr
         IPv6 destination address is set to sidlist[segleft]
         """
         IPv6 source address is set to srcaddr
         IPv6 destination address is set to sidlist[segleft]
         """
-        eth = Ether(src='00:11:22:33:44:55', dst='00:55:44:33:22:11')
+        eth = Ether(src="00:11:22:33:44:55", dst="00:55:44:33:22:11")
         etype = 0x8137  # IPX
         if vlan:
             # add 802.1q layer
         etype = 0x8137  # IPX
         if vlan:
             # add 802.1q layer
@@ -716,15 +763,15 @@ class TestSRv6Ad(VppTestCase):
         else:
             eth.type = etype
 
         else:
             eth.type = etype
 
-        p = IPv6(src=srcaddr, dst=sidlist[segleft]) / \
-            IPv6ExtHdrSegmentRouting(addresses=sidlist,
-                                     segleft=segleft, nh=143) / \
-            eth
+        p = (
+            IPv6(src=srcaddr, dst=sidlist[segleft])
+            / IPv6ExtHdrSegmentRouting(addresses=sidlist, segleft=segleft, nh=143)
+            / eth
+        )
         return p
 
     def get_payload_info(self, packet):
         return p
 
     def get_payload_info(self, packet):
-        """ Extract the payload_info from the packet
-        """
+        """Extract the payload_info from the packet"""
         # in most cases, payload_info is in packet[Raw]
         # but packet[Raw] gives the complete payload
         # (incl L2 header) for the T.Encaps L2 case
         # in most cases, payload_info is in packet[Raw]
         # but packet[Raw] gives the complete payload
         # (incl L2 header) for the T.Encaps L2 case
@@ -736,7 +783,8 @@ class TestSRv6Ad(VppTestCase):
             # take packet[Raw], convert it to an Ether layer
             # and then extract Raw from it
             payload_info = self.payload_to_info(
             # take packet[Raw], convert it to an Ether layer
             # and then extract Raw from it
             payload_info = self.payload_to_info(
-                Ether(scapy.compat.raw(packet[Raw]))[Raw])
+                Ether(scapy.compat.raw(packet[Raw]))[Raw]
+            )
 
         return payload_info
 
 
         return payload_info
 
@@ -749,8 +797,10 @@ class TestSRv6Ad(VppTestCase):
         :param capture: captured packets
         :param compare_func: function to compare in and out packet
         """
         :param capture: captured packets
         :param compare_func: function to compare in and out packet
         """
-        self.logger.info("Verifying capture on interface %s using function %s"
-                         % (dst_if.name, compare_func.__name__))
+        self.logger.info(
+            "Verifying capture on interface %s using function %s"
+            % (dst_if.name, compare_func.__name__)
+        )
 
         last_info = dict()
         for i in self.pg_interfaces:
 
         last_info = dict()
         for i in self.pg_interfaces:
@@ -763,19 +813,19 @@ class TestSRv6Ad(VppTestCase):
                 payload_info = self.get_payload_info(packet)
                 packet_index = payload_info.index
 
                 payload_info = self.get_payload_info(packet)
                 packet_index = payload_info.index
 
-                self.logger.debug("Verifying packet with index %d"
-                                  % (packet_index))
+                self.logger.debug("Verifying packet with index %d" % (packet_index))
                 # packet should have arrived on the expected interface
                 self.assertEqual(payload_info.dst, dst_sw_if_index)
                 self.logger.debug(
                 # packet should have arrived on the expected interface
                 self.assertEqual(payload_info.dst, dst_sw_if_index)
                 self.logger.debug(
-                    "Got packet on interface %s: src=%u (idx=%u)" %
-                    (dst_if.name, payload_info.src, packet_index))
+                    "Got packet on interface %s: src=%u (idx=%u)"
+                    % (dst_if.name, payload_info.src, packet_index)
+                )
 
                 # search for payload_info with same src and dst if_index
                 # this will give us the transmitted packet
                 next_info = self.get_next_packet_info_for_interface2(
 
                 # search for payload_info with same src and dst if_index
                 # this will give us the transmitted packet
                 next_info = self.get_next_packet_info_for_interface2(
-                    payload_info.src, dst_sw_if_index,
-                    last_info[payload_info.src])
+                    payload_info.src, dst_sw_if_index, last_info[payload_info.src]
+                )
                 last_info[payload_info.src] = next_info
                 # next_info should not be None
                 self.assertTrue(next_info is not None)
                 last_info[payload_info.src] = next_info
                 # next_info should not be None
                 self.assertTrue(next_info is not None)
@@ -784,8 +834,9 @@ class TestSRv6Ad(VppTestCase):
                 # data field of next_info contains the tx packet
                 txed_packet = next_info.data
 
                 # data field of next_info contains the tx packet
                 txed_packet = next_info.data
 
-                self.logger.debug(ppp("Transmitted packet:",
-                                      txed_packet))  # ppp=Pretty Print Packet
+                self.logger.debug(
+                    ppp("Transmitted packet:", txed_packet)
+                )  # ppp=Pretty Print Packet
 
                 self.logger.debug(ppp("Received packet:", packet))
 
 
                 self.logger.debug(ppp("Received packet:", packet))
 
@@ -799,11 +850,14 @@ class TestSRv6Ad(VppTestCase):
         # have all expected packets arrived?
         for i in self.pg_interfaces:
             remaining_packet = self.get_next_packet_info_for_interface2(
         # have all expected packets arrived?
         for i in self.pg_interfaces:
             remaining_packet = self.get_next_packet_info_for_interface2(
-                i.sw_if_index, dst_sw_if_index, last_info[i.sw_if_index])
-            self.assertTrue(remaining_packet is None,
-                            "Interface %s: Packet expected from interface %s "
-                            "didn't arrive" % (dst_if.name, i.name))
+                i.sw_if_index, dst_sw_if_index, last_info[i.sw_if_index]
+            )
+            self.assertTrue(
+                remaining_packet is None,
+                "Interface %s: Packet expected from interface %s "
+                "didn't arrive" % (dst_if.name, i.name),
+            )
 
 
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index 6b4ec19..4b274c9 100644 (file)
@@ -18,7 +18,7 @@ from util import ppp
 
 
 class TestSRv6AdFlow(VppTestCase):
 
 
 class TestSRv6AdFlow(VppTestCase):
-    """ SRv6 Flow-based Dynamic Proxy plugin Test Case """
+    """SRv6 Flow-based Dynamic Proxy plugin Test Case"""
 
     @classmethod
     def setUpClass(self):
 
     @classmethod
     def setUpClass(self):
@@ -29,8 +29,7 @@ class TestSRv6AdFlow(VppTestCase):
         super(TestSRv6AdFlow, cls).tearDownClass()
 
     def setUp(self):
         super(TestSRv6AdFlow, cls).tearDownClass()
 
     def setUp(self):
-        """ Perform test setup before each test case.
-        """
+        """Perform test setup before each test case."""
         super(TestSRv6AdFlow, self).setUp()
 
         # packet sizes, inclusive L2 overhead
         super(TestSRv6AdFlow, self).setUp()
 
         # packet sizes, inclusive L2 overhead
@@ -40,17 +39,15 @@ class TestSRv6AdFlow(VppTestCase):
         self.reset_packet_infos()
 
     def tearDown(self):
         self.reset_packet_infos()
 
     def tearDown(self):
-        """ Clean up test setup after each test case.
-        """
+        """Clean up test setup after each test case."""
         self.teardown_interfaces()
 
         super(TestSRv6AdFlow, self).tearDown()
 
         self.teardown_interfaces()
 
         super(TestSRv6AdFlow, self).tearDown()
 
-    def configure_interface(self,
-                            interface,
-                            ipv6=False, ipv4=False,
-                            ipv6_table_id=0, ipv4_table_id=0):
-        """ Configure interface.
+    def configure_interface(
+        self, interface, ipv6=False, ipv4=False, ipv6_table_id=0, ipv4_table_id=0
+    ):
+        """Configure interface.
         :param ipv6: configure IPv6 on interface
         :param ipv4: configure IPv4 on interface
         :param ipv6_table_id: FIB table_id for IPv6
         :param ipv6: configure IPv6 on interface
         :param ipv4: configure IPv4 on interface
         :param ipv6_table_id: FIB table_id for IPv6
@@ -69,9 +66,8 @@ class TestSRv6AdFlow(VppTestCase):
             interface.resolve_arp()
         interface.admin_up()
 
             interface.resolve_arp()
         interface.admin_up()
 
-    def setup_interfaces(self, ipv6=[], ipv4=[],
-                         ipv6_table_id=[], ipv4_table_id=[]):
-        """ Create and configure interfaces.
+    def setup_interfaces(self, ipv6=[], ipv4=[], ipv6_table_id=[], ipv4_table_id=[]):
+        """Create and configure interfaces.
 
         :param ipv6: list of interface IPv6 capabilities
         :param ipv4: list of interface IPv4 capabilities
 
         :param ipv6: list of interface IPv6 capabilities
         :param ipv4: list of interface IPv4 capabilities
@@ -106,9 +102,9 @@ class TestSRv6AdFlow(VppTestCase):
         # setup all interfaces
         for i in range(count):
             intf = self.pg_interfaces[i]
         # setup all interfaces
         for i in range(count):
             intf = self.pg_interfaces[i]
-            self.configure_interface(intf,
-                                     ipv6[i], ipv4[i],
-                                     ipv6_table_id[i], ipv4_table_id[i])
+            self.configure_interface(
+                intf, ipv6[i], ipv4[i], ipv6_table_id[i], ipv4_table_id[i]
+            )
 
         if any(ipv6):
             self.logger.debug(self.vapi.cli("show ip6 neighbors"))
 
         if any(ipv6):
             self.logger.debug(self.vapi.cli("show ip6 neighbors"))
@@ -120,8 +116,7 @@ class TestSRv6AdFlow(VppTestCase):
         return self.pg_interfaces
 
     def teardown_interfaces(self):
         return self.pg_interfaces
 
     def teardown_interfaces(self):
-        """ Unconfigure and bring down interface.
-        """
+        """Unconfigure and bring down interface."""
         self.logger.debug("Tearing down interfaces")
         # tear down all interfaces
         # AFAIK they cannot be deleted
         self.logger.debug("Tearing down interfaces")
         # tear down all interfaces
         # AFAIK they cannot be deleted
@@ -133,10 +128,9 @@ class TestSRv6AdFlow(VppTestCase):
             i.set_table_ip6(0)
 
     def test_SRv6_End_AD_IPv6(self):
             i.set_table_ip6(0)
 
     def test_SRv6_End_AD_IPv6(self):
-        """ Test SRv6 End.AD behavior with IPv6 traffic.
-        """
-        self.src_addr = 'a0::'
-        self.sid_list = ['a1::', 'a2::a6', 'a3::']
+        """Test SRv6 End.AD behavior with IPv6 traffic."""
+        self.src_addr = "a0::"
+        self.sid_list = ["a1::", "a2::a6", "a3::"]
         self.test_sid_index = 1
 
         # send traffic to one destination interface
         self.test_sid_index = 1
 
         # send traffic to one destination interface
@@ -144,19 +138,32 @@ class TestSRv6AdFlow(VppTestCase):
         self.setup_interfaces(ipv6=[True, True])
 
         # configure route to next segment
         self.setup_interfaces(ipv6=[True, True])
 
         # configure route to next segment
-        route = VppIpRoute(self, self.sid_list[self.test_sid_index + 1], 128,
-                           [VppRoutePath(self.pg0.remote_ip6,
-                                         self.pg0.sw_if_index,
-                                         proto=DpoProto.DPO_PROTO_IP6)])
+        route = VppIpRoute(
+            self,
+            self.sid_list[self.test_sid_index + 1],
+            128,
+            [
+                VppRoutePath(
+                    self.pg0.remote_ip6,
+                    self.pg0.sw_if_index,
+                    proto=DpoProto.DPO_PROTO_IP6,
+                )
+            ],
+        )
         route.add_vpp_config()
 
         # configure SRv6 localSID behavior
         route.add_vpp_config()
 
         # configure SRv6 localSID behavior
-        cli_str = "sr localsid address " + \
-                  self.sid_list[self.test_sid_index] + \
-                  " behavior end.ad.flow" + \
-                  " nh " + self.pg1.remote_ip6 + \
-                  " oif " + self.pg1.name + \
-                  " iif " + self.pg1.name
+        cli_str = (
+            "sr localsid address "
+            + self.sid_list[self.test_sid_index]
+            + " behavior end.ad.flow"
+            + " nh "
+            + self.pg1.remote_ip6
+            + " oif "
+            + self.pg1.name
+            + " iif "
+            + self.pg1.name
+        )
         self.vapi.cli(cli_str)
 
         # log the localsids
         self.vapi.cli(cli_str)
 
         # log the localsids
@@ -169,15 +176,18 @@ class TestSRv6AdFlow(VppTestCase):
         packet_header1 = self.create_packet_header_IPv6_SRH_IPv6(
             srcaddr=self.src_addr,
             sidlist=self.sid_list[::-1],
         packet_header1 = self.create_packet_header_IPv6_SRH_IPv6(
             srcaddr=self.src_addr,
             sidlist=self.sid_list[::-1],
-            segleft=len(self.sid_list) - self.test_sid_index - 1)
+            segleft=len(self.sid_list) - self.test_sid_index - 1,
+        )
 
         # generate packets (pg0->pg1)
 
         # generate packets (pg0->pg1)
-        pkts1 = self.create_stream(self.pg0, self.pg1, packet_header1,
-                                   self.pg_packet_sizes, count)
+        pkts1 = self.create_stream(
+            self.pg0, self.pg1, packet_header1, self.pg_packet_sizes, count
+        )
 
         # send packets and verify received packets
 
         # send packets and verify received packets
-        self.send_and_verify_pkts(self.pg0, pkts1, self.pg1,
-                                  self.compare_rx_tx_packet_End_AD_IPv6_out)
+        self.send_and_verify_pkts(
+            self.pg0, pkts1, self.pg1, self.compare_rx_tx_packet_End_AD_IPv6_out
+        )
 
         # log the localsid counters
         self.logger.info(self.vapi.cli("show sr localsid"))
 
         # log the localsid counters
         self.logger.info(self.vapi.cli("show sr localsid"))
@@ -186,26 +196,27 @@ class TestSRv6AdFlow(VppTestCase):
         packet_header2 = self.create_packet_header_IPv6()
 
         # generate returning packets (pg1->pg0)
         packet_header2 = self.create_packet_header_IPv6()
 
         # generate returning packets (pg1->pg0)
-        pkts2 = self.create_stream(self.pg1, self.pg0, packet_header2,
-                                   self.pg_packet_sizes, count)
+        pkts2 = self.create_stream(
+            self.pg1, self.pg0, packet_header2, self.pg_packet_sizes, count
+        )
 
         # send packets and verify received packets
 
         # send packets and verify received packets
-        self.send_and_verify_pkts(self.pg1, pkts2, self.pg0,
-                                  self.compare_rx_tx_packet_End_AD_IPv6_in)
+        self.send_and_verify_pkts(
+            self.pg1, pkts2, self.pg0, self.compare_rx_tx_packet_End_AD_IPv6_in
+        )
 
         # log the localsid counters
         self.logger.info(self.vapi.cli("show sr localsid"))
 
         # remove SRv6 localSIDs
 
         # log the localsid counters
         self.logger.info(self.vapi.cli("show sr localsid"))
 
         # remove SRv6 localSIDs
-        cli_str = "sr localsid del address " + \
-                  self.sid_list[self.test_sid_index]
+        cli_str = "sr localsid del address " + self.sid_list[self.test_sid_index]
         self.vapi.cli(cli_str)
 
         # cleanup interfaces
         self.teardown_interfaces()
 
     def compare_rx_tx_packet_End_AD_IPv6_out(self, tx_pkt, rx_pkt):
         self.vapi.cli(cli_str)
 
         # cleanup interfaces
         self.teardown_interfaces()
 
     def compare_rx_tx_packet_End_AD_IPv6_out(self, tx_pkt, rx_pkt):
-        """ Compare input and output packet after passing End.AD with IPv6
+        """Compare input and output packet after passing End.AD with IPv6
 
         :param tx_pkt: transmitted packet
         :param rx_pkt: received packet
 
         :param tx_pkt: transmitted packet
         :param rx_pkt: received packet
@@ -230,7 +241,7 @@ class TestSRv6AdFlow(VppTestCase):
         self.logger.debug("packet verification: SUCCESS")
 
     def compare_rx_tx_packet_End_AD_IPv6_in(self, tx_pkt, rx_pkt):
         self.logger.debug("packet verification: SUCCESS")
 
     def compare_rx_tx_packet_End_AD_IPv6_in(self, tx_pkt, rx_pkt):
-        """ Compare input and output packet after passing End.AD
+        """Compare input and output packet after passing End.AD
 
         :param tx_pkt: transmitted packet
         :param rx_pkt: received packet
 
         :param tx_pkt: transmitted packet
         :param rx_pkt: received packet
@@ -251,8 +262,7 @@ class TestSRv6AdFlow(VppTestCase):
         # rx'ed seglist should be equal to SID-list in reversed order
         self.assertEqual(rx_srh.addresses, self.sid_list[::-1])
         # segleft should be equal to previous segleft value minus 1
         # rx'ed seglist should be equal to SID-list in reversed order
         self.assertEqual(rx_srh.addresses, self.sid_list[::-1])
         # segleft should be equal to previous segleft value minus 1
-        self.assertEqual(rx_srh.segleft,
-                         len(self.sid_list) - self.test_sid_index - 2)
+        self.assertEqual(rx_srh.segleft, len(self.sid_list) - self.test_sid_index - 2)
         # lastentry should be equal to the SID-list length minus 1
         self.assertEqual(rx_srh.lastentry, len(self.sid_list) - 1)
 
         # lastentry should be equal to the SID-list length minus 1
         self.assertEqual(rx_srh.lastentry, len(self.sid_list) - 1)
 
@@ -267,10 +277,9 @@ class TestSRv6AdFlow(VppTestCase):
         self.logger.debug("packet verification: SUCCESS")
 
     def test_SRv6_End_AD_IPv4(self):
         self.logger.debug("packet verification: SUCCESS")
 
     def test_SRv6_End_AD_IPv4(self):
-        """ Test SRv6 End.AD behavior with IPv4 traffic.
-        """
-        self.src_addr = 'a0::'
-        self.sid_list = ['a1::', 'a2::a4', 'a3::']
+        """Test SRv6 End.AD behavior with IPv4 traffic."""
+        self.src_addr = "a0::"
+        self.sid_list = ["a1::", "a2::a4", "a3::"]
         self.test_sid_index = 1
 
         # send traffic to one destination interface
         self.test_sid_index = 1
 
         # send traffic to one destination interface
@@ -278,19 +287,32 @@ class TestSRv6AdFlow(VppTestCase):
         self.setup_interfaces(ipv6=[True, False], ipv4=[False, True])
 
         # configure route to next segment
         self.setup_interfaces(ipv6=[True, False], ipv4=[False, True])
 
         # configure route to next segment
-        route = VppIpRoute(self, self.sid_list[self.test_sid_index + 1], 128,
-                           [VppRoutePath(self.pg0.remote_ip6,
-                                         self.pg0.sw_if_index,
-                                         proto=DpoProto.DPO_PROTO_IP6)])
+        route = VppIpRoute(
+            self,
+            self.sid_list[self.test_sid_index + 1],
+            128,
+            [
+                VppRoutePath(
+                    self.pg0.remote_ip6,
+                    self.pg0.sw_if_index,
+                    proto=DpoProto.DPO_PROTO_IP6,
+                )
+            ],
+        )
         route.add_vpp_config()
 
         # configure SRv6 localSID behavior
         route.add_vpp_config()
 
         # configure SRv6 localSID behavior
-        cli_str = "sr localsid address " + \
-                  self.sid_list[self.test_sid_index] + \
-                  " behavior end.ad.flow" + \
-                  " nh " + self.pg1.remote_ip4 + \
-                  " oif " + self.pg1.name + \
-                  " iif " + self.pg1.name
+        cli_str = (
+            "sr localsid address "
+            + self.sid_list[self.test_sid_index]
+            + " behavior end.ad.flow"
+            + " nh "
+            + self.pg1.remote_ip4
+            + " oif "
+            + self.pg1.name
+            + " iif "
+            + self.pg1.name
+        )
         self.vapi.cli(cli_str)
 
         # log the localsids
         self.vapi.cli(cli_str)
 
         # log the localsids
@@ -303,15 +325,18 @@ class TestSRv6AdFlow(VppTestCase):
         packet_header1 = self.create_packet_header_IPv6_SRH_IPv4(
             srcaddr=self.src_addr,
             sidlist=self.sid_list[::-1],
         packet_header1 = self.create_packet_header_IPv6_SRH_IPv4(
             srcaddr=self.src_addr,
             sidlist=self.sid_list[::-1],
-            segleft=len(self.sid_list) - self.test_sid_index - 1)
+            segleft=len(self.sid_list) - self.test_sid_index - 1,
+        )
 
         # generate packets (pg0->pg1)
 
         # generate packets (pg0->pg1)
-        pkts1 = self.create_stream(self.pg0, self.pg1, packet_header1,
-                                   self.pg_packet_sizes, count)
+        pkts1 = self.create_stream(
+            self.pg0, self.pg1, packet_header1, self.pg_packet_sizes, count
+        )
 
         # send packets and verify received packets
 
         # send packets and verify received packets
-        self.send_and_verify_pkts(self.pg0, pkts1, self.pg1,
-                                  self.compare_rx_tx_packet_End_AD_IPv4_out)
+        self.send_and_verify_pkts(
+            self.pg0, pkts1, self.pg1, self.compare_rx_tx_packet_End_AD_IPv4_out
+        )
 
         # log the localsid counters
         self.logger.info(self.vapi.cli("show sr localsid"))
 
         # log the localsid counters
         self.logger.info(self.vapi.cli("show sr localsid"))
@@ -320,26 +345,27 @@ class TestSRv6AdFlow(VppTestCase):
         packet_header2 = self.create_packet_header_IPv4()
 
         # generate returning packets (pg1->pg0)
         packet_header2 = self.create_packet_header_IPv4()
 
         # generate returning packets (pg1->pg0)
-        pkts2 = self.create_stream(self.pg1, self.pg0, packet_header2,
-                                   self.pg_packet_sizes, count)
+        pkts2 = self.create_stream(
+            self.pg1, self.pg0, packet_header2, self.pg_packet_sizes, count
+        )
 
         # send packets and verify received packets
 
         # send packets and verify received packets
-        self.send_and_verify_pkts(self.pg1, pkts2, self.pg0,
-                                  self.compare_rx_tx_packet_End_AD_IPv4_in)
+        self.send_and_verify_pkts(
+            self.pg1, pkts2, self.pg0, self.compare_rx_tx_packet_End_AD_IPv4_in
+        )
 
         # log the localsid counters
         self.logger.info(self.vapi.cli("show sr localsid"))
 
         # remove SRv6 localSIDs
 
         # log the localsid counters
         self.logger.info(self.vapi.cli("show sr localsid"))
 
         # remove SRv6 localSIDs
-        cli_str = "sr localsid del address " + \
-                  self.sid_list[self.test_sid_index]
+        cli_str = "sr localsid del address " + self.sid_list[self.test_sid_index]
         self.vapi.cli(cli_str)
 
         # cleanup interfaces
         self.teardown_interfaces()
 
     def compare_rx_tx_packet_End_AD_IPv4_out(self, tx_pkt, rx_pkt):
         self.vapi.cli(cli_str)
 
         # cleanup interfaces
         self.teardown_interfaces()
 
     def compare_rx_tx_packet_End_AD_IPv4_out(self, tx_pkt, rx_pkt):
-        """ Compare input and output packet after passing End.AD with IPv4
+        """Compare input and output packet after passing End.AD with IPv4
 
         :param tx_pkt: transmitted packet
         :param rx_pkt: received packet
 
         :param tx_pkt: transmitted packet
         :param rx_pkt: received packet
@@ -369,7 +395,7 @@ class TestSRv6AdFlow(VppTestCase):
         self.logger.debug("packet verification: SUCCESS")
 
     def compare_rx_tx_packet_End_AD_IPv4_in(self, tx_pkt, rx_pkt):
         self.logger.debug("packet verification: SUCCESS")
 
     def compare_rx_tx_packet_End_AD_IPv4_in(self, tx_pkt, rx_pkt):
-        """ Compare input and output packet after passing End.AD
+        """Compare input and output packet after passing End.AD
 
         :param tx_pkt: transmitted packet
         :param rx_pkt: received packet
 
         :param tx_pkt: transmitted packet
         :param rx_pkt: received packet
@@ -390,8 +416,7 @@ class TestSRv6AdFlow(VppTestCase):
         # rx'ed seglist should be equal to SID-list in reversed order
         self.assertEqual(rx_srh.addresses, self.sid_list[::-1])
         # segleft should be equal to previous segleft value minus 1
         # rx'ed seglist should be equal to SID-list in reversed order
         self.assertEqual(rx_srh.addresses, self.sid_list[::-1])
         # segleft should be equal to previous segleft value minus 1
-        self.assertEqual(rx_srh.segleft,
-                         len(self.sid_list) - self.test_sid_index - 2)
+        self.assertEqual(rx_srh.segleft, len(self.sid_list) - self.test_sid_index - 2)
         # lastentry should be equal to the SID-list length minus 1
         self.assertEqual(rx_srh.lastentry, len(self.sid_list) - 1)
 
         # lastentry should be equal to the SID-list length minus 1
         self.assertEqual(rx_srh.lastentry, len(self.sid_list) - 1)
 
@@ -408,8 +433,7 @@ class TestSRv6AdFlow(VppTestCase):
 
         self.logger.debug("packet verification: SUCCESS")
 
 
         self.logger.debug("packet verification: SUCCESS")
 
-    def create_stream(self, src_if, dst_if, packet_header, packet_sizes,
-                      count):
+    def create_stream(self, src_if, dst_if, packet_header, packet_sizes, count):
         """Create SRv6 input packet stream for defined interface.
 
         :param VppInterface src_if: Interface to create packet stream for
         """Create SRv6 input packet stream for defined interface.
 
         :param VppInterface src_if: Interface to create packet stream for
@@ -426,15 +450,17 @@ class TestSRv6AdFlow(VppTestCase):
         pkts = []
         for i in range(0, count - 1):
             payload_info = self.create_packet_info(src_if, dst_if)
         pkts = []
         for i in range(0, count - 1):
             payload_info = self.create_packet_info(src_if, dst_if)
-            self.logger.debug(
-                "Creating packet with index %d" % (payload_info.index))
+            self.logger.debug("Creating packet with index %d" % (payload_info.index))
             payload = self.info_to_payload(payload_info)
             # add L2 header if not yet provided in packet_header
             payload = self.info_to_payload(payload_info)
             # add L2 header if not yet provided in packet_header
-            if packet_header.getlayer(0).name == 'Ethernet':
+            if packet_header.getlayer(0).name == "Ethernet":
                 p = packet_header / Raw(payload)
             else:
                 p = packet_header / Raw(payload)
             else:
-                p = Ether(dst=src_if.local_mac, src=src_if.remote_mac) / \
-                    packet_header / Raw(payload)
+                p = (
+                    Ether(dst=src_if.local_mac, src=src_if.remote_mac)
+                    / packet_header
+                    / Raw(payload)
+                )
             size = packet_sizes[i % len(packet_sizes)]
             self.logger.debug("Packet size %d" % (size))
             self.extend_packet(p, size)
             size = packet_sizes[i % len(packet_sizes)]
             self.logger.debug("Packet size %d" % (size))
             self.extend_packet(p, size)
@@ -477,8 +503,9 @@ class TestSRv6AdFlow(VppTestCase):
         # verify captured packets
         self.verify_captured_pkts(output, capture, compare_func)
 
         # verify captured packets
         self.verify_captured_pkts(output, capture, compare_func)
 
-    def create_packet_header_IPv6(self, saddr='1234::1', daddr='4321::1',
-                                  sport=1234, dport=1234):
+    def create_packet_header_IPv6(
+        self, saddr="1234::1", daddr="4321::1", sport=1234, dport=1234
+    ):
         """Create packet header: IPv6 header, UDP header
 
         :param dst: IPv6 destination address
         """Create packet header: IPv6 header, UDP header
 
         :param dst: IPv6 destination address
@@ -491,9 +518,16 @@ class TestSRv6AdFlow(VppTestCase):
         p = IPv6(src=saddr, dst=daddr) / UDP(sport=sport, dport=dport)
         return p
 
         p = IPv6(src=saddr, dst=daddr) / UDP(sport=sport, dport=dport)
         return p
 
-    def create_packet_header_IPv6_SRH_IPv6(self, srcaddr, sidlist, segleft,
-                                           insrc='1234::1', indst='4321::1',
-                                           sport=1234, dport=1234):
+    def create_packet_header_IPv6_SRH_IPv6(
+        self,
+        srcaddr,
+        sidlist,
+        segleft,
+        insrc="1234::1",
+        indst="4321::1",
+        sport=1234,
+        dport=1234,
+    ):
         """Create packet header: IPv6 encapsulated in SRv6:
         IPv6 header with SRH, IPv6 header, UDP header
 
         """Create packet header: IPv6 encapsulated in SRv6:
         IPv6 header with SRH, IPv6 header, UDP header
 
@@ -508,11 +542,12 @@ class TestSRv6AdFlow(VppTestCase):
         UDP source port and destination port are 1234
         """
 
         UDP source port and destination port are 1234
         """
 
-        p = IPv6(src=srcaddr, dst=sidlist[segleft]) / \
-            IPv6ExtHdrSegmentRouting(addresses=sidlist,
-                                     segleft=segleft, nh=41) / \
-            IPv6(src=insrc, dst=indst) / \
-            UDP(sport=sport, dport=dport)
+        p = (
+            IPv6(src=srcaddr, dst=sidlist[segleft])
+            / IPv6ExtHdrSegmentRouting(addresses=sidlist, segleft=segleft, nh=41)
+            / IPv6(src=insrc, dst=indst)
+            / UDP(sport=sport, dport=dport)
+        )
         return p
 
     def create_packet_header_IPv4(self):
         return p
 
     def create_packet_header_IPv4(self):
@@ -525,7 +560,7 @@ class TestSRv6AdFlow(VppTestCase):
         UDP source port and destination port are 1234
         """
 
         UDP source port and destination port are 1234
         """
 
-        p = IP(src='123.1.1.1', dst='124.1.1.1') / UDP(sport=1234, dport=1234)
+        p = IP(src="123.1.1.1", dst="124.1.1.1") / UDP(sport=1234, dport=1234)
         return p
 
     def create_packet_header_IPv6_SRH_IPv4(self, srcaddr, sidlist, segleft):
         return p
 
     def create_packet_header_IPv6_SRH_IPv4(self, srcaddr, sidlist, segleft):
@@ -543,16 +578,16 @@ class TestSRv6AdFlow(VppTestCase):
         UDP source port and destination port are 1234
         """
 
         UDP source port and destination port are 1234
         """
 
-        p = IPv6(src=srcaddr, dst=sidlist[segleft]) / \
-            IPv6ExtHdrSegmentRouting(addresses=sidlist,
-                                     segleft=segleft, nh=4) / \
-            IP(src='123.1.1.1', dst='124.1.1.1') / \
-            UDP(sport=1234, dport=1234)
+        p = (
+            IPv6(src=srcaddr, dst=sidlist[segleft])
+            / IPv6ExtHdrSegmentRouting(addresses=sidlist, segleft=segleft, nh=4)
+            / IP(src="123.1.1.1", dst="124.1.1.1")
+            / UDP(sport=1234, dport=1234)
+        )
         return p
 
     def get_payload_info(self, packet):
         return p
 
     def get_payload_info(self, packet):
-        """ Extract the payload_info from the packet
-        """
+        """Extract the payload_info from the packet"""
         # in most cases, payload_info is in packet[Raw]
         # but packet[Raw] gives the complete payload
         # (incl L2 header) for the T.Encaps L2 case
         # in most cases, payload_info is in packet[Raw]
         # but packet[Raw] gives the complete payload
         # (incl L2 header) for the T.Encaps L2 case
@@ -564,7 +599,8 @@ class TestSRv6AdFlow(VppTestCase):
             # take packet[Raw], convert it to an Ether layer
             # and then extract Raw from it
             payload_info = self.payload_to_info(
             # take packet[Raw], convert it to an Ether layer
             # and then extract Raw from it
             payload_info = self.payload_to_info(
-                Ether(scapy.compat.raw(packet[Raw]))[Raw])
+                Ether(scapy.compat.raw(packet[Raw]))[Raw]
+            )
 
         return payload_info
 
 
         return payload_info
 
@@ -577,8 +613,10 @@ class TestSRv6AdFlow(VppTestCase):
         :param capture: captured packets
         :param compare_func: function to compare in and out packet
         """
         :param capture: captured packets
         :param compare_func: function to compare in and out packet
         """
-        self.logger.info("Verifying capture on interface %s using function %s"
-                         % (dst_if.name, compare_func.__name__))
+        self.logger.info(
+            "Verifying capture on interface %s using function %s"
+            % (dst_if.name, compare_func.__name__)
+        )
 
         last_info = dict()
         for i in self.pg_interfaces:
 
         last_info = dict()
         for i in self.pg_interfaces:
@@ -591,19 +629,19 @@ class TestSRv6AdFlow(VppTestCase):
                 payload_info = self.get_payload_info(packet)
                 packet_index = payload_info.index
 
                 payload_info = self.get_payload_info(packet)
                 packet_index = payload_info.index
 
-                self.logger.debug("Verifying packet with index %d"
-                                  % (packet_index))
+                self.logger.debug("Verifying packet with index %d" % (packet_index))
                 # packet should have arrived on the expected interface
                 self.assertEqual(payload_info.dst, dst_sw_if_index)
                 self.logger.debug(
                 # packet should have arrived on the expected interface
                 self.assertEqual(payload_info.dst, dst_sw_if_index)
                 self.logger.debug(
-                    "Got packet on interface %s: src=%u (idx=%u)" %
-                    (dst_if.name, payload_info.src, packet_index))
+                    "Got packet on interface %s: src=%u (idx=%u)"
+                    % (dst_if.name, payload_info.src, packet_index)
+                )
 
                 # search for payload_info with same src and dst if_index
                 # this will give us the transmitted packet
                 next_info = self.get_next_packet_info_for_interface2(
 
                 # search for payload_info with same src and dst if_index
                 # this will give us the transmitted packet
                 next_info = self.get_next_packet_info_for_interface2(
-                    payload_info.src, dst_sw_if_index,
-                    last_info[payload_info.src])
+                    payload_info.src, dst_sw_if_index, last_info[payload_info.src]
+                )
                 last_info[payload_info.src] = next_info
                 # next_info should not be None
                 self.assertTrue(next_info is not None)
                 last_info[payload_info.src] = next_info
                 # next_info should not be None
                 self.assertTrue(next_info is not None)
@@ -612,8 +650,9 @@ class TestSRv6AdFlow(VppTestCase):
                 # data field of next_info contains the tx packet
                 txed_packet = next_info.data
 
                 # data field of next_info contains the tx packet
                 txed_packet = next_info.data
 
-                self.logger.debug(ppp("Transmitted packet:",
-                                      txed_packet))  # ppp=Pretty Print Packet
+                self.logger.debug(
+                    ppp("Transmitted packet:", txed_packet)
+                )  # ppp=Pretty Print Packet
 
                 self.logger.debug(ppp("Received packet:", packet))
 
 
                 self.logger.debug(ppp("Received packet:", packet))
 
@@ -627,11 +666,14 @@ class TestSRv6AdFlow(VppTestCase):
         # have all expected packets arrived?
         for i in self.pg_interfaces:
             remaining_packet = self.get_next_packet_info_for_interface2(
         # have all expected packets arrived?
         for i in self.pg_interfaces:
             remaining_packet = self.get_next_packet_info_for_interface2(
-                i.sw_if_index, dst_sw_if_index, last_info[i.sw_if_index])
-            self.assertTrue(remaining_packet is None,
-                            "Interface %s: Packet expected from interface %s "
-                            "didn't arrive" % (dst_if.name, i.name))
+                i.sw_if_index, dst_sw_if_index, last_info[i.sw_if_index]
+            )
+            self.assertTrue(
+                remaining_packet is None,
+                "Interface %s: Packet expected from interface %s "
+                "didn't arrive" % (dst_if.name, i.name),
+            )
 
 
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index 947633e..87cafd1 100644 (file)
@@ -6,8 +6,14 @@ from socket import AF_INET6
 
 from framework import VppTestCase, VppTestRunner
 from vpp_ip_route import VppIpRoute, VppRoutePath, FibPathProto, VppIpTable
 
 from framework import VppTestCase, VppTestRunner
 from vpp_ip_route import VppIpRoute, VppRoutePath, FibPathProto, VppIpTable
-from vpp_srv6 import SRv6LocalSIDBehaviors, VppSRv6LocalSID, VppSRv6Policy, \
-    SRv6PolicyType, VppSRv6Steering, SRv6PolicySteeringTypes
+from vpp_srv6 import (
+    SRv6LocalSIDBehaviors,
+    VppSRv6LocalSID,
+    VppSRv6Policy,
+    SRv6PolicyType,
+    VppSRv6Steering,
+    SRv6PolicySteeringTypes,
+)
 
 import scapy.compat
 from scapy.packet import Raw
 
 import scapy.compat
 from scapy.packet import Raw
@@ -19,7 +25,7 @@ from util import ppp
 
 
 class TestSRv6As(VppTestCase):
 
 
 class TestSRv6As(VppTestCase):
-    """ SRv6 Static Proxy plugin Test Case """
+    """SRv6 Static Proxy plugin Test Case"""
 
     @classmethod
     def setUpClass(self):
 
     @classmethod
     def setUpClass(self):
@@ -30,8 +36,7 @@ class TestSRv6As(VppTestCase):
         super(TestSRv6As, cls).tearDownClass()
 
     def setUp(self):
         super(TestSRv6As, cls).tearDownClass()
 
     def setUp(self):
-        """ Perform test setup before each test case.
-        """
+        """Perform test setup before each test case."""
         super(TestSRv6As, self).setUp()
 
         # packet sizes, inclusive L2 overhead
         super(TestSRv6As, self).setUp()
 
         # packet sizes, inclusive L2 overhead
@@ -41,17 +46,15 @@ class TestSRv6As(VppTestCase):
         self.reset_packet_infos()
 
     def tearDown(self):
         self.reset_packet_infos()
 
     def tearDown(self):
-        """ Clean up test setup after each test case.
-        """
+        """Clean up test setup after each test case."""
         self.teardown_interfaces()
 
         super(TestSRv6As, self).tearDown()
 
         self.teardown_interfaces()
 
         super(TestSRv6As, self).tearDown()
 
-    def configure_interface(self,
-                            interface,
-                            ipv6=False, ipv4=False,
-                            ipv6_table_id=0, ipv4_table_id=0):
-        """ Configure interface.
+    def configure_interface(
+        self, interface, ipv6=False, ipv4=False, ipv6_table_id=0, ipv4_table_id=0
+    ):
+        """Configure interface.
         :param ipv6: configure IPv6 on interface
         :param ipv4: configure IPv4 on interface
         :param ipv6_table_id: FIB table_id for IPv6
         :param ipv6: configure IPv6 on interface
         :param ipv4: configure IPv4 on interface
         :param ipv6_table_id: FIB table_id for IPv6
@@ -70,9 +73,8 @@ class TestSRv6As(VppTestCase):
             interface.resolve_arp()
         interface.admin_up()
 
             interface.resolve_arp()
         interface.admin_up()
 
-    def setup_interfaces(self, ipv6=[], ipv4=[],
-                         ipv6_table_id=[], ipv4_table_id=[]):
-        """ Create and configure interfaces.
+    def setup_interfaces(self, ipv6=[], ipv4=[], ipv6_table_id=[], ipv4_table_id=[]):
+        """Create and configure interfaces.
 
         :param ipv6: list of interface IPv6 capabilities
         :param ipv4: list of interface IPv4 capabilities
 
         :param ipv6: list of interface IPv6 capabilities
         :param ipv4: list of interface IPv4 capabilities
@@ -107,9 +109,9 @@ class TestSRv6As(VppTestCase):
         # setup all interfaces
         for i in range(count):
             intf = self.pg_interfaces[i]
         # setup all interfaces
         for i in range(count):
             intf = self.pg_interfaces[i]
-            self.configure_interface(intf,
-                                     ipv6[i], ipv4[i],
-                                     ipv6_table_id[i], ipv4_table_id[i])
+            self.configure_interface(
+                intf, ipv6[i], ipv4[i], ipv6_table_id[i], ipv4_table_id[i]
+            )
 
         if any(ipv6):
             self.logger.debug(self.vapi.cli("show ip6 neighbors"))
 
         if any(ipv6):
             self.logger.debug(self.vapi.cli("show ip6 neighbors"))
@@ -121,8 +123,7 @@ class TestSRv6As(VppTestCase):
         return self.pg_interfaces
 
     def teardown_interfaces(self):
         return self.pg_interfaces
 
     def teardown_interfaces(self):
-        """ Unconfigure and bring down interface.
-        """
+        """Unconfigure and bring down interface."""
         self.logger.debug("Tearing down interfaces")
         # tear down all interfaces
         # AFAIK they cannot be deleted
         self.logger.debug("Tearing down interfaces")
         # tear down all interfaces
         # AFAIK they cannot be deleted
@@ -134,75 +135,83 @@ class TestSRv6As(VppTestCase):
             i.set_table_ip6(0)
 
     def test_SRv6_End_AS_IPv6_noSRH(self):
             i.set_table_ip6(0)
 
     def test_SRv6_End_AS_IPv6_noSRH(self):
-        """ Test SRv6 End.AS behavior with IPv6 traffic and no SRH rewrite.
-        """
+        """Test SRv6 End.AS behavior with IPv6 traffic and no SRH rewrite."""
         self.run_SRv6_End_AS_IPv6(
         self.run_SRv6_End_AS_IPv6(
-            sid_list=['a1::', 'a2::a6', 'a3::'],
+            sid_list=["a1::", "a2::a6", "a3::"],
             test_sid_index=1,
             test_sid_index=1,
-            rewrite_src_addr='a2::')
+            rewrite_src_addr="a2::",
+        )
 
     def test_SRv6_End_AS_IPv6_SRH(self):
 
     def test_SRv6_End_AS_IPv6_SRH(self):
-        """ Test SRv6 End.AS behavior with IPv6 traffic and SRH rewrite.
-        """
+        """Test SRv6 End.AS behavior with IPv6 traffic and SRH rewrite."""
         self.run_SRv6_End_AS_IPv6(
         self.run_SRv6_End_AS_IPv6(
-            sid_list=['a1::a6', 'a2::', 'a3::'],
+            sid_list=["a1::a6", "a2::", "a3::"],
             test_sid_index=0,
             test_sid_index=0,
-            rewrite_src_addr='a1::')
+            rewrite_src_addr="a1::",
+        )
 
     def test_SRv6_End_AS_IPv4_noSRH(self):
 
     def test_SRv6_End_AS_IPv4_noSRH(self):
-        """ Test SRv6 End.AS behavior with IPv4 traffic and no SRH rewrite.
-        """
+        """Test SRv6 End.AS behavior with IPv4 traffic and no SRH rewrite."""
         self.run_SRv6_End_AS_IPv4(
         self.run_SRv6_End_AS_IPv4(
-            sid_list=['a1::', 'a2::a6', 'a3::'],
+            sid_list=["a1::", "a2::a6", "a3::"],
             test_sid_index=1,
             test_sid_index=1,
-            rewrite_src_addr='a2::')
+            rewrite_src_addr="a2::",
+        )
 
     def test_SRv6_End_AS_IPv4_SRH(self):
 
     def test_SRv6_End_AS_IPv4_SRH(self):
-        """ Test SRv6 End.AS behavior with IPv4 traffic and SRH rewrite.
-        """
+        """Test SRv6 End.AS behavior with IPv4 traffic and SRH rewrite."""
         self.run_SRv6_End_AS_IPv4(
         self.run_SRv6_End_AS_IPv4(
-            sid_list=['a1::a6', 'a2::', 'a3::'],
+            sid_list=["a1::a6", "a2::", "a3::"],
             test_sid_index=0,
             test_sid_index=0,
-            rewrite_src_addr='a1::')
+            rewrite_src_addr="a1::",
+        )
 
     def test_SRv6_End_AS_L2_noSRH(self):
 
     def test_SRv6_End_AS_L2_noSRH(self):
-        """ Test SRv6 End.AS behavior with L2 traffic and no SRH rewrite.
-        """
+        """Test SRv6 End.AS behavior with L2 traffic and no SRH rewrite."""
         self.run_SRv6_End_AS_L2(
         self.run_SRv6_End_AS_L2(
-            sid_list=['a1::', 'a2::a6', 'a3::'],
+            sid_list=["a1::", "a2::a6", "a3::"],
             test_sid_index=1,
             test_sid_index=1,
-            rewrite_src_addr='a2::')
+            rewrite_src_addr="a2::",
+        )
 
     def test_SRv6_End_AS_L2_SRH(self):
 
     def test_SRv6_End_AS_L2_SRH(self):
-        """ Test SRv6 End.AS behavior with L2 traffic and SRH rewrite.
-        """
+        """Test SRv6 End.AS behavior with L2 traffic and SRH rewrite."""
         self.run_SRv6_End_AS_L2(
         self.run_SRv6_End_AS_L2(
-            sid_list=['a1::a6', 'a2::', 'a3::'],
+            sid_list=["a1::a6", "a2::", "a3::"],
             test_sid_index=0,
             test_sid_index=0,
-            rewrite_src_addr='a1::')
+            rewrite_src_addr="a1::",
+        )
 
     def run_SRv6_End_AS_L2(self, sid_list, test_sid_index, rewrite_src_addr):
 
     def run_SRv6_End_AS_L2(self, sid_list, test_sid_index, rewrite_src_addr):
-        """ Run SRv6 End.AS test with L2 traffic.
-        """
+        """Run SRv6 End.AS test with L2 traffic."""
         self.rewrite_src_addr = rewrite_src_addr
         self.rewrite_src_addr = rewrite_src_addr
-        self.rewrite_sid_list = sid_list[test_sid_index + 1::]
+        self.rewrite_sid_list = sid_list[test_sid_index + 1 : :]
 
         # send traffic to one destination interface
         # source and destination interfaces are IPv6 only
         self.setup_interfaces(ipv6=[True, False])
 
         # configure route to next segment
 
         # send traffic to one destination interface
         # source and destination interfaces are IPv6 only
         self.setup_interfaces(ipv6=[True, False])
 
         # configure route to next segment
-        route = VppIpRoute(self, sid_list[test_sid_index + 1], 128,
-                           [VppRoutePath(self.pg0.remote_ip6,
-                                         self.pg0.sw_if_index)])
+        route = VppIpRoute(
+            self,
+            sid_list[test_sid_index + 1],
+            128,
+            [VppRoutePath(self.pg0.remote_ip6, self.pg0.sw_if_index)],
+        )
         route.add_vpp_config()
 
         # configure SRv6 localSID behavior
         route.add_vpp_config()
 
         # configure SRv6 localSID behavior
-        cli_str = "sr localsid address " + sid_list[test_sid_index] \
-            + " behavior end.as" \
-            + " oif " + self.pg1.name \
-            + " iif " + self.pg1.name \
-            + " src " + self.rewrite_src_addr
+        cli_str = (
+            "sr localsid address "
+            + sid_list[test_sid_index]
+            + " behavior end.as"
+            + " oif "
+            + self.pg1.name
+            + " iif "
+            + self.pg1.name
+            + " src "
+            + self.rewrite_src_addr
+        )
         for s in self.rewrite_sid_list:
             cli_str += " next " + s
         self.vapi.cli(cli_str)
         for s in self.rewrite_sid_list:
             cli_str += " next " + s
         self.vapi.cli(cli_str)
@@ -215,17 +224,18 @@ class TestSRv6As(VppTestCase):
 
         # prepare L2 in SRv6 headers
         packet_header1 = self.create_packet_header_IPv6_SRH_L2(
 
         # prepare L2 in SRv6 headers
         packet_header1 = self.create_packet_header_IPv6_SRH_L2(
-                        sidlist=sid_list[::-1],
-                        segleft=len(sid_list) - test_sid_index - 1,
-                        vlan=0)
+            sidlist=sid_list[::-1], segleft=len(sid_list) - test_sid_index - 1, vlan=0
+        )
 
         # generate packets (pg0->pg1)
 
         # generate packets (pg0->pg1)
-        pkts1 = self.create_stream(self.pg0, self.pg1, packet_header1,
-                                   self.pg_packet_sizes, count)
+        pkts1 = self.create_stream(
+            self.pg0, self.pg1, packet_header1, self.pg_packet_sizes, count
+        )
 
         # send packets and verify received packets
 
         # send packets and verify received packets
-        self.send_and_verify_pkts(self.pg0, pkts1, self.pg1,
-                                  self.compare_rx_tx_packet_End_AS_L2_out)
+        self.send_and_verify_pkts(
+            self.pg0, pkts1, self.pg1, self.compare_rx_tx_packet_End_AS_L2_out
+        )
 
         # log the localsid counters
         self.logger.info(self.vapi.cli("show sr localsid"))
 
         # log the localsid counters
         self.logger.info(self.vapi.cli("show sr localsid"))
@@ -234,12 +244,14 @@ class TestSRv6As(VppTestCase):
         packet_header2 = self.create_packet_header_L2()
 
         # generate returning packets (pg1->pg0)
         packet_header2 = self.create_packet_header_L2()
 
         # generate returning packets (pg1->pg0)
-        pkts2 = self.create_stream(self.pg1, self.pg0, packet_header2,
-                                   self.pg_packet_sizes, count)
+        pkts2 = self.create_stream(
+            self.pg1, self.pg0, packet_header2, self.pg_packet_sizes, count
+        )
 
         # send packets and verify received packets
 
         # send packets and verify received packets
-        self.send_and_verify_pkts(self.pg1, pkts2, self.pg0,
-                                  self.compare_rx_tx_packet_End_AS_L2_in)
+        self.send_and_verify_pkts(
+            self.pg1, pkts2, self.pg0, self.compare_rx_tx_packet_End_AS_L2_in
+        )
 
         # log the localsid counters
         self.logger.info(self.vapi.cli("show sr localsid"))
 
         # log the localsid counters
         self.logger.info(self.vapi.cli("show sr localsid"))
@@ -251,28 +263,37 @@ class TestSRv6As(VppTestCase):
         self.teardown_interfaces()
 
     def run_SRv6_End_AS_IPv6(self, sid_list, test_sid_index, rewrite_src_addr):
         self.teardown_interfaces()
 
     def run_SRv6_End_AS_IPv6(self, sid_list, test_sid_index, rewrite_src_addr):
-        """ Run SRv6 End.AS test with IPv6 traffic.
-        """
+        """Run SRv6 End.AS test with IPv6 traffic."""
         self.rewrite_src_addr = rewrite_src_addr
         self.rewrite_src_addr = rewrite_src_addr
-        self.rewrite_sid_list = sid_list[test_sid_index + 1::]
+        self.rewrite_sid_list = sid_list[test_sid_index + 1 : :]
 
         # send traffic to one destination interface
         # source and destination interfaces are IPv6 only
         self.setup_interfaces(ipv6=[True, True])
 
         # configure route to next segment
 
         # send traffic to one destination interface
         # source and destination interfaces are IPv6 only
         self.setup_interfaces(ipv6=[True, True])
 
         # configure route to next segment
-        route = VppIpRoute(self, sid_list[test_sid_index + 1], 128,
-                           [VppRoutePath(self.pg0.remote_ip6,
-                                         self.pg0.sw_if_index)])
+        route = VppIpRoute(
+            self,
+            sid_list[test_sid_index + 1],
+            128,
+            [VppRoutePath(self.pg0.remote_ip6, self.pg0.sw_if_index)],
+        )
         route.add_vpp_config()
 
         # configure SRv6 localSID behavior
         route.add_vpp_config()
 
         # configure SRv6 localSID behavior
-        cli_str = "sr localsid address " + sid_list[test_sid_index] \
-            + " behavior end.as" \
-            + " nh " + self.pg1.remote_ip6 \
-            + " oif " + self.pg1.name \
-            + " iif " + self.pg1.name \
-            + " src " + self.rewrite_src_addr
+        cli_str = (
+            "sr localsid address "
+            + sid_list[test_sid_index]
+            + " behavior end.as"
+            + " nh "
+            + self.pg1.remote_ip6
+            + " oif "
+            + self.pg1.name
+            + " iif "
+            + self.pg1.name
+            + " src "
+            + self.rewrite_src_addr
+        )
         for s in self.rewrite_sid_list:
             cli_str += " next " + s
         self.vapi.cli(cli_str)
         for s in self.rewrite_sid_list:
             cli_str += " next " + s
         self.vapi.cli(cli_str)
@@ -285,16 +306,18 @@ class TestSRv6As(VppTestCase):
 
         # prepare IPv6 in SRv6 headers
         packet_header1 = self.create_packet_header_IPv6_SRH_IPv6(
 
         # prepare IPv6 in SRv6 headers
         packet_header1 = self.create_packet_header_IPv6_SRH_IPv6(
-                        sidlist=sid_list[::-1],
-                        segleft=len(sid_list) - test_sid_index - 1)
+            sidlist=sid_list[::-1], segleft=len(sid_list) - test_sid_index - 1
+        )
 
         # generate packets (pg0->pg1)
 
         # generate packets (pg0->pg1)
-        pkts1 = self.create_stream(self.pg0, self.pg1, packet_header1,
-                                   self.pg_packet_sizes, count)
+        pkts1 = self.create_stream(
+            self.pg0, self.pg1, packet_header1, self.pg_packet_sizes, count
+        )
 
         # send packets and verify received packets
 
         # send packets and verify received packets
-        self.send_and_verify_pkts(self.pg0, pkts1, self.pg1,
-                                  self.compare_rx_tx_packet_End_AS_IPv6_out)
+        self.send_and_verify_pkts(
+            self.pg0, pkts1, self.pg1, self.compare_rx_tx_packet_End_AS_IPv6_out
+        )
 
         # log the localsid counters
         self.logger.info(self.vapi.cli("show sr localsid"))
 
         # log the localsid counters
         self.logger.info(self.vapi.cli("show sr localsid"))
@@ -303,12 +326,14 @@ class TestSRv6As(VppTestCase):
         packet_header2 = self.create_packet_header_IPv6()
 
         # generate returning packets (pg1->pg0)
         packet_header2 = self.create_packet_header_IPv6()
 
         # generate returning packets (pg1->pg0)
-        pkts2 = self.create_stream(self.pg1, self.pg0, packet_header2,
-                                   self.pg_packet_sizes, count)
+        pkts2 = self.create_stream(
+            self.pg1, self.pg0, packet_header2, self.pg_packet_sizes, count
+        )
 
         # send packets and verify received packets
 
         # send packets and verify received packets
-        self.send_and_verify_pkts(self.pg1, pkts2, self.pg0,
-                                  self.compare_rx_tx_packet_End_AS_IPv6_in)
+        self.send_and_verify_pkts(
+            self.pg1, pkts2, self.pg0, self.compare_rx_tx_packet_End_AS_IPv6_in
+        )
 
         # log the localsid counters
         self.logger.info(self.vapi.cli("show sr localsid"))
 
         # log the localsid counters
         self.logger.info(self.vapi.cli("show sr localsid"))
@@ -320,28 +345,37 @@ class TestSRv6As(VppTestCase):
         self.teardown_interfaces()
 
     def run_SRv6_End_AS_IPv4(self, sid_list, test_sid_index, rewrite_src_addr):
         self.teardown_interfaces()
 
     def run_SRv6_End_AS_IPv4(self, sid_list, test_sid_index, rewrite_src_addr):
-        """ Run SRv6 End.AS test with IPv4 traffic.
-        """
+        """Run SRv6 End.AS test with IPv4 traffic."""
         self.rewrite_src_addr = rewrite_src_addr
         self.rewrite_src_addr = rewrite_src_addr
-        self.rewrite_sid_list = sid_list[test_sid_index + 1::]
+        self.rewrite_sid_list = sid_list[test_sid_index + 1 : :]
 
         # send traffic to one destination interface
         # source and destination interfaces are IPv6 only
         self.setup_interfaces(ipv6=[True, False], ipv4=[True, True])
 
         # configure route to next segment
 
         # send traffic to one destination interface
         # source and destination interfaces are IPv6 only
         self.setup_interfaces(ipv6=[True, False], ipv4=[True, True])
 
         # configure route to next segment
-        route = VppIpRoute(self, sid_list[test_sid_index + 1], 128,
-                           [VppRoutePath(self.pg0.remote_ip6,
-                                         self.pg0.sw_if_index)])
+        route = VppIpRoute(
+            self,
+            sid_list[test_sid_index + 1],
+            128,
+            [VppRoutePath(self.pg0.remote_ip6, self.pg0.sw_if_index)],
+        )
         route.add_vpp_config()
 
         # configure SRv6 localSID behavior
         route.add_vpp_config()
 
         # configure SRv6 localSID behavior
-        cli_str = "sr localsid address " + sid_list[test_sid_index] \
-            + " behavior end.as" \
-            + " nh " + self.pg1.remote_ip4 \
-            + " oif " + self.pg1.name \
-            + " iif " + self.pg1.name \
-            + " src " + self.rewrite_src_addr
+        cli_str = (
+            "sr localsid address "
+            + sid_list[test_sid_index]
+            + " behavior end.as"
+            + " nh "
+            + self.pg1.remote_ip4
+            + " oif "
+            + self.pg1.name
+            + " iif "
+            + self.pg1.name
+            + " src "
+            + self.rewrite_src_addr
+        )
         for s in self.rewrite_sid_list:
             cli_str += " next " + s
         self.vapi.cli(cli_str)
         for s in self.rewrite_sid_list:
             cli_str += " next " + s
         self.vapi.cli(cli_str)
@@ -354,16 +388,18 @@ class TestSRv6As(VppTestCase):
 
         # prepare IPv4 in SRv6 headers
         packet_header1 = self.create_packet_header_IPv6_SRH_IPv4(
 
         # prepare IPv4 in SRv6 headers
         packet_header1 = self.create_packet_header_IPv6_SRH_IPv4(
-                        sidlist=sid_list[::-1],
-                        segleft=len(sid_list) - test_sid_index - 1)
+            sidlist=sid_list[::-1], segleft=len(sid_list) - test_sid_index - 1
+        )
 
         # generate packets (pg0->pg1)
 
         # generate packets (pg0->pg1)
-        pkts1 = self.create_stream(self.pg0, self.pg1, packet_header1,
-                                   self.pg_packet_sizes, count)
+        pkts1 = self.create_stream(
+            self.pg0, self.pg1, packet_header1, self.pg_packet_sizes, count
+        )
 
         # send packets and verify received packets
 
         # send packets and verify received packets
-        self.send_and_verify_pkts(self.pg0, pkts1, self.pg1,
-                                  self.compare_rx_tx_packet_End_AS_IPv4_out)
+        self.send_and_verify_pkts(
+            self.pg0, pkts1, self.pg1, self.compare_rx_tx_packet_End_AS_IPv4_out
+        )
 
         # log the localsid counters
         self.logger.info(self.vapi.cli("show sr localsid"))
 
         # log the localsid counters
         self.logger.info(self.vapi.cli("show sr localsid"))
@@ -372,12 +408,14 @@ class TestSRv6As(VppTestCase):
         packet_header2 = self.create_packet_header_IPv4()
 
         # generate returning packets (pg1->pg0)
         packet_header2 = self.create_packet_header_IPv4()
 
         # generate returning packets (pg1->pg0)
-        pkts2 = self.create_stream(self.pg1, self.pg0, packet_header2,
-                                   self.pg_packet_sizes, count)
+        pkts2 = self.create_stream(
+            self.pg1, self.pg0, packet_header2, self.pg_packet_sizes, count
+        )
 
         # send packets and verify received packets
 
         # send packets and verify received packets
-        self.send_and_verify_pkts(self.pg1, pkts2, self.pg0,
-                                  self.compare_rx_tx_packet_End_AS_IPv4_in)
+        self.send_and_verify_pkts(
+            self.pg1, pkts2, self.pg0, self.compare_rx_tx_packet_End_AS_IPv4_in
+        )
 
         # log the localsid counters
         self.logger.info(self.vapi.cli("show sr localsid"))
 
         # log the localsid counters
         self.logger.info(self.vapi.cli("show sr localsid"))
@@ -389,7 +427,7 @@ class TestSRv6As(VppTestCase):
         self.teardown_interfaces()
 
     def compare_rx_tx_packet_End_AS_IPv6_in(self, tx_pkt, rx_pkt):
         self.teardown_interfaces()
 
     def compare_rx_tx_packet_End_AS_IPv6_in(self, tx_pkt, rx_pkt):
-        """ Compare input and output packet after passing End.AS
+        """Compare input and output packet after passing End.AS
 
         :param tx_pkt: transmitted packet
         :param rx_pkt: received packet
 
         :param tx_pkt: transmitted packet
         :param rx_pkt: received packet
@@ -417,7 +455,7 @@ class TestSRv6As(VppTestCase):
             # rx'ed seglist should be equal to expected seglist
             self.assertEqual(rx_srh.addresses, tx_seglist)
             # segleft should be equal to size expected seglist-1
             # rx'ed seglist should be equal to expected seglist
             self.assertEqual(rx_srh.addresses, tx_seglist)
             # segleft should be equal to size expected seglist-1
-            self.assertEqual(rx_srh.segleft, len(tx_seglist)-1)
+            self.assertEqual(rx_srh.segleft, len(tx_seglist) - 1)
             # segleft should be equal to lastentry
             self.assertEqual(rx_srh.segleft, rx_srh.lastentry)
             # get payload
             # segleft should be equal to lastentry
             self.assertEqual(rx_srh.segleft, rx_srh.lastentry)
             # get payload
@@ -438,7 +476,7 @@ class TestSRv6As(VppTestCase):
         self.logger.debug("packet verification: SUCCESS")
 
     def compare_rx_tx_packet_End_AS_IPv4_in(self, tx_pkt, rx_pkt):
         self.logger.debug("packet verification: SUCCESS")
 
     def compare_rx_tx_packet_End_AS_IPv4_in(self, tx_pkt, rx_pkt):
-        """ Compare input and output packet after passing End.AS
+        """Compare input and output packet after passing End.AS
 
         :param tx_pkt: transmitted packet
         :param rx_pkt: received packet
 
         :param tx_pkt: transmitted packet
         :param rx_pkt: received packet
@@ -467,7 +505,7 @@ class TestSRv6As(VppTestCase):
             # rx'ed seglist should be equal to seglist
             self.assertEqual(rx_srh.addresses, tx_seglist)
             # segleft should be equal to size seglist-1
             # rx'ed seglist should be equal to seglist
             self.assertEqual(rx_srh.addresses, tx_seglist)
             # segleft should be equal to size seglist-1
-            self.assertEqual(rx_srh.segleft, len(tx_seglist)-1)
+            self.assertEqual(rx_srh.segleft, len(tx_seglist) - 1)
             # segleft should be equal to lastentry
             self.assertEqual(rx_srh.segleft, rx_srh.lastentry)
             payload = rx_srh.payload
             # segleft should be equal to lastentry
             self.assertEqual(rx_srh.segleft, rx_srh.lastentry)
             payload = rx_srh.payload
@@ -492,7 +530,7 @@ class TestSRv6As(VppTestCase):
         self.logger.debug("packet verification: SUCCESS")
 
     def compare_rx_tx_packet_End_AS_L2_in(self, tx_pkt, rx_pkt):
         self.logger.debug("packet verification: SUCCESS")
 
     def compare_rx_tx_packet_End_AS_L2_in(self, tx_pkt, rx_pkt):
-        """ Compare input and output packet after passing End.AS
+        """Compare input and output packet after passing End.AS
 
         :param tx_pkt: transmitted packet
         :param rx_pkt: received packet
 
         :param tx_pkt: transmitted packet
         :param rx_pkt: received packet
@@ -520,7 +558,7 @@ class TestSRv6As(VppTestCase):
             # rx'ed seglist should be equal to seglist
             self.assertEqual(rx_srh.addresses, tx_seglist)
             # segleft should be equal to size seglist-1
             # rx'ed seglist should be equal to seglist
             self.assertEqual(rx_srh.addresses, tx_seglist)
             # segleft should be equal to size seglist-1
-            self.assertEqual(rx_srh.segleft, len(tx_seglist)-1)
+            self.assertEqual(rx_srh.segleft, len(tx_seglist) - 1)
             # segleft should be equal to lastentry
             self.assertEqual(rx_srh.segleft, rx_srh.lastentry)
             # nh should be "No Next Header" (143)
             # segleft should be equal to lastentry
             self.assertEqual(rx_srh.segleft, rx_srh.lastentry)
             # nh should be "No Next Header" (143)
@@ -539,7 +577,7 @@ class TestSRv6As(VppTestCase):
         self.logger.debug("packet verification: SUCCESS")
 
     def compare_rx_tx_packet_End_AS_IPv6_out(self, tx_pkt, rx_pkt):
         self.logger.debug("packet verification: SUCCESS")
 
     def compare_rx_tx_packet_End_AS_IPv6_out(self, tx_pkt, rx_pkt):
-        """ Compare input and output packet after passing End.AS with IPv6
+        """Compare input and output packet after passing End.AS with IPv6
 
         :param tx_pkt: transmitted packet
         :param rx_pkt: received packet
 
         :param tx_pkt: transmitted packet
         :param rx_pkt: received packet
@@ -564,7 +602,7 @@ class TestSRv6As(VppTestCase):
         self.logger.debug("packet verification: SUCCESS")
 
     def compare_rx_tx_packet_End_AS_IPv4_out(self, tx_pkt, rx_pkt):
         self.logger.debug("packet verification: SUCCESS")
 
     def compare_rx_tx_packet_End_AS_IPv4_out(self, tx_pkt, rx_pkt):
-        """ Compare input and output packet after passing End.AS with IPv4
+        """Compare input and output packet after passing End.AS with IPv4
 
         :param tx_pkt: transmitted packet
         :param rx_pkt: received packet
 
         :param tx_pkt: transmitted packet
         :param rx_pkt: received packet
@@ -594,7 +632,7 @@ class TestSRv6As(VppTestCase):
         self.logger.debug("packet verification: SUCCESS")
 
     def compare_rx_tx_packet_End_AS_L2_out(self, tx_pkt, rx_pkt):
         self.logger.debug("packet verification: SUCCESS")
 
     def compare_rx_tx_packet_End_AS_L2_out(self, tx_pkt, rx_pkt):
-        """ Compare input and output packet after passing End.AS with L2
+        """Compare input and output packet after passing End.AS with L2
 
         :param tx_pkt: transmitted packet
         :param rx_pkt: received packet
 
         :param tx_pkt: transmitted packet
         :param rx_pkt: received packet
@@ -616,8 +654,7 @@ class TestSRv6As(VppTestCase):
 
         self.logger.debug("packet verification: SUCCESS")
 
 
         self.logger.debug("packet verification: SUCCESS")
 
-    def create_stream(self, src_if, dst_if, packet_header, packet_sizes,
-                      count):
+    def create_stream(self, src_if, dst_if, packet_header, packet_sizes, count):
         """Create SRv6 input packet stream for defined interface.
 
         :param VppInterface src_if: Interface to create packet stream for
         """Create SRv6 input packet stream for defined interface.
 
         :param VppInterface src_if: Interface to create packet stream for
@@ -632,19 +669,19 @@ class TestSRv6As(VppTestCase):
         """
         self.logger.info("Creating packets")
         pkts = []
         """
         self.logger.info("Creating packets")
         pkts = []
-        for i in range(0, count-1):
+        for i in range(0, count - 1):
             payload_info = self.create_packet_info(src_if, dst_if)
             payload_info = self.create_packet_info(src_if, dst_if)
-            self.logger.debug(
-                "Creating packet with index %d" % (payload_info.index))
+            self.logger.debug("Creating packet with index %d" % (payload_info.index))
             payload = self.info_to_payload(payload_info)
             # add L2 header if not yet provided in packet_header
             payload = self.info_to_payload(payload_info)
             # add L2 header if not yet provided in packet_header
-            if packet_header.getlayer(0).name == 'Ethernet':
-                p = (packet_header /
-                     Raw(payload))
+            if packet_header.getlayer(0).name == "Ethernet":
+                p = packet_header / Raw(payload)
             else:
             else:
-                p = (Ether(dst=src_if.local_mac, src=src_if.remote_mac) /
-                     packet_header /
-                     Raw(payload))
+                p = (
+                    Ether(dst=src_if.local_mac, src=src_if.remote_mac)
+                    / packet_header
+                    / Raw(payload)
+                )
             size = packet_sizes[i % len(packet_sizes)]
             self.logger.debug("Packet size %d" % (size))
             self.extend_packet(p, size)
             size = packet_sizes[i % len(packet_sizes)]
             self.logger.debug("Packet size %d" % (size))
             self.extend_packet(p, size)
@@ -697,8 +734,7 @@ class TestSRv6As(VppTestCase):
         UDP source port and destination port are 1234
         """
 
         UDP source port and destination port are 1234
         """
 
-        p = (IPv6(src='1234::1', dst='4321::1') /
-             UDP(sport=1234, dport=1234))
+        p = IPv6(src="1234::1", dst="4321::1") / UDP(sport=1234, dport=1234)
         return p
 
     def create_packet_header_IPv6_SRH_IPv6(self, sidlist, segleft):
         return p
 
     def create_packet_header_IPv6_SRH_IPv6(self, sidlist, segleft):
@@ -715,11 +751,12 @@ class TestSRv6As(VppTestCase):
         UDP source port and destination port are 1234
         """
 
         UDP source port and destination port are 1234
         """
 
-        p = (IPv6(src='5678::1', dst=sidlist[segleft]) /
-             IPv6ExtHdrSegmentRouting(addresses=sidlist,
-                                      segleft=segleft, nh=41) /
-             IPv6(src='1234::1', dst='4321::1') /
-             UDP(sport=1234, dport=1234))
+        p = (
+            IPv6(src="5678::1", dst=sidlist[segleft])
+            / IPv6ExtHdrSegmentRouting(addresses=sidlist, segleft=segleft, nh=41)
+            / IPv6(src="1234::1", dst="4321::1")
+            / UDP(sport=1234, dport=1234)
+        )
         return p
 
     def create_packet_header_IPv4(self):
         return p
 
     def create_packet_header_IPv4(self):
@@ -732,8 +769,7 @@ class TestSRv6As(VppTestCase):
         UDP source port and destination port are 1234
         """
 
         UDP source port and destination port are 1234
         """
 
-        p = (IP(src='123.1.1.1', dst='124.1.1.1') /
-             UDP(sport=1234, dport=1234))
+        p = IP(src="123.1.1.1", dst="124.1.1.1") / UDP(sport=1234, dport=1234)
         return p
 
     def create_packet_header_IPv6_SRH_IPv4(self, sidlist, segleft):
         return p
 
     def create_packet_header_IPv6_SRH_IPv4(self, sidlist, segleft):
@@ -751,11 +787,12 @@ class TestSRv6As(VppTestCase):
         UDP source port and destination port are 1234
         """
 
         UDP source port and destination port are 1234
         """
 
-        p = (IPv6(src='1234::1', dst=sidlist[segleft]) /
-             IPv6ExtHdrSegmentRouting(addresses=sidlist,
-                                      segleft=segleft, nh=4) /
-             IP(src='123.1.1.1', dst='124.1.1.1') /
-             UDP(sport=1234, dport=1234))
+        p = (
+            IPv6(src="1234::1", dst=sidlist[segleft])
+            / IPv6ExtHdrSegmentRouting(addresses=sidlist, segleft=segleft, nh=4)
+            / IP(src="123.1.1.1", dst="124.1.1.1")
+            / UDP(sport=1234, dport=1234)
+        )
         return p
 
     def create_packet_header_L2(self, vlan=0):
         return p
 
     def create_packet_header_L2(self, vlan=0):
@@ -766,7 +803,7 @@ class TestSRv6As(VppTestCase):
         # Note: the dst addr ('00:55:44:33:22:11') is used in
         # the compare function compare_rx_tx_packet_T_Encaps_L2
         # to detect presence of L2 in SRH payload
         # Note: the dst addr ('00:55:44:33:22:11') is used in
         # the compare function compare_rx_tx_packet_T_Encaps_L2
         # to detect presence of L2 in SRH payload
-        p = Ether(src='00:11:22:33:44:55', dst='00:55:44:33:22:11')
+        p = Ether(src="00:11:22:33:44:55", dst="00:55:44:33:22:11")
         etype = 0x8137  # IPX
         if vlan:
             # add 802.1q layer
         etype = 0x8137  # IPX
         if vlan:
             # add 802.1q layer
@@ -786,7 +823,7 @@ class TestSRv6As(VppTestCase):
         Outer IPv6 destination address is set to sidlist[segleft]
         IPv6 source address is 1234::1
         """
         Outer IPv6 destination address is set to sidlist[segleft]
         IPv6 source address is 1234::1
         """
-        eth = Ether(src='00:11:22:33:44:55', dst='00:55:44:33:22:11')
+        eth = Ether(src="00:11:22:33:44:55", dst="00:55:44:33:22:11")
         etype = 0x8137  # IPX
         if vlan:
             # add 802.1q layer
         etype = 0x8137  # IPX
         if vlan:
             # add 802.1q layer
@@ -794,15 +831,15 @@ class TestSRv6As(VppTestCase):
         else:
             eth.type = etype
 
         else:
             eth.type = etype
 
-        p = (IPv6(src='1234::1', dst=sidlist[segleft]) /
-             IPv6ExtHdrSegmentRouting(addresses=sidlist,
-                                      segleft=segleft, nh=143) /
-             eth)
+        p = (
+            IPv6(src="1234::1", dst=sidlist[segleft])
+            / IPv6ExtHdrSegmentRouting(addresses=sidlist, segleft=segleft, nh=143)
+            / eth
+        )
         return p
 
     def get_payload_info(self, packet):
         return p
 
     def get_payload_info(self, packet):
-        """ Extract the payload_info from the packet
-        """
+        """Extract the payload_info from the packet"""
         # in most cases, payload_info is in packet[Raw]
         # but packet[Raw] gives the complete payload
         # (incl L2 header) for the T.Encaps L2 case
         # in most cases, payload_info is in packet[Raw]
         # but packet[Raw] gives the complete payload
         # (incl L2 header) for the T.Encaps L2 case
@@ -814,7 +851,8 @@ class TestSRv6As(VppTestCase):
             # take packet[Raw], convert it to an Ether layer
             # and then extract Raw from it
             payload_info = self.payload_to_info(
             # take packet[Raw], convert it to an Ether layer
             # and then extract Raw from it
             payload_info = self.payload_to_info(
-                Ether(scapy.compat.raw(packet[Raw]))[Raw])
+                Ether(scapy.compat.raw(packet[Raw]))[Raw]
+            )
 
         return payload_info
 
 
         return payload_info
 
@@ -827,8 +865,10 @@ class TestSRv6As(VppTestCase):
         :param capture: captured packets
         :param compare_func: function to compare in and out packet
         """
         :param capture: captured packets
         :param compare_func: function to compare in and out packet
         """
-        self.logger.info("Verifying capture on interface %s using function %s"
-                         % (dst_if.name, compare_func.__name__))
+        self.logger.info(
+            "Verifying capture on interface %s using function %s"
+            % (dst_if.name, compare_func.__name__)
+        )
 
         last_info = dict()
         for i in self.pg_interfaces:
 
         last_info = dict()
         for i in self.pg_interfaces:
@@ -841,19 +881,19 @@ class TestSRv6As(VppTestCase):
                 payload_info = self.get_payload_info(packet)
                 packet_index = payload_info.index
 
                 payload_info = self.get_payload_info(packet)
                 packet_index = payload_info.index
 
-                self.logger.debug("Verifying packet with index %d"
-                                  % (packet_index))
+                self.logger.debug("Verifying packet with index %d" % (packet_index))
                 # packet should have arrived on the expected interface
                 self.assertEqual(payload_info.dst, dst_sw_if_index)
                 self.logger.debug(
                 # packet should have arrived on the expected interface
                 self.assertEqual(payload_info.dst, dst_sw_if_index)
                 self.logger.debug(
-                    "Got packet on interface %s: src=%u (idx=%u)" %
-                    (dst_if.name, payload_info.src, packet_index))
+                    "Got packet on interface %s: src=%u (idx=%u)"
+                    % (dst_if.name, payload_info.src, packet_index)
+                )
 
                 # search for payload_info with same src and dst if_index
                 # this will give us the transmitted packet
                 next_info = self.get_next_packet_info_for_interface2(
 
                 # search for payload_info with same src and dst if_index
                 # this will give us the transmitted packet
                 next_info = self.get_next_packet_info_for_interface2(
-                    payload_info.src, dst_sw_if_index,
-                    last_info[payload_info.src])
+                    payload_info.src, dst_sw_if_index, last_info[payload_info.src]
+                )
                 last_info[payload_info.src] = next_info
                 # next_info should not be None
                 self.assertTrue(next_info is not None)
                 last_info[payload_info.src] = next_info
                 # next_info should not be None
                 self.assertTrue(next_info is not None)
@@ -862,8 +902,9 @@ class TestSRv6As(VppTestCase):
                 # data field of next_info contains the tx packet
                 txed_packet = next_info.data
 
                 # data field of next_info contains the tx packet
                 txed_packet = next_info.data
 
-                self.logger.debug(ppp("Transmitted packet:",
-                                      txed_packet))  # ppp=Pretty Print Packet
+                self.logger.debug(
+                    ppp("Transmitted packet:", txed_packet)
+                )  # ppp=Pretty Print Packet
 
                 self.logger.debug(ppp("Received packet:", packet))
 
 
                 self.logger.debug(ppp("Received packet:", packet))
 
@@ -877,11 +918,14 @@ class TestSRv6As(VppTestCase):
         # have all expected packets arrived?
         for i in self.pg_interfaces:
             remaining_packet = self.get_next_packet_info_for_interface2(
         # have all expected packets arrived?
         for i in self.pg_interfaces:
             remaining_packet = self.get_next_packet_info_for_interface2(
-                i.sw_if_index, dst_sw_if_index, last_info[i.sw_if_index])
-            self.assertTrue(remaining_packet is None,
-                            "Interface %s: Packet expected from interface %s "
-                            "didn't arrive" % (dst_if.name, i.name))
+                i.sw_if_index, dst_sw_if_index, last_info[i.sw_if_index]
+            )
+            self.assertTrue(
+                remaining_packet is None,
+                "Interface %s: Packet expected from interface %s "
+                "didn't arrive" % (dst_if.name, i.name),
+            )
 
 
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index e617ace..33190b8 100644 (file)
@@ -8,7 +8,7 @@ from scapy.all import *
 
 
 class TestSRv6EndMGTP4E(VppTestCase):
 
 
 class TestSRv6EndMGTP4E(VppTestCase):
-    """ SRv6 End.M.GTP4.E (SRv6 -> GTP-U) """
+    """SRv6 End.M.GTP4.E (SRv6 -> GTP-U)"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -37,14 +37,12 @@ class TestSRv6EndMGTP4E(VppTestCase):
 
         ip4_dst = IPv4Address(str(self.ip4_dst))
         # 32bit prefix + 32bit IPv4 DA + 8bit + 32bit TEID + 24bit
 
         ip4_dst = IPv4Address(str(self.ip4_dst))
         # 32bit prefix + 32bit IPv4 DA + 8bit + 32bit TEID + 24bit
-        dst = b'\xaa' * 4 + ip4_dst.packed + \
-            b'\x11' + b'\xbb' * 4 + b'\x11' * 3
+        dst = b"\xaa" * 4 + ip4_dst.packed + b"\x11" + b"\xbb" * 4 + b"\x11" * 3
         ip6_dst = IPv6Address(dst)
 
         ip4_src = IPv4Address(str(self.ip4_src))
         # 64bit prefix + 32bit IPv4 SA + 16 bit port + 16bit
         ip6_dst = IPv6Address(dst)
 
         ip4_src = IPv4Address(str(self.ip4_src))
         # 64bit prefix + 32bit IPv4 SA + 16 bit port + 16bit
-        src = b'\xcc' * 8 + ip4_src.packed + \
-            b'\xdd' * 2 + b'\x11' * 2
+        src = b"\xcc" * 8 + ip4_src.packed + b"\xdd" * 2 + b"\x11" * 2
         ip6_src = IPv6Address(src)
 
         self.logger.info("ip4 dst: {}".format(ip4_dst))
         ip6_src = IPv6Address(src)
 
         self.logger.info("ip4 dst: {}".format(ip4_dst))
@@ -54,24 +52,26 @@ class TestSRv6EndMGTP4E(VppTestCase):
 
         pkts = list()
         for d, s in inner:
 
         pkts = list()
         for d, s in inner:
-            pkt = (Ether() /
-                   IPv6(dst=str(ip6_dst), src=str(ip6_src)) /
-                   IPv6ExtHdrSegmentRouting() /
-                   IPv6(dst=d, src=s) /
-                   UDP(sport=1000, dport=23))
+            pkt = (
+                Ether()
+                / IPv6(dst=str(ip6_dst), src=str(ip6_src))
+                / IPv6ExtHdrSegmentRouting()
+                / IPv6(dst=d, src=s)
+                / UDP(sport=1000, dport=23)
+            )
             self.logger.info(pkt.show2(dump=True))
             pkts.append(pkt)
 
         return pkts
 
     def test_srv6_mobile(self):
             self.logger.info(pkt.show2(dump=True))
             pkts.append(pkt)
 
         return pkts
 
     def test_srv6_mobile(self):
-        """ test_srv6_mobile """
+        """test_srv6_mobile"""
         pkts = self.create_packets([("A::1", "B::1"), ("C::1", "D::1")])
 
         self.vapi.cli(
         pkts = self.create_packets([("A::1", "B::1"), ("C::1", "D::1")])
 
         self.vapi.cli(
-            "sr localsid address {} behavior end.m.gtp4.e "
-            .format(pkts[0]['IPv6'].dst) +
-            "v4src_position 64 fib-table 0")
+            "sr localsid address {} behavior end.m.gtp4.e ".format(pkts[0]["IPv6"].dst)
+            + "v4src_position 64 fib-table 0"
+        )
         self.logger.info(self.vapi.cli("show sr localsid"))
 
         self.vapi.cli("clear errors")
         self.logger.info(self.vapi.cli("show sr localsid"))
 
         self.vapi.cli("clear errors")
@@ -89,11 +89,11 @@ class TestSRv6EndMGTP4E(VppTestCase):
             self.logger.info(pkt.show2(dump=True))
             self.assertEqual(pkt[IP].dst, self.ip4_dst)
             self.assertEqual(pkt[IP].src, self.ip4_src)
             self.logger.info(pkt.show2(dump=True))
             self.assertEqual(pkt[IP].dst, self.ip4_dst)
             self.assertEqual(pkt[IP].src, self.ip4_src)
-            self.assertEqual(pkt[GTP_U_Header].teid, 0xbbbbbbbb)
+            self.assertEqual(pkt[GTP_U_Header].teid, 0xBBBBBBBB)
 
 
 class TestSRv6TMGTP4D(VppTestCase):
 
 
 class TestSRv6TMGTP4D(VppTestCase):
-    """ SRv6 T.M.GTP4.D (GTP-U -> SRv6) """
+    """SRv6 T.M.GTP4.D (GTP-U -> SRv6)"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -133,26 +133,29 @@ class TestSRv6TMGTP4D(VppTestCase):
 
         pkts = list()
         for d, s in inner:
 
         pkts = list()
         for d, s in inner:
-            pkt = (Ether() /
-                   IP(dst=str(ip4_dst), src=str(ip4_src)) /
-                   UDP(sport=2152, dport=2152) /
-                   GTP_U_Header(gtp_type="g_pdu", teid=200) /
-                   IPv6(dst=d, src=s) /
-                   UDP(sport=1000, dport=23))
+            pkt = (
+                Ether()
+                / IP(dst=str(ip4_dst), src=str(ip4_src))
+                / UDP(sport=2152, dport=2152)
+                / GTP_U_Header(gtp_type="g_pdu", teid=200)
+                / IPv6(dst=d, src=s)
+                / UDP(sport=1000, dport=23)
+            )
             self.logger.info(pkt.show2(dump=True))
             pkts.append(pkt)
 
         return pkts
 
     def test_srv6_mobile(self):
             self.logger.info(pkt.show2(dump=True))
             pkts.append(pkt)
 
         return pkts
 
     def test_srv6_mobile(self):
-        """ test_srv6_mobile """
+        """test_srv6_mobile"""
         pkts = self.create_packets([("A::1", "B::1"), ("C::1", "D::1")])
 
         self.vapi.cli("set sr encaps source addr A1::1")
         self.vapi.cli("sr policy add bsid D4:: next D2:: next D3::")
         self.vapi.cli(
         pkts = self.create_packets([("A::1", "B::1"), ("C::1", "D::1")])
 
         self.vapi.cli("set sr encaps source addr A1::1")
         self.vapi.cli("sr policy add bsid D4:: next D2:: next D3::")
         self.vapi.cli(
-            "sr policy add bsid D5:: behavior t.m.gtp4.d D4::/32 " +
-            "v6src_prefix C1::/64 nhtype ipv6 fib-table 0 drop-in")
+            "sr policy add bsid D5:: behavior t.m.gtp4.d D4::/32 "
+            + "v6src_prefix C1::/64 nhtype ipv6 fib-table 0 drop-in"
+        )
         self.vapi.cli("sr steer l3 {}/32 via bsid D5::".format(self.ip4_dst))
         self.vapi.cli("ip route add D2::/32 via {}".format(self.ip6_dst))
 
         self.vapi.cli("sr steer l3 {}/32 via bsid D5::".format(self.ip4_dst))
         self.vapi.cli("ip route add D2::/32 via {}".format(self.ip6_dst))
 
@@ -172,15 +175,18 @@ class TestSRv6TMGTP4D(VppTestCase):
 
         for pkt in capture:
             self.logger.info(pkt.show2(dump=True))
 
         for pkt in capture:
             self.logger.info(pkt.show2(dump=True))
-            self.logger.info("GTP4.D Address={}".format(
-                str(pkt[IPv6ExtHdrSegmentRouting].addresses[0])))
+            self.logger.info(
+                "GTP4.D Address={}".format(
+                    str(pkt[IPv6ExtHdrSegmentRouting].addresses[0])
+                )
+            )
             self.assertEqual(
             self.assertEqual(
-                str(pkt[IPv6ExtHdrSegmentRouting].addresses[0]),
-                "d4:0:101:101::c800:0")
+                str(pkt[IPv6ExtHdrSegmentRouting].addresses[0]), "d4:0:101:101::c800:0"
+            )
 
 
 class TestSRv6EndMGTP6E(VppTestCase):
 
 
 class TestSRv6EndMGTP6E(VppTestCase):
-    """ SRv6 End.M.GTP6.E """
+    """SRv6 End.M.GTP6.E"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -205,42 +211,42 @@ class TestSRv6EndMGTP6E(VppTestCase):
 
     def create_packets(self, inner):
         # 64bit prefix + 8bit QFI + 32bit TEID + 24bit
 
     def create_packets(self, inner):
         # 64bit prefix + 8bit QFI + 32bit TEID + 24bit
-        dst = b'\xaa' * 8 + b'\x00' + \
-            b'\xbb' * 4 + b'\x00' * 3
+        dst = b"\xaa" * 8 + b"\x00" + b"\xbb" * 4 + b"\x00" * 3
         ip6_dst = IPv6Address(dst)
 
         self.ip6_dst = ip6_dst
 
         ip6_dst = IPv6Address(dst)
 
         self.ip6_dst = ip6_dst
 
-        src = b'\xcc' * 8 + \
-            b'\xdd' * 4 + b'\x11' * 4
+        src = b"\xcc" * 8 + b"\xdd" * 4 + b"\x11" * 4
         ip6_src = IPv6Address(src)
 
         self.ip6_src = ip6_src
 
         pkts = list()
         for d, s in inner:
         ip6_src = IPv6Address(src)
 
         self.ip6_src = ip6_src
 
         pkts = list()
         for d, s in inner:
-            pkt = (Ether() /
-                   IPv6(dst=str(ip6_dst),
-                        src=str(ip6_src)) /
-                   IPv6ExtHdrSegmentRouting(segleft=1,
-                                            lastentry=0,
-                                            tag=0,
-                                            addresses=["a1::1"]) /
-                   IPv6(dst=d, src=s) / UDP(sport=1000, dport=23))
+            pkt = (
+                Ether()
+                / IPv6(dst=str(ip6_dst), src=str(ip6_src))
+                / IPv6ExtHdrSegmentRouting(
+                    segleft=1, lastentry=0, tag=0, addresses=["a1::1"]
+                )
+                / IPv6(dst=d, src=s)
+                / UDP(sport=1000, dport=23)
+            )
             self.logger.info(pkt.show2(dump=True))
             pkts.append(pkt)
 
         return pkts
 
     def test_srv6_mobile(self):
             self.logger.info(pkt.show2(dump=True))
             pkts.append(pkt)
 
         return pkts
 
     def test_srv6_mobile(self):
-        """ test_srv6_mobile """
+        """test_srv6_mobile"""
         pkts = self.create_packets([("A::1", "B::1"), ("C::1", "D::1")])
 
         self.vapi.cli(
         pkts = self.create_packets([("A::1", "B::1"), ("C::1", "D::1")])
 
         self.vapi.cli(
-            "sr localsid prefix {}/64 behavior end.m.gtp6.e fib-table 0"
-            .format(pkts[0]['IPv6'].dst))
-        self.vapi.cli(
-            "ip route add a1::/64 via {}".format(self.ip6_nhop))
+            "sr localsid prefix {}/64 behavior end.m.gtp6.e fib-table 0".format(
+                pkts[0]["IPv6"].dst
+            )
+        )
+        self.vapi.cli("ip route add a1::/64 via {}".format(self.ip6_nhop))
         self.logger.info(self.vapi.cli("show sr localsid"))
 
         self.vapi.cli("clear errors")
         self.logger.info(self.vapi.cli("show sr localsid"))
 
         self.vapi.cli("clear errors")
@@ -258,11 +264,11 @@ class TestSRv6EndMGTP6E(VppTestCase):
             self.logger.info(pkt.show2(dump=True))
             self.assertEqual(pkt[IPv6].dst, "a1::1")
             self.assertEqual(pkt[IPv6].src, str(self.ip6_src))
             self.logger.info(pkt.show2(dump=True))
             self.assertEqual(pkt[IPv6].dst, "a1::1")
             self.assertEqual(pkt[IPv6].src, str(self.ip6_src))
-            self.assertEqual(pkt[GTP_U_Header].teid, 0xbbbbbbbb)
+            self.assertEqual(pkt[GTP_U_Header].teid, 0xBBBBBBBB)
 
 
 class TestSRv6EndMGTP6D(VppTestCase):
 
 
 class TestSRv6EndMGTP6D(VppTestCase):
-    """ SRv6 End.M.GTP6.D """
+    """SRv6 End.M.GTP6.D"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -299,26 +305,29 @@ class TestSRv6EndMGTP6D(VppTestCase):
 
         pkts = list()
         for d, s in inner:
 
         pkts = list()
         for d, s in inner:
-            pkt = (Ether() /
-                   IPv6(dst=str(ip6_dst), src=str(ip6_src)) /
-                   UDP(sport=2152, dport=2152) /
-                   GTP_U_Header(gtp_type="g_pdu", teid=200) /
-                   IPv6(dst=d, src=s) /
-                   UDP(sport=1000, dport=23))
+            pkt = (
+                Ether()
+                / IPv6(dst=str(ip6_dst), src=str(ip6_src))
+                / UDP(sport=2152, dport=2152)
+                / GTP_U_Header(gtp_type="g_pdu", teid=200)
+                / IPv6(dst=d, src=s)
+                / UDP(sport=1000, dport=23)
+            )
             self.logger.info(pkt.show2(dump=True))
             pkts.append(pkt)
 
         return pkts
 
     def test_srv6_mobile(self):
             self.logger.info(pkt.show2(dump=True))
             pkts.append(pkt)
 
         return pkts
 
     def test_srv6_mobile(self):
-        """ test_srv6_mobile """
+        """test_srv6_mobile"""
         pkts = self.create_packets([("A::1", "B::1"), ("C::1", "D::1")])
 
         self.vapi.cli("set sr encaps source addr A1::1")
         self.vapi.cli("sr policy add bsid D4:: next D2:: next D3::")
         self.vapi.cli(
         pkts = self.create_packets([("A::1", "B::1"), ("C::1", "D::1")])
 
         self.vapi.cli("set sr encaps source addr A1::1")
         self.vapi.cli("sr policy add bsid D4:: next D2:: next D3::")
         self.vapi.cli(
-            "sr localsid prefix 2001::/64 behavior end.m.gtp6.d " +
-            "D4::/64 fib-table 0 drop-in")
+            "sr localsid prefix 2001::/64 behavior end.m.gtp6.d "
+            + "D4::/64 fib-table 0 drop-in"
+        )
         self.vapi.cli("ip route add D2::/64 via {}".format(self.ip6_nhop))
 
         self.logger.info(self.vapi.cli("show sr policies"))
         self.vapi.cli("ip route add D2::/64 via {}".format(self.ip6_nhop))
 
         self.logger.info(self.vapi.cli("show sr policies"))
@@ -337,11 +346,13 @@ class TestSRv6EndMGTP6D(VppTestCase):
 
         for pkt in capture:
             self.logger.info(pkt.show2(dump=True))
 
         for pkt in capture:
             self.logger.info(pkt.show2(dump=True))
-            self.logger.info("GTP6.D SID0={}".format(
-                str(pkt[IPv6ExtHdrSegmentRouting].addresses[0])))
-            self.logger.info("GTP6.D SID1={}".format(
-                str(pkt[IPv6ExtHdrSegmentRouting].addresses[1])))
-            self.assertEqual(
-                str(pkt[IPv6ExtHdrSegmentRouting].addresses[0]), "2001::1")
+            self.logger.info(
+                "GTP6.D SID0={}".format(str(pkt[IPv6ExtHdrSegmentRouting].addresses[0]))
+            )
+            self.logger.info(
+                "GTP6.D SID1={}".format(str(pkt[IPv6ExtHdrSegmentRouting].addresses[1]))
+            )
+            self.assertEqual(str(pkt[IPv6ExtHdrSegmentRouting].addresses[0]), "2001::1")
             self.assertEqual(
             self.assertEqual(
-                str(pkt[IPv6ExtHdrSegmentRouting].addresses[1]), "d4::c800:0")
+                str(pkt[IPv6ExtHdrSegmentRouting].addresses[1]), "d4::c800:0"
+            )
index 73285bb..22a3c48 100644 (file)
@@ -8,7 +8,7 @@ from scapy.all import *
 
 
 class TestSRv6uSIDSRH(VppTestCase):
 
 
 class TestSRv6uSIDSRH(VppTestCase):
-    """ SRv6 End.uSID w/ SRH """
+    """SRv6 End.uSID w/ SRH"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -45,30 +45,30 @@ class TestSRv6uSIDSRH(VppTestCase):
 
         pkts = list()
         for d, s in inner:
 
         pkts = list()
         for d, s in inner:
-            pkt = (Ether() /
-                   IPv6(dst=str(ip6_dst), src=str(ip6_src)) /
-                   IPv6ExtHdrSegmentRouting(segleft=1,
-                                            lastentry=0,
-                                            tag=0,
-                                            addresses=[
-                                                "a1::1",
-                                                "1111:2222:aaaa:bbbb::"]) /
-                   IPv6(dst=d, src=s) /
-                   UDP(sport=1000, dport=23))
+            pkt = (
+                Ether()
+                / IPv6(dst=str(ip6_dst), src=str(ip6_src))
+                / IPv6ExtHdrSegmentRouting(
+                    segleft=1,
+                    lastentry=0,
+                    tag=0,
+                    addresses=["a1::1", "1111:2222:aaaa:bbbb::"],
+                )
+                / IPv6(dst=d, src=s)
+                / UDP(sport=1000, dport=23)
+            )
             self.logger.info(pkt.show2(dump=True))
             pkts.append(pkt)
 
         return pkts
 
     def test_srv6_usid_srh(self):
             self.logger.info(pkt.show2(dump=True))
             pkts.append(pkt)
 
         return pkts
 
     def test_srv6_usid_srh(self):
-        """ test_srv6_usid_srh """
+        """test_srv6_usid_srh"""
         pkts = self.create_packets([("A::1", "B::1"), ("C::1", "D::1")])
 
         self.vapi.cli("set sr encaps source addr A1::1")
         pkts = self.create_packets([("A::1", "B::1"), ("C::1", "D::1")])
 
         self.vapi.cli("set sr encaps source addr A1::1")
-        self.vapi.cli(
-            "sr localsid prefix 1111:2222:aaaa::/48 behavior un 16")
-        self.vapi.cli(
-            "ip route add 1111:2222:bbbb::/48 via {}".format(self.ip6_nhop))
+        self.vapi.cli("sr localsid prefix 1111:2222:aaaa::/48 behavior un 16")
+        self.vapi.cli("ip route add 1111:2222:bbbb::/48 via {}".format(self.ip6_nhop))
 
         self.logger.info(self.vapi.cli("show sr localsids"))
 
 
         self.logger.info(self.vapi.cli("show sr localsids"))
 
@@ -85,12 +85,11 @@ class TestSRv6uSIDSRH(VppTestCase):
 
         for pkt in capture:
             self.logger.info(pkt.show2(dump=True))
 
         for pkt in capture:
             self.logger.info(pkt.show2(dump=True))
-            self.assertEqual(
-                    pkt[IPv6].dst, "1111:2222:bbbb:cccc:dddd:eeee:ffff:0")
+            self.assertEqual(pkt[IPv6].dst, "1111:2222:bbbb:cccc:dddd:eeee:ffff:0")
 
 
 class TestSRv6uSID(VppTestCase):
 
 
 class TestSRv6uSID(VppTestCase):
-    """ SRv6 End.uSID w/o SRH """
+    """SRv6 End.uSID w/o SRH"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -127,24 +126,24 @@ class TestSRv6uSID(VppTestCase):
 
         pkts = list()
         for d, s in inner:
 
         pkts = list()
         for d, s in inner:
-            pkt = (Ether() /
-                   IPv6(dst=str(ip6_dst), src=str(ip6_src)) /
-                   IPv6(dst=d, src=s) /
-                   UDP(sport=1000, dport=23))
+            pkt = (
+                Ether()
+                / IPv6(dst=str(ip6_dst), src=str(ip6_src))
+                / IPv6(dst=d, src=s)
+                / UDP(sport=1000, dport=23)
+            )
             self.logger.info(pkt.show2(dump=True))
             pkts.append(pkt)
 
         return pkts
 
     def test_srv6_usid(self):
             self.logger.info(pkt.show2(dump=True))
             pkts.append(pkt)
 
         return pkts
 
     def test_srv6_usid(self):
-        """ test_srv6_usid """
+        """test_srv6_usid"""
         pkts = self.create_packets([("A::1", "B::1"), ("C::1", "D::1")])
 
         self.vapi.cli("set sr encaps source addr A1::1")
         pkts = self.create_packets([("A::1", "B::1"), ("C::1", "D::1")])
 
         self.vapi.cli("set sr encaps source addr A1::1")
-        self.vapi.cli(
-            "sr localsid prefix 1111:2222:aaaa::/48 behavior un 16")
-        self.vapi.cli(
-            "ip route add 1111:2222:bbbb::/48 via {}".format(self.ip6_nhop))
+        self.vapi.cli("sr localsid prefix 1111:2222:aaaa::/48 behavior un 16")
+        self.vapi.cli("ip route add 1111:2222:bbbb::/48 via {}".format(self.ip6_nhop))
 
         self.logger.info(self.vapi.cli("show sr localsids"))
 
 
         self.logger.info(self.vapi.cli("show sr localsids"))
 
@@ -161,12 +160,11 @@ class TestSRv6uSID(VppTestCase):
 
         for pkt in capture:
             self.logger.info(pkt.show2(dump=True))
 
         for pkt in capture:
             self.logger.info(pkt.show2(dump=True))
-            self.assertEqual(
-                    pkt[IPv6].dst, "1111:2222:bbbb:cccc:dddd:eeee:ffff:0")
+            self.assertEqual(pkt[IPv6].dst, "1111:2222:bbbb:cccc:dddd:eeee:ffff:0")
 
 
 class TestSRv6uSIDFlexSRH(VppTestCase):
 
 
 class TestSRv6uSIDFlexSRH(VppTestCase):
-    """ SRv6 End.uSID.Flex w/ SRH """
+    """SRv6 End.uSID.Flex w/ SRH"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -203,30 +201,30 @@ class TestSRv6uSIDFlexSRH(VppTestCase):
 
         pkts = list()
         for d, s in inner:
 
         pkts = list()
         for d, s in inner:
-            pkt = (Ether() /
-                   IPv6(dst=str(ip6_dst), src=str(ip6_src)) /
-                   IPv6ExtHdrSegmentRouting(segleft=1,
-                                            lastentry=0,
-                                            tag=0,
-                                            addresses=[
-                                                "a1::1",
-                                                "1111:2222:aaaa:bbbb::"]) /
-                   IPv6(dst=d, src=s) /
-                   UDP(sport=1000, dport=23))
+            pkt = (
+                Ether()
+                / IPv6(dst=str(ip6_dst), src=str(ip6_src))
+                / IPv6ExtHdrSegmentRouting(
+                    segleft=1,
+                    lastentry=0,
+                    tag=0,
+                    addresses=["a1::1", "1111:2222:aaaa:bbbb::"],
+                )
+                / IPv6(dst=d, src=s)
+                / UDP(sport=1000, dport=23)
+            )
             self.logger.info(pkt.show2(dump=True))
             pkts.append(pkt)
 
         return pkts
 
     def test_srv6_usid_flex_srh(self):
             self.logger.info(pkt.show2(dump=True))
             pkts.append(pkt)
 
         return pkts
 
     def test_srv6_usid_flex_srh(self):
-        """ test_srv6_usid_flex_srh """
+        """test_srv6_usid_flex_srh"""
         pkts = self.create_packets([("A::1", "B::1"), ("C::1", "D::1")])
 
         self.vapi.cli("set sr encaps source addr A1::1")
         pkts = self.create_packets([("A::1", "B::1"), ("C::1", "D::1")])
 
         self.vapi.cli("set sr encaps source addr A1::1")
-        self.vapi.cli(
-            "sr localsid prefix 1111:2222:aaaa::/48 behavior un.flex 16")
-        self.vapi.cli(
-            "ip route add 1111:2222:bbbb::/48 via {}".format(self.ip6_nhop))
+        self.vapi.cli("sr localsid prefix 1111:2222:aaaa::/48 behavior un.flex 16")
+        self.vapi.cli("ip route add 1111:2222:bbbb::/48 via {}".format(self.ip6_nhop))
 
         self.logger.info(self.vapi.cli("show sr localsids"))
 
 
         self.logger.info(self.vapi.cli("show sr localsids"))
 
@@ -243,12 +241,11 @@ class TestSRv6uSIDFlexSRH(VppTestCase):
 
         for pkt in capture:
             self.logger.info(pkt.show2(dump=True))
 
         for pkt in capture:
             self.logger.info(pkt.show2(dump=True))
-            self.assertEqual(
-                    pkt[IPv6].dst, "1111:2222:bbbb:cccc:dddd:eeee:ffff:0")
+            self.assertEqual(pkt[IPv6].dst, "1111:2222:bbbb:cccc:dddd:eeee:ffff:0")
 
 
 class TestSRv6uSIDFlex(VppTestCase):
 
 
 class TestSRv6uSIDFlex(VppTestCase):
-    """ SRv6 End.uSID.Flex w/o SRH """
+    """SRv6 End.uSID.Flex w/o SRH"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -285,24 +282,24 @@ class TestSRv6uSIDFlex(VppTestCase):
 
         pkts = list()
         for d, s in inner:
 
         pkts = list()
         for d, s in inner:
-            pkt = (Ether() /
-                   IPv6(dst=str(ip6_dst), src=str(ip6_src)) /
-                   IPv6(dst=d, src=s) /
-                   UDP(sport=1000, dport=23))
+            pkt = (
+                Ether()
+                / IPv6(dst=str(ip6_dst), src=str(ip6_src))
+                / IPv6(dst=d, src=s)
+                / UDP(sport=1000, dport=23)
+            )
             self.logger.info(pkt.show2(dump=True))
             pkts.append(pkt)
 
         return pkts
 
     def test_srv6_usid_flex(self):
             self.logger.info(pkt.show2(dump=True))
             pkts.append(pkt)
 
         return pkts
 
     def test_srv6_usid_flex(self):
-        """ test_srv6_usid_flex """
+        """test_srv6_usid_flex"""
         pkts = self.create_packets([("A::1", "B::1"), ("C::1", "D::1")])
 
         self.vapi.cli("set sr encaps source addr A1::1")
         pkts = self.create_packets([("A::1", "B::1"), ("C::1", "D::1")])
 
         self.vapi.cli("set sr encaps source addr A1::1")
-        self.vapi.cli(
-            "sr localsid prefix 1111:2222:aaaa::/48 behavior un.flex 16")
-        self.vapi.cli(
-            "ip route add 1111:2222:bbbb::/48 via {}".format(self.ip6_nhop))
+        self.vapi.cli("sr localsid prefix 1111:2222:aaaa::/48 behavior un.flex 16")
+        self.vapi.cli("ip route add 1111:2222:bbbb::/48 via {}".format(self.ip6_nhop))
 
         self.logger.info(self.vapi.cli("show sr localsids"))
 
 
         self.logger.info(self.vapi.cli("show sr localsids"))
 
@@ -319,5 +316,4 @@ class TestSRv6uSIDFlex(VppTestCase):
 
         for pkt in capture:
             self.logger.info(pkt.show2(dump=True))
 
         for pkt in capture:
             self.logger.info(pkt.show2(dump=True))
-            self.assertEqual(
-                    pkt[IPv6].dst, "1111:2222:bbbb:cccc:dddd:eeee:ffff:0")
+            self.assertEqual(pkt[IPv6].dst, "1111:2222:bbbb:cccc:dddd:eeee:ffff:0")
index f3db2ef..7b62b29 100644 (file)
@@ -32,7 +32,8 @@ class StatsClientTestCase(VppTestCase):
         """Test set errors"""
         self.assertEqual(self.statistics.set_errors(), {})
         self.assertEqual(
         """Test set errors"""
         self.assertEqual(self.statistics.set_errors(), {})
         self.assertEqual(
-            self.statistics.get_counter('/err/ethernet-input/no error'), [0])
+            self.statistics.get_counter("/err/ethernet-input/no error"), [0]
+        )
 
     def test_client_fd_leak(self):
         """Test file descriptor count - VPP-1486"""
 
     def test_client_fd_leak(self):
         """Test file descriptor count - VPP-1486"""
@@ -46,11 +47,13 @@ class StatsClientTestCase(VppTestCase):
             stats.disconnect()
 
         ending_fds = p.num_fds()
             stats.disconnect()
 
         ending_fds = p.num_fds()
-        self.assertEqual(initial_fds, ending_fds,
-                         "initial client side file descriptor count: %s "
-                         "is not equal to "
-                         "ending client side file descriptor count: %s" % (
-                             initial_fds, ending_fds))
+        self.assertEqual(
+            initial_fds,
+            ending_fds,
+            "initial client side file descriptor count: %s "
+            "is not equal to "
+            "ending client side file descriptor count: %s" % (initial_fds, ending_fds),
+        )
 
     def test_symlink_values(self):
         """Test symlinks reported values"""
 
     def test_symlink_values(self):
         """Test symlinks reported values"""
@@ -63,16 +66,16 @@ class StatsClientTestCase(VppTestCase):
 
         p = list()
         for i in range(5):
 
         p = list()
         for i in range(5):
-            packet = (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-                      IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4))
+            packet = Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) / IP(
+                src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4
+            )
             p.append(packet)
 
         self.send_and_expect(self.pg0, p, self.pg1)
             p.append(packet)
 
         self.send_and_expect(self.pg0, p, self.pg1)
-        pg1_tx = self.statistics.get_counter('/interfaces/pg1/tx')
-        if_tx = self.statistics.get_counter('/if/tx')
+        pg1_tx = self.statistics.get_counter("/interfaces/pg1/tx")
+        if_tx = self.statistics.get_counter("/if/tx")
 
 
-        self.assertEqual(pg1_tx[0]['bytes'],
-                         if_tx[0][self.pg1.sw_if_index]['bytes'])
+        self.assertEqual(pg1_tx[0]["bytes"], if_tx[0][self.pg1.sw_if_index]["bytes"])
         for i in self.pg_interfaces:
             i.unconfig()
             i.admin_down()
         for i in self.pg_interfaces:
             i.unconfig()
             i.admin_down()
@@ -93,31 +96,28 @@ class StatsClientTestCase(VppTestCase):
         p = list()
         bytes_to_send = 0
         for i in range(5):
         p = list()
         bytes_to_send = 0
         for i in range(5):
-            packet = (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-                      IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4))
+            packet = Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) / IP(
+                src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4
+            )
             bytes_to_send += len(packet)
             p.append(packet)
 
             bytes_to_send += len(packet)
             p.append(packet)
 
-        tx_before_sending = self.statistics.get_counter('/interfaces/pg1/tx')
-        rx_before_sending = self.statistics.get_counter('/interfaces/pg0/rx')
+        tx_before_sending = self.statistics.get_counter("/interfaces/pg1/tx")
+        rx_before_sending = self.statistics.get_counter("/interfaces/pg0/rx")
         self.send_and_expect(self.pg0, p, self.pg1)
         self.send_and_expect(self.pg0, p, self.pg1)
-        tx = self.statistics.get_counter('/interfaces/pg1/tx')
-        rx = self.statistics.get_counter('/interfaces/pg0/rx')
+        tx = self.statistics.get_counter("/interfaces/pg1/tx")
+        rx = self.statistics.get_counter("/interfaces/pg0/rx")
 
         # We wait for nodes symlinks to update (interfaces created/deleted).
         # ... and packets to be sent
         self.sleep(0.1)
 
         # We wait for nodes symlinks to update (interfaces created/deleted).
         # ... and packets to be sent
         self.sleep(0.1)
-        vectors = self.statistics.get_counter('/nodes/pg1-tx/vectors')
-
-        self.assertEqual(tx[0]['bytes'] - tx_before_sending[0]['bytes'],
-                         bytes_to_send)
-        self.assertEqual(tx[0]['packets'] - tx_before_sending[0]['packets'],
-                         5)
-        self.assertEqual(rx[0]['bytes'] - rx_before_sending[0]['bytes'],
-                         bytes_to_send)
-        self.assertEqual(rx[0]['packets'] - rx_before_sending[0]['packets'],
-                         5)
-        self.assertEqual(vectors[0], rx[0]['packets'])
+        vectors = self.statistics.get_counter("/nodes/pg1-tx/vectors")
+
+        self.assertEqual(tx[0]["bytes"] - tx_before_sending[0]["bytes"], bytes_to_send)
+        self.assertEqual(tx[0]["packets"] - tx_before_sending[0]["packets"], 5)
+        self.assertEqual(rx[0]["bytes"] - rx_before_sending[0]["bytes"], bytes_to_send)
+        self.assertEqual(rx[0]["packets"] - rx_before_sending[0]["packets"], 5)
+        self.assertEqual(vectors[0], rx[0]["packets"])
 
         for i in self.pg_interfaces:
             i.unconfig()
 
         for i in self.pg_interfaces:
             i.unconfig()
@@ -125,7 +125,7 @@ class StatsClientTestCase(VppTestCase):
 
     def test_index_consistency(self):
         """Test index consistency despite changes in the stats"""
 
     def test_index_consistency(self):
         """Test index consistency despite changes in the stats"""
-        d = self.statistics.ls(['/if/names'])
+        d = self.statistics.ls(["/if/names"])
         self.create_loopback_interfaces(10)
         for i in range(10):
             try:
         self.create_loopback_interfaces(10)
         for i in range(10):
             try:
@@ -142,22 +142,21 @@ class StatsClientTestCase(VppTestCase):
     @unittest.skip("Manual only")
     def test_mem_leak(self):
         def loop():
     @unittest.skip("Manual only")
     def test_mem_leak(self):
         def loop():
-            print('Running loop')
+            print("Running loop")
             for i in range(50):
                 rv = self.vapi.papi.tap_create_v2(id=i, use_random_mac=1)
                 self.assertEqual(rv.retval, 0)
                 rv = self.vapi.papi.tap_delete_v2(sw_if_index=rv.sw_if_index)
                 self.assertEqual(rv.retval, 0)
 
             for i in range(50):
                 rv = self.vapi.papi.tap_create_v2(id=i, use_random_mac=1)
                 self.assertEqual(rv.retval, 0)
                 rv = self.vapi.papi.tap_delete_v2(sw_if_index=rv.sw_if_index)
                 self.assertEqual(rv.retval, 0)
 
-        before = self.statistics.get_counter('/mem/statseg/used')
+        before = self.statistics.get_counter("/mem/statseg/used")
         loop()
         self.vapi.cli("memory-trace on stats-segment")
         for j in range(100):
             loop()
         print(self.vapi.cli("show memory stats-segment verbose"))
         loop()
         self.vapi.cli("memory-trace on stats-segment")
         for j in range(100):
             loop()
         print(self.vapi.cli("show memory stats-segment verbose"))
-        print('AFTER', before,
-              self.statistics.get_counter('/mem/statseg/used'))
+        print("AFTER", before, self.statistics.get_counter("/mem/statseg/used"))
 
 
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index c507c75..866a659 100644 (file)
@@ -7,7 +7,7 @@ from vpp_ip_route import VppIpTable, VppIpRoute, VppRoutePath
 
 
 class TestString(VppTestCase):
 
 
 class TestString(VppTestCase):
-    """ String Test Cases """
+    """String Test Cases"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -24,15 +24,30 @@ class TestString(VppTestCase):
         super(TestString, self).tearDown()
 
     def test_string_unittest(self):
         super(TestString, self).tearDown()
 
     def test_string_unittest(self):
-        """ String unit tests """
-        names = ["memcpy_s",
-                 "clib_memcmp", "clib_memcpy", "clib_memset",
-                 "clib_strcmp", "clib_strncmp", "clib_strncpy",
-                 "clib_strnlen", "clib_strtok",
-                 "memcmp_s", "memcpy_s", "memset_s ",
-                 "strcat_s", "strcmp_s", "strcpy_s",
-                 "strncat_s", "strncmp_s", "strncpy_s",
-                 "strnlen_s", "strstr_s", "strtok_s"]
+        """String unit tests"""
+        names = [
+            "memcpy_s",
+            "clib_memcmp",
+            "clib_memcpy",
+            "clib_memset",
+            "clib_strcmp",
+            "clib_strncmp",
+            "clib_strncpy",
+            "clib_strnlen",
+            "clib_strtok",
+            "memcmp_s",
+            "memcpy_s",
+            "memset_s ",
+            "strcat_s",
+            "strcmp_s",
+            "strcpy_s",
+            "strncat_s",
+            "strncmp_s",
+            "strncpy_s",
+            "strnlen_s",
+            "strstr_s",
+            "strtok_s",
+        ]
 
         for name in names:
             error = self.vapi.cli("test string " + name)
 
         for name in names:
             error = self.vapi.cli("test string " + name)
@@ -41,5 +56,5 @@ class TestString(VppTestCase):
                 self.assertNotIn("failed", error)
 
 
                 self.assertNotIn("failed", error)
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index db4ad80..9160396 100644 (file)
@@ -16,7 +16,7 @@ NUM_PKTS = 67
 
 
 class TestSVS(VppTestCase):
 
 
 class TestSVS(VppTestCase):
-    """ SVS Test Case """
+    """SVS Test Case"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -61,35 +61,51 @@ class TestSVS(VppTestCase):
         super(TestSVS, self).tearDown()
 
     def test_svs4(self):
         super(TestSVS, self).tearDown()
 
     def test_svs4(self):
-        """ Source VRF Select IP4 """
+        """Source VRF Select IP4"""
 
         #
         # packets destined out of the 3 non-default table interfaces
         #
 
         #
         # packets destined out of the 3 non-default table interfaces
         #
-        pkts_0 = [(Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-                   IP(src="1.1.1.1", dst=self.pg1.remote_ip4) /
-                   UDP(sport=1234, dport=1234) /
-                   Raw(b'\xa5' * 100)),
-                  (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-                   IP(src="2.2.2.2", dst=self.pg2.remote_ip4) /
-                   UDP(sport=1234, dport=1234) /
-                   Raw(b'\xa5' * 100)),
-                  (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-                   IP(src="3.3.3.3", dst=self.pg3.remote_ip4) /
-                   UDP(sport=1234, dport=1234) /
-                   Raw(b'\xa5' * 100))]
-        pkts_1 = [(Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac) /
-                   IP(src="1.1.1.1", dst=self.pg1.remote_ip4) /
-                   UDP(sport=1234, dport=1234) /
-                   Raw(b'\xa5' * 100)),
-                  (Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac) /
-                   IP(src="2.2.2.2", dst=self.pg2.remote_ip4) /
-                   UDP(sport=1234, dport=1234) /
-                   Raw(b'\xa5' * 100)),
-                  (Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac) /
-                   IP(src="3.3.3.3", dst=self.pg3.remote_ip4) /
-                   UDP(sport=1234, dport=1234) /
-                   Raw(b'\xa5' * 100))]
+        pkts_0 = [
+            (
+                Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+                / IP(src="1.1.1.1", dst=self.pg1.remote_ip4)
+                / UDP(sport=1234, dport=1234)
+                / Raw(b"\xa5" * 100)
+            ),
+            (
+                Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+                / IP(src="2.2.2.2", dst=self.pg2.remote_ip4)
+                / UDP(sport=1234, dport=1234)
+                / Raw(b"\xa5" * 100)
+            ),
+            (
+                Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+                / IP(src="3.3.3.3", dst=self.pg3.remote_ip4)
+                / UDP(sport=1234, dport=1234)
+                / Raw(b"\xa5" * 100)
+            ),
+        ]
+        pkts_1 = [
+            (
+                Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac)
+                / IP(src="1.1.1.1", dst=self.pg1.remote_ip4)
+                / UDP(sport=1234, dport=1234)
+                / Raw(b"\xa5" * 100)
+            ),
+            (
+                Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac)
+                / IP(src="2.2.2.2", dst=self.pg2.remote_ip4)
+                / UDP(sport=1234, dport=1234)
+                / Raw(b"\xa5" * 100)
+            ),
+            (
+                Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac)
+                / IP(src="3.3.3.3", dst=self.pg3.remote_ip4)
+                / UDP(sport=1234, dport=1234)
+                / Raw(b"\xa5" * 100)
+            ),
+        ]
 
         #
         # before adding the SVS config all these packets are dropped when
 
         #
         # before adding the SVS config all these packets are dropped when
@@ -108,7 +124,8 @@ class TestSVS(VppTestCase):
             self.vapi.svs_table_add_del(
                 is_add=1,
                 af=VppEnum.vl_api_address_family_t.ADDRESS_IP4,
             self.vapi.svs_table_add_del(
                 is_add=1,
                 af=VppEnum.vl_api_address_family_t.ADDRESS_IP4,
-                table_id=table_id)
+                table_id=table_id,
+            )
 
             #
             # map X.0.0.0/8 to each SVS table for lookup in table X
 
             #
             # map X.0.0.0/8 to each SVS table for lookup in table X
@@ -118,7 +135,8 @@ class TestSVS(VppTestCase):
                     is_add=1,
                     prefix="%d.0.0.0/8" % i,
                     table_id=table_id,
                     is_add=1,
                     prefix="%d.0.0.0/8" % i,
                     table_id=table_id,
-                    source_table_id=i)
+                    source_table_id=i,
+                )
 
         #
         # Enable SVS on pg0/pg1 using table 1001/1002
 
         #
         # Enable SVS on pg0/pg1 using table 1001/1002
@@ -127,12 +145,14 @@ class TestSVS(VppTestCase):
             is_enable=1,
             af=VppEnum.vl_api_address_family_t.ADDRESS_IP4,
             table_id=table_ids[0],
             is_enable=1,
             af=VppEnum.vl_api_address_family_t.ADDRESS_IP4,
             table_id=table_ids[0],
-            sw_if_index=self.pg0.sw_if_index)
+            sw_if_index=self.pg0.sw_if_index,
+        )
         self.vapi.svs_enable_disable(
             is_enable=1,
             af=VppEnum.vl_api_address_family_t.ADDRESS_IP4,
             table_id=table_ids[1],
         self.vapi.svs_enable_disable(
             is_enable=1,
             af=VppEnum.vl_api_address_family_t.ADDRESS_IP4,
             table_id=table_ids[1],
-            sw_if_index=self.pg1.sw_if_index)
+            sw_if_index=self.pg1.sw_if_index,
+        )
 
         #
         # now all the packets should be delivered out the respective interface
 
         #
         # now all the packets should be delivered out the respective interface
@@ -148,16 +168,20 @@ class TestSVS(VppTestCase):
         # check that if the SVS lookup does not match a route the packet
         # is forwarded using the interface's routing table
         #
         # check that if the SVS lookup does not match a route the packet
         # is forwarded using the interface's routing table
         #
-        p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-             IP(src=self.pg0.remote_ip4, dst=self.pg0.remote_ip4) /
-             UDP(sport=1234, dport=1234) /
-             Raw(b'\xa5' * 100))
+        p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg0.remote_ip4)
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
         self.send_and_expect(self.pg0, p * NUM_PKTS, self.pg0)
 
         self.send_and_expect(self.pg0, p * NUM_PKTS, self.pg0)
 
-        p = (Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac) /
-             IP(src=self.pg1.remote_ip4, dst=self.pg1.remote_ip4) /
-             UDP(sport=1234, dport=1234) /
-             Raw(b'\xa5' * 100))
+        p = (
+            Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac)
+            / IP(src=self.pg1.remote_ip4, dst=self.pg1.remote_ip4)
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
         self.send_and_expect(self.pg1, p * NUM_PKTS, self.pg1)
 
         #
         self.send_and_expect(self.pg1, p * NUM_PKTS, self.pg1)
 
         #
@@ -179,12 +203,14 @@ class TestSVS(VppTestCase):
             is_enable=0,
             af=VppEnum.vl_api_address_family_t.ADDRESS_IP4,
             table_id=table_ids[0],
             is_enable=0,
             af=VppEnum.vl_api_address_family_t.ADDRESS_IP4,
             table_id=table_ids[0],
-            sw_if_index=self.pg0.sw_if_index)
+            sw_if_index=self.pg0.sw_if_index,
+        )
         self.vapi.svs_enable_disable(
             is_enable=0,
             af=VppEnum.vl_api_address_family_t.ADDRESS_IP4,
             table_id=table_ids[1],
         self.vapi.svs_enable_disable(
             is_enable=0,
             af=VppEnum.vl_api_address_family_t.ADDRESS_IP4,
             table_id=table_ids[1],
-            sw_if_index=self.pg1.sw_if_index)
+            sw_if_index=self.pg1.sw_if_index,
+        )
 
         for table_id in table_ids:
             for i in range(1, 4):
 
         for table_id in table_ids:
             for i in range(1, 4):
@@ -192,43 +218,61 @@ class TestSVS(VppTestCase):
                     is_add=0,
                     prefix="%d.0.0.0/8" % i,
                     table_id=table_id,
                     is_add=0,
                     prefix="%d.0.0.0/8" % i,
                     table_id=table_id,
-                    source_table_id=0)
+                    source_table_id=0,
+                )
 
             self.vapi.svs_table_add_del(
                 is_add=0,
                 af=VppEnum.vl_api_address_family_t.ADDRESS_IP4,
 
             self.vapi.svs_table_add_del(
                 is_add=0,
                 af=VppEnum.vl_api_address_family_t.ADDRESS_IP4,
-                table_id=table_id)
+                table_id=table_id,
+            )
 
     def test_svs6(self):
 
     def test_svs6(self):
-        """ Source VRF Select IP6 """
+        """Source VRF Select IP6"""
 
         #
         # packets destined out of the 3 non-default table interfaces
         #
 
         #
         # packets destined out of the 3 non-default table interfaces
         #
-        pkts_0 = [(Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-                   IPv6(src="2001:1::1", dst=self.pg1.remote_ip6) /
-                   UDP(sport=1234, dport=1234) /
-                   Raw(b'\xa5' * 100)),
-                  (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-                   IPv6(src="2001:2::1", dst=self.pg2.remote_ip6) /
-                   UDP(sport=1234, dport=1234) /
-                   Raw(b'\xa5' * 100)),
-                  (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-                   IPv6(src="2001:3::1", dst=self.pg3.remote_ip6) /
-                   UDP(sport=1234, dport=1234) /
-                   Raw(b'\xa5' * 100))]
-        pkts_1 = [(Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac) /
-                   IPv6(src="2001:1::1", dst=self.pg1.remote_ip6) /
-                   UDP(sport=1234, dport=1234) /
-                   Raw(b'\xa5' * 100)),
-                  (Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac) /
-                   IPv6(src="2001:2::1", dst=self.pg2.remote_ip6) /
-                   UDP(sport=1234, dport=1234) /
-                   Raw(b'\xa5' * 100)),
-                  (Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac) /
-                   IPv6(src="2001:3::1", dst=self.pg3.remote_ip6) /
-                   UDP(sport=1234, dport=1234) /
-                   Raw(b'\xa5' * 100))]
+        pkts_0 = [
+            (
+                Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+                / IPv6(src="2001:1::1", dst=self.pg1.remote_ip6)
+                / UDP(sport=1234, dport=1234)
+                / Raw(b"\xa5" * 100)
+            ),
+            (
+                Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+                / IPv6(src="2001:2::1", dst=self.pg2.remote_ip6)
+                / UDP(sport=1234, dport=1234)
+                / Raw(b"\xa5" * 100)
+            ),
+            (
+                Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+                / IPv6(src="2001:3::1", dst=self.pg3.remote_ip6)
+                / UDP(sport=1234, dport=1234)
+                / Raw(b"\xa5" * 100)
+            ),
+        ]
+        pkts_1 = [
+            (
+                Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac)
+                / IPv6(src="2001:1::1", dst=self.pg1.remote_ip6)
+                / UDP(sport=1234, dport=1234)
+                / Raw(b"\xa5" * 100)
+            ),
+            (
+                Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac)
+                / IPv6(src="2001:2::1", dst=self.pg2.remote_ip6)
+                / UDP(sport=1234, dport=1234)
+                / Raw(b"\xa5" * 100)
+            ),
+            (
+                Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac)
+                / IPv6(src="2001:3::1", dst=self.pg3.remote_ip6)
+                / UDP(sport=1234, dport=1234)
+                / Raw(b"\xa5" * 100)
+            ),
+        ]
 
         #
         # before adding the SVS config all these packets are dropped when
 
         #
         # before adding the SVS config all these packets are dropped when
@@ -247,7 +291,8 @@ class TestSVS(VppTestCase):
             self.vapi.svs_table_add_del(
                 is_add=1,
                 af=VppEnum.vl_api_address_family_t.ADDRESS_IP6,
             self.vapi.svs_table_add_del(
                 is_add=1,
                 af=VppEnum.vl_api_address_family_t.ADDRESS_IP6,
-                table_id=table_id)
+                table_id=table_id,
+            )
 
             #
             # map X.0.0.0/8 to each SVS table for lookup in table X
 
             #
             # map X.0.0.0/8 to each SVS table for lookup in table X
@@ -257,7 +302,8 @@ class TestSVS(VppTestCase):
                     is_add=1,
                     prefix="2001:%d::/32" % i,
                     table_id=table_id,
                     is_add=1,
                     prefix="2001:%d::/32" % i,
                     table_id=table_id,
-                    source_table_id=i)
+                    source_table_id=i,
+                )
 
         #
         # Enable SVS on pg0/pg1 using table 1001/1002
 
         #
         # Enable SVS on pg0/pg1 using table 1001/1002
@@ -266,12 +312,14 @@ class TestSVS(VppTestCase):
             is_enable=1,
             af=VppEnum.vl_api_address_family_t.ADDRESS_IP6,
             table_id=table_ids[0],
             is_enable=1,
             af=VppEnum.vl_api_address_family_t.ADDRESS_IP6,
             table_id=table_ids[0],
-            sw_if_index=self.pg0.sw_if_index)
+            sw_if_index=self.pg0.sw_if_index,
+        )
         self.vapi.svs_enable_disable(
             is_enable=1,
             af=VppEnum.vl_api_address_family_t.ADDRESS_IP6,
             table_id=table_ids[1],
         self.vapi.svs_enable_disable(
             is_enable=1,
             af=VppEnum.vl_api_address_family_t.ADDRESS_IP6,
             table_id=table_ids[1],
-            sw_if_index=self.pg1.sw_if_index)
+            sw_if_index=self.pg1.sw_if_index,
+        )
 
         #
         # now all the packets should be delivered out the respective interface
 
         #
         # now all the packets should be delivered out the respective interface
@@ -287,16 +335,20 @@ class TestSVS(VppTestCase):
         # check that if the SVS lookup does not match a route the packet
         # is forwarded using the interface's routing table
         #
         # check that if the SVS lookup does not match a route the packet
         # is forwarded using the interface's routing table
         #
-        p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-             IPv6(src=self.pg0.remote_ip6, dst=self.pg0.remote_ip6) /
-             UDP(sport=1234, dport=1234) /
-             Raw(b'\xa5' * 100))
+        p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IPv6(src=self.pg0.remote_ip6, dst=self.pg0.remote_ip6)
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
         self.send_and_expect(self.pg0, p * NUM_PKTS, self.pg0)
 
         self.send_and_expect(self.pg0, p * NUM_PKTS, self.pg0)
 
-        p = (Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac) /
-             IPv6(src=self.pg1.remote_ip6, dst=self.pg1.remote_ip6) /
-             UDP(sport=1234, dport=1234) /
-             Raw(b'\xa5' * 100))
+        p = (
+            Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac)
+            / IPv6(src=self.pg1.remote_ip6, dst=self.pg1.remote_ip6)
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
         self.send_and_expect(self.pg1, p * NUM_PKTS, self.pg1)
 
         #
         self.send_and_expect(self.pg1, p * NUM_PKTS, self.pg1)
 
         #
@@ -318,12 +370,14 @@ class TestSVS(VppTestCase):
             is_enable=0,
             af=VppEnum.vl_api_address_family_t.ADDRESS_IP6,
             table_id=table_ids[0],
             is_enable=0,
             af=VppEnum.vl_api_address_family_t.ADDRESS_IP6,
             table_id=table_ids[0],
-            sw_if_index=self.pg0.sw_if_index)
+            sw_if_index=self.pg0.sw_if_index,
+        )
         self.vapi.svs_enable_disable(
             is_enable=0,
             af=VppEnum.vl_api_address_family_t.ADDRESS_IP6,
             table_id=table_ids[1],
         self.vapi.svs_enable_disable(
             is_enable=0,
             af=VppEnum.vl_api_address_family_t.ADDRESS_IP6,
             table_id=table_ids[1],
-            sw_if_index=self.pg1.sw_if_index)
+            sw_if_index=self.pg1.sw_if_index,
+        )
 
         for table_id in table_ids:
             for i in range(1, 4):
 
         for table_id in table_ids:
             for i in range(1, 4):
@@ -331,12 +385,15 @@ class TestSVS(VppTestCase):
                     is_add=0,
                     prefix="2001:%d::/32" % i,
                     table_id=table_id,
                     is_add=0,
                     prefix="2001:%d::/32" % i,
                     table_id=table_id,
-                    source_table_id=0)
+                    source_table_id=0,
+                )
 
             self.vapi.svs_table_add_del(
                 is_add=0,
                 af=VppEnum.vl_api_address_family_t.ADDRESS_IP6,
 
             self.vapi.svs_table_add_del(
                 is_add=0,
                 af=VppEnum.vl_api_address_family_t.ADDRESS_IP6,
-                table_id=table_id)
+                table_id=table_id,
+            )
 
 
-if __name__ == '__main__':
+
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index b084a1d..b84c89c 100644 (file)
@@ -11,7 +11,7 @@ from vpp_papi import VppEnum
 
 
 class TestSyslog(VppTestCase):
 
 
 class TestSyslog(VppTestCase):
-    """ Syslog Protocol Test Cases """
+    """Syslog Protocol Test Cases"""
 
     @property
     def SYSLOG_SEVERITY(self):
 
     @property
     def SYSLOG_SEVERITY(self):
@@ -22,7 +22,7 @@ class TestSyslog(VppTestCase):
         super(TestSyslog, cls).setUpClass()
 
         try:
         super(TestSyslog, cls).setUpClass()
 
         try:
-            cls.pg0, = cls.create_pg_interfaces(range(1))
+            (cls.pg0,) = cls.create_pg_interfaces(range(1))
             cls.pg0.admin_up()
             cls.pg0.config_ip4()
             cls.pg0.resolve_arp()
             cls.pg0.admin_up()
             cls.pg0.config_ip4()
             cls.pg0.resolve_arp()
@@ -35,8 +35,7 @@ class TestSyslog(VppTestCase):
     def tearDownClass(cls):
         super(TestSyslog, cls).tearDownClass()
 
     def tearDownClass(cls):
         super(TestSyslog, cls).tearDownClass()
 
-    def syslog_generate(self, facility, severity, appname, msgid, sd=None,
-                        msg=None):
+    def syslog_generate(self, facility, severity, appname, msgid, sd=None, msg=None):
         """
         Generate syslog message
 
         """
         Generate syslog message
 
@@ -47,20 +46,50 @@ class TestSyslog(VppTestCase):
         :param sd: structured data (optional)
         :param msg: free-form message (optional)
         """
         :param sd: structured data (optional)
         :param msg: free-form message (optional)
         """
-        facility_str = ['kernel', 'user-level', 'mail-system',
-                        'system-daemons', 'security-authorization', 'syslogd',
-                        'line-printer', 'network-news', 'uucp', 'clock-daemon',
-                        '', 'ftp-daemon', 'ntp-subsystem', 'log-audit',
-                        'log-alert', '', 'local0', 'local1', 'local2',
-                        'local3', 'local4', 'local5', 'local6', 'local7']
-
-        severity_str = ['emergency', 'alert', 'critical', 'error', 'warning',
-                        'notice', 'informational', 'debug']
-
-        cli_str = "test syslog %s %s %s %s" % (facility_str[facility],
-                                               severity_str[severity],
-                                               appname,
-                                               msgid)
+        facility_str = [
+            "kernel",
+            "user-level",
+            "mail-system",
+            "system-daemons",
+            "security-authorization",
+            "syslogd",
+            "line-printer",
+            "network-news",
+            "uucp",
+            "clock-daemon",
+            "",
+            "ftp-daemon",
+            "ntp-subsystem",
+            "log-audit",
+            "log-alert",
+            "",
+            "local0",
+            "local1",
+            "local2",
+            "local3",
+            "local4",
+            "local5",
+            "local6",
+            "local7",
+        ]
+
+        severity_str = [
+            "emergency",
+            "alert",
+            "critical",
+            "error",
+            "warning",
+            "notice",
+            "informational",
+            "debug",
+        ]
+
+        cli_str = "test syslog %s %s %s %s" % (
+            facility_str[facility],
+            severity_str[severity],
+            appname,
+            msgid,
+        )
         if sd is not None:
             for sd_id, sd_params in sd.items():
                 cli_str += " sd-id %s" % (sd_id)
         if sd is not None:
             for sd_id, sd_params in sd.items():
                 cli_str += " sd-id %s" % (sd_id)
@@ -70,8 +99,9 @@ class TestSyslog(VppTestCase):
             cli_str += " %s" % (msg)
         self.vapi.cli(cli_str)
 
             cli_str += " %s" % (msg)
         self.vapi.cli(cli_str)
 
-    def syslog_verify(self, data, facility, severity, appname, msgid, sd=None,
-                      msg=None):
+    def syslog_verify(
+        self, data, facility, severity, appname, msgid, sd=None, msg=None
+    ):
         """
         Verify syslog message
 
         """
         Verify syslog message
 
@@ -83,7 +113,7 @@ class TestSyslog(VppTestCase):
         :param sd: structured data (optional)
         :param msg: free-form message (optional)
         """
         :param sd: structured data (optional)
         :param msg: free-form message (optional)
         """
-        message = data.decode('utf-8')
+        message = data.decode("utf-8")
         if sd is None:
             sd = {}
         try:
         if sd is None:
             sd = {}
         try:
@@ -102,35 +132,32 @@ class TestSyslog(VppTestCase):
             self.assertEqual(message.hostname, self.pg0.local_ip4)
 
     def test_syslog(self):
             self.assertEqual(message.hostname, self.pg0.local_ip4)
 
     def test_syslog(self):
-        """ Syslog Protocol test """
-        self.vapi.syslog_set_sender(src_address=self.pg0.local_ip4,
-                                    collector_address=self.pg0.remote_ip4)
+        """Syslog Protocol test"""
+        self.vapi.syslog_set_sender(
+            src_address=self.pg0.local_ip4, collector_address=self.pg0.remote_ip4
+        )
         config = self.vapi.syslog_get_sender()
         config = self.vapi.syslog_get_sender()
-        self.assertEqual(str(config.collector_address),
-                         self.pg0.remote_ip4)
+        self.assertEqual(str(config.collector_address), self.pg0.remote_ip4)
         self.assertEqual(config.collector_port, 514)
         self.assertEqual(str(config.src_address), self.pg0.local_ip4)
         self.assertEqual(config.vrf_id, 0)
         self.assertEqual(config.max_msg_size, 480)
 
         self.assertEqual(config.collector_port, 514)
         self.assertEqual(str(config.src_address), self.pg0.local_ip4)
         self.assertEqual(config.vrf_id, 0)
         self.assertEqual(config.max_msg_size, 480)
 
-        appname = 'test'
-        msgid = 'testMsg'
-        msg = 'this is message'
-        sd1 = {'exampleSDID@32473': {'iut': '3',
-                                     'eventSource': 'App',
-                                     'eventID': '1011'}}
-        sd2 = {'exampleSDID@32473': {'iut': '3',
-                                     'eventSource': 'App',
-                                     'eventID': '1011'},
-               'examplePriority@32473': {'class': 'high'}}
+        appname = "test"
+        msgid = "testMsg"
+        msg = "this is message"
+        sd1 = {
+            "exampleSDID@32473": {"iut": "3", "eventSource": "App", "eventID": "1011"}
+        }
+        sd2 = {
+            "exampleSDID@32473": {"iut": "3", "eventSource": "App", "eventID": "1011"},
+            "examplePriority@32473": {"class": "high"},
+        }
 
         self.pg_enable_capture(self.pg_interfaces)
 
         self.pg_enable_capture(self.pg_interfaces)
-        self.syslog_generate(SyslogFacility.local7,
-                             SyslogSeverity.info,
-                             appname,
-                             msgid,
-                             None,
-                             msg)
+        self.syslog_generate(
+            SyslogFacility.local7, SyslogSeverity.info, appname, msgid, None, msg
+        )
         capture = self.pg0.get_capture(1)
         try:
             self.assertEqual(capture[0][IP].src, self.pg0.local_ip4)
         capture = self.pg0.get_capture(1)
         try:
             self.assertEqual(capture[0][IP].src, self.pg0.local_ip4)
@@ -140,71 +167,66 @@ class TestSyslog(VppTestCase):
         except:
             self.logger.error(ppp("invalid packet:", capture[0]))
             raise
         except:
             self.logger.error(ppp("invalid packet:", capture[0]))
             raise
-        self.syslog_verify(capture[0][Raw].load,
-                           SyslogFacility.local7,
-                           SyslogSeverity.info,
-                           appname,
-                           msgid,
-                           None,
-                           msg)
+        self.syslog_verify(
+            capture[0][Raw].load,
+            SyslogFacility.local7,
+            SyslogSeverity.info,
+            appname,
+            msgid,
+            None,
+            msg,
+        )
 
         self.pg_enable_capture(self.pg_interfaces)
 
         self.pg_enable_capture(self.pg_interfaces)
-        self.vapi.syslog_set_filter(
-            self.SYSLOG_SEVERITY.SYSLOG_API_SEVERITY_WARN)
+        self.vapi.syslog_set_filter(self.SYSLOG_SEVERITY.SYSLOG_API_SEVERITY_WARN)
         filter = self.vapi.syslog_get_filter()
         filter = self.vapi.syslog_get_filter()
-        self.assertEqual(filter.severity,
-                         self.SYSLOG_SEVERITY.SYSLOG_API_SEVERITY_WARN)
-        self.syslog_generate(SyslogFacility.local7,
-                             SyslogSeverity.info,
-                             appname,
-                             msgid,
-                             None,
-                             msg)
+        self.assertEqual(filter.severity, self.SYSLOG_SEVERITY.SYSLOG_API_SEVERITY_WARN)
+        self.syslog_generate(
+            SyslogFacility.local7, SyslogSeverity.info, appname, msgid, None, msg
+        )
         self.pg0.assert_nothing_captured()
 
         self.pg_enable_capture(self.pg_interfaces)
         self.pg0.assert_nothing_captured()
 
         self.pg_enable_capture(self.pg_interfaces)
-        self.syslog_generate(SyslogFacility.local6,
-                             SyslogSeverity.warning,
-                             appname,
-                             msgid,
-                             sd1,
-                             msg)
+        self.syslog_generate(
+            SyslogFacility.local6, SyslogSeverity.warning, appname, msgid, sd1, msg
+        )
         capture = self.pg0.get_capture(1)
         capture = self.pg0.get_capture(1)
-        self.syslog_verify(capture[0][Raw].load,
-                           SyslogFacility.local6,
-                           SyslogSeverity.warning,
-                           appname,
-                           msgid,
-                           sd1,
-                           msg)
-
-        self.vapi.syslog_set_sender(self.pg0.local_ip4,
-                                    self.pg0.remote_ip4,
-                                    collector_port=12345)
+        self.syslog_verify(
+            capture[0][Raw].load,
+            SyslogFacility.local6,
+            SyslogSeverity.warning,
+            appname,
+            msgid,
+            sd1,
+            msg,
+        )
+
+        self.vapi.syslog_set_sender(
+            self.pg0.local_ip4, self.pg0.remote_ip4, collector_port=12345
+        )
         config = self.vapi.syslog_get_sender()
         self.assertEqual(config.collector_port, 12345)
 
         self.pg_enable_capture(self.pg_interfaces)
         config = self.vapi.syslog_get_sender()
         self.assertEqual(config.collector_port, 12345)
 
         self.pg_enable_capture(self.pg_interfaces)
-        self.syslog_generate(SyslogFacility.local5,
-                             SyslogSeverity.err,
-                             appname,
-                             msgid,
-                             sd2,
-                             None)
+        self.syslog_generate(
+            SyslogFacility.local5, SyslogSeverity.err, appname, msgid, sd2, None
+        )
         capture = self.pg0.get_capture(1)
         try:
             self.assertEqual(capture[0][UDP].dport, 12345)
         except:
             self.logger.error(ppp("invalid packet:", capture[0]))
             raise
         capture = self.pg0.get_capture(1)
         try:
             self.assertEqual(capture[0][UDP].dport, 12345)
         except:
             self.logger.error(ppp("invalid packet:", capture[0]))
             raise
-        self.syslog_verify(capture[0][Raw].load,
-                           SyslogFacility.local5,
-                           SyslogSeverity.err,
-                           appname,
-                           msgid,
-                           sd2,
-                           None)
-
-
-if __name__ == '__main__':
+        self.syslog_verify(
+            capture[0][Raw].load,
+            SyslogFacility.local5,
+            SyslogSeverity.err,
+            appname,
+            msgid,
+            sd2,
+            None,
+        )
+
+
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index 0e5b315..57014e4 100644 (file)
@@ -11,7 +11,7 @@ def check_tuntap_driver_access():
 
 @unittest.skip("Requires root")
 class TestTAP(VppTestCase):
 
 @unittest.skip("Requires root")
 class TestTAP(VppTestCase):
-    """ TAP Test Case """
+    """TAP Test Case"""
 
     def test_tap_add_del(self):
         """Create TAP interface"""
 
     def test_tap_add_del(self):
         """Create TAP interface"""
@@ -20,7 +20,7 @@ class TestTAP(VppTestCase):
         self.assertTrue(tap0.query_vpp_config())
 
     def test_tap_dump(self):
         self.assertTrue(tap0.query_vpp_config())
 
     def test_tap_dump(self):
-        """ Test api dump w/ and w/o sw_if_index filtering"""
+        """Test api dump w/ and w/o sw_if_index filtering"""
         MAX_INSTANCES = 10
         tap_instances = []
         for instance in range(MAX_INSTANCES):
         MAX_INSTANCES = 10
         tap_instances = []
         for instance in range(MAX_INSTANCES):
@@ -29,10 +29,9 @@ class TestTAP(VppTestCase):
             tap_instances.append(i)
         details = self.vapi.sw_interface_tap_v2_dump()
         self.assertEqual(MAX_INSTANCES, len(details))
             tap_instances.append(i)
         details = self.vapi.sw_interface_tap_v2_dump()
         self.assertEqual(MAX_INSTANCES, len(details))
-        details = self.vapi.sw_interface_tap_v2_dump(
-            tap_instances[5].sw_if_index)
+        details = self.vapi.sw_interface_tap_v2_dump(tap_instances[5].sw_if_index)
         self.assertEqual(1, len(details))
 
 
         self.assertEqual(1, len(details))
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index f8e5105..de12636 100644 (file)
@@ -7,7 +7,7 @@ from vpp_ip_route import VppIpTable, VppIpRoute, VppRoutePath
 
 
 class TestTCP(VppTestCase):
 
 
 class TestTCP(VppTestCase):
-    """ TCP Test Case """
+    """TCP Test Case"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -36,10 +36,12 @@ class TestTCP(VppTestCase):
             table_id += 1
 
         # Configure namespaces
             table_id += 1
 
         # Configure namespaces
-        self.vapi.app_namespace_add_del(namespace_id="0",
-                                        sw_if_index=self.loop0.sw_if_index)
-        self.vapi.app_namespace_add_del(namespace_id="1",
-                                        sw_if_index=self.loop1.sw_if_index)
+        self.vapi.app_namespace_add_del(
+            namespace_id="0", sw_if_index=self.loop0.sw_if_index
+        )
+        self.vapi.app_namespace_add_del(
+            namespace_id="1", sw_if_index=self.loop1.sw_if_index
+        )
 
     def tearDown(self):
         for i in self.lo_interfaces:
 
     def tearDown(self):
         for i in self.lo_interfaces:
@@ -50,31 +52,38 @@ class TestTCP(VppTestCase):
         super(TestTCP, self).tearDown()
 
     def test_tcp_transfer(self):
         super(TestTCP, self).tearDown()
 
     def test_tcp_transfer(self):
-        """ TCP echo client/server transfer """
+        """TCP echo client/server transfer"""
 
         # Add inter-table routes
 
         # Add inter-table routes
-        ip_t01 = VppIpRoute(self, self.loop1.local_ip4, 32,
-                            [VppRoutePath("0.0.0.0",
-                                          0xffffffff,
-                                          nh_table_id=1)])
-        ip_t10 = VppIpRoute(self, self.loop0.local_ip4, 32,
-                            [VppRoutePath("0.0.0.0",
-                                          0xffffffff,
-                                          nh_table_id=0)], table_id=1)
+        ip_t01 = VppIpRoute(
+            self,
+            self.loop1.local_ip4,
+            32,
+            [VppRoutePath("0.0.0.0", 0xFFFFFFFF, nh_table_id=1)],
+        )
+        ip_t10 = VppIpRoute(
+            self,
+            self.loop0.local_ip4,
+            32,
+            [VppRoutePath("0.0.0.0", 0xFFFFFFFF, nh_table_id=0)],
+            table_id=1,
+        )
         ip_t01.add_vpp_config()
         ip_t10.add_vpp_config()
 
         # Start builtin server and client
         uri = "tcp://" + self.loop0.local_ip4 + "/1234"
         ip_t01.add_vpp_config()
         ip_t10.add_vpp_config()
 
         # Start builtin server and client
         uri = "tcp://" + self.loop0.local_ip4 + "/1234"
-        error = self.vapi.cli("test echo server appns 0 fifo-size 4 uri " +
-                              uri)
+        error = self.vapi.cli("test echo server appns 0 fifo-size 4 uri " + uri)
         if error:
             self.logger.critical(error)
             self.assertNotIn("failed", error)
 
         if error:
             self.logger.critical(error)
             self.assertNotIn("failed", error)
 
-        error = self.vapi.cli("test echo client mbytes 10 appns 1 " +
-                              "fifo-size 4 no-output test-bytes " +
-                              "syn-timeout 2 uri " + uri)
+        error = self.vapi.cli(
+            "test echo client mbytes 10 appns 1 "
+            + "fifo-size 4 no-output test-bytes "
+            + "syn-timeout 2 uri "
+            + uri
+        )
         if error:
             self.logger.critical(error)
             self.assertNotIn("failed", error)
         if error:
             self.logger.critical(error)
             self.assertNotIn("failed", error)
@@ -104,12 +113,13 @@ class TestTCPUnitTests(VppTestCase):
         self.vapi.session_enable_disable(is_enable=0)
 
     def test_tcp_unittest(self):
         self.vapi.session_enable_disable(is_enable=0)
 
     def test_tcp_unittest(self):
-        """ TCP Unit Tests """
+        """TCP Unit Tests"""
         error = self.vapi.cli("test tcp all")
 
         if error:
             self.logger.critical(error)
         self.assertNotIn("failed", error)
 
         error = self.vapi.cli("test tcp all")
 
         if error:
             self.logger.critical(error)
         self.assertNotIn("failed", error)
 
-if __name__ == '__main__':
+
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index 2f8edd4..301cddf 100644 (file)
@@ -23,8 +23,9 @@ def checkOpenSSLVersion():
     r = "OPENSSL_ROOT_DIR" in os.environ
     if r:
         ssl = os.environ["OPENSSL_ROOT_DIR"] + "/bin/openssl version"
     r = "OPENSSL_ROOT_DIR" in os.environ
     if r:
         ssl = os.environ["OPENSSL_ROOT_DIR"] + "/bin/openssl version"
-        p = subprocess.Popen(ssl, stdin=subprocess.PIPE,
-                             stdout=subprocess.PIPE, shell=True)
+        p = subprocess.Popen(
+            ssl, stdin=subprocess.PIPE, stdout=subprocess.PIPE, shell=True
+        )
         p.wait()
         output = p.stdout.read()
         status = p.returncode
         p.wait()
         output = p.stdout.read()
         status = p.returncode
@@ -52,7 +53,7 @@ def checkAll():
 
 
 class TestTLS(VppTestCase):
 
 
 class TestTLS(VppTestCase):
-    """ TLS Qat Test Case. """
+    """TLS Qat Test Case."""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -82,10 +83,12 @@ class TestTLS(VppTestCase):
             table_id += 1
 
         # Configure namespaces
             table_id += 1
 
         # Configure namespaces
-        self.vapi.app_namespace_add_del(namespace_id="0",
-                                        sw_if_index=self.loop0.sw_if_index)
-        self.vapi.app_namespace_add_del(namespace_id="1",
-                                        sw_if_index=self.loop1.sw_if_index)
+        self.vapi.app_namespace_add_del(
+            namespace_id="0", sw_if_index=self.loop0.sw_if_index
+        )
+        self.vapi.app_namespace_add_del(
+            namespace_id="1", sw_if_index=self.loop1.sw_if_index
+        )
 
     def tearDown(self):
         for i in self.lo_interfaces:
 
     def tearDown(self):
         for i in self.lo_interfaces:
@@ -95,46 +98,49 @@ class TestTLS(VppTestCase):
         self.vapi.session_enable_disable(is_enable=0)
         super(TestTLS, self).tearDown()
 
         self.vapi.session_enable_disable(is_enable=0)
         super(TestTLS, self).tearDown()
 
-    @unittest.skipUnless(checkAll(),
-                         "QAT or OpenSSL not satisfied,skip.")
+    @unittest.skipUnless(checkAll(), "QAT or OpenSSL not satisfied,skip.")
     def test_tls_transfer(self):
     def test_tls_transfer(self):
-        """ TLS qat echo client/server transfer """
+        """TLS qat echo client/server transfer"""
 
         # Add inter-table routes
 
         # Add inter-table routes
-        ip_t01 = VppIpRoute(self, self.loop1.local_ip4, 32,
-                            [VppRoutePath("0.0.0.0",
-                                          0xffffffff,
-                                          nh_table_id=1)])
-
-        ip_t10 = VppIpRoute(self, self.loop0.local_ip4, 32,
-                            [VppRoutePath("0.0.0.0",
-                                          0xffffffff,
-                                          nh_table_id=0)], table_id=1)
+        ip_t01 = VppIpRoute(
+            self,
+            self.loop1.local_ip4,
+            32,
+            [VppRoutePath("0.0.0.0", 0xFFFFFFFF, nh_table_id=1)],
+        )
+
+        ip_t10 = VppIpRoute(
+            self,
+            self.loop0.local_ip4,
+            32,
+            [VppRoutePath("0.0.0.0", 0xFFFFFFFF, nh_table_id=0)],
+            table_id=1,
+        )
         ip_t01.add_vpp_config()
         ip_t10.add_vpp_config()
 
         # Enable QAT engine and TLS async
         r = self.vapi.tls_openssl_set_engine(
         ip_t01.add_vpp_config()
         ip_t10.add_vpp_config()
 
         # Enable QAT engine and TLS async
         r = self.vapi.tls_openssl_set_engine(
-                async_enable=1,
-                engine="qat",
-                algorithm="RSA,PKEY_CRYPTO",
-                ciphers="RSA")
-        self.assertIsNotNone(r,
-                             'No response msg ')
+            async_enable=1, engine="qat", algorithm="RSA,PKEY_CRYPTO", ciphers="RSA"
+        )
+        self.assertIsNotNone(r, "No response msg ")
 
         # Start builtin server and client
         uri = "tls://" + self.loop0.local_ip4 + "/1234"
 
         # Start builtin server and client
         uri = "tls://" + self.loop0.local_ip4 + "/1234"
-        error = self.vapi.cli("test echo server appns 0 fifo-size 4 "
-                              "tls-engine 1 uri " +
-                              uri)
+        error = self.vapi.cli(
+            "test echo server appns 0 fifo-size 4 tls-engine 1 uri " + uri
+        )
         if error:
             self.logger.critical(error)
             self.assertNotIn("failed", error)
 
         if error:
             self.logger.critical(error)
             self.assertNotIn("failed", error)
 
-        error = self.vapi.cli("test echo client mbytes 10 appns 1 "
-                              "fifo-size 4 no-output test-bytes "
-                              "tls-engine 1 "
-                              "syn-timeout 2 uri " + uri)
+        error = self.vapi.cli(
+            "test echo client mbytes 10 appns 1 "
+            "fifo-size 4 no-output test-bytes "
+            "tls-engine 1 "
+            "syn-timeout 2 uri " + uri
+        )
         if error:
             self.logger.critical(error)
             self.assertNotIn("failed", error)
         if error:
             self.logger.critical(error)
             self.assertNotIn("failed", error)
@@ -144,5 +150,5 @@ class TestTLS(VppTestCase):
         ip_t10.remove_vpp_config()
 
 
         ip_t10.remove_vpp_config()
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index fa0d748..3c1f778 100644 (file)
@@ -15,7 +15,7 @@ from scapy.utils import rdpcap
 
 
 class TestTracefilter(VppTestCase):
 
 
 class TestTracefilter(VppTestCase):
-    """ Packet Tracer Filter Test """
+    """Packet Tracer Filter Test"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -43,8 +43,11 @@ class TestTracefilter(VppTestCase):
     def cli(self, cmd):
         r = self.vapi.cli_return_response(cmd)
         if r.retval != 0:
     def cli(self, cmd):
         r = self.vapi.cli_return_response(cmd)
         if r.retval != 0:
-            s = "reply '%s'" % r.reply if hasattr(
-                r, "reply") else "retval '%s'" % r.retval
+            s = (
+                "reply '%s'" % r.reply
+                if hasattr(r, "reply")
+                else "retval '%s'" % r.retval
+            )
             raise RuntimeError("cli command '%s' FAIL with %s" % (cmd, s))
         return r
 
             raise RuntimeError("cli command '%s' FAIL with %s" % (cmd, s))
         return r
 
@@ -71,26 +74,34 @@ class TestTracefilter(VppTestCase):
         self.assertTrue(r.reply.find(s) != -1)
 
     def test_basic(self):
         self.assertTrue(r.reply.find(s) != -1)
 
     def test_basic(self):
-        """ Packet Tracer Filter Test """
+        """Packet Tracer Filter Test"""
         self.add_trace_filter(
         self.add_trace_filter(
-            "l3 ip4 src",
-            "l3 ip4 src %s" %
-            self.pg0.remote_hosts[5].ip4)
+            "l3 ip4 src", "l3 ip4 src %s" % self.pg0.remote_hosts[5].ip4
+        )
         self.add_trace_filter(
         self.add_trace_filter(
-            "l3 ip4 proto l4 src_port",
-            "l3 ip4 proto 17 l4 src_port 2345")
+            "l3 ip4 proto l4 src_port", "l3 ip4 proto 17 l4 src_port 2345"
+        )
         # the packet we are trying to match
         p = list()
         for i in range(100):
             src = self.pg0.remote_hosts[i % len(self.pg0.remote_hosts)].ip4
         # the packet we are trying to match
         p = list()
         for i in range(100):
             src = self.pg0.remote_hosts[i % len(self.pg0.remote_hosts)].ip4
-            p.append((Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-                      IP(src=src, dst=self.pg1.remote_ip4) /
-                      UDP(sport=1234, dport=2345) / Raw('\xa5' * 100)))
+            p.append(
+                (
+                    Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+                    / IP(src=src, dst=self.pg1.remote_ip4)
+                    / UDP(sport=1234, dport=2345)
+                    / Raw("\xa5" * 100)
+                )
+            )
         for i in range(17):
         for i in range(17):
-            p.append((Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-                      IP(src=self.pg0.remote_hosts[0].ip4,
-                         dst=self.pg1.remote_ip4) /
-                      UDP(sport=2345, dport=1234) / Raw('\xa5' * 100)))
+            p.append(
+                (
+                    Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+                    / IP(src=self.pg0.remote_hosts[0].ip4, dst=self.pg1.remote_ip4)
+                    / UDP(sport=2345, dport=1234)
+                    / Raw("\xa5" * 100)
+                )
+            )
 
         self.send_and_expect(self.pg0, p, self.pg1, trace=False)
 
 
         self.send_and_expect(self.pg0, p, self.pg1, trace=False)
 
@@ -108,21 +119,23 @@ class TestTracefilter(VppTestCase):
         self.del_trace_filters()
 
     def test_encap(self):
         self.del_trace_filters()
 
     def test_encap(self):
-        """ Packet Tracer Filter Test with encap """
+        """Packet Tracer Filter Test with encap"""
 
         # the packet we are trying to match
 
         # the packet we are trying to match
-        p = (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-             IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4) /
-             UDP() /
-             VXLAN() /
-             Ether() /
-             IP() /
-             UDP() /
-             GENEVE(vni=1234) /
-             Ether() /
-             IP(src='192.168.4.167') /
-             UDP() /
-             Raw('\xa5' * 100))
+        p = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4)
+            / UDP()
+            / VXLAN()
+            / Ether()
+            / IP()
+            / UDP()
+            / GENEVE(vni=1234)
+            / Ether()
+            / IP(src="192.168.4.167")
+            / UDP()
+            / Raw("\xa5" * 100)
+        )
 
         #
         # compute filter mask & value
 
         #
         # compute filter mask & value
@@ -130,29 +143,31 @@ class TestTracefilter(VppTestCase):
         # we need to set checksums to 0 to make sure scapy will not recompute
         # them
         #
         # we need to set checksums to 0 to make sure scapy will not recompute
         # them
         #
-        tmpl = (Ether() /
-                IP(chksum=0) /
-                UDP(chksum=0) /
-                VXLAN() /
-                Ether() /
-                IP(chksum=0) /
-                UDP(chksum=0) /
-                GENEVE(vni=0) /
-                Ether() /
-                IP(src='0.0.0.0', chksum=0))
+        tmpl = (
+            Ether()
+            / IP(chksum=0)
+            / UDP(chksum=0)
+            / VXLAN()
+            / Ether()
+            / IP(chksum=0)
+            / UDP(chksum=0)
+            / GENEVE(vni=0)
+            / Ether()
+            / IP(src="0.0.0.0", chksum=0)
+        )
         ori = raw(tmpl)
 
         # the mask
         ori = raw(tmpl)
 
         # the mask
-        tmpl[GENEVE].vni = 0xffffff
+        tmpl[GENEVE].vni = 0xFFFFFF
         user = tmpl[GENEVE].payload
         user = tmpl[GENEVE].payload
-        user[IP].src = '255.255.255.255'
+        user[IP].src = "255.255.255.255"
         new = raw(tmpl)
         mask = "".join(("{:02x}".format(o ^ n) for o, n in zip(ori, new)))
 
         # this does not match (wrong vni)
         tmpl[GENEVE].vni = 1
         user = tmpl[GENEVE].payload
         new = raw(tmpl)
         mask = "".join(("{:02x}".format(o ^ n) for o, n in zip(ori, new)))
 
         # this does not match (wrong vni)
         tmpl[GENEVE].vni = 1
         user = tmpl[GENEVE].payload
-        user[IP].src = '192.168.4.167'
+        user[IP].src = "192.168.4.167"
         new = raw(tmpl)
         match = "".join(("{:02x}".format(o ^ n) for o, n in zip(ori, new)))
         self.assert_classify(mask, match, [p] * 11, 0)
         new = raw(tmpl)
         match = "".join(("{:02x}".format(o ^ n) for o, n in zip(ori, new)))
         self.assert_classify(mask, match, [p] * 11, 0)
@@ -164,29 +179,41 @@ class TestTracefilter(VppTestCase):
         self.assert_classify(mask, match, [p] * 17)
 
     def test_pcap(self):
         self.assert_classify(mask, match, [p] * 17)
 
     def test_pcap(self):
-        """ Packet Capture Filter Test """
+        """Packet Capture Filter Test"""
         self.cli(
         self.cli(
-            "classify filter pcap mask l3 ip4 src match l3 ip4 src %s" %
-            self.pg0.remote_hosts[5].ip4)
+            "classify filter pcap mask l3 ip4 src match l3 ip4 src %s"
+            % self.pg0.remote_hosts[5].ip4
+        )
         self.cli(
             "classify filter pcap "
             "mask l3 ip4 proto l4 src_port "
         self.cli(
             "classify filter pcap "
             "mask l3 ip4 proto l4 src_port "
-            "match l3 ip4 proto 17 l4 src_port 2345")
+            "match l3 ip4 proto 17 l4 src_port 2345"
+        )
         self.cli(
             "pcap trace rx tx max 1000 intfc pg0 "
         self.cli(
             "pcap trace rx tx max 1000 intfc pg0 "
-            "file vpp_test_trace_filter_test_pcap.pcap filter")
+            "file vpp_test_trace_filter_test_pcap.pcap filter"
+        )
         # the packet we are trying to match
         p = list()
         for i in range(100):
             src = self.pg0.remote_hosts[i % len(self.pg0.remote_hosts)].ip4
         # the packet we are trying to match
         p = list()
         for i in range(100):
             src = self.pg0.remote_hosts[i % len(self.pg0.remote_hosts)].ip4
-            p.append((Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-                      IP(src=src, dst=self.pg1.remote_ip4) /
-                      UDP(sport=1234, dport=2345) / Raw('\xa5' * 100)))
+            p.append(
+                (
+                    Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+                    / IP(src=src, dst=self.pg1.remote_ip4)
+                    / UDP(sport=1234, dport=2345)
+                    / Raw("\xa5" * 100)
+                )
+            )
         for i in range(17):
         for i in range(17):
-            p.append((Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-                      IP(src=self.pg0.remote_hosts[0].ip4,
-                         dst=self.pg1.remote_ip4) /
-                      UDP(sport=2345, dport=1234) / Raw('\xa5' * 100)))
+            p.append(
+                (
+                    Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+                    / IP(src=self.pg0.remote_hosts[0].ip4, dst=self.pg1.remote_ip4)
+                    / UDP(sport=2345, dport=1234)
+                    / Raw("\xa5" * 100)
+                )
+            )
 
         self.send_and_expect(self.pg0, p, self.pg1, trace=False)
 
 
         self.send_and_expect(self.pg0, p, self.pg1, trace=False)
 
@@ -208,28 +235,42 @@ class TestTracefilter(VppTestCase):
             self.assertEqual(str(pcap[i]), p_)
 
     def test_pcap_drop(self):
             self.assertEqual(str(pcap[i]), p_)
 
     def test_pcap_drop(self):
-        """ Drop Packet Capture Filter Test """
+        """Drop Packet Capture Filter Test"""
         self.cli(
             "pcap trace drop max 1000 "
             "error {ip4-udp-lookup}.{no_listener} "
         self.cli(
             "pcap trace drop max 1000 "
             "error {ip4-udp-lookup}.{no_listener} "
-            "file vpp_test_trace_filter_test_pcap_drop.pcap")
+            "file vpp_test_trace_filter_test_pcap_drop.pcap"
+        )
         # the packet we are trying to match
         p = list()
         for i in range(17):
             # this packet should be forwarded
         # the packet we are trying to match
         p = list()
         for i in range(17):
             # this packet should be forwarded
-            p.append((Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-                      IP(src=self.pg0.remote_hosts[0].ip4,
-                         dst=self.pg1.remote_ip4) /
-                      UDP(sport=2345, dport=1234) / Raw('\xa5' * 100)))
+            p.append(
+                (
+                    Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+                    / IP(src=self.pg0.remote_hosts[0].ip4, dst=self.pg1.remote_ip4)
+                    / UDP(sport=2345, dport=1234)
+                    / Raw("\xa5" * 100)
+                )
+            )
             # this packet should be captured (no listener)
             # this packet should be captured (no listener)
-            p.append((Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-                      IP(src=self.pg0.remote_hosts[0].ip4,
-                         dst=self.pg0.local_ip4) /
-                      UDP(sport=2345, dport=1234) / Raw('\xa5' * 100)))
+            p.append(
+                (
+                    Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+                    / IP(src=self.pg0.remote_hosts[0].ip4, dst=self.pg0.local_ip4)
+                    / UDP(sport=2345, dport=1234)
+                    / Raw("\xa5" * 100)
+                )
+            )
         # this packet will be blackholed but not captured
         # this packet will be blackholed but not captured
-        p.append((Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-                  IP(src=self.pg0.remote_hosts[0].ip4, dst="0.0.0.0") /
-                  UDP(sport=2345, dport=1234) / Raw('\xa5' * 100)))
+        p.append(
+            (
+                Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+                / IP(src=self.pg0.remote_hosts[0].ip4, dst="0.0.0.0")
+                / UDP(sport=2345, dport=1234)
+                / Raw("\xa5" * 100)
+            )
+        )
 
         self.send_and_expect(self.pg0, p, self.pg1, n_rx=17, trace=False)
 
 
         self.send_and_expect(self.pg0, p, self.pg1, n_rx=17, trace=False)
 
@@ -240,5 +281,5 @@ class TestTracefilter(VppTestCase):
         self.assertEqual(len(pcap), 17)
 
 
         self.assertEqual(len(pcap), 17)
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index 031867c..c7e97c6 100644 (file)
@@ -5,8 +5,16 @@ from framework import VppTestCase, VppTestRunner
 
 from vpp_udp_encap import find_udp_encap, VppUdpEncap
 from vpp_udp_decap import VppUdpDecap
 
 from vpp_udp_encap import find_udp_encap, VppUdpEncap
 from vpp_udp_decap import VppUdpDecap
-from vpp_ip_route import VppIpRoute, VppRoutePath, VppIpTable, VppMplsLabel, \
-    VppMplsTable, VppMplsRoute, FibPathType, FibPathProto
+from vpp_ip_route import (
+    VppIpRoute,
+    VppRoutePath,
+    VppIpTable,
+    VppMplsLabel,
+    VppMplsTable,
+    VppMplsRoute,
+    FibPathType,
+    FibPathProto,
+)
 from vpp_neighbor import VppNeighbor
 from vpp_papi import VppEnum
 
 from vpp_neighbor import VppNeighbor
 from vpp_papi import VppEnum
 
@@ -21,7 +29,7 @@ NUM_PKTS = 67
 
 @tag_fixme_vpp_workers
 class TestUdpEncap(VppTestCase):
 
 @tag_fixme_vpp_workers
 class TestUdpEncap(VppTestCase):
-    """ UDP Encap Test Case """
+    """UDP Encap Test Case"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -99,8 +107,7 @@ class TestUdpEncap(VppTestCase):
             self.assertEqual(rx.hlim, tx[IPv6].hlim)
 
     def test_udp_encap(self):
             self.assertEqual(rx.hlim, tx[IPv6].hlim)
 
     def test_udp_encap(self):
-        """ UDP Encap test
-        """
+        """UDP Encap test"""
 
         #
         # construct a UDP encap object through each of the peers
 
         #
         # construct a UDP encap object through each of the peers
@@ -109,29 +116,21 @@ class TestUdpEncap(VppTestCase):
         # where 2 different udp encap objects are processed at the
         # same time
         #
         # where 2 different udp encap objects are processed at the
         # same time
         #
-        udp_encap_0 = VppUdpEncap(self,
-                                  self.pg0.local_ip4,
-                                  self.pg0.remote_ip4,
-                                  330, 440)
-        udp_encap_1 = VppUdpEncap(self,
-                                  self.pg1.local_ip4,
-                                  self.pg1.remote_ip4,
-                                  331, 441,
-                                  table_id=1)
-        udp_encap_2 = VppUdpEncap(self,
-                                  self.pg2.local_ip6,
-                                  self.pg2.remote_ip6,
-                                  332, 442,
-                                  table_id=2)
-        udp_encap_3 = VppUdpEncap(self,
-                                  self.pg3.local_ip6,
-                                  self.pg3.remote_ip6,
-                                  333, 443,
-                                  table_id=3)
-        udp_encap_4 = VppUdpEncap(self,
-                                  self.pg0.local_ip4,
-                                  self.pg0.remote_ip4,
-                                  334, 444)
+        udp_encap_0 = VppUdpEncap(
+            self, self.pg0.local_ip4, self.pg0.remote_ip4, 330, 440
+        )
+        udp_encap_1 = VppUdpEncap(
+            self, self.pg1.local_ip4, self.pg1.remote_ip4, 331, 441, table_id=1
+        )
+        udp_encap_2 = VppUdpEncap(
+            self, self.pg2.local_ip6, self.pg2.remote_ip6, 332, 442, table_id=2
+        )
+        udp_encap_3 = VppUdpEncap(
+            self, self.pg3.local_ip6, self.pg3.remote_ip6, 333, 443, table_id=3
+        )
+        udp_encap_4 = VppUdpEncap(
+            self, self.pg0.local_ip4, self.pg0.remote_ip4, 334, 444
+        )
         udp_encap_0.add_vpp_config()
         udp_encap_1.add_vpp_config()
         udp_encap_2.add_vpp_config()
         udp_encap_0.add_vpp_config()
         udp_encap_1.add_vpp_config()
         udp_encap_2.add_vpp_config()
@@ -150,44 +149,79 @@ class TestUdpEncap(VppTestCase):
         # Routes via each UDP encap object - all combinations of v4 and v6.
         #
         route_4o4 = VppIpRoute(
         # Routes via each UDP encap object - all combinations of v4 and v6.
         #
         route_4o4 = VppIpRoute(
-            self, "1.1.0.1", 24,
-            [VppRoutePath("0.0.0.0",
-                          0xFFFFFFFF,
-                          type=FibPathType.FIB_PATH_TYPE_UDP_ENCAP,
-                          next_hop_id=udp_encap_0.id,
-                          proto=FibPathProto.FIB_PATH_NH_PROTO_IP4)],
-            table_id=1)
+            self,
+            "1.1.0.1",
+            24,
+            [
+                VppRoutePath(
+                    "0.0.0.0",
+                    0xFFFFFFFF,
+                    type=FibPathType.FIB_PATH_TYPE_UDP_ENCAP,
+                    next_hop_id=udp_encap_0.id,
+                    proto=FibPathProto.FIB_PATH_NH_PROTO_IP4,
+                )
+            ],
+            table_id=1,
+        )
         # specific route to match encap4, to test encap of 2 packets using 2
         # different encap
         route_4o4_2 = VppIpRoute(
         # specific route to match encap4, to test encap of 2 packets using 2
         # different encap
         route_4o4_2 = VppIpRoute(
-            self, "1.1.0.2", 32,
-            [VppRoutePath("0.0.0.0",
-                          0xFFFFFFFF,
-                          type=FibPathType.FIB_PATH_TYPE_UDP_ENCAP,
-                          next_hop_id=udp_encap_4.id,
-                          proto=FibPathProto.FIB_PATH_NH_PROTO_IP4)],
-            table_id=1)
+            self,
+            "1.1.0.2",
+            32,
+            [
+                VppRoutePath(
+                    "0.0.0.0",
+                    0xFFFFFFFF,
+                    type=FibPathType.FIB_PATH_TYPE_UDP_ENCAP,
+                    next_hop_id=udp_encap_4.id,
+                    proto=FibPathProto.FIB_PATH_NH_PROTO_IP4,
+                )
+            ],
+            table_id=1,
+        )
         route_4o6 = VppIpRoute(
         route_4o6 = VppIpRoute(
-            self, "1.1.2.1", 32,
-            [VppRoutePath("0.0.0.0",
-                          0xFFFFFFFF,
-                          type=FibPathType.FIB_PATH_TYPE_UDP_ENCAP,
-                          next_hop_id=udp_encap_2.id,
-                          proto=FibPathProto.FIB_PATH_NH_PROTO_IP4)])
+            self,
+            "1.1.2.1",
+            32,
+            [
+                VppRoutePath(
+                    "0.0.0.0",
+                    0xFFFFFFFF,
+                    type=FibPathType.FIB_PATH_TYPE_UDP_ENCAP,
+                    next_hop_id=udp_encap_2.id,
+                    proto=FibPathProto.FIB_PATH_NH_PROTO_IP4,
+                )
+            ],
+        )
         route_6o4 = VppIpRoute(
         route_6o4 = VppIpRoute(
-            self, "2001::1", 128,
-            [VppRoutePath("0.0.0.0",
-                          0xFFFFFFFF,
-                          type=FibPathType.FIB_PATH_TYPE_UDP_ENCAP,
-                          next_hop_id=udp_encap_1.id,
-                          proto=FibPathProto.FIB_PATH_NH_PROTO_IP6)])
+            self,
+            "2001::1",
+            128,
+            [
+                VppRoutePath(
+                    "0.0.0.0",
+                    0xFFFFFFFF,
+                    type=FibPathType.FIB_PATH_TYPE_UDP_ENCAP,
+                    next_hop_id=udp_encap_1.id,
+                    proto=FibPathProto.FIB_PATH_NH_PROTO_IP6,
+                )
+            ],
+        )
         route_6o6 = VppIpRoute(
         route_6o6 = VppIpRoute(
-            self, "2001::3", 128,
-            [VppRoutePath("0.0.0.0",
-                          0xFFFFFFFF,
-                          type=FibPathType.FIB_PATH_TYPE_UDP_ENCAP,
-                          next_hop_id=udp_encap_3.id,
-                          proto=FibPathProto.FIB_PATH_NH_PROTO_IP6)])
+            self,
+            "2001::3",
+            128,
+            [
+                VppRoutePath(
+                    "0.0.0.0",
+                    0xFFFFFFFF,
+                    type=FibPathType.FIB_PATH_TYPE_UDP_ENCAP,
+                    next_hop_id=udp_encap_3.id,
+                    proto=FibPathProto.FIB_PATH_NH_PROTO_IP6,
+                )
+            ],
+        )
         route_4o6.add_vpp_config()
         route_6o6.add_vpp_config()
         route_6o4.add_vpp_config()
         route_4o6.add_vpp_config()
         route_6o6.add_vpp_config()
         route_6o4.add_vpp_config()
@@ -200,104 +234,117 @@ class TestUdpEncap(VppTestCase):
         # the packet vector so that we encap 2 packets with different udp
         # encap object at the same time
         #
         # the packet vector so that we encap 2 packets with different udp
         # encap object at the same time
         #
-        p_4o4 = (Ether(src=self.pg1.remote_mac,
-                       dst=self.pg1.local_mac) /
-                 IP(src="2.2.2.2", dst="1.1.0.1") /
-                 UDP(sport=1234, dport=1234) /
-                 Raw(b'\xa5' * 100))
-        p_4o4_2 = (Ether(src=self.pg1.remote_mac,
-                         dst=self.pg1.local_mac) /
-                   IP(src="2.2.2.2", dst="1.1.0.2") /
-                   UDP(sport=1234, dport=1234) /
-                   Raw(b'\xa5' * 100))
+        p_4o4 = (
+            Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
+            / IP(src="2.2.2.2", dst="1.1.0.1")
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
+        p_4o4_2 = (
+            Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
+            / IP(src="2.2.2.2", dst="1.1.0.2")
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
         rx = self.send_and_expect(
         rx = self.send_and_expect(
-            self.pg1, p_4o4_2 * 1 + p_4o4 * (NUM_PKTS - 1), self.pg0)
+            self.pg1, p_4o4_2 * 1 + p_4o4 * (NUM_PKTS - 1), self.pg0
+        )
         # checking encap4 magic packet
         p = rx.pop(0)
         self.validate_outer4(p, udp_encap_4)
         p = IP(p["UDP"].payload.load)
         self.validate_inner4(p, p_4o4_2)
         # checking encap4 magic packet
         p = rx.pop(0)
         self.validate_outer4(p, udp_encap_4)
         p = IP(p["UDP"].payload.load)
         self.validate_inner4(p, p_4o4_2)
-        self.assertEqual(udp_encap_4.get_stats()['packets'], 1)
+        self.assertEqual(udp_encap_4.get_stats()["packets"], 1)
         # checking remaining packets for encap0
         for p in rx:
             self.validate_outer4(p, udp_encap_0)
             p = IP(p["UDP"].payload.load)
             self.validate_inner4(p, p_4o4)
         # checking remaining packets for encap0
         for p in rx:
             self.validate_outer4(p, udp_encap_0)
             p = IP(p["UDP"].payload.load)
             self.validate_inner4(p, p_4o4)
-        self.assertEqual(udp_encap_0.get_stats()['packets'], NUM_PKTS - 1)
+        self.assertEqual(udp_encap_0.get_stats()["packets"], NUM_PKTS - 1)
 
         #
         # 4o6 encap
         #
 
         #
         # 4o6 encap
         #
-        p_4o6 = (Ether(src=self.pg0.remote_mac,
-                       dst=self.pg0.local_mac) /
-                 IP(src="2.2.2.2", dst="1.1.2.1") /
-                 UDP(sport=1234, dport=1234) /
-                 Raw(b'\xa5' * 100))
-        rx = self.send_and_expect(self.pg0, p_4o6*NUM_PKTS, self.pg2)
+        p_4o6 = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src="2.2.2.2", dst="1.1.2.1")
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
+        rx = self.send_and_expect(self.pg0, p_4o6 * NUM_PKTS, self.pg2)
         for p in rx:
             self.validate_outer6(p, udp_encap_2)
             p = IP(p["UDP"].payload.load)
             self.validate_inner4(p, p_4o6)
         for p in rx:
             self.validate_outer6(p, udp_encap_2)
             p = IP(p["UDP"].payload.load)
             self.validate_inner4(p, p_4o6)
-        self.assertEqual(udp_encap_2.get_stats()['packets'], NUM_PKTS)
+        self.assertEqual(udp_encap_2.get_stats()["packets"], NUM_PKTS)
 
         #
         # 6o4 encap
         #
 
         #
         # 6o4 encap
         #
-        p_6o4 = (Ether(src=self.pg0.remote_mac,
-                       dst=self.pg0.local_mac) /
-                 IPv6(src="2001::100", dst="2001::1") /
-                 UDP(sport=1234, dport=1234) /
-                 Raw(b'\xa5' * 100))
-        rx = self.send_and_expect(self.pg0, p_6o4*NUM_PKTS, self.pg1)
+        p_6o4 = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IPv6(src="2001::100", dst="2001::1")
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
+        rx = self.send_and_expect(self.pg0, p_6o4 * NUM_PKTS, self.pg1)
         for p in rx:
             self.validate_outer4(p, udp_encap_1)
             p = IPv6(p["UDP"].payload.load)
             self.validate_inner6(p, p_6o4)
         for p in rx:
             self.validate_outer4(p, udp_encap_1)
             p = IPv6(p["UDP"].payload.load)
             self.validate_inner6(p, p_6o4)
-        self.assertEqual(udp_encap_1.get_stats()['packets'], NUM_PKTS)
+        self.assertEqual(udp_encap_1.get_stats()["packets"], NUM_PKTS)
 
         #
         # 6o6 encap
         #
 
         #
         # 6o6 encap
         #
-        p_6o6 = (Ether(src=self.pg0.remote_mac,
-                       dst=self.pg0.local_mac) /
-                 IPv6(src="2001::100", dst="2001::3") /
-                 UDP(sport=1234, dport=1234) /
-                 Raw(b'\xa5' * 100))
-        rx = self.send_and_expect(self.pg0, p_6o6*NUM_PKTS, self.pg3)
+        p_6o6 = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IPv6(src="2001::100", dst="2001::3")
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
+        rx = self.send_and_expect(self.pg0, p_6o6 * NUM_PKTS, self.pg3)
         for p in rx:
             self.validate_outer6(p, udp_encap_3)
             p = IPv6(p["UDP"].payload.load)
             self.validate_inner6(p, p_6o6)
         for p in rx:
             self.validate_outer6(p, udp_encap_3)
             p = IPv6(p["UDP"].payload.load)
             self.validate_inner6(p, p_6o6)
-        self.assertEqual(udp_encap_3.get_stats()['packets'], NUM_PKTS)
+        self.assertEqual(udp_encap_3.get_stats()["packets"], NUM_PKTS)
 
         #
         # A route with an output label
         # the TTL of the inner packet is decremented on LSP ingress
         #
         route_4oMPLSo4 = VppIpRoute(
 
         #
         # A route with an output label
         # the TTL of the inner packet is decremented on LSP ingress
         #
         route_4oMPLSo4 = VppIpRoute(
-            self, "1.1.2.22", 32,
-            [VppRoutePath("0.0.0.0",
-                          0xFFFFFFFF,
-                          type=FibPathType.FIB_PATH_TYPE_UDP_ENCAP,
-                          next_hop_id=1,
-                          labels=[VppMplsLabel(66)])])
+            self,
+            "1.1.2.22",
+            32,
+            [
+                VppRoutePath(
+                    "0.0.0.0",
+                    0xFFFFFFFF,
+                    type=FibPathType.FIB_PATH_TYPE_UDP_ENCAP,
+                    next_hop_id=1,
+                    labels=[VppMplsLabel(66)],
+                )
+            ],
+        )
         route_4oMPLSo4.add_vpp_config()
 
         route_4oMPLSo4.add_vpp_config()
 
-        p_4omo4 = (Ether(src=self.pg0.remote_mac,
-                         dst=self.pg0.local_mac) /
-                   IP(src="2.2.2.2", dst="1.1.2.22") /
-                   UDP(sport=1234, dport=1234) /
-                   Raw(b'\xa5' * 100))
-        rx = self.send_and_expect(self.pg0, p_4omo4*NUM_PKTS, self.pg1)
+        p_4omo4 = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src="2.2.2.2", dst="1.1.2.22")
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        )
+        rx = self.send_and_expect(self.pg0, p_4omo4 * NUM_PKTS, self.pg1)
         for p in rx:
             self.validate_outer4(p, udp_encap_1)
             p = MPLS(p["UDP"].payload.load)
             self.validate_inner4(p, p_4omo4, ttl=63)
         for p in rx:
             self.validate_outer4(p, udp_encap_1)
             p = MPLS(p["UDP"].payload.load)
             self.validate_inner4(p, p_4omo4, ttl=63)
-        self.assertEqual(udp_encap_1.get_stats()['packets'], 2*NUM_PKTS)
+        self.assertEqual(udp_encap_1.get_stats()["packets"], 2 * NUM_PKTS)
 
     def test_udp_decap(self):
 
     def test_udp_decap(self):
-        """ UDP Decap test
-        """
+        """UDP Decap test"""
         #
         # construct a UDP decap object for each type of protocol
         #
         #
         # construct a UDP decap object for each type of protocol
         #
@@ -323,19 +370,24 @@ class TestUdpEncap(VppTestCase):
         # Routes via the corresponding pg after the UDP decap
         #
         route_4 = VppIpRoute(
         # Routes via the corresponding pg after the UDP decap
         #
         route_4 = VppIpRoute(
-            self, "1.1.1.1", 32,
+            self,
+            "1.1.1.1",
+            32,
             [VppRoutePath("0.0.0.0", self.pg0.sw_if_index)],
             [VppRoutePath("0.0.0.0", self.pg0.sw_if_index)],
-            table_id=0)
+            table_id=0,
+        )
 
         route_6 = VppIpRoute(
 
         route_6 = VppIpRoute(
-            self, "2001::1", 128,
-            [VppRoutePath("::", self.pg1.sw_if_index)],
-            table_id=1)
+            self, "2001::1", 128, [VppRoutePath("::", self.pg1.sw_if_index)], table_id=1
+        )
 
         route_mo4 = VppIpRoute(
 
         route_mo4 = VppIpRoute(
-            self, "3.3.3.3", 32,
+            self,
+            "3.3.3.3",
+            32,
             [VppRoutePath("0.0.0.0", self.pg2.sw_if_index)],
             [VppRoutePath("0.0.0.0", self.pg2.sw_if_index)],
-            table_id=2)
+            table_id=2,
+        )
 
         route_4.add_vpp_config()
         route_6.add_vpp_config()
 
         route_4.add_vpp_config()
         route_6.add_vpp_config()
@@ -344,18 +396,9 @@ class TestUdpEncap(VppTestCase):
         #
         # Adding neighbors to route the packets
         #
         #
         # Adding neighbors to route the packets
         #
-        n_4 = VppNeighbor(self,
-                          self.pg0.sw_if_index,
-                          "00:11:22:33:44:55",
-                          "1.1.1.1")
-        n_6 = VppNeighbor(self,
-                          self.pg1.sw_if_index,
-                          "11:22:33:44:55:66",
-                          "2001::1")
-        n_mo4 = VppNeighbor(self,
-                            self.pg2.sw_if_index,
-                            "22:33:44:55:66:77",
-                            "3.3.3.3")
+        n_4 = VppNeighbor(self, self.pg0.sw_if_index, "00:11:22:33:44:55", "1.1.1.1")
+        n_6 = VppNeighbor(self, self.pg1.sw_if_index, "11:22:33:44:55:66", "2001::1")
+        n_mo4 = VppNeighbor(self, self.pg2.sw_if_index, "22:33:44:55:66:77", "3.3.3.3")
 
         n_4.add_vpp_config()
         n_6.add_vpp_config()
 
         n_4.add_vpp_config()
         n_6.add_vpp_config()
@@ -367,25 +410,33 @@ class TestUdpEncap(VppTestCase):
         mpls_table = VppMplsTable(self, 0)
         mpls_table.add_vpp_config()
         mpls_route = VppMplsRoute(
         mpls_table = VppMplsTable(self, 0)
         mpls_table.add_vpp_config()
         mpls_route = VppMplsRoute(
-            self, 77, 1,
-            [VppRoutePath("0.0.0.0",
-                          0xFFFFFFFF,
-                          nh_table_id=2,
-                          proto=FibPathProto.FIB_PATH_NH_PROTO_IP4)])
+            self,
+            77,
+            1,
+            [
+                VppRoutePath(
+                    "0.0.0.0",
+                    0xFFFFFFFF,
+                    nh_table_id=2,
+                    proto=FibPathProto.FIB_PATH_NH_PROTO_IP4,
+                )
+            ],
+        )
         mpls_route.add_vpp_config()
 
         #
         # UDP over ipv4 decap
         #
         mpls_route.add_vpp_config()
 
         #
         # UDP over ipv4 decap
         #
-        p_4 = (Ether(src=self.pg0.remote_mac,
-                     dst=self.pg0.local_mac) /
-               IP(src=self.pg0.remote_ip4, dst=self.pg0.local_ip4) /
-               UDP(sport=1111, dport=220) /
-               IP(src="2.2.2.2", dst="1.1.1.1") /
-               UDP(sport=1234, dport=4321) /
-               Raw(b'\xa5' * 100))
-
-        rx = self.send_and_expect(self.pg0, p_4*NUM_PKTS, self.pg0)
+        p_4 = (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg0.local_ip4)
+            / UDP(sport=1111, dport=220)
+            / IP(src="2.2.2.2", dst="1.1.1.1")
+            / UDP(sport=1234, dport=4321)
+            / Raw(b"\xa5" * 100)
+        )
+
+        rx = self.send_and_expect(self.pg0, p_4 * NUM_PKTS, self.pg0)
         p_4 = IP(p_4["UDP"].payload)
         for p in rx:
             p = IP(p["Ether"].payload)
         p_4 = IP(p_4["UDP"].payload)
         for p in rx:
             p = IP(p["Ether"].payload)
@@ -394,15 +445,16 @@ class TestUdpEncap(VppTestCase):
         #
         # UDP over ipv6 decap
         #
         #
         # UDP over ipv6 decap
         #
-        p_6 = (Ether(src=self.pg1.remote_mac,
-                     dst=self.pg1.local_mac) /
-               IPv6(src=self.pg1.remote_ip6, dst=self.pg1.local_ip6) /
-               UDP(sport=2222, dport=221) /
-               IPv6(src="2001::100", dst="2001::1") /
-               UDP(sport=1234, dport=4321) /
-               Raw(b'\xa5' * 100))
-
-        rx = self.send_and_expect(self.pg1, p_6*NUM_PKTS, self.pg1)
+        p_6 = (
+            Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac)
+            / IPv6(src=self.pg1.remote_ip6, dst=self.pg1.local_ip6)
+            / UDP(sport=2222, dport=221)
+            / IPv6(src="2001::100", dst="2001::1")
+            / UDP(sport=1234, dport=4321)
+            / Raw(b"\xa5" * 100)
+        )
+
+        rx = self.send_and_expect(self.pg1, p_6 * NUM_PKTS, self.pg1)
         p_6 = IPv6(p_6["UDP"].payload)
         p = IPv6(rx[0]["Ether"].payload)
         for p in rx:
         p_6 = IPv6(p_6["UDP"].payload)
         p = IPv6(rx[0]["Ether"].payload)
         for p in rx:
@@ -412,17 +464,18 @@ class TestUdpEncap(VppTestCase):
         #
         # UDP over mpls decap
         #
         #
         # UDP over mpls decap
         #
-        p_mo4 = (Ether(src=self.pg2.remote_mac,
-                       dst=self.pg2.local_mac) /
-                 IP(src=self.pg2.remote_ip4, dst=self.pg2.local_ip4) /
-                 UDP(sport=3333, dport=222) /
-                 MPLS(label=77, ttl=1) /
-                 IP(src="4.4.4.4", dst="3.3.3.3") /
-                 UDP(sport=1234, dport=4321) /
-                 Raw(b'\xa5' * 100))
+        p_mo4 = (
+            Ether(src=self.pg2.remote_mac, dst=self.pg2.local_mac)
+            / IP(src=self.pg2.remote_ip4, dst=self.pg2.local_ip4)
+            / UDP(sport=3333, dport=222)
+            / MPLS(label=77, ttl=1)
+            / IP(src="4.4.4.4", dst="3.3.3.3")
+            / UDP(sport=1234, dport=4321)
+            / Raw(b"\xa5" * 100)
+        )
 
         self.pg2.enable_mpls()
 
         self.pg2.enable_mpls()
-        rx = self.send_and_expect(self.pg2, p_mo4*NUM_PKTS, self.pg2)
+        rx = self.send_and_expect(self.pg2, p_mo4 * NUM_PKTS, self.pg2)
         self.pg2.disable_mpls()
         p_mo4 = IP(MPLS(p_mo4["UDP"].payload).payload)
         for p in rx:
         self.pg2.disable_mpls()
         p_mo4 = IP(MPLS(p_mo4["UDP"].payload).payload)
         for p in rx:
@@ -432,7 +485,7 @@ class TestUdpEncap(VppTestCase):
 
 @tag_fixme_vpp_workers
 class TestUDP(VppTestCase):
 
 @tag_fixme_vpp_workers
 class TestUDP(VppTestCase):
-    """ UDP Test Case """
+    """UDP Test Case"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -461,10 +514,12 @@ class TestUDP(VppTestCase):
             table_id += 1
 
         # Configure namespaces
             table_id += 1
 
         # Configure namespaces
-        self.vapi.app_namespace_add_del(namespace_id="0",
-                                        sw_if_index=self.loop0.sw_if_index)
-        self.vapi.app_namespace_add_del(namespace_id="1",
-                                        sw_if_index=self.loop1.sw_if_index)
+        self.vapi.app_namespace_add_del(
+            namespace_id="0", sw_if_index=self.loop0.sw_if_index
+        )
+        self.vapi.app_namespace_add_del(
+            namespace_id="1", sw_if_index=self.loop1.sw_if_index
+        )
 
     def tearDown(self):
         for i in self.lo_interfaces:
 
     def tearDown(self):
         for i in self.lo_interfaces:
@@ -475,31 +530,40 @@ class TestUDP(VppTestCase):
         super(TestUDP, self).tearDown()
 
     def test_udp_transfer(self):
         super(TestUDP, self).tearDown()
 
     def test_udp_transfer(self):
-        """ UDP echo client/server transfer """
+        """UDP echo client/server transfer"""
 
         # Add inter-table routes
 
         # Add inter-table routes
-        ip_t01 = VppIpRoute(self, self.loop1.local_ip4, 32,
-                            [VppRoutePath("0.0.0.0",
-                                          0xffffffff,
-                                          nh_table_id=1)])
-        ip_t10 = VppIpRoute(self, self.loop0.local_ip4, 32,
-                            [VppRoutePath("0.0.0.0",
-                                          0xffffffff,
-                                          nh_table_id=0)], table_id=1)
+        ip_t01 = VppIpRoute(
+            self,
+            self.loop1.local_ip4,
+            32,
+            [VppRoutePath("0.0.0.0", 0xFFFFFFFF, nh_table_id=1)],
+        )
+        ip_t10 = VppIpRoute(
+            self,
+            self.loop0.local_ip4,
+            32,
+            [VppRoutePath("0.0.0.0", 0xFFFFFFFF, nh_table_id=0)],
+            table_id=1,
+        )
         ip_t01.add_vpp_config()
         ip_t10.add_vpp_config()
 
         # Start builtin server and client
         uri = "udp://" + self.loop0.local_ip4 + "/1234"
         ip_t01.add_vpp_config()
         ip_t10.add_vpp_config()
 
         # Start builtin server and client
         uri = "udp://" + self.loop0.local_ip4 + "/1234"
-        error = self.vapi.cli("test echo server appns 0 fifo-size 4 no-echo" +
-                              "uri " + uri)
+        error = self.vapi.cli(
+            "test echo server appns 0 fifo-size 4 no-echo" + "uri " + uri
+        )
         if error:
             self.logger.critical(error)
             self.assertNotIn("failed", error)
 
         if error:
             self.logger.critical(error)
             self.assertNotIn("failed", error)
 
-        error = self.vapi.cli("test echo client mbytes 10 appns 1 " +
-                              "fifo-size 4 no-output test-bytes " +
-                              "syn-timeout 2 no-return uri " + uri)
+        error = self.vapi.cli(
+            "test echo client mbytes 10 appns 1 "
+            + "fifo-size 4 no-output test-bytes "
+            + "syn-timeout 2 no-return uri "
+            + uri
+        )
         if error:
             self.logger.critical(error)
             self.assertNotIn("failed", error)
         if error:
             self.logger.critical(error)
             self.assertNotIn("failed", error)
@@ -511,5 +575,5 @@ class TestUDP(VppTestCase):
         ip_t10.remove_vpp_config()
 
 
         ip_t10.remove_vpp_config()
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index 8f4e563..e0dc121 100644 (file)
@@ -15,7 +15,7 @@ N_PKTS = 63
 
 
 class TestURPF(VppTestCase):
 
 
 class TestURPF(VppTestCase):
-    """ Unicast Reverse Path Forwarding Test Case """
+    """Unicast Reverse Path Forwarding Test Case"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -47,26 +47,27 @@ class TestURPF(VppTestCase):
         super(TestURPF, self).tearDown()
 
     def test_urpf4(self):
         super(TestURPF, self).tearDown()
 
     def test_urpf4(self):
-        """ uRPF IP4 """
+        """uRPF IP4"""
 
         e = VppEnum
 
         e = VppEnum
-        p_spoof_loose = (Ether(dst=self.pg0.local_mac,
-                               src=self.pg0.remote_mac) /
-                         IP(src="3.3.3.3", dst=self.pg1.remote_ip4) /
-                         UDP(sport=1234, dport=1234) /
-                         Raw(b'\xa5' * 100)) * N_PKTS
-        p_spoof_strict = (Ether(dst=self.pg0.local_mac,
-                                src=self.pg0.remote_mac) /
-                          IP(src=self.pg2.remote_ip4,
-                             dst=self.pg1.remote_ip4) /
-                          UDP(sport=1234, dport=1234) /
-                          Raw(b'\xa5' * 100)) * N_PKTS
-        p_good = (Ether(dst=self.pg0.local_mac,
-                        src=self.pg0.remote_mac) /
-                  IP(src=self.pg0.remote_ip4,
-                     dst=self.pg1.remote_ip4) /
-                  UDP(sport=1234, dport=1234) /
-                  Raw(b'\xa5' * 100)) * N_PKTS
+        p_spoof_loose = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(src="3.3.3.3", dst=self.pg1.remote_ip4)
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        ) * N_PKTS
+        p_spoof_strict = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(src=self.pg2.remote_ip4, dst=self.pg1.remote_ip4)
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        ) * N_PKTS
+        p_good = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg1.remote_ip4)
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        ) * N_PKTS
 
         #
         # before adding the uRPF, ensure all packets are forwarded
 
         #
         # before adding the uRPF, ensure all packets are forwarded
@@ -78,10 +79,12 @@ class TestURPF(VppTestCase):
         #
         # apply loose uRPF check on pg0 rx
         #
         #
         # apply loose uRPF check on pg0 rx
         #
-        self.vapi.urpf_update(is_input=True,
-                              mode=e.vl_api_urpf_mode_t.URPF_API_MODE_LOOSE,
-                              af=e.vl_api_address_family_t.ADDRESS_IP4,
-                              sw_if_index=self.pg0.sw_if_index)
+        self.vapi.urpf_update(
+            is_input=True,
+            mode=e.vl_api_urpf_mode_t.URPF_API_MODE_LOOSE,
+            af=e.vl_api_address_family_t.ADDRESS_IP4,
+            sw_if_index=self.pg0.sw_if_index,
+        )
 
         # good packets still pass
         self.send_and_expect(self.pg0, p_good, self.pg1)
 
         # good packets still pass
         self.send_and_expect(self.pg0, p_good, self.pg1)
@@ -90,16 +93,17 @@ class TestURPF(VppTestCase):
         # packets from address to which there is no route are dropped
         self.send_and_assert_no_replies(self.pg0, p_spoof_loose)
 
         # packets from address to which there is no route are dropped
         self.send_and_assert_no_replies(self.pg0, p_spoof_loose)
 
-        self.assert_error_counter_equal("/err/ip4-rx-urpf-loose/uRPF Drop",
-                                        N_PKTS)
+        self.assert_error_counter_equal("/err/ip4-rx-urpf-loose/uRPF Drop", N_PKTS)
 
         #
         # crank it up to strict mode
         #
 
         #
         # crank it up to strict mode
         #
-        self.vapi.urpf_update(is_input=True,
-                              mode=e.vl_api_urpf_mode_t.URPF_API_MODE_STRICT,
-                              af=e.vl_api_address_family_t.ADDRESS_IP4,
-                              sw_if_index=self.pg0.sw_if_index)
+        self.vapi.urpf_update(
+            is_input=True,
+            mode=e.vl_api_urpf_mode_t.URPF_API_MODE_STRICT,
+            af=e.vl_api_address_family_t.ADDRESS_IP4,
+            sw_if_index=self.pg0.sw_if_index,
+        )
 
         # good packets still pass
         self.send_and_expect(self.pg0, p_good, self.pg1)
 
         # good packets still pass
         self.send_and_expect(self.pg0, p_good, self.pg1)
@@ -107,16 +111,17 @@ class TestURPF(VppTestCase):
         self.send_and_assert_no_replies(self.pg0, p_spoof_strict)
         self.send_and_assert_no_replies(self.pg0, p_spoof_loose)
 
         self.send_and_assert_no_replies(self.pg0, p_spoof_strict)
         self.send_and_assert_no_replies(self.pg0, p_spoof_loose)
 
-        self.assert_error_counter_equal("/err/ip4-rx-urpf-strict/uRPF Drop",
-                                        2 * N_PKTS)
+        self.assert_error_counter_equal("/err/ip4-rx-urpf-strict/uRPF Drop", 2 * N_PKTS)
 
         #
         # disable uRPF, all traffic should pass
         #
 
         #
         # disable uRPF, all traffic should pass
         #
-        self.vapi.urpf_update(is_input=True,
-                              mode=e.vl_api_urpf_mode_t.URPF_API_MODE_OFF,
-                              af=e.vl_api_address_family_t.ADDRESS_IP4,
-                              sw_if_index=self.pg0.sw_if_index)
+        self.vapi.urpf_update(
+            is_input=True,
+            mode=e.vl_api_urpf_mode_t.URPF_API_MODE_OFF,
+            af=e.vl_api_address_family_t.ADDRESS_IP4,
+            sw_if_index=self.pg0.sw_if_index,
+        )
 
         self.send_and_expect(self.pg0, p_good, self.pg1)
         self.send_and_expect(self.pg0, p_spoof_strict, self.pg1)
 
         self.send_and_expect(self.pg0, p_good, self.pg1)
         self.send_and_expect(self.pg0, p_spoof_strict, self.pg1)
@@ -129,22 +134,25 @@ class TestURPF(VppTestCase):
         #  for strict they should not be forwarded if they would be
         #  forwarded thru that interface.
         #
         #  for strict they should not be forwarded if they would be
         #  forwarded thru that interface.
         #
-        self.vapi.urpf_update(is_input=False,
-                              mode=e.vl_api_urpf_mode_t.URPF_API_MODE_LOOSE,
-                              af=e.vl_api_address_family_t.ADDRESS_IP4,
-                              sw_if_index=self.pg1.sw_if_index)
+        self.vapi.urpf_update(
+            is_input=False,
+            mode=e.vl_api_urpf_mode_t.URPF_API_MODE_LOOSE,
+            af=e.vl_api_address_family_t.ADDRESS_IP4,
+            sw_if_index=self.pg1.sw_if_index,
+        )
 
         self.send_and_expect(self.pg0, p_good, self.pg1)
         self.send_and_expect(self.pg0, p_spoof_strict, self.pg1)
         self.send_and_assert_no_replies(self.pg0, p_spoof_loose)
 
 
         self.send_and_expect(self.pg0, p_good, self.pg1)
         self.send_and_expect(self.pg0, p_spoof_strict, self.pg1)
         self.send_and_assert_no_replies(self.pg0, p_spoof_loose)
 
-        self.assert_error_counter_equal("/err/ip4-tx-urpf-loose/uRPF Drop",
-                                        N_PKTS)
+        self.assert_error_counter_equal("/err/ip4-tx-urpf-loose/uRPF Drop", N_PKTS)
 
 
-        self.vapi.urpf_update(is_input=False,
-                              mode=e.vl_api_urpf_mode_t.URPF_API_MODE_STRICT,
-                              af=e.vl_api_address_family_t.ADDRESS_IP4,
-                              sw_if_index=self.pg1.sw_if_index)
+        self.vapi.urpf_update(
+            is_input=False,
+            mode=e.vl_api_urpf_mode_t.URPF_API_MODE_STRICT,
+            af=e.vl_api_address_family_t.ADDRESS_IP4,
+            sw_if_index=self.pg1.sw_if_index,
+        )
 
         self.send_and_expect(self.pg0, p_good, self.pg1)
         # the strict packet, from a peer is allowed, since it does
 
         self.send_and_expect(self.pg0, p_good, self.pg1)
         # the strict packet, from a peer is allowed, since it does
@@ -152,48 +160,49 @@ class TestURPF(VppTestCase):
         self.send_and_expect(self.pg0, p_spoof_strict, self.pg1)
         self.send_and_assert_no_replies(self.pg0, p_spoof_loose)
 
         self.send_and_expect(self.pg0, p_spoof_strict, self.pg1)
         self.send_and_assert_no_replies(self.pg0, p_spoof_loose)
 
-        self.assert_error_counter_equal("/err/ip4-tx-urpf-strict/uRPF Drop",
-                                        N_PKTS)
+        self.assert_error_counter_equal("/err/ip4-tx-urpf-strict/uRPF Drop", N_PKTS)
 
         # change the strict packet so that it would forward through pg1
 
         # change the strict packet so that it would forward through pg1
-        p_spoof_strict = (Ether(dst=self.pg0.local_mac,
-                                src=self.pg0.remote_mac) /
-                          IP(src=self.pg1.remote_ip4,
-                             dst=self.pg1.remote_ip4) /
-                          UDP(sport=1234, dport=1234) /
-                          Raw(b'\xa5' * 100)) * N_PKTS
+        p_spoof_strict = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(src=self.pg1.remote_ip4, dst=self.pg1.remote_ip4)
+            / UDP(sport=1234, dport=1234)
+            / Raw(b"\xa5" * 100)
+        ) * N_PKTS
 
         self.send_and_assert_no_replies(self.pg0, p_spoof_strict)
 
         self.send_and_assert_no_replies(self.pg0, p_spoof_strict)
-        self.assert_error_counter_equal("/err/ip4-tx-urpf-strict/uRPF Drop",
-                                        2 * N_PKTS)
+        self.assert_error_counter_equal("/err/ip4-tx-urpf-strict/uRPF Drop", 2 * N_PKTS)
 
         # cleanup
 
         # cleanup
-        self.vapi.urpf_update(is_input=False,
-                              mode=e.vl_api_urpf_mode_t.URPF_API_MODE_OFF,
-                              af=e.vl_api_address_family_t.ADDRESS_IP4,
-                              sw_if_index=self.pg1.sw_if_index)
+        self.vapi.urpf_update(
+            is_input=False,
+            mode=e.vl_api_urpf_mode_t.URPF_API_MODE_OFF,
+            af=e.vl_api_address_family_t.ADDRESS_IP4,
+            sw_if_index=self.pg1.sw_if_index,
+        )
 
     def test_urpf6(self):
 
     def test_urpf6(self):
-        """ uRPF IP6 """
+        """uRPF IP6"""
 
         e = VppEnum
 
         e = VppEnum
-        p_spoof_loose = (Ether(dst=self.pg0.local_mac,
-                               src=self.pg0.remote_mac) /
-                         IPv6(src="3::3", dst=self.pg1.remote_ip6) /
-                         UDP(sport=1236, dport=1236) /
-                         Raw(b'\xa5' * 100)) * N_PKTS
-        p_spoof_strict = (Ether(dst=self.pg0.local_mac,
-                                src=self.pg0.remote_mac) /
-                          IPv6(src=self.pg2.remote_ip6,
-                               dst=self.pg1.remote_ip6) /
-                          UDP(sport=1236, dport=1236) /
-                          Raw(b'\xa5' * 100)) * N_PKTS
-        p_good = (Ether(dst=self.pg0.local_mac,
-                        src=self.pg0.remote_mac) /
-                  IPv6(src=self.pg0.remote_ip6,
-                       dst=self.pg1.remote_ip6) /
-                  UDP(sport=1236, dport=1236) /
-                  Raw(b'\xa5' * 100)) * N_PKTS
+        p_spoof_loose = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IPv6(src="3::3", dst=self.pg1.remote_ip6)
+            / UDP(sport=1236, dport=1236)
+            / Raw(b"\xa5" * 100)
+        ) * N_PKTS
+        p_spoof_strict = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IPv6(src=self.pg2.remote_ip6, dst=self.pg1.remote_ip6)
+            / UDP(sport=1236, dport=1236)
+            / Raw(b"\xa5" * 100)
+        ) * N_PKTS
+        p_good = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IPv6(src=self.pg0.remote_ip6, dst=self.pg1.remote_ip6)
+            / UDP(sport=1236, dport=1236)
+            / Raw(b"\xa5" * 100)
+        ) * N_PKTS
 
         #
         # before adding the uRPF, ensure all packets are forwarded
 
         #
         # before adding the uRPF, ensure all packets are forwarded
@@ -205,10 +214,12 @@ class TestURPF(VppTestCase):
         #
         # apply loose uRPF check on pg0 rx
         #
         #
         # apply loose uRPF check on pg0 rx
         #
-        self.vapi.urpf_update(is_input=True,
-                              mode=e.vl_api_urpf_mode_t.URPF_API_MODE_LOOSE,
-                              af=e.vl_api_address_family_t.ADDRESS_IP6,
-                              sw_if_index=self.pg0.sw_if_index)
+        self.vapi.urpf_update(
+            is_input=True,
+            mode=e.vl_api_urpf_mode_t.URPF_API_MODE_LOOSE,
+            af=e.vl_api_address_family_t.ADDRESS_IP6,
+            sw_if_index=self.pg0.sw_if_index,
+        )
 
         # good packets still pass
         self.send_and_expect(self.pg0, p_good, self.pg1)
 
         # good packets still pass
         self.send_and_expect(self.pg0, p_good, self.pg1)
@@ -217,16 +228,17 @@ class TestURPF(VppTestCase):
         # packets from address to which there is no route are dropped
         self.send_and_assert_no_replies(self.pg0, p_spoof_loose)
 
         # packets from address to which there is no route are dropped
         self.send_and_assert_no_replies(self.pg0, p_spoof_loose)
 
-        self.assert_error_counter_equal("/err/ip6-rx-urpf-loose/uRPF Drop",
-                                        N_PKTS)
+        self.assert_error_counter_equal("/err/ip6-rx-urpf-loose/uRPF Drop", N_PKTS)
 
         #
         # crank it up to strict mode
         #
 
         #
         # crank it up to strict mode
         #
-        self.vapi.urpf_update(is_input=True,
-                              mode=e.vl_api_urpf_mode_t.URPF_API_MODE_STRICT,
-                              af=e.vl_api_address_family_t.ADDRESS_IP6,
-                              sw_if_index=self.pg0.sw_if_index)
+        self.vapi.urpf_update(
+            is_input=True,
+            mode=e.vl_api_urpf_mode_t.URPF_API_MODE_STRICT,
+            af=e.vl_api_address_family_t.ADDRESS_IP6,
+            sw_if_index=self.pg0.sw_if_index,
+        )
 
         # good packets still pass
         self.send_and_expect(self.pg0, p_good, self.pg1)
 
         # good packets still pass
         self.send_and_expect(self.pg0, p_good, self.pg1)
@@ -234,16 +246,17 @@ class TestURPF(VppTestCase):
         self.send_and_assert_no_replies(self.pg0, p_spoof_strict)
         self.send_and_assert_no_replies(self.pg0, p_spoof_loose)
 
         self.send_and_assert_no_replies(self.pg0, p_spoof_strict)
         self.send_and_assert_no_replies(self.pg0, p_spoof_loose)
 
-        self.assert_error_counter_equal("/err/ip6-rx-urpf-strict/uRPF Drop",
-                                        2 * N_PKTS)
+        self.assert_error_counter_equal("/err/ip6-rx-urpf-strict/uRPF Drop", 2 * N_PKTS)
 
         #
         # disable uRPF, all traffic should pass
         #
 
         #
         # disable uRPF, all traffic should pass
         #
-        self.vapi.urpf_update(is_input=True,
-                              mode=e.vl_api_urpf_mode_t.URPF_API_MODE_OFF,
-                              af=e.vl_api_address_family_t.ADDRESS_IP6,
-                              sw_if_index=self.pg0.sw_if_index)
+        self.vapi.urpf_update(
+            is_input=True,
+            mode=e.vl_api_urpf_mode_t.URPF_API_MODE_OFF,
+            af=e.vl_api_address_family_t.ADDRESS_IP6,
+            sw_if_index=self.pg0.sw_if_index,
+        )
 
         self.send_and_expect(self.pg0, p_good, self.pg1)
         self.send_and_expect(self.pg0, p_spoof_strict, self.pg1)
 
         self.send_and_expect(self.pg0, p_good, self.pg1)
         self.send_and_expect(self.pg0, p_spoof_strict, self.pg1)
@@ -256,22 +269,25 @@ class TestURPF(VppTestCase):
         #  for strict they should not be forwarded if they would be
         #  forwarded thru that interface.
         #
         #  for strict they should not be forwarded if they would be
         #  forwarded thru that interface.
         #
-        self.vapi.urpf_update(is_input=False,
-                              mode=e.vl_api_urpf_mode_t.URPF_API_MODE_LOOSE,
-                              af=e.vl_api_address_family_t.ADDRESS_IP6,
-                              sw_if_index=self.pg1.sw_if_index)
+        self.vapi.urpf_update(
+            is_input=False,
+            mode=e.vl_api_urpf_mode_t.URPF_API_MODE_LOOSE,
+            af=e.vl_api_address_family_t.ADDRESS_IP6,
+            sw_if_index=self.pg1.sw_if_index,
+        )
 
         self.send_and_expect(self.pg0, p_good, self.pg1)
         self.send_and_expect(self.pg0, p_spoof_strict, self.pg1)
         self.send_and_assert_no_replies(self.pg0, p_spoof_loose)
 
 
         self.send_and_expect(self.pg0, p_good, self.pg1)
         self.send_and_expect(self.pg0, p_spoof_strict, self.pg1)
         self.send_and_assert_no_replies(self.pg0, p_spoof_loose)
 
-        self.assert_error_counter_equal("/err/ip6-tx-urpf-loose/uRPF Drop",
-                                        N_PKTS)
+        self.assert_error_counter_equal("/err/ip6-tx-urpf-loose/uRPF Drop", N_PKTS)
 
 
-        self.vapi.urpf_update(is_input=False,
-                              mode=e.vl_api_urpf_mode_t.URPF_API_MODE_STRICT,
-                              af=e.vl_api_address_family_t.ADDRESS_IP6,
-                              sw_if_index=self.pg1.sw_if_index)
+        self.vapi.urpf_update(
+            is_input=False,
+            mode=e.vl_api_urpf_mode_t.URPF_API_MODE_STRICT,
+            af=e.vl_api_address_family_t.ADDRESS_IP6,
+            sw_if_index=self.pg1.sw_if_index,
+        )
 
         self.send_and_expect(self.pg0, p_good, self.pg1)
         # the strict packet, from a peer is allowed, since it does
 
         self.send_and_expect(self.pg0, p_good, self.pg1)
         # the strict packet, from a peer is allowed, since it does
@@ -279,27 +295,27 @@ class TestURPF(VppTestCase):
         self.send_and_expect(self.pg0, p_spoof_strict, self.pg1)
         self.send_and_assert_no_replies(self.pg0, p_spoof_loose)
 
         self.send_and_expect(self.pg0, p_spoof_strict, self.pg1)
         self.send_and_assert_no_replies(self.pg0, p_spoof_loose)
 
-        self.assert_error_counter_equal("/err/ip6-tx-urpf-strict/uRPF Drop",
-                                        N_PKTS)
+        self.assert_error_counter_equal("/err/ip6-tx-urpf-strict/uRPF Drop", N_PKTS)
 
         # change the strict packet so that it would forward through pg1
 
         # change the strict packet so that it would forward through pg1
-        p_spoof_strict = (Ether(dst=self.pg0.local_mac,
-                                src=self.pg0.remote_mac) /
-                          IPv6(src=self.pg1.remote_ip6,
-                               dst=self.pg1.remote_ip6) /
-                          UDP(sport=1236, dport=1236) /
-                          Raw(b'\xa5' * 100)) * N_PKTS
+        p_spoof_strict = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IPv6(src=self.pg1.remote_ip6, dst=self.pg1.remote_ip6)
+            / UDP(sport=1236, dport=1236)
+            / Raw(b"\xa5" * 100)
+        ) * N_PKTS
 
         self.send_and_assert_no_replies(self.pg0, p_spoof_strict)
 
         self.send_and_assert_no_replies(self.pg0, p_spoof_strict)
-        self.assert_error_counter_equal("/err/ip6-tx-urpf-strict/uRPF Drop",
-                                        2 * N_PKTS)
+        self.assert_error_counter_equal("/err/ip6-tx-urpf-strict/uRPF Drop", 2 * N_PKTS)
 
         # cleanup
 
         # cleanup
-        self.vapi.urpf_update(is_input=False,
-                              mode=e.vl_api_urpf_mode_t.URPF_API_MODE_OFF,
-                              af=e.vl_api_address_family_t.ADDRESS_IP6,
-                              sw_if_index=self.pg1.sw_if_index)
+        self.vapi.urpf_update(
+            is_input=False,
+            mode=e.vl_api_urpf_mode_t.URPF_API_MODE_OFF,
+            af=e.vl_api_address_family_t.ADDRESS_IP6,
+            sw_if_index=self.pg1.sw_if_index,
+        )
 
 
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index 3a61d64..52aeeb1 100644 (file)
@@ -6,17 +6,17 @@ from framework import VppTestRunner, CPUInterface
 from vpp_papi import mac_pton, mac_ntop
 
 
 from vpp_papi import mac_pton, mac_ntop
 
 
-class TestUtil (CPUInterface, unittest.TestCase):
-    """ Test framework utility tests """
+class TestUtil(CPUInterface, unittest.TestCase):
+    """Test framework utility tests"""
 
     @classmethod
     def is_tagged_run_solo(cls):
 
     @classmethod
     def is_tagged_run_solo(cls):
-        """ if the test case class is timing-sensitive - return true """
+        """if the test case class is timing-sensitive - return true"""
         return False
 
     @classmethod
     def has_tag(cls, tag):
         return False
 
     @classmethod
     def has_tag(cls, tag):
-        """ if the test case has a given tag - return true """
+        """if the test case has a given tag - return true"""
         try:
             return tag in cls.test_tags
         except AttributeError:
         try:
             return tag in cls.test_tags
         except AttributeError:
@@ -28,13 +28,13 @@ class TestUtil (CPUInterface, unittest.TestCase):
         return 0
 
     def test_mac_to_binary(self):
         return 0
 
     def test_mac_to_binary(self):
-        """ MAC to binary and back """
-        mac = 'aa:bb:cc:dd:ee:ff'
+        """MAC to binary and back"""
+        mac = "aa:bb:cc:dd:ee:ff"
         b = mac_pton(mac)
         mac2 = mac_ntop(b)
         self.assertEqual(type(mac), type(mac2))
         self.assertEqual(mac2, mac)
 
 
         b = mac_pton(mac)
         mac2 = mac_ntop(b)
         self.assertEqual(type(mac), type(mac2))
         self.assertEqual(mac2, mac)
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index 5a04abe..6817fae 100644 (file)
@@ -9,7 +9,7 @@ from framework import VppTestCase, VppTestRunner, Worker
 
 
 class VAPITestCase(VppTestCase):
 
 
 class VAPITestCase(VppTestCase):
-    """ VAPI test """
+    """VAPI test"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -20,10 +20,11 @@ class VAPITestCase(VppTestCase):
         super(VAPITestCase, cls).tearDownClass()
 
     def test_vapi_c(self):
         super(VAPITestCase, cls).tearDownClass()
 
     def test_vapi_c(self):
-        """ run C VAPI tests """
+        """run C VAPI tests"""
         executable = f"{config.vpp_build_dir}/vpp/bin/vapi_c_test"
         executable = f"{config.vpp_build_dir}/vpp/bin/vapi_c_test"
-        worker = Worker([executable, "vapi client",
-                         self.get_api_segment_prefix()], self.logger)
+        worker = Worker(
+            [executable, "vapi client", self.get_api_segment_prefix()], self.logger
+        )
         worker.start()
         timeout = 60
         worker.join(timeout)
         worker.start()
         timeout = 60
         worker.join(timeout)
@@ -32,23 +33,22 @@ class VAPITestCase(VppTestCase):
         if worker.result is None:
             try:
                 error = True
         if worker.result is None:
             try:
                 error = True
-                self.logger.error(
-                    "Timeout! Worker did not finish in %ss" % timeout)
+                self.logger.error("Timeout! Worker did not finish in %ss" % timeout)
                 os.killpg(os.getpgid(worker.process.pid), signal.SIGTERM)
                 worker.join()
             except:
                 self.logger.debug("Couldn't kill worker-spawned process")
                 raise
         if error:
                 os.killpg(os.getpgid(worker.process.pid), signal.SIGTERM)
                 worker.join()
             except:
                 self.logger.debug("Couldn't kill worker-spawned process")
                 raise
         if error:
-            raise Exception(
-                "Timeout! Worker did not finish in %ss" % timeout)
+            raise Exception("Timeout! Worker did not finish in %ss" % timeout)
         self.assert_equal(worker.result, 0, "Binary test return code")
 
     def test_vapi_cpp(self):
         self.assert_equal(worker.result, 0, "Binary test return code")
 
     def test_vapi_cpp(self):
-        """ run C++ VAPI tests """
+        """run C++ VAPI tests"""
         executable = f"{config.vpp_build_dir}/vpp/bin/vapi_cpp_test"
         executable = f"{config.vpp_build_dir}/vpp/bin/vapi_cpp_test"
-        worker = Worker([executable, "vapi client",
-                         self.get_api_segment_prefix()], self.logger)
+        worker = Worker(
+            [executable, "vapi client", self.get_api_segment_prefix()], self.logger
+        )
         worker.start()
         timeout = 120
         worker.join(timeout)
         worker.start()
         timeout = 120
         worker.join(timeout)
@@ -57,17 +57,15 @@ class VAPITestCase(VppTestCase):
         if worker.result is None:
             try:
                 error = True
         if worker.result is None:
             try:
                 error = True
-                self.logger.error(
-                    "Timeout! Worker did not finish in %ss" % timeout)
+                self.logger.error("Timeout! Worker did not finish in %ss" % timeout)
                 os.killpg(os.getpgid(worker.process.pid), signal.SIGTERM)
                 worker.join()
             except:
                 raise Exception("Couldn't kill worker-spawned process")
         if error:
                 os.killpg(os.getpgid(worker.process.pid), signal.SIGTERM)
                 worker.join()
             except:
                 raise Exception("Couldn't kill worker-spawned process")
         if error:
-            raise Exception(
-                "Timeout! Worker did not finish in %ss" % timeout)
+            raise Exception("Timeout! Worker did not finish in %ss" % timeout)
         self.assert_equal(worker.result, 0, "Binary test return code")
 
 
         self.assert_equal(worker.result, 0, "Binary test return code")
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index 3875114..bf139fe 100644 (file)
@@ -10,12 +10,12 @@ from config import config
 from framework import VppTestCase, VppTestRunner, Worker
 from vpp_ip_route import VppIpTable, VppIpRoute, VppRoutePath, FibPathProto
 
 from framework import VppTestCase, VppTestRunner, Worker
 from vpp_ip_route import VppIpTable, VppIpRoute, VppRoutePath, FibPathProto
 
-iperf3 = '/usr/bin/iperf3'
+iperf3 = "/usr/bin/iperf3"
 
 
 def have_app(app):
     try:
 
 
 def have_app(app):
     try:
-        subprocess.check_output([app, '-v'])
+        subprocess.check_output([app, "-v"])
     except (subprocess.CalledProcessError, OSError):
         return False
     return True
     except (subprocess.CalledProcessError, OSError):
         return False
     return True
@@ -25,22 +25,22 @@ _have_iperf3 = have_app(iperf3)
 
 
 class VCLAppWorker(Worker):
 
 
 class VCLAppWorker(Worker):
-    """ VCL Test Application Worker """
+    """VCL Test Application Worker"""
 
     libname = "libvcl_ldpreload.so"
 
     class LibraryNotFound(Exception):
         pass
 
 
     libname = "libvcl_ldpreload.so"
 
     class LibraryNotFound(Exception):
         pass
 
-    def __init__(self, appname, executable_args, logger, env=None,
-                 role=None, *args, **kwargs):
+    def __init__(
+        self, appname, executable_args, logger, env=None, role=None, *args, **kwargs
+    ):
         self.role = role
         vcl_ldpreload_glob = f"{config.vpp_install_dir}/**/{self.libname}"
         vcl_ldpreload_so = glob.glob(vcl_ldpreload_glob, recursive=True)
 
         if len(vcl_ldpreload_so) < 1:
         self.role = role
         vcl_ldpreload_glob = f"{config.vpp_install_dir}/**/{self.libname}"
         vcl_ldpreload_so = glob.glob(vcl_ldpreload_glob, recursive=True)
 
         if len(vcl_ldpreload_so) < 1:
-            raise LibraryNotFound("cannot locate library: {}".format(
-                self.libname))
+            raise LibraryNotFound("cannot locate library: {}".format(self.libname))
 
         vcl_ldpreload_so = vcl_ldpreload_so[0]
 
 
         vcl_ldpreload_so = vcl_ldpreload_so[0]
 
@@ -48,19 +48,19 @@ class VCLAppWorker(Worker):
             env = {}
         if "iperf" in appname:
             app = appname
             env = {}
         if "iperf" in appname:
             app = appname
-            env.update({'LD_PRELOAD': vcl_ldpreload_so})
+            env.update({"LD_PRELOAD": vcl_ldpreload_so})
         elif "sock" in appname:
             app = f"{config.vpp_build_dir}/vpp/bin/{appname}"
         elif "sock" in appname:
             app = f"{config.vpp_build_dir}/vpp/bin/{appname}"
-            env.update({'LD_PRELOAD': vcl_ldpreload_so})
+            env.update({"LD_PRELOAD": vcl_ldpreload_so})
         else:
             app = f"{config.vpp_build_dir}/vpp/bin/{appname}"
         self.args = [app] + executable_args
         else:
             app = f"{config.vpp_build_dir}/vpp/bin/{appname}"
         self.args = [app] + executable_args
-        super(VCLAppWorker, self).__init__(self.args, logger, env,
-                                           *args, **kwargs)
+        super(VCLAppWorker, self).__init__(self.args, logger, env, *args, **kwargs)
 
 
 class VCLTestCase(VppTestCase):
 
 
 class VCLTestCase(VppTestCase):
-    """ VCL Test Class """
+    """VCL Test Class"""
+
     session_startup = ["poll-main"]
 
     @classmethod
     session_startup = ["poll-main"]
 
     @classmethod
@@ -75,7 +75,7 @@ class VCLTestCase(VppTestCase):
         super(VCLTestCase, cls).tearDownClass()
 
     def setUp(self):
         super(VCLTestCase, cls).tearDownClass()
 
     def setUp(self):
-        self.vppDebug = 'vpp_debug' in config.vpp_install_dir
+        self.vppDebug = "vpp_debug" in config.vpp_install_dir
         self.server_addr = "127.0.0.1"
         self.server_port = "22000"
         self.server_args = [self.server_port]
         self.server_addr = "127.0.0.1"
         self.server_port = "22000"
         self.server_args = [self.server_port]
@@ -95,26 +95,26 @@ class VCLTestCase(VppTestCase):
 
     def update_vcl_app_env(self, ns_id, ns_secret, attach_sock):
         if not ns_id:
 
     def update_vcl_app_env(self, ns_id, ns_secret, attach_sock):
         if not ns_id:
-            if 'VCL_APP_NAMESPACE_ID' in self.vcl_app_env:
-                del self.vcl_app_env['VCL_APP_NAMESPACE_ID']
+            if "VCL_APP_NAMESPACE_ID" in self.vcl_app_env:
+                del self.vcl_app_env["VCL_APP_NAMESPACE_ID"]
         else:
         else:
-            self.vcl_app_env['VCL_APP_NAMESPACE_ID'] = ns_id
+            self.vcl_app_env["VCL_APP_NAMESPACE_ID"] = ns_id
 
         if not ns_secret:
 
         if not ns_secret:
-            if 'VCL_APP_NAMESPACE_SECRET' in self.vcl_app_env:
-                del self.vcl_app_env['VCL_APP_NAMESPACE_SECRET']
+            if "VCL_APP_NAMESPACE_SECRET" in self.vcl_app_env:
+                del self.vcl_app_env["VCL_APP_NAMESPACE_SECRET"]
         else:
         else:
-            self.vcl_app_env['VCL_APP_NAMESPACE_SECRET'] = ns_secret
+            self.vcl_app_env["VCL_APP_NAMESPACE_SECRET"] = ns_secret
 
         if not attach_sock:
 
         if not attach_sock:
-            self.vcl_app_env['VCL_VPP_API_SOCKET'] = self.get_api_sock_path()
-            if 'VCL_VPP_SAPI_SOCKET' in self.vcl_app_env:
-                del self.vcl_app_env['VCL_VPP_SAPI_SOCKET']
+            self.vcl_app_env["VCL_VPP_API_SOCKET"] = self.get_api_sock_path()
+            if "VCL_VPP_SAPI_SOCKET" in self.vcl_app_env:
+                del self.vcl_app_env["VCL_VPP_SAPI_SOCKET"]
         else:
             sapi_sock = "%s/app_ns_sockets/%s" % (self.tempdir, attach_sock)
         else:
             sapi_sock = "%s/app_ns_sockets/%s" % (self.tempdir, attach_sock)
-            self.vcl_app_env['VCL_VPP_SAPI_SOCKET'] = sapi_sock
-            if 'VCL_VPP_API_SOCKET' in self.vcl_app_env:
-                del self.vcl_app_env['VCL_VPP_API_SOCKET']
+            self.vcl_app_env["VCL_VPP_SAPI_SOCKET"] = sapi_sock
+            if "VCL_VPP_API_SOCKET" in self.vcl_app_env:
+                del self.vcl_app_env["VCL_VPP_API_SOCKET"]
 
     def cut_thru_setup(self):
         self.vapi.session_enable_disable(is_enable=1)
 
     def cut_thru_setup(self):
         self.vapi.session_enable_disable(is_enable=1)
@@ -123,17 +123,19 @@ class VCLTestCase(VppTestCase):
         self.vapi.session_enable_disable(is_enable=0)
 
     def cut_thru_test(self, server_app, server_args, client_app, client_args):
         self.vapi.session_enable_disable(is_enable=0)
 
     def cut_thru_test(self, server_app, server_args, client_app, client_args):
-        self.vcl_app_env = {'VCL_APP_SCOPE_LOCAL': "true"}
+        self.vcl_app_env = {"VCL_APP_SCOPE_LOCAL": "true"}
 
         self.update_vcl_app_env("", "", self.sapi_server_sock)
 
         self.update_vcl_app_env("", "", self.sapi_server_sock)
-        worker_server = VCLAppWorker(server_app, server_args,
-                                     self.logger, self.vcl_app_env, "server")
+        worker_server = VCLAppWorker(
+            server_app, server_args, self.logger, self.vcl_app_env, "server"
+        )
         worker_server.start()
         self.sleep(self.pre_test_sleep)
 
         self.update_vcl_app_env("", "", self.sapi_client_sock)
         worker_server.start()
         self.sleep(self.pre_test_sleep)
 
         self.update_vcl_app_env("", "", self.sapi_client_sock)
-        worker_client = VCLAppWorker(client_app, client_args,
-                                     self.logger, self.vcl_app_env, "client")
+        worker_client = VCLAppWorker(
+            client_app, client_args, self.logger, self.vcl_app_env, "client"
+        )
         worker_client.start()
         worker_client.join(self.timeout)
         try:
         worker_client.start()
         worker_client.join(self.timeout)
         try:
@@ -160,20 +162,28 @@ class VCLTestCase(VppTestCase):
             table_id += 1
 
         # Configure namespaces
             table_id += 1
 
         # Configure namespaces
-        self.vapi.app_namespace_add_del(namespace_id="1", secret=1234,
-                                        sw_if_index=self.loop0.sw_if_index)
-        self.vapi.app_namespace_add_del(namespace_id="2", secret=5678,
-                                        sw_if_index=self.loop1.sw_if_index)
+        self.vapi.app_namespace_add_del(
+            namespace_id="1", secret=1234, sw_if_index=self.loop0.sw_if_index
+        )
+        self.vapi.app_namespace_add_del(
+            namespace_id="2", secret=5678, sw_if_index=self.loop1.sw_if_index
+        )
 
         # Add inter-table routes
 
         # Add inter-table routes
-        ip_t01 = VppIpRoute(self, self.loop1.local_ip4, 32,
-                            [VppRoutePath("0.0.0.0",
-                                          0xffffffff,
-                                          nh_table_id=2)], table_id=1)
-        ip_t10 = VppIpRoute(self, self.loop0.local_ip4, 32,
-                            [VppRoutePath("0.0.0.0",
-                                          0xffffffff,
-                                          nh_table_id=1)], table_id=2)
+        ip_t01 = VppIpRoute(
+            self,
+            self.loop1.local_ip4,
+            32,
+            [VppRoutePath("0.0.0.0", 0xFFFFFFFF, nh_table_id=2)],
+            table_id=1,
+        )
+        ip_t10 = VppIpRoute(
+            self,
+            self.loop0.local_ip4,
+            32,
+            [VppRoutePath("0.0.0.0", 0xFFFFFFFF, nh_table_id=1)],
+            table_id=2,
+        )
         ip_t01.add_vpp_config()
         ip_t10.add_vpp_config()
         self.logger.debug(self.vapi.cli("show ip fib"))
         ip_t01.add_vpp_config()
         ip_t10.add_vpp_config()
         self.logger.debug(self.vapi.cli("show ip fib"))
@@ -201,20 +211,28 @@ class VCLTestCase(VppTestCase):
             table_id += 1
 
         # Configure namespaces
             table_id += 1
 
         # Configure namespaces
-        self.vapi.app_namespace_add_del(namespace_id="1", secret=1234,
-                                        sw_if_index=self.loop0.sw_if_index)
-        self.vapi.app_namespace_add_del(namespace_id="2", secret=5678,
-                                        sw_if_index=self.loop1.sw_if_index)
+        self.vapi.app_namespace_add_del(
+            namespace_id="1", secret=1234, sw_if_index=self.loop0.sw_if_index
+        )
+        self.vapi.app_namespace_add_del(
+            namespace_id="2", secret=5678, sw_if_index=self.loop1.sw_if_index
+        )
 
         # Add inter-table routes
 
         # Add inter-table routes
-        ip_t01 = VppIpRoute(self, self.loop1.local_ip6, 128,
-                            [VppRoutePath("::0", 0xffffffff,
-                                          nh_table_id=2)],
-                            table_id=1)
-        ip_t10 = VppIpRoute(self, self.loop0.local_ip6, 128,
-                            [VppRoutePath("::0", 0xffffffff,
-                                          nh_table_id=1)],
-                            table_id=2)
+        ip_t01 = VppIpRoute(
+            self,
+            self.loop1.local_ip6,
+            128,
+            [VppRoutePath("::0", 0xFFFFFFFF, nh_table_id=2)],
+            table_id=1,
+        )
+        ip_t10 = VppIpRoute(
+            self,
+            self.loop0.local_ip6,
+            128,
+            [VppRoutePath("::0", 0xFFFFFFFF, nh_table_id=1)],
+            table_id=2,
+        )
         ip_t01.add_vpp_config()
         ip_t10.add_vpp_config()
         self.logger.debug(self.vapi.cli("show interface addr"))
         ip_t01.add_vpp_config()
         ip_t10.add_vpp_config()
         self.logger.debug(self.vapi.cli("show interface addr"))
@@ -229,19 +247,20 @@ class VCLTestCase(VppTestCase):
         self.vapi.session_enable_disable(is_enable=0)
 
     @unittest.skipUnless(_have_iperf3, "'%s' not found, Skipping.")
         self.vapi.session_enable_disable(is_enable=0)
 
     @unittest.skipUnless(_have_iperf3, "'%s' not found, Skipping.")
-    def thru_host_stack_test(self, server_app, server_args,
-                             client_app, client_args):
-        self.vcl_app_env = {'VCL_APP_SCOPE_GLOBAL': "true"}
+    def thru_host_stack_test(self, server_app, server_args, client_app, client_args):
+        self.vcl_app_env = {"VCL_APP_SCOPE_GLOBAL": "true"}
 
         self.update_vcl_app_env("1", "1234", self.sapi_server_sock)
 
         self.update_vcl_app_env("1", "1234", self.sapi_server_sock)
-        worker_server = VCLAppWorker(server_app, server_args,
-                                     self.logger, self.vcl_app_env, "server")
+        worker_server = VCLAppWorker(
+            server_app, server_args, self.logger, self.vcl_app_env, "server"
+        )
         worker_server.start()
         self.sleep(self.pre_test_sleep)
 
         self.update_vcl_app_env("2", "5678", self.sapi_client_sock)
         worker_server.start()
         self.sleep(self.pre_test_sleep)
 
         self.update_vcl_app_env("2", "5678", self.sapi_client_sock)
-        worker_client = VCLAppWorker(client_app, client_args,
-                                     self.logger, self.vcl_app_env, "client")
+        worker_client = VCLAppWorker(
+            client_app, client_args, self.logger, self.vcl_app_env, "client"
+        )
         worker_client.start()
         worker_client.join(self.timeout)
 
         worker_client.start()
         worker_client.join(self.timeout)
 
@@ -253,10 +272,11 @@ class VCLTestCase(VppTestCase):
 
     def validateResults(self, worker_client, worker_server, timeout):
         if worker_server.process is None:
 
     def validateResults(self, worker_client, worker_server, timeout):
         if worker_server.process is None:
-            raise RuntimeError('worker_server is not running.')
-        if os.path.isdir('/proc/{}'.format(worker_server.process.pid)):
-            self.logger.info("Killing server worker process (pid %d)" %
-                             worker_server.process.pid)
+            raise RuntimeError("worker_server is not running.")
+        if os.path.isdir("/proc/{}".format(worker_server.process.pid)):
+            self.logger.info(
+                "Killing server worker process (pid %d)" % worker_server.process.pid
+            )
             os.killpg(os.getpgid(worker_server.process.pid), signal.SIGTERM)
             worker_server.join()
         self.logger.info("Client worker result is `%s'" % worker_client.result)
             os.killpg(os.getpgid(worker_server.process.pid), signal.SIGTERM)
             worker_server.join()
         self.logger.info("Client worker result is `%s'" % worker_client.result)
@@ -265,23 +285,21 @@ class VCLTestCase(VppTestCase):
             try:
                 error = True
                 self.logger.error(
             try:
                 error = True
                 self.logger.error(
-                    "Timeout: %ss! Killing client worker process (pid %d)" %
-                    (timeout, worker_client.process.pid))
-                os.killpg(os.getpgid(worker_client.process.pid),
-                          signal.SIGKILL)
+                    "Timeout: %ss! Killing client worker process (pid %d)"
+                    % (timeout, worker_client.process.pid)
+                )
+                os.killpg(os.getpgid(worker_client.process.pid), signal.SIGKILL)
                 worker_client.join()
             except OSError:
                 worker_client.join()
             except OSError:
-                self.logger.debug(
-                    "Couldn't kill client worker process")
+                self.logger.debug("Couldn't kill client worker process")
                 raise
         if error:
                 raise
         if error:
-            raise RuntimeError(
-                "Timeout! Client worker did not finish in %ss" % timeout)
+            raise RuntimeError("Timeout! Client worker did not finish in %ss" % timeout)
         self.assert_equal(worker_client.result, 0, "Binary test return code")
 
 
 class LDPCutThruTestCase(VCLTestCase):
         self.assert_equal(worker_client.result, 0, "Binary test return code")
 
 
 class LDPCutThruTestCase(VCLTestCase):
-    """ LDP Cut Thru Tests """
+    """LDP Cut Thru Tests"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -296,21 +314,38 @@ class LDPCutThruTestCase(VCLTestCase):
         super(LDPCutThruTestCase, self).setUp()
 
         self.cut_thru_setup()
         super(LDPCutThruTestCase, self).setUp()
 
         self.cut_thru_setup()
-        self.client_echo_test_args = ["-E", self.echo_phrase, "-X",
-                                      self.server_addr, self.server_port]
+        self.client_echo_test_args = [
+            "-E",
+            self.echo_phrase,
+            "-X",
+            self.server_addr,
+            self.server_port,
+        ]
         self.client_iperf3_timeout = 20
         self.client_iperf3_args = ["-4", "-t 2", "-c", self.server_addr]
         self.server_iperf3_args = ["-4", "-s"]
         self.client_uni_dir_nsock_timeout = 20
         self.client_iperf3_timeout = 20
         self.client_iperf3_args = ["-4", "-t 2", "-c", self.server_addr]
         self.server_iperf3_args = ["-4", "-s"]
         self.client_uni_dir_nsock_timeout = 20
-        self.client_uni_dir_nsock_test_args = ["-N", "1000", "-U", "-X",
-                                               "-I", "2",
-                                               self.server_addr,
-                                               self.server_port]
+        self.client_uni_dir_nsock_test_args = [
+            "-N",
+            "1000",
+            "-U",
+            "-X",
+            "-I",
+            "2",
+            self.server_addr,
+            self.server_port,
+        ]
         self.client_bi_dir_nsock_timeout = 20
         self.client_bi_dir_nsock_timeout = 20
-        self.client_bi_dir_nsock_test_args = ["-N", "1000", "-B", "-X",
-                                              "-I", "2",
-                                              self.server_addr,
-                                              self.server_port]
+        self.client_bi_dir_nsock_test_args = [
+            "-N",
+            "1000",
+            "-B",
+            "-X",
+            "-I",
+            "2",
+            self.server_addr,
+            self.server_port,
+        ]
         self.sapi_client_sock = "default"
         self.sapi_server_sock = "default"
 
         self.sapi_client_sock = "default"
         self.sapi_server_sock = "default"
 
@@ -324,40 +359,51 @@ class LDPCutThruTestCase(VCLTestCase):
 
     @unittest.skipUnless(config.extended, "part of extended tests")
     def test_ldp_cut_thru_echo(self):
 
     @unittest.skipUnless(config.extended, "part of extended tests")
     def test_ldp_cut_thru_echo(self):
-        """ run LDP cut thru echo test """
+        """run LDP cut thru echo test"""
 
 
-        self.cut_thru_test("sock_test_server", self.server_args,
-                           "sock_test_client", self.client_echo_test_args)
+        self.cut_thru_test(
+            "sock_test_server",
+            self.server_args,
+            "sock_test_client",
+            self.client_echo_test_args,
+        )
 
     def test_ldp_cut_thru_iperf3(self):
 
     def test_ldp_cut_thru_iperf3(self):
-        """ run LDP cut thru iperf3 test """
+        """run LDP cut thru iperf3 test"""
 
         self.timeout = self.client_iperf3_timeout
 
         self.timeout = self.client_iperf3_timeout
-        self.cut_thru_test(iperf3, self.server_iperf3_args,
-                           iperf3, self.client_iperf3_args)
+        self.cut_thru_test(
+            iperf3, self.server_iperf3_args, iperf3, self.client_iperf3_args
+        )
 
     @unittest.skipUnless(config.extended, "part of extended tests")
     def test_ldp_cut_thru_uni_dir_nsock(self):
 
     @unittest.skipUnless(config.extended, "part of extended tests")
     def test_ldp_cut_thru_uni_dir_nsock(self):
-        """ run LDP cut thru uni-directional (multiple sockets) test """
+        """run LDP cut thru uni-directional (multiple sockets) test"""
 
         self.timeout = self.client_uni_dir_nsock_timeout
 
         self.timeout = self.client_uni_dir_nsock_timeout
-        self.cut_thru_test("sock_test_server", self.server_args,
-                           "sock_test_client",
-                           self.client_uni_dir_nsock_test_args)
+        self.cut_thru_test(
+            "sock_test_server",
+            self.server_args,
+            "sock_test_client",
+            self.client_uni_dir_nsock_test_args,
+        )
 
     @unittest.skipUnless(config.extended, "part of extended tests")
     @unittest.skip("sock test apps need to be improved")
     def test_ldp_cut_thru_bi_dir_nsock(self):
 
     @unittest.skipUnless(config.extended, "part of extended tests")
     @unittest.skip("sock test apps need to be improved")
     def test_ldp_cut_thru_bi_dir_nsock(self):
-        """ run LDP cut thru bi-directional (multiple sockets) test """
+        """run LDP cut thru bi-directional (multiple sockets) test"""
 
         self.timeout = self.client_bi_dir_nsock_timeout
 
         self.timeout = self.client_bi_dir_nsock_timeout
-        self.cut_thru_test("sock_test_server", self.server_args,
-                           "sock_test_client",
-                           self.client_bi_dir_nsock_test_args)
+        self.cut_thru_test(
+            "sock_test_server",
+            self.server_args,
+            "sock_test_client",
+            self.client_bi_dir_nsock_test_args,
+        )
 
 
 class VCLCutThruTestCase(VCLTestCase):
 
 
 class VCLCutThruTestCase(VCLTestCase):
-    """ VCL Cut Thru Tests """
+    """VCL Cut Thru Tests"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -371,19 +417,36 @@ class VCLCutThruTestCase(VCLTestCase):
         super(VCLCutThruTestCase, self).setUp()
 
         self.cut_thru_setup()
         super(VCLCutThruTestCase, self).setUp()
 
         self.cut_thru_setup()
-        self.client_echo_test_args = ["-E", self.echo_phrase, "-X",
-                                      self.server_addr, self.server_port]
+        self.client_echo_test_args = [
+            "-E",
+            self.echo_phrase,
+            "-X",
+            self.server_addr,
+            self.server_port,
+        ]
 
         self.client_uni_dir_nsock_timeout = 20
 
         self.client_uni_dir_nsock_timeout = 20
-        self.client_uni_dir_nsock_test_args = ["-N", "1000", "-U", "-X",
-                                               "-I", "2",
-                                               self.server_addr,
-                                               self.server_port]
+        self.client_uni_dir_nsock_test_args = [
+            "-N",
+            "1000",
+            "-U",
+            "-X",
+            "-I",
+            "2",
+            self.server_addr,
+            self.server_port,
+        ]
         self.client_bi_dir_nsock_timeout = 20
         self.client_bi_dir_nsock_timeout = 20
-        self.client_bi_dir_nsock_test_args = ["-N", "1000", "-B", "-X",
-                                              "-I", "2",
-                                              self.server_addr,
-                                              self.server_port]
+        self.client_bi_dir_nsock_test_args = [
+            "-N",
+            "1000",
+            "-B",
+            "-X",
+            "-I",
+            "2",
+            self.server_addr,
+            self.server_port,
+        ]
 
     def tearDown(self):
         super(VCLCutThruTestCase, self).tearDown()
 
     def tearDown(self):
         super(VCLCutThruTestCase, self).tearDown()
@@ -393,30 +456,40 @@ class VCLCutThruTestCase(VCLTestCase):
         self.logger.debug(self.vapi.cli("show app mq"))
 
     def test_vcl_cut_thru_echo(self):
         self.logger.debug(self.vapi.cli("show app mq"))
 
     def test_vcl_cut_thru_echo(self):
-        """ run VCL cut thru echo test """
+        """run VCL cut thru echo test"""
 
 
-        self.cut_thru_test("vcl_test_server", self.server_args,
-                           "vcl_test_client", self.client_echo_test_args)
+        self.cut_thru_test(
+            "vcl_test_server",
+            self.server_args,
+            "vcl_test_client",
+            self.client_echo_test_args,
+        )
 
     def test_vcl_cut_thru_uni_dir_nsock(self):
 
     def test_vcl_cut_thru_uni_dir_nsock(self):
-        """ run VCL cut thru uni-directional (multiple sockets) test """
+        """run VCL cut thru uni-directional (multiple sockets) test"""
 
         self.timeout = self.client_uni_dir_nsock_timeout
 
         self.timeout = self.client_uni_dir_nsock_timeout
-        self.cut_thru_test("vcl_test_server", self.server_args,
-                           "vcl_test_client",
-                           self.client_uni_dir_nsock_test_args)
+        self.cut_thru_test(
+            "vcl_test_server",
+            self.server_args,
+            "vcl_test_client",
+            self.client_uni_dir_nsock_test_args,
+        )
 
     def test_vcl_cut_thru_bi_dir_nsock(self):
 
     def test_vcl_cut_thru_bi_dir_nsock(self):
-        """ run VCL cut thru bi-directional (multiple sockets) test """
+        """run VCL cut thru bi-directional (multiple sockets) test"""
 
         self.timeout = self.client_bi_dir_nsock_timeout
 
         self.timeout = self.client_bi_dir_nsock_timeout
-        self.cut_thru_test("vcl_test_server", self.server_args,
-                           "vcl_test_client",
-                           self.client_bi_dir_nsock_test_args)
+        self.cut_thru_test(
+            "vcl_test_server",
+            self.server_args,
+            "vcl_test_client",
+            self.client_bi_dir_nsock_test_args,
+        )
 
 
 class VCLThruHostStackEcho(VCLTestCase):
 
 
 class VCLThruHostStackEcho(VCLTestCase):
-    """ VCL Thru Host Stack Echo """
+    """VCL Thru Host Stack Echo"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -431,25 +504,37 @@ class VCLThruHostStackEcho(VCLTestCase):
 
         self.thru_host_stack_setup()
         self.client_bi_dir_nsock_timeout = 20
 
         self.thru_host_stack_setup()
         self.client_bi_dir_nsock_timeout = 20
-        self.client_bi_dir_nsock_test_args = ["-N", "1000", "-B", "-X",
-                                              "-I", "2",
-                                              self.loop0.local_ip4,
-                                              self.server_port]
-        self.client_echo_test_args = ["-E", self.echo_phrase, "-X",
-                                      self.loop0.local_ip4,
-                                      self.server_port]
+        self.client_bi_dir_nsock_test_args = [
+            "-N",
+            "1000",
+            "-B",
+            "-X",
+            "-I",
+            "2",
+            self.loop0.local_ip4,
+            self.server_port,
+        ]
+        self.client_echo_test_args = [
+            "-E",
+            self.echo_phrase,
+            "-X",
+            self.loop0.local_ip4,
+            self.server_port,
+        ]
 
     def tearDown(self):
         self.thru_host_stack_tear_down()
         super(VCLThruHostStackEcho, self).tearDown()
 
     def test_vcl_thru_host_stack_echo(self):
 
     def tearDown(self):
         self.thru_host_stack_tear_down()
         super(VCLThruHostStackEcho, self).tearDown()
 
     def test_vcl_thru_host_stack_echo(self):
-        """ run VCL IPv4 thru host stack echo test """
+        """run VCL IPv4 thru host stack echo test"""
 
 
-        self.thru_host_stack_test("vcl_test_server",
-                                  self.server_args,
-                                  "vcl_test_client",
-                                  self.client_echo_test_args)
+        self.thru_host_stack_test(
+            "vcl_test_server",
+            self.server_args,
+            "vcl_test_client",
+            self.client_echo_test_args,
+        )
 
     def show_commands_at_teardown(self):
         self.logger.debug(self.vapi.cli("show app server"))
 
     def show_commands_at_teardown(self):
         self.logger.debug(self.vapi.cli("show app server"))
@@ -458,7 +543,7 @@ class VCLThruHostStackEcho(VCLTestCase):
 
 
 class VCLThruHostStackTLS(VCLTestCase):
 
 
 class VCLThruHostStackTLS(VCLTestCase):
-    """ VCL Thru Host Stack TLS """
+    """VCL Thru Host Stack TLS"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -475,19 +560,28 @@ class VCLThruHostStackTLS(VCLTestCase):
         self.thru_host_stack_setup()
         self.client_uni_dir_tls_timeout = 20
         self.server_tls_args = ["-L", self.server_port]
         self.thru_host_stack_setup()
         self.client_uni_dir_tls_timeout = 20
         self.server_tls_args = ["-L", self.server_port]
-        self.client_uni_dir_tls_test_args = ["-N", "1000", "-U", "-X", "-L",
-                                             self.loop0.local_ip4,
-                                             self.server_port]
+        self.client_uni_dir_tls_test_args = [
+            "-N",
+            "1000",
+            "-U",
+            "-X",
+            "-L",
+            self.loop0.local_ip4,
+            self.server_port,
+        ]
         self.sapi_server_sock = "1"
         self.sapi_client_sock = "2"
 
     def test_vcl_thru_host_stack_tls_uni_dir(self):
         self.sapi_server_sock = "1"
         self.sapi_client_sock = "2"
 
     def test_vcl_thru_host_stack_tls_uni_dir(self):
-        """ run VCL thru host stack uni-directional TLS test """
+        """run VCL thru host stack uni-directional TLS test"""
 
         self.timeout = self.client_uni_dir_tls_timeout
 
         self.timeout = self.client_uni_dir_tls_timeout
-        self.thru_host_stack_test("vcl_test_server", self.server_tls_args,
-                                  "vcl_test_client",
-                                  self.client_uni_dir_tls_test_args)
+        self.thru_host_stack_test(
+            "vcl_test_server",
+            self.server_tls_args,
+            "vcl_test_client",
+            self.client_uni_dir_tls_test_args,
+        )
 
     def tearDown(self):
         self.thru_host_stack_tear_down()
 
     def tearDown(self):
         self.thru_host_stack_tear_down()
@@ -500,7 +594,7 @@ class VCLThruHostStackTLS(VCLTestCase):
 
 
 class VCLThruHostStackDTLS(VCLTestCase):
 
 
 class VCLThruHostStackDTLS(VCLTestCase):
-    """ VCL Thru Host Stack DTLS """
+    """VCL Thru Host Stack DTLS"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -516,18 +610,28 @@ class VCLThruHostStackDTLS(VCLTestCase):
         self.thru_host_stack_setup()
         self.client_uni_dir_dtls_timeout = 20
         self.server_dtls_args = ["-p", "dtls", self.server_port]
         self.thru_host_stack_setup()
         self.client_uni_dir_dtls_timeout = 20
         self.server_dtls_args = ["-p", "dtls", self.server_port]
-        self.client_uni_dir_dtls_test_args = ["-N", "1000", "-U", "-X",
-                                              "-p", "dtls", "-T 1400",
-                                              self.loop0.local_ip4,
-                                              self.server_port]
+        self.client_uni_dir_dtls_test_args = [
+            "-N",
+            "1000",
+            "-U",
+            "-X",
+            "-p",
+            "dtls",
+            "-T 1400",
+            self.loop0.local_ip4,
+            self.server_port,
+        ]
 
     def test_vcl_thru_host_stack_dtls_uni_dir(self):
 
     def test_vcl_thru_host_stack_dtls_uni_dir(self):
-        """ run VCL thru host stack uni-directional DTLS test """
+        """run VCL thru host stack uni-directional DTLS test"""
 
         self.timeout = self.client_uni_dir_dtls_timeout
 
         self.timeout = self.client_uni_dir_dtls_timeout
-        self.thru_host_stack_test("vcl_test_server", self.server_dtls_args,
-                                  "vcl_test_client",
-                                  self.client_uni_dir_dtls_test_args)
+        self.thru_host_stack_test(
+            "vcl_test_server",
+            self.server_dtls_args,
+            "vcl_test_client",
+            self.client_uni_dir_dtls_test_args,
+        )
 
     def tearDown(self):
         self.thru_host_stack_tear_down()
 
     def tearDown(self):
         self.thru_host_stack_tear_down()
@@ -540,7 +644,7 @@ class VCLThruHostStackDTLS(VCLTestCase):
 
 
 class VCLThruHostStackQUIC(VCLTestCase):
 
 
 class VCLThruHostStackQUIC(VCLTestCase):
-    """ VCL Thru Host Stack QUIC """
+    """VCL Thru Host Stack QUIC"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -557,19 +661,28 @@ class VCLThruHostStackQUIC(VCLTestCase):
         self.thru_host_stack_setup()
         self.client_uni_dir_quic_timeout = 20
         self.server_quic_args = ["-p", "quic", self.server_port]
         self.thru_host_stack_setup()
         self.client_uni_dir_quic_timeout = 20
         self.server_quic_args = ["-p", "quic", self.server_port]
-        self.client_uni_dir_quic_test_args = ["-N", "1000", "-U", "-X",
-                                              "-p", "quic",
-                                              self.loop0.local_ip4,
-                                              self.server_port]
+        self.client_uni_dir_quic_test_args = [
+            "-N",
+            "1000",
+            "-U",
+            "-X",
+            "-p",
+            "quic",
+            self.loop0.local_ip4,
+            self.server_port,
+        ]
 
     @unittest.skipUnless(config.extended, "part of extended tests")
     def test_vcl_thru_host_stack_quic_uni_dir(self):
 
     @unittest.skipUnless(config.extended, "part of extended tests")
     def test_vcl_thru_host_stack_quic_uni_dir(self):
-        """ run VCL thru host stack uni-directional QUIC test """
+        """run VCL thru host stack uni-directional QUIC test"""
 
         self.timeout = self.client_uni_dir_quic_timeout
 
         self.timeout = self.client_uni_dir_quic_timeout
-        self.thru_host_stack_test("vcl_test_server", self.server_quic_args,
-                                  "vcl_test_client",
-                                  self.client_uni_dir_quic_test_args)
+        self.thru_host_stack_test(
+            "vcl_test_server",
+            self.server_quic_args,
+            "vcl_test_client",
+            self.client_uni_dir_quic_test_args,
+        )
 
     def tearDown(self):
         self.thru_host_stack_tear_down()
 
     def tearDown(self):
         self.thru_host_stack_tear_down()
@@ -582,7 +695,7 @@ class VCLThruHostStackQUIC(VCLTestCase):
 
 
 class VCLThruHostStackBidirNsock(VCLTestCase):
 
 
 class VCLThruHostStackBidirNsock(VCLTestCase):
-    """ VCL Thru Host Stack Bidir Nsock """
+    """VCL Thru Host Stack Bidir Nsock"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -597,13 +710,23 @@ class VCLThruHostStackBidirNsock(VCLTestCase):
 
         self.thru_host_stack_setup()
         self.client_bi_dir_nsock_timeout = 20
 
         self.thru_host_stack_setup()
         self.client_bi_dir_nsock_timeout = 20
-        self.client_bi_dir_nsock_test_args = ["-N", "1000", "-B", "-X",
-                                              "-I", "2",
-                                              self.loop0.local_ip4,
-                                              self.server_port]
-        self.client_echo_test_args = ["-E", self.echo_phrase, "-X",
-                                      self.loop0.local_ip4,
-                                      self.server_port]
+        self.client_bi_dir_nsock_test_args = [
+            "-N",
+            "1000",
+            "-B",
+            "-X",
+            "-I",
+            "2",
+            self.loop0.local_ip4,
+            self.server_port,
+        ]
+        self.client_echo_test_args = [
+            "-E",
+            self.echo_phrase,
+            "-X",
+            self.loop0.local_ip4,
+            self.server_port,
+        ]
 
     def tearDown(self):
         self.thru_host_stack_tear_down()
 
     def tearDown(self):
         self.thru_host_stack_tear_down()
@@ -614,16 +737,19 @@ class VCLThruHostStackBidirNsock(VCLTestCase):
         self.logger.debug(self.vapi.cli("show app mq"))
 
     def test_vcl_thru_host_stack_bi_dir_nsock(self):
         self.logger.debug(self.vapi.cli("show app mq"))
 
     def test_vcl_thru_host_stack_bi_dir_nsock(self):
-        """ run VCL thru host stack bi-directional (multiple sockets) test """
+        """run VCL thru host stack bi-directional (multiple sockets) test"""
 
         self.timeout = self.client_bi_dir_nsock_timeout
 
         self.timeout = self.client_bi_dir_nsock_timeout
-        self.thru_host_stack_test("vcl_test_server", self.server_args,
-                                  "vcl_test_client",
-                                  self.client_bi_dir_nsock_test_args)
+        self.thru_host_stack_test(
+            "vcl_test_server",
+            self.server_args,
+            "vcl_test_client",
+            self.client_bi_dir_nsock_test_args,
+        )
 
 
 class LDPThruHostStackBidirNsock(VCLTestCase):
 
 
 class LDPThruHostStackBidirNsock(VCLTestCase):
-    """ LDP Thru Host Stack Bidir Nsock """
+    """LDP Thru Host Stack Bidir Nsock"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -638,14 +764,19 @@ class LDPThruHostStackBidirNsock(VCLTestCase):
 
         self.thru_host_stack_setup()
         self.client_bi_dir_nsock_timeout = 20
 
         self.thru_host_stack_setup()
         self.client_bi_dir_nsock_timeout = 20
-        self.client_bi_dir_nsock_test_args = ["-N", "1000", "-B", "-X",
-                                              # OUCH! Host Stack Bug?
-                                              # Only fails when running
-                                              # 'make test TEST_JOBS=auto'
-                                              # or TEST_JOBS > 1
-                                              # "-I", "2",
-                                              self.loop0.local_ip4,
-                                              self.server_port]
+        self.client_bi_dir_nsock_test_args = [
+            "-N",
+            "1000",
+            "-B",
+            "-X",
+            # OUCH! Host Stack Bug?
+            # Only fails when running
+            # 'make test TEST_JOBS=auto'
+            # or TEST_JOBS > 1
+            # "-I", "2",
+            self.loop0.local_ip4,
+            self.server_port,
+        ]
 
     def tearDown(self):
         self.thru_host_stack_tear_down()
 
     def tearDown(self):
         self.thru_host_stack_tear_down()
@@ -656,16 +787,19 @@ class LDPThruHostStackBidirNsock(VCLTestCase):
         self.logger.debug(self.vapi.cli("show app mq"))
 
     def test_ldp_thru_host_stack_bi_dir_nsock(self):
         self.logger.debug(self.vapi.cli("show app mq"))
 
     def test_ldp_thru_host_stack_bi_dir_nsock(self):
-        """ run LDP thru host stack bi-directional (multiple sockets) test """
+        """run LDP thru host stack bi-directional (multiple sockets) test"""
 
         self.timeout = self.client_bi_dir_nsock_timeout
 
         self.timeout = self.client_bi_dir_nsock_timeout
-        self.thru_host_stack_test("sock_test_server", self.server_args,
-                                  "sock_test_client",
-                                  self.client_bi_dir_nsock_test_args)
+        self.thru_host_stack_test(
+            "sock_test_server",
+            self.server_args,
+            "sock_test_client",
+            self.client_bi_dir_nsock_test_args,
+        )
 
 
 class LDPThruHostStackNsock(VCLTestCase):
 
 
 class LDPThruHostStackNsock(VCLTestCase):
-    """ LDP Thru Host Stack Nsock """
+    """LDP Thru Host Stack Nsock"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -686,26 +820,35 @@ class LDPThruHostStackNsock(VCLTestCase):
             self.client_uni_dir_nsock_timeout = 20
             self.numSockets = "5"
 
             self.client_uni_dir_nsock_timeout = 20
             self.numSockets = "5"
 
-        self.client_uni_dir_nsock_test_args = ["-N", "1000", "-U", "-X",
-                                               "-I", self.numSockets,
-                                               self.loop0.local_ip4,
-                                               self.server_port]
+        self.client_uni_dir_nsock_test_args = [
+            "-N",
+            "1000",
+            "-U",
+            "-X",
+            "-I",
+            self.numSockets,
+            self.loop0.local_ip4,
+            self.server_port,
+        ]
 
     def tearDown(self):
         self.thru_host_stack_tear_down()
         super(LDPThruHostStackNsock, self).tearDown()
 
     def test_ldp_thru_host_stack_uni_dir_nsock(self):
 
     def tearDown(self):
         self.thru_host_stack_tear_down()
         super(LDPThruHostStackNsock, self).tearDown()
 
     def test_ldp_thru_host_stack_uni_dir_nsock(self):
-        """ run LDP thru host stack uni-directional (multiple sockets) test """
+        """run LDP thru host stack uni-directional (multiple sockets) test"""
 
         self.timeout = self.client_uni_dir_nsock_timeout
 
         self.timeout = self.client_uni_dir_nsock_timeout
-        self.thru_host_stack_test("sock_test_server", self.server_args,
-                                  "sock_test_client",
-                                  self.client_uni_dir_nsock_test_args)
+        self.thru_host_stack_test(
+            "sock_test_server",
+            self.server_args,
+            "sock_test_client",
+            self.client_uni_dir_nsock_test_args,
+        )
 
 
 class VCLThruHostStackNsock(VCLTestCase):
 
 
 class VCLThruHostStackNsock(VCLTestCase):
-    """ VCL Thru Host Stack Nsock """
+    """VCL Thru Host Stack Nsock"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -726,26 +869,35 @@ class VCLThruHostStackNsock(VCLTestCase):
             self.client_uni_dir_nsock_timeout = 20
             self.numSockets = "5"
 
             self.client_uni_dir_nsock_timeout = 20
             self.numSockets = "5"
 
-        self.client_uni_dir_nsock_test_args = ["-N", "1000", "-U", "-X",
-                                               "-I", self.numSockets,
-                                               self.loop0.local_ip4,
-                                               self.server_port]
+        self.client_uni_dir_nsock_test_args = [
+            "-N",
+            "1000",
+            "-U",
+            "-X",
+            "-I",
+            self.numSockets,
+            self.loop0.local_ip4,
+            self.server_port,
+        ]
 
     def tearDown(self):
         self.thru_host_stack_tear_down()
         super(VCLThruHostStackNsock, self).tearDown()
 
     def test_vcl_thru_host_stack_uni_dir_nsock(self):
 
     def tearDown(self):
         self.thru_host_stack_tear_down()
         super(VCLThruHostStackNsock, self).tearDown()
 
     def test_vcl_thru_host_stack_uni_dir_nsock(self):
-        """ run VCL thru host stack uni-directional (multiple sockets) test """
+        """run VCL thru host stack uni-directional (multiple sockets) test"""
 
         self.timeout = self.client_uni_dir_nsock_timeout
 
         self.timeout = self.client_uni_dir_nsock_timeout
-        self.thru_host_stack_test("vcl_test_server", self.server_args,
-                                  "vcl_test_client",
-                                  self.client_uni_dir_nsock_test_args)
+        self.thru_host_stack_test(
+            "vcl_test_server",
+            self.server_args,
+            "vcl_test_client",
+            self.client_uni_dir_nsock_test_args,
+        )
 
 
 class LDPThruHostStackIperf(VCLTestCase):
 
 
 class LDPThruHostStackIperf(VCLTestCase):
-    """ LDP Thru Host Stack Iperf  """
+    """LDP Thru Host Stack Iperf"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -773,15 +925,16 @@ class LDPThruHostStackIperf(VCLTestCase):
 
     @unittest.skipUnless(_have_iperf3, "'%s' not found, Skipping.")
     def test_ldp_thru_host_stack_iperf3(self):
 
     @unittest.skipUnless(_have_iperf3, "'%s' not found, Skipping.")
     def test_ldp_thru_host_stack_iperf3(self):
-        """ run LDP thru host stack iperf3 test """
+        """run LDP thru host stack iperf3 test"""
 
         self.timeout = self.client_iperf3_timeout
 
         self.timeout = self.client_iperf3_timeout
-        self.thru_host_stack_test(iperf3, self.server_iperf3_args,
-                                  iperf3, self.client_iperf3_args)
+        self.thru_host_stack_test(
+            iperf3, self.server_iperf3_args, iperf3, self.client_iperf3_args
+        )
 
 
 class LDPThruHostStackIperfUdp(VCLTestCase):
 
 
 class LDPThruHostStackIperfUdp(VCLTestCase):
-    """ LDP Thru Host Stack Iperf UDP """
+    """LDP Thru Host Stack Iperf UDP"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -796,8 +949,14 @@ class LDPThruHostStackIperfUdp(VCLTestCase):
 
         self.thru_host_stack_setup()
         self.client_iperf3_timeout = 20
 
         self.thru_host_stack_setup()
         self.client_iperf3_timeout = 20
-        self.client_iperf3_args = ["-4", "-t 2", "-u", "-l 1400",
-                                   "-c", self.loop0.local_ip4]
+        self.client_iperf3_args = [
+            "-4",
+            "-t 2",
+            "-u",
+            "-l 1400",
+            "-c",
+            self.loop0.local_ip4,
+        ]
         self.server_iperf3_args = ["-4", "-s"]
 
     def tearDown(self):
         self.server_iperf3_args = ["-4", "-s"]
 
     def tearDown(self):
@@ -810,15 +969,16 @@ class LDPThruHostStackIperfUdp(VCLTestCase):
 
     @unittest.skipUnless(_have_iperf3, "'%s' not found, Skipping.")
     def test_ldp_thru_host_stack_iperf3_udp(self):
 
     @unittest.skipUnless(_have_iperf3, "'%s' not found, Skipping.")
     def test_ldp_thru_host_stack_iperf3_udp(self):
-        """ run LDP thru host stack iperf3 UDP test """
+        """run LDP thru host stack iperf3 UDP test"""
 
         self.timeout = self.client_iperf3_timeout
 
         self.timeout = self.client_iperf3_timeout
-        self.thru_host_stack_test(iperf3, self.server_iperf3_args,
-                                  iperf3, self.client_iperf3_args)
+        self.thru_host_stack_test(
+            iperf3, self.server_iperf3_args, iperf3, self.client_iperf3_args
+        )
 
 
 class LDPIpv6CutThruTestCase(VCLTestCase):
 
 
 class LDPIpv6CutThruTestCase(VCLTestCase):
-    """ LDP IPv6 Cut Thru Tests """
+    """LDP IPv6 Cut Thru Tests"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -839,22 +999,38 @@ class LDPIpv6CutThruTestCase(VCLTestCase):
         self.client_iperf3_timeout = 20
         self.client_uni_dir_nsock_timeout = 20
         self.client_bi_dir_nsock_timeout = 20
         self.client_iperf3_timeout = 20
         self.client_uni_dir_nsock_timeout = 20
         self.client_bi_dir_nsock_timeout = 20
-        self.client_ipv6_echo_test_args = ["-6", "-E", self.echo_phrase, "-X",
-                                           self.server_ipv6_addr,
-                                           self.server_port]
-        self.client_ipv6_iperf3_args = ["-6", "-t 2", "-c",
-                                        self.server_ipv6_addr]
+        self.client_ipv6_echo_test_args = [
+            "-6",
+            "-E",
+            self.echo_phrase,
+            "-X",
+            self.server_ipv6_addr,
+            self.server_port,
+        ]
+        self.client_ipv6_iperf3_args = ["-6", "-t 2", "-c", self.server_ipv6_addr]
         self.server_ipv6_iperf3_args = ["-6", "-s"]
         self.server_ipv6_iperf3_args = ["-6", "-s"]
-        self.client_ipv6_uni_dir_nsock_test_args = ["-N", "1000", "-U", "-X",
-                                                    "-6",
-                                                    "-I", "2",
-                                                    self.server_ipv6_addr,
-                                                    self.server_port]
-        self.client_ipv6_bi_dir_nsock_test_args = ["-N", "1000", "-B", "-X",
-                                                   "-6",
-                                                   "-I", "2",
-                                                   self.server_ipv6_addr,
-                                                   self.server_port]
+        self.client_ipv6_uni_dir_nsock_test_args = [
+            "-N",
+            "1000",
+            "-U",
+            "-X",
+            "-6",
+            "-I",
+            "2",
+            self.server_ipv6_addr,
+            self.server_port,
+        ]
+        self.client_ipv6_bi_dir_nsock_test_args = [
+            "-N",
+            "1000",
+            "-B",
+            "-X",
+            "-6",
+            "-I",
+            "2",
+            self.server_ipv6_addr,
+            self.server_port,
+        ]
 
     def tearDown(self):
         super(LDPIpv6CutThruTestCase, self).tearDown()
 
     def tearDown(self):
         super(LDPIpv6CutThruTestCase, self).tearDown()
@@ -862,43 +1038,52 @@ class LDPIpv6CutThruTestCase(VCLTestCase):
 
     @unittest.skipUnless(config.extended, "part of extended tests")
     def test_ldp_ipv6_cut_thru_echo(self):
 
     @unittest.skipUnless(config.extended, "part of extended tests")
     def test_ldp_ipv6_cut_thru_echo(self):
-        """ run LDP IPv6 cut thru echo test """
+        """run LDP IPv6 cut thru echo test"""
 
 
-        self.cut_thru_test("sock_test_server",
-                           self.server_ipv6_args,
-                           "sock_test_client",
-                           self.client_ipv6_echo_test_args)
+        self.cut_thru_test(
+            "sock_test_server",
+            self.server_ipv6_args,
+            "sock_test_client",
+            self.client_ipv6_echo_test_args,
+        )
 
     @unittest.skipUnless(_have_iperf3, "'%s' not found, Skipping.")
     def test_ldp_ipv6_cut_thru_iperf3(self):
 
     @unittest.skipUnless(_have_iperf3, "'%s' not found, Skipping.")
     def test_ldp_ipv6_cut_thru_iperf3(self):
-        """ run LDP IPv6 cut thru iperf3 test """
+        """run LDP IPv6 cut thru iperf3 test"""
 
         self.timeout = self.client_iperf3_timeout
 
         self.timeout = self.client_iperf3_timeout
-        self.cut_thru_test(iperf3, self.server_ipv6_iperf3_args,
-                           iperf3, self.client_ipv6_iperf3_args)
+        self.cut_thru_test(
+            iperf3, self.server_ipv6_iperf3_args, iperf3, self.client_ipv6_iperf3_args
+        )
 
     @unittest.skipUnless(config.extended, "part of extended tests")
     def test_ldp_ipv6_cut_thru_uni_dir_nsock(self):
 
     @unittest.skipUnless(config.extended, "part of extended tests")
     def test_ldp_ipv6_cut_thru_uni_dir_nsock(self):
-        """ run LDP IPv6 cut thru uni-directional (multiple sockets) test """
+        """run LDP IPv6 cut thru uni-directional (multiple sockets) test"""
 
         self.timeout = self.client_uni_dir_nsock_timeout
 
         self.timeout = self.client_uni_dir_nsock_timeout
-        self.cut_thru_test("sock_test_server", self.server_ipv6_args,
-                           "sock_test_client",
-                           self.client_ipv6_uni_dir_nsock_test_args)
+        self.cut_thru_test(
+            "sock_test_server",
+            self.server_ipv6_args,
+            "sock_test_client",
+            self.client_ipv6_uni_dir_nsock_test_args,
+        )
 
     @unittest.skipUnless(config.extended, "part of extended tests")
     @unittest.skip("sock test apps need to be improved")
     def test_ldp_ipv6_cut_thru_bi_dir_nsock(self):
 
     @unittest.skipUnless(config.extended, "part of extended tests")
     @unittest.skip("sock test apps need to be improved")
     def test_ldp_ipv6_cut_thru_bi_dir_nsock(self):
-        """ run LDP IPv6 cut thru bi-directional (multiple sockets) test """
+        """run LDP IPv6 cut thru bi-directional (multiple sockets) test"""
 
         self.timeout = self.client_bi_dir_nsock_timeout
 
         self.timeout = self.client_bi_dir_nsock_timeout
-        self.cut_thru_test("sock_test_server", self.server_ipv6_args,
-                           "sock_test_client",
-                           self.client_ipv6_bi_dir_nsock_test_args)
+        self.cut_thru_test(
+            "sock_test_server",
+            self.server_ipv6_args,
+            "sock_test_client",
+            self.client_ipv6_bi_dir_nsock_test_args,
+        )
 
 
 class VCLIpv6CutThruTestCase(VCLTestCase):
 
 
 class VCLIpv6CutThruTestCase(VCLTestCase):
-    """ VCL IPv6 Cut Thru Tests """
+    """VCL IPv6 Cut Thru Tests"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -918,19 +1103,36 @@ class VCLIpv6CutThruTestCase(VCLTestCase):
         self.cut_thru_setup()
         self.client_uni_dir_nsock_timeout = 20
         self.client_bi_dir_nsock_timeout = 20
         self.cut_thru_setup()
         self.client_uni_dir_nsock_timeout = 20
         self.client_bi_dir_nsock_timeout = 20
-        self.client_ipv6_echo_test_args = ["-6", "-E", self.echo_phrase, "-X",
-                                           self.server_ipv6_addr,
-                                           self.server_port]
-        self.client_ipv6_uni_dir_nsock_test_args = ["-N", "1000", "-U", "-X",
-                                                    "-6",
-                                                    "-I", "2",
-                                                    self.server_ipv6_addr,
-                                                    self.server_port]
-        self.client_ipv6_bi_dir_nsock_test_args = ["-N", "1000", "-B", "-X",
-                                                   "-6",
-                                                   "-I", "2",
-                                                   self.server_ipv6_addr,
-                                                   self.server_port]
+        self.client_ipv6_echo_test_args = [
+            "-6",
+            "-E",
+            self.echo_phrase,
+            "-X",
+            self.server_ipv6_addr,
+            self.server_port,
+        ]
+        self.client_ipv6_uni_dir_nsock_test_args = [
+            "-N",
+            "1000",
+            "-U",
+            "-X",
+            "-6",
+            "-I",
+            "2",
+            self.server_ipv6_addr,
+            self.server_port,
+        ]
+        self.client_ipv6_bi_dir_nsock_test_args = [
+            "-N",
+            "1000",
+            "-B",
+            "-X",
+            "-6",
+            "-I",
+            "2",
+            self.server_ipv6_addr,
+            self.server_port,
+        ]
 
     def tearDown(self):
         super(VCLIpv6CutThruTestCase, self).tearDown()
 
     def tearDown(self):
         super(VCLIpv6CutThruTestCase, self).tearDown()
@@ -941,34 +1143,42 @@ class VCLIpv6CutThruTestCase(VCLTestCase):
         self.logger.debug(self.vapi.cli("show app mq"))
 
     def test_vcl_ipv6_cut_thru_echo(self):
         self.logger.debug(self.vapi.cli("show app mq"))
 
     def test_vcl_ipv6_cut_thru_echo(self):
-        """ run VCL IPv6 cut thru echo test """
+        """run VCL IPv6 cut thru echo test"""
 
 
-        self.cut_thru_test("vcl_test_server",
-                           self.server_ipv6_args,
-                           "vcl_test_client",
-                           self.client_ipv6_echo_test_args)
+        self.cut_thru_test(
+            "vcl_test_server",
+            self.server_ipv6_args,
+            "vcl_test_client",
+            self.client_ipv6_echo_test_args,
+        )
 
     @unittest.skipUnless(config.extended, "part of extended tests")
     def test_vcl_ipv6_cut_thru_uni_dir_nsock(self):
 
     @unittest.skipUnless(config.extended, "part of extended tests")
     def test_vcl_ipv6_cut_thru_uni_dir_nsock(self):
-        """ run VCL IPv6 cut thru uni-directional (multiple sockets) test """
+        """run VCL IPv6 cut thru uni-directional (multiple sockets) test"""
 
         self.timeout = self.client_uni_dir_nsock_timeout
 
         self.timeout = self.client_uni_dir_nsock_timeout
-        self.cut_thru_test("vcl_test_server", self.server_ipv6_args,
-                           "vcl_test_client",
-                           self.client_ipv6_uni_dir_nsock_test_args)
+        self.cut_thru_test(
+            "vcl_test_server",
+            self.server_ipv6_args,
+            "vcl_test_client",
+            self.client_ipv6_uni_dir_nsock_test_args,
+        )
 
     @unittest.skipUnless(config.extended, "part of extended tests")
     def test_vcl_ipv6_cut_thru_bi_dir_nsock(self):
 
     @unittest.skipUnless(config.extended, "part of extended tests")
     def test_vcl_ipv6_cut_thru_bi_dir_nsock(self):
-        """ run VCL IPv6 cut thru bi-directional (multiple sockets) test """
+        """run VCL IPv6 cut thru bi-directional (multiple sockets) test"""
 
         self.timeout = self.client_bi_dir_nsock_timeout
 
         self.timeout = self.client_bi_dir_nsock_timeout
-        self.cut_thru_test("vcl_test_server", self.server_ipv6_args,
-                           "vcl_test_client",
-                           self.client_ipv6_bi_dir_nsock_test_args)
+        self.cut_thru_test(
+            "vcl_test_server",
+            self.server_ipv6_args,
+            "vcl_test_client",
+            self.client_ipv6_bi_dir_nsock_test_args,
+        )
 
 
 class VCLIpv6ThruHostStackEcho(VCLTestCase):
 
 
 class VCLIpv6ThruHostStackEcho(VCLTestCase):
-    """ VCL IPv6 Thru Host Stack Echo """
+    """VCL IPv6 Thru Host Stack Echo"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -982,22 +1192,29 @@ class VCLIpv6ThruHostStackEcho(VCLTestCase):
         super(VCLIpv6ThruHostStackEcho, self).setUp()
 
         self.thru_host_stack_ipv6_setup()
         super(VCLIpv6ThruHostStackEcho, self).setUp()
 
         self.thru_host_stack_ipv6_setup()
-        self.client_ipv6_echo_test_args = ["-6", "-E", self.echo_phrase, "-X",
-                                           self.loop0.local_ip6,
-                                           self.server_port]
+        self.client_ipv6_echo_test_args = [
+            "-6",
+            "-E",
+            self.echo_phrase,
+            "-X",
+            self.loop0.local_ip6,
+            self.server_port,
+        ]
 
     def tearDown(self):
         self.thru_host_stack_ipv6_tear_down()
         super(VCLIpv6ThruHostStackEcho, self).tearDown()
 
     def test_vcl_ipv6_thru_host_stack_echo(self):
 
     def tearDown(self):
         self.thru_host_stack_ipv6_tear_down()
         super(VCLIpv6ThruHostStackEcho, self).tearDown()
 
     def test_vcl_ipv6_thru_host_stack_echo(self):
-        """ run VCL IPv6 thru host stack echo test """
+        """run VCL IPv6 thru host stack echo test"""
 
 
-        self.thru_host_stack_test("vcl_test_server",
-                                  self.server_ipv6_args,
-                                  "vcl_test_client",
-                                  self.client_ipv6_echo_test_args)
+        self.thru_host_stack_test(
+            "vcl_test_server",
+            self.server_ipv6_args,
+            "vcl_test_client",
+            self.client_ipv6_echo_test_args,
+        )
 
 
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index aefae90..01e2151 100644 (file)
@@ -8,9 +8,8 @@ from vpp_vhost_interface import VppVhostInterface
 
 
 class TesVhostInterface(VppTestCase):
 
 
 class TesVhostInterface(VppTestCase):
-    """Vhost User Test Case
+    """Vhost User Test Case"""
 
 
-    """
     @classmethod
     def setUpClass(cls):
         super(TesVhostInterface, cls).setUpClass()
     @classmethod
     def setUpClass(cls):
         super(TesVhostInterface, cls).setUpClass()
@@ -27,23 +26,23 @@ class TesVhostInterface(VppTestCase):
                 self.vapi.delete_vhost_user_if(ifc.sw_if_index)
 
     def test_vhost(self):
                 self.vapi.delete_vhost_user_if(ifc.sw_if_index)
 
     def test_vhost(self):
-        """ Vhost User add/delete interface test """
+        """Vhost User add/delete interface test"""
         self.logger.info("Vhost User add interfaces")
 
         # create interface 1 (VirtualEthernet0/0/0)
         self.logger.info("Vhost User add interfaces")
 
         # create interface 1 (VirtualEthernet0/0/0)
-        vhost_if1 = VppVhostInterface(self, sock_filename='/tmp/sock1')
+        vhost_if1 = VppVhostInterface(self, sock_filename="/tmp/sock1")
         vhost_if1.add_vpp_config()
         vhost_if1.admin_up()
 
         # create interface 2 (VirtualEthernet0/0/1)
         vhost_if1.add_vpp_config()
         vhost_if1.admin_up()
 
         # create interface 2 (VirtualEthernet0/0/1)
-        vhost_if2 = VppVhostInterface(self, sock_filename='/tmp/sock2')
+        vhost_if2 = VppVhostInterface(self, sock_filename="/tmp/sock2")
         vhost_if2.add_vpp_config()
         vhost_if2.admin_up()
 
         # verify both interfaces in the show
         ifs = self.vapi.cli("show interface")
         vhost_if2.add_vpp_config()
         vhost_if2.admin_up()
 
         # verify both interfaces in the show
         ifs = self.vapi.cli("show interface")
-        self.assertIn('VirtualEthernet0/0/0', ifs)
-        self.assertIn('VirtualEthernet0/0/1', ifs)
+        self.assertIn("VirtualEthernet0/0/0", ifs)
+        self.assertIn("VirtualEthernet0/0/1", ifs)
 
         # verify they are in the dump also
         if_dump = self.vapi.sw_interface_vhost_user_dump()
 
         # verify they are in the dump also
         if_dump = self.vapi.sw_interface_vhost_user_dump()
@@ -58,10 +57,10 @@ class TesVhostInterface(VppTestCase):
 
         ifs = self.vapi.cli("show interface")
         # verify VirtualEthernet0/0/0 still in the show
 
         ifs = self.vapi.cli("show interface")
         # verify VirtualEthernet0/0/0 still in the show
-        self.assertIn('VirtualEthernet0/0/0', ifs)
+        self.assertIn("VirtualEthernet0/0/0", ifs)
 
         # verify VirtualEthernet0/0/1 not in the show
 
         # verify VirtualEthernet0/0/1 not in the show
-        self.assertNotIn('VirtualEthernet0/0/1', ifs)
+        self.assertNotIn("VirtualEthernet0/0/1", ifs)
 
         # verify VirtualEthernet0/0/1 is not in the dump
         if_dump = self.vapi.sw_interface_vhost_user_dump()
 
         # verify VirtualEthernet0/0/1 is not in the dump
         if_dump = self.vapi.sw_interface_vhost_user_dump()
@@ -78,14 +77,14 @@ class TesVhostInterface(VppTestCase):
 
         # verify VirtualEthernet0/0/0 not in the show
         ifs = self.vapi.cli("show interface")
 
         # verify VirtualEthernet0/0/0 not in the show
         ifs = self.vapi.cli("show interface")
-        self.assertNotIn('VirtualEthernet0/0/0', ifs)
+        self.assertNotIn("VirtualEthernet0/0/0", ifs)
 
         # verify VirtualEthernet0/0/0 is not in the dump
         if_dump = self.vapi.sw_interface_vhost_user_dump()
         self.assertFalse(vhost_if1.is_interface_config_in_dump(if_dump))
 
     def test_vhost_interface_state(self):
 
         # verify VirtualEthernet0/0/0 is not in the dump
         if_dump = self.vapi.sw_interface_vhost_user_dump()
         self.assertFalse(vhost_if1.is_interface_config_in_dump(if_dump))
 
     def test_vhost_interface_state(self):
-        """ Vhost User interface states and events test """
+        """Vhost User interface states and events test"""
 
         self.vapi.want_interface_events()
 
 
         self.vapi.want_interface_events()
 
@@ -93,7 +92,7 @@ class TesVhostInterface(VppTestCase):
         # (like delete interface events from other tests)
         self.vapi.collect_events()
 
         # (like delete interface events from other tests)
         self.vapi.collect_events()
 
-        vhost_if = VppVhostInterface(self, sock_filename='/tmp/sock1')
+        vhost_if = VppVhostInterface(self, sock_filename="/tmp/sock1")
 
         # create vhost interface
         vhost_if.add_vpp_config()
 
         # create vhost interface
         vhost_if.add_vpp_config()
@@ -111,8 +110,7 @@ class TesVhostInterface(VppTestCase):
         # delete vhost interface
         vhost_if.remove_vpp_config()
         event = self.vapi.wait_for_event(timeout=1)
         # delete vhost interface
         vhost_if.remove_vpp_config()
         event = self.vapi.wait_for_event(timeout=1)
-        self.assert_equal(event.sw_if_index, vhost_if.sw_if_index,
-                          "sw_if_index")
+        self.assert_equal(event.sw_if_index, vhost_if.sw_if_index, "sw_if_index")
         self.assert_equal(event.deleted, 1, "deleted flag")
 
         # verify there are no more events
         self.assert_equal(event.deleted, 1, "deleted flag")
 
         # verify there are no more events
@@ -120,32 +118,28 @@ class TesVhostInterface(VppTestCase):
         self.assert_equal(len(events), 0, "number of events")
 
     def test_vhost_interface_custom_mac_addr(self):
         self.assert_equal(len(events), 0, "number of events")
 
     def test_vhost_interface_custom_mac_addr(self):
-        """ Vhost User interface custom mac address test """
+        """Vhost User interface custom mac address test"""
 
         mac_addr = "aa:bb:cc:dd:ee:ff"
 
         mac_addr = "aa:bb:cc:dd:ee:ff"
-        vhost_if = VppVhostInterface(self,
-                                     sock_filename='/tmp/sock1',
-                                     use_custom_mac=1,
-                                     mac_address=mac_addr)
+        vhost_if = VppVhostInterface(
+            self, sock_filename="/tmp/sock1", use_custom_mac=1, mac_address=mac_addr
+        )
 
         # create vhost interface
         vhost_if.add_vpp_config()
         self.sleep(0.1)
 
         # verify mac in the dump
 
         # create vhost interface
         vhost_if.add_vpp_config()
         self.sleep(0.1)
 
         # verify mac in the dump
-        if_dump_list = self.vapi.sw_interface_dump(
-            sw_if_index=vhost_if.sw_if_index
-        )
+        if_dump_list = self.vapi.sw_interface_dump(sw_if_index=vhost_if.sw_if_index)
         self.assert_equal(len(if_dump_list), 1, "if dump length")
 
         [if_dump] = if_dump_list
         self.assert_equal(len(if_dump_list), 1, "if dump length")
 
         [if_dump] = if_dump_list
-        self.assert_equal(
-            if_dump.l2_address.mac_string, mac_addr, "MAC Address"
-        )
+        self.assert_equal(if_dump.l2_address.mac_string, mac_addr, "MAC Address")
 
         # delete VirtualEthernet
         self.logger.info("Deleting VirtualEthernet")
         vhost_if.remove_vpp_config()
 
 
         # delete VirtualEthernet
         self.logger.info("Deleting VirtualEthernet")
         vhost_if.remove_vpp_config()
 
-if __name__ == '__main__':
+
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index 242acab..76a55e6 100644 (file)
@@ -11,7 +11,8 @@ from vpp_ip_route import VppIpTable, VppIpRoute, VppRoutePath
 
 @unittest.skipUnless(config.gcov, "part of code coverage tests")
 class TestVlib(VppTestCase):
 
 @unittest.skipUnless(config.gcov, "part of code coverage tests")
 class TestVlib(VppTestCase):
-    """ Vlib Unit Test Cases """
+    """Vlib Unit Test Cases"""
+
     vpp_worker_count = 1
 
     @classmethod
     vpp_worker_count = 1
 
     @classmethod
@@ -29,171 +30,174 @@ class TestVlib(VppTestCase):
         super(TestVlib, self).tearDown()
 
     def test_vlib_main_unittest(self):
         super(TestVlib, self).tearDown()
 
     def test_vlib_main_unittest(self):
-        """ Vlib main.c Code Coverage Test """
-
-        cmds = ["loopback create",
-                "packet-generator new {\n"
-                " name vlib\n"
-                " limit 15\n"
-                " size 128-128\n"
-                " interface loop0\n"
-                " node ethernet-input\n"
-                " data {\n"
-                "   IP6: 00:d0:2d:5e:86:85 -> 00:0d:ea:d0:00:00\n"
-                "   ICMP: db00::1 -> db00::2\n"
-                "   incrementing 30\n"
-                "   }\n"
-                "}\n",
-                "event-logger trace dispatch",
-                "event-logger stop",
-                "event-logger clear",
-                "event-logger resize 102400",
-                "event-logger restart",
-                "pcap dispatch trace on max 100 buffer-trace pg-input 15",
-                "pa en",
-                "show event-log 100 all",
-                "event-log save",
-                "event-log save foo",
-                "pcap dispatch trace",
-                "pcap dispatch trace status",
-                "pcap dispatch trace off",
-                "show vlib frame-allocation",
-                ]
+        """Vlib main.c Code Coverage Test"""
+
+        cmds = [
+            "loopback create",
+            "packet-generator new {\n"
+            " name vlib\n"
+            " limit 15\n"
+            " size 128-128\n"
+            " interface loop0\n"
+            " node ethernet-input\n"
+            " data {\n"
+            "   IP6: 00:d0:2d:5e:86:85 -> 00:0d:ea:d0:00:00\n"
+            "   ICMP: db00::1 -> db00::2\n"
+            "   incrementing 30\n"
+            "   }\n"
+            "}\n",
+            "event-logger trace dispatch",
+            "event-logger stop",
+            "event-logger clear",
+            "event-logger resize 102400",
+            "event-logger restart",
+            "pcap dispatch trace on max 100 buffer-trace pg-input 15",
+            "pa en",
+            "show event-log 100 all",
+            "event-log save",
+            "event-log save foo",
+            "pcap dispatch trace",
+            "pcap dispatch trace status",
+            "pcap dispatch trace off",
+            "show vlib frame-allocation",
+        ]
 
         for cmd in cmds:
             r = self.vapi.cli_return_response(cmd)
             if r.retval != 0:
 
         for cmd in cmds:
             r = self.vapi.cli_return_response(cmd)
             if r.retval != 0:
-                if hasattr(r, 'reply'):
+                if hasattr(r, "reply"):
                     self.logger.info(cmd + " FAIL reply " + r.reply)
                 else:
                     self.logger.info(cmd + " FAIL retval " + str(r.retval))
 
     def test_vlib_node_cli_unittest(self):
                     self.logger.info(cmd + " FAIL reply " + r.reply)
                 else:
                     self.logger.info(cmd + " FAIL retval " + str(r.retval))
 
     def test_vlib_node_cli_unittest(self):
-        """ Vlib node_cli.c Code Coverage Test """
-
-        cmds = ["loopback create",
-                "packet-generator new {\n"
-                " name vlib\n"
-                " limit 15\n"
-                " size 128-128\n"
-                " interface loop0\n"
-                " node ethernet-input\n"
-                " data {\n"
-                "   IP6: 00:d0:2d:5e:86:85 -> 00:0d:ea:d0:00:00\n"
-                "   ICMP: db00::1 -> db00::2\n"
-                "   incrementing 30\n"
-                "   }\n"
-                "}\n",
-                "show vlib graph",
-                "show vlib graph ethernet-input",
-                "show vlib graphviz",
-                "show vlib graphviz graphviz.dot",
-                "pa en",
-                "show runtime ethernet-input",
-                "show runtime brief verbose max summary",
-                "clear runtime",
-                "show node index 1",
-                "show node ethernet-input",
-                "show node pg-input",
-                "set node function",
-                "set node function no-such-node",
-                "set node function cdp-input default",
-                "set node function ethernet-input default",
-                "set node function ethernet-input bozo",
-                "set node function ethernet-input",
-                "show \t",
-                ]
+        """Vlib node_cli.c Code Coverage Test"""
+
+        cmds = [
+            "loopback create",
+            "packet-generator new {\n"
+            " name vlib\n"
+            " limit 15\n"
+            " size 128-128\n"
+            " interface loop0\n"
+            " node ethernet-input\n"
+            " data {\n"
+            "   IP6: 00:d0:2d:5e:86:85 -> 00:0d:ea:d0:00:00\n"
+            "   ICMP: db00::1 -> db00::2\n"
+            "   incrementing 30\n"
+            "   }\n"
+            "}\n",
+            "show vlib graph",
+            "show vlib graph ethernet-input",
+            "show vlib graphviz",
+            "show vlib graphviz graphviz.dot",
+            "pa en",
+            "show runtime ethernet-input",
+            "show runtime brief verbose max summary",
+            "clear runtime",
+            "show node index 1",
+            "show node ethernet-input",
+            "show node pg-input",
+            "set node function",
+            "set node function no-such-node",
+            "set node function cdp-input default",
+            "set node function ethernet-input default",
+            "set node function ethernet-input bozo",
+            "set node function ethernet-input",
+            "show \t",
+        ]
 
         for cmd in cmds:
             r = self.vapi.cli_return_response(cmd)
             if r.retval != 0:
 
         for cmd in cmds:
             r = self.vapi.cli_return_response(cmd)
             if r.retval != 0:
-                if hasattr(r, 'reply'):
+                if hasattr(r, "reply"):
                     self.logger.info(cmd + " FAIL reply " + r.reply)
                 else:
                     self.logger.info(cmd + " FAIL retval " + str(r.retval))
 
     def test_vlib_buffer_c_unittest(self):
                     self.logger.info(cmd + " FAIL reply " + r.reply)
                 else:
                     self.logger.info(cmd + " FAIL retval " + str(r.retval))
 
     def test_vlib_buffer_c_unittest(self):
-        """ Vlib buffer.c Code Coverage Test """
-
-        cmds = ["loopback create",
-                "packet-generator new {\n"
-                " name vlib\n"
-                " limit 15\n"
-                " size 128-128\n"
-                " interface loop0\n"
-                " node ethernet-input\n"
-                " data {\n"
-                "   IP6: 00:d0:2d:5e:86:85 -> 00:0d:ea:d0:00:00\n"
-                "   ICMP: db00::1 -> db00::2\n"
-                "   incrementing 30\n"
-                "   }\n"
-                "}\n",
-                "event-logger trace",
-                "event-logger trace enable",
-                "event-logger trace api cli barrier",
-                "pa en",
-                "show interface bogus",
-                "event-logger trace disable api cli barrier",
-                "event-logger trace circuit-node ethernet-input",
-                "event-logger trace circuit-node ethernet-input disable",
-                "clear interfaces",
-                "test vlib",
-                "test vlib2",
-                "show memory api-segment stats-segment main-heap verbose",
-                "leak-check { show memory }",
-                "show cpu",
-                "memory-trace main-heap",
-                "memory-trace main-heap api-segment stats-segment",
-                "leak-check { show version }",
-                "show version ?",
-                "comment { show version }",
-                "uncomment { show version }",
-                "show memory main-heap",
-                "show memory bogus",
-                "choices",
-                "test heap-validate",
-                "memory-trace main-heap disable",
-                "show buffers",
-                "show eve",
-                "show help",
-                "show ip ",
-                ]
+        """Vlib buffer.c Code Coverage Test"""
+
+        cmds = [
+            "loopback create",
+            "packet-generator new {\n"
+            " name vlib\n"
+            " limit 15\n"
+            " size 128-128\n"
+            " interface loop0\n"
+            " node ethernet-input\n"
+            " data {\n"
+            "   IP6: 00:d0:2d:5e:86:85 -> 00:0d:ea:d0:00:00\n"
+            "   ICMP: db00::1 -> db00::2\n"
+            "   incrementing 30\n"
+            "   }\n"
+            "}\n",
+            "event-logger trace",
+            "event-logger trace enable",
+            "event-logger trace api cli barrier",
+            "pa en",
+            "show interface bogus",
+            "event-logger trace disable api cli barrier",
+            "event-logger trace circuit-node ethernet-input",
+            "event-logger trace circuit-node ethernet-input disable",
+            "clear interfaces",
+            "test vlib",
+            "test vlib2",
+            "show memory api-segment stats-segment main-heap verbose",
+            "leak-check { show memory }",
+            "show cpu",
+            "memory-trace main-heap",
+            "memory-trace main-heap api-segment stats-segment",
+            "leak-check { show version }",
+            "show version ?",
+            "comment { show version }",
+            "uncomment { show version }",
+            "show memory main-heap",
+            "show memory bogus",
+            "choices",
+            "test heap-validate",
+            "memory-trace main-heap disable",
+            "show buffers",
+            "show eve",
+            "show help",
+            "show ip ",
+        ]
 
         for cmd in cmds:
             r = self.vapi.cli_return_response(cmd)
             if r.retval != 0:
 
         for cmd in cmds:
             r = self.vapi.cli_return_response(cmd)
             if r.retval != 0:
-                if hasattr(r, 'reply'):
+                if hasattr(r, "reply"):
                     self.logger.info(cmd + " FAIL reply " + r.reply)
                 else:
                     self.logger.info(cmd + " FAIL retval " + str(r.retval))
 
     def test_vlib_format_unittest(self):
                     self.logger.info(cmd + " FAIL reply " + r.reply)
                 else:
                     self.logger.info(cmd + " FAIL retval " + str(r.retval))
 
     def test_vlib_format_unittest(self):
-        """ Vlib format.c Code Coverage Test """
+        """Vlib format.c Code Coverage Test"""
 
 
-        cmds = ["loopback create",
-                "classify filter pcap mask l2 proto match l2 proto 0x86dd",
-                "classify filter pcap del",
-                "test format-vlib",
-                ]
+        cmds = [
+            "loopback create",
+            "classify filter pcap mask l2 proto match l2 proto 0x86dd",
+            "classify filter pcap del",
+            "test format-vlib",
+        ]
 
         for cmd in cmds:
             r = self.vapi.cli_return_response(cmd)
             if r.retval != 0:
 
         for cmd in cmds:
             r = self.vapi.cli_return_response(cmd)
             if r.retval != 0:
-                if hasattr(r, 'reply'):
+                if hasattr(r, "reply"):
                     self.logger.info(cmd + " FAIL reply " + r.reply)
                 else:
                     self.logger.info(cmd + " FAIL retval " + str(r.retval))
 
     def test_vlib_main_unittest(self):
                     self.logger.info(cmd + " FAIL reply " + r.reply)
                 else:
                     self.logger.info(cmd + " FAIL retval " + str(r.retval))
 
     def test_vlib_main_unittest(self):
-        """ Private Binary API Segment Test (takes 70 seconds) """
+        """Private Binary API Segment Test (takes 70 seconds)"""
 
 
-        vat_path = config.vpp + '_api_test'
-        vat = pexpect.spawn(vat_path, ['socket-name',
-                                       self.get_api_sock_path()])
+        vat_path = config.vpp + "_api_test"
+        vat = pexpect.spawn(vat_path, ["socket-name", self.get_api_sock_path()])
         vat.expect("vat# ", timeout=10)
         vat.expect("vat# ", timeout=10)
-        vat.sendline('sock_init_shm')
+        vat.sendline("sock_init_shm")
         vat.expect("vat# ", timeout=10)
         vat.expect("vat# ", timeout=10)
-        vat.sendline('sh api cli')
+        vat.sendline("sh api cli")
         vat.kill(signal.SIGKILL)
         vat.wait()
         self.logger.info("vat terminated, 70 second wait for the Reaper")
         vat.kill(signal.SIGKILL)
         vat.wait()
         self.logger.info("vat terminated, 70 second wait for the Reaper")
@@ -201,18 +205,20 @@ class TestVlib(VppTestCase):
         self.logger.info("Reaper should be complete...")
 
     def test_pool(self):
         self.logger.info("Reaper should be complete...")
 
     def test_pool(self):
-        """ Fixed-size Pool Test """
+        """Fixed-size Pool Test"""
 
 
-        cmds = ["test pool",
-                ]
+        cmds = [
+            "test pool",
+        ]
 
         for cmd in cmds:
             r = self.vapi.cli_return_response(cmd)
             if r.retval != 0:
 
         for cmd in cmds:
             r = self.vapi.cli_return_response(cmd)
             if r.retval != 0:
-                if hasattr(r, 'reply'):
+                if hasattr(r, "reply"):
                     self.logger.info(cmd + " FAIL reply " + r.reply)
                 else:
                     self.logger.info(cmd + " FAIL retval " + str(r.retval))
 
                     self.logger.info(cmd + " FAIL reply " + r.reply)
                 else:
                     self.logger.info(cmd + " FAIL retval " + str(r.retval))
 
-if __name__ == '__main__':
+
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index 54f7e41..d7d4cc7 100644 (file)
@@ -23,33 +23,33 @@ class TestVpeApi(VppTestCase):
     """TestVpeApi"""
 
     def test_log_dump_default(self):
     """TestVpeApi"""
 
     def test_log_dump_default(self):
-        rv = self.vapi.cli('test log notice fib entry this is a test')
+        rv = self.vapi.cli("test log notice fib entry this is a test")
         rv = self.vapi.log_dump()
         if enable_print:
         rv = self.vapi.log_dump()
         if enable_print:
-            print('\n'.join([str(v) for v in rv]))
+            print("\n".join([str(v) for v in rv]))
         self.assertTrue(rv)
 
     def test_log_dump_timestamp_0(self):
         self.assertTrue(rv)
 
     def test_log_dump_timestamp_0(self):
-        rv = self.vapi.cli('test log notice fib entry this is a test')
+        rv = self.vapi.cli("test log notice fib entry this is a test")
         rv = self.vapi.log_dump(start_timestamp=0.0)
         if enable_print:
         rv = self.vapi.log_dump(start_timestamp=0.0)
         if enable_print:
-            print('\n'.join([str(v) for v in rv]))
+            print("\n".join([str(v) for v in rv]))
         self.assertTrue(rv)
 
     def test_log_dump_timestamp_future(self):
         self.assertTrue(rv)
 
     def test_log_dump_timestamp_future(self):
-        rv = self.vapi.cli('test log debug fib entry test')
+        rv = self.vapi.cli("test log debug fib entry test")
         rv = self.vapi.log_dump(start_timestamp=time.time() + 60.0)
         if enable_print:
         rv = self.vapi.log_dump(start_timestamp=time.time() + 60.0)
         if enable_print:
-            print('\n'.join([str(v) for v in rv]))
+            print("\n".join([str(v) for v in rv]))
         self.assertFalse(rv)
 
     def test_show_vpe_system_time(self):
         local_start_time = datetime.datetime.now()
         rv = self.vapi.show_vpe_system_time()
         self.assertFalse(rv)
 
     def test_show_vpe_system_time(self):
         local_start_time = datetime.datetime.now()
         rv = self.vapi.show_vpe_system_time()
-        self.assertTrue(rv.vpe_system_time > local_start_time -
-                        datetime.timedelta(hours=1.0),
-                        'system times differ by more than an hour.')
+        self.assertTrue(
+            rv.vpe_system_time > local_start_time - datetime.timedelta(hours=1.0),
+            "system times differ by more than an hour.",
+        )
         if enable_print:
         if enable_print:
-            print('\n'.join([str(v) for v in rv]))
-            print('%r %s' % (rv.vpe_system_time,
-                             rv.vpe_system_time))
+            print("\n".join([str(v) for v in rv]))
+            print("%r %s" % (rv.vpe_system_time, rv.vpe_system_time))
index 36cd55b..3a8f8e9 100644 (file)
@@ -6,7 +6,8 @@ from framework import VppTestCase, VppTestRunner
 
 
 class TestVppinfra(VppTestCase):
 
 
 class TestVppinfra(VppTestCase):
-    """ Vppinfra Unit Test Cases """
+    """Vppinfra Unit Test Cases"""
+
     vpp_worker_count = 1
 
     @classmethod
     vpp_worker_count = 1
 
     @classmethod
@@ -24,16 +25,17 @@ class TestVppinfra(VppTestCase):
         super(TestVppinfra, self).tearDown()
 
     def test_bitmap_unittest(self):
         super(TestVppinfra, self).tearDown()
 
     def test_bitmap_unittest(self):
-        """ Bitmap Code Coverage Test """
+        """Bitmap Code Coverage Test"""
         cmds = ["test bitmap"]
 
         for cmd in cmds:
             r = self.vapi.cli_return_response(cmd)
             if r.retval != 0:
         cmds = ["test bitmap"]
 
         for cmd in cmds:
             r = self.vapi.cli_return_response(cmd)
             if r.retval != 0:
-                if hasattr(r, 'reply'):
+                if hasattr(r, "reply"):
                     self.logger.info(cmd + " FAIL reply " + r.reply)
                 else:
                     self.logger.info(cmd + " FAIL retval " + str(r.retval))
 
                     self.logger.info(cmd + " FAIL reply " + r.reply)
                 else:
                     self.logger.info(cmd + " FAIL retval " + str(r.retval))
 
-if __name__ == '__main__':
+
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index 6a62a88..9319b0f 100644 (file)
@@ -17,9 +17,18 @@ from vpp_papi import VppEnum
 from scapy.packet import raw
 from scapy.layers.l2 import Ether, ARP
 from scapy.layers.inet import IP, ICMP, icmptypes
 from scapy.packet import raw
 from scapy.layers.l2 import Ether, ARP
 from scapy.layers.inet import IP, ICMP, icmptypes
-from scapy.layers.inet6 import IPv6, ipv6nh, IPv6ExtHdrHopByHop, \
-    ICMPv6MLReport2, ICMPv6ND_NA, ICMPv6ND_NS, ICMPv6NDOptDstLLAddr, \
-    ICMPv6NDOptSrcLLAddr, ICMPv6EchoRequest, ICMPv6EchoReply
+from scapy.layers.inet6 import (
+    IPv6,
+    ipv6nh,
+    IPv6ExtHdrHopByHop,
+    ICMPv6MLReport2,
+    ICMPv6ND_NA,
+    ICMPv6ND_NS,
+    ICMPv6NDOptDstLLAddr,
+    ICMPv6NDOptSrcLLAddr,
+    ICMPv6EchoRequest,
+    ICMPv6EchoReply,
+)
 from scapy.contrib.igmpv3 import IGMPv3, IGMPv3mr, IGMPv3gr
 from scapy.layers.vrrp import IPPROTO_VRRP, VRRPv3
 from scapy.utils6 import in6_getnsma, in6_getnsmac
 from scapy.contrib.igmpv3 import IGMPv3, IGMPv3mr, IGMPv3gr
 from scapy.layers.vrrp import IPPROTO_VRRP, VRRPv3
 from scapy.utils6 import in6_getnsma, in6_getnsmac
@@ -37,11 +46,11 @@ VRRP_VR_STATE_BACKUP = 1
 VRRP_VR_STATE_MASTER = 2
 VRRP_VR_STATE_INTF_DOWN = 3
 
 VRRP_VR_STATE_MASTER = 2
 VRRP_VR_STATE_INTF_DOWN = 3
 
-VRRP_INDEX_INVALID = 0xffffffff
+VRRP_INDEX_INVALID = 0xFFFFFFFF
 
 
 def is_non_arp(p):
 
 
 def is_non_arp(p):
-    """ Want to filter out advertisements, igmp, etc"""
+    """Want to filter out advertisements, igmp, etc"""
     if p.haslayer(ARP):
         return False
 
     if p.haslayer(ARP):
         return False
 
@@ -49,7 +58,7 @@ def is_non_arp(p):
 
 
 def is_not_adv(p):
 
 
 def is_not_adv(p):
-    """ Filter out everything but advertisements. E.g. multicast RD/ND """
+    """Filter out everything but advertisements. E.g. multicast RD/ND"""
     if p.haslayer(VRRPv3):
         return False
 
     if p.haslayer(VRRPv3):
         return False
 
@@ -57,7 +66,7 @@ def is_not_adv(p):
 
 
 def is_not_echo_reply(p):
 
 
 def is_not_echo_reply(p):
-    """ filter out advertisements and other while waiting for echo reply """
+    """filter out advertisements and other while waiting for echo reply"""
     if p.haslayer(IP) and p.haslayer(ICMP):
         if icmptypes[p[ICMP].type] == "echo-reply":
             return False
     if p.haslayer(IP) and p.haslayer(ICMP):
         if icmptypes[p[ICMP].type] == "echo-reply":
             return False
@@ -68,15 +77,16 @@ def is_not_echo_reply(p):
 
 
 class VppVRRPVirtualRouter(VppObject):
 
 
 class VppVRRPVirtualRouter(VppObject):
-
-    def __init__(self,
-                 test,
-                 intf,
-                 vr_id,
-                 prio=100,
-                 intvl=100,
-                 flags=VRRP_VR_FLAG_PREEMPT,
-                 vips=None):
+    def __init__(
+        self,
+        test,
+        intf,
+        vr_id,
+        prio=100,
+        intvl=100,
+        flags=VRRP_VR_FLAG_PREEMPT,
+        vips=None,
+    ):
         self._test = test
         self._intf = intf
         self._sw_if_index = self._intf.sw_if_index
         self._test = test
         self._intf = intf
         self._sw_if_index = self._intf.sw_if_index
@@ -84,40 +94,44 @@ class VppVRRPVirtualRouter(VppObject):
         self._prio = prio
         self._intvl = intvl
         self._flags = flags
         self._prio = prio
         self._intvl = intvl
         self._flags = flags
-        if (flags & VRRP_VR_FLAG_IPV6):
+        if flags & VRRP_VR_FLAG_IPV6:
             self._is_ipv6 = 1
             self._adv_dest_mac = "33:33:00:00:00:12"
             self._virtual_mac = "00:00:5e:00:02:%02x" % vr_id
             self._adv_dest_ip = "ff02::12"
             self._is_ipv6 = 1
             self._adv_dest_mac = "33:33:00:00:00:12"
             self._virtual_mac = "00:00:5e:00:02:%02x" % vr_id
             self._adv_dest_ip = "ff02::12"
-            self._vips = ([intf.local_ip6] if vips is None else vips)
+            self._vips = [intf.local_ip6] if vips is None else vips
         else:
             self._is_ipv6 = 0
             self._adv_dest_mac = "01:00:5e:00:00:12"
             self._virtual_mac = "00:00:5e:00:01:%02x" % vr_id
             self._adv_dest_ip = "224.0.0.18"
         else:
             self._is_ipv6 = 0
             self._adv_dest_mac = "01:00:5e:00:00:12"
             self._virtual_mac = "00:00:5e:00:01:%02x" % vr_id
             self._adv_dest_ip = "224.0.0.18"
-            self._vips = ([intf.local_ip4] if vips is None else vips)
+            self._vips = [intf.local_ip4] if vips is None else vips
         self._tracked_ifs = []
         self._vrrp_index = VRRP_INDEX_INVALID
 
     def add_vpp_config(self):
         self._tracked_ifs = []
         self._vrrp_index = VRRP_INDEX_INVALID
 
     def add_vpp_config(self):
-        self._test.vapi.vrrp_vr_add_del(is_add=1,
-                                        sw_if_index=self._intf.sw_if_index,
-                                        vr_id=self._vr_id,
-                                        priority=self._prio,
-                                        interval=self._intvl,
-                                        flags=self._flags,
-                                        n_addrs=len(self._vips),
-                                        addrs=self._vips)
+        self._test.vapi.vrrp_vr_add_del(
+            is_add=1,
+            sw_if_index=self._intf.sw_if_index,
+            vr_id=self._vr_id,
+            priority=self._prio,
+            interval=self._intvl,
+            flags=self._flags,
+            n_addrs=len(self._vips),
+            addrs=self._vips,
+        )
 
     def update_vpp_config(self):
 
     def update_vpp_config(self):
-        r = self._test.vapi.vrrp_vr_update(vrrp_index=self._vrrp_index,
-                                           sw_if_index=self._intf.sw_if_index,
-                                           vr_id=self._vr_id,
-                                           priority=self._prio,
-                                           interval=self._intvl,
-                                           flags=self._flags,
-                                           n_addrs=len(self._vips),
-                                           addrs=self._vips)
+        r = self._test.vapi.vrrp_vr_update(
+            vrrp_index=self._vrrp_index,
+            sw_if_index=self._intf.sw_if_index,
+            vr_id=self._vr_id,
+            priority=self._prio,
+            interval=self._intvl,
+            flags=self._flags,
+            n_addrs=len(self._vips),
+            addrs=self._vips,
+        )
         self._vrrp_index = r.vrrp_index
 
     def delete_vpp_config(self):
         self._vrrp_index = r.vrrp_index
 
     def delete_vpp_config(self):
@@ -129,7 +143,7 @@ class VppVRRPVirtualRouter(VppObject):
             if vr.config.vr_id != self._vr_id:
                 continue
 
             if vr.config.vr_id != self._vr_id:
                 continue
 
-            is_ipv6 = (1 if (vr.config.flags & VRRP_VR_FLAG_IPV6) else 0)
+            is_ipv6 = 1 if (vr.config.flags & VRRP_VR_FLAG_IPV6) else 0
             if is_ipv6 != self._is_ipv6:
                 continue
 
             if is_ipv6 != self._is_ipv6:
                 continue
 
@@ -138,41 +152,45 @@ class VppVRRPVirtualRouter(VppObject):
         return None
 
     def remove_vpp_config(self):
         return None
 
     def remove_vpp_config(self):
-        self._test.vapi.vrrp_vr_add_del(is_add=0,
-                                        sw_if_index=self._intf.sw_if_index,
-                                        vr_id=self._vr_id,
-                                        priority=self._prio,
-                                        interval=self._intvl,
-                                        flags=self._flags,
-                                        n_addrs=len(self._vips),
-                                        addrs=self._vips)
+        self._test.vapi.vrrp_vr_add_del(
+            is_add=0,
+            sw_if_index=self._intf.sw_if_index,
+            vr_id=self._vr_id,
+            priority=self._prio,
+            interval=self._intvl,
+            flags=self._flags,
+            n_addrs=len(self._vips),
+            addrs=self._vips,
+        )
 
     def start_stop(self, is_start):
 
     def start_stop(self, is_start):
-        self._test.vapi.vrrp_vr_start_stop(is_start=is_start,
-                                           sw_if_index=self._intf.sw_if_index,
-                                           vr_id=self._vr_id,
-                                           is_ipv6=self._is_ipv6)
-        self._start_time = (time.time() if is_start else None)
+        self._test.vapi.vrrp_vr_start_stop(
+            is_start=is_start,
+            sw_if_index=self._intf.sw_if_index,
+            vr_id=self._vr_id,
+            is_ipv6=self._is_ipv6,
+        )
+        self._start_time = time.time() if is_start else None
 
     def add_del_tracked_interface(self, is_add, sw_if_index, prio):
         args = {
 
     def add_del_tracked_interface(self, is_add, sw_if_index, prio):
         args = {
-            'sw_if_index': self._intf.sw_if_index,
-            'is_ipv6': self._is_ipv6,
-            'vr_id': self._vr_id,
-            'is_add': is_add,
-            'n_ifs': 1,
-            'ifs': [{'sw_if_index': sw_if_index, 'priority': prio}]
+            "sw_if_index": self._intf.sw_if_index,
+            "is_ipv6": self._is_ipv6,
+            "vr_id": self._vr_id,
+            "is_add": is_add,
+            "n_ifs": 1,
+            "ifs": [{"sw_if_index": sw_if_index, "priority": prio}],
         }
         self._test.vapi.vrrp_vr_track_if_add_del(**args)
         }
         self._test.vapi.vrrp_vr_track_if_add_del(**args)
-        self._tracked_ifs.append(args['ifs'][0])
+        self._tracked_ifs.append(args["ifs"][0])
 
     def set_unicast_peers(self, addrs):
         args = {
 
     def set_unicast_peers(self, addrs):
         args = {
-            'sw_if_index': self._intf.sw_if_index,
-            'is_ipv6': self._is_ipv6,
-            'vr_id': self._vr_id,
-            'n_addrs': len(addrs),
-            'addrs': addrs
+            "sw_if_index": self._intf.sw_if_index,
+            "is_ipv6": self._is_ipv6,
+            "vr_id": self._vr_id,
+            "n_addrs": len(addrs),
+            "addrs": addrs,
         }
         self._test.vapi.vrrp_vr_set_peers(**args)
         self._unicast_peers = addrs
         }
         self._test.vapi.vrrp_vr_set_peers(**args)
         self._unicast_peers = addrs
@@ -210,21 +228,22 @@ class VppVRRPVirtualRouter(VppObject):
 
     def master_down_seconds(self):
         vr_details = self.query_vpp_config()
 
     def master_down_seconds(self):
         vr_details = self.query_vpp_config()
-        return (vr_details.runtime.master_down_int * 0.01)
+        return vr_details.runtime.master_down_int * 0.01
 
     def vrrp_adv_packet(self, prio=None, src_ip=None):
         dst_ip = self._adv_dest_ip
         if prio is None:
             prio = self._prio
         eth = Ether(dst=self._adv_dest_mac, src=self._virtual_mac)
 
     def vrrp_adv_packet(self, prio=None, src_ip=None):
         dst_ip = self._adv_dest_ip
         if prio is None:
             prio = self._prio
         eth = Ether(dst=self._adv_dest_mac, src=self._virtual_mac)
-        vrrp = VRRPv3(vrid=self._vr_id, priority=prio,
-                      ipcount=len(self._vips), adv=self._intvl)
+        vrrp = VRRPv3(
+            vrid=self._vr_id, priority=prio, ipcount=len(self._vips), adv=self._intvl
+        )
         if self._is_ipv6:
         if self._is_ipv6:
-            src_ip = (self._intf.local_ip6_ll if src_ip is None else src_ip)
+            src_ip = self._intf.local_ip6_ll if src_ip is None else src_ip
             ip = IPv6(src=src_ip, dst=dst_ip, nh=IPPROTO_VRRP, hlim=255)
             vrrp.addrlist = self._vips
         else:
             ip = IPv6(src=src_ip, dst=dst_ip, nh=IPPROTO_VRRP, hlim=255)
             vrrp.addrlist = self._vips
         else:
-            src_ip = (self._intf.local_ip4 if src_ip is None else src_ip)
+            src_ip = self._intf.local_ip4 if src_ip is None else src_ip
             ip = IP(src=src_ip, dst=dst_ip, proto=IPPROTO_VRRP, ttl=255, id=0)
             vrrp.addrlist = self._vips
 
             ip = IP(src=src_ip, dst=dst_ip, proto=IPPROTO_VRRP, ttl=255, id=0)
             vrrp.addrlist = self._vips
 
@@ -234,7 +253,7 @@ class VppVRRPVirtualRouter(VppObject):
 
 
 class TestVRRP4(VppTestCase):
 
 
 class TestVRRP4(VppTestCase):
-    """ IPv4 VRRP Test Case """
+    """IPv4 VRRP Test Case"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -284,8 +303,7 @@ class TestVRRP4(VppTestCase):
         self.assertEqual(ip.proto, 2)
 
         igmp = pkt[IGMPv3]
         self.assertEqual(ip.proto, 2)
 
         igmp = pkt[IGMPv3]
-        self.assertEqual(IGMPv3.igmpv3types[igmp.type],
-                         "Version 3 Membership Report")
+        self.assertEqual(IGMPv3.igmpv3types[igmp.type], "Version 3 Membership Report")
 
         igmpmr = pkt[IGMPv3mr]
         self.assertEqual(igmpmr.numgrp, 1)
 
         igmpmr = pkt[IGMPv3mr]
         self.assertEqual(igmpmr.numgrp, 1)
@@ -330,15 +348,15 @@ class TestVRRP4(VppTestCase):
     # become master and start advertising immediately.
     @unittest.skipUnless(config.extended, "part of extended tests")
     def test_vrrp4_master_adv(self):
     # become master and start advertising immediately.
     @unittest.skipUnless(config.extended, "part of extended tests")
     def test_vrrp4_master_adv(self):
-        """ IPv4 Master VR advertises """
+        """IPv4 Master VR advertises"""
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
         prio = 255
         intvl = self._default_adv
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
         prio = 255
         intvl = self._default_adv
-        vr = VppVRRPVirtualRouter(self, self.pg0, 100,
-                                  prio=prio, intvl=intvl,
-                                  flags=self._default_flags)
+        vr = VppVRRPVirtualRouter(
+            self, self.pg0, 100, prio=prio, intvl=intvl, flags=self._default_flags
+        )
 
         vr.add_vpp_config()
         vr.start_stop(is_start=1)
 
         vr.add_vpp_config()
         vr.start_stop(is_start=1)
@@ -362,25 +380,30 @@ class TestVRRP4(VppTestCase):
     # of parameters to test that too
     @unittest.skipUnless(config.extended, "part of extended tests")
     def test_vrrp4_master_adv_update(self):
     # of parameters to test that too
     @unittest.skipUnless(config.extended, "part of extended tests")
     def test_vrrp4_master_adv_update(self):
-        """ IPv4 Master VR adv + Update to Backup """
+        """IPv4 Master VR adv + Update to Backup"""
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
         prio = 255
         intvl = self._default_adv
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
         prio = 255
         intvl = self._default_adv
-        vr = VppVRRPVirtualRouter(self, self.pg0, 100,
-                                  prio=prio, intvl=intvl,
-                                  flags=self._default_flags)
+        vr = VppVRRPVirtualRouter(
+            self, self.pg0, 100, prio=prio, intvl=intvl, flags=self._default_flags
+        )
 
         vr.update_vpp_config()
         vr.start_stop(is_start=1)
         self.logger.info(self.vapi.cli("show vrrp vr"))
         # Update VR with lower prio and larger interval
         # we need to keep old VR for the adv checks
 
         vr.update_vpp_config()
         vr.start_stop(is_start=1)
         self.logger.info(self.vapi.cli("show vrrp vr"))
         # Update VR with lower prio and larger interval
         # we need to keep old VR for the adv checks
-        upd_vr = VppVRRPVirtualRouter(self, self.pg0, 100,
-                                      prio=100, intvl=2*intvl,
-                                      flags=self._default_flags,
-                                      vips=[self.pg0.remote_ip4])
+        upd_vr = VppVRRPVirtualRouter(
+            self,
+            self.pg0,
+            100,
+            prio=100,
+            intvl=2 * intvl,
+            flags=self._default_flags,
+            vips=[self.pg0.remote_ip4],
+        )
         upd_vr._vrrp_index = vr._vrrp_index
         upd_vr.update_vpp_config()
         start_time = time.time()
         upd_vr._vrrp_index = vr._vrrp_index
         upd_vr.update_vpp_config()
         start_time = time.time()
@@ -403,7 +426,7 @@ class TestVRRP4(VppTestCase):
         src_ip = self.pg0.remote_ip4
         pkts = [upd_vr.vrrp_adv_packet(prio=110, src_ip=src_ip)]
         while time.time() < end_time:
         src_ip = self.pg0.remote_ip4
         pkts = [upd_vr.vrrp_adv_packet(prio=110, src_ip=src_ip)]
         while time.time() < end_time:
-            self.send_and_assert_no_replies(self.pg0, pkts, timeout=intvl*0.01)
+            self.send_and_assert_no_replies(self.pg0, pkts, timeout=intvl * 0.01)
             self.logger.info(self.vapi.cli("show trace"))
 
         upd_vr.start_stop(is_start=0)
             self.logger.info(self.vapi.cli("show trace"))
 
         upd_vr.start_stop(is_start=0)
@@ -413,7 +436,7 @@ class TestVRRP4(VppTestCase):
     # long as it receives higher priority advertisements
     @unittest.skipUnless(config.extended, "part of extended tests")
     def test_vrrp4_backup_noadv(self):
     # long as it receives higher priority advertisements
     @unittest.skipUnless(config.extended, "part of extended tests")
     def test_vrrp4_backup_noadv(self):
-        """ IPv4 Backup VR does not advertise """
+        """IPv4 Backup VR does not advertise"""
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
@@ -421,10 +444,15 @@ class TestVRRP4(VppTestCase):
         prio = 100
         intvl = self._default_adv
         intvl_s = intvl * 0.01
         prio = 100
         intvl = self._default_adv
         intvl_s = intvl * 0.01
-        vr = VppVRRPVirtualRouter(self, self.pg0, vr_id,
-                                  prio=prio, intvl=intvl,
-                                  flags=self._default_flags,
-                                  vips=[self.pg0.remote_ip4])
+        vr = VppVRRPVirtualRouter(
+            self,
+            self.pg0,
+            vr_id,
+            prio=prio,
+            intvl=intvl,
+            flags=self._default_flags,
+            vips=[self.pg0.remote_ip4],
+        )
         self._vrs.append(vr)
         vr.add_vpp_config()
 
         self._vrs.append(vr)
         vr.add_vpp_config()
 
@@ -440,7 +468,7 @@ class TestVRRP4(VppTestCase):
 
         # send higher prio advertisements, should not receive any
         src_ip = self.pg0.remote_ip4
 
         # send higher prio advertisements, should not receive any
         src_ip = self.pg0.remote_ip4
-        pkts = [vr.vrrp_adv_packet(prio=prio+10, src_ip=src_ip)]
+        pkts = [vr.vrrp_adv_packet(prio=prio + 10, src_ip=src_ip)]
         while time.time() < end_time:
             self.send_and_assert_no_replies(self.pg0, pkts, timeout=intvl_s)
             self.logger.info(self.vapi.cli("show trace"))
         while time.time() < end_time:
             self.send_and_assert_no_replies(self.pg0, pkts, timeout=intvl_s)
             self.logger.info(self.vapi.cli("show trace"))
@@ -451,16 +479,16 @@ class TestVRRP4(VppTestCase):
         self._vrs = []
 
     def test_vrrp4_master_arp(self):
         self._vrs = []
 
     def test_vrrp4_master_arp(self):
-        """ IPv4 Master VR replies to ARP """
+        """IPv4 Master VR replies to ARP"""
         self.pg_start()
 
         # VR virtual IP is the default, which is the pg local IP
         vr_id = 100
         prio = 255
         intvl = self._default_adv
         self.pg_start()
 
         # VR virtual IP is the default, which is the pg local IP
         vr_id = 100
         prio = 255
         intvl = self._default_adv
-        vr = VppVRRPVirtualRouter(self, self.pg0, 100,
-                                  prio=prio, intvl=intvl,
-                                  flags=self._default_flags)
+        vr = VppVRRPVirtualRouter(
+            self, self.pg0, 100, prio=prio, intvl=intvl, flags=self._default_flags
+        )
         self._vrs.append(vr)
 
         vr.add_vpp_config()
         self._vrs.append(vr)
 
         vr.add_vpp_config()
@@ -484,7 +512,7 @@ class TestVRRP4(VppTestCase):
 
     @unittest.skipUnless(config.extended, "part of extended tests")
     def test_vrrp4_backup_noarp(self):
 
     @unittest.skipUnless(config.extended, "part of extended tests")
     def test_vrrp4_backup_noarp(self):
-        """ IPv4 Backup VR ignores ARP """
+        """IPv4 Backup VR ignores ARP"""
         # We need an address for a virtual IP that is not the IP that
         # ARP requests will originate from
 
         # We need an address for a virtual IP that is not the IP that
         # ARP requests will originate from
 
@@ -492,16 +520,24 @@ class TestVRRP4(VppTestCase):
         prio = 100
         intvl = self._default_adv
         vip = self.pg0.remote_hosts[1].ip4
         prio = 100
         intvl = self._default_adv
         vip = self.pg0.remote_hosts[1].ip4
-        vr = VppVRRPVirtualRouter(self, self.pg0, vr_id,
-                                  prio=prio, intvl=intvl,
-                                  flags=self._default_flags,
-                                  vips=[vip])
+        vr = VppVRRPVirtualRouter(
+            self,
+            self.pg0,
+            vr_id,
+            prio=prio,
+            intvl=intvl,
+            flags=self._default_flags,
+            vips=[vip],
+        )
         self._vrs.append(vr)
         vr.add_vpp_config()
 
         self._vrs.append(vr)
         vr.add_vpp_config()
 
-        arp_req = (Ether(dst="ff:ff:ff:ff:ff:ff", src=self.pg0.remote_mac) /
-                   ARP(op=ARP.who_has, pdst=vip,
-                   psrc=self.pg0.remote_ip4, hwsrc=self.pg0.remote_mac))
+        arp_req = Ether(dst="ff:ff:ff:ff:ff:ff", src=self.pg0.remote_mac) / ARP(
+            op=ARP.who_has,
+            pdst=vip,
+            psrc=self.pg0.remote_ip4,
+            hwsrc=self.pg0.remote_mac,
+        )
 
         # Before the VR is started make sure no reply to request for VIP
         self.pg_start()
 
         # Before the VR is started make sure no reply to request for VIP
         self.pg_start()
@@ -510,7 +546,7 @@ class TestVRRP4(VppTestCase):
 
         # VR should start in backup state and still should not reply to ARP
         # send a higher priority adv to make sure it does not become master
 
         # VR should start in backup state and still should not reply to ARP
         # send a higher priority adv to make sure it does not become master
-        adv = vr.vrrp_adv_packet(prio=prio+10, src_ip=self.pg0.remote_ip4)
+        adv = vr.vrrp_adv_packet(prio=prio + 10, src_ip=self.pg0.remote_ip4)
         vr.start_stop(is_start=1)
         self.send_and_assert_no_replies(self.pg0, [adv, arp_req], timeout=1)
 
         vr.start_stop(is_start=1)
         self.send_and_assert_no_replies(self.pg0, [adv, arp_req], timeout=1)
 
@@ -520,17 +556,22 @@ class TestVRRP4(VppTestCase):
 
     @unittest.skipUnless(config.extended, "part of extended tests")
     def test_vrrp4_election(self):
 
     @unittest.skipUnless(config.extended, "part of extended tests")
     def test_vrrp4_election(self):
-        """ IPv4 Backup VR becomes master if no advertisements received """
+        """IPv4 Backup VR becomes master if no advertisements received"""
 
         vr_id = 100
         prio = 100
         intvl = self._default_adv
         intvl_s = intvl * 0.01
         vip = self.pg0.remote_ip4
 
         vr_id = 100
         prio = 100
         intvl = self._default_adv
         intvl_s = intvl * 0.01
         vip = self.pg0.remote_ip4
-        vr = VppVRRPVirtualRouter(self, self.pg0, vr_id,
-                                  prio=prio, intvl=intvl,
-                                  flags=self._default_flags,
-                                  vips=[vip])
+        vr = VppVRRPVirtualRouter(
+            self,
+            self.pg0,
+            vr_id,
+            prio=prio,
+            intvl=intvl,
+            flags=self._default_flags,
+            vips=[vip],
+        )
         self._vrs.append(vr)
         vr.add_vpp_config()
 
         self._vrs.append(vr)
         vr.add_vpp_config()
 
@@ -557,17 +598,22 @@ class TestVRRP4(VppTestCase):
 
     @unittest.skipUnless(config.extended, "part of extended tests")
     def test_vrrp4_backup_preempts(self):
 
     @unittest.skipUnless(config.extended, "part of extended tests")
     def test_vrrp4_backup_preempts(self):
-        """ IPv4 Backup VR preempts lower priority master """
+        """IPv4 Backup VR preempts lower priority master"""
 
         vr_id = 100
         prio = 100
         intvl = self._default_adv
         intvl_s = intvl * 0.01
         vip = self.pg0.remote_ip4
 
         vr_id = 100
         prio = 100
         intvl = self._default_adv
         intvl_s = intvl * 0.01
         vip = self.pg0.remote_ip4
-        vr = VppVRRPVirtualRouter(self, self.pg0, vr_id,
-                                  prio=prio, intvl=intvl,
-                                  flags=self._default_flags,
-                                  vips=[vip])
+        vr = VppVRRPVirtualRouter(
+            self,
+            self.pg0,
+            vr_id,
+            prio=prio,
+            intvl=intvl,
+            flags=self._default_flags,
+            vips=[vip],
+        )
         self._vrs.append(vr)
         vr.add_vpp_config()
 
         self._vrs.append(vr)
         vr.add_vpp_config()
 
@@ -583,7 +629,7 @@ class TestVRRP4(VppTestCase):
 
         # send lower prio advertisements until timer expires
         src_ip = self.pg0.remote_ip4
 
         # send lower prio advertisements until timer expires
         src_ip = self.pg0.remote_ip4
-        pkts = [vr.vrrp_adv_packet(prio=prio-10, src_ip=src_ip)]
+        pkts = [vr.vrrp_adv_packet(prio=prio - 10, src_ip=src_ip)]
         while time.time() + intvl_s < end_time:
             self.send_and_assert_no_replies(self.pg0, pkts, timeout=intvl_s)
             self.logger.info(self.vapi.cli("show trace"))
         while time.time() + intvl_s < end_time:
             self.send_and_assert_no_replies(self.pg0, pkts, timeout=intvl_s)
             self.logger.info(self.vapi.cli("show trace"))
@@ -595,7 +641,7 @@ class TestVRRP4(VppTestCase):
 
     @unittest.skipUnless(config.extended, "part of extended tests")
     def test_vrrp4_master_preempted(self):
 
     @unittest.skipUnless(config.extended, "part of extended tests")
     def test_vrrp4_master_preempted(self):
-        """ IPv4 Master VR preempted by higher priority backup """
+        """IPv4 Master VR preempted by higher priority backup"""
 
         # A prio 255 VR cannot be preempted so the prio has to be lower and
         # we have to wait for it to take over
 
         # A prio 255 VR cannot be preempted so the prio has to be lower and
         # we have to wait for it to take over
@@ -603,10 +649,15 @@ class TestVRRP4(VppTestCase):
         prio = 100
         intvl = self._default_adv
         vip = self.pg0.remote_ip4
         prio = 100
         intvl = self._default_adv
         vip = self.pg0.remote_ip4
-        vr = VppVRRPVirtualRouter(self, self.pg0, vr_id,
-                                  prio=prio, intvl=intvl,
-                                  flags=self._default_flags,
-                                  vips=[vip])
+        vr = VppVRRPVirtualRouter(
+            self,
+            self.pg0,
+            vr_id,
+            prio=prio,
+            intvl=intvl,
+            flags=self._default_flags,
+            vips=[vip],
+        )
         self._vrs.append(vr)
         vr.add_vpp_config()
 
         self._vrs.append(vr)
         vr.add_vpp_config()
 
@@ -632,7 +683,7 @@ class TestVRRP4(VppTestCase):
 
     @unittest.skipUnless(config.extended, "part of extended tests")
     def test_vrrp4_accept_mode_disabled(self):
 
     @unittest.skipUnless(config.extended, "part of extended tests")
     def test_vrrp4_accept_mode_disabled(self):
-        """ IPv4 Master VR does not reply for VIP w/ accept mode off """
+        """IPv4 Master VR does not reply for VIP w/ accept mode off"""
 
         # accept mode only matters when prio < 255, so it will have to
         # come up as a backup and take over as master after the timeout
 
         # accept mode only matters when prio < 255, so it will have to
         # come up as a backup and take over as master after the timeout
@@ -640,10 +691,15 @@ class TestVRRP4(VppTestCase):
         prio = 100
         intvl = self._default_adv
         vip = self.pg0.remote_hosts[4].ip4
         prio = 100
         intvl = self._default_adv
         vip = self.pg0.remote_hosts[4].ip4
-        vr = VppVRRPVirtualRouter(self, self.pg0, vr_id,
-                                  prio=prio, intvl=intvl,
-                                  flags=self._default_flags,
-                                  vips=[vip])
+        vr = VppVRRPVirtualRouter(
+            self,
+            self.pg0,
+            vr_id,
+            prio=prio,
+            intvl=intvl,
+            flags=self._default_flags,
+            vips=[vip],
+        )
         self._vrs.append(vr)
         vr.add_vpp_config()
 
         self._vrs.append(vr)
         vr.add_vpp_config()
 
@@ -661,9 +717,11 @@ class TestVRRP4(VppTestCase):
         vr.assert_state_equals(VRRP_VR_STATE_MASTER)
 
         # send an ICMP echo to the VR virtual IP address
         vr.assert_state_equals(VRRP_VR_STATE_MASTER)
 
         # send an ICMP echo to the VR virtual IP address
-        echo = (Ether(dst=vr.virtual_mac(), src=self.pg0.remote_mac) /
-                IP(dst=vip, src=self.pg0.remote_ip4) /
-                ICMP(seq=1, id=self.pg0.sw_if_index, type='echo-request'))
+        echo = (
+            Ether(dst=vr.virtual_mac(), src=self.pg0.remote_mac)
+            / IP(dst=vip, src=self.pg0.remote_ip4)
+            / ICMP(seq=1, id=self.pg0.sw_if_index, type="echo-request")
+        )
         self.pg_send(self.pg0, [echo])
 
         # wait for an echo reply. none should be received
         self.pg_send(self.pg0, [echo])
 
         # wait for an echo reply. none should be received
@@ -672,7 +730,7 @@ class TestVRRP4(VppTestCase):
 
     @unittest.skipUnless(config.extended, "part of extended tests")
     def test_vrrp4_accept_mode_enabled(self):
 
     @unittest.skipUnless(config.extended, "part of extended tests")
     def test_vrrp4_accept_mode_enabled(self):
-        """ IPv4 Master VR replies for VIP w/ accept mode on """
+        """IPv4 Master VR replies for VIP w/ accept mode on"""
 
         # A prio 255 VR cannot be preempted so the prio has to be lower and
         # we have to wait for it to take over
 
         # A prio 255 VR cannot be preempted so the prio has to be lower and
         # we have to wait for it to take over
@@ -680,11 +738,10 @@ class TestVRRP4(VppTestCase):
         prio = 100
         intvl = self._default_adv
         vip = self.pg0.remote_hosts[4].ip4
         prio = 100
         intvl = self._default_adv
         vip = self.pg0.remote_hosts[4].ip4
-        flags = (VRRP_VR_FLAG_PREEMPT | VRRP_VR_FLAG_ACCEPT)
-        vr = VppVRRPVirtualRouter(self, self.pg0, vr_id,
-                                  prio=prio, intvl=intvl,
-                                  flags=flags,
-                                  vips=[vip])
+        flags = VRRP_VR_FLAG_PREEMPT | VRRP_VR_FLAG_ACCEPT
+        vr = VppVRRPVirtualRouter(
+            self, self.pg0, vr_id, prio=prio, intvl=intvl, flags=flags, vips=[vip]
+        )
         self._vrs.append(vr)
         vr.add_vpp_config()
 
         self._vrs.append(vr)
         vr.add_vpp_config()
 
@@ -702,15 +759,18 @@ class TestVRRP4(VppTestCase):
         vr.assert_state_equals(VRRP_VR_STATE_MASTER)
 
         # send an ICMP echo to the VR virtual IP address
         vr.assert_state_equals(VRRP_VR_STATE_MASTER)
 
         # send an ICMP echo to the VR virtual IP address
-        echo = (Ether(dst=vr.virtual_mac(), src=self.pg0.remote_mac) /
-                IP(dst=vip, src=self.pg0.remote_ip4) /
-                ICMP(seq=1, id=self.pg0.sw_if_index, type='echo-request'))
+        echo = (
+            Ether(dst=vr.virtual_mac(), src=self.pg0.remote_mac)
+            / IP(dst=vip, src=self.pg0.remote_ip4)
+            / ICMP(seq=1, id=self.pg0.sw_if_index, type="echo-request")
+        )
         self.pg_send(self.pg0, [echo])
 
         # wait for an echo reply.
         time.sleep(1)
         self.pg_send(self.pg0, [echo])
 
         # wait for an echo reply.
         time.sleep(1)
-        rx_pkts = self.pg0.get_capture(expected_count=1, timeout=1,
-                                       filter_out_fn=is_not_echo_reply)
+        rx_pkts = self.pg0.get_capture(
+            expected_count=1, timeout=1, filter_out_fn=is_not_echo_reply
+        )
 
         self.assertEqual(rx_pkts[0][IP].src, vip)
         self.assertEqual(rx_pkts[0][IP].dst, self.pg0.remote_ip4)
 
         self.assertEqual(rx_pkts[0][IP].src, vip)
         self.assertEqual(rx_pkts[0][IP].dst, self.pg0.remote_ip4)
@@ -720,17 +780,22 @@ class TestVRRP4(VppTestCase):
 
     @unittest.skipUnless(config.extended, "part of extended tests")
     def test_vrrp4_intf_tracking(self):
 
     @unittest.skipUnless(config.extended, "part of extended tests")
     def test_vrrp4_intf_tracking(self):
-        """ IPv4 Master VR adjusts priority based on tracked interface """
+        """IPv4 Master VR adjusts priority based on tracked interface"""
 
         vr_id = 100
         prio = 255
         intvl = self._default_adv
         intvl_s = intvl * 0.01
         vip = self.pg0.local_ip4
 
         vr_id = 100
         prio = 255
         intvl = self._default_adv
         intvl_s = intvl * 0.01
         vip = self.pg0.local_ip4
-        vr = VppVRRPVirtualRouter(self, self.pg0, vr_id,
-                                  prio=prio, intvl=intvl,
-                                  flags=self._default_flags,
-                                  vips=[vip])
+        vr = VppVRRPVirtualRouter(
+            self,
+            self.pg0,
+            vr_id,
+            prio=prio,
+            intvl=intvl,
+            flags=self._default_flags,
+            vips=[vip],
+        )
         self._vrs.append(vr)
         vr.add_vpp_config()
 
         self._vrs.append(vr)
         vr.add_vpp_config()
 
@@ -740,9 +805,9 @@ class TestVRRP4(VppTestCase):
         # add pg1 as a tracked interface and start the VR
         adjustment = 50
         adjusted_prio = prio - adjustment
         # add pg1 as a tracked interface and start the VR
         adjustment = 50
         adjusted_prio = prio - adjustment
-        vr.add_del_tracked_interface(is_add=1,
-                                     sw_if_index=self.pg1.sw_if_index,
-                                     prio=adjustment)
+        vr.add_del_tracked_interface(
+            is_add=1, sw_if_index=self.pg1.sw_if_index, prio=adjustment
+        )
         vr.start_stop(is_start=1)
         vr.assert_state_equals(VRRP_VR_STATE_MASTER)
 
         vr.start_stop(is_start=1)
         vr.assert_state_equals(VRRP_VR_STATE_MASTER)
 
@@ -751,53 +816,47 @@ class TestVRRP4(VppTestCase):
 
         # tracked intf is up ->  advertised priority == configured priority
         self.pg0.enable_capture()
 
         # tracked intf is up ->  advertised priority == configured priority
         self.pg0.enable_capture()
-        rx = self.pg0.wait_for_packet(timeout=intvl_s,
-                                      filter_out_fn=is_not_adv)
+        rx = self.pg0.wait_for_packet(timeout=intvl_s, filter_out_fn=is_not_adv)
         self.assertEqual(rx, adv_configured)
 
         # take down pg1, verify priority is now being adjusted
         self.pg1.admin_down()
         self.pg0.enable_capture()
         self.assertEqual(rx, adv_configured)
 
         # take down pg1, verify priority is now being adjusted
         self.pg1.admin_down()
         self.pg0.enable_capture()
-        rx = self.pg0.wait_for_packet(timeout=intvl_s,
-                                      filter_out_fn=is_not_adv)
+        rx = self.pg0.wait_for_packet(timeout=intvl_s, filter_out_fn=is_not_adv)
         self.assertEqual(rx, adv_adjusted)
 
         # bring up pg1, verify priority now matches configured value
         self.pg1.admin_up()
         self.pg0.enable_capture()
         self.assertEqual(rx, adv_adjusted)
 
         # bring up pg1, verify priority now matches configured value
         self.pg1.admin_up()
         self.pg0.enable_capture()
-        rx = self.pg0.wait_for_packet(timeout=intvl_s,
-                                      filter_out_fn=is_not_adv)
+        rx = self.pg0.wait_for_packet(timeout=intvl_s, filter_out_fn=is_not_adv)
         self.assertEqual(rx, adv_configured)
 
         # remove IP address from pg1, verify priority now being adjusted
         self.pg1.unconfig_ip4()
         self.pg0.enable_capture()
         self.assertEqual(rx, adv_configured)
 
         # remove IP address from pg1, verify priority now being adjusted
         self.pg1.unconfig_ip4()
         self.pg0.enable_capture()
-        rx = self.pg0.wait_for_packet(timeout=intvl_s,
-                                      filter_out_fn=is_not_adv)
+        rx = self.pg0.wait_for_packet(timeout=intvl_s, filter_out_fn=is_not_adv)
         self.assertEqual(rx, adv_adjusted)
 
         # add IP address to pg1, verify priority now matches configured value
         self.pg1.config_ip4()
         self.pg0.enable_capture()
         self.assertEqual(rx, adv_adjusted)
 
         # add IP address to pg1, verify priority now matches configured value
         self.pg1.config_ip4()
         self.pg0.enable_capture()
-        rx = self.pg0.wait_for_packet(timeout=intvl_s,
-                                      filter_out_fn=is_not_adv)
+        rx = self.pg0.wait_for_packet(timeout=intvl_s, filter_out_fn=is_not_adv)
         self.assertEqual(rx, adv_configured)
 
     @unittest.skipUnless(config.extended, "part of extended tests")
     def test_vrrp4_master_adv_unicast(self):
         self.assertEqual(rx, adv_configured)
 
     @unittest.skipUnless(config.extended, "part of extended tests")
     def test_vrrp4_master_adv_unicast(self):
-        """ IPv4 Master VR advertises (unicast) """
+        """IPv4 Master VR advertises (unicast)"""
 
         vr_id = 100
         prio = 255
         intvl = self._default_adv
         intvl_s = intvl * 0.01
         vip = self.pg0.local_ip4
 
         vr_id = 100
         prio = 255
         intvl = self._default_adv
         intvl_s = intvl * 0.01
         vip = self.pg0.local_ip4
-        flags = (self._default_flags | VRRP_VR_FLAG_UNICAST)
+        flags = self._default_flags | VRRP_VR_FLAG_UNICAST
         unicast_peer = self.pg0.remote_hosts[4]
         unicast_peer = self.pg0.remote_hosts[4]
-        vr = VppVRRPVirtualRouter(self, self.pg0, vr_id,
-                                  prio=prio, intvl=intvl,
-                                  flags=flags,
-                                  vips=[vip])
+        vr = VppVRRPVirtualRouter(
+            self, self.pg0, vr_id, prio=prio, intvl=intvl, flags=flags, vips=[vip]
+        )
         self._vrs.append(vr)
         vr.add_vpp_config()
         vr.set_unicast_peers([unicast_peer.ip4])
         self._vrs.append(vr)
         vr.add_vpp_config()
         vr.set_unicast_peers([unicast_peer.ip4])
@@ -810,8 +869,7 @@ class TestVRRP4(VppTestCase):
         vr.assert_state_equals(VRRP_VR_STATE_MASTER)
 
         self.pg0.enable_capture()
         vr.assert_state_equals(VRRP_VR_STATE_MASTER)
 
         self.pg0.enable_capture()
-        rx = self.pg0.wait_for_packet(timeout=intvl_s,
-                                      filter_out_fn=is_not_adv)
+        rx = self.pg0.wait_for_packet(timeout=intvl_s, filter_out_fn=is_not_adv)
 
         self.assertTrue(rx.haslayer(Ether))
         self.assertTrue(rx.haslayer(IP))
 
         self.assertTrue(rx.haslayer(Ether))
         self.assertTrue(rx.haslayer(IP))
@@ -827,7 +885,7 @@ class TestVRRP4(VppTestCase):
 
 
 class TestVRRP6(VppTestCase):
 
 
 class TestVRRP6(VppTestCase):
-    """ IPv6 VRRP Test Case """
+    """IPv6 VRRP Test Case"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -849,7 +907,7 @@ class TestVRRP6(VppTestCase):
             i.configure_ipv6_neighbors()
 
         self._vrs = []
             i.configure_ipv6_neighbors()
 
         self._vrs = []
-        self._default_flags = (VRRP_VR_FLAG_IPV6 | VRRP_VR_FLAG_PREEMPT)
+        self._default_flags = VRRP_VR_FLAG_IPV6 | VRRP_VR_FLAG_PREEMPT
         self._default_adv = 100
 
     def tearDown(self):
         self._default_adv = 100
 
     def tearDown(self):
@@ -922,15 +980,15 @@ class TestVRRP6(VppTestCase):
     # become master and start advertising immediately.
     @unittest.skipUnless(config.extended, "part of extended tests")
     def test_vrrp6_master_adv(self):
     # become master and start advertising immediately.
     @unittest.skipUnless(config.extended, "part of extended tests")
     def test_vrrp6_master_adv(self):
-        """ IPv6 Master VR advertises """
+        """IPv6 Master VR advertises"""
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
         prio = 255
         intvl = self._default_adv
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
         prio = 255
         intvl = self._default_adv
-        vr = VppVRRPVirtualRouter(self, self.pg0, 100,
-                                  prio=prio, intvl=intvl,
-                                  flags=self._default_flags)
+        vr = VppVRRPVirtualRouter(
+            self, self.pg0, 100, prio=prio, intvl=intvl, flags=self._default_flags
+        )
         self._vrs.append(vr)
 
         vr.add_vpp_config()
         self._vrs.append(vr)
 
         vr.add_vpp_config()
@@ -956,25 +1014,30 @@ class TestVRRP6(VppTestCase):
     # of parameters to test that too
     @unittest.skipUnless(config.extended, "part of extended tests")
     def test_vrrp6_master_adv_update(self):
     # of parameters to test that too
     @unittest.skipUnless(config.extended, "part of extended tests")
     def test_vrrp6_master_adv_update(self):
-        """ IPv6 Master VR adv + Update to Backup """
+        """IPv6 Master VR adv + Update to Backup"""
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
         prio = 255
         intvl = self._default_adv
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
         prio = 255
         intvl = self._default_adv
-        vr = VppVRRPVirtualRouter(self, self.pg0, 100,
-                                  prio=prio, intvl=intvl,
-                                  flags=self._default_flags)
+        vr = VppVRRPVirtualRouter(
+            self, self.pg0, 100, prio=prio, intvl=intvl, flags=self._default_flags
+        )
 
         vr.update_vpp_config()
         vr.start_stop(is_start=1)
         self.logger.info(self.vapi.cli("show vrrp vr"))
         # Update VR with lower prio and larger interval
         # we need to keep old VR for the adv checks
 
         vr.update_vpp_config()
         vr.start_stop(is_start=1)
         self.logger.info(self.vapi.cli("show vrrp vr"))
         # Update VR with lower prio and larger interval
         # we need to keep old VR for the adv checks
-        upd_vr = VppVRRPVirtualRouter(self, self.pg0, 100,
-                                      prio=100, intvl=2*intvl,
-                                      flags=self._default_flags,
-                                      vips=[self.pg0.remote_ip6])
+        upd_vr = VppVRRPVirtualRouter(
+            self,
+            self.pg0,
+            100,
+            prio=100,
+            intvl=2 * intvl,
+            flags=self._default_flags,
+            vips=[self.pg0.remote_ip6],
+        )
         upd_vr._vrrp_index = vr._vrrp_index
         upd_vr.update_vpp_config()
         start_time = time.time()
         upd_vr._vrrp_index = vr._vrrp_index
         upd_vr.update_vpp_config()
         start_time = time.time()
@@ -1000,7 +1063,8 @@ class TestVRRP6(VppTestCase):
         end_time = start_time + 2 * upd_vr.master_down_seconds()
         while time.time() < end_time:
             self.send_and_assert_no_replies(
         end_time = start_time + 2 * upd_vr.master_down_seconds()
         while time.time() < end_time:
             self.send_and_assert_no_replies(
-                self.pg0, pkts, timeout=0.01*upd_vr._intvl)
+                self.pg0, pkts, timeout=0.01 * upd_vr._intvl
+            )
             self.logger.info(self.vapi.cli("show trace"))
 
         vr.start_stop(is_start=0)
             self.logger.info(self.vapi.cli("show trace"))
 
         vr.start_stop(is_start=0)
@@ -1010,7 +1074,7 @@ class TestVRRP6(VppTestCase):
     # long as it receives higher priority advertisements
     @unittest.skipUnless(config.extended, "part of extended tests")
     def test_vrrp6_backup_noadv(self):
     # long as it receives higher priority advertisements
     @unittest.skipUnless(config.extended, "part of extended tests")
     def test_vrrp6_backup_noadv(self):
-        """ IPv6 Backup VR does not advertise """
+        """IPv6 Backup VR does not advertise"""
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
@@ -1018,10 +1082,15 @@ class TestVRRP6(VppTestCase):
         prio = 100
         intvl = self._default_adv
         intvl_s = intvl * 0.01
         prio = 100
         intvl = self._default_adv
         intvl_s = intvl * 0.01
-        vr = VppVRRPVirtualRouter(self, self.pg0, vr_id,
-                                  prio=prio, intvl=intvl,
-                                  flags=self._default_flags,
-                                  vips=[self.pg0.remote_ip6])
+        vr = VppVRRPVirtualRouter(
+            self,
+            self.pg0,
+            vr_id,
+            prio=prio,
+            intvl=intvl,
+            flags=self._default_flags,
+            vips=[self.pg0.remote_ip6],
+        )
         vr.add_vpp_config()
         self._vrs.append(vr)
 
         vr.add_vpp_config()
         self._vrs.append(vr)
 
@@ -1037,7 +1106,7 @@ class TestVRRP6(VppTestCase):
         # send higher prio advertisements, should not see VPP send any
         src_ip = self.pg0.remote_ip6_ll
         num_advs = 5
         # send higher prio advertisements, should not see VPP send any
         src_ip = self.pg0.remote_ip6_ll
         num_advs = 5
-        pkts = [vr.vrrp_adv_packet(prio=prio+10, src_ip=src_ip)]
+        pkts = [vr.vrrp_adv_packet(prio=prio + 10, src_ip=src_ip)]
         self.logger.info(self.vapi.cli("show vlib graph"))
         while time.time() < end_time:
             self.send_and_assert_no_replies(self.pg0, pkts, timeout=intvl_s)
         self.logger.info(self.vapi.cli("show vlib graph"))
         while time.time() < end_time:
             self.send_and_assert_no_replies(self.pg0, pkts, timeout=intvl_s)
@@ -1050,16 +1119,16 @@ class TestVRRP6(VppTestCase):
         self._vrs = []
 
     def test_vrrp6_master_nd(self):
         self._vrs = []
 
     def test_vrrp6_master_nd(self):
-        """ IPv6 Master VR replies to NDP """
+        """IPv6 Master VR replies to NDP"""
         self.pg_start()
 
         # VR virtual IP is the default, which is the pg local IP
         vr_id = 100
         prio = 255
         intvl = self._default_adv
         self.pg_start()
 
         # VR virtual IP is the default, which is the pg local IP
         vr_id = 100
         prio = 255
         intvl = self._default_adv
-        vr = VppVRRPVirtualRouter(self, self.pg0, 100,
-                                  prio=prio, intvl=intvl,
-                                  flags=self._default_flags)
+        vr = VppVRRPVirtualRouter(
+            self, self.pg0, 100, prio=prio, intvl=intvl, flags=self._default_flags
+        )
         vr.add_vpp_config()
         self._vrs.append(vr)
 
         vr.add_vpp_config()
         self._vrs.append(vr)
 
@@ -1082,7 +1151,7 @@ class TestVRRP6(VppTestCase):
 
     @unittest.skipUnless(config.extended, "part of extended tests")
     def test_vrrp6_backup_nond(self):
 
     @unittest.skipUnless(config.extended, "part of extended tests")
     def test_vrrp6_backup_nond(self):
-        """ IPv6 Backup VR ignores NDP """
+        """IPv6 Backup VR ignores NDP"""
         # We need an address for a virtual IP that is not the IP that
         # ARP requests will originate from
 
         # We need an address for a virtual IP that is not the IP that
         # ARP requests will originate from
 
@@ -1091,10 +1160,15 @@ class TestVRRP6(VppTestCase):
         intvl = self._default_adv
         intvl_s = intvl * 0.01
         vip = self.pg0.remote_hosts[1].ip6
         intvl = self._default_adv
         intvl_s = intvl * 0.01
         vip = self.pg0.remote_hosts[1].ip6
-        vr = VppVRRPVirtualRouter(self, self.pg0, vr_id,
-                                  prio=prio, intvl=intvl,
-                                  flags=self._default_flags,
-                                  vips=[vip])
+        vr = VppVRRPVirtualRouter(
+            self,
+            self.pg0,
+            vr_id,
+            prio=prio,
+            intvl=intvl,
+            flags=self._default_flags,
+            vips=[vip],
+        )
         vr.add_vpp_config()
         self._vrs.append(vr)
 
         vr.add_vpp_config()
         self._vrs.append(vr)
 
@@ -1102,36 +1176,43 @@ class TestVRRP6(VppTestCase):
         dmac = in6_getnsmac(nsma)
         dst_ip = inet_ntop(socket.AF_INET6, nsma)
 
         dmac = in6_getnsmac(nsma)
         dst_ip = inet_ntop(socket.AF_INET6, nsma)
 
-        ndp_req = (Ether(dst=dmac, src=self.pg0.remote_mac) /
-                   IPv6(dst=dst_ip, src=self.pg0.remote_ip6) /
-                   ICMPv6ND_NS(tgt=vip) /
-                   ICMPv6NDOptSrcLLAddr(lladdr=self.pg0.remote_mac))
+        ndp_req = (
+            Ether(dst=dmac, src=self.pg0.remote_mac)
+            / IPv6(dst=dst_ip, src=self.pg0.remote_ip6)
+            / ICMPv6ND_NS(tgt=vip)
+            / ICMPv6NDOptSrcLLAddr(lladdr=self.pg0.remote_mac)
+        )
 
         # Before the VR is started make sure no reply to request for VIP
         self.send_and_assert_no_replies(self.pg0, [ndp_req], timeout=1)
 
         # VR should start in backup state and still should not reply to NDP
         # send a higher priority adv to make sure it does not become master
 
         # Before the VR is started make sure no reply to request for VIP
         self.send_and_assert_no_replies(self.pg0, [ndp_req], timeout=1)
 
         # VR should start in backup state and still should not reply to NDP
         # send a higher priority adv to make sure it does not become master
-        adv = vr.vrrp_adv_packet(prio=prio+10, src_ip=self.pg0.remote_ip6)
+        adv = vr.vrrp_adv_packet(prio=prio + 10, src_ip=self.pg0.remote_ip6)
         pkts = [adv, ndp_req]
         vr.start_stop(is_start=1)
         pkts = [adv, ndp_req]
         vr.start_stop(is_start=1)
-        self.send_and_assert_no_replies(self.pg0, pkts,  timeout=intvl_s)
+        self.send_and_assert_no_replies(self.pg0, pkts, timeout=intvl_s)
 
         vr.start_stop(is_start=0)
 
     @unittest.skipUnless(config.extended, "part of extended tests")
     def test_vrrp6_election(self):
 
         vr.start_stop(is_start=0)
 
     @unittest.skipUnless(config.extended, "part of extended tests")
     def test_vrrp6_election(self):
-        """ IPv6 Backup VR becomes master if no advertisements received """
+        """IPv6 Backup VR becomes master if no advertisements received"""
 
         vr_id = 100
         prio = 100
         intvl = self._default_adv
         intvl_s = intvl * 0.01
         vip = self.pg0.remote_ip6
 
         vr_id = 100
         prio = 100
         intvl = self._default_adv
         intvl_s = intvl * 0.01
         vip = self.pg0.remote_ip6
-        vr = VppVRRPVirtualRouter(self, self.pg0, vr_id,
-                                  prio=prio, intvl=intvl,
-                                  flags=self._default_flags,
-                                  vips=[vip])
+        vr = VppVRRPVirtualRouter(
+            self,
+            self.pg0,
+            vr_id,
+            prio=prio,
+            intvl=intvl,
+            flags=self._default_flags,
+            vips=[vip],
+        )
         self._vrs.append(vr)
         vr.add_vpp_config()
 
         self._vrs.append(vr)
         vr.add_vpp_config()
 
@@ -1158,17 +1239,22 @@ class TestVRRP6(VppTestCase):
 
     @unittest.skipUnless(config.extended, "part of extended tests")
     def test_vrrp6_backup_preempts(self):
 
     @unittest.skipUnless(config.extended, "part of extended tests")
     def test_vrrp6_backup_preempts(self):
-        """ IPv6 Backup VR preempts lower priority master """
+        """IPv6 Backup VR preempts lower priority master"""
 
         vr_id = 100
         prio = 100
         intvl = self._default_adv
         intvl_s = intvl * 0.01
         vip = self.pg0.remote_ip6
 
         vr_id = 100
         prio = 100
         intvl = self._default_adv
         intvl_s = intvl * 0.01
         vip = self.pg0.remote_ip6
-        vr = VppVRRPVirtualRouter(self, self.pg0, vr_id,
-                                  prio=prio, intvl=intvl,
-                                  flags=self._default_flags,
-                                  vips=[vip])
+        vr = VppVRRPVirtualRouter(
+            self,
+            self.pg0,
+            vr_id,
+            prio=prio,
+            intvl=intvl,
+            flags=self._default_flags,
+            vips=[vip],
+        )
         self._vrs.append(vr)
         vr.add_vpp_config()
 
         self._vrs.append(vr)
         vr.add_vpp_config()
 
@@ -1184,7 +1270,7 @@ class TestVRRP6(VppTestCase):
 
         # send lower prio advertisements until timer expires
         src_ip = self.pg0.remote_ip6
 
         # send lower prio advertisements until timer expires
         src_ip = self.pg0.remote_ip6
-        pkts = [vr.vrrp_adv_packet(prio=prio-10, src_ip=src_ip)]
+        pkts = [vr.vrrp_adv_packet(prio=prio - 10, src_ip=src_ip)]
         while (time.time() + intvl_s) < end_time:
             self.send_and_assert_no_replies(self.pg0, pkts, timeout=intvl_s)
             self.logger.info(self.vapi.cli("show trace"))
         while (time.time() + intvl_s) < end_time:
             self.send_and_assert_no_replies(self.pg0, pkts, timeout=intvl_s)
             self.logger.info(self.vapi.cli("show trace"))
@@ -1196,7 +1282,7 @@ class TestVRRP6(VppTestCase):
 
     @unittest.skipUnless(config.extended, "part of extended tests")
     def test_vrrp6_master_preempted(self):
 
     @unittest.skipUnless(config.extended, "part of extended tests")
     def test_vrrp6_master_preempted(self):
-        """ IPv6 Master VR preempted by higher priority backup """
+        """IPv6 Master VR preempted by higher priority backup"""
 
         # A prio 255 VR cannot be preempted so the prio has to be lower and
         # we have to wait for it to take over
 
         # A prio 255 VR cannot be preempted so the prio has to be lower and
         # we have to wait for it to take over
@@ -1204,10 +1290,15 @@ class TestVRRP6(VppTestCase):
         prio = 100
         intvl = self._default_adv
         vip = self.pg0.remote_ip6
         prio = 100
         intvl = self._default_adv
         vip = self.pg0.remote_ip6
-        vr = VppVRRPVirtualRouter(self, self.pg0, vr_id,
-                                  prio=prio, intvl=intvl,
-                                  flags=self._default_flags,
-                                  vips=[vip])
+        vr = VppVRRPVirtualRouter(
+            self,
+            self.pg0,
+            vr_id,
+            prio=prio,
+            intvl=intvl,
+            flags=self._default_flags,
+            vips=[vip],
+        )
         self._vrs.append(vr)
         vr.add_vpp_config()
 
         self._vrs.append(vr)
         vr.add_vpp_config()
 
@@ -1233,7 +1324,7 @@ class TestVRRP6(VppTestCase):
 
     @unittest.skipUnless(config.extended, "part of extended tests")
     def test_vrrp6_accept_mode_disabled(self):
 
     @unittest.skipUnless(config.extended, "part of extended tests")
     def test_vrrp6_accept_mode_disabled(self):
-        """ IPv6 Master VR does not reply for VIP w/ accept mode off """
+        """IPv6 Master VR does not reply for VIP w/ accept mode off"""
 
         # accept mode only matters when prio < 255, so it will have to
         # come up as a backup and take over as master after the timeout
 
         # accept mode only matters when prio < 255, so it will have to
         # come up as a backup and take over as master after the timeout
@@ -1241,10 +1332,15 @@ class TestVRRP6(VppTestCase):
         prio = 100
         intvl = self._default_adv
         vip = self.pg0.remote_hosts[4].ip6
         prio = 100
         intvl = self._default_adv
         vip = self.pg0.remote_hosts[4].ip6
-        vr = VppVRRPVirtualRouter(self, self.pg0, vr_id,
-                                  prio=prio, intvl=intvl,
-                                  flags=self._default_flags,
-                                  vips=[vip])
+        vr = VppVRRPVirtualRouter(
+            self,
+            self.pg0,
+            vr_id,
+            prio=prio,
+            intvl=intvl,
+            flags=self._default_flags,
+            vips=[vip],
+        )
         self._vrs.append(vr)
         vr.add_vpp_config()
 
         self._vrs.append(vr)
         vr.add_vpp_config()
 
@@ -1262,9 +1358,11 @@ class TestVRRP6(VppTestCase):
         vr.assert_state_equals(VRRP_VR_STATE_MASTER)
 
         # send an ICMPv6 echo to the VR virtual IP address
         vr.assert_state_equals(VRRP_VR_STATE_MASTER)
 
         # send an ICMPv6 echo to the VR virtual IP address
-        echo = (Ether(dst=vr.virtual_mac(), src=self.pg0.remote_mac) /
-                IPv6(dst=vip, src=self.pg0.remote_ip6) /
-                ICMPv6EchoRequest(seq=1, id=self.pg0.sw_if_index))
+        echo = (
+            Ether(dst=vr.virtual_mac(), src=self.pg0.remote_mac)
+            / IPv6(dst=vip, src=self.pg0.remote_ip6)
+            / ICMPv6EchoRequest(seq=1, id=self.pg0.sw_if_index)
+        )
         self.pg_send(self.pg0, [echo])
 
         # wait for an echo reply. none should be received
         self.pg_send(self.pg0, [echo])
 
         # wait for an echo reply. none should be received
@@ -1273,7 +1371,7 @@ class TestVRRP6(VppTestCase):
 
     @unittest.skipUnless(config.extended, "part of extended tests")
     def test_vrrp6_accept_mode_enabled(self):
 
     @unittest.skipUnless(config.extended, "part of extended tests")
     def test_vrrp6_accept_mode_enabled(self):
-        """ IPv6 Master VR replies for VIP w/ accept mode on """
+        """IPv6 Master VR replies for VIP w/ accept mode on"""
 
         # A prio 255 VR cannot be preempted so the prio has to be lower and
         # we have to wait for it to take over
 
         # A prio 255 VR cannot be preempted so the prio has to be lower and
         # we have to wait for it to take over
@@ -1281,11 +1379,10 @@ class TestVRRP6(VppTestCase):
         prio = 100
         intvl = self._default_adv
         vip = self.pg0.remote_hosts[4].ip6
         prio = 100
         intvl = self._default_adv
         vip = self.pg0.remote_hosts[4].ip6
-        flags = (self._default_flags | VRRP_VR_FLAG_ACCEPT)
-        vr = VppVRRPVirtualRouter(self, self.pg0, vr_id,
-                                  prio=prio, intvl=intvl,
-                                  flags=flags,
-                                  vips=[vip])
+        flags = self._default_flags | VRRP_VR_FLAG_ACCEPT
+        vr = VppVRRPVirtualRouter(
+            self, self.pg0, vr_id, prio=prio, intvl=intvl, flags=flags, vips=[vip]
+        )
         self._vrs.append(vr)
         vr.add_vpp_config()
 
         self._vrs.append(vr)
         vr.add_vpp_config()
 
@@ -1303,15 +1400,18 @@ class TestVRRP6(VppTestCase):
         vr.assert_state_equals(VRRP_VR_STATE_MASTER)
 
         # send an ICMP echo to the VR virtual IP address
         vr.assert_state_equals(VRRP_VR_STATE_MASTER)
 
         # send an ICMP echo to the VR virtual IP address
-        echo = (Ether(dst=vr.virtual_mac(), src=self.pg0.remote_mac) /
-                IPv6(dst=vip, src=self.pg0.remote_ip6) /
-                ICMPv6EchoRequest(seq=1, id=self.pg0.sw_if_index))
+        echo = (
+            Ether(dst=vr.virtual_mac(), src=self.pg0.remote_mac)
+            / IPv6(dst=vip, src=self.pg0.remote_ip6)
+            / ICMPv6EchoRequest(seq=1, id=self.pg0.sw_if_index)
+        )
         self.pg_send(self.pg0, [echo])
 
         # wait for an echo reply.
         time.sleep(1)
         self.pg_send(self.pg0, [echo])
 
         # wait for an echo reply.
         time.sleep(1)
-        rx_pkts = self.pg0.get_capture(expected_count=1, timeout=1,
-                                       filter_out_fn=is_not_echo_reply)
+        rx_pkts = self.pg0.get_capture(
+            expected_count=1, timeout=1, filter_out_fn=is_not_echo_reply
+        )
 
         self.assertEqual(rx_pkts[0][IPv6].src, vip)
         self.assertEqual(rx_pkts[0][IPv6].dst, self.pg0.remote_ip6)
 
         self.assertEqual(rx_pkts[0][IPv6].src, vip)
         self.assertEqual(rx_pkts[0][IPv6].dst, self.pg0.remote_ip6)
@@ -1320,17 +1420,22 @@ class TestVRRP6(VppTestCase):
 
     @unittest.skipUnless(config.extended, "part of extended tests")
     def test_vrrp6_intf_tracking(self):
 
     @unittest.skipUnless(config.extended, "part of extended tests")
     def test_vrrp6_intf_tracking(self):
-        """ IPv6 Master VR adjusts priority based on tracked interface """
+        """IPv6 Master VR adjusts priority based on tracked interface"""
 
         vr_id = 100
         prio = 255
         intvl = self._default_adv
         intvl_s = intvl * 0.01
         vip = self.pg0.local_ip6
 
         vr_id = 100
         prio = 255
         intvl = self._default_adv
         intvl_s = intvl * 0.01
         vip = self.pg0.local_ip6
-        vr = VppVRRPVirtualRouter(self, self.pg0, vr_id,
-                                  prio=prio, intvl=intvl,
-                                  flags=self._default_flags,
-                                  vips=[vip])
+        vr = VppVRRPVirtualRouter(
+            self,
+            self.pg0,
+            vr_id,
+            prio=prio,
+            intvl=intvl,
+            flags=self._default_flags,
+            vips=[vip],
+        )
         self._vrs.append(vr)
         vr.add_vpp_config()
 
         self._vrs.append(vr)
         vr.add_vpp_config()
 
@@ -1340,9 +1445,9 @@ class TestVRRP6(VppTestCase):
         # add pg1 as a tracked interface and start the VR
         adjustment = 50
         adjusted_prio = prio - adjustment
         # add pg1 as a tracked interface and start the VR
         adjustment = 50
         adjusted_prio = prio - adjustment
-        vr.add_del_tracked_interface(is_add=1,
-                                     sw_if_index=self.pg1.sw_if_index,
-                                     prio=adjustment)
+        vr.add_del_tracked_interface(
+            is_add=1, sw_if_index=self.pg1.sw_if_index, prio=adjustment
+        )
         vr.start_stop(is_start=1)
         vr.assert_state_equals(VRRP_VR_STATE_MASTER)
 
         vr.start_stop(is_start=1)
         vr.assert_state_equals(VRRP_VR_STATE_MASTER)
 
@@ -1351,53 +1456,47 @@ class TestVRRP6(VppTestCase):
 
         # tracked intf is up ->  advertised priority == configured priority
         self.pg0.enable_capture()
 
         # tracked intf is up ->  advertised priority == configured priority
         self.pg0.enable_capture()
-        rx = self.pg0.wait_for_packet(timeout=intvl_s,
-                                      filter_out_fn=is_not_adv)
+        rx = self.pg0.wait_for_packet(timeout=intvl_s, filter_out_fn=is_not_adv)
         self.assertEqual(rx, adv_configured)
 
         # take down pg1, verify priority is now being adjusted
         self.pg1.admin_down()
         self.pg0.enable_capture()
         self.assertEqual(rx, adv_configured)
 
         # take down pg1, verify priority is now being adjusted
         self.pg1.admin_down()
         self.pg0.enable_capture()
-        rx = self.pg0.wait_for_packet(timeout=intvl_s,
-                                      filter_out_fn=is_not_adv)
+        rx = self.pg0.wait_for_packet(timeout=intvl_s, filter_out_fn=is_not_adv)
         self.assertEqual(rx, adv_adjusted)
 
         # bring up pg1, verify priority now matches configured value
         self.pg1.admin_up()
         self.pg0.enable_capture()
         self.assertEqual(rx, adv_adjusted)
 
         # bring up pg1, verify priority now matches configured value
         self.pg1.admin_up()
         self.pg0.enable_capture()
-        rx = self.pg0.wait_for_packet(timeout=intvl_s,
-                                      filter_out_fn=is_not_adv)
+        rx = self.pg0.wait_for_packet(timeout=intvl_s, filter_out_fn=is_not_adv)
         self.assertEqual(rx, adv_configured)
 
         # remove IP address from pg1, verify priority now being adjusted
         self.pg1.unconfig_ip6()
         self.pg0.enable_capture()
         self.assertEqual(rx, adv_configured)
 
         # remove IP address from pg1, verify priority now being adjusted
         self.pg1.unconfig_ip6()
         self.pg0.enable_capture()
-        rx = self.pg0.wait_for_packet(timeout=intvl_s,
-                                      filter_out_fn=is_not_adv)
+        rx = self.pg0.wait_for_packet(timeout=intvl_s, filter_out_fn=is_not_adv)
         self.assertEqual(rx, adv_adjusted)
 
         # add IP address to pg1, verify priority now matches configured value
         self.pg1.config_ip6()
         self.pg0.enable_capture()
         self.assertEqual(rx, adv_adjusted)
 
         # add IP address to pg1, verify priority now matches configured value
         self.pg1.config_ip6()
         self.pg0.enable_capture()
-        rx = self.pg0.wait_for_packet(timeout=intvl_s,
-                                      filter_out_fn=is_not_adv)
+        rx = self.pg0.wait_for_packet(timeout=intvl_s, filter_out_fn=is_not_adv)
         self.assertEqual(rx, adv_configured)
 
     @unittest.skipUnless(config.extended, "part of extended tests")
     def test_vrrp6_master_adv_unicast(self):
         self.assertEqual(rx, adv_configured)
 
     @unittest.skipUnless(config.extended, "part of extended tests")
     def test_vrrp6_master_adv_unicast(self):
-        """ IPv6 Master VR advertises (unicast) """
+        """IPv6 Master VR advertises (unicast)"""
 
         vr_id = 100
         prio = 255
         intvl = self._default_adv
         intvl_s = intvl * 0.01
         vip = self.pg0.local_ip6
 
         vr_id = 100
         prio = 255
         intvl = self._default_adv
         intvl_s = intvl * 0.01
         vip = self.pg0.local_ip6
-        flags = (self._default_flags | VRRP_VR_FLAG_UNICAST)
+        flags = self._default_flags | VRRP_VR_FLAG_UNICAST
         unicast_peer = self.pg0.remote_hosts[4]
         unicast_peer = self.pg0.remote_hosts[4]
-        vr = VppVRRPVirtualRouter(self, self.pg0, vr_id,
-                                  prio=prio, intvl=intvl,
-                                  flags=flags,
-                                  vips=[vip])
+        vr = VppVRRPVirtualRouter(
+            self, self.pg0, vr_id, prio=prio, intvl=intvl, flags=flags, vips=[vip]
+        )
         self._vrs.append(vr)
         vr.add_vpp_config()
         vr.set_unicast_peers([unicast_peer.ip6])
         self._vrs.append(vr)
         vr.add_vpp_config()
         vr.set_unicast_peers([unicast_peer.ip6])
@@ -1410,23 +1509,22 @@ class TestVRRP6(VppTestCase):
         vr.assert_state_equals(VRRP_VR_STATE_MASTER)
 
         self.pg0.enable_capture()
         vr.assert_state_equals(VRRP_VR_STATE_MASTER)
 
         self.pg0.enable_capture()
-        rx = self.pg0.wait_for_packet(timeout=intvl_s,
-                                      filter_out_fn=is_not_adv)
+        rx = self.pg0.wait_for_packet(timeout=intvl_s, filter_out_fn=is_not_adv)
 
         self.assertTrue(rx.haslayer(Ether))
         self.assertTrue(rx.haslayer(IPv6))
         self.assertTrue(rx.haslayer(VRRPv3))
         self.assertEqual(rx[Ether].src, self.pg0.local_mac)
         self.assertEqual(rx[Ether].dst, unicast_peer.mac)
 
         self.assertTrue(rx.haslayer(Ether))
         self.assertTrue(rx.haslayer(IPv6))
         self.assertTrue(rx.haslayer(VRRPv3))
         self.assertEqual(rx[Ether].src, self.pg0.local_mac)
         self.assertEqual(rx[Ether].dst, unicast_peer.mac)
-        self.assertEqual(ip6_normalize(rx[IPv6].src),
-                         ip6_normalize(self.pg0.local_ip6_ll))
-        self.assertEqual(ip6_normalize(rx[IPv6].dst),
-                         ip6_normalize(unicast_peer.ip6))
+        self.assertEqual(
+            ip6_normalize(rx[IPv6].src), ip6_normalize(self.pg0.local_ip6_ll)
+        )
+        self.assertEqual(ip6_normalize(rx[IPv6].dst), ip6_normalize(unicast_peer.ip6))
         self.assertEqual(rx[VRRPv3].vrid, vr_id)
         self.assertEqual(rx[VRRPv3].priority, prio)
         self.assertEqual(rx[VRRPv3].ipcount, 1)
         self.assertEqual(rx[VRRPv3].addrlist, [vip])
 
 
         self.assertEqual(rx[VRRPv3].vrid, vr_id)
         self.assertEqual(rx[VRRPv3].priority, prio)
         self.assertEqual(rx[VRRPv3].ipcount, 1)
         self.assertEqual(rx[VRRPv3].addrlist, [vip])
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index c3704f1..b33dcb6 100644 (file)
@@ -12,13 +12,13 @@ from framework import VppTestCase, VppTestRunner
 from vpp_sub_interface import L2_VTR_OP, VppDot1QSubint, VppDot1ADSubint
 from collections import namedtuple
 
 from vpp_sub_interface import L2_VTR_OP, VppDot1QSubint, VppDot1ADSubint
 from collections import namedtuple
 
-Tag = namedtuple('Tag', ['dot1', 'vlan'])
+Tag = namedtuple("Tag", ["dot1", "vlan"])
 DOT1AD = 0x88A8
 DOT1Q = 0x8100
 
 
 class TestVtr(VppTestCase):
 DOT1AD = 0x88A8
 DOT1Q = 0x8100
 
 
 class TestVtr(VppTestCase):
-    """ VTR Test Case """
+    """VTR Test Case"""
 
     @classmethod
     def setUpClass(cls):
 
     @classmethod
     def setUpClass(cls):
@@ -36,9 +36,9 @@ class TestVtr(VppTestCase):
             cls.create_pg_interfaces(ifs)
 
             cls.sub_interfaces = [
             cls.create_pg_interfaces(ifs)
 
             cls.sub_interfaces = [
-                VppDot1ADSubint(cls, cls.pg1, cls.dot1ad_sub_id,
-                                cls.Btag, cls.Atag),
-                VppDot1QSubint(cls, cls.pg2, cls.Btag)]
+                VppDot1ADSubint(cls, cls.pg1, cls.dot1ad_sub_id, cls.Btag, cls.Atag),
+                VppDot1QSubint(cls, cls.pg2, cls.Btag),
+            ]
 
             interfaces = list(cls.pg_interfaces)
             interfaces.extend(cls.sub_interfaces)
 
             interfaces = list(cls.pg_interfaces)
             interfaces.extend(cls.sub_interfaces)
@@ -46,10 +46,14 @@ class TestVtr(VppTestCase):
             # Create BD with MAC learning enabled and put interfaces and
             #  sub-interfaces to this BD
             for pg_if in cls.pg_interfaces:
             # Create BD with MAC learning enabled and put interfaces and
             #  sub-interfaces to this BD
             for pg_if in cls.pg_interfaces:
-                sw_if_index = pg_if.sub_if.sw_if_index \
-                    if hasattr(pg_if, 'sub_if') else pg_if.sw_if_index
-                cls.vapi.sw_interface_set_l2_bridge(rx_sw_if_index=sw_if_index,
-                                                    bd_id=cls.bd_id)
+                sw_if_index = (
+                    pg_if.sub_if.sw_if_index
+                    if hasattr(pg_if, "sub_if")
+                    else pg_if.sw_if_index
+                )
+                cls.vapi.sw_interface_set_l2_bridge(
+                    rx_sw_if_index=sw_if_index, bd_id=cls.bd_id
+                )
 
             # setup all interfaces
             for i in interfaces:
 
             # setup all interfaces
             for i in interfaces:
@@ -86,8 +90,7 @@ class TestVtr(VppTestCase):
 
     def show_commands_at_teardown(self):
         self.logger.info(self.vapi.ppcli("show l2fib verbose"))
 
     def show_commands_at_teardown(self):
         self.logger.info(self.vapi.ppcli("show l2fib verbose"))
-        self.logger.info(self.vapi.ppcli("show bridge-domain %s detail" %
-                                         self.bd_id))
+        self.logger.info(self.vapi.ppcli("show bridge-domain %s detail" % self.bd_id))
 
     @classmethod
     def create_hosts_and_learn(cls, count):
 
     @classmethod
     def create_hosts_and_learn(cls, count):
@@ -98,10 +101,11 @@ class TestVtr(VppTestCase):
             for j in range(1, count + 1):
                 host = Host(
                     "00:00:00:ff:%02x:%02x" % (pg_if.sw_if_index, j),
             for j in range(1, count + 1):
                 host = Host(
                     "00:00:00:ff:%02x:%02x" % (pg_if.sw_if_index, j),
-                    "172.17.1%02x.%u" % (pg_if.sw_if_index, j))
-                packet = (Ether(dst="ff:ff:ff:ff:ff:ff", src=host.mac))
+                    "172.17.1%02x.%u" % (pg_if.sw_if_index, j),
+                )
+                packet = Ether(dst="ff:ff:ff:ff:ff:ff", src=host.mac)
                 hosts.append(host)
                 hosts.append(host)
-                if hasattr(pg_if, 'sub_if'):
+                if hasattr(pg_if, "sub_if"):
                     packet = pg_if.sub_if.add_dot1_layer(packet)
                 packets.append(packet)
             pg_if.add_stream(packets)
                     packet = pg_if.sub_if.add_dot1_layer(packet)
                 packets.append(packet)
             pg_if.add_stream(packets)
@@ -115,12 +119,14 @@ class TestVtr(VppTestCase):
         src_host = random.choice(self.hosts_by_pg_idx[src_if.sw_if_index])
         pkt_info = self.create_packet_info(src_if, dst_if)
         payload = self.info_to_payload(pkt_info)
         src_host = random.choice(self.hosts_by_pg_idx[src_if.sw_if_index])
         pkt_info = self.create_packet_info(src_if, dst_if)
         payload = self.info_to_payload(pkt_info)
-        p = (Ether(dst=dst_host.mac, src=src_host.mac) /
-             IP(src=src_host.ip4, dst=dst_host.ip4) /
-             UDP(sport=1234, dport=1234) /
-             Raw(payload))
+        p = (
+            Ether(dst=dst_host.mac, src=src_host.mac)
+            / IP(src=src_host.ip4, dst=dst_host.ip4)
+            / UDP(sport=1234, dport=1234)
+            / Raw(payload)
+        )
         pkt_info.data = p.copy()
         pkt_info.data = p.copy()
-        if do_dot1 and hasattr(src_if, 'sub_if'):
+        if do_dot1 and hasattr(src_if, "sub_if"):
             p = src_if.sub_if.add_dot1_layer(p)
         size = random.choice(packet_sizes)
         self.extend_packet(p, size)
             p = src_if.sub_if.add_dot1_layer(p)
         size = random.choice(packet_sizes)
         self.extend_packet(p, size)
@@ -172,8 +178,9 @@ class TestVtr(VppTestCase):
             return
 
         i = VppDot1QSubint(self, self.pg0, tags[0].vlan)
             return
 
         i = VppDot1QSubint(self, self.pg0, tags[0].vlan)
-        self.vapi.sw_interface_set_l2_bridge(rx_sw_if_index=i.sw_if_index,
-                                             bd_id=self.bd_id, enable=1)
+        self.vapi.sw_interface_set_l2_bridge(
+            rx_sw_if_index=i.sw_if_index, bd_id=self.bd_id, enable=1
+        )
         i.admin_up()
 
         p = self.create_packet(self.pg0, swif, do_dot1=False)
         i.admin_up()
 
         p = self.create_packet(self.pg0, swif, do_dot1=False)
@@ -185,202 +192,217 @@ class TestVtr(VppTestCase):
         swif.sub_if.remove_dot1_layer(rx[0])
         self.assertTrue(Dot1Q not in rx[0])
 
         swif.sub_if.remove_dot1_layer(rx[0])
         self.assertTrue(Dot1Q not in rx[0])
 
-        self.vapi.sw_interface_set_l2_bridge(rx_sw_if_index=i.sw_if_index,
-                                             bd_id=self.bd_id, enable=0)
+        self.vapi.sw_interface_set_l2_bridge(
+            rx_sw_if_index=i.sw_if_index, bd_id=self.bd_id, enable=0
+        )
         i.remove_vpp_config()
 
     def test_1ad_vtr_pop_1(self):
         i.remove_vpp_config()
 
     def test_1ad_vtr_pop_1(self):
-        """ 1AD VTR pop 1 test
-        """
+        """1AD VTR pop 1 test"""
         self.pg1.sub_if.set_vtr(L2_VTR_OP.L2_POP_1)
         self.vtr_test(self.pg1, [Tag(dot1=DOT1Q, vlan=100)])
 
     def test_1ad_vtr_pop_2(self):
         self.pg1.sub_if.set_vtr(L2_VTR_OP.L2_POP_1)
         self.vtr_test(self.pg1, [Tag(dot1=DOT1Q, vlan=100)])
 
     def test_1ad_vtr_pop_2(self):
-        """ 1AD VTR pop 2 test
-        """
+        """1AD VTR pop 2 test"""
         self.pg1.sub_if.set_vtr(L2_VTR_OP.L2_POP_2)
         self.vtr_test(self.pg1, [])
 
     def test_1ad_vtr_push_1ad(self):
         self.pg1.sub_if.set_vtr(L2_VTR_OP.L2_POP_2)
         self.vtr_test(self.pg1, [])
 
     def test_1ad_vtr_push_1ad(self):
-        """ 1AD VTR push 1 1AD test
-        """
+        """1AD VTR push 1 1AD test"""
         self.pg1.sub_if.set_vtr(L2_VTR_OP.L2_PUSH_1, tag=300)
         self.pg1.sub_if.set_vtr(L2_VTR_OP.L2_PUSH_1, tag=300)
-        self.vtr_test(self.pg1, [Tag(dot1=DOT1AD, vlan=300),
-                                 Tag(dot1=DOT1AD, vlan=200),
-                                 Tag(dot1=DOT1Q, vlan=100)])
+        self.vtr_test(
+            self.pg1,
+            [
+                Tag(dot1=DOT1AD, vlan=300),
+                Tag(dot1=DOT1AD, vlan=200),
+                Tag(dot1=DOT1Q, vlan=100),
+            ],
+        )
 
     def test_1ad_vtr_push_2ad(self):
 
     def test_1ad_vtr_push_2ad(self):
-        """ 1AD VTR push 2 1AD test
-        """
+        """1AD VTR push 2 1AD test"""
         self.pg1.sub_if.set_vtr(L2_VTR_OP.L2_PUSH_2, outer=400, inner=300)
         self.pg1.sub_if.set_vtr(L2_VTR_OP.L2_PUSH_2, outer=400, inner=300)
-        self.vtr_test(self.pg1, [Tag(dot1=DOT1AD, vlan=400),
-                                 Tag(dot1=DOT1Q, vlan=300),
-                                 Tag(dot1=DOT1AD, vlan=200),
-                                 Tag(dot1=DOT1Q, vlan=100)])
+        self.vtr_test(
+            self.pg1,
+            [
+                Tag(dot1=DOT1AD, vlan=400),
+                Tag(dot1=DOT1Q, vlan=300),
+                Tag(dot1=DOT1AD, vlan=200),
+                Tag(dot1=DOT1Q, vlan=100),
+            ],
+        )
 
     def test_1ad_vtr_push_1q(self):
 
     def test_1ad_vtr_push_1q(self):
-        """ 1AD VTR push 1 1Q test
-        """
+        """1AD VTR push 1 1Q test"""
         self.pg1.sub_if.set_vtr(L2_VTR_OP.L2_PUSH_1, tag=300, push1q=1)
         self.pg1.sub_if.set_vtr(L2_VTR_OP.L2_PUSH_1, tag=300, push1q=1)
-        self.vtr_test(self.pg1, [Tag(dot1=DOT1Q, vlan=300),
-                                 Tag(dot1=DOT1AD, vlan=200),
-                                 Tag(dot1=DOT1Q, vlan=100)])
+        self.vtr_test(
+            self.pg1,
+            [
+                Tag(dot1=DOT1Q, vlan=300),
+                Tag(dot1=DOT1AD, vlan=200),
+                Tag(dot1=DOT1Q, vlan=100),
+            ],
+        )
 
     def test_1ad_vtr_push_2q(self):
 
     def test_1ad_vtr_push_2q(self):
-        """ 1AD VTR push 2 1Q test
-        """
-        self.pg1.sub_if.set_vtr(L2_VTR_OP.L2_PUSH_2,
-                                outer=400, inner=300, push1q=1)
-        self.vtr_test(self.pg1, [Tag(dot1=DOT1Q, vlan=400),
-                                 Tag(dot1=DOT1Q, vlan=300),
-                                 Tag(dot1=DOT1AD, vlan=200),
-                                 Tag(dot1=DOT1Q, vlan=100)])
+        """1AD VTR push 2 1Q test"""
+        self.pg1.sub_if.set_vtr(L2_VTR_OP.L2_PUSH_2, outer=400, inner=300, push1q=1)
+        self.vtr_test(
+            self.pg1,
+            [
+                Tag(dot1=DOT1Q, vlan=400),
+                Tag(dot1=DOT1Q, vlan=300),
+                Tag(dot1=DOT1AD, vlan=200),
+                Tag(dot1=DOT1Q, vlan=100),
+            ],
+        )
 
     def test_1ad_vtr_translate_1_1ad(self):
 
     def test_1ad_vtr_translate_1_1ad(self):
-        """ 1AD VTR translate 1 -> 1 1AD test
-        """
+        """1AD VTR translate 1 -> 1 1AD test"""
         self.pg1.sub_if.set_vtr(L2_VTR_OP.L2_TRANSLATE_1_1, tag=300)
         self.pg1.sub_if.set_vtr(L2_VTR_OP.L2_TRANSLATE_1_1, tag=300)
-        self.vtr_test(self.pg1, [Tag(dot1=DOT1AD, vlan=300),
-                                 Tag(dot1=DOT1Q, vlan=100)])
+        self.vtr_test(self.pg1, [Tag(dot1=DOT1AD, vlan=300), Tag(dot1=DOT1Q, vlan=100)])
 
     def test_1ad_vtr_translate_1_2ad(self):
 
     def test_1ad_vtr_translate_1_2ad(self):
-        """ 1AD VTR translate 1 -> 2 1AD test
-        """
-        self.pg1.sub_if.set_vtr(
-            L2_VTR_OP.L2_TRANSLATE_1_2, inner=300, outer=400)
-        self.vtr_test(self.pg1, [Tag(dot1=DOT1AD, vlan=400),
-                                 Tag(dot1=DOT1Q, vlan=300),
-                                 Tag(dot1=DOT1Q, vlan=100)])
+        """1AD VTR translate 1 -> 2 1AD test"""
+        self.pg1.sub_if.set_vtr(L2_VTR_OP.L2_TRANSLATE_1_2, inner=300, outer=400)
+        self.vtr_test(
+            self.pg1,
+            [
+                Tag(dot1=DOT1AD, vlan=400),
+                Tag(dot1=DOT1Q, vlan=300),
+                Tag(dot1=DOT1Q, vlan=100),
+            ],
+        )
 
     def test_1ad_vtr_translate_2_1ad(self):
 
     def test_1ad_vtr_translate_2_1ad(self):
-        """ 1AD VTR translate 2 -> 1 1AD test
-        """
+        """1AD VTR translate 2 -> 1 1AD test"""
         self.pg1.sub_if.set_vtr(L2_VTR_OP.L2_TRANSLATE_2_1, tag=300)
         self.vtr_test(self.pg1, [Tag(dot1=DOT1AD, vlan=300)])
 
     def test_1ad_vtr_translate_2_2ad(self):
         self.pg1.sub_if.set_vtr(L2_VTR_OP.L2_TRANSLATE_2_1, tag=300)
         self.vtr_test(self.pg1, [Tag(dot1=DOT1AD, vlan=300)])
 
     def test_1ad_vtr_translate_2_2ad(self):
-        """ 1AD VTR translate 2 -> 2 1AD test
-        """
-        self.pg1.sub_if.set_vtr(
-            L2_VTR_OP.L2_TRANSLATE_2_2, inner=300, outer=400)
-        self.vtr_test(self.pg1, [Tag(dot1=DOT1AD, vlan=400),
-                                 Tag(dot1=DOT1Q, vlan=300)])
+        """1AD VTR translate 2 -> 2 1AD test"""
+        self.pg1.sub_if.set_vtr(L2_VTR_OP.L2_TRANSLATE_2_2, inner=300, outer=400)
+        self.vtr_test(self.pg1, [Tag(dot1=DOT1AD, vlan=400), Tag(dot1=DOT1Q, vlan=300)])
 
     def test_1ad_vtr_translate_1_1q(self):
 
     def test_1ad_vtr_translate_1_1q(self):
-        """ 1AD VTR translate 1 -> 1 1Q test
-        """
+        """1AD VTR translate 1 -> 1 1Q test"""
         self.pg1.sub_if.set_vtr(L2_VTR_OP.L2_TRANSLATE_1_1, tag=300, push1q=1)
         self.pg1.sub_if.set_vtr(L2_VTR_OP.L2_TRANSLATE_1_1, tag=300, push1q=1)
-        self.vtr_test(self.pg1, [Tag(dot1=DOT1Q, vlan=300),
-                                 Tag(dot1=DOT1Q, vlan=100)])
+        self.vtr_test(self.pg1, [Tag(dot1=DOT1Q, vlan=300), Tag(dot1=DOT1Q, vlan=100)])
 
     def test_1ad_vtr_translate_1_2q(self):
 
     def test_1ad_vtr_translate_1_2q(self):
-        """ 1AD VTR translate 1 -> 2 1Q test
-        """
+        """1AD VTR translate 1 -> 2 1Q test"""
         self.pg1.sub_if.set_vtr(
         self.pg1.sub_if.set_vtr(
-            L2_VTR_OP.L2_TRANSLATE_1_2, inner=300, outer=400, push1q=1)
-        self.vtr_test(self.pg1, [Tag(dot1=DOT1Q, vlan=400),
-                                 Tag(dot1=DOT1Q, vlan=300),
-                                 Tag(dot1=DOT1Q, vlan=100)])
+            L2_VTR_OP.L2_TRANSLATE_1_2, inner=300, outer=400, push1q=1
+        )
+        self.vtr_test(
+            self.pg1,
+            [
+                Tag(dot1=DOT1Q, vlan=400),
+                Tag(dot1=DOT1Q, vlan=300),
+                Tag(dot1=DOT1Q, vlan=100),
+            ],
+        )
 
     def test_1ad_vtr_translate_2_1q(self):
 
     def test_1ad_vtr_translate_2_1q(self):
-        """ 1AD VTR translate 2 -> 1 1Q test
-        """
+        """1AD VTR translate 2 -> 1 1Q test"""
         self.pg1.sub_if.set_vtr(L2_VTR_OP.L2_TRANSLATE_2_1, tag=300, push1q=1)
         self.vtr_test(self.pg1, [Tag(dot1=DOT1Q, vlan=300)])
 
     def test_1ad_vtr_translate_2_2q(self):
         self.pg1.sub_if.set_vtr(L2_VTR_OP.L2_TRANSLATE_2_1, tag=300, push1q=1)
         self.vtr_test(self.pg1, [Tag(dot1=DOT1Q, vlan=300)])
 
     def test_1ad_vtr_translate_2_2q(self):
-        """ 1AD VTR translate 2 -> 2 1Q test
-        """
+        """1AD VTR translate 2 -> 2 1Q test"""
         self.pg1.sub_if.set_vtr(
         self.pg1.sub_if.set_vtr(
-            L2_VTR_OP.L2_TRANSLATE_2_2, inner=300, outer=400, push1q=1)
-        self.vtr_test(self.pg1, [Tag(dot1=DOT1Q, vlan=400),
-                                 Tag(dot1=DOT1Q, vlan=300)])
+            L2_VTR_OP.L2_TRANSLATE_2_2, inner=300, outer=400, push1q=1
+        )
+        self.vtr_test(self.pg1, [Tag(dot1=DOT1Q, vlan=400), Tag(dot1=DOT1Q, vlan=300)])
 
     def test_1q_vtr_pop_1(self):
 
     def test_1q_vtr_pop_1(self):
-        """ 1Q VTR pop 1 test
-        """
+        """1Q VTR pop 1 test"""
         self.pg2.sub_if.set_vtr(L2_VTR_OP.L2_POP_1)
         self.vtr_test(self.pg2, [])
 
     def test_1q_vtr_push_1(self):
         self.pg2.sub_if.set_vtr(L2_VTR_OP.L2_POP_1)
         self.vtr_test(self.pg2, [])
 
     def test_1q_vtr_push_1(self):
-        """ 1Q VTR push 1 test
-        """
+        """1Q VTR push 1 test"""
         self.pg2.sub_if.set_vtr(L2_VTR_OP.L2_PUSH_1, tag=300)
         self.pg2.sub_if.set_vtr(L2_VTR_OP.L2_PUSH_1, tag=300)
-        self.vtr_test(self.pg2, [Tag(dot1=DOT1AD, vlan=300),
-                                 Tag(dot1=DOT1Q, vlan=200)])
+        self.vtr_test(self.pg2, [Tag(dot1=DOT1AD, vlan=300), Tag(dot1=DOT1Q, vlan=200)])
 
     def test_1q_vtr_push_2(self):
 
     def test_1q_vtr_push_2(self):
-        """ 1Q VTR push 2 test
-        """
+        """1Q VTR push 2 test"""
         self.pg2.sub_if.set_vtr(L2_VTR_OP.L2_PUSH_2, outer=400, inner=300)
         self.pg2.sub_if.set_vtr(L2_VTR_OP.L2_PUSH_2, outer=400, inner=300)
-        self.vtr_test(self.pg2, [Tag(dot1=DOT1AD, vlan=400),
-                                 Tag(dot1=DOT1Q, vlan=300),
-                                 Tag(dot1=DOT1Q, vlan=200)])
+        self.vtr_test(
+            self.pg2,
+            [
+                Tag(dot1=DOT1AD, vlan=400),
+                Tag(dot1=DOT1Q, vlan=300),
+                Tag(dot1=DOT1Q, vlan=200),
+            ],
+        )
 
     def test_1q_vtr_translate_1_1(self):
 
     def test_1q_vtr_translate_1_1(self):
-        """ 1Q VTR translate 1 -> 1 test
-        """
+        """1Q VTR translate 1 -> 1 test"""
         self.pg2.sub_if.set_vtr(L2_VTR_OP.L2_TRANSLATE_1_1, tag=300)
         self.vtr_test(self.pg2, [Tag(dot1=DOT1AD, vlan=300)])
 
     def test_1q_vtr_translate_1_2(self):
         self.pg2.sub_if.set_vtr(L2_VTR_OP.L2_TRANSLATE_1_1, tag=300)
         self.vtr_test(self.pg2, [Tag(dot1=DOT1AD, vlan=300)])
 
     def test_1q_vtr_translate_1_2(self):
-        """ 1Q VTR translate 1 -> 2 test
-        """
-        self.pg2.sub_if.set_vtr(
-            L2_VTR_OP.L2_TRANSLATE_1_2, inner=300, outer=400)
-        self.vtr_test(self.pg2, [Tag(dot1=DOT1AD, vlan=400),
-                                 Tag(dot1=DOT1Q, vlan=300)])
+        """1Q VTR translate 1 -> 2 test"""
+        self.pg2.sub_if.set_vtr(L2_VTR_OP.L2_TRANSLATE_1_2, inner=300, outer=400)
+        self.vtr_test(self.pg2, [Tag(dot1=DOT1AD, vlan=400), Tag(dot1=DOT1Q, vlan=300)])
 
     def test_if_vtr_disable(self):
 
     def test_if_vtr_disable(self):
-        """ Disable VTR on non-sub-interfaces
-        """
+        """Disable VTR on non-sub-interfaces"""
         # First set the VTR fields to junk
         self.vapi.l2_interface_vlan_tag_rewrite(
         # First set the VTR fields to junk
         self.vapi.l2_interface_vlan_tag_rewrite(
-            sw_if_index=self.pg0.sw_if_index, vtr_op=L2_VTR_OP.L2_PUSH_2,
-            push_dot1q=1, tag1=19, tag2=630)
-
-        if_state = self.vapi.sw_interface_dump(
-            sw_if_index=self.pg0.sw_if_index)
+            sw_if_index=self.pg0.sw_if_index,
+            vtr_op=L2_VTR_OP.L2_PUSH_2,
+            push_dot1q=1,
+            tag1=19,
+            tag2=630,
+        )
+
+        if_state = self.vapi.sw_interface_dump(sw_if_index=self.pg0.sw_if_index)
         self.assertEqual(if_state[0].sw_if_index, self.pg0.sw_if_index)
         self.assertNotEqual(if_state[0].vtr_op, L2_VTR_OP.L2_DISABLED)
 
         # Then ensure that a request to disable VTR is honored.
         self.vapi.l2_interface_vlan_tag_rewrite(
         self.assertEqual(if_state[0].sw_if_index, self.pg0.sw_if_index)
         self.assertNotEqual(if_state[0].vtr_op, L2_VTR_OP.L2_DISABLED)
 
         # Then ensure that a request to disable VTR is honored.
         self.vapi.l2_interface_vlan_tag_rewrite(
-            sw_if_index=self.pg0.sw_if_index, vtr_op=L2_VTR_OP.L2_DISABLED)
+            sw_if_index=self.pg0.sw_if_index, vtr_op=L2_VTR_OP.L2_DISABLED
+        )
 
 
-        if_state = self.vapi.sw_interface_dump(
-            sw_if_index=self.pg0.sw_if_index)
+        if_state = self.vapi.sw_interface_dump(sw_if_index=self.pg0.sw_if_index)
         self.assertEqual(if_state[0].sw_if_index, self.pg0.sw_if_index)
         self.assertEqual(if_state[0].vtr_op, L2_VTR_OP.L2_DISABLED)
 
     def test_if_vtr_push_1q(self):
         self.assertEqual(if_state[0].sw_if_index, self.pg0.sw_if_index)
         self.assertEqual(if_state[0].vtr_op, L2_VTR_OP.L2_DISABLED)
 
     def test_if_vtr_push_1q(self):
-        """ 1Q VTR push 1 on non-sub-interfaces
-        """
+        """1Q VTR push 1 on non-sub-interfaces"""
         self.vapi.l2_interface_vlan_tag_rewrite(
         self.vapi.l2_interface_vlan_tag_rewrite(
-            sw_if_index=self.pg0.sw_if_index, vtr_op=L2_VTR_OP.L2_PUSH_1,
-            push_dot1q=1, tag1=150)
+            sw_if_index=self.pg0.sw_if_index,
+            vtr_op=L2_VTR_OP.L2_PUSH_1,
+            push_dot1q=1,
+            tag1=150,
+        )
 
 
-        if_state = self.vapi.sw_interface_dump(
-            sw_if_index=self.pg0.sw_if_index)
+        if_state = self.vapi.sw_interface_dump(sw_if_index=self.pg0.sw_if_index)
         self.assertEqual(if_state[0].sw_if_index, self.pg0.sw_if_index)
         self.assertEqual(if_state[0].vtr_op, L2_VTR_OP.L2_PUSH_1)
         self.assertEqual(if_state[0].vtr_tag1, 150)
         self.assertNotEqual(if_state[0].vtr_push_dot1q, 0)
 
     def test_if_vtr_push_2ad(self):
         self.assertEqual(if_state[0].sw_if_index, self.pg0.sw_if_index)
         self.assertEqual(if_state[0].vtr_op, L2_VTR_OP.L2_PUSH_1)
         self.assertEqual(if_state[0].vtr_tag1, 150)
         self.assertNotEqual(if_state[0].vtr_push_dot1q, 0)
 
     def test_if_vtr_push_2ad(self):
-        """ 1AD VTR push 2 on non-sub-interfaces
-        """
+        """1AD VTR push 2 on non-sub-interfaces"""
         self.vapi.l2_interface_vlan_tag_rewrite(
         self.vapi.l2_interface_vlan_tag_rewrite(
-            sw_if_index=self.pg0.sw_if_index, vtr_op=L2_VTR_OP.L2_PUSH_2,
-            push_dot1q=0, tag1=450, tag2=350)
-
-        if_state = self.vapi.sw_interface_dump(
-            sw_if_index=self.pg0.sw_if_index)
+            sw_if_index=self.pg0.sw_if_index,
+            vtr_op=L2_VTR_OP.L2_PUSH_2,
+            push_dot1q=0,
+            tag1=450,
+            tag2=350,
+        )
+
+        if_state = self.vapi.sw_interface_dump(sw_if_index=self.pg0.sw_if_index)
         self.assertEqual(if_state[0].sw_if_index, self.pg0.sw_if_index)
         self.assertEqual(if_state[0].vtr_op, L2_VTR_OP.L2_PUSH_2)
         self.assertEqual(if_state[0].sw_if_index, self.pg0.sw_if_index)
         self.assertEqual(if_state[0].vtr_op, L2_VTR_OP.L2_PUSH_2)
-        self.assertEqual(if_state[0].vtr_tag1, 450)         # outer
-        self.assertEqual(if_state[0].vtr_tag2, 350)         # inner
+        self.assertEqual(if_state[0].vtr_tag1, 450)  # outer
+        self.assertEqual(if_state[0].vtr_tag2, 350)  # inner
         self.assertEqual(if_state[0].vtr_push_dot1q, 0)
 
         self.assertEqual(if_state[0].vtr_push_dot1q, 0)
 
-if __name__ == '__main__':
+
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index 4247a39..913fc40 100644 (file)
@@ -20,7 +20,7 @@ from vpp_neighbor import VppNeighbor
 
 
 class TestVxlan(BridgeDomain, VppTestCase):
 
 
 class TestVxlan(BridgeDomain, VppTestCase):
-    """ VXLAN Test Case """
+    """VXLAN Test Case"""
 
     def __init__(self, *args):
         BridgeDomain.__init__(self)
 
     def __init__(self, *args):
         BridgeDomain.__init__(self)
@@ -31,14 +31,16 @@ class TestVxlan(BridgeDomain, VppTestCase):
         Encapsulate the original payload frame by adding VXLAN header with its
         UDP, IP and Ethernet fields
         """
         Encapsulate the original payload frame by adding VXLAN header with its
         UDP, IP and Ethernet fields
         """
-        return (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-                IP(src=self.pg0.remote_ip4, dst=self.pg0.local_ip4) /
-                UDP(sport=self.dport, dport=self.dport, chksum=0) /
-                VXLAN(vni=vni, flags=self.flags) /
-                pkt)
+        return (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg0.local_ip4)
+            / UDP(sport=self.dport, dport=self.dport, chksum=0)
+            / VXLAN(vni=vni, flags=self.flags)
+            / pkt
+        )
 
     def ip_range(self, start, end):
 
     def ip_range(self, start, end):
-        """ range of remote ip's """
+        """range of remote ip's"""
         return ip4_range(self.pg0.remote_ip4, start, end)
 
     def encap_mcast(self, pkt, src_ip, src_mac, vni):
         return ip4_range(self.pg0.remote_ip4, start, end)
 
     def encap_mcast(self, pkt, src_ip, src_mac, vni):
@@ -46,18 +48,20 @@ class TestVxlan(BridgeDomain, VppTestCase):
         Encapsulate the original payload frame by adding VXLAN header with its
         UDP, IP and Ethernet fields
         """
         Encapsulate the original payload frame by adding VXLAN header with its
         UDP, IP and Ethernet fields
         """
-        return (Ether(src=src_mac, dst=self.mcast_mac) /
-                IP(src=src_ip, dst=self.mcast_ip4) /
-                UDP(sport=self.dport, dport=self.dport, chksum=0) /
-                VXLAN(vni=vni, flags=self.flags) /
-                pkt)
+        return (
+            Ether(src=src_mac, dst=self.mcast_mac)
+            / IP(src=src_ip, dst=self.mcast_ip4)
+            / UDP(sport=self.dport, dport=self.dport, chksum=0)
+            / VXLAN(vni=vni, flags=self.flags)
+            / pkt
+        )
 
     def decapsulate(self, pkt):
         """
         Decapsulate the original payload frame by removing VXLAN header
         """
         # check if is set I flag
 
     def decapsulate(self, pkt):
         """
         Decapsulate the original payload frame by removing VXLAN header
         """
         # check if is set I flag
-        self.assertEqual(pkt[VXLAN].flags, int('0x8', 16))
+        self.assertEqual(pkt[VXLAN].flags, int("0x8", 16))
         return pkt[VXLAN].payload
 
     # Method for checking VXLAN encapsulation.
         return pkt[VXLAN].payload
 
     # Method for checking VXLAN encapsulation.
@@ -93,18 +97,25 @@ class TestVxlan(BridgeDomain, VppTestCase):
         ip_range_start = 10
         ip_range_end = ip_range_start + n_ucast_tunnels
         next_hop_address = cls.pg0.remote_ip4
         ip_range_start = 10
         ip_range_end = ip_range_start + n_ucast_tunnels
         next_hop_address = cls.pg0.remote_ip4
-        for dest_ip4 in ip4_range(next_hop_address, ip_range_start,
-                                  ip_range_end):
+        for dest_ip4 in ip4_range(next_hop_address, ip_range_start, ip_range_end):
             # add host route so dest_ip4 will not be resolved
             # add host route so dest_ip4 will not be resolved
-            rip = VppIpRoute(cls, dest_ip4, 32,
-                             [VppRoutePath(next_hop_address,
-                                           INVALID_INDEX)],
-                             register=False)
+            rip = VppIpRoute(
+                cls,
+                dest_ip4,
+                32,
+                [VppRoutePath(next_hop_address, INVALID_INDEX)],
+                register=False,
+            )
             rip.add_vpp_config()
 
             rip.add_vpp_config()
 
-            r = VppVxlanTunnel(cls, src=cls.pg0.local_ip4,
-                               src_port=port, dst_port=port,
-                               dst=dest_ip4, vni=vni)
+            r = VppVxlanTunnel(
+                cls,
+                src=cls.pg0.local_ip4,
+                src_port=port,
+                dst_port=port,
+                dst=dest_ip4,
+                vni=vni,
+            )
             r.add_vpp_config()
             cls.vapi.sw_interface_set_l2_bridge(r.sw_if_index, bd_id=vni)
 
             r.add_vpp_config()
             cls.vapi.sw_interface_set_l2_bridge(r.sw_if_index, bd_id=vni)
 
@@ -118,12 +129,18 @@ class TestVxlan(BridgeDomain, VppTestCase):
         vni_start = 10000
         vni_end = vni_start + n_shared_dst_tunnels
         for vni in range(vni_start, vni_end):
         vni_start = 10000
         vni_end = vni_start + n_shared_dst_tunnels
         for vni in range(vni_start, vni_end):
-            r = VppVxlanTunnel(cls, src=cls.pg0.local_ip4,
-                               src_port=port, dst_port=port,
-                               dst=cls.mcast_ip4, mcast_sw_if_index=1, vni=vni)
+            r = VppVxlanTunnel(
+                cls,
+                src=cls.pg0.local_ip4,
+                src_port=port,
+                dst_port=port,
+                dst=cls.mcast_ip4,
+                mcast_sw_if_index=1,
+                vni=vni,
+            )
             if is_add:
                 r.add_vpp_config()
             if is_add:
                 r.add_vpp_config()
-                if r.sw_if_index == 0xffffffff:
+                if r.sw_if_index == 0xFFFFFFFF:
                     raise ValueError("bad sw_if_index: ~0")
             else:
                 r.remove_vpp_config()
                     raise ValueError("bad sw_if_index: ~0")
             else:
                 r.remove_vpp_config()
@@ -144,12 +161,17 @@ class TestVxlan(BridgeDomain, VppTestCase):
         n_distinct_dst_tunnels = 200
         ip_range_start = 10
         ip_range_end = ip_range_start + n_distinct_dst_tunnels
         n_distinct_dst_tunnels = 200
         ip_range_start = 10
         ip_range_end = ip_range_start + n_distinct_dst_tunnels
-        for dest_ip4 in ip4_range(cls.mcast_ip4, ip_range_start,
-                                  ip_range_end):
+        for dest_ip4 in ip4_range(cls.mcast_ip4, ip_range_start, ip_range_end):
             vni = bytearray(socket.inet_pton(socket.AF_INET, dest_ip4))[3]
             vni = bytearray(socket.inet_pton(socket.AF_INET, dest_ip4))[3]
-            r = VppVxlanTunnel(cls, src=cls.pg0.local_ip4,
-                               src_port=port, dst_port=port,
-                               dst=dest_ip4, mcast_sw_if_index=1, vni=vni)
+            r = VppVxlanTunnel(
+                cls,
+                src=cls.pg0.local_ip4,
+                src_port=port,
+                dst_port=port,
+                dst=dest_ip4,
+                mcast_sw_if_index=1,
+                vni=vni,
+            )
             if is_add:
                 r.add_vpp_config()
             else:
             if is_add:
                 r.add_vpp_config()
             else:
@@ -187,7 +209,7 @@ class TestVxlan(BridgeDomain, VppTestCase):
             cls.pg0.resolve_arp()
 
             # Our Multicast address
             cls.pg0.resolve_arp()
 
             # Our Multicast address
-            cls.mcast_ip4 = '239.1.1.1'
+            cls.mcast_ip4 = "239.1.1.1"
             cls.mcast_mac = util.mcast_ip_to_mac(cls.mcast_ip4)
         except Exception:
             cls.tearDownClass()
             cls.mcast_mac = util.mcast_ip_to_mac(cls.mcast_ip4)
         except Exception:
             cls.tearDownClass()
@@ -207,30 +229,44 @@ class TestVxlan(BridgeDomain, VppTestCase):
 
         self.single_tunnel_vni = 0x12345
         self.single_tunnel_bd = 1
 
         self.single_tunnel_vni = 0x12345
         self.single_tunnel_bd = 1
-        r = VppVxlanTunnel(self, src=self.pg0.local_ip4,
-                           dst=self.pg0.remote_ip4,
-                           src_port=self.dport, dst_port=self.dport,
-                           vni=self.single_tunnel_vni)
+        r = VppVxlanTunnel(
+            self,
+            src=self.pg0.local_ip4,
+            dst=self.pg0.remote_ip4,
+            src_port=self.dport,
+            dst_port=self.dport,
+            vni=self.single_tunnel_vni,
+        )
         r.add_vpp_config()
         r.add_vpp_config()
-        self.vapi.sw_interface_set_l2_bridge(rx_sw_if_index=r.sw_if_index,
-                                             bd_id=self.single_tunnel_bd)
         self.vapi.sw_interface_set_l2_bridge(
         self.vapi.sw_interface_set_l2_bridge(
-            rx_sw_if_index=self.pg1.sw_if_index, bd_id=self.single_tunnel_bd)
+            rx_sw_if_index=r.sw_if_index, bd_id=self.single_tunnel_bd
+        )
+        self.vapi.sw_interface_set_l2_bridge(
+            rx_sw_if_index=self.pg1.sw_if_index, bd_id=self.single_tunnel_bd
+        )
 
         # Setup vni 2 to test multicast flooding
         self.n_ucast_tunnels = 10
         self.mcast_flood_bd = 2
 
         # Setup vni 2 to test multicast flooding
         self.n_ucast_tunnels = 10
         self.mcast_flood_bd = 2
-        self.create_vxlan_flood_test_bd(self.mcast_flood_bd,
-                                        self.n_ucast_tunnels,
-                                        self.dport)
-        r = VppVxlanTunnel(self, src=self.pg0.local_ip4, dst=self.mcast_ip4,
-                           src_port=self.dport, dst_port=self.dport,
-                           mcast_sw_if_index=1, vni=self.mcast_flood_bd)
+        self.create_vxlan_flood_test_bd(
+            self.mcast_flood_bd, self.n_ucast_tunnels, self.dport
+        )
+        r = VppVxlanTunnel(
+            self,
+            src=self.pg0.local_ip4,
+            dst=self.mcast_ip4,
+            src_port=self.dport,
+            dst_port=self.dport,
+            mcast_sw_if_index=1,
+            vni=self.mcast_flood_bd,
+        )
         r.add_vpp_config()
         r.add_vpp_config()
-        self.vapi.sw_interface_set_l2_bridge(rx_sw_if_index=r.sw_if_index,
-                                             bd_id=self.mcast_flood_bd)
         self.vapi.sw_interface_set_l2_bridge(
         self.vapi.sw_interface_set_l2_bridge(
-            rx_sw_if_index=self.pg2.sw_if_index, bd_id=self.mcast_flood_bd)
+            rx_sw_if_index=r.sw_if_index, bd_id=self.mcast_flood_bd
+        )
+        self.vapi.sw_interface_set_l2_bridge(
+            rx_sw_if_index=self.pg2.sw_if_index, bd_id=self.mcast_flood_bd
+        )
 
         # Add and delete mcast tunnels to check stability
         self.add_shared_mcast_dst_load(self.dport)
 
         # Add and delete mcast tunnels to check stability
         self.add_shared_mcast_dst_load(self.dport)
@@ -240,11 +276,12 @@ class TestVxlan(BridgeDomain, VppTestCase):
 
         # Setup vni 3 to test unicast flooding
         self.ucast_flood_bd = 3
 
         # Setup vni 3 to test unicast flooding
         self.ucast_flood_bd = 3
-        self.create_vxlan_flood_test_bd(self.ucast_flood_bd,
-                                        self.n_ucast_tunnels,
-                                        self.dport)
+        self.create_vxlan_flood_test_bd(
+            self.ucast_flood_bd, self.n_ucast_tunnels, self.dport
+        )
         self.vapi.sw_interface_set_l2_bridge(
         self.vapi.sw_interface_set_l2_bridge(
-            rx_sw_if_index=self.pg3.sw_if_index, bd_id=self.ucast_flood_bd)
+            rx_sw_if_index=self.pg3.sw_if_index, bd_id=self.ucast_flood_bd
+        )
 
         # Set scapy listen custom port for VxLAN
         bind_layers(UDP, VXLAN, dport=self.dport)
 
         # Set scapy listen custom port for VxLAN
         bind_layers(UDP, VXLAN, dport=self.dport)
@@ -252,10 +289,12 @@ class TestVxlan(BridgeDomain, VppTestCase):
     def encap_big_packet(self):
         self.vapi.sw_interface_set_mtu(self.pg0.sw_if_index, [1500, 0, 0, 0])
 
     def encap_big_packet(self):
         self.vapi.sw_interface_set_mtu(self.pg0.sw_if_index, [1500, 0, 0, 0])
 
-        frame = (Ether(src='00:00:00:00:00:02', dst='00:00:00:00:00:01') /
-                 IP(src='4.3.2.1', dst='1.2.3.4') /
-                 UDP(sport=20000, dport=10000) /
-                 Raw(b'\xa5' * 1450))
+        frame = (
+            Ether(src="00:00:00:00:00:02", dst="00:00:00:00:00:01")
+            / IP(src="4.3.2.1", dst="1.2.3.4")
+            / UDP(sport=20000, dport=10000)
+            / Raw(b"\xa5" * 1450)
+        )
 
         self.pg1.add_stream([frame])
 
 
         self.pg1.add_stream([frame])
 
@@ -277,43 +316,44 @@ class TestVxlan(BridgeDomain, VppTestCase):
     """
     Tests with default port (4789)
     """
     """
     Tests with default port (4789)
     """
+
     def test_decap(self):
     def test_decap(self):
-        """ Decapsulation test
+        """Decapsulation test
         from BridgeDoman
         """
         self.createVxLANInterfaces()
         super(TestVxlan, self).test_decap()
 
     def test_encap(self):
         from BridgeDoman
         """
         self.createVxLANInterfaces()
         super(TestVxlan, self).test_decap()
 
     def test_encap(self):
-        """ Encapsulation test
+        """Encapsulation test
         from BridgeDoman
         """
         self.createVxLANInterfaces()
         super(TestVxlan, self).test_encap()
 
     def test_encap_big_packet(self):
         from BridgeDoman
         """
         self.createVxLANInterfaces()
         super(TestVxlan, self).test_encap()
 
     def test_encap_big_packet(self):
-        """ Encapsulation test send big frame from pg1
+        """Encapsulation test send big frame from pg1
         Verify receipt of encapsulated frames on pg0
         """
         self.createVxLANInterfaces()
         self.encap_big_packet()
 
     def test_ucast_flood(self):
         Verify receipt of encapsulated frames on pg0
         """
         self.createVxLANInterfaces()
         self.encap_big_packet()
 
     def test_ucast_flood(self):
-        """ Unicast flood test
+        """Unicast flood test
         from BridgeDoman
         """
         self.createVxLANInterfaces()
         super(TestVxlan, self).test_ucast_flood()
 
     def test_mcast_flood(self):
         from BridgeDoman
         """
         self.createVxLANInterfaces()
         super(TestVxlan, self).test_ucast_flood()
 
     def test_mcast_flood(self):
-        """ Multicast flood test
+        """Multicast flood test
         from BridgeDoman
         """
         self.createVxLANInterfaces()
         super(TestVxlan, self).test_mcast_flood()
 
     def test_mcast_rcv(self):
         from BridgeDoman
         """
         self.createVxLANInterfaces()
         super(TestVxlan, self).test_mcast_flood()
 
     def test_mcast_rcv(self):
-        """ Multicast receive test
+        """Multicast receive test
         from BridgeDoman
         """
         self.createVxLANInterfaces()
         from BridgeDoman
         """
         self.createVxLANInterfaces()
@@ -322,36 +362,37 @@ class TestVxlan(BridgeDomain, VppTestCase):
     """
     Tests with custom port
     """
     """
     Tests with custom port
     """
+
     def test_decap_custom_port(self):
     def test_decap_custom_port(self):
-        """ Decapsulation test custom port
+        """Decapsulation test custom port
         from BridgeDoman
         """
         self.createVxLANInterfaces(1111)
         super(TestVxlan, self).test_decap()
 
     def test_encap_custom_port(self):
         from BridgeDoman
         """
         self.createVxLANInterfaces(1111)
         super(TestVxlan, self).test_decap()
 
     def test_encap_custom_port(self):
-        """ Encapsulation test custom port
+        """Encapsulation test custom port
         from BridgeDoman
         """
         self.createVxLANInterfaces(1111)
         super(TestVxlan, self).test_encap()
 
     def test_ucast_flood_custom_port(self):
         from BridgeDoman
         """
         self.createVxLANInterfaces(1111)
         super(TestVxlan, self).test_encap()
 
     def test_ucast_flood_custom_port(self):
-        """ Unicast flood test custom port
+        """Unicast flood test custom port
         from BridgeDoman
         """
         self.createVxLANInterfaces(1111)
         super(TestVxlan, self).test_ucast_flood()
 
     def test_mcast_flood_custom_port(self):
         from BridgeDoman
         """
         self.createVxLANInterfaces(1111)
         super(TestVxlan, self).test_ucast_flood()
 
     def test_mcast_flood_custom_port(self):
-        """ Multicast flood test custom port
+        """Multicast flood test custom port
         from BridgeDoman
         """
         self.createVxLANInterfaces(1111)
         super(TestVxlan, self).test_mcast_flood()
 
     def test_mcast_rcv_custom_port(self):
         from BridgeDoman
         """
         self.createVxLANInterfaces(1111)
         super(TestVxlan, self).test_mcast_flood()
 
     def test_mcast_rcv_custom_port(self):
-        """ Multicast receive test custom port
+        """Multicast receive test custom port
         from BridgeDoman
         """
         self.createVxLANInterfaces(1111)
         from BridgeDoman
         """
         self.createVxLANInterfaces(1111)
@@ -372,7 +413,8 @@ class TestVxlan(BridgeDomain, VppTestCase):
 
 
 class TestVxlan2(VppTestCase):
 
 
 class TestVxlan2(VppTestCase):
-    """ VXLAN Test Case """
+    """VXLAN Test Case"""
+
     def setUp(self):
         super(TestVxlan2, self).setUp()
 
     def setUp(self):
         super(TestVxlan2, self).setUp()
 
@@ -389,38 +431,37 @@ class TestVxlan2(VppTestCase):
         super(TestVxlan2, self).tearDown()
 
     def test_xconnect(self):
         super(TestVxlan2, self).tearDown()
 
     def test_xconnect(self):
-        """ VXLAN source address not local """
+        """VXLAN source address not local"""
 
         #
         # test the broken configuration of a VXLAN tunnel whose
         # source address is not local ot the box. packets sent
         # through the tunnel should be dropped
         #
 
         #
         # test the broken configuration of a VXLAN tunnel whose
         # source address is not local ot the box. packets sent
         # through the tunnel should be dropped
         #
-        t = VppVxlanTunnel(self,
-                           src="10.0.0.5",
-                           dst=self.pg0.local_ip4,
-                           vni=1000)
+        t = VppVxlanTunnel(self, src="10.0.0.5", dst=self.pg0.local_ip4, vni=1000)
         t.add_vpp_config()
         t.admin_up()
 
         t.add_vpp_config()
         t.admin_up()
 
-        self.vapi.sw_interface_set_l2_xconnect(t.sw_if_index,
-                                               self.pg1.sw_if_index,
-                                               enable=1)
-        self.vapi.sw_interface_set_l2_xconnect(self.pg1.sw_if_index,
-                                               t.sw_if_index,
-                                               enable=1)
+        self.vapi.sw_interface_set_l2_xconnect(
+            t.sw_if_index, self.pg1.sw_if_index, enable=1
+        )
+        self.vapi.sw_interface_set_l2_xconnect(
+            self.pg1.sw_if_index, t.sw_if_index, enable=1
+        )
 
 
-        p = (Ether(src="00:11:22:33:44:55",
-                   dst="00:00:00:11:22:33") /
-             IP(src="4.3.2.1", dst="1.2.3.4") /
-             UDP(sport=20000, dport=10000) /
-             Raw(b'\xa5' * 1450))
+        p = (
+            Ether(src="00:11:22:33:44:55", dst="00:00:00:11:22:33")
+            / IP(src="4.3.2.1", dst="1.2.3.4")
+            / UDP(sport=20000, dport=10000)
+            / Raw(b"\xa5" * 1450)
+        )
 
         rx = self.send_and_assert_no_replies(self.pg1, [p])
 
 
 class TestVxlanL2Mode(VppTestCase):
 
         rx = self.send_and_assert_no_replies(self.pg1, [p])
 
 
 class TestVxlanL2Mode(VppTestCase):
-    """ VXLAN Test Case """
+    """VXLAN Test Case"""
+
     def setUp(self):
         super(TestVxlanL2Mode, self).setUp()
 
     def setUp(self):
         super(TestVxlanL2Mode, self).setUp()
 
@@ -440,11 +481,10 @@ class TestVxlanL2Mode(VppTestCase):
         super(TestVxlanL2Mode, self).tearDown()
 
     def test_l2_mode(self):
         super(TestVxlanL2Mode, self).tearDown()
 
     def test_l2_mode(self):
-        """ VXLAN L2 mode """
-        t = VppVxlanTunnel(self,
-                           src=self.pg0.local_ip4,
-                           dst=self.pg0.remote_ip4,
-                           vni=1000, is_l3=False)
+        """VXLAN L2 mode"""
+        t = VppVxlanTunnel(
+            self, src=self.pg0.local_ip4, dst=self.pg0.remote_ip4, vni=1000, is_l3=False
+        )
         t.add_vpp_config()
         t.config_ip4()
         t.admin_up()
         t.add_vpp_config()
         t.config_ip4()
         t.admin_up()
@@ -452,10 +492,12 @@ class TestVxlanL2Mode(VppTestCase):
         dstIP = t.local_ip4[:-1] + "2"
 
         # Create a packet to send
         dstIP = t.local_ip4[:-1] + "2"
 
         # Create a packet to send
-        p = (Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac) /
-             IP(src=self.pg1.local_ip4, dst=dstIP) /
-             UDP(sport=555, dport=556) /
-             Raw(b'\x00' * 80))
+        p = (
+            Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac)
+            / IP(src=self.pg1.local_ip4, dst=dstIP)
+            / UDP(sport=555, dport=556)
+            / Raw(b"\x00" * 80)
+        )
 
         # Expect ARP request
         rx = self.send_and_expect(self.pg1, [p], self.pg0)
 
         # Expect ARP request
         rx = self.send_and_expect(self.pg1, [p], self.pg0)
@@ -466,9 +508,7 @@ class TestVxlanL2Mode(VppTestCase):
             self.assertEqual(p[ARP].pdst, dstIP)
 
         # Resolve ARP
             self.assertEqual(p[ARP].pdst, dstIP)
 
         # Resolve ARP
-        VppNeighbor(self, t.sw_if_index,
-                    self.pg1.remote_mac,
-                    dstIP).add_vpp_config()
+        VppNeighbor(self, t.sw_if_index, self.pg1.remote_mac, dstIP).add_vpp_config()
 
         # Send packets
         NUM_PKTS = 128
 
         # Send packets
         NUM_PKTS = 128
@@ -476,5 +516,5 @@ class TestVxlanL2Mode(VppTestCase):
         self.assertEqual(NUM_PKTS, len(rx))
 
 
         self.assertEqual(NUM_PKTS, len(rx))
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index 123cce9..0f9c512 100644 (file)
@@ -17,7 +17,7 @@ from vpp_ip import INVALID_INDEX
 
 
 class TestVxlan6(BridgeDomain, VppTestCase):
 
 
 class TestVxlan6(BridgeDomain, VppTestCase):
-    """ VXLAN over IPv6 Test Case """
+    """VXLAN over IPv6 Test Case"""
 
     def __init__(self, *args):
         BridgeDomain.__init__(self)
 
     def __init__(self, *args):
         BridgeDomain.__init__(self)
@@ -28,16 +28,18 @@ class TestVxlan6(BridgeDomain, VppTestCase):
         Encapsulate the original payload frame by adding VXLAN header with its
         UDP, IP and Ethernet fields
         """
         Encapsulate the original payload frame by adding VXLAN header with its
         UDP, IP and Ethernet fields
         """
-        return (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-                IPv6(src=self.pg0.remote_ip6, dst=self.pg0.local_ip6) /
-                UDP(sport=self.dport, dport=self.dport, chksum=0) /
-                VXLAN(vni=vni, flags=self.flags) /
-                pkt)
+        return (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IPv6(src=self.pg0.remote_ip6, dst=self.pg0.local_ip6)
+            / UDP(sport=self.dport, dport=self.dport, chksum=0)
+            / VXLAN(vni=vni, flags=self.flags)
+            / pkt
+        )
 
     @classmethod
     def ip_range(cls, s, e):
 
     @classmethod
     def ip_range(cls, s, e):
-        """ range of remote ip's """
-        tmp = cls.pg0.remote_ip6.rsplit(':', 1)[0]
+        """range of remote ip's"""
+        tmp = cls.pg0.remote_ip6.rsplit(":", 1)[0]
         return ("%s:%x" % (tmp, i) for i in range(s, e))
 
     def encap_mcast(self, pkt, src_ip, src_mac, vni):
         return ("%s:%x" % (tmp, i) for i in range(s, e))
 
     def encap_mcast(self, pkt, src_ip, src_mac, vni):
@@ -45,18 +47,20 @@ class TestVxlan6(BridgeDomain, VppTestCase):
         Encapsulate the original payload frame by adding VXLAN header with its
         UDP, IP and Ethernet fields
         """
         Encapsulate the original payload frame by adding VXLAN header with its
         UDP, IP and Ethernet fields
         """
-        return (Ether(src=src_mac, dst=self.mcast_mac) /
-                IPv6(src=src_ip, dst=self.mcast_ip6) /
-                UDP(sport=self.dport, dport=self.dport, chksum=0) /
-                VXLAN(vni=vni, flags=self.flags) /
-                pkt)
+        return (
+            Ether(src=src_mac, dst=self.mcast_mac)
+            / IPv6(src=src_ip, dst=self.mcast_ip6)
+            / UDP(sport=self.dport, dport=self.dport, chksum=0)
+            / VXLAN(vni=vni, flags=self.flags)
+            / pkt
+        )
 
     def decapsulate(self, pkt):
         """
         Decapsulate the original payload frame by removing VXLAN header
         """
         # check if is set I flag
 
     def decapsulate(self, pkt):
         """
         Decapsulate the original payload frame by removing VXLAN header
         """
         # check if is set I flag
-        self.assertEqual(pkt[VXLAN].flags, int('0x8', 16))
+        self.assertEqual(pkt[VXLAN].flags, int("0x8", 16))
         return pkt[VXLAN].payload
 
     # Method for checking VXLAN encapsulation.
         return pkt[VXLAN].payload
 
     # Method for checking VXLAN encapsulation.
@@ -93,13 +97,22 @@ class TestVxlan6(BridgeDomain, VppTestCase):
         end = start + n_ucast_tunnels
         for dest_ip6 in cls.ip_range(start, end):
             # add host route so dest ip will not be resolved
         end = start + n_ucast_tunnels
         for dest_ip6 in cls.ip_range(start, end):
             # add host route so dest ip will not be resolved
-            rip = VppIpRoute(cls, dest_ip6, 128,
-                             [VppRoutePath(cls.pg0.remote_ip6, INVALID_INDEX)],
-                             register=False)
+            rip = VppIpRoute(
+                cls,
+                dest_ip6,
+                128,
+                [VppRoutePath(cls.pg0.remote_ip6, INVALID_INDEX)],
+                register=False,
+            )
             rip.add_vpp_config()
             rip.add_vpp_config()
-            r = VppVxlanTunnel(cls, src=cls.pg0.local_ip6,
-                               src_port=port, dst_port=port,
-                               dst=dest_ip6, vni=vni)
+            r = VppVxlanTunnel(
+                cls,
+                src=cls.pg0.local_ip6,
+                src_port=port,
+                dst_port=port,
+                dst=dest_ip6,
+                vni=vni,
+            )
             r.add_vpp_config()
             cls.vapi.sw_interface_set_l2_bridge(r.sw_if_index, bd_id=vni)
 
             r.add_vpp_config()
             cls.vapi.sw_interface_set_l2_bridge(r.sw_if_index, bd_id=vni)
 
@@ -135,7 +148,7 @@ class TestVxlan6(BridgeDomain, VppTestCase):
             cls.pg0.resolve_ndp()
 
             # Our Multicast address
             cls.pg0.resolve_ndp()
 
             # Our Multicast address
-            cls.mcast_ip6 = 'ff0e::1'
+            cls.mcast_ip6 = "ff0e::1"
             cls.mcast_mac = util.mcast_ip_to_mac(cls.mcast_ip6)
         except Exception:
             super(TestVxlan6, cls).tearDownClass()
             cls.mcast_mac = util.mcast_ip_to_mac(cls.mcast_ip6)
         except Exception:
             super(TestVxlan6, cls).tearDownClass()
@@ -155,38 +168,53 @@ class TestVxlan6(BridgeDomain, VppTestCase):
 
         self.single_tunnel_vni = 0x12345
         self.single_tunnel_bd = 1
 
         self.single_tunnel_vni = 0x12345
         self.single_tunnel_bd = 1
-        r = VppVxlanTunnel(self, src=self.pg0.local_ip6,
-                           dst=self.pg0.remote_ip6,
-                           src_port=self.dport, dst_port=self.dport,
-                           vni=self.single_tunnel_vni)
+        r = VppVxlanTunnel(
+            self,
+            src=self.pg0.local_ip6,
+            dst=self.pg0.remote_ip6,
+            src_port=self.dport,
+            dst_port=self.dport,
+            vni=self.single_tunnel_vni,
+        )
         r.add_vpp_config()
         r.add_vpp_config()
-        self.vapi.sw_interface_set_l2_bridge(rx_sw_if_index=r.sw_if_index,
-                                             bd_id=self.single_tunnel_bd)
         self.vapi.sw_interface_set_l2_bridge(
         self.vapi.sw_interface_set_l2_bridge(
-            rx_sw_if_index=self.pg1.sw_if_index, bd_id=self.single_tunnel_bd)
+            rx_sw_if_index=r.sw_if_index, bd_id=self.single_tunnel_bd
+        )
+        self.vapi.sw_interface_set_l2_bridge(
+            rx_sw_if_index=self.pg1.sw_if_index, bd_id=self.single_tunnel_bd
+        )
 
         # Setup vni 2 to test multicast flooding
         self.n_ucast_tunnels = 10
         self.mcast_flood_bd = 2
 
         # Setup vni 2 to test multicast flooding
         self.n_ucast_tunnels = 10
         self.mcast_flood_bd = 2
-        self.create_vxlan_flood_test_bd(self.mcast_flood_bd,
-                                        self.n_ucast_tunnels,
-                                        self.dport)
-        r = VppVxlanTunnel(self, src=self.pg0.local_ip6, dst=self.mcast_ip6,
-                           src_port=self.dport, dst_port=self.dport,
-                           mcast_sw_if_index=1, vni=self.mcast_flood_bd)
+        self.create_vxlan_flood_test_bd(
+            self.mcast_flood_bd, self.n_ucast_tunnels, self.dport
+        )
+        r = VppVxlanTunnel(
+            self,
+            src=self.pg0.local_ip6,
+            dst=self.mcast_ip6,
+            src_port=self.dport,
+            dst_port=self.dport,
+            mcast_sw_if_index=1,
+            vni=self.mcast_flood_bd,
+        )
         r.add_vpp_config()
         r.add_vpp_config()
-        self.vapi.sw_interface_set_l2_bridge(rx_sw_if_index=r.sw_if_index,
-                                             bd_id=self.mcast_flood_bd)
         self.vapi.sw_interface_set_l2_bridge(
         self.vapi.sw_interface_set_l2_bridge(
-            rx_sw_if_index=self.pg2.sw_if_index, bd_id=self.mcast_flood_bd)
+            rx_sw_if_index=r.sw_if_index, bd_id=self.mcast_flood_bd
+        )
+        self.vapi.sw_interface_set_l2_bridge(
+            rx_sw_if_index=self.pg2.sw_if_index, bd_id=self.mcast_flood_bd
+        )
 
         # Setup vni 3 to test unicast flooding
         self.ucast_flood_bd = 3
 
         # Setup vni 3 to test unicast flooding
         self.ucast_flood_bd = 3
-        self.create_vxlan_flood_test_bd(self.ucast_flood_bd,
-                                        self.n_ucast_tunnels,
-                                        self.dport)
+        self.create_vxlan_flood_test_bd(
+            self.ucast_flood_bd, self.n_ucast_tunnels, self.dport
+        )
         self.vapi.sw_interface_set_l2_bridge(
         self.vapi.sw_interface_set_l2_bridge(
-            rx_sw_if_index=self.pg3.sw_if_index, bd_id=self.ucast_flood_bd)
+            rx_sw_if_index=self.pg3.sw_if_index, bd_id=self.ucast_flood_bd
+        )
 
         # Set scapy listen custom port for VxLAN
         bind_layers(UDP, VXLAN, dport=self.dport)
 
         # Set scapy listen custom port for VxLAN
         bind_layers(UDP, VXLAN, dport=self.dport)
@@ -204,10 +232,12 @@ class TestVxlan6(BridgeDomain, VppTestCase):
         self.logger.info(self.vapi.cli("show vxlan tunnel"))
 
     def encap_fragmented_packet(self):
         self.logger.info(self.vapi.cli("show vxlan tunnel"))
 
     def encap_fragmented_packet(self):
-        frame = (Ether(src='00:00:00:00:00:02', dst='00:00:00:00:00:01') /
-                 IP(src='4.3.2.1', dst='1.2.3.4') /
-                 UDP(sport=20000, dport=10000) /
-                 Raw(b'\xa5' * 1000))
+        frame = (
+            Ether(src="00:00:00:00:00:02", dst="00:00:00:00:00:01")
+            / IP(src="4.3.2.1", dst="1.2.3.4")
+            / UDP(sport=20000, dport=10000)
+            / Raw(b"\xa5" * 1000)
+        )
 
         frags = util.fragment_rfc791(frame, 400)
 
 
         frags = util.fragment_rfc791(frame, 400)
 
@@ -231,43 +261,44 @@ class TestVxlan6(BridgeDomain, VppTestCase):
     """
     Tests with default port (4789)
     """
     """
     Tests with default port (4789)
     """
+
     def test_decap(self):
     def test_decap(self):
-        """ Decapsulation test
+        """Decapsulation test
         from BridgeDoman
         """
         self.createVxLANInterfaces()
         super(TestVxlan6, self).test_decap()
 
     def test_encap(self):
         from BridgeDoman
         """
         self.createVxLANInterfaces()
         super(TestVxlan6, self).test_decap()
 
     def test_encap(self):
-        """ Encapsulation test
+        """Encapsulation test
         from BridgeDoman
         """
         self.createVxLANInterfaces()
         super(TestVxlan6, self).test_encap()
 
     def test_encap_fragmented_packet(self):
         from BridgeDoman
         """
         self.createVxLANInterfaces()
         super(TestVxlan6, self).test_encap()
 
     def test_encap_fragmented_packet(self):
-        """ Encapsulation test send fragments from pg1
+        """Encapsulation test send fragments from pg1
         Verify receipt of encapsulated frames on pg0
         """
         self.createVxLANInterfaces()
         self.encap_fragmented_packet()
 
     def test_ucast_flood(self):
         Verify receipt of encapsulated frames on pg0
         """
         self.createVxLANInterfaces()
         self.encap_fragmented_packet()
 
     def test_ucast_flood(self):
-        """ Unicast flood test
+        """Unicast flood test
         from BridgeDoman
         """
         self.createVxLANInterfaces()
         super(TestVxlan6, self).test_ucast_flood()
 
     def test_mcast_flood(self):
         from BridgeDoman
         """
         self.createVxLANInterfaces()
         super(TestVxlan6, self).test_ucast_flood()
 
     def test_mcast_flood(self):
-        """ Multicast flood test
+        """Multicast flood test
         from BridgeDoman
         """
         self.createVxLANInterfaces()
         super(TestVxlan6, self).test_mcast_flood()
 
     def test_mcast_rcv(self):
         from BridgeDoman
         """
         self.createVxLANInterfaces()
         super(TestVxlan6, self).test_mcast_flood()
 
     def test_mcast_rcv(self):
-        """ Multicast receive test
+        """Multicast receive test
         from BridgeDoman
         """
         self.createVxLANInterfaces()
         from BridgeDoman
         """
         self.createVxLANInterfaces()
@@ -276,41 +307,42 @@ class TestVxlan6(BridgeDomain, VppTestCase):
     """
     Tests with custom port
     """
     """
     Tests with custom port
     """
+
     def test_decap_custom_port(self):
     def test_decap_custom_port(self):
-        """ Decapsulation test custom port
+        """Decapsulation test custom port
         from BridgeDoman
         """
         self.createVxLANInterfaces(1111)
         super(TestVxlan6, self).test_decap()
 
     def test_encap_custom_port(self):
         from BridgeDoman
         """
         self.createVxLANInterfaces(1111)
         super(TestVxlan6, self).test_decap()
 
     def test_encap_custom_port(self):
-        """ Encapsulation test custom port
+        """Encapsulation test custom port
         from BridgeDoman
         """
         self.createVxLANInterfaces(1111)
         super(TestVxlan6, self).test_encap()
 
     def test_ucast_flood_custom_port(self):
         from BridgeDoman
         """
         self.createVxLANInterfaces(1111)
         super(TestVxlan6, self).test_encap()
 
     def test_ucast_flood_custom_port(self):
-        """ Unicast flood test custom port
+        """Unicast flood test custom port
         from BridgeDoman
         """
         self.createVxLANInterfaces(1111)
         super(TestVxlan6, self).test_ucast_flood()
 
     def test_mcast_flood_custom_port(self):
         from BridgeDoman
         """
         self.createVxLANInterfaces(1111)
         super(TestVxlan6, self).test_ucast_flood()
 
     def test_mcast_flood_custom_port(self):
-        """ Multicast flood test custom port
+        """Multicast flood test custom port
         from BridgeDoman
         """
         self.createVxLANInterfaces(1111)
         super(TestVxlan6, self).test_mcast_flood()
 
     def test_mcast_rcv_custom_port(self):
         from BridgeDoman
         """
         self.createVxLANInterfaces(1111)
         super(TestVxlan6, self).test_mcast_flood()
 
     def test_mcast_rcv_custom_port(self):
-        """ Multicast receive test custom port
+        """Multicast receive test custom port
         from BridgeDoman
         """
         self.createVxLANInterfaces(1111)
         super(TestVxlan6, self).test_mcast_rcv()
 
 
         from BridgeDoman
         """
         self.createVxLANInterfaces(1111)
         super(TestVxlan6, self).test_mcast_rcv()
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index 828b5fc..f432bec 100644 (file)
@@ -20,7 +20,7 @@ from vpp_ip import INVALID_INDEX
 
 @unittest.skipUnless(config.extended, "part of extended tests")
 class TestVxlanGpe(BridgeDomain, VppTestCase):
 
 @unittest.skipUnless(config.extended, "part of extended tests")
 class TestVxlanGpe(BridgeDomain, VppTestCase):
-    """ VXLAN-GPE Test Case """
+    """VXLAN-GPE Test Case"""
 
     def __init__(self, *args):
         BridgeDomain.__init__(self)
 
     def __init__(self, *args):
         BridgeDomain.__init__(self)
@@ -31,14 +31,16 @@ class TestVxlanGpe(BridgeDomain, VppTestCase):
         Encapsulate the original payload frame by adding VXLAN-GPE header
         with its UDP, IP and Ethernet fields
         """
         Encapsulate the original payload frame by adding VXLAN-GPE header
         with its UDP, IP and Ethernet fields
         """
-        return (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) /
-                IP(src=self.pg0.remote_ip4, dst=self.pg0.local_ip4) /
-                UDP(sport=self.dport, dport=self.dport, chksum=0) /
-                VXLAN(vni=vni, flags=self.flags) /
-                pkt)
+        return (
+            Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac)
+            / IP(src=self.pg0.remote_ip4, dst=self.pg0.local_ip4)
+            / UDP(sport=self.dport, dport=self.dport, chksum=0)
+            / VXLAN(vni=vni, flags=self.flags)
+            / pkt
+        )
 
     def ip_range(self, start, end):
 
     def ip_range(self, start, end):
-        """ range of remote ip's """
+        """range of remote ip's"""
         return ip4_range(self.pg0.remote_ip4, start, end)
 
     def encap_mcast(self, pkt, src_ip, src_mac, vni):
         return ip4_range(self.pg0.remote_ip4, start, end)
 
     def encap_mcast(self, pkt, src_ip, src_mac, vni):
@@ -46,18 +48,20 @@ class TestVxlanGpe(BridgeDomain, VppTestCase):
         Encapsulate the original payload frame by adding VXLAN-GPE header
         with its UDP, IP and Ethernet fields
         """
         Encapsulate the original payload frame by adding VXLAN-GPE header
         with its UDP, IP and Ethernet fields
         """
-        return (Ether(src=src_mac, dst=self.mcast_mac) /
-                IP(src=src_ip, dst=self.mcast_ip4) /
-                UDP(sport=self.dport, dport=self.dport, chksum=0) /
-                VXLAN(vni=vni, flags=self.flags) /
-                pkt)
+        return (
+            Ether(src=src_mac, dst=self.mcast_mac)
+            / IP(src=src_ip, dst=self.mcast_ip4)
+            / UDP(sport=self.dport, dport=self.dport, chksum=0)
+            / VXLAN(vni=vni, flags=self.flags)
+            / pkt
+        )
 
     def decapsulate(self, pkt):
         """
         Decapsulate the original payload frame by removing VXLAN-GPE header
         """
         # check if is set I and P flag
 
     def decapsulate(self, pkt):
         """
         Decapsulate the original payload frame by removing VXLAN-GPE header
         """
         # check if is set I and P flag
-        self.assertEqual(pkt[VXLAN].flags, 0x0c)
+        self.assertEqual(pkt[VXLAN].flags, 0x0C)
         return pkt[VXLAN].payload
 
     # Method for checking VXLAN-GPE encapsulation.
         return pkt[VXLAN].payload
 
     # Method for checking VXLAN-GPE encapsulation.
@@ -92,24 +96,27 @@ class TestVxlanGpe(BridgeDomain, VppTestCase):
         ip_range_start = 10
         ip_range_end = ip_range_start + n_ucast_tunnels
         next_hop_address = cls.pg0.remote_ip4
         ip_range_start = 10
         ip_range_end = ip_range_start + n_ucast_tunnels
         next_hop_address = cls.pg0.remote_ip4
-        for dest_ip4 in ip4_range(next_hop_address, ip_range_start,
-                                  ip_range_end):
+        for dest_ip4 in ip4_range(next_hop_address, ip_range_start, ip_range_end):
             # add host route so dest_ip4n will not be resolved
             # add host route so dest_ip4n will not be resolved
-            rip = VppIpRoute(cls, dest_ip4, 32,
-                             [VppRoutePath(next_hop_address,
-                                           INVALID_INDEX)],
-                             register=False)
+            rip = VppIpRoute(
+                cls,
+                dest_ip4,
+                32,
+                [VppRoutePath(next_hop_address, INVALID_INDEX)],
+                register=False,
+            )
             rip.add_vpp_config()
 
             rip.add_vpp_config()
 
-            r = VppVxlanGpeTunnel(cls,
-                                  src_addr=cls.pg0.local_ip4,
-                                  dst_addr=dest_ip4,
-                                  src_port=port,
-                                  dst_port=port,
-                                  vni=vni)
+            r = VppVxlanGpeTunnel(
+                cls,
+                src_addr=cls.pg0.local_ip4,
+                dst_addr=dest_ip4,
+                src_port=port,
+                dst_port=port,
+                vni=vni,
+            )
             r.add_vpp_config()
             r.add_vpp_config()
-            cls.vapi.sw_interface_set_l2_bridge(rx_sw_if_index=r.sw_if_index,
-                                                bd_id=vni)
+            cls.vapi.sw_interface_set_l2_bridge(rx_sw_if_index=r.sw_if_index, bd_id=vni)
 
     @classmethod
     def add_del_shared_mcast_dst_load(cls, port, is_add):
 
     @classmethod
     def add_del_shared_mcast_dst_load(cls, port, is_add):
@@ -121,16 +128,18 @@ class TestVxlanGpe(BridgeDomain, VppTestCase):
         vni_start = 1000
         vni_end = vni_start + n_shared_dst_tunnels
         for vni in range(vni_start, vni_end):
         vni_start = 1000
         vni_end = vni_start + n_shared_dst_tunnels
         for vni in range(vni_start, vni_end):
-            r = VppVxlanGpeTunnel(cls,
-                                  src_addr=cls.pg0.local_ip4,
-                                  dst_addr=cls.mcast_ip4,
-                                  src_port=port,
-                                  dst_port=port,
-                                  mcast_sw_if_index=1,
-                                  vni=vni)
+            r = VppVxlanGpeTunnel(
+                cls,
+                src_addr=cls.pg0.local_ip4,
+                dst_addr=cls.mcast_ip4,
+                src_port=port,
+                dst_port=port,
+                mcast_sw_if_index=1,
+                vni=vni,
+            )
             if is_add:
                 r.add_vpp_config()
             if is_add:
                 r.add_vpp_config()
-                if r.sw_if_index == 0xffffffff:
+                if r.sw_if_index == 0xFFFFFFFF:
                     raise ValueError("bad sw_if_index: ~0")
             else:
                 r.remove_vpp_config()
                     raise ValueError("bad sw_if_index: ~0")
             else:
                 r.remove_vpp_config()
@@ -151,16 +160,17 @@ class TestVxlanGpe(BridgeDomain, VppTestCase):
         n_distinct_dst_tunnels = 20
         ip_range_start = 10
         ip_range_end = ip_range_start + n_distinct_dst_tunnels
         n_distinct_dst_tunnels = 20
         ip_range_start = 10
         ip_range_end = ip_range_start + n_distinct_dst_tunnels
-        for dest_ip4 in ip4_range(cls.mcast_ip4, ip_range_start,
-                                  ip_range_end):
+        for dest_ip4 in ip4_range(cls.mcast_ip4, ip_range_start, ip_range_end):
             vni = int(dest_ip4.split(".")[3])
             vni = int(dest_ip4.split(".")[3])
-            r = VppVxlanGpeTunnel(cls,
-                                  src_addr=cls.pg0.local_ip4,
-                                  dst_addr=dest_ip4,
-                                  src_port=port,
-                                  dst_port=port,
-                                  mcast_sw_if_index=1,
-                                  vni=vni)
+            r = VppVxlanGpeTunnel(
+                cls,
+                src_addr=cls.pg0.local_ip4,
+                dst_addr=dest_ip4,
+                src_port=port,
+                dst_port=port,
+                mcast_sw_if_index=1,
+                vni=vni,
+            )
             if is_add:
                 r.add_vpp_config()
             else:
             if is_add:
                 r.add_vpp_config()
             else:
@@ -184,7 +194,7 @@ class TestVxlanGpe(BridgeDomain, VppTestCase):
         super(TestVxlanGpe, cls).setUpClass()
 
         try:
         super(TestVxlanGpe, cls).setUpClass()
 
         try:
-            cls.flags = 0x0c
+            cls.flags = 0x0C
 
             # Create 2 pg interfaces.
             cls.create_pg_interfaces(range(4))
 
             # Create 2 pg interfaces.
             cls.create_pg_interfaces(range(4))
@@ -198,7 +208,7 @@ class TestVxlanGpe(BridgeDomain, VppTestCase):
             cls.pg0.resolve_arp()
 
             # Our Multicast address
             cls.pg0.resolve_arp()
 
             # Our Multicast address
-            cls.mcast_ip4 = '239.1.1.1'
+            cls.mcast_ip4 = "239.1.1.1"
             cls.mcast_mac = util.mcast_ip_to_mac(cls.mcast_ip4)
         except Exception:
             cls.tearDownClass()
             cls.mcast_mac = util.mcast_ip_to_mac(cls.mcast_ip4)
         except Exception:
             cls.tearDownClass()
@@ -216,38 +226,46 @@ class TestVxlanGpe(BridgeDomain, VppTestCase):
         # and pg1 into BD.
         self.dport = port
 
         # and pg1 into BD.
         self.dport = port
 
-        self.single_tunnel_vni = 0xabcde
+        self.single_tunnel_vni = 0xABCDE
         self.single_tunnel_bd = 11
         self.single_tunnel_bd = 11
-        r = VppVxlanGpeTunnel(self,
-                              src_addr=self.pg0.local_ip4,
-                              dst_addr=self.pg0.remote_ip4,
-                              src_port=port,
-                              dst_port=port,
-                              vni=self.single_tunnel_vni)
+        r = VppVxlanGpeTunnel(
+            self,
+            src_addr=self.pg0.local_ip4,
+            dst_addr=self.pg0.remote_ip4,
+            src_port=port,
+            dst_port=port,
+            vni=self.single_tunnel_vni,
+        )
         r.add_vpp_config()
         r.add_vpp_config()
-        self.vapi.sw_interface_set_l2_bridge(rx_sw_if_index=r.sw_if_index,
-                                             bd_id=self.single_tunnel_bd)
         self.vapi.sw_interface_set_l2_bridge(
         self.vapi.sw_interface_set_l2_bridge(
-            rx_sw_if_index=self.pg1.sw_if_index, bd_id=self.single_tunnel_bd)
+            rx_sw_if_index=r.sw_if_index, bd_id=self.single_tunnel_bd
+        )
+        self.vapi.sw_interface_set_l2_bridge(
+            rx_sw_if_index=self.pg1.sw_if_index, bd_id=self.single_tunnel_bd
+        )
 
         # Setup vni 2 to test multicast flooding
         self.n_ucast_tunnels = 10
         self.mcast_flood_bd = 12
 
         # Setup vni 2 to test multicast flooding
         self.n_ucast_tunnels = 10
         self.mcast_flood_bd = 12
-        self.create_vxlan_gpe_flood_test_bd(self.mcast_flood_bd,
-                                            self.n_ucast_tunnels,
-                                            self.dport)
-        r = VppVxlanGpeTunnel(self,
-                              src_addr=self.pg0.local_ip4,
-                              dst_addr=self.mcast_ip4,
-                              src_port=port,
-                              dst_port=port,
-                              mcast_sw_if_index=1,
-                              vni=self.mcast_flood_bd)
+        self.create_vxlan_gpe_flood_test_bd(
+            self.mcast_flood_bd, self.n_ucast_tunnels, self.dport
+        )
+        r = VppVxlanGpeTunnel(
+            self,
+            src_addr=self.pg0.local_ip4,
+            dst_addr=self.mcast_ip4,
+            src_port=port,
+            dst_port=port,
+            mcast_sw_if_index=1,
+            vni=self.mcast_flood_bd,
+        )
         r.add_vpp_config()
         r.add_vpp_config()
-        self.vapi.sw_interface_set_l2_bridge(rx_sw_if_index=r.sw_if_index,
-                                             bd_id=self.mcast_flood_bd)
         self.vapi.sw_interface_set_l2_bridge(
         self.vapi.sw_interface_set_l2_bridge(
-            rx_sw_if_index=self.pg2.sw_if_index, bd_id=self.mcast_flood_bd)
+            rx_sw_if_index=r.sw_if_index, bd_id=self.mcast_flood_bd
+        )
+        self.vapi.sw_interface_set_l2_bridge(
+            rx_sw_if_index=self.pg2.sw_if_index, bd_id=self.mcast_flood_bd
+        )
 
         # Add and delete mcast tunnels to check stability
         self.add_shared_mcast_dst_load(self.dport)
 
         # Add and delete mcast tunnels to check stability
         self.add_shared_mcast_dst_load(self.dport)
@@ -257,11 +275,12 @@ class TestVxlanGpe(BridgeDomain, VppTestCase):
 
         # Setup vni 3 to test unicast flooding
         self.ucast_flood_bd = 13
 
         # Setup vni 3 to test unicast flooding
         self.ucast_flood_bd = 13
-        self.create_vxlan_gpe_flood_test_bd(self.ucast_flood_bd,
-                                            self.n_ucast_tunnels,
-                                            self.dport)
+        self.create_vxlan_gpe_flood_test_bd(
+            self.ucast_flood_bd, self.n_ucast_tunnels, self.dport
+        )
         self.vapi.sw_interface_set_l2_bridge(
         self.vapi.sw_interface_set_l2_bridge(
-            rx_sw_if_index=self.pg3.sw_if_index, bd_id=self.ucast_flood_bd)
+            rx_sw_if_index=self.pg3.sw_if_index, bd_id=self.ucast_flood_bd
+        )
 
         # Set scapy listen custom port for VxLAN
         bind_layers(UDP, VXLAN, dport=self.dport)
 
         # Set scapy listen custom port for VxLAN
         bind_layers(UDP, VXLAN, dport=self.dport)
@@ -269,22 +288,23 @@ class TestVxlanGpe(BridgeDomain, VppTestCase):
     """
     Tests with default port (4790)
     """
     """
     Tests with default port (4790)
     """
+
     def test_decap(self):
     def test_decap(self):
-        """ Decapsulation test
+        """Decapsulation test
         from BridgeDoman
         """
         self.createVxLANInterfaces()
         super(TestVxlanGpe, self).test_decap()
 
     def test_encap(self):
         from BridgeDoman
         """
         self.createVxLANInterfaces()
         super(TestVxlanGpe, self).test_decap()
 
     def test_encap(self):
-        """ Encapsulation test
+        """Encapsulation test
         from BridgeDoman
         """
         self.createVxLANInterfaces()
         super(TestVxlanGpe, self).test_encap()
 
     def test_ucast_flood(self):
         from BridgeDoman
         """
         self.createVxLANInterfaces()
         super(TestVxlanGpe, self).test_encap()
 
     def test_ucast_flood(self):
-        """ Unicast flood test
+        """Unicast flood test
         from BridgeDoman
         """
         self.createVxLANInterfaces()
         from BridgeDoman
         """
         self.createVxLANInterfaces()
@@ -293,22 +313,23 @@ class TestVxlanGpe(BridgeDomain, VppTestCase):
     """
     Tests with custom port (1112)
     """
     """
     Tests with custom port (1112)
     """
+
     def test_decap_custom_port(self):
     def test_decap_custom_port(self):
-        """ Decapsulation test custom port
+        """Decapsulation test custom port
         from BridgeDoman
         """
         self.createVxLANInterfaces(1112)
         super(TestVxlanGpe, self).test_decap()
 
     def test_encap_custom_port(self):
         from BridgeDoman
         """
         self.createVxLANInterfaces(1112)
         super(TestVxlanGpe, self).test_decap()
 
     def test_encap_custom_port(self):
-        """ Encapsulation test custom port
+        """Encapsulation test custom port
         from BridgeDoman
         """
         self.createVxLANInterfaces(1112)
         super(TestVxlanGpe, self).test_encap()
 
     def test_ucast_flood_custom_port(self):
         from BridgeDoman
         """
         self.createVxLANInterfaces(1112)
         super(TestVxlanGpe, self).test_encap()
 
     def test_ucast_flood_custom_port(self):
-        """ Unicast flood test custom port
+        """Unicast flood test custom port
         from BridgeDoman
         """
         self.createVxLANInterfaces(1112)
         from BridgeDoman
         """
         self.createVxLANInterfaces(1112)
@@ -316,12 +337,12 @@ class TestVxlanGpe(BridgeDomain, VppTestCase):
 
     @unittest.skip("test disabled for vxlan-gpe")
     def test_mcast_flood(self):
 
     @unittest.skip("test disabled for vxlan-gpe")
     def test_mcast_flood(self):
-        """ inherited from BridgeDomain """
+        """inherited from BridgeDomain"""
         pass
 
     @unittest.skip("test disabled for vxlan-gpe")
     def test_mcast_rcv(self):
         pass
 
     @unittest.skip("test disabled for vxlan-gpe")
     def test_mcast_rcv(self):
-        """ inherited from BridgeDomain """
+        """inherited from BridgeDomain"""
         pass
 
     # Method to define VPP actions before tear down of the test case.
         pass
 
     # Method to define VPP actions before tear down of the test case.
@@ -339,5 +360,5 @@ class TestVxlanGpe(BridgeDomain, VppTestCase):
         self.logger.info(self.vapi.cli("show trace"))
 
 
         self.logger.info(self.vapi.cli("show trace"))
 
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     unittest.main(testRunner=VppTestRunner)
     unittest.main(testRunner=VppTestRunner)
index e844b1d..1a955b1 100644 (file)
@@ -11,12 +11,22 @@ from scapy.packet import Raw
 from scapy.layers.l2 import Ether, ARP
 from scapy.layers.inet import IP, UDP
 from scapy.layers.inet6 import IPv6
 from scapy.layers.l2 import Ether, ARP
 from scapy.layers.inet import IP, UDP
 from scapy.layers.inet6 import IPv6
-from scapy.contrib.wireguard import Wireguard, WireguardResponse, \
-    WireguardInitiation, WireguardTransport
-from cryptography.hazmat.primitives.asymmetric.x25519 import \
-    X25519PrivateKey, X25519PublicKey
-from cryptography.hazmat.primitives.serialization import Encoding, \
-    PrivateFormat, PublicFormat, NoEncryption
+from scapy.contrib.wireguard import (
+    Wireguard,
+    WireguardResponse,
+    WireguardInitiation,
+    WireguardTransport,
+)
+from cryptography.hazmat.primitives.asymmetric.x25519 import (
+    X25519PrivateKey,
+    X25519PublicKey,
+)
+from cryptography.hazmat.primitives.serialization import (
+    Encoding,
+    PrivateFormat,
+    PublicFormat,
+    NoEncryption,
+)
 from cryptography.hazmat.primitives.hashes import BLAKE2s, Hash
 from cryptography.hazmat.primitives.hmac import HMAC
 from cryptography.hazmat.backends import default_backend
 from cryptography.hazmat.primitives.hashes import BLAKE2s, Hash
 from cryptography.hazmat.primitives.hmac import HMAC
 from cryptography.hazmat.backends import default_backend
@@ -39,14 +49,11 @@ Wg test.
 
 
 def private_key_bytes(k):
 
 
 def private_key_bytes(k):
-    return k.private_bytes(Encoding.Raw,
-                           PrivateFormat.Raw,
-                           NoEncryption())
+    return k.private_bytes(Encoding.Raw, PrivateFormat.Raw, NoEncryption())
 
 
 def public_key_bytes(k):
 
 
 def public_key_bytes(k):
-    return k.public_bytes(Encoding.Raw,
-                          PublicFormat.Raw)
+    return k.public_bytes(Encoding.Raw, PublicFormat.Raw)
 
 
 class VppWgInterface(VppInterface):
 
 
 class VppWgInterface(VppInterface):
@@ -69,37 +76,41 @@ class VppWgInterface(VppInterface):
         return private_key_bytes(self.private_key)
 
     def add_vpp_config(self):
         return private_key_bytes(self.private_key)
 
     def add_vpp_config(self):
-        r = self.test.vapi.wireguard_interface_create(interface={
-            'user_instance': 0xffffffff,
-            'port': self.port,
-            'src_ip': self.src,
-            'private_key': private_key_bytes(self.private_key),
-            'generate_key': False
-        })
+        r = self.test.vapi.wireguard_interface_create(
+            interface={
+                "user_instance": 0xFFFFFFFF,
+                "port": self.port,
+                "src_ip": self.src,
+                "private_key": private_key_bytes(self.private_key),
+                "generate_key": False,
+            }
+        )
         self.set_sw_if_index(r.sw_if_index)
         self.test.registry.register(self, self.test.logger)
         return self
 
     def remove_vpp_config(self):
         self.set_sw_if_index(r.sw_if_index)
         self.test.registry.register(self, self.test.logger)
         return self
 
     def remove_vpp_config(self):
-        self.test.vapi.wireguard_interface_delete(
-            sw_if_index=self._sw_if_index)
+        self.test.vapi.wireguard_interface_delete(sw_if_index=self._sw_if_index)
 
     def query_vpp_config(self):
 
     def query_vpp_config(self):
-        ts = self.test.vapi.wireguard_interface_dump(sw_if_index=0xffffffff)
+        ts = self.test.vapi.wireguard_interface_dump(sw_if_index=0xFFFFFFFF)
         for t in ts:
         for t in ts:
-            if t.interface.sw_if_index == self._sw_if_index and \
-               str(t.interface.src_ip) == self.src and \
-               t.interface.port == self.port and \
-               t.interface.private_key == private_key_bytes(self.private_key):
+            if (
+                t.interface.sw_if_index == self._sw_if_index
+                and str(t.interface.src_ip) == self.src
+                and t.interface.port == self.port
+                and t.interface.private_key == private_key_bytes(self.private_key)
+            ):
                 return True
         return False
 
                 return True
         return False
 
-    def want_events(self, peer_index=0xffffffff):
+    def want_events(self, peer_index=0xFFFFFFFF):
         self.test.vapi.want_wireguard_peer_events(
             enable_disable=1,
             pid=os.getpid(),
             sw_if_index=self._sw_if_index,
         self.test.vapi.want_wireguard_peer_events(
             enable_disable=1,
             pid=os.getpid(),
             sw_if_index=self._sw_if_index,
-            peer_index=peer_index)
+            peer_index=peer_index,
+        )
 
     def wait_events(self, expect, peers, timeout=5):
         for i in range(len(peers)):
 
     def wait_events(self, expect, peers, timeout=5):
         for i in range(len(peers)):
@@ -118,8 +129,7 @@ def find_route(test, prefix, is_ip6, table_id=0):
     routes = test.vapi.ip_route_dump(table_id, is_ip6)
 
     for e in routes:
     routes = test.vapi.ip_route_dump(table_id, is_ip6)
 
     for e in routes:
-        if table_id == e.route.table_id \
-           and str(e.route.prefix) == str(prefix):
+        if table_id == e.route.table_id and str(e.route.prefix) == str(prefix):
             return True
     return False
 
             return True
     return False
 
@@ -129,14 +139,7 @@ NOISE_IDENTIFIER_NAME = b"WireGuard v1 zx2c4 Jason@zx2c4.com"
 
 
 class VppWgPeer(VppObject):
 
 
 class VppWgPeer(VppObject):
-
-    def __init__(self,
-                 test,
-                 itf,
-                 endpoint,
-                 port,
-                 allowed_ips,
-                 persistent_keepalive=15):
+    def __init__(self, test, itf, endpoint, port, allowed_ips, persistent_keepalive=15):
         self._test = test
         self.itf = itf
         self.endpoint = endpoint
         self._test = test
         self.itf = itf
         self.endpoint = endpoint
@@ -153,13 +156,15 @@ class VppWgPeer(VppObject):
     def add_vpp_config(self, is_ip6=False):
         rv = self._test.vapi.wireguard_peer_add(
             peer={
     def add_vpp_config(self, is_ip6=False):
         rv = self._test.vapi.wireguard_peer_add(
             peer={
-                'public_key': self.public_key_bytes(),
-                'port': self.port,
-                'endpoint': self.endpoint,
-                'n_allowed_ips': len(self.allowed_ips),
-                'allowed_ips': self.allowed_ips,
-                'sw_if_index': self.itf.sw_if_index,
-                'persistent_keepalive': self.persistent_keepalive})
+                "public_key": self.public_key_bytes(),
+                "port": self.port,
+                "endpoint": self.endpoint,
+                "n_allowed_ips": len(self.allowed_ips),
+                "allowed_ips": self.allowed_ips,
+                "sw_if_index": self.itf.sw_if_index,
+                "persistent_keepalive": self.persistent_keepalive,
+            }
+        )
         self.index = rv.peer_index
         self.receiver_index = self.index + 1
         self._test.registry.register(self, self._test.logger)
         self.index = rv.peer_index
         self.receiver_index = self.index + 1
         self._test.registry.register(self, self._test.logger)
@@ -169,7 +174,7 @@ class VppWgPeer(VppObject):
         self._test.vapi.wireguard_peer_remove(peer_index=self.index)
 
     def object_id(self):
         self._test.vapi.wireguard_peer_remove(peer_index=self.index)
 
     def object_id(self):
-        return ("wireguard-peer-%s" % self.index)
+        return "wireguard-peer-%s" % self.index
 
     def public_key_bytes(self):
         return public_key_bytes(self.public_key)
 
     def public_key_bytes(self):
         return public_key_bytes(self.public_key)
@@ -178,11 +183,13 @@ class VppWgPeer(VppObject):
         peers = self._test.vapi.wireguard_peers_dump()
 
         for p in peers:
         peers = self._test.vapi.wireguard_peers_dump()
 
         for p in peers:
-            if p.peer.public_key == self.public_key_bytes() and \
-               p.peer.port == self.port and \
-               str(p.peer.endpoint) == self.endpoint and \
-               p.peer.sw_if_index == self.itf.sw_if_index and \
-               len(self.allowed_ips) == p.peer.n_allowed_ips:
+            if (
+                p.peer.public_key == self.public_key_bytes()
+                and p.peer.port == self.port
+                and str(p.peer.endpoint) == self.endpoint
+                and p.peer.sw_if_index == self.itf.sw_if_index
+                and len(self.allowed_ips) == p.peer.n_allowed_ips
+            ):
                 self.allowed_ips.sort()
                 p.peer.allowed_ips.sort()
 
                 self.allowed_ips.sort()
                 p.peer.allowed_ips.sort()
 
@@ -197,13 +204,17 @@ class VppWgPeer(VppObject):
 
     def mk_tunnel_header(self, tx_itf, is_ip6=False):
         if is_ip6 is False:
 
     def mk_tunnel_header(self, tx_itf, is_ip6=False):
         if is_ip6 is False:
-            return (Ether(dst=tx_itf.local_mac, src=tx_itf.remote_mac) /
-                    IP(src=self.endpoint, dst=self.itf.src) /
-                    UDP(sport=self.port, dport=self.itf.port))
+            return (
+                Ether(dst=tx_itf.local_mac, src=tx_itf.remote_mac)
+                / IP(src=self.endpoint, dst=self.itf.src)
+                / UDP(sport=self.port, dport=self.itf.port)
+            )
         else:
         else:
-            return (Ether(dst=tx_itf.local_mac, src=tx_itf.remote_mac) /
-                    IPv6(src=self.endpoint, dst=self.itf.src) /
-                    UDP(sport=self.port, dport=self.itf.port))
+            return (
+                Ether(dst=tx_itf.local_mac, src=tx_itf.remote_mac)
+                / IPv6(src=self.endpoint, dst=self.itf.src)
+                / UDP(sport=self.port, dport=self.itf.port)
+            )
 
     def noise_init(self, public_key=None):
         self.noise.set_prologue(NOISE_IDENTIFIER_NAME)
 
     def noise_init(self, public_key=None):
         self.noise.set_prologue(NOISE_IDENTIFIER_NAME)
@@ -214,12 +225,12 @@ class VppWgPeer(VppObject):
 
         # local/this private
         self.noise.set_keypair_from_private_bytes(
 
         # local/this private
         self.noise.set_keypair_from_private_bytes(
-            Keypair.STATIC,
-            private_key_bytes(self.private_key))
+            Keypair.STATIC, private_key_bytes(self.private_key)
+        )
         # remote's public
         self.noise.set_keypair_from_public_bytes(
         # remote's public
         self.noise.set_keypair_from_public_bytes(
-            Keypair.REMOTE_STATIC,
-            public_key_bytes(public_key))
+            Keypair.REMOTE_STATIC, public_key_bytes(public_key)
+        )
 
         self.noise.start_handshake()
 
 
         self.noise.start_handshake()
 
@@ -227,7 +238,7 @@ class VppWgPeer(VppObject):
         self.noise.set_as_initiator()
         self.noise_init(public_key)
 
         self.noise.set_as_initiator()
         self.noise_init(public_key)
 
-        p = (Wireguard() / WireguardInitiation())
+        p = Wireguard() / WireguardInitiation()
 
         p[Wireguard].message_type = 1
         p[Wireguard].reserved_zero = 0
 
         p[Wireguard].message_type = 1
         p[Wireguard].reserved_zero = 0
@@ -236,8 +247,11 @@ class VppWgPeer(VppObject):
         # some random data for the message
         #  lifted from the noise protocol's wireguard example
         now = datetime.datetime.now()
         # some random data for the message
         #  lifted from the noise protocol's wireguard example
         now = datetime.datetime.now()
-        tai = struct.pack('!qi', 4611686018427387914 + int(now.timestamp()),
-                          int(now.microsecond * 1e3))
+        tai = struct.pack(
+            "!qi",
+            4611686018427387914 + int(now.timestamp()),
+            int(now.microsecond * 1e3),
+        )
         b = self.noise.write_message(payload=tai)
 
         # load noise into init message
         b = self.noise.write_message(payload=tai)
 
         # load noise into init message
@@ -246,14 +260,13 @@ class VppWgPeer(VppObject):
         p[WireguardInitiation].encrypted_timestamp = b[80:108]
 
         # generate the mac1 hash
         p[WireguardInitiation].encrypted_timestamp = b[80:108]
 
         # generate the mac1 hash
-        mac_key = blake2s(b'mac1----' +
-                          self.itf.public_key_bytes()).digest()
-        p[WireguardInitiation].mac1 = blake2s(bytes(p)[0:116],
-                                              digest_size=16,
-                                              key=mac_key).digest()
+        mac_key = blake2s(b"mac1----" + self.itf.public_key_bytes()).digest()
+        p[WireguardInitiation].mac1 = blake2s(
+            bytes(p)[0:116], digest_size=16, key=mac_key
+        ).digest()
         p[WireguardInitiation].mac2 = bytearray(16)
 
         p[WireguardInitiation].mac2 = bytearray(16)
 
-        p = (self.mk_tunnel_header(tx_itf, is_ip6) / p)
+        p = self.mk_tunnel_header(tx_itf, is_ip6) / p
 
         return p
 
 
         return p
 
@@ -281,11 +294,8 @@ class VppWgPeer(VppObject):
         self.sender = init[WireguardInitiation].sender_index
 
         # validate the hash
         self.sender = init[WireguardInitiation].sender_index
 
         # validate the hash
-        mac_key = blake2s(b'mac1----' +
-                          public_key_bytes(self.public_key)).digest()
-        mac1 = blake2s(bytes(init)[0:-32],
-                       digest_size=16,
-                       key=mac_key).digest()
+        mac_key = blake2s(b"mac1----" + public_key_bytes(self.public_key)).digest()
+        mac1 = blake2s(bytes(init)[0:-32], digest_size=16, key=mac_key).digest()
         self._test.assertEqual(init[WireguardInitiation].mac1, mac1)
 
         # this passes only unencrypted_ephemeral, encrypted_static,
         self._test.assertEqual(init[WireguardInitiation].mac1, mac1)
 
         # this passes only unencrypted_ephemeral, encrypted_static,
@@ -294,19 +304,17 @@ class VppWgPeer(VppObject):
 
         # build the response
         b = self.noise.write_message()
 
         # build the response
         b = self.noise.write_message()
-        mac_key = blake2s(b'mac1----' +
-                          public_key_bytes(self.itf.public_key)).digest()
-        resp = (Wireguard(message_type=2, reserved_zero=0) /
-                WireguardResponse(sender_index=self.receiver_index,
-                                  receiver_index=self.sender,
-                                  unencrypted_ephemeral=b[0:32],
-                                  encrypted_nothing=b[32:]))
-        mac1 = blake2s(bytes(resp)[:-32],
-                       digest_size=16,
-                       key=mac_key).digest()
+        mac_key = blake2s(b"mac1----" + public_key_bytes(self.itf.public_key)).digest()
+        resp = Wireguard(message_type=2, reserved_zero=0) / WireguardResponse(
+            sender_index=self.receiver_index,
+            receiver_index=self.sender,
+            unencrypted_ephemeral=b[0:32],
+            encrypted_nothing=b[32:],
+        )
+        mac1 = blake2s(bytes(resp)[:-32], digest_size=16, key=mac_key).digest()
         resp[WireguardResponse].mac1 = mac1
 
         resp[WireguardResponse].mac1 = mac1
 
-        resp = (self.mk_tunnel_header(tx_itf, is_ip6) / resp)
+        resp = self.mk_tunnel_header(tx_itf, is_ip6) / resp
         self._test.assertTrue(self.noise.handshake_finished)
 
         return resp
         self._test.assertTrue(self.noise.handshake_finished)
 
         return resp
@@ -318,13 +326,14 @@ class VppWgPeer(VppObject):
 
         self._test.assertEqual(resp[Wireguard].message_type, 2)
         self._test.assertEqual(resp[Wireguard].reserved_zero, 0)
 
         self._test.assertEqual(resp[Wireguard].message_type, 2)
         self._test.assertEqual(resp[Wireguard].reserved_zero, 0)
-        self._test.assertEqual(resp[WireguardResponse].receiver_index,
-                               self.receiver_index)
+        self._test.assertEqual(
+            resp[WireguardResponse].receiver_index, self.receiver_index
+        )
 
         self.sender = resp[Wireguard].sender_index
 
         payload = self.noise.read_message(bytes(resp)[12:60])
 
         self.sender = resp[Wireguard].sender_index
 
         payload = self.noise.read_message(bytes(resp)[12:60])
-        self._test.assertEqual(payload, b'')
+        self._test.assertEqual(payload, b"")
         self._test.assertTrue(self.noise.handshake_finished)
 
     def decrypt_transport(self, p, is_ip6=False):
         self._test.assertTrue(self.noise.handshake_finished)
 
     def decrypt_transport(self, p, is_ip6=False):
@@ -333,11 +342,11 @@ class VppWgPeer(VppObject):
         p = Wireguard(p[Raw])
         self._test.assertEqual(p[Wireguard].message_type, 4)
         self._test.assertEqual(p[Wireguard].reserved_zero, 0)
         p = Wireguard(p[Raw])
         self._test.assertEqual(p[Wireguard].message_type, 4)
         self._test.assertEqual(p[Wireguard].reserved_zero, 0)
-        self._test.assertEqual(p[WireguardTransport].receiver_index,
-                               self.receiver_index)
+        self._test.assertEqual(
+            p[WireguardTransport].receiver_index, self.receiver_index
+        )
 
 
-        d = self.noise.decrypt(
-            p[WireguardTransport].encrypted_encapsulated_packet)
+        d = self.noise.decrypt(p[WireguardTransport].encrypted_encapsulated_packet)
         return d
 
     def encrypt_transport(self, p):
         return d
 
     def encrypt_transport(self, p):
@@ -350,20 +359,21 @@ class VppWgPeer(VppObject):
 
                 # chech the oringial packet is present
                 self._test.assertEqual(rx[IP].dst, tx[IP].dst)
 
                 # chech the oringial packet is present
                 self._test.assertEqual(rx[IP].dst, tx[IP].dst)
-                self._test.assertEqual(rx[IP].ttl, tx[IP].ttl-1)
+                self._test.assertEqual(rx[IP].ttl, tx[IP].ttl - 1)
             else:
                 rx = IPv6(self.decrypt_transport(rx))
 
                 # chech the oringial packet is present
                 self._test.assertEqual(rx[IPv6].dst, tx[IPv6].dst)
             else:
                 rx = IPv6(self.decrypt_transport(rx))
 
                 # chech the oringial packet is present
                 self._test.assertEqual(rx[IPv6].dst, tx[IPv6].dst)
-                self._test.assertEqual(rx[IPv6].ttl, tx[IPv6].ttl-1)
+                self._test.assertEqual(rx[IPv6].ttl, tx[IPv6].ttl - 1)
 
     def want_events(self):
         self._test.vapi.want_wireguard_peer_events(
             enable_disable=1,
             pid=os.getpid(),
             peer_index=self.index,
 
     def want_events(self):
         self._test.vapi.want_wireguard_peer_events(
             enable_disable=1,
             pid=os.getpid(),
             peer_index=self.index,
-            sw_if_index=self.itf.sw_if_index)
+            sw_if_index=self.itf.sw_if_index,
+        )
 
     def wait_event(self, expect, timeout=5):
         rv = self._test.vapi.wait_for_event(timeout, "wireguard_peer_event")
 
     def wait_event(self, expect, timeout=5):
         rv = self._test.vapi.wait_for_event(timeout, "wireguard_peer_event")
@@ -372,14 +382,14 @@ class VppWgPeer(VppObject):
 
 
 class TestWg(VppTestCase):
 
 
 class TestWg(VppTestCase):
-    """ Wireguard Test Case """
+    """Wireguard Test Case"""
 
     error_str = compile(r"Error")
 
 
     error_str = compile(r"Error")
 
-    wg4_output_node_name = '/err/wg4-output-tun/'
-    wg4_input_node_name = '/err/wg4-input/'
-    wg6_output_node_name = '/err/wg6-output-tun/'
-    wg6_input_node_name = '/err/wg6-input/'
+    wg4_output_node_name = "/err/wg4-output-tun/"
+    wg4_input_node_name = "/err/wg4-input/"
+    wg6_output_node_name = "/err/wg6-output-tun/"
+    wg6_input_node_name = "/err/wg6-input/"
     kp4_error = wg4_output_node_name + "Keypair error"
     mac4_error = wg4_input_node_name + "Invalid MAC handshake"
     peer4_error = wg4_input_node_name + "Peer error"
     kp4_error = wg4_output_node_name + "Keypair error"
     mac4_error = wg4_input_node_name + "Invalid MAC handshake"
     peer4_error = wg4_input_node_name + "Peer error"
@@ -417,13 +427,11 @@ class TestWg(VppTestCase):
         self.base_peer6_err = self.statistics.get_err_counter(self.peer6_error)
 
     def test_wg_interface(self):
         self.base_peer6_err = self.statistics.get_err_counter(self.peer6_error)
 
     def test_wg_interface(self):
-        """ Simple interface creation """
+        """Simple interface creation"""
         port = 12312
 
         # Create interface
         port = 12312
 
         # Create interface
-        wg0 = VppWgInterface(self,
-                             self.pg1.local_ip4,
-                             port).add_vpp_config()
+        wg0 = VppWgInterface(self, self.pg1.local_ip4, port).add_vpp_config()
 
         self.logger.info(self.vapi.cli("sh int"))
 
 
         self.logger.info(self.vapi.cli("sh int"))
 
@@ -431,27 +439,29 @@ class TestWg(VppTestCase):
         wg0.remove_vpp_config()
 
     def test_handshake_hash(self):
         wg0.remove_vpp_config()
 
     def test_handshake_hash(self):
-        """ test hashing an init message """
+        """test hashing an init message"""
         # a init packet generated by linux given the key below
         # a init packet generated by linux given the key below
-        h = "0100000098b9032b" \
-            "55cc4b39e73c3d24" \
-            "a2a1ab884b524a81" \
-            "1808bb86640fb70d" \
-            "e93154fec1879125" \
-            "ab012624a27f0b75" \
-            "c0a2582f438ddb5f" \
-            "8e768af40b4ab444" \
-            "02f9ff473e1b797e" \
-            "80d39d93c5480c82" \
-            "a3d4510f70396976" \
-            "586fb67300a5167b" \
-            "ae6ca3ff3dfd00eb" \
-            "59be198810f5aa03" \
-            "6abc243d2155ee4f" \
-            "2336483900aef801" \
-            "08752cd700000000" \
-            "0000000000000000" \
+        h = (
+            "0100000098b9032b"
+            "55cc4b39e73c3d24"
+            "a2a1ab884b524a81"
+            "1808bb86640fb70d"
+            "e93154fec1879125"
+            "ab012624a27f0b75"
+            "c0a2582f438ddb5f"
+            "8e768af40b4ab444"
+            "02f9ff473e1b797e"
+            "80d39d93c5480c82"
+            "a3d4510f70396976"
+            "586fb67300a5167b"
+            "ae6ca3ff3dfd00eb"
+            "59be198810f5aa03"
+            "6abc243d2155ee4f"
+            "2336483900aef801"
+            "08752cd700000000"
+            "0000000000000000"
             "00000000"
             "00000000"
+        )
 
         b = bytearray.fromhex(h)
         tgt = Wireguard(b)
 
         b = bytearray.fromhex(h)
         tgt = Wireguard(b)
@@ -463,40 +473,34 @@ class TestWg(VppTestCase):
 
         # strip the macs and build a new packet
         init = b[0:-32]
 
         # strip the macs and build a new packet
         init = b[0:-32]
-        mac_key = blake2s(b'mac1----' + public_key_bytes(pub)).digest()
-        init += blake2s(init,
-                        digest_size=16,
-                        key=mac_key).digest()
-        init += b'\x00' * 16
+        mac_key = blake2s(b"mac1----" + public_key_bytes(pub)).digest()
+        init += blake2s(init, digest_size=16, key=mac_key).digest()
+        init += b"\x00" * 16
 
         act = Wireguard(init)
 
         self.assertEqual(tgt, act)
 
     def test_wg_peer_resp(self):
 
         act = Wireguard(init)
 
         self.assertEqual(tgt, act)
 
     def test_wg_peer_resp(self):
-        """ Send handshake response """
+        """Send handshake response"""
         port = 12323
 
         # Create interfaces
         port = 12323
 
         # Create interfaces
-        wg0 = VppWgInterface(self,
-                             self.pg1.local_ip4,
-                             port).add_vpp_config()
+        wg0 = VppWgInterface(self, self.pg1.local_ip4, port).add_vpp_config()
         wg0.admin_up()
         wg0.config_ip4()
 
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
         wg0.admin_up()
         wg0.config_ip4()
 
         self.pg_enable_capture(self.pg_interfaces)
         self.pg_start()
 
-        peer_1 = VppWgPeer(self,
-                           wg0,
-                           self.pg1.remote_ip4,
-                           port+1,
-                           ["10.11.3.0/24"]).add_vpp_config()
+        peer_1 = VppWgPeer(
+            self, wg0, self.pg1.remote_ip4, port + 1, ["10.11.3.0/24"]
+        ).add_vpp_config()
         self.assertEqual(len(self.vapi.wireguard_peers_dump()), 1)
 
         self.assertEqual(len(self.vapi.wireguard_peers_dump()), 1)
 
-        r1 = VppIpRoute(self, "10.11.3.0", 24,
-                        [VppRoutePath("10.11.3.1",
-                                      wg0.sw_if_index)]).add_vpp_config()
+        r1 = VppIpRoute(
+            self, "10.11.3.0", 24, [VppRoutePath("10.11.3.1", wg0.sw_if_index)]
+        ).add_vpp_config()
 
         # wait for the peer to send a handshake
         rx = self.pg1.get_capture(1, timeout=2)
 
         # wait for the peer to send a handshake
         rx = self.pg1.get_capture(1, timeout=2)
@@ -513,10 +517,12 @@ class TestWg(VppTestCase):
             self.assertEqual(0, len(b))
 
         # send a packets that are routed into the tunnel
             self.assertEqual(0, len(b))
 
         # send a packets that are routed into the tunnel
-        p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-             IP(src=self.pg0.remote_ip4, dst="10.11.3.2") /
-             UDP(sport=555, dport=556) /
-             Raw(b'\x00' * 80))
+        p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(src=self.pg0.remote_ip4, dst="10.11.3.2")
+            / UDP(sport=555, dport=556)
+            / Raw(b"\x00" * 80)
+        )
 
         rxs = self.send_and_expect(self.pg0, p * 255, self.pg1)
 
 
         rxs = self.send_and_expect(self.pg0, p * 255, self.pg1)
 
@@ -524,15 +530,24 @@ class TestWg(VppTestCase):
 
         # send packets into the tunnel, expect to receive them on
         # the other side
 
         # send packets into the tunnel, expect to receive them on
         # the other side
-        p = [(peer_1.mk_tunnel_header(self.pg1) /
-              Wireguard(message_type=4, reserved_zero=0) /
-              WireguardTransport(
-                  receiver_index=peer_1.sender,
-                  counter=ii,
-                  encrypted_encapsulated_packet=peer_1.encrypt_transport(
-                      (IP(src="10.11.3.1", dst=self.pg0.remote_ip4, ttl=20) /
-                       UDP(sport=222, dport=223) /
-                       Raw())))) for ii in range(255)]
+        p = [
+            (
+                peer_1.mk_tunnel_header(self.pg1)
+                / Wireguard(message_type=4, reserved_zero=0)
+                / WireguardTransport(
+                    receiver_index=peer_1.sender,
+                    counter=ii,
+                    encrypted_encapsulated_packet=peer_1.encrypt_transport(
+                        (
+                            IP(src="10.11.3.1", dst=self.pg0.remote_ip4, ttl=20)
+                            / UDP(sport=222, dport=223)
+                            / Raw()
+                        )
+                    ),
+                )
+            )
+            for ii in range(255)
+        ]
 
         rxs = self.send_and_expect(self.pg1, p, self.pg0)
 
 
         rxs = self.send_and_expect(self.pg1, p, self.pg0)
 
@@ -545,53 +560,54 @@ class TestWg(VppTestCase):
         wg0.remove_vpp_config()
 
     def test_wg_peer_v4o4(self):
         wg0.remove_vpp_config()
 
     def test_wg_peer_v4o4(self):
-        """ Test v4o4"""
+        """Test v4o4"""
 
         port = 12333
 
         # Create interfaces
 
         port = 12333
 
         # Create interfaces
-        wg0 = VppWgInterface(self,
-                             self.pg1.local_ip4,
-                             port).add_vpp_config()
+        wg0 = VppWgInterface(self, self.pg1.local_ip4, port).add_vpp_config()
         wg0.admin_up()
         wg0.config_ip4()
 
         wg0.admin_up()
         wg0.config_ip4()
 
-        peer_1 = VppWgPeer(self,
-                           wg0,
-                           self.pg1.remote_ip4,
-                           port+1,
-                           ["10.11.3.0/24"]).add_vpp_config()
+        peer_1 = VppWgPeer(
+            self, wg0, self.pg1.remote_ip4, port + 1, ["10.11.3.0/24"]
+        ).add_vpp_config()
         self.assertEqual(len(self.vapi.wireguard_peers_dump()), 1)
 
         self.assertEqual(len(self.vapi.wireguard_peers_dump()), 1)
 
-        r1 = VppIpRoute(self, "10.11.3.0", 24,
-                        [VppRoutePath("10.11.3.1",
-                                      wg0.sw_if_index)]).add_vpp_config()
+        r1 = VppIpRoute(
+            self, "10.11.3.0", 24, [VppRoutePath("10.11.3.1", wg0.sw_if_index)]
+        ).add_vpp_config()
 
         # route a packet into the wg interface
         #  use the allowed-ip prefix
         #  this is dropped because the peer is not initiated
 
         # route a packet into the wg interface
         #  use the allowed-ip prefix
         #  this is dropped because the peer is not initiated
-        p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-             IP(src=self.pg0.remote_ip4, dst="10.11.3.2") /
-             UDP(sport=555, dport=556) /
-             Raw())
+        p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(src=self.pg0.remote_ip4, dst="10.11.3.2")
+            / UDP(sport=555, dport=556)
+            / Raw()
+        )
         self.send_and_assert_no_replies(self.pg0, [p])
         self.send_and_assert_no_replies(self.pg0, [p])
-        self.assertEqual(self.base_kp4_err + 1,
-                         self.statistics.get_err_counter(self.kp4_error))
+        self.assertEqual(
+            self.base_kp4_err + 1, self.statistics.get_err_counter(self.kp4_error)
+        )
 
         # send a handsake from the peer with an invalid MAC
         p = peer_1.mk_handshake(self.pg1)
 
         # send a handsake from the peer with an invalid MAC
         p = peer_1.mk_handshake(self.pg1)
-        p[WireguardInitiation].mac1 = b'foobar'
+        p[WireguardInitiation].mac1 = b"foobar"
         self.send_and_assert_no_replies(self.pg1, [p])
         self.send_and_assert_no_replies(self.pg1, [p])
-        self.assertEqual(self.base_mac4_err + 1,
-                         self.statistics.get_err_counter(self.mac4_error))
+        self.assertEqual(
+            self.base_mac4_err + 1, self.statistics.get_err_counter(self.mac4_error)
+        )
 
         # send a handsake from the peer but signed by the wrong key.
 
         # send a handsake from the peer but signed by the wrong key.
-        p = peer_1.mk_handshake(self.pg1,
-                                False,
-                                X25519PrivateKey.generate().public_key())
+        p = peer_1.mk_handshake(
+            self.pg1, False, X25519PrivateKey.generate().public_key()
+        )
         self.send_and_assert_no_replies(self.pg1, [p])
         self.send_and_assert_no_replies(self.pg1, [p])
-        self.assertEqual(self.base_peer4_err + 1,
-                         self.statistics.get_err_counter(self.peer4_error))
+        self.assertEqual(
+            self.base_peer4_err + 1, self.statistics.get_err_counter(self.peer4_error)
+        )
 
         # send a valid handsake init for which we expect a response
         p = peer_1.mk_handshake(self.pg1)
 
         # send a valid handsake init for which we expect a response
         p = peer_1.mk_handshake(self.pg1)
@@ -602,25 +618,31 @@ class TestWg(VppTestCase):
 
         # route a packet into the wg interface
         #  this is dropped because the peer is still not initiated
 
         # route a packet into the wg interface
         #  this is dropped because the peer is still not initiated
-        p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-             IP(src=self.pg0.remote_ip4, dst="10.11.3.2") /
-             UDP(sport=555, dport=556) /
-             Raw())
+        p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(src=self.pg0.remote_ip4, dst="10.11.3.2")
+            / UDP(sport=555, dport=556)
+            / Raw()
+        )
         self.send_and_assert_no_replies(self.pg0, [p])
         self.send_and_assert_no_replies(self.pg0, [p])
-        self.assertEqual(self.base_kp4_err + 2,
-                         self.statistics.get_err_counter(self.kp4_error))
+        self.assertEqual(
+            self.base_kp4_err + 2, self.statistics.get_err_counter(self.kp4_error)
+        )
 
         # send a data packet from the peer through the tunnel
         # this completes the handshake
 
         # send a data packet from the peer through the tunnel
         # this completes the handshake
-        p = (IP(src="10.11.3.1", dst=self.pg0.remote_ip4, ttl=20) /
-             UDP(sport=222, dport=223) /
-             Raw())
+        p = (
+            IP(src="10.11.3.1", dst=self.pg0.remote_ip4, ttl=20)
+            / UDP(sport=222, dport=223)
+            / Raw()
+        )
         d = peer_1.encrypt_transport(p)
         d = peer_1.encrypt_transport(p)
-        p = (peer_1.mk_tunnel_header(self.pg1) /
-             (Wireguard(message_type=4, reserved_zero=0) /
-              WireguardTransport(receiver_index=peer_1.sender,
-                                 counter=0,
-                                 encrypted_encapsulated_packet=d)))
+        p = peer_1.mk_tunnel_header(self.pg1) / (
+            Wireguard(message_type=4, reserved_zero=0)
+            / WireguardTransport(
+                receiver_index=peer_1.sender, counter=0, encrypted_encapsulated_packet=d
+            )
+        )
         rxs = self.send_and_expect(self.pg1, [p], self.pg0)
 
         for rx in rxs:
         rxs = self.send_and_expect(self.pg1, [p], self.pg0)
 
         for rx in rxs:
@@ -628,10 +650,12 @@ class TestWg(VppTestCase):
             self.assertEqual(rx[IP].ttl, 19)
 
         # send a packets that are routed into the tunnel
             self.assertEqual(rx[IP].ttl, 19)
 
         # send a packets that are routed into the tunnel
-        p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-             IP(src=self.pg0.remote_ip4, dst="10.11.3.2") /
-             UDP(sport=555, dport=556) /
-             Raw(b'\x00' * 80))
+        p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(src=self.pg0.remote_ip4, dst="10.11.3.2")
+            / UDP(sport=555, dport=556)
+            / Raw(b"\x00" * 80)
+        )
 
         rxs = self.send_and_expect(self.pg0, p * 255, self.pg1)
 
 
         rxs = self.send_and_expect(self.pg0, p * 255, self.pg1)
 
@@ -640,19 +664,28 @@ class TestWg(VppTestCase):
 
             # chech the oringial packet is present
             self.assertEqual(rx[IP].dst, p[IP].dst)
 
             # chech the oringial packet is present
             self.assertEqual(rx[IP].dst, p[IP].dst)
-            self.assertEqual(rx[IP].ttl, p[IP].ttl-1)
+            self.assertEqual(rx[IP].ttl, p[IP].ttl - 1)
 
         # send packets into the tunnel, expect to receive them on
         # the other side
 
         # send packets into the tunnel, expect to receive them on
         # the other side
-        p = [(peer_1.mk_tunnel_header(self.pg1) /
-              Wireguard(message_type=4, reserved_zero=0) /
-              WireguardTransport(
-                  receiver_index=peer_1.sender,
-                  counter=ii+1,
-                  encrypted_encapsulated_packet=peer_1.encrypt_transport(
-                      (IP(src="10.11.3.1", dst=self.pg0.remote_ip4, ttl=20) /
-                       UDP(sport=222, dport=223) /
-                       Raw())))) for ii in range(255)]
+        p = [
+            (
+                peer_1.mk_tunnel_header(self.pg1)
+                / Wireguard(message_type=4, reserved_zero=0)
+                / WireguardTransport(
+                    receiver_index=peer_1.sender,
+                    counter=ii + 1,
+                    encrypted_encapsulated_packet=peer_1.encrypt_transport(
+                        (
+                            IP(src="10.11.3.1", dst=self.pg0.remote_ip4, ttl=20)
+                            / UDP(sport=222, dport=223)
+                            / Raw()
+                        )
+                    ),
+                )
+            )
+            for ii in range(255)
+        ]
 
         rxs = self.send_and_expect(self.pg1, p, self.pg0)
 
 
         rxs = self.send_and_expect(self.pg1, p, self.pg0)
 
@@ -665,56 +698,57 @@ class TestWg(VppTestCase):
         wg0.remove_vpp_config()
 
     def test_wg_peer_v6o6(self):
         wg0.remove_vpp_config()
 
     def test_wg_peer_v6o6(self):
-        """ Test v6o6"""
+        """Test v6o6"""
 
         port = 12343
 
         # Create interfaces
 
         port = 12343
 
         # Create interfaces
-        wg0 = VppWgInterface(self,
-                             self.pg1.local_ip6,
-                             port).add_vpp_config()
+        wg0 = VppWgInterface(self, self.pg1.local_ip6, port).add_vpp_config()
         wg0.admin_up()
         wg0.config_ip6()
 
         wg0.admin_up()
         wg0.config_ip6()
 
-        peer_1 = VppWgPeer(self,
-                           wg0,
-                           self.pg1.remote_ip6,
-                           port+1,
-                           ["1::3:0/112"]).add_vpp_config(True)
+        peer_1 = VppWgPeer(
+            self, wg0, self.pg1.remote_ip6, port + 1, ["1::3:0/112"]
+        ).add_vpp_config(True)
         self.assertEqual(len(self.vapi.wireguard_peers_dump()), 1)
 
         self.assertEqual(len(self.vapi.wireguard_peers_dump()), 1)
 
-        r1 = VppIpRoute(self, "1::3:0", 112,
-                        [VppRoutePath("1::3:1",
-                                      wg0.sw_if_index)]).add_vpp_config()
+        r1 = VppIpRoute(
+            self, "1::3:0", 112, [VppRoutePath("1::3:1", wg0.sw_if_index)]
+        ).add_vpp_config()
 
         # route a packet into the wg interface
         #  use the allowed-ip prefix
         #  this is dropped because the peer is not initiated
 
 
         # route a packet into the wg interface
         #  use the allowed-ip prefix
         #  this is dropped because the peer is not initiated
 
-        p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-             IPv6(src=self.pg0.remote_ip6, dst="1::3:2") /
-             UDP(sport=555, dport=556) /
-             Raw())
+        p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IPv6(src=self.pg0.remote_ip6, dst="1::3:2")
+            / UDP(sport=555, dport=556)
+            / Raw()
+        )
         self.send_and_assert_no_replies(self.pg0, [p])
 
         self.send_and_assert_no_replies(self.pg0, [p])
 
-        self.assertEqual(self.base_kp6_err + 1,
-                         self.statistics.get_err_counter(self.kp6_error))
+        self.assertEqual(
+            self.base_kp6_err + 1, self.statistics.get_err_counter(self.kp6_error)
+        )
 
         # send a handsake from the peer with an invalid MAC
         p = peer_1.mk_handshake(self.pg1, True)
 
         # send a handsake from the peer with an invalid MAC
         p = peer_1.mk_handshake(self.pg1, True)
-        p[WireguardInitiation].mac1 = b'foobar'
+        p[WireguardInitiation].mac1 = b"foobar"
         self.send_and_assert_no_replies(self.pg1, [p])
 
         self.send_and_assert_no_replies(self.pg1, [p])
 
-        self.assertEqual(self.base_mac6_err + 1,
-                         self.statistics.get_err_counter(self.mac6_error))
+        self.assertEqual(
+            self.base_mac6_err + 1, self.statistics.get_err_counter(self.mac6_error)
+        )
 
         # send a handsake from the peer but signed by the wrong key.
 
         # send a handsake from the peer but signed by the wrong key.
-        p = peer_1.mk_handshake(self.pg1,
-                                True,
-                                X25519PrivateKey.generate().public_key())
+        p = peer_1.mk_handshake(
+            self.pg1, True, X25519PrivateKey.generate().public_key()
+        )
         self.send_and_assert_no_replies(self.pg1, [p])
         self.send_and_assert_no_replies(self.pg1, [p])
-        self.assertEqual(self.base_peer6_err + 1,
-                         self.statistics.get_err_counter(self.peer6_error))
+        self.assertEqual(
+            self.base_peer6_err + 1, self.statistics.get_err_counter(self.peer6_error)
+        )
 
         # send a valid handsake init for which we expect a response
         p = peer_1.mk_handshake(self.pg1, True)
 
         # send a valid handsake init for which we expect a response
         p = peer_1.mk_handshake(self.pg1, True)
@@ -725,25 +759,31 @@ class TestWg(VppTestCase):
 
         # route a packet into the wg interface
         #  this is dropped because the peer is still not initiated
 
         # route a packet into the wg interface
         #  this is dropped because the peer is still not initiated
-        p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-             IPv6(src=self.pg0.remote_ip6, dst="1::3:2") /
-             UDP(sport=555, dport=556) /
-             Raw())
+        p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IPv6(src=self.pg0.remote_ip6, dst="1::3:2")
+            / UDP(sport=555, dport=556)
+            / Raw()
+        )
         self.send_and_assert_no_replies(self.pg0, [p])
         self.send_and_assert_no_replies(self.pg0, [p])
-        self.assertEqual(self.base_kp6_err + 2,
-                         self.statistics.get_err_counter(self.kp6_error))
+        self.assertEqual(
+            self.base_kp6_err + 2, self.statistics.get_err_counter(self.kp6_error)
+        )
 
         # send a data packet from the peer through the tunnel
         # this completes the handshake
 
         # send a data packet from the peer through the tunnel
         # this completes the handshake
-        p = (IPv6(src="1::3:1", dst=self.pg0.remote_ip6, hlim=20) /
-             UDP(sport=222, dport=223) /
-             Raw())
+        p = (
+            IPv6(src="1::3:1", dst=self.pg0.remote_ip6, hlim=20)
+            / UDP(sport=222, dport=223)
+            / Raw()
+        )
         d = peer_1.encrypt_transport(p)
         d = peer_1.encrypt_transport(p)
-        p = (peer_1.mk_tunnel_header(self.pg1, True) /
-             (Wireguard(message_type=4, reserved_zero=0) /
-              WireguardTransport(receiver_index=peer_1.sender,
-                                 counter=0,
-                                 encrypted_encapsulated_packet=d)))
+        p = peer_1.mk_tunnel_header(self.pg1, True) / (
+            Wireguard(message_type=4, reserved_zero=0)
+            / WireguardTransport(
+                receiver_index=peer_1.sender, counter=0, encrypted_encapsulated_packet=d
+            )
+        )
         rxs = self.send_and_expect(self.pg1, [p], self.pg0)
 
         for rx in rxs:
         rxs = self.send_and_expect(self.pg1, [p], self.pg0)
 
         for rx in rxs:
@@ -751,10 +791,12 @@ class TestWg(VppTestCase):
             self.assertEqual(rx[IPv6].hlim, 19)
 
         # send a packets that are routed into the tunnel
             self.assertEqual(rx[IPv6].hlim, 19)
 
         # send a packets that are routed into the tunnel
-        p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-             IPv6(src=self.pg0.remote_ip6, dst="1::3:2") /
-             UDP(sport=555, dport=556) /
-             Raw(b'\x00' * 80))
+        p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IPv6(src=self.pg0.remote_ip6, dst="1::3:2")
+            / UDP(sport=555, dport=556)
+            / Raw(b"\x00" * 80)
+        )
 
         rxs = self.send_and_expect(self.pg0, p * 255, self.pg1)
 
 
         rxs = self.send_and_expect(self.pg0, p * 255, self.pg1)
 
@@ -763,19 +805,28 @@ class TestWg(VppTestCase):
 
             # chech the oringial packet is present
             self.assertEqual(rx[IPv6].dst, p[IPv6].dst)
 
             # chech the oringial packet is present
             self.assertEqual(rx[IPv6].dst, p[IPv6].dst)
-            self.assertEqual(rx[IPv6].hlim, p[IPv6].hlim-1)
+            self.assertEqual(rx[IPv6].hlim, p[IPv6].hlim - 1)
 
         # send packets into the tunnel, expect to receive them on
         # the other side
 
         # send packets into the tunnel, expect to receive them on
         # the other side
-        p = [(peer_1.mk_tunnel_header(self.pg1, True) /
-              Wireguard(message_type=4, reserved_zero=0) /
-              WireguardTransport(
-                  receiver_index=peer_1.sender,
-                  counter=ii+1,
-                  encrypted_encapsulated_packet=peer_1.encrypt_transport(
-                      (IPv6(src="1::3:1", dst=self.pg0.remote_ip6, hlim=20) /
-                       UDP(sport=222, dport=223) /
-                       Raw())))) for ii in range(255)]
+        p = [
+            (
+                peer_1.mk_tunnel_header(self.pg1, True)
+                / Wireguard(message_type=4, reserved_zero=0)
+                / WireguardTransport(
+                    receiver_index=peer_1.sender,
+                    counter=ii + 1,
+                    encrypted_encapsulated_packet=peer_1.encrypt_transport(
+                        (
+                            IPv6(src="1::3:1", dst=self.pg0.remote_ip6, hlim=20)
+                            / UDP(sport=222, dport=223)
+                            / Raw()
+                        )
+                    ),
+                )
+            )
+            for ii in range(255)
+        ]
 
         rxs = self.send_and_expect(self.pg1, p, self.pg0)
 
 
         rxs = self.send_and_expect(self.pg1, p, self.pg0)
 
@@ -788,54 +839,55 @@ class TestWg(VppTestCase):
         wg0.remove_vpp_config()
 
     def test_wg_peer_v6o4(self):
         wg0.remove_vpp_config()
 
     def test_wg_peer_v6o4(self):
-        """ Test v6o4"""
+        """Test v6o4"""
 
         port = 12353
 
         # Create interfaces
 
         port = 12353
 
         # Create interfaces
-        wg0 = VppWgInterface(self,
-                             self.pg1.local_ip4,
-                             port).add_vpp_config()
+        wg0 = VppWgInterface(self, self.pg1.local_ip4, port).add_vpp_config()
         wg0.admin_up()
         wg0.config_ip6()
 
         wg0.admin_up()
         wg0.config_ip6()
 
-        peer_1 = VppWgPeer(self,
-                           wg0,
-                           self.pg1.remote_ip4,
-                           port+1,
-                           ["1::3:0/112"]).add_vpp_config(True)
+        peer_1 = VppWgPeer(
+            self, wg0, self.pg1.remote_ip4, port + 1, ["1::3:0/112"]
+        ).add_vpp_config(True)
         self.assertEqual(len(self.vapi.wireguard_peers_dump()), 1)
 
         self.assertEqual(len(self.vapi.wireguard_peers_dump()), 1)
 
-        r1 = VppIpRoute(self, "1::3:0", 112,
-                        [VppRoutePath("1::3:1",
-                                      wg0.sw_if_index)]).add_vpp_config()
+        r1 = VppIpRoute(
+            self, "1::3:0", 112, [VppRoutePath("1::3:1", wg0.sw_if_index)]
+        ).add_vpp_config()
 
         # route a packet into the wg interface
         #  use the allowed-ip prefix
         #  this is dropped because the peer is not initiated
 
         # route a packet into the wg interface
         #  use the allowed-ip prefix
         #  this is dropped because the peer is not initiated
-        p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-             IPv6(src=self.pg0.remote_ip6, dst="1::3:2") /
-             UDP(sport=555, dport=556) /
-             Raw())
+        p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IPv6(src=self.pg0.remote_ip6, dst="1::3:2")
+            / UDP(sport=555, dport=556)
+            / Raw()
+        )
         self.send_and_assert_no_replies(self.pg0, [p])
         self.send_and_assert_no_replies(self.pg0, [p])
-        self.assertEqual(self.base_kp6_err + 1,
-                         self.statistics.get_err_counter(self.kp6_error))
+        self.assertEqual(
+            self.base_kp6_err + 1, self.statistics.get_err_counter(self.kp6_error)
+        )
 
         # send a handsake from the peer with an invalid MAC
         p = peer_1.mk_handshake(self.pg1)
 
         # send a handsake from the peer with an invalid MAC
         p = peer_1.mk_handshake(self.pg1)
-        p[WireguardInitiation].mac1 = b'foobar'
+        p[WireguardInitiation].mac1 = b"foobar"
         self.send_and_assert_no_replies(self.pg1, [p])
 
         self.send_and_assert_no_replies(self.pg1, [p])
 
-        self.assertEqual(self.base_mac4_err + 1,
-                         self.statistics.get_err_counter(self.mac4_error))
+        self.assertEqual(
+            self.base_mac4_err + 1, self.statistics.get_err_counter(self.mac4_error)
+        )
 
         # send a handsake from the peer but signed by the wrong key.
 
         # send a handsake from the peer but signed by the wrong key.
-        p = peer_1.mk_handshake(self.pg1,
-                                False,
-                                X25519PrivateKey.generate().public_key())
+        p = peer_1.mk_handshake(
+            self.pg1, False, X25519PrivateKey.generate().public_key()
+        )
         self.send_and_assert_no_replies(self.pg1, [p])
         self.send_and_assert_no_replies(self.pg1, [p])
-        self.assertEqual(self.base_peer4_err + 1,
-                         self.statistics.get_err_counter(self.peer4_error))
+        self.assertEqual(
+            self.base_peer4_err + 1, self.statistics.get_err_counter(self.peer4_error)
+        )
 
         # send a valid handsake init for which we expect a response
         p = peer_1.mk_handshake(self.pg1)
 
         # send a valid handsake init for which we expect a response
         p = peer_1.mk_handshake(self.pg1)
@@ -846,25 +898,31 @@ class TestWg(VppTestCase):
 
         # route a packet into the wg interface
         #  this is dropped because the peer is still not initiated
 
         # route a packet into the wg interface
         #  this is dropped because the peer is still not initiated
-        p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-             IPv6(src=self.pg0.remote_ip6, dst="1::3:2") /
-             UDP(sport=555, dport=556) /
-             Raw())
+        p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IPv6(src=self.pg0.remote_ip6, dst="1::3:2")
+            / UDP(sport=555, dport=556)
+            / Raw()
+        )
         self.send_and_assert_no_replies(self.pg0, [p])
         self.send_and_assert_no_replies(self.pg0, [p])
-        self.assertEqual(self.base_kp6_err + 2,
-                         self.statistics.get_err_counter(self.kp6_error))
+        self.assertEqual(
+            self.base_kp6_err + 2, self.statistics.get_err_counter(self.kp6_error)
+        )
 
         # send a data packet from the peer through the tunnel
         # this completes the handshake
 
         # send a data packet from the peer through the tunnel
         # this completes the handshake
-        p = (IPv6(src="1::3:1", dst=self.pg0.remote_ip6, hlim=20) /
-             UDP(sport=222, dport=223) /
-             Raw())
+        p = (
+            IPv6(src="1::3:1", dst=self.pg0.remote_ip6, hlim=20)
+            / UDP(sport=222, dport=223)
+            / Raw()
+        )
         d = peer_1.encrypt_transport(p)
         d = peer_1.encrypt_transport(p)
-        p = (peer_1.mk_tunnel_header(self.pg1) /
-             (Wireguard(message_type=4, reserved_zero=0) /
-              WireguardTransport(receiver_index=peer_1.sender,
-                                 counter=0,
-                                 encrypted_encapsulated_packet=d)))
+        p = peer_1.mk_tunnel_header(self.pg1) / (
+            Wireguard(message_type=4, reserved_zero=0)
+            / WireguardTransport(
+                receiver_index=peer_1.sender, counter=0, encrypted_encapsulated_packet=d
+            )
+        )
         rxs = self.send_and_expect(self.pg1, [p], self.pg0)
 
         for rx in rxs:
         rxs = self.send_and_expect(self.pg1, [p], self.pg0)
 
         for rx in rxs:
@@ -872,10 +930,12 @@ class TestWg(VppTestCase):
             self.assertEqual(rx[IPv6].hlim, 19)
 
         # send a packets that are routed into the tunnel
             self.assertEqual(rx[IPv6].hlim, 19)
 
         # send a packets that are routed into the tunnel
-        p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-             IPv6(src=self.pg0.remote_ip6, dst="1::3:2") /
-             UDP(sport=555, dport=556) /
-             Raw(b'\x00' * 80))
+        p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IPv6(src=self.pg0.remote_ip6, dst="1::3:2")
+            / UDP(sport=555, dport=556)
+            / Raw(b"\x00" * 80)
+        )
 
         rxs = self.send_and_expect(self.pg0, p * 255, self.pg1)
 
 
         rxs = self.send_and_expect(self.pg0, p * 255, self.pg1)
 
@@ -884,19 +944,28 @@ class TestWg(VppTestCase):
 
             # chech the oringial packet is present
             self.assertEqual(rx[IPv6].dst, p[IPv6].dst)
 
             # chech the oringial packet is present
             self.assertEqual(rx[IPv6].dst, p[IPv6].dst)
-            self.assertEqual(rx[IPv6].hlim, p[IPv6].hlim-1)
+            self.assertEqual(rx[IPv6].hlim, p[IPv6].hlim - 1)
 
         # send packets into the tunnel, expect to receive them on
         # the other side
 
         # send packets into the tunnel, expect to receive them on
         # the other side
-        p = [(peer_1.mk_tunnel_header(self.pg1) /
-              Wireguard(message_type=4, reserved_zero=0) /
-              WireguardTransport(
-                  receiver_index=peer_1.sender,
-                  counter=ii+1,
-                  encrypted_encapsulated_packet=peer_1.encrypt_transport(
-                      (IPv6(src="1::3:1", dst=self.pg0.remote_ip6, hlim=20) /
-                       UDP(sport=222, dport=223) /
-                       Raw())))) for ii in range(255)]
+        p = [
+            (
+                peer_1.mk_tunnel_header(self.pg1)
+                / Wireguard(message_type=4, reserved_zero=0)
+                / WireguardTransport(
+                    receiver_index=peer_1.sender,
+                    counter=ii + 1,
+                    encrypted_encapsulated_packet=peer_1.encrypt_transport(
+                        (
+                            IPv6(src="1::3:1", dst=self.pg0.remote_ip6, hlim=20)
+                            / UDP(sport=222, dport=223)
+                            / Raw()
+                        )
+                    ),
+                )
+            )
+            for ii in range(255)
+        ]
 
         rxs = self.send_and_expect(self.pg1, p, self.pg0)
 
 
         rxs = self.send_and_expect(self.pg1, p, self.pg0)
 
@@ -909,53 +978,54 @@ class TestWg(VppTestCase):
         wg0.remove_vpp_config()
 
     def test_wg_peer_v4o6(self):
         wg0.remove_vpp_config()
 
     def test_wg_peer_v4o6(self):
-        """ Test v4o6"""
+        """Test v4o6"""
 
         port = 12363
 
         # Create interfaces
 
         port = 12363
 
         # Create interfaces
-        wg0 = VppWgInterface(self,
-                             self.pg1.local_ip6,
-                             port).add_vpp_config()
+        wg0 = VppWgInterface(self, self.pg1.local_ip6, port).add_vpp_config()
         wg0.admin_up()
         wg0.config_ip4()
 
         wg0.admin_up()
         wg0.config_ip4()
 
-        peer_1 = VppWgPeer(self,
-                           wg0,
-                           self.pg1.remote_ip6,
-                           port+1,
-                           ["10.11.3.0/24"]).add_vpp_config()
+        peer_1 = VppWgPeer(
+            self, wg0, self.pg1.remote_ip6, port + 1, ["10.11.3.0/24"]
+        ).add_vpp_config()
         self.assertEqual(len(self.vapi.wireguard_peers_dump()), 1)
 
         self.assertEqual(len(self.vapi.wireguard_peers_dump()), 1)
 
-        r1 = VppIpRoute(self, "10.11.3.0", 24,
-                        [VppRoutePath("10.11.3.1",
-                                      wg0.sw_if_index)]).add_vpp_config()
+        r1 = VppIpRoute(
+            self, "10.11.3.0", 24, [VppRoutePath("10.11.3.1", wg0.sw_if_index)]
+        ).add_vpp_config()
 
         # route a packet into the wg interface
         #  use the allowed-ip prefix
         #  this is dropped because the peer is not initiated
 
         # route a packet into the wg interface
         #  use the allowed-ip prefix
         #  this is dropped because the peer is not initiated
-        p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-             IP(src=self.pg0.remote_ip4, dst="10.11.3.2") /
-             UDP(sport=555, dport=556) /
-             Raw())
+        p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(src=self.pg0.remote_ip4, dst="10.11.3.2")
+            / UDP(sport=555, dport=556)
+            / Raw()
+        )
         self.send_and_assert_no_replies(self.pg0, [p])
         self.send_and_assert_no_replies(self.pg0, [p])
-        self.assertEqual(self.base_kp4_err + 1,
-                         self.statistics.get_err_counter(self.kp4_error))
+        self.assertEqual(
+            self.base_kp4_err + 1, self.statistics.get_err_counter(self.kp4_error)
+        )
 
         # send a handsake from the peer with an invalid MAC
         p = peer_1.mk_handshake(self.pg1, True)
 
         # send a handsake from the peer with an invalid MAC
         p = peer_1.mk_handshake(self.pg1, True)
-        p[WireguardInitiation].mac1 = b'foobar'
+        p[WireguardInitiation].mac1 = b"foobar"
         self.send_and_assert_no_replies(self.pg1, [p])
         self.send_and_assert_no_replies(self.pg1, [p])
-        self.assertEqual(self.base_mac6_err + 1,
-                         self.statistics.get_err_counter(self.mac6_error))
+        self.assertEqual(
+            self.base_mac6_err + 1, self.statistics.get_err_counter(self.mac6_error)
+        )
 
         # send a handsake from the peer but signed by the wrong key.
 
         # send a handsake from the peer but signed by the wrong key.
-        p = peer_1.mk_handshake(self.pg1,
-                                True,
-                                X25519PrivateKey.generate().public_key())
+        p = peer_1.mk_handshake(
+            self.pg1, True, X25519PrivateKey.generate().public_key()
+        )
         self.send_and_assert_no_replies(self.pg1, [p])
         self.send_and_assert_no_replies(self.pg1, [p])
-        self.assertEqual(self.base_peer6_err + 1,
-                         self.statistics.get_err_counter(self.peer6_error))
+        self.assertEqual(
+            self.base_peer6_err + 1, self.statistics.get_err_counter(self.peer6_error)
+        )
 
         # send a valid handsake init for which we expect a response
         p = peer_1.mk_handshake(self.pg1, True)
 
         # send a valid handsake init for which we expect a response
         p = peer_1.mk_handshake(self.pg1, True)
@@ -966,25 +1036,31 @@ class TestWg(VppTestCase):
 
         # route a packet into the wg interface
         #  this is dropped because the peer is still not initiated
 
         # route a packet into the wg interface
         #  this is dropped because the peer is still not initiated
-        p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-             IP(src=self.pg0.remote_ip4, dst="10.11.3.2") /
-             UDP(sport=555, dport=556) /
-             Raw())
+        p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(src=self.pg0.remote_ip4, dst="10.11.3.2")
+            / UDP(sport=555, dport=556)
+            / Raw()
+        )
         self.send_and_assert_no_replies(self.pg0, [p])
         self.send_and_assert_no_replies(self.pg0, [p])
-        self.assertEqual(self.base_kp4_err + 2,
-                         self.statistics.get_err_counter(self.kp4_error))
+        self.assertEqual(
+            self.base_kp4_err + 2, self.statistics.get_err_counter(self.kp4_error)
+        )
 
         # send a data packet from the peer through the tunnel
         # this completes the handshake
 
         # send a data packet from the peer through the tunnel
         # this completes the handshake
-        p = (IP(src="10.11.3.1", dst=self.pg0.remote_ip4, ttl=20) /
-             UDP(sport=222, dport=223) /
-             Raw())
+        p = (
+            IP(src="10.11.3.1", dst=self.pg0.remote_ip4, ttl=20)
+            / UDP(sport=222, dport=223)
+            / Raw()
+        )
         d = peer_1.encrypt_transport(p)
         d = peer_1.encrypt_transport(p)
-        p = (peer_1.mk_tunnel_header(self.pg1, True) /
-             (Wireguard(message_type=4, reserved_zero=0) /
-              WireguardTransport(receiver_index=peer_1.sender,
-                                 counter=0,
-                                 encrypted_encapsulated_packet=d)))
+        p = peer_1.mk_tunnel_header(self.pg1, True) / (
+            Wireguard(message_type=4, reserved_zero=0)
+            / WireguardTransport(
+                receiver_index=peer_1.sender, counter=0, encrypted_encapsulated_packet=d
+            )
+        )
         rxs = self.send_and_expect(self.pg1, [p], self.pg0)
 
         for rx in rxs:
         rxs = self.send_and_expect(self.pg1, [p], self.pg0)
 
         for rx in rxs:
@@ -992,10 +1068,12 @@ class TestWg(VppTestCase):
             self.assertEqual(rx[IP].ttl, 19)
 
         # send a packets that are routed into the tunnel
             self.assertEqual(rx[IP].ttl, 19)
 
         # send a packets that are routed into the tunnel
-        p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-             IP(src=self.pg0.remote_ip4, dst="10.11.3.2") /
-             UDP(sport=555, dport=556) /
-             Raw(b'\x00' * 80))
+        p = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(src=self.pg0.remote_ip4, dst="10.11.3.2")
+            / UDP(sport=555, dport=556)
+            / Raw(b"\x00" * 80)
+        )
 
         rxs = self.send_and_expect(self.pg0, p * 255, self.pg1)
 
 
         rxs = self.send_and_expect(self.pg0, p * 255, self.pg1)
 
@@ -1004,19 +1082,28 @@ class TestWg(VppTestCase):
 
             # chech the oringial packet is present
             self.assertEqual(rx[IP].dst, p[IP].dst)
 
             # chech the oringial packet is present
             self.assertEqual(rx[IP].dst, p[IP].dst)
-            self.assertEqual(rx[IP].ttl, p[IP].ttl-1)
+            self.assertEqual(rx[IP].ttl, p[IP].ttl - 1)
 
         # send packets into the tunnel, expect to receive them on
         # the other side
 
         # send packets into the tunnel, expect to receive them on
         # the other side
-        p = [(peer_1.mk_tunnel_header(self.pg1, True) /
-              Wireguard(message_type=4, reserved_zero=0) /
-              WireguardTransport(
-                  receiver_index=peer_1.sender,
-                  counter=ii+1,
-                  encrypted_encapsulated_packet=peer_1.encrypt_transport(
-                      (IP(src="10.11.3.1", dst=self.pg0.remote_ip4, ttl=20) /
-                       UDP(sport=222, dport=223) /
-                       Raw())))) for ii in range(255)]
+        p = [
+            (
+                peer_1.mk_tunnel_header(self.pg1, True)
+                / Wireguard(message_type=4, reserved_zero=0)
+                / WireguardTransport(
+                    receiver_index=peer_1.sender,
+                    counter=ii + 1,
+                    encrypted_encapsulated_packet=peer_1.encrypt_transport(
+                        (
+                            IP(src="10.11.3.1", dst=self.pg0.remote_ip4, ttl=20)
+                            / UDP(sport=222, dport=223)
+                            / Raw()
+                        )
+                    ),
+                )
+            )
+            for ii in range(255)
+        ]
 
         rxs = self.send_and_expect(self.pg1, p, self.pg0)
 
 
         rxs = self.send_and_expect(self.pg1, p, self.pg0)
 
@@ -1029,16 +1116,12 @@ class TestWg(VppTestCase):
         wg0.remove_vpp_config()
 
     def test_wg_multi_peer(self):
         wg0.remove_vpp_config()
 
     def test_wg_multi_peer(self):
-        """ multiple peer setup """
+        """multiple peer setup"""
         port = 12373
 
         # Create interfaces
         port = 12373
 
         # Create interfaces
-        wg0 = VppWgInterface(self,
-                             self.pg1.local_ip4,
-                             port).add_vpp_config()
-        wg1 = VppWgInterface(self,
-                             self.pg2.local_ip4,
-                             port+1).add_vpp_config()
+        wg0 = VppWgInterface(self, self.pg1.local_ip4, port).add_vpp_config()
+        wg1 = VppWgInterface(self, self.pg2.local_ip4, port + 1).add_vpp_config()
         wg0.admin_up()
         wg1.admin_up()
 
         wg0.admin_up()
         wg1.admin_up()
 
@@ -1060,25 +1143,43 @@ class TestWg(VppTestCase):
         routes_1 = []
         routes_2 = []
         for i in range(NUM_PEERS):
         routes_1 = []
         routes_2 = []
         for i in range(NUM_PEERS):
-            peers_1.append(VppWgPeer(self,
-                                     wg0,
-                                     self.pg1.remote_hosts[i].ip4,
-                                     port+1+i,
-                                     ["10.0.%d.4/32" % i]).add_vpp_config())
-            routes_1.append(VppIpRoute(self, "10.0.%d.4" % i, 32,
-                            [VppRoutePath(self.pg1.remote_hosts[i].ip4,
-                                          wg0.sw_if_index)]).add_vpp_config())
-
-            peers_2.append(VppWgPeer(self,
-                                     wg1,
-                                     self.pg2.remote_hosts[i].ip4,
-                                     port+100+i,
-                                     ["10.100.%d.4/32" % i]).add_vpp_config())
-            routes_2.append(VppIpRoute(self, "10.100.%d.4" % i, 32,
-                            [VppRoutePath(self.pg2.remote_hosts[i].ip4,
-                                          wg1.sw_if_index)]).add_vpp_config())
-
-        self.assertEqual(len(self.vapi.wireguard_peers_dump()), NUM_PEERS*2)
+            peers_1.append(
+                VppWgPeer(
+                    self,
+                    wg0,
+                    self.pg1.remote_hosts[i].ip4,
+                    port + 1 + i,
+                    ["10.0.%d.4/32" % i],
+                ).add_vpp_config()
+            )
+            routes_1.append(
+                VppIpRoute(
+                    self,
+                    "10.0.%d.4" % i,
+                    32,
+                    [VppRoutePath(self.pg1.remote_hosts[i].ip4, wg0.sw_if_index)],
+                ).add_vpp_config()
+            )
+
+            peers_2.append(
+                VppWgPeer(
+                    self,
+                    wg1,
+                    self.pg2.remote_hosts[i].ip4,
+                    port + 100 + i,
+                    ["10.100.%d.4/32" % i],
+                ).add_vpp_config()
+            )
+            routes_2.append(
+                VppIpRoute(
+                    self,
+                    "10.100.%d.4" % i,
+                    32,
+                    [VppRoutePath(self.pg2.remote_hosts[i].ip4, wg1.sw_if_index)],
+                ).add_vpp_config()
+            )
+
+        self.assertEqual(len(self.vapi.wireguard_peers_dump()), NUM_PEERS * 2)
 
         self.logger.info(self.vapi.cli("show wireguard peer"))
         self.logger.info(self.vapi.cli("show wireguard interface"))
 
         self.logger.info(self.vapi.cli("show wireguard peer"))
         self.logger.info(self.vapi.cli("show wireguard interface"))
@@ -1104,7 +1205,7 @@ class TestWg(VppTestCase):
         wg1.remove_vpp_config()
 
     def test_wg_multi_interface(self):
         wg1.remove_vpp_config()
 
     def test_wg_multi_interface(self):
-        """ Multi-tunnel on the same port """
+        """Multi-tunnel on the same port"""
         port = 12500
 
         # Create many wireguard interfaces
         port = 12500
 
         # Create many wireguard interfaces
@@ -1120,21 +1221,28 @@ class TestWg(VppTestCase):
         wg_ifs = []
         for i in range(NUM_IFS):
             # Use the same port for each interface
         wg_ifs = []
         for i in range(NUM_IFS):
             # Use the same port for each interface
-            wg0 = VppWgInterface(self,
-                                 self.pg1.local_ip4,
-                                 port).add_vpp_config()
+            wg0 = VppWgInterface(self, self.pg1.local_ip4, port).add_vpp_config()
             wg0.admin_up()
             wg0.config_ip4()
             wg_ifs.append(wg0)
             wg0.admin_up()
             wg0.config_ip4()
             wg_ifs.append(wg0)
-            peers.append(VppWgPeer(self,
-                                   wg0,
-                                   self.pg1.remote_hosts[i].ip4,
-                                   port+1+i,
-                                   ["10.0.%d.0/24" % i]).add_vpp_config())
-
-            routes.append(VppIpRoute(self, "10.0.%d.0" % i, 24,
-                          [VppRoutePath("10.0.%d.4" % i,
-                                        wg0.sw_if_index)]).add_vpp_config())
+            peers.append(
+                VppWgPeer(
+                    self,
+                    wg0,
+                    self.pg1.remote_hosts[i].ip4,
+                    port + 1 + i,
+                    ["10.0.%d.0/24" % i],
+                ).add_vpp_config()
+            )
+
+            routes.append(
+                VppIpRoute(
+                    self,
+                    "10.0.%d.0" % i,
+                    24,
+                    [VppRoutePath("10.0.%d.4" % i, wg0.sw_if_index)],
+                ).add_vpp_config()
+            )
 
         self.assertEqual(len(self.vapi.wireguard_peers_dump()), NUM_IFS)
 
 
         self.assertEqual(len(self.vapi.wireguard_peers_dump()), NUM_IFS)
 
@@ -1146,16 +1254,20 @@ class TestWg(VppTestCase):
 
             # send a data packet from the peer through the tunnel
             # this completes the handshake
 
             # send a data packet from the peer through the tunnel
             # this completes the handshake
-            p = (IP(src="10.0.%d.4" % i,
-                    dst=self.pg0.remote_hosts[i].ip4, ttl=20) /
-                 UDP(sport=222, dport=223) /
-                 Raw())
+            p = (
+                IP(src="10.0.%d.4" % i, dst=self.pg0.remote_hosts[i].ip4, ttl=20)
+                / UDP(sport=222, dport=223)
+                / Raw()
+            )
             d = peers[i].encrypt_transport(p)
             d = peers[i].encrypt_transport(p)
-            p = (peers[i].mk_tunnel_header(self.pg1) /
-                 (Wireguard(message_type=4, reserved_zero=0) /
-                  WireguardTransport(receiver_index=peers[i].sender,
-                                     counter=0,
-                                     encrypted_encapsulated_packet=d)))
+            p = peers[i].mk_tunnel_header(self.pg1) / (
+                Wireguard(message_type=4, reserved_zero=0)
+                / WireguardTransport(
+                    receiver_index=peers[i].sender,
+                    counter=0,
+                    encrypted_encapsulated_packet=d,
+                )
+            )
             rxs = self.send_and_expect(self.pg1, [p], self.pg0)
             for rx in rxs:
                 self.assertEqual(rx[IP].dst, self.pg0.remote_hosts[i].ip4)
             rxs = self.send_and_expect(self.pg1, [p], self.pg0)
             for rx in rxs:
                 self.assertEqual(rx[IP].dst, self.pg0.remote_hosts[i].ip4)
@@ -1163,10 +1275,12 @@ class TestWg(VppTestCase):
 
         # send a packets that are routed into the tunnel
         for i in range(NUM_IFS):
 
         # send a packets that are routed into the tunnel
         for i in range(NUM_IFS):
-            p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-                 IP(src=self.pg0.remote_hosts[i].ip4, dst="10.0.%d.4" % i) /
-                 UDP(sport=555, dport=556) /
-                 Raw(b'\x00' * 80))
+            p = (
+                Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+                / IP(src=self.pg0.remote_hosts[i].ip4, dst="10.0.%d.4" % i)
+                / UDP(sport=555, dport=556)
+                / Raw(b"\x00" * 80)
+            )
 
             rxs = self.send_and_expect(self.pg0, p * 64, self.pg1)
 
 
             rxs = self.send_and_expect(self.pg0, p * 64, self.pg1)
 
@@ -1175,20 +1289,32 @@ class TestWg(VppTestCase):
 
                 # check the oringial packet is present
                 self.assertEqual(rx[IP].dst, p[IP].dst)
 
                 # check the oringial packet is present
                 self.assertEqual(rx[IP].dst, p[IP].dst)
-                self.assertEqual(rx[IP].ttl, p[IP].ttl-1)
+                self.assertEqual(rx[IP].ttl, p[IP].ttl - 1)
 
         # send packets into the tunnel
         for i in range(NUM_IFS):
 
         # send packets into the tunnel
         for i in range(NUM_IFS):
-            p = [(peers[i].mk_tunnel_header(self.pg1) /
-                  Wireguard(message_type=4, reserved_zero=0) /
-                  WireguardTransport(
-                      receiver_index=peers[i].sender,
-                      counter=ii+1,
-                      encrypted_encapsulated_packet=peers[i].encrypt_transport(
-                          (IP(src="10.0.%d.4" % i,
-                              dst=self.pg0.remote_hosts[i].ip4, ttl=20) /
-                           UDP(sport=222, dport=223) /
-                           Raw())))) for ii in range(64)]
+            p = [
+                (
+                    peers[i].mk_tunnel_header(self.pg1)
+                    / Wireguard(message_type=4, reserved_zero=0)
+                    / WireguardTransport(
+                        receiver_index=peers[i].sender,
+                        counter=ii + 1,
+                        encrypted_encapsulated_packet=peers[i].encrypt_transport(
+                            (
+                                IP(
+                                    src="10.0.%d.4" % i,
+                                    dst=self.pg0.remote_hosts[i].ip4,
+                                    ttl=20,
+                                )
+                                / UDP(sport=222, dport=223)
+                                / Raw()
+                            )
+                        ),
+                    )
+                )
+                for ii in range(64)
+            ]
 
             rxs = self.send_and_expect(self.pg1, p, self.pg0)
 
 
             rxs = self.send_and_expect(self.pg1, p, self.pg0)
 
@@ -1204,22 +1330,16 @@ class TestWg(VppTestCase):
             i.remove_vpp_config()
 
     def test_wg_event(self):
             i.remove_vpp_config()
 
     def test_wg_event(self):
-        """ Test events """
+        """Test events"""
         port = 12600
         port = 12600
-        ESTABLISHED_FLAG = VppEnum.\
-            vl_api_wireguard_peer_flags_t.\
-            WIREGUARD_PEER_ESTABLISHED
-        DEAD_FLAG = VppEnum.\
-            vl_api_wireguard_peer_flags_t.\
-            WIREGUARD_PEER_STATUS_DEAD
+        ESTABLISHED_FLAG = (
+            VppEnum.vl_api_wireguard_peer_flags_t.WIREGUARD_PEER_ESTABLISHED
+        )
+        DEAD_FLAG = VppEnum.vl_api_wireguard_peer_flags_t.WIREGUARD_PEER_STATUS_DEAD
 
         # Create interfaces
 
         # Create interfaces
-        wg0 = VppWgInterface(self,
-                             self.pg1.local_ip4,
-                             port).add_vpp_config()
-        wg1 = VppWgInterface(self,
-                             self.pg2.local_ip4,
-                             port+1).add_vpp_config()
+        wg0 = VppWgInterface(self, self.pg1.local_ip4, port).add_vpp_config()
+        wg1 = VppWgInterface(self, self.pg2.local_ip4, port + 1).add_vpp_config()
         wg0.admin_up()
         wg1.admin_up()
 
         wg0.admin_up()
         wg1.admin_up()
 
@@ -1241,25 +1361,43 @@ class TestWg(VppTestCase):
         routes_0 = []
         routes_1 = []
         for i in range(NUM_PEERS):
         routes_0 = []
         routes_1 = []
         for i in range(NUM_PEERS):
-            peers_0.append(VppWgPeer(self,
-                                     wg0,
-                                     self.pg1.remote_hosts[i].ip4,
-                                     port+1+i,
-                                     ["10.0.%d.4/32" % i]).add_vpp_config())
-            routes_0.append(VppIpRoute(self, "10.0.%d.4" % i, 32,
-                            [VppRoutePath(self.pg1.remote_hosts[i].ip4,
-                                          wg0.sw_if_index)]).add_vpp_config())
-
-            peers_1.append(VppWgPeer(self,
-                                     wg1,
-                                     self.pg2.remote_hosts[i].ip4,
-                                     port+100+i,
-                                     ["10.100.%d.4/32" % i]).add_vpp_config())
-            routes_1.append(VppIpRoute(self, "10.100.%d.4" % i, 32,
-                            [VppRoutePath(self.pg2.remote_hosts[i].ip4,
-                                          wg1.sw_if_index)]).add_vpp_config())
-
-        self.assertEqual(len(self.vapi.wireguard_peers_dump()), NUM_PEERS*2)
+            peers_0.append(
+                VppWgPeer(
+                    self,
+                    wg0,
+                    self.pg1.remote_hosts[i].ip4,
+                    port + 1 + i,
+                    ["10.0.%d.4/32" % i],
+                ).add_vpp_config()
+            )
+            routes_0.append(
+                VppIpRoute(
+                    self,
+                    "10.0.%d.4" % i,
+                    32,
+                    [VppRoutePath(self.pg1.remote_hosts[i].ip4, wg0.sw_if_index)],
+                ).add_vpp_config()
+            )
+
+            peers_1.append(
+                VppWgPeer(
+                    self,
+                    wg1,
+                    self.pg2.remote_hosts[i].ip4,
+                    port + 100 + i,
+                    ["10.100.%d.4/32" % i],
+                ).add_vpp_config()
+            )
+            routes_1.append(
+                VppIpRoute(
+                    self,
+                    "10.100.%d.4" % i,
+                    32,
+                    [VppRoutePath(self.pg2.remote_hosts[i].ip4, wg1.sw_if_index)],
+                ).add_vpp_config()
+            )
+
+        self.assertEqual(len(self.vapi.wireguard_peers_dump()), NUM_PEERS * 2)
 
         # Want events from the first perr of wg0
         # and from all wg1 peers
 
         # Want events from the first perr of wg0
         # and from all wg1 peers
@@ -1271,16 +1409,14 @@ class TestWg(VppTestCase):
             p = peers_0[i].mk_handshake(self.pg1)
             rx = self.send_and_expect(self.pg1, [p], self.pg1)
             peers_0[i].consume_response(rx[0])
             p = peers_0[i].mk_handshake(self.pg1)
             rx = self.send_and_expect(self.pg1, [p], self.pg1)
             peers_0[i].consume_response(rx[0])
-            if (i == 0):
+            if i == 0:
                 peers_0[0].wait_event(ESTABLISHED_FLAG)
 
             p = peers_1[i].mk_handshake(self.pg2)
             rx = self.send_and_expect(self.pg2, [p], self.pg2)
             peers_1[i].consume_response(rx[0])
 
                 peers_0[0].wait_event(ESTABLISHED_FLAG)
 
             p = peers_1[i].mk_handshake(self.pg2)
             rx = self.send_and_expect(self.pg2, [p], self.pg2)
             peers_1[i].consume_response(rx[0])
 
-        wg1.wait_events(
-            ESTABLISHED_FLAG,
-            [peers_1[0].index, peers_1[1].index])
+        wg1.wait_events(ESTABLISHED_FLAG, [peers_1[0].index, peers_1[1].index])
 
         # remove routes
         for r in routes_0:
 
         # remove routes
         for r in routes_0:
@@ -1292,7 +1428,7 @@ class TestWg(VppTestCase):
         for i in range(NUM_PEERS):
             self.assertTrue(peers_0[i].query_vpp_config())
             peers_0[i].remove_vpp_config()
         for i in range(NUM_PEERS):
             self.assertTrue(peers_0[i].query_vpp_config())
             peers_0[i].remove_vpp_config()
-            if (i == 0):
+            if i == 0:
                 peers_0[i].wait_event(0)
                 peers_0[i].wait_event(DEAD_FLAG)
         for p in peers_1:
                 peers_0[i].wait_event(0)
                 peers_0[i].wait_event(DEAD_FLAG)
         for p in peers_1:
@@ -1306,32 +1442,28 @@ class TestWg(VppTestCase):
 
 
 class WireguardHandoffTests(TestWg):
 
 
 class WireguardHandoffTests(TestWg):
-    """ Wireguard Tests in multi worker setup """
+    """Wireguard Tests in multi worker setup"""
+
     vpp_worker_count = 2
 
     def test_wg_peer_init(self):
     vpp_worker_count = 2
 
     def test_wg_peer_init(self):
-        """ Handoff """
+        """Handoff"""
 
         port = 12383
 
         # Create interfaces
 
         port = 12383
 
         # Create interfaces
-        wg0 = VppWgInterface(self,
-                             self.pg1.local_ip4,
-                             port).add_vpp_config()
+        wg0 = VppWgInterface(self, self.pg1.local_ip4, port).add_vpp_config()
         wg0.admin_up()
         wg0.config_ip4()
 
         wg0.admin_up()
         wg0.config_ip4()
 
-        peer_1 = VppWgPeer(self,
-                           wg0,
-                           self.pg1.remote_ip4,
-                           port+1,
-                           ["10.11.2.0/24",
-                            "10.11.3.0/24"]).add_vpp_config()
+        peer_1 = VppWgPeer(
+            self, wg0, self.pg1.remote_ip4, port + 1, ["10.11.2.0/24", "10.11.3.0/24"]
+        ).add_vpp_config()
         self.assertEqual(len(self.vapi.wireguard_peers_dump()), 1)
 
         self.assertEqual(len(self.vapi.wireguard_peers_dump()), 1)
 
-        r1 = VppIpRoute(self, "10.11.3.0", 24,
-                        [VppRoutePath("10.11.3.1",
-                                      wg0.sw_if_index)]).add_vpp_config()
+        r1 = VppIpRoute(
+            self, "10.11.3.0", 24, [VppRoutePath("10.11.3.1", wg0.sw_if_index)]
+        ).add_vpp_config()
 
         # send a valid handsake init for which we expect a response
         p = peer_1.mk_handshake(self.pg1)
 
         # send a valid handsake init for which we expect a response
         p = peer_1.mk_handshake(self.pg1)
@@ -1342,17 +1474,19 @@ class WireguardHandoffTests(TestWg):
 
         # send a data packet from the peer through the tunnel
         # this completes the handshake and pins the peer to worker 0
 
         # send a data packet from the peer through the tunnel
         # this completes the handshake and pins the peer to worker 0
-        p = (IP(src="10.11.3.1", dst=self.pg0.remote_ip4, ttl=20) /
-             UDP(sport=222, dport=223) /
-             Raw())
+        p = (
+            IP(src="10.11.3.1", dst=self.pg0.remote_ip4, ttl=20)
+            / UDP(sport=222, dport=223)
+            / Raw()
+        )
         d = peer_1.encrypt_transport(p)
         d = peer_1.encrypt_transport(p)
-        p = (peer_1.mk_tunnel_header(self.pg1) /
-             (Wireguard(message_type=4, reserved_zero=0) /
-              WireguardTransport(receiver_index=peer_1.sender,
-                                 counter=0,
-                                 encrypted_encapsulated_packet=d)))
-        rxs = self.send_and_expect(self.pg1, [p], self.pg0,
-                                   worker=0)
+        p = peer_1.mk_tunnel_header(self.pg1) / (
+            Wireguard(message_type=4, reserved_zero=0)
+            / WireguardTransport(
+                receiver_index=peer_1.sender, counter=0, encrypted_encapsulated_packet=d
+            )
+        )
+        rxs = self.send_and_expect(self.pg1, [p], self.pg0, worker=0)
 
         for rx in rxs:
             self.assertEqual(rx[IP].dst, self.pg0.remote_ip4)
 
         for rx in rxs:
             self.assertEqual(rx[IP].dst, self.pg0.remote_ip4)
@@ -1360,23 +1494,34 @@ class WireguardHandoffTests(TestWg):
 
         # send a packets that are routed into the tunnel
         # and pins the peer tp worker 1
 
         # send a packets that are routed into the tunnel
         # and pins the peer tp worker 1
-        pe = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
-              IP(src=self.pg0.remote_ip4, dst="10.11.3.2") /
-              UDP(sport=555, dport=556) /
-              Raw(b'\x00' * 80))
+        pe = (
+            Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac)
+            / IP(src=self.pg0.remote_ip4, dst="10.11.3.2")
+            / UDP(sport=555, dport=556)
+            / Raw(b"\x00" * 80)
+        )
         rxs = self.send_and_expect(self.pg0, pe * 255, self.pg1, worker=1)
         peer_1.validate_encapped(rxs, pe)
 
         # send packets into the tunnel, from the other worker
         rxs = self.send_and_expect(self.pg0, pe * 255, self.pg1, worker=1)
         peer_1.validate_encapped(rxs, pe)
 
         # send packets into the tunnel, from the other worker
-        p = [(peer_1.mk_tunnel_header(self.pg1) /
-              Wireguard(message_type=4, reserved_zero=0) /
-              WireguardTransport(
+        p = [
+            (
+                peer_1.mk_tunnel_header(self.pg1)
+                / Wireguard(message_type=4, reserved_zero=0)
+                / WireguardTransport(
                     receiver_index=peer_1.sender,
                     receiver_index=peer_1.sender,
-                    counter=ii+1,
+                    counter=ii + 1,
                     encrypted_encapsulated_packet=peer_1.encrypt_transport(
                     encrypted_encapsulated_packet=peer_1.encrypt_transport(
-                        (IP(src="10.11.3.1", dst=self.pg0.remote_ip4, ttl=20) /
-                         UDP(sport=222, dport=223) /
-                         Raw())))) for ii in range(255)]
+                        (
+                            IP(src="10.11.3.1", dst=self.pg0.remote_ip4, ttl=20)
+                            / UDP(sport=222, dport=223)
+                            / Raw()
+                        )
+                    ),
+                )
+            )
+            for ii in range(255)
+        ]
 
         rxs = self.send_and_expect(self.pg1, p, self.pg0, worker=1)
 
 
         rxs = self.send_and_expect(self.pg1, p, self.pg0, worker=1)
 
@@ -1396,4 +1541,4 @@ class WireguardHandoffTests(TestWg):
 
     @unittest.skip("test disabled")
     def test_wg_multi_interface(self):
 
     @unittest.skip("test disabled")
     def test_wg_multi_interface(self):
-        """ Multi-tunnel on the same port """
+        """Multi-tunnel on the same port"""
index 2c24571..249bd86 100644 (file)
@@ -11,8 +11,12 @@ from collections import UserDict
 import scapy.compat
 from scapy.layers.l2 import Ether
 from scapy.layers.inet import IP
 import scapy.compat
 from scapy.layers.l2 import Ether
 from scapy.layers.inet import IP
-from scapy.layers.inet6 import IPv6, IPv6ExtHdrFragment, IPv6ExtHdrRouting,\
-    IPv6ExtHdrHopByHop
+from scapy.layers.inet6 import (
+    IPv6,
+    IPv6ExtHdrFragment,
+    IPv6ExtHdrRouting,
+    IPv6ExtHdrHopByHop,
+)
 from scapy.packet import Raw
 from scapy.utils import hexdump
 from scapy.utils6 import in6_mactoifaceid
 from scapy.packet import Raw
 from scapy.utils import hexdump
 from scapy.utils6 import in6_mactoifaceid
@@ -21,7 +25,7 @@ from io import BytesIO
 from vpp_papi import mac_pton
 
 # Set up an empty logger for the testcase that can be overridden as necessary
 from vpp_papi import mac_pton
 
 # Set up an empty logger for the testcase that can be overridden as necessary
-null_logger = logging.getLogger('VppTestCase.util')
+null_logger = logging.getLogger("VppTestCase.util")
 null_logger.addHandler(logging.NullHandler())
 
 
 null_logger.addHandler(logging.NullHandler())
 
 
@@ -30,14 +34,16 @@ def pr(packet):
 
 
 def ppp(headline, packet):
 
 
 def ppp(headline, packet):
-    """ Return string containing headline and output of scapy packet.show() """
-    return '%s\n%s\n\n%s\n' % (headline,
-                               hexdump(packet, dump=True),
-                               packet.show(dump=True))
+    """Return string containing headline and output of scapy packet.show()"""
+    return "%s\n%s\n\n%s\n" % (
+        headline,
+        hexdump(packet, dump=True),
+        packet.show(dump=True),
+    )
 
 
 def ppc(headline, capture, limit=10):
 
 
 def ppc(headline, capture, limit=10):
-    """ Return string containing ppp() printout for a capture.
+    """Return string containing ppp() printout for a capture.
 
     :param headline: printed as first line of output
     :param capture: packets to print
 
     :param headline: printed as first line of output
     :param capture: packets to print
@@ -48,14 +54,17 @@ def ppc(headline, capture, limit=10):
     tail = ""
     if limit < len(capture):
         tail = "\nPrint limit reached, %s out of %s packets printed" % (
     tail = ""
     if limit < len(capture):
         tail = "\nPrint limit reached, %s out of %s packets printed" % (
-            limit, len(capture))
-    body = "".join([ppp("Packet #%s:" % count, p)
-                    for count, p in zip(range(0, limit), capture)])
+            limit,
+            len(capture),
+        )
+    body = "".join(
+        [ppp("Packet #%s:" % count, p) for count, p in zip(range(0, limit), capture)]
+    )
     return "%s\n%s%s" % (headline, body, tail)
 
 
 def ip4_range(ip4, s, e):
     return "%s\n%s%s" % (headline, body, tail)
 
 
 def ip4_range(ip4, s, e):
-    tmp = ip4.rsplit('.', 1)[0]
+    tmp = ip4.rsplit(".", 1)[0]
     return ("%s.%d" % (tmp, i) for i in range(s, e))
 
 
     return ("%s.%d" % (tmp, i) for i in range(s, e))
 
 
@@ -65,14 +74,18 @@ def mcast_ip_to_mac(ip):
         raise ValueError("Must be multicast address.")
     ip_as_int = int(ip)
     if ip.version == 4:
         raise ValueError("Must be multicast address.")
     ip_as_int = int(ip)
     if ip.version == 4:
-        mcast_mac = "01:00:5e:%02x:%02x:%02x" % ((ip_as_int >> 16) & 0x7f,
-                                                 (ip_as_int >> 8) & 0xff,
-                                                 ip_as_int & 0xff)
+        mcast_mac = "01:00:5e:%02x:%02x:%02x" % (
+            (ip_as_int >> 16) & 0x7F,
+            (ip_as_int >> 8) & 0xFF,
+            ip_as_int & 0xFF,
+        )
     else:
     else:
-        mcast_mac = "33:33:%02x:%02x:%02x:%02x" % ((ip_as_int >> 24) & 0xff,
-                                                   (ip_as_int >> 16) & 0xff,
-                                                   (ip_as_int >> 8) & 0xff,
-                                                   ip_as_int & 0xff)
+        mcast_mac = "33:33:%02x:%02x:%02x:%02x" % (
+            (ip_as_int >> 24) & 0xFF,
+            (ip_as_int >> 16) & 0xFF,
+            (ip_as_int >> 8) & 0xFF,
+            ip_as_int & 0xFF,
+        )
     return mcast_mac
 
 
     return mcast_mac
 
 
@@ -84,8 +97,7 @@ def mk_ll_addr(mac):
 
 
 def ip6_normalize(ip6):
 
 
 def ip6_normalize(ip6):
-    return socket.inet_ntop(socket.AF_INET6,
-                            socket.inet_pton(socket.AF_INET6, ip6))
+    return socket.inet_ntop(socket.AF_INET6, socket.inet_pton(socket.AF_INET6, ip6))
 
 
 def get_core_path(tempdir):
 
 
 def get_core_path(tempdir):
@@ -107,13 +119,14 @@ def check_core_path(logger, core_path):
     if corefmt.startswith("|"):
         logger.error(
             "WARNING: redirecting the core dump through a"
     if corefmt.startswith("|"):
         logger.error(
             "WARNING: redirecting the core dump through a"
-            " filter may result in truncated dumps.")
+            " filter may result in truncated dumps."
+        )
         logger.error(
             "   You may want to check the filter settings"
             " or uninstall it and edit the"
         logger.error(
             "   You may want to check the filter settings"
             " or uninstall it and edit the"
-            " /proc/sys/kernel/core_pattern accordingly.")
-        logger.error(
-            "   current core pattern is: %s" % corefmt)
+            " /proc/sys/kernel/core_pattern accordingly."
+        )
+        logger.error("   current core pattern is: %s" % corefmt)
 
 
 class NumericConstant:
 
 
 class NumericConstant:
@@ -136,55 +149,57 @@ class NumericConstant:
 
 
 class Host:
 
 
 class Host:
-    """ Generic test host "connected" to VPPs interface. """
+    """Generic test host "connected" to VPPs interface."""
 
     @property
     def mac(self):
 
     @property
     def mac(self):
-        """ MAC address """
+        """MAC address"""
         return self._mac
 
     @property
     def bin_mac(self):
         return self._mac
 
     @property
     def bin_mac(self):
-        """ MAC address """
+        """MAC address"""
         return mac_pton(self._mac)
 
     @property
     def ip4(self):
         return mac_pton(self._mac)
 
     @property
     def ip4(self):
-        """ IPv4 address - string """
+        """IPv4 address - string"""
         return self._ip4
 
     @property
     def ip4n(self):
         return self._ip4
 
     @property
     def ip4n(self):
-        """ IPv4 address of remote host - raw, suitable as API parameter."""
+        """IPv4 address of remote host - raw, suitable as API parameter."""
         return socket.inet_pton(socket.AF_INET, self._ip4)
 
     @property
     def ip6(self):
         return socket.inet_pton(socket.AF_INET, self._ip4)
 
     @property
     def ip6(self):
-        """ IPv6 address - string """
+        """IPv6 address - string"""
         return self._ip6
 
     @property
     def ip6n(self):
         return self._ip6
 
     @property
     def ip6n(self):
-        """ IPv6 address of remote host - raw, suitable as API parameter."""
+        """IPv6 address of remote host - raw, suitable as API parameter."""
         return socket.inet_pton(socket.AF_INET6, self._ip6)
 
     @property
     def ip6_ll(self):
         return socket.inet_pton(socket.AF_INET6, self._ip6)
 
     @property
     def ip6_ll(self):
-        """ IPv6 link-local address - string """
+        """IPv6 link-local address - string"""
         return self._ip6_ll
 
     @property
     def ip6n_ll(self):
         return self._ip6_ll
 
     @property
     def ip6n_ll(self):
-        """ IPv6 link-local address of remote host -
+        """IPv6 link-local address of remote host -
         raw, suitable as API parameter."""
         return socket.inet_pton(socket.AF_INET6, self._ip6_ll)
 
     def __eq__(self, other):
         if isinstance(other, Host):
         raw, suitable as API parameter."""
         return socket.inet_pton(socket.AF_INET6, self._ip6_ll)
 
     def __eq__(self, other):
         if isinstance(other, Host):
-            return (self.mac == other.mac and
-                    self.ip4 == other.ip4 and
-                    self.ip6 == other.ip6 and
-                    self.ip6_ll == other.ip6_ll)
+            return (
+                self.mac == other.mac
+                and self.ip4 == other.ip4
+                and self.ip6 == other.ip6
+                and self.ip6_ll == other.ip6_ll
+            )
         else:
             return False
 
         else:
             return False
 
@@ -192,10 +207,12 @@ class Host:
         return not self.__eq__(other)
 
     def __repr__(self):
         return not self.__eq__(other)
 
     def __repr__(self):
-        return "Host { mac:%s ip4:%s ip6:%s ip6_ll:%s }" % (self.mac,
-                                                            self.ip4,
-                                                            self.ip6,
-                                                            self.ip6_ll)
+        return "Host { mac:%s ip4:%s ip6:%s ip6_ll:%s }" % (
+            self.mac,
+            self.ip4,
+            self.ip6,
+            self.ip6_ll,
+        )
 
     def __hash__(self):
         return hash(self.__repr__())
 
     def __hash__(self):
         return hash(self.__repr__())
@@ -207,8 +224,8 @@ class Host:
         self._ip6_ll = ip6_ll
 
 
         self._ip6_ll = ip6_ll
 
 
-class L4_Conn():
-    """ L4 'connection' tied to two VPP interfaces """
+class L4_Conn:
+    """L4 'connection' tied to two VPP interfaces"""
 
     def __init__(self, testcase, if1, if2, af, l4proto, port1, port2):
         self.testcase = testcase
 
     def __init__(self, testcase, if1, if2, af, l4proto, port1, port2):
         self.testcase = testcase
@@ -228,22 +245,25 @@ class L4_Conn():
         s1 = 1 - side
         src_if = self.ifs[s0]
         dst_if = self.ifs[s1]
         s1 = 1 - side
         src_if = self.ifs[s0]
         dst_if = self.ifs[s1]
-        layer_3 = [IP(src=src_if.remote_ip4, dst=dst_if.remote_ip4),
-                   IPv6(src=src_if.remote_ip6, dst=dst_if.remote_ip6)]
-        merged_l4args = {'sport': self.ports[s0], 'dport': self.ports[s1]}
+        layer_3 = [
+            IP(src=src_if.remote_ip4, dst=dst_if.remote_ip4),
+            IPv6(src=src_if.remote_ip6, dst=dst_if.remote_ip6),
+        ]
+        merged_l4args = {"sport": self.ports[s0], "dport": self.ports[s1]}
         merged_l4args.update(l4args)
         merged_l4args.update(l4args)
-        p = (Ether(dst=src_if.local_mac, src=src_if.remote_mac) /
-             layer_3[is_ip6] /
-             self.l4proto(**merged_l4args) /
-             Raw(payload))
+        p = (
+            Ether(dst=src_if.local_mac, src=src_if.remote_mac)
+            / layer_3[is_ip6]
+            / self.l4proto(**merged_l4args)
+            / Raw(payload)
+        )
         return p
 
     def send(self, side, flags=None, payload=""):
         l4args = {}
         if flags is not None:
         return p
 
     def send(self, side, flags=None, payload=""):
         l4args = {}
         if flags is not None:
-            l4args['flags'] = flags
-        self.ifs[side].add_stream(self.pkt(side,
-                                           l4args=l4args, payload=payload))
+            l4args["flags"] = flags
+        self.ifs[side].add_stream(self.pkt(side, l4args=l4args, payload=payload))
         self.ifs[1 - side].enable_capture()
         self.testcase.pg_start()
 
         self.ifs[1 - side].enable_capture()
         self.testcase.pg_start()
 
@@ -285,8 +305,8 @@ def fragment_rfc791(packet, fragsize, logger=null_logger):
     pre_ip_len = len(packet) - len(packet[IP])
     ip_header_len = packet[IP].ihl * 4
     hex_packet = scapy.compat.raw(packet)
     pre_ip_len = len(packet) - len(packet[IP])
     ip_header_len = packet[IP].ihl * 4
     hex_packet = scapy.compat.raw(packet)
-    hex_headers = hex_packet[:(pre_ip_len + ip_header_len)]
-    hex_payload = hex_packet[(pre_ip_len + ip_header_len):]
+    hex_headers = hex_packet[: (pre_ip_len + ip_header_len)]
+    hex_payload = hex_packet[(pre_ip_len + ip_header_len) :]
 
     pkts = []
     ihl = packet[IP].ihl
 
     pkts = []
     ihl = packet[IP].ihl
@@ -294,14 +314,14 @@ def fragment_rfc791(packet, fragsize, logger=null_logger):
     nfb = int((fragsize - pre_ip_len - ihl * 4) / 8)
     fo = packet[IP].frag
 
     nfb = int((fragsize - pre_ip_len - ihl * 4) / 8)
     fo = packet[IP].frag
 
-    p = packet.__class__(hex_headers + hex_payload[:nfb * 8])
+    p = packet.__class__(hex_headers + hex_payload[: nfb * 8])
     p[IP].flags = "MF"
     p[IP].frag = fo
     p[IP].len = ihl * 4 + nfb * 8
     del p[IP].chksum
     pkts.append(p)
 
     p[IP].flags = "MF"
     p[IP].frag = fo
     p[IP].len = ihl * 4 + nfb * 8
     del p[IP].chksum
     pkts.append(p)
 
-    p = packet.__class__(hex_headers + hex_payload[nfb * 8:])
+    p = packet.__class__(hex_headers + hex_payload[nfb * 8 :])
     p[IP].len = otl - nfb * 8
     p[IP].frag = fo + nfb
     del p[IP].chksum
     p[IP].len = otl - nfb * 8
     p[IP].frag = fo + nfb
     del p[IP].chksum
@@ -345,15 +365,19 @@ def fragment_rfc8200(packet, identification, fragsize, logger=null_logger):
             routing_hdr = counter
         elif l.__class__ is IPv6ExtHdrHopByHop:
             hop_by_hop_hdr = counter
             routing_hdr = counter
         elif l.__class__ is IPv6ExtHdrHopByHop:
             hop_by_hop_hdr = counter
-        elif seen_ipv6 and not upper_layer and \
-                not l.__class__.__name__.startswith('IPv6ExtHdr'):
+        elif (
+            seen_ipv6
+            and not upper_layer
+            and not l.__class__.__name__.startswith("IPv6ExtHdr")
+        ):
             upper_layer = counter
         counter = counter + 1
         l = packet.getlayer(counter)
 
     logger.debug(
             upper_layer = counter
         counter = counter + 1
         l = packet.getlayer(counter)
 
     logger.debug(
-        "Layers seen: IPv6(#%s), Routing(#%s), HopByHop(#%s), upper(#%s)" %
-        (ipv6_nr, routing_hdr, hop_by_hop_hdr, upper_layer))
+        "Layers seen: IPv6(#%s), Routing(#%s), HopByHop(#%s), upper(#%s)"
+        % (ipv6_nr, routing_hdr, hop_by_hop_hdr, upper_layer)
+    )
 
     if upper_layer is None:
         raise Exception("Upper layer header not found in IPv6 packet")
 
     if upper_layer is None:
         raise Exception("Upper layer header not found in IPv6 packet")
@@ -379,18 +403,27 @@ def fragment_rfc8200(packet, identification, fragsize, logger=null_logger):
     logger.debug(ppp("Fragment header:", fragment_ext_hdr))
 
     len_ext_and_upper_layer_payload = len(ext_and_upper_layer.payload)
     logger.debug(ppp("Fragment header:", fragment_ext_hdr))
 
     len_ext_and_upper_layer_payload = len(ext_and_upper_layer.payload)
-    if not len_ext_and_upper_layer_payload and \
-       hasattr(ext_and_upper_layer, "data"):
+    if not len_ext_and_upper_layer_payload and hasattr(ext_and_upper_layer, "data"):
         len_ext_and_upper_layer_payload = len(ext_and_upper_layer.data)
 
         len_ext_and_upper_layer_payload = len(ext_and_upper_layer.data)
 
-    if len(per_fragment_headers) + len(fragment_ext_hdr) +\
-            len(ext_and_upper_layer) - len_ext_and_upper_layer_payload\
-            > fragsize:
-        raise Exception("Cannot fragment this packet - MTU too small "
-                        "(%s, %s, %s, %s, %s)" % (
-                            len(per_fragment_headers), len(fragment_ext_hdr),
-                            len(ext_and_upper_layer),
-                            len_ext_and_upper_layer_payload, fragsize))
+    if (
+        len(per_fragment_headers)
+        + len(fragment_ext_hdr)
+        + len(ext_and_upper_layer)
+        - len_ext_and_upper_layer_payload
+        > fragsize
+    ):
+        raise Exception(
+            "Cannot fragment this packet - MTU too small "
+            "(%s, %s, %s, %s, %s)"
+            % (
+                len(per_fragment_headers),
+                len(fragment_ext_hdr),
+                len(ext_and_upper_layer),
+                len_ext_and_upper_layer_payload,
+                fragsize,
+            )
+        )
 
     orig_nh = packet[IPv6].nh
     p = per_fragment_headers
 
     orig_nh = packet[IPv6].nh
     p = per_fragment_headers
@@ -399,7 +432,7 @@ def fragment_rfc8200(packet, identification, fragsize, logger=null_logger):
     p = p / fragment_ext_hdr
     del p[IPv6ExtHdrFragment].nh
     first_payload_len_nfb = int((fragsize - len(p)) / 8)
     p = p / fragment_ext_hdr
     del p[IPv6ExtHdrFragment].nh
     first_payload_len_nfb = int((fragsize - len(p)) / 8)
-    p = p / Raw(hex_payload[:first_payload_len_nfb * 8])
+    p = p / Raw(hex_payload[: first_payload_len_nfb * 8])
     del p[IPv6].plen
     p[IPv6ExtHdrFragment].nh = orig_nh
     p[IPv6ExtHdrFragment].id = identification
     del p[IPv6].plen
     p[IPv6ExtHdrFragment].nh = orig_nh
     p[IPv6ExtHdrFragment].id = identification
@@ -417,7 +450,7 @@ def fragment_rfc8200(packet, identification, fragsize, logger=null_logger):
         p = p / fragment_ext_hdr
         del p[IPv6ExtHdrFragment].nh
         l_nfb = int((fragsize - len(p)) / 8)
         p = p / fragment_ext_hdr
         del p[IPv6ExtHdrFragment].nh
         l_nfb = int((fragsize - len(p)) / 8)
-        p = p / Raw(hex_payload[offset:offset + l_nfb * 8])
+        p = p / Raw(hex_payload[offset : offset + l_nfb * 8])
         p[IPv6ExtHdrFragment].nh = orig_nh
         p[IPv6ExtHdrFragment].id = identification
         p[IPv6ExtHdrFragment].offset = int(offset / 8)
         p[IPv6ExtHdrFragment].nh = orig_nh
         p[IPv6ExtHdrFragment].id = identification
         p[IPv6ExtHdrFragment].offset = int(offset / 8)
@@ -437,11 +470,11 @@ def reassemble4_core(listoffragments, return_ip):
     first = listoffragments[0]
     buffer.seek(20)
     for pkt in listoffragments:
     first = listoffragments[0]
     buffer.seek(20)
     for pkt in listoffragments:
-        buffer.seek(pkt[IP].frag*8)
+        buffer.seek(pkt[IP].frag * 8)
         buffer.write(bytes(pkt[IP].payload))
     first.len = len(buffer.getvalue()) + 20
     first.flags = 0
         buffer.write(bytes(pkt[IP].payload))
     first.len = len(buffer.getvalue()) + 20
     first.flags = 0
-    del(first.chksum)
+    del first.chksum
     if return_ip:
         header = bytes(first[IP])[:20]
         return first[IP].__class__(header + buffer.getvalue())
     if return_ip:
         header = bytes(first[IP])[:20]
         return first[IP].__class__(header + buffer.getvalue())
@@ -472,8 +505,7 @@ def recursive_dict_merge(dict_base, dict_update):
     for key in dict_update:
         if key in dict_base:
             if type(dict_update[key]) is dict:
     for key in dict_update:
         if key in dict_base:
             if type(dict_update[key]) is dict:
-                dict_base[key] = recursive_dict_merge(dict_base[key],
-                                                      dict_update[key])
+                dict_base[key] = recursive_dict_merge(dict_base[key], dict_update[key])
             else:
                 dict_base[key] = dict_update[key]
         else:
             else:
                 dict_base[key] = dict_update[key]
         else:
index 2d2f7ca..958d697 100644 (file)
@@ -7,7 +7,6 @@ from vpp_papi_provider import UnexpectedApiReturnValueError
 
 
 class VppAclPlugin(VppObject):
 
 
 class VppAclPlugin(VppObject):
-
     def __init__(self, test, enable_intf_counters=False):
         self._test = test
         self.enable_intf_counters = enable_intf_counters
     def __init__(self, test, enable_intf_counters=False):
         self._test = test
         self.enable_intf_counters = enable_intf_counters
@@ -30,11 +29,11 @@ class VppAclPlugin(VppObject):
         pass
 
     def object_id(self):
         pass
 
     def object_id(self):
-        return ("acl-plugin-%d" % (self._sw_if_index))
+        return "acl-plugin-%d" % (self._sw_if_index)
 
 
 
 
-class AclRule():
-    """ ACL Rule """
+class AclRule:
+    """ACL Rule"""
 
     # port ranges
     PORTS_ALL = -1
 
     # port ranges
     PORTS_ALL = -1
@@ -70,10 +69,18 @@ class AclRule():
     icmp6_code_from_2 = 8
     icmp6_code_to_2 = 42
 
     icmp6_code_from_2 = 8
     icmp6_code_to_2 = 42
 
-    def __init__(self, is_permit, src_prefix=IPv4Network('0.0.0.0/0'),
-                 dst_prefix=IPv4Network('0.0.0.0/0'),
-                 proto=0, ports=PORTS_ALL, sport_from=None, sport_to=None,
-                 dport_from=None, dport_to=None):
+    def __init__(
+        self,
+        is_permit,
+        src_prefix=IPv4Network("0.0.0.0/0"),
+        dst_prefix=IPv4Network("0.0.0.0/0"),
+        proto=0,
+        ports=PORTS_ALL,
+        sport_from=None,
+        sport_to=None,
+        dport_from=None,
+        dport_to=None,
+    ):
         self.is_permit = is_permit
         self.src_prefix = src_prefix
         self.dst_prefix = dst_prefix
         self.is_permit = is_permit
         self.src_prefix = src_prefix
         self.dst_prefix = dst_prefix
@@ -92,9 +99,17 @@ class AclRule():
             self.dport_to = dport_to
 
     def __copy__(self):
             self.dport_to = dport_to
 
     def __copy__(self):
-        new_rule = AclRule(self.is_permit, self.src_prefix, self.dst_prefix,
-                           self._proto, self._ports, self.sport_from,
-                           self.sport_to, self.dport_from, self.dport_to)
+        new_rule = AclRule(
+            self.is_permit,
+            self.src_prefix,
+            self.dst_prefix,
+            self._proto,
+            self._ports,
+            self.sport_from,
+            self.sport_to,
+            self.dport_from,
+            self.dport_to,
+        )
         return new_rule
 
     def update_ports(self):
         return new_rule
 
     def update_ports(self):
@@ -172,17 +187,20 @@ class AclRule():
         self.update_ports()
 
     def encode(self):
         self.update_ports()
 
     def encode(self):
-        return {'is_permit': self.is_permit, 'proto': self.proto,
-                'srcport_or_icmptype_first': self.sport_from,
-                'srcport_or_icmptype_last': self.sport_to,
-                'src_prefix': self.src_prefix,
-                'dstport_or_icmpcode_first': self.dport_from,
-                'dstport_or_icmpcode_last': self.dport_to,
-                'dst_prefix': self.dst_prefix}
+        return {
+            "is_permit": self.is_permit,
+            "proto": self.proto,
+            "srcport_or_icmptype_first": self.sport_from,
+            "srcport_or_icmptype_last": self.sport_to,
+            "src_prefix": self.src_prefix,
+            "dstport_or_icmpcode_first": self.dport_from,
+            "dstport_or_icmpcode_last": self.dport_to,
+            "dst_prefix": self.dst_prefix,
+        }
 
 
 class VppAcl(VppObject):
 
 
 class VppAcl(VppObject):
-    """ VPP ACL """
+    """VPP ACL"""
 
     def __init__(self, test, rules, acl_index=INVALID_INDEX, tag=None):
         self._test = test
 
     def __init__(self, test, rules, acl_index=INVALID_INDEX, tag=None):
         self._test = test
@@ -211,8 +229,11 @@ class VppAcl(VppObject):
     def add_vpp_config(self, expect_error=False):
         try:
             reply = self._test.vapi.acl_add_replace(
     def add_vpp_config(self, expect_error=False):
         try:
             reply = self._test.vapi.acl_add_replace(
-                acl_index=self._acl_index, tag=self.tag, count=self.count,
-                r=self.encode_rules())
+                acl_index=self._acl_index,
+                tag=self.tag,
+                count=self.count,
+                r=self.encode_rules(),
+            )
             self._acl_index = reply.acl_index
             self._test.registry.register(self, self._test.logger)
             if expect_error:
             self._acl_index = reply.acl_index
             self._test.registry.register(self, self._test.logger)
             if expect_error:
@@ -247,11 +268,11 @@ class VppAcl(VppObject):
         return False
 
     def object_id(self):
         return False
 
     def object_id(self):
-        return ("acl-%s-%d" % (self.tag, self._acl_index))
+        return "acl-%s-%d" % (self.tag, self._acl_index)
 
 
 class VppEtypeWhitelist(VppObject):
 
 
 class VppEtypeWhitelist(VppObject):
-    """ VPP Etype Whitelist """
+    """VPP Etype Whitelist"""
 
     def __init__(self, test, sw_if_index, whitelist, n_input=0):
         self._test = test
 
     def __init__(self, test, sw_if_index, whitelist, n_input=0):
         self._test = test
@@ -269,26 +290,31 @@ class VppEtypeWhitelist(VppObject):
 
     def add_vpp_config(self):
         self._test.vapi.acl_interface_set_etype_whitelist(
 
     def add_vpp_config(self):
         self._test.vapi.acl_interface_set_etype_whitelist(
-            sw_if_index=self._sw_if_index, count=self.count,
-            n_input=self.n_input, whitelist=self.whitelist)
+            sw_if_index=self._sw_if_index,
+            count=self.count,
+            n_input=self.n_input,
+            whitelist=self.whitelist,
+        )
         self._test.registry.register(self, self._test.logger)
         return self
 
     def remove_vpp_config(self):
         self._test.vapi.acl_interface_set_etype_whitelist(
         self._test.registry.register(self, self._test.logger)
         return self
 
     def remove_vpp_config(self):
         self._test.vapi.acl_interface_set_etype_whitelist(
-            sw_if_index=self._sw_if_index, count=0, n_input=0, whitelist=[])
+            sw_if_index=self._sw_if_index, count=0, n_input=0, whitelist=[]
+        )
 
     def query_vpp_config(self):
         self._test.vapi.acl_interface_etype_whitelist_dump(
 
     def query_vpp_config(self):
         self._test.vapi.acl_interface_etype_whitelist_dump(
-            sw_if_index=self._sw_if_index)
+            sw_if_index=self._sw_if_index
+        )
         return False
 
     def object_id(self):
         return False
 
     def object_id(self):
-        return ("acl-etype_wl-%d" % (self._sw_if_index))
+        return "acl-etype_wl-%d" % (self._sw_if_index)
 
 
 class VppAclInterface(VppObject):
 
 
 class VppAclInterface(VppObject):
-    """ VPP ACL Interface """
+    """VPP ACL Interface"""
 
     def __init__(self, test, sw_if_index, acls, n_input=0):
         self._test = test
 
     def __init__(self, test, sw_if_index, acls, n_input=0):
         self._test = test
@@ -313,8 +339,11 @@ class VppAclInterface(VppObject):
     def add_vpp_config(self, expect_error=False):
         try:
             reply = self._test.vapi.acl_interface_set_acl_list(
     def add_vpp_config(self, expect_error=False):
         try:
             reply = self._test.vapi.acl_interface_set_acl_list(
-                sw_if_index=self._sw_if_index, n_input=self.n_input,
-                count=self.count, acls=self.encode_acls())
+                sw_if_index=self._sw_if_index,
+                n_input=self.n_input,
+                count=self.count,
+                acls=self.encode_acls(),
+            )
             self._test.registry.register(self, self._test.logger)
             if expect_error:
                 self._test.fail("Unexpected api reply")
             self._test.registry.register(self, self._test.logger)
             if expect_error:
                 self._test.fail("Unexpected api reply")
@@ -327,7 +356,8 @@ class VppAclInterface(VppObject):
     def remove_vpp_config(self, expect_error=False):
         try:
             reply = self._test.vapi.acl_interface_set_acl_list(
     def remove_vpp_config(self, expect_error=False):
         try:
             reply = self._test.vapi.acl_interface_set_acl_list(
-                sw_if_index=self._sw_if_index, n_input=0, count=0, acls=[])
+                sw_if_index=self._sw_if_index, n_input=0, count=0, acls=[]
+            )
             if expect_error:
                 self._test.fail("Unexpected api reply")
         except UnexpectedApiReturnValueError:
             if expect_error:
                 self._test.fail("Unexpected api reply")
         except UnexpectedApiReturnValueError:
@@ -335,35 +365,38 @@ class VppAclInterface(VppObject):
                 self._test.fail("Unexpected api reply")
 
     def query_vpp_config(self):
                 self._test.fail("Unexpected api reply")
 
     def query_vpp_config(self):
-        dump = self._test.vapi.acl_interface_list_dump(
-            sw_if_index=self._sw_if_index)
+        dump = self._test.vapi.acl_interface_list_dump(sw_if_index=self._sw_if_index)
         for acl_list in dump:
             if acl_list.count > 0:
                 return True
         return False
 
     def object_id(self):
         for acl_list in dump:
             if acl_list.count > 0:
                 return True
         return False
 
     def object_id(self):
-        return ("acl-if-list-%d" % (self._sw_if_index))
+        return "acl-if-list-%d" % (self._sw_if_index)
 
 
 
 
-class MacipRule():
-    """ Mac Ip rule """
+class MacipRule:
+    """Mac Ip rule"""
 
 
-    def __init__(self, is_permit, src_mac=0, src_mac_mask=0,
-                 src_prefix=IPv4Network('0.0.0.0/0')):
+    def __init__(
+        self, is_permit, src_mac=0, src_mac_mask=0, src_prefix=IPv4Network("0.0.0.0/0")
+    ):
         self.is_permit = is_permit
         self.src_mac = src_mac
         self.src_mac_mask = src_mac_mask
         self.src_prefix = src_prefix
 
     def encode(self):
         self.is_permit = is_permit
         self.src_mac = src_mac
         self.src_mac_mask = src_mac_mask
         self.src_prefix = src_prefix
 
     def encode(self):
-        return {'is_permit': self.is_permit, 'src_mac': self.src_mac,
-                'src_mac_mask': self.src_mac_mask,
-                'src_prefix': self.src_prefix}
+        return {
+            "is_permit": self.is_permit,
+            "src_mac": self.src_mac,
+            "src_mac_mask": self.src_mac_mask,
+            "src_prefix": self.src_prefix,
+        }
 
 
 class VppMacipAcl(VppObject):
 
 
 class VppMacipAcl(VppObject):
-    """ Vpp Mac Ip ACL """
+    """Vpp Mac Ip ACL"""
 
     def __init__(self, test, rules, acl_index=INVALID_INDEX, tag=None):
         self._test = test
 
     def __init__(self, test, rules, acl_index=INVALID_INDEX, tag=None):
         self._test = test
@@ -392,8 +425,11 @@ class VppMacipAcl(VppObject):
     def add_vpp_config(self, expect_error=False):
         try:
             reply = self._test.vapi.macip_acl_add_replace(
     def add_vpp_config(self, expect_error=False):
         try:
             reply = self._test.vapi.macip_acl_add_replace(
-                acl_index=self._acl_index, tag=self.tag, count=self.count,
-                r=self.encode_rules())
+                acl_index=self._acl_index,
+                tag=self.tag,
+                count=self.count,
+                r=self.encode_rules(),
+            )
             self._acl_index = reply.acl_index
             self._test.registry.register(self, self._test.logger)
             if expect_error:
             self._acl_index = reply.acl_index
             self._test.registry.register(self, self._test.logger)
             if expect_error:
@@ -428,11 +464,11 @@ class VppMacipAcl(VppObject):
         return False
 
     def object_id(self):
         return False
 
     def object_id(self):
-        return ("macip-acl-%s-%d" % (self.tag, self._acl_index))
+        return "macip-acl-%s-%d" % (self.tag, self._acl_index)
 
 
 class VppMacipAclInterface(VppObject):
 
 
 class VppMacipAclInterface(VppObject):
-    """ VPP Mac Ip ACL Interface """
+    """VPP Mac Ip ACL Interface"""
 
     def __init__(self, test, sw_if_index, acls):
         self._test = test
 
     def __init__(self, test, sw_if_index, acls):
         self._test = test
@@ -450,19 +486,20 @@ class VppMacipAclInterface(VppObject):
     def add_vpp_config(self):
         for acl in self.acls:
             self._test.vapi.macip_acl_interface_add_del(
     def add_vpp_config(self):
         for acl in self.acls:
             self._test.vapi.macip_acl_interface_add_del(
-                is_add=True, sw_if_index=self._sw_if_index,
-                acl_index=acl.acl_index)
+                is_add=True, sw_if_index=self._sw_if_index, acl_index=acl.acl_index
+            )
         self._test.registry.register(self, self._test.logger)
 
     def remove_vpp_config(self):
         for acl in self.acls:
             self._test.vapi.macip_acl_interface_add_del(
         self._test.registry.register(self, self._test.logger)
 
     def remove_vpp_config(self):
         for acl in self.acls:
             self._test.vapi.macip_acl_interface_add_del(
-                is_add=False, sw_if_index=self._sw_if_index,
-                acl_index=acl.acl_index)
+                is_add=False, sw_if_index=self._sw_if_index, acl_index=acl.acl_index
+            )
 
     def dump(self):
         return self._test.vapi.macip_acl_interface_list_dump(
 
     def dump(self):
         return self._test.vapi.macip_acl_interface_list_dump(
-            sw_if_index=self._sw_if_index)
+            sw_if_index=self._sw_if_index
+        )
 
     def query_vpp_config(self):
         dump = self.dump()
 
     def query_vpp_config(self):
         dump = self.dump()
@@ -473,4 +510,4 @@ class VppMacipAclInterface(VppObject):
         return False
 
     def object_id(self):
         return False
 
     def object_id(self):
-        return ("macip-acl-if-list-%d" % (self._sw_if_index))
+        return "macip-acl-if-list-%d" % (self._sw_if_index)
index 6e087a8..9fdaf1f 100644 (file)
@@ -18,7 +18,7 @@ class BIER_HDR_PAYLOAD:
     BIER_HDR_PROTO_OAM = 8
 
 
     BIER_HDR_PROTO_OAM = 8
 
 
-class VppBierTableID():
+class VppBierTableID:
     def __init__(self, sub_domain_id, set_id, hdr_len_id):
         self.set_id = set_id
         self.sub_domain_id = sub_domain_id
     def __init__(self, sub_domain_id, set_id, hdr_len_id):
         self.set_id = set_id
         self.sub_domain_id = sub_domain_id
@@ -28,9 +28,11 @@ class VppBierTableID():
 def find_bier_table(test, bti):
     tables = test.vapi.bier_table_dump()
     for t in tables:
 def find_bier_table(test, bti):
     tables = test.vapi.bier_table_dump()
     for t in tables:
-        if bti.set_id == t.bt_tbl_id.bt_set \
-           and bti.sub_domain_id == t.bt_tbl_id.bt_sub_domain \
-           and bti.hdr_len_id == t.bt_tbl_id.bt_hdr_len_id:
+        if (
+            bti.set_id == t.bt_tbl_id.bt_set
+            and bti.sub_domain_id == t.bt_tbl_id.bt_sub_domain
+            and bti.hdr_len_id == t.bt_tbl_id.bt_hdr_len_id
+        ):
             return True
     return False
 
             return True
     return False
 
@@ -38,10 +40,12 @@ def find_bier_table(test, bti):
 def find_bier_route(test, bti, bp):
     routes = test.vapi.bier_route_dump(bti)
     for r in routes:
 def find_bier_route(test, bti, bp):
     routes = test.vapi.bier_route_dump(bti)
     for r in routes:
-        if bti.set_id == r.br_route.br_tbl_id.bt_set \
-           and bti.sub_domain_id == r.br_route.br_tbl_id.bt_sub_domain \
-           and bti.hdr_len_id == r.br_route.br_tbl_id.bt_hdr_len_id \
-           and bp == r.br_route.br_bp:
+        if (
+            bti.set_id == r.br_route.br_tbl_id.bt_set
+            and bti.sub_domain_id == r.br_route.br_tbl_id.bt_sub_domain
+            and bti.hdr_len_id == r.br_route.br_tbl_id.bt_hdr_len_id
+            and bp == r.br_route.br_bp
+        ):
             return True
     return False
 
             return True
     return False
 
@@ -57,8 +61,7 @@ def find_bier_disp_table(test, bdti):
 def find_bier_disp_entry(test, bdti, bp):
     entries = test.vapi.bier_disp_entry_dump(bdti)
     for e in entries:
 def find_bier_disp_entry(test, bdti, bp):
     entries = test.vapi.bier_disp_entry_dump(bdti)
     for e in entries:
-        if bp == e.bde_bp \
-           and bdti == e.bde_tbl_id:
+        if bp == e.bde_bp and bdti == e.bde_tbl_id:
             return True
     return False
 
             return True
     return False
 
@@ -66,10 +69,12 @@ def find_bier_disp_entry(test, bdti, bp):
 def find_bier_imp(test, bti, bp):
     imps = test.vapi.bier_imp_dump()
     for i in imps:
 def find_bier_imp(test, bti, bp):
     imps = test.vapi.bier_imp_dump()
     for i in imps:
-        if bti.set_id == i.bi_tbl_id.bt_set \
-           and bti.sub_domain_id == i.bi_tbl_id.bt_sub_domain \
-           and bti.hdr_len_id == i.bi_tbl_id.bt_hdr_len_id \
-           and bp == i.bi_src:
+        if (
+            bti.set_id == i.bi_tbl_id.bt_set
+            and bti.sub_domain_id == i.bi_tbl_id.bt_sub_domain
+            and bti.hdr_len_id == i.bi_tbl_id.bt_hdr_len_id
+            and bp == i.bi_src
+        ):
             return True
     return False
 
             return True
     return False
 
@@ -85,22 +90,18 @@ class VppBierTable(VppObject):
         self.mpls_label = mpls_label
 
     def add_vpp_config(self):
         self.mpls_label = mpls_label
 
     def add_vpp_config(self):
-        self._test.vapi.bier_table_add_del(
-            self.id,
-            self.mpls_label,
-            is_add=1)
+        self._test.vapi.bier_table_add_del(self.id, self.mpls_label, is_add=1)
         self._test.registry.register(self, self._test.logger)
 
     def remove_vpp_config(self):
         self._test.registry.register(self, self._test.logger)
 
     def remove_vpp_config(self):
-        self._test.vapi.bier_table_add_del(
-            self.id,
-            self.mpls_label,
-            is_add=0)
+        self._test.vapi.bier_table_add_del(self.id, self.mpls_label, is_add=0)
 
     def object_id(self):
 
     def object_id(self):
-        return "bier-table;[%d:%d:%d]" % (self.id.set_id,
-                                          self.id.sub_domain_id,
-                                          self.id.hdr_len_id)
+        return "bier-table;[%d:%d:%d]" % (
+            self.id.set_id,
+            self.id.sub_domain_id,
+            self.id.hdr_len_id,
+        )
 
     def query_vpp_config(self):
         return find_bier_table(self._test, self.id)
 
     def query_vpp_config(self):
         return find_bier_table(self._test, self.id)
@@ -122,18 +123,14 @@ class VppBierRoute(VppObject):
 
     def add_vpp_config(self):
         self._test.vapi.bier_route_add_del(
 
     def add_vpp_config(self):
         self._test.vapi.bier_route_add_del(
-            self.tbl_id,
-            self.bp,
-            self.encoded_paths,
-            is_add=1)
+            self.tbl_id, self.bp, self.encoded_paths, is_add=1
+        )
         self._test.registry.register(self, self._test.logger)
 
     def remove_vpp_config(self):
         self._test.vapi.bier_route_add_del(
         self._test.registry.register(self, self._test.logger)
 
     def remove_vpp_config(self):
         self._test.vapi.bier_route_add_del(
-            self.tbl_id,
-            self.bp,
-            self.encoded_paths,
-            is_add=0)
+            self.tbl_id, self.bp, self.encoded_paths, is_add=0
+        )
 
     def update_paths(self, paths):
         self.paths = paths
 
     def update_paths(self, paths):
         self.paths = paths
@@ -141,46 +138,37 @@ class VppBierRoute(VppObject):
         for path in self.paths:
             self.encoded_paths.append(path.encode())
         self._test.vapi.bier_route_add_del(
         for path in self.paths:
             self.encoded_paths.append(path.encode())
         self._test.vapi.bier_route_add_del(
-            self.tbl_id,
-            self.bp,
-            self.encoded_paths,
-            is_replace=1)
+            self.tbl_id, self.bp, self.encoded_paths, is_replace=1
+        )
 
     def add_path(self, path):
         self.encoded_paths.append(path.encode())
         self._test.vapi.bier_route_add_del(
 
     def add_path(self, path):
         self.encoded_paths.append(path.encode())
         self._test.vapi.bier_route_add_del(
-            self.tbl_id,
-            self.bp,
-            [path.encode()],
-            is_add=1,
-            is_replace=0)
+            self.tbl_id, self.bp, [path.encode()], is_add=1, is_replace=0
+        )
         self.paths.append(path)
         self._test.registry.register(self, self._test.logger)
 
     def remove_path(self, path):
         self.encoded_paths.remove(path.encode())
         self._test.vapi.bier_route_add_del(
         self.paths.append(path)
         self._test.registry.register(self, self._test.logger)
 
     def remove_path(self, path):
         self.encoded_paths.remove(path.encode())
         self._test.vapi.bier_route_add_del(
-            self.tbl_id,
-            self.bp,
-            [path.encode()],
-            is_add=0,
-            is_replace=0)
+            self.tbl_id, self.bp, [path.encode()], is_add=0, is_replace=0
+        )
         self.paths.remove(path)
 
     def remove_all_paths(self):
         self._test.vapi.bier_route_add_del(
         self.paths.remove(path)
 
     def remove_all_paths(self):
         self._test.vapi.bier_route_add_del(
-            self.tbl_id,
-            self.bp,
-            [],
-            is_add=0,
-            is_replace=1)
+            self.tbl_id, self.bp, [], is_add=0, is_replace=1
+        )
         self.paths = []
 
     def object_id(self):
         self.paths = []
 
     def object_id(self):
-        return "bier-route;[%d:%d:%d:%d]" % (self.tbl_id.set_id,
-                                             self.tbl_id.sub_domain_id,
-                                             self.tbl_id.hdr_len_id,
-                                             self.bp)
+        return "bier-route;[%d:%d:%d:%d]" % (
+            self.tbl_id.set_id,
+            self.tbl_id.sub_domain_id,
+            self.tbl_id.hdr_len_id,
+            self.bp,
+        )
 
     def query_vpp_config(self):
         return find_bier_route(self._test, self.tbl_id, self.bp)
 
     def query_vpp_config(self):
         return find_bier_route(self._test, self.tbl_id, self.bp)
@@ -198,22 +186,20 @@ class VppBierImp(VppObject):
         self.src = src
 
     def add_vpp_config(self):
         self.src = src
 
     def add_vpp_config(self):
-        res = self._test.vapi.bier_imp_add(
-            self.tbl_id,
-            self.src,
-            self.ibytes)
+        res = self._test.vapi.bier_imp_add(self.tbl_id, self.src, self.ibytes)
         self.bi_index = res.bi_index
         self._test.registry.register(self, self._test.logger)
 
     def remove_vpp_config(self):
         self.bi_index = res.bi_index
         self._test.registry.register(self, self._test.logger)
 
     def remove_vpp_config(self):
-        self._test.vapi.bier_imp_del(
-            self.bi_index)
+        self._test.vapi.bier_imp_del(self.bi_index)
 
     def object_id(self):
 
     def object_id(self):
-        return "bier-imp;[%d:%d:%d:%d]" % (self.tbl_id.set_id,
-                                           self.tbl_id.sub_domain_id,
-                                           self.tbl_id.hdr_len_id,
-                                           self.src)
+        return "bier-imp;[%d:%d:%d:%d]" % (
+            self.tbl_id.set_id,
+            self.tbl_id.sub_domain_id,
+            self.tbl_id.hdr_len_id,
+            self.src,
+        )
 
     def query_vpp_config(self):
         return find_bier_imp(self._test, self.tbl_id, self.src)
 
     def query_vpp_config(self):
         return find_bier_imp(self._test, self.tbl_id, self.src)
@@ -229,15 +215,11 @@ class VppBierDispTable(VppObject):
         self.id = id
 
     def add_vpp_config(self):
         self.id = id
 
     def add_vpp_config(self):
-        self._test.vapi.bier_disp_table_add_del(
-            self.id,
-            is_add=1)
+        self._test.vapi.bier_disp_table_add_del(self.id, is_add=1)
         self._test.registry.register(self, self._test.logger)
 
     def remove_vpp_config(self):
         self._test.registry.register(self, self._test.logger)
 
     def remove_vpp_config(self):
-        self._test.vapi.bier_disp_table_add_del(
-            self.id,
-            is_add=0)
+        self._test.vapi.bier_disp_table_add_del(self.id, is_add=0)
 
     def object_id(self):
         return "bier-disp-table;[%d]" % (self.id)
 
     def object_id(self):
         return "bier-disp-table;[%d]" % (self.id)
@@ -251,8 +233,9 @@ class VppBierDispEntry(VppObject):
     BIER Disposition Entry
     """
 
     BIER Disposition Entry
     """
 
-    def __init__(self, test, tbl_id, bp, payload_proto, nh_proto,
-                 nh, nh_tbl, rpf_id=~0):
+    def __init__(
+        self, test, tbl_id, bp, payload_proto, nh_proto, nh, nh_tbl, rpf_id=~0
+    ):
         self._test = test
         self.tbl_id = tbl_id
         self.nh_tbl = nh_tbl
         self._test = test
         self.tbl_id = tbl_id
         self.nh_tbl = nh_tbl
@@ -271,7 +254,8 @@ class VppBierDispEntry(VppObject):
             self.nh,
             self.nh_tbl,
             self.rpf_id,
             self.nh,
             self.nh_tbl,
             self.rpf_id,
-            is_add=1)
+            is_add=1,
+        )
         self._test.registry.register(self, self._test.logger)
 
     def remove_vpp_config(self):
         self._test.registry.register(self, self._test.logger)
 
     def remove_vpp_config(self):
@@ -283,11 +267,11 @@ class VppBierDispEntry(VppObject):
             self.nh,
             self.nh_tbl,
             self.rpf_id,
             self.nh,
             self.nh_tbl,
             self.rpf_id,
-            is_add=0)
+            is_add=0,
+        )
 
     def object_id(self):
 
     def object_id(self):
-        return "bier-disp-entry;[%d:%d]" % (self.tbl_id,
-                                            self.bp)
+        return "bier-disp-entry;[%d:%d]" % (self.tbl_id, self.bp)
 
     def query_vpp_config(self):
         return find_bier_disp_entry(self._test, self.tbl_id, self.bp)
 
     def query_vpp_config(self):
         return find_bier_disp_entry(self._test, self.tbl_id, self.bp)
index 60c1ac1..636315c 100644 (file)
@@ -5,10 +5,19 @@ from vpp_interface import VppInterface
 class VppBondInterface(VppInterface):
     """VPP bond interface."""
 
 class VppBondInterface(VppInterface):
     """VPP bond interface."""
 
-    def __init__(self, test, mode, lb=0, numa_only=0, enable_gso=0,
-                 use_custom_mac=0, mac_address='', id=0xFFFFFFFF):
-
-        """ Create VPP Bond interface """
+    def __init__(
+        self,
+        test,
+        mode,
+        lb=0,
+        numa_only=0,
+        enable_gso=0,
+        use_custom_mac=0,
+        mac_address="",
+        id=0xFFFFFFFF,
+    ):
+
+        """Create VPP Bond interface"""
         super(VppBondInterface, self).__init__(test)
         self.mode = mode
         self.lb = lb
         super(VppBondInterface, self).__init__(test)
         self.mode = mode
         self.lb = lb
@@ -19,29 +28,28 @@ class VppBondInterface(VppInterface):
         self.id = id
 
     def add_vpp_config(self):
         self.id = id
 
     def add_vpp_config(self):
-        r = self.test.vapi.bond_create2(self.mode,
-                                        self.lb,
-                                        self.numa_only,
-                                        self.enable_gso,
-                                        self.use_custom_mac,
-                                        self.mac_address,
-                                        self.id)
+        r = self.test.vapi.bond_create2(
+            self.mode,
+            self.lb,
+            self.numa_only,
+            self.enable_gso,
+            self.use_custom_mac,
+            self.mac_address,
+            self.id,
+        )
         self.set_sw_if_index(r.sw_if_index)
 
     def remove_vpp_config(self):
         self.test.vapi.bond_delete(self.sw_if_index)
 
         self.set_sw_if_index(r.sw_if_index)
 
     def remove_vpp_config(self):
         self.test.vapi.bond_delete(self.sw_if_index)
 
-    def add_member_vpp_bond_interface(self,
-                                      sw_if_index,
-                                      is_passive=0,
-                                      is_long_timeout=0):
-        self.test.vapi.bond_add_member(sw_if_index,
-                                       self.sw_if_index,
-                                       is_passive,
-                                       is_long_timeout)
-
-    def detach_vpp_bond_interface(self,
-                                  sw_if_index):
+    def add_member_vpp_bond_interface(
+        self, sw_if_index, is_passive=0, is_long_timeout=0
+    ):
+        self.test.vapi.bond_add_member(
+            sw_if_index, self.sw_if_index, is_passive, is_long_timeout
+        )
+
+    def detach_vpp_bond_interface(self, sw_if_index):
         self.test.vapi.bond_detach_member(sw_if_index)
 
     def is_interface_config_in_dump(self, dump):
         self.test.vapi.bond_detach_member(sw_if_index)
 
     def is_interface_config_in_dump(self, dump):
index 7039f29..9ab80e9 100644 (file)
@@ -6,13 +6,12 @@ class VppBviInterface(VppInterface, VppObject):
     """VPP bvi interface."""
 
     def __init__(self, test):
     """VPP bvi interface."""
 
     def __init__(self, test):
-        """ Create VPP BVI interface """
+        """Create VPP BVI interface"""
         super(VppBviInterface, self).__init__(test)
         self.add_vpp_config()
 
     def add_vpp_config(self):
         super(VppBviInterface, self).__init__(test)
         self.add_vpp_config()
 
     def add_vpp_config(self):
-        r = self.test.vapi.bvi_create(user_instance=0xffffffff,
-                                      mac="00:00:00:00:00:00")
+        r = self.test.vapi.bvi_create(user_instance=0xFFFFFFFF, mac="00:00:00:00:00:00")
         self.set_sw_if_index(r.sw_if_index)
 
     def remove_vpp_config(self):
         self.set_sw_if_index(r.sw_if_index)
 
     def remove_vpp_config(self):
index 9e272ca..cff08e8 100644 (file)
@@ -2,27 +2,26 @@ from vpp_interface import VppInterface
 
 
 class VppTAPInterface(VppInterface):
 
 
 class VppTAPInterface(VppInterface):
-
     @property
     def tap_id(self):
         """TAP id"""
         return self._tap_id
 
     @property
     def tap_id(self):
         """TAP id"""
         return self._tap_id
 
-    def __init__(self, test, tap_id=0xffffffff, mac_addr=None):
+    def __init__(self, test, tap_id=0xFFFFFFFF, mac_addr=None):
         self._test = test
         self._tap_id = tap_id
         self._mac_addr = mac_addr
 
     def get_vpp_dump(self):
         self._test = test
         self._tap_id = tap_id
         self._mac_addr = mac_addr
 
     def get_vpp_dump(self):
-        dump = self._test.vapi.sw_interface_tap_v2_dump(
-            sw_if_index=self.sw_if_index)
+        dump = self._test.vapi.sw_interface_tap_v2_dump(sw_if_index=self.sw_if_index)
         return dump
 
     def add_vpp_config(self):
         reply = self._test.vapi.tap_create_v2(
             id=self._tap_id,
             use_random_mac=bool(self._mac_addr),
         return dump
 
     def add_vpp_config(self):
         reply = self._test.vapi.tap_create_v2(
             id=self._tap_id,
             use_random_mac=bool(self._mac_addr),
-            mac_address=self._mac_addr)
+            mac_address=self._mac_addr,
+        )
         self.set_sw_if_index(reply.sw_if_index)
         self._test.registry.register(self, self.test.logger)
 
         self.set_sw_if_index(reply.sw_if_index)
         self._test.registry.register(self, self.test.logger)
 
index f8265a2..eb07df2 100644 (file)
@@ -2,7 +2,6 @@ from vpp_object import VppObject
 
 
 class VppDHCPProxy(VppObject):
 
 
 class VppDHCPProxy(VppObject):
-
     def __init__(
         self,
         test,
     def __init__(
         self,
         test,
@@ -17,14 +16,9 @@ class VppDHCPProxy(VppObject):
         self._dhcp_server = dhcp_server
         self._dhcp_src_address = dhcp_src_address
 
         self._dhcp_server = dhcp_server
         self._dhcp_src_address = dhcp_src_address
 
-    def set_proxy(
-            self,
-            dhcp_server,
-            dhcp_src_address,
-            rx_vrf_id=0,
-            server_vrf_id=0):
+    def set_proxy(self, dhcp_server, dhcp_src_address, rx_vrf_id=0, server_vrf_id=0):
         if self.query_vpp_config():
         if self.query_vpp_config():
-            raise Exception('Vpp config present')
+            raise Exception("Vpp config present")
         self._rx_vrf_id = rx_vrf_id
         self._server_vrf_id = server_vrf_id
         self._dhcp_server = dhcp_server
         self._rx_vrf_id = rx_vrf_id
         self._server_vrf_id = server_vrf_id
         self._dhcp_server = dhcp_server
@@ -36,7 +30,8 @@ class VppDHCPProxy(VppObject):
             rx_vrf_id=self._rx_vrf_id,
             server_vrf_id=self._server_vrf_id,
             dhcp_server=self._dhcp_server,
             rx_vrf_id=self._rx_vrf_id,
             server_vrf_id=self._server_vrf_id,
             dhcp_server=self._dhcp_server,
-            dhcp_src_address=self._dhcp_src_address)
+            dhcp_src_address=self._dhcp_src_address,
+        )
         self._test.registry.register(self, self._test.logger)
 
     def remove_vpp_config(self):
         self._test.registry.register(self, self._test.logger)
 
     def remove_vpp_config(self):
@@ -45,7 +40,8 @@ class VppDHCPProxy(VppObject):
             server_vrf_id=self._server_vrf_id,
             dhcp_server=self._dhcp_server,
             dhcp_src_address=self._dhcp_src_address,
             server_vrf_id=self._server_vrf_id,
             dhcp_server=self._dhcp_server,
             dhcp_src_address=self._dhcp_src_address,
-            is_add=0)
+            is_add=0,
+        )
 
     def get_vpp_dump(self):
         dump = self._test.vapi.dhcp_proxy_dump()
 
     def get_vpp_dump(self):
         dump = self._test.vapi.dhcp_proxy_dump()
@@ -62,17 +58,17 @@ class VppDHCPProxy(VppObject):
 
 
 class VppDHCPClient(VppObject):
 
 
 class VppDHCPClient(VppObject):
-
     def __init__(
     def __init__(
-            self,
-            test,
-            sw_if_index,
-            hostname,
-            id=None,
-            want_dhcp_event=False,
-            set_broadcast_flag=True,
-            dscp=None,
-            pid=None):
+        self,
+        test,
+        sw_if_index,
+        hostname,
+        id=None,
+        want_dhcp_event=False,
+        set_broadcast_flag=True,
+        dscp=None,
+        pid=None,
+    ):
         self._test = test
         self._sw_if_index = sw_if_index
         self._hostname = hostname
         self._test = test
         self._sw_if_index = sw_if_index
         self._hostname = hostname
@@ -83,16 +79,17 @@ class VppDHCPClient(VppObject):
         self._pid = pid
 
     def set_client(
         self._pid = pid
 
     def set_client(
-            self,
-            sw_if_index,
-            hostname,
-            id=None,
-            want_dhcp_event=False,
-            set_broadcast_flag=True,
-            dscp=None,
-            pid=None):
+        self,
+        sw_if_index,
+        hostname,
+        id=None,
+        want_dhcp_event=False,
+        set_broadcast_flag=True,
+        dscp=None,
+        pid=None,
+    ):
         if self.query_vpp_config():
         if self.query_vpp_config():
-            raise Exception('Vpp config present')
+            raise Exception("Vpp config present")
         self._sw_if_index = sw_if_index
         self._hostname = hostname
         self._id = id
         self._sw_if_index = sw_if_index
         self._hostname = hostname
         self._id = id
@@ -102,19 +99,21 @@ class VppDHCPClient(VppObject):
         self._pid = pid
 
     def add_vpp_config(self):
         self._pid = pid
 
     def add_vpp_config(self):
-        id = self._id.encode('ascii') if self._id else None
-        client = {'sw_if_index': self._sw_if_index, 'hostname': self._hostname,
-                  'id': id,
-                  'want_dhcp_event': self._want_dhcp_event,
-                  'set_broadcast_flag': self._set_broadcast_flag,
-                  'dscp': self._dscp, 'pid': self._pid}
+        id = self._id.encode("ascii") if self._id else None
+        client = {
+            "sw_if_index": self._sw_if_index,
+            "hostname": self._hostname,
+            "id": id,
+            "want_dhcp_event": self._want_dhcp_event,
+            "set_broadcast_flag": self._set_broadcast_flag,
+            "dscp": self._dscp,
+            "pid": self._pid,
+        }
         self._test.vapi.dhcp_client_config(is_add=1, client=client)
         self._test.registry.register(self, self._test.logger)
 
     def remove_vpp_config(self):
         self._test.vapi.dhcp_client_config(is_add=1, client=client)
         self._test.registry.register(self, self._test.logger)
 
     def remove_vpp_config(self):
-        client = client = {
-            'sw_if_index': self._sw_if_index,
-            'hostname': self._hostname}
+        client = client = {"sw_if_index": self._sw_if_index, "hostname": self._hostname}
         self._test.vapi.dhcp_client_config(client=client, is_add=0)
 
     def get_vpp_dump(self):
         self._test.vapi.dhcp_client_config(client=client, is_add=0)
 
     def get_vpp_dump(self):
index 770292e..9b02488 100644 (file)
@@ -1,4 +1,3 @@
-
 from vpp_interface import VppInterface
 import socket
 from vpp_papi import VppEnum
 from vpp_interface import VppInterface
 import socket
 from vpp_papi import VppEnum
@@ -9,10 +8,18 @@ class VppGreInterface(VppInterface):
     VPP GRE interface
     """
 
     VPP GRE interface
     """
 
-    def __init__(self, test, src_ip, dst_ip, outer_table_id=0,
-                 type=None, mode=None, flags=0,
-                 session=0):
-        """ Create VPP GRE interface """
+    def __init__(
+        self,
+        test,
+        src_ip,
+        dst_ip,
+        outer_table_id=0,
+        type=None,
+        mode=None,
+        flags=0,
+        session=0,
+    ):
+        """Create VPP GRE interface"""
         super(VppGreInterface, self).__init__(test)
         self.t_src = src_ip
         self.t_dst = dst_ip
         super(VppGreInterface, self).__init__(test)
         self.t_src = src_ip
         self.t_dst = dst_ip
@@ -21,25 +28,25 @@ class VppGreInterface(VppInterface):
         self.t_flags = flags
         self.t_type = type
         if not self.t_type:
         self.t_flags = flags
         self.t_type = type
         if not self.t_type:
-            self.t_type = (VppEnum.vl_api_gre_tunnel_type_t.
-                           GRE_API_TUNNEL_TYPE_L3)
+            self.t_type = VppEnum.vl_api_gre_tunnel_type_t.GRE_API_TUNNEL_TYPE_L3
         self.t_mode = mode
         if not self.t_mode:
         self.t_mode = mode
         if not self.t_mode:
-            self.t_mode = (VppEnum.vl_api_tunnel_mode_t.
-                           TUNNEL_API_MODE_P2P)
+            self.t_mode = VppEnum.vl_api_tunnel_mode_t.TUNNEL_API_MODE_P2P
 
     def add_vpp_config(self):
         r = self.test.vapi.gre_tunnel_add_del(
             is_add=1,
             tunnel={
 
     def add_vpp_config(self):
         r = self.test.vapi.gre_tunnel_add_del(
             is_add=1,
             tunnel={
-                'src': self.t_src,
-                'dst': self.t_dst,
-                'outer_table_id': self.t_outer_table,
-                'instance': 0xffffffff,
-                'type': self.t_type,
-                'mode': self.t_mode,
-                'flags': self.t_flags,
-                'session_id': self.t_session})
+                "src": self.t_src,
+                "dst": self.t_dst,
+                "outer_table_id": self.t_outer_table,
+                "instance": 0xFFFFFFFF,
+                "type": self.t_type,
+                "mode": self.t_mode,
+                "flags": self.t_flags,
+                "session_id": self.t_session,
+            },
+        )
         self.set_sw_if_index(r.sw_if_index)
         self.generate_remote_hosts()
         self.test.registry.register(self, self.test.logger)
         self.set_sw_if_index(r.sw_if_index)
         self.generate_remote_hosts()
         self.test.registry.register(self, self.test.logger)
@@ -50,21 +57,22 @@ class VppGreInterface(VppInterface):
         self.test.vapi.gre_tunnel_add_del(
             is_add=0,
             tunnel={
         self.test.vapi.gre_tunnel_add_del(
             is_add=0,
             tunnel={
-                'src': self.t_src,
-                'dst': self.t_dst,
-                'outer_table_id': self.t_outer_table,
-                'instance': 0xffffffff,
-                'type': self.t_type,
-                'mode': self.t_mode,
-                'flags': self.t_flags,
-                'session_id': self.t_session})
+                "src": self.t_src,
+                "dst": self.t_dst,
+                "outer_table_id": self.t_outer_table,
+                "instance": 0xFFFFFFFF,
+                "type": self.t_type,
+                "mode": self.t_mode,
+                "flags": self.t_flags,
+                "session_id": self.t_session,
+            },
+        )
 
     def object_id(self):
         return "gre-%d" % self.sw_if_index
 
     def query_vpp_config(self):
 
     def object_id(self):
         return "gre-%d" % self.sw_if_index
 
     def query_vpp_config(self):
-        return (self.test.vapi.gre_tunnel_dump(
-            sw_if_index=self._sw_if_index))
+        return self.test.vapi.gre_tunnel_dump(sw_if_index=self._sw_if_index)
 
     @property
     def remote_ip(self):
 
     @property
     def remote_ip(self):
index 8f78a9b..da2beb0 100644 (file)
@@ -1,4 +1,3 @@
-
 from vpp_object import VppObject
 import socket
 
 from vpp_object import VppObject
 import socket
 
@@ -15,22 +14,28 @@ class IGMP_FILTER:
 
 def find_igmp_state(states, itf, gaddr, saddr):
     for s in states:
 
 def find_igmp_state(states, itf, gaddr, saddr):
     for s in states:
-        if s.sw_if_index == itf.sw_if_index and \
-           str(s.gaddr) == gaddr and str(s.saddr) == saddr:
+        if (
+            s.sw_if_index == itf.sw_if_index
+            and str(s.gaddr) == gaddr
+            and str(s.saddr) == saddr
+        ):
             return True
     return False
 
 
 def wait_for_igmp_event(test, timeout, itf, gaddr, saddr, ff):
     ev = test.vapi.wait_for_event(timeout, "igmp_event")
             return True
     return False
 
 
 def wait_for_igmp_event(test, timeout, itf, gaddr, saddr, ff):
     ev = test.vapi.wait_for_event(timeout, "igmp_event")
-    if ev.sw_if_index == itf.sw_if_index and \
-       str(ev.gaddr) == gaddr and str(ev.saddr) == saddr and \
-       ev.filter == ff:
+    if (
+        ev.sw_if_index == itf.sw_if_index
+        and str(ev.gaddr) == gaddr
+        and str(ev.saddr) == saddr
+        and ev.filter == ff
+    ):
         return True
     return False
 
 
         return True
     return False
 
 
-class IgmpSG():
+class IgmpSG:
     def __init__(self, gaddr, saddrs):
         self.gaddr = gaddr
         self.gaddr_p = socket.inet_pton(socket.AF_INET, gaddr)
     def __init__(self, gaddr, saddrs):
         self.gaddr = gaddr
         self.gaddr_p = socket.inet_pton(socket.AF_INET, gaddr)
@@ -43,7 +48,7 @@ class IgmpSG():
             self.saddrs_encoded.append(ss)
 
 
             self.saddrs_encoded.append(ss)
 
 
-class IgmpRecord():
+class IgmpRecord:
     def __init__(self, sg, type):
         self.sg = sg
         self.type = type
     def __init__(self, sg, type):
         self.sg = sg
         self.type = type
@@ -58,15 +63,11 @@ class VppHostState(VppObject):
 
     def add_vpp_config(self):
         self._test.vapi.igmp_listen(
 
     def add_vpp_config(self):
         self._test.vapi.igmp_listen(
-            self.filter, self.sw_if_index,
-            self.sg.saddrs_encoded, self.sg.gaddr_p)
+            self.filter, self.sw_if_index, self.sg.saddrs_encoded, self.sg.gaddr_p
+        )
 
     def remove_vpp_config(self):
 
     def remove_vpp_config(self):
-        self._test.vapi.igmp_listen(
-            self.filter,
-            self.sw_if_index,
-            [],
-            self.sg.gaddr_p)
+        self._test.vapi.igmp_listen(self.filter, self.sw_if_index, [], self.sg.gaddr_p)
 
     def object_id(self):
         return "%s:%d" % (self.sg, self.sw_if_index)
 
     def object_id(self):
         return "%s:%d" % (self.sg, self.sw_if_index)
index de20812..b9a6d8c 100644 (file)
@@ -4,24 +4,24 @@ from vpp_papi import VppEnum
 
 
 class AuthMethod:
 
 
 class AuthMethod:
-    v = {'rsa-sig': 1,
-         'shared-key': 2}
+    v = {"rsa-sig": 1, "shared-key": 2}
 
     @staticmethod
 
     @staticmethod
-    def value(key): return AuthMethod.v[key]
+    def value(key):
+        return AuthMethod.v[key]
 
 
 class IDType:
 
 
 class IDType:
-    v = {'ip4-addr': 1,
-         'fqdn': 2,
-         'ip6-addr': 5}
+    v = {"ip4-addr": 1, "fqdn": 2, "ip6-addr": 5}
 
     @staticmethod
 
     @staticmethod
-    def value(key): return IDType.v[key]
+    def value(key):
+        return IDType.v[key]
 
 
 class Profile(VppObject):
 
 
 class Profile(VppObject):
-    """ IKEv2 profile """
+    """IKEv2 profile"""
+
     def __init__(self, test, profile_name):
         self.test = test
         self.vapi = test.vapi
     def __init__(self, test, profile_name):
         self.test = test
         self.vapi = test.vapi
@@ -38,49 +38,49 @@ class Profile(VppObject):
         elif isinstance(method, str):
             m = AuthMethod.value(method)
         else:
         elif isinstance(method, str):
             m = AuthMethod.value(method)
         else:
-            raise Exception('unsupported type {}'.format(method))
-        self.auth = {'auth_method': m,
-                     'data': data,
-                     'is_hex': is_hex}
+            raise Exception("unsupported type {}".format(method))
+        self.auth = {"auth_method": m, "data": data, "is_hex": is_hex}
 
     def add_local_id(self, id_type, data):
         if isinstance(id_type, str):
             t = IDType.value(id_type)
 
     def add_local_id(self, id_type, data):
         if isinstance(id_type, str):
             t = IDType.value(id_type)
-        self.local_id = {'id_type': t,
-                         'data': data,
-                         'is_local': True}
+        self.local_id = {"id_type": t, "data": data, "is_local": True}
 
     def add_remote_id(self, id_type, data):
         if isinstance(id_type, str):
             t = IDType.value(id_type)
 
     def add_remote_id(self, id_type, data):
         if isinstance(id_type, str):
             t = IDType.value(id_type)
-        self.remote_id = {'id_type': t,
-                          'data': data,
-                          'is_local': False}
+        self.remote_id = {"id_type": t, "data": data, "is_local": False}
 
 
-    def add_local_ts(self, start_addr, end_addr, start_port=0, end_port=0xffff,
-                     proto=0, is_ip4=True):
+    def add_local_ts(
+        self, start_addr, end_addr, start_port=0, end_port=0xFFFF, proto=0, is_ip4=True
+    ):
         self.ts_is_ip4 = is_ip4
         self.ts_is_ip4 = is_ip4
-        self.local_ts = {'is_local': True,
-                         'protocol_id': proto,
-                         'start_port': start_port,
-                         'end_port': end_port,
-                         'start_addr': start_addr,
-                         'end_addr': end_addr}
-
-    def add_remote_ts(self, start_addr, end_addr, start_port=0,
-                      end_port=0xffff, proto=0):
+        self.local_ts = {
+            "is_local": True,
+            "protocol_id": proto,
+            "start_port": start_port,
+            "end_port": end_port,
+            "start_addr": start_addr,
+            "end_addr": end_addr,
+        }
+
+    def add_remote_ts(
+        self, start_addr, end_addr, start_port=0, end_port=0xFFFF, proto=0
+    ):
         try:
             IPv4Address(start_addr)
             is_ip4 = True
         except AddressValueError:
             is_ip4 = False
         self.ts_is_ip4 = is_ip4
         try:
             IPv4Address(start_addr)
             is_ip4 = True
         except AddressValueError:
             is_ip4 = False
         self.ts_is_ip4 = is_ip4
-        self.remote_ts = {'is_local': False,
-                          'protocol_id': proto,
-                          'start_port': start_port,
-                          'end_port': end_port,
-                          'start_addr': start_addr,
-                          'end_addr': end_addr}
+        self.remote_ts = {
+            "is_local": False,
+            "protocol_id": proto,
+            "start_port": start_port,
+            "end_port": end_port,
+            "start_addr": start_addr,
+            "end_addr": end_addr,
+        }
 
     def add_responder_hostname(self, hn):
         self.responder_hostname = hn
 
     def add_responder_hostname(self, hn):
         self.responder_hostname = hn
@@ -101,72 +101,78 @@ class Profile(VppObject):
         self.lifetime_data = data
 
     def set_ipsec_over_udp_port(self, port):
         self.lifetime_data = data
 
     def set_ipsec_over_udp_port(self, port):
-        self.ipsec_udp_port = {'is_set': 1,
-                               'port': port}
+        self.ipsec_udp_port = {"is_set": 1, "port": port}
 
     def set_tunnel_interface(self, sw_if_index):
         self.tun_itf = sw_if_index
 
     def object_id(self):
 
     def set_tunnel_interface(self, sw_if_index):
         self.tun_itf = sw_if_index
 
     def object_id(self):
-        return 'ikev2-profile-%s' % self.profile_name
+        return "ikev2-profile-%s" % self.profile_name
 
     def remove_vpp_config(self):
         self.vapi.ikev2_profile_add_del(name=self.profile_name, is_add=False)
 
     def add_vpp_config(self):
         self.vapi.ikev2_profile_add_del(name=self.profile_name, is_add=True)
 
     def remove_vpp_config(self):
         self.vapi.ikev2_profile_add_del(name=self.profile_name, is_add=False)
 
     def add_vpp_config(self):
         self.vapi.ikev2_profile_add_del(name=self.profile_name, is_add=True)
-        if hasattr(self, 'auth'):
-            self.vapi.ikev2_profile_set_auth(name=self.profile_name,
-                                             data_len=len(self.auth['data']),
-                                             **self.auth)
-        if hasattr(self, 'local_id'):
-            self.vapi.ikev2_profile_set_id(name=self.profile_name,
-                                           data_len=len(self.local_id
-                                                        ['data']),
-                                           **self.local_id)
-        if hasattr(self, 'remote_id'):
-            self.vapi.ikev2_profile_set_id(name=self.profile_name,
-                                           data_len=len(self.remote_id
-                                                        ['data']),
-                                           **self.remote_id)
-        if hasattr(self, 'local_ts'):
-            self.vapi.ikev2_profile_set_ts(name=self.profile_name,
-                                           ts=self.local_ts)
-
-        if hasattr(self, 'remote_ts'):
-            self.vapi.ikev2_profile_set_ts(name=self.profile_name,
-                                           ts=self.remote_ts)
-
-        if hasattr(self, 'responder'):
-            self.vapi.ikev2_set_responder(name=self.profile_name,
-                                          responder=self.responder)
-
-        if hasattr(self, 'responder_hostname'):
+        if hasattr(self, "auth"):
+            self.vapi.ikev2_profile_set_auth(
+                name=self.profile_name, data_len=len(self.auth["data"]), **self.auth
+            )
+        if hasattr(self, "local_id"):
+            self.vapi.ikev2_profile_set_id(
+                name=self.profile_name,
+                data_len=len(self.local_id["data"]),
+                **self.local_id,
+            )
+        if hasattr(self, "remote_id"):
+            self.vapi.ikev2_profile_set_id(
+                name=self.profile_name,
+                data_len=len(self.remote_id["data"]),
+                **self.remote_id,
+            )
+        if hasattr(self, "local_ts"):
+            self.vapi.ikev2_profile_set_ts(name=self.profile_name, ts=self.local_ts)
+
+        if hasattr(self, "remote_ts"):
+            self.vapi.ikev2_profile_set_ts(name=self.profile_name, ts=self.remote_ts)
+
+        if hasattr(self, "responder"):
+            self.vapi.ikev2_set_responder(
+                name=self.profile_name, responder=self.responder
+            )
+
+        if hasattr(self, "responder_hostname"):
             print(self.responder_hostname)
             print(self.responder_hostname)
-            self.vapi.ikev2_set_responder_hostname(name=self.profile_name,
-                                                   **self.responder_hostname)
+            self.vapi.ikev2_set_responder_hostname(
+                name=self.profile_name, **self.responder_hostname
+            )
 
 
-        if hasattr(self, 'ike_transforms'):
-            self.vapi.ikev2_set_ike_transforms(name=self.profile_name,
-                                               tr=self.ike_transforms)
+        if hasattr(self, "ike_transforms"):
+            self.vapi.ikev2_set_ike_transforms(
+                name=self.profile_name, tr=self.ike_transforms
+            )
 
 
-        if hasattr(self, 'esp_transforms'):
-            self.vapi.ikev2_set_esp_transforms(name=self.profile_name,
-                                               tr=self.esp_transforms)
+        if hasattr(self, "esp_transforms"):
+            self.vapi.ikev2_set_esp_transforms(
+                name=self.profile_name, tr=self.esp_transforms
+            )
 
         if self.udp_encap:
             self.vapi.ikev2_profile_set_udp_encap(name=self.profile_name)
 
 
         if self.udp_encap:
             self.vapi.ikev2_profile_set_udp_encap(name=self.profile_name)
 
-        if hasattr(self, 'lifetime_data'):
-            self.vapi.ikev2_set_sa_lifetime(name=self.profile_name,
-                                            **self.lifetime_data)
-
-        if hasattr(self, 'ipsec_udp_port'):
-            self.vapi.ikev2_profile_set_ipsec_udp_port(name=self.profile_name,
-                                                       **self.ipsec_udp_port)
-        if hasattr(self, 'tun_itf'):
-            self.vapi.ikev2_set_tunnel_interface(name=self.profile_name,
-                                                 sw_if_index=self.tun_itf)
+        if hasattr(self, "lifetime_data"):
+            self.vapi.ikev2_set_sa_lifetime(
+                name=self.profile_name, **self.lifetime_data
+            )
+
+        if hasattr(self, "ipsec_udp_port"):
+            self.vapi.ikev2_profile_set_ipsec_udp_port(
+                name=self.profile_name, **self.ipsec_udp_port
+            )
+        if hasattr(self, "tun_itf"):
+            self.vapi.ikev2_set_tunnel_interface(
+                name=self.profile_name, sw_if_index=self.tun_itf
+            )
 
         if not self.natt:
             self.vapi.ikev2_profile_disable_natt(name=self.profile_name)
 
         if not self.natt:
             self.vapi.ikev2_profile_disable_natt(name=self.profile_name)
index b7c830b..cee6ea4 100644 (file)
@@ -49,7 +49,7 @@ class VppInterface(metaclass=abc.ABCMeta):
 
     @property
     def local_ip4_prefix_len(self):
 
     @property
     def local_ip4_prefix_len(self):
-        """Local IPv4 prefix length """
+        """Local IPv4 prefix length"""
         return self._local_ip4_len
 
     @local_ip4_prefix_len.setter
         return self._local_ip4_len
 
     @local_ip4_prefix_len.setter
@@ -58,8 +58,8 @@ class VppInterface(metaclass=abc.ABCMeta):
 
     @property
     def local_ip4_prefix(self):
 
     @property
     def local_ip4_prefix(self):
-        """Local IPv4 prefix """
-        return ("%s/%d" % (self._local_ip4, self._local_ip4_len))
+        """Local IPv4 prefix"""
+        return "%s/%d" % (self._local_ip4, self._local_ip4_len)
 
     @property
     def remote_ip4(self):
 
     @property
     def remote_ip4(self):
@@ -77,7 +77,7 @@ class VppInterface(metaclass=abc.ABCMeta):
 
     @property
     def local_ip6_prefix_len(self):
 
     @property
     def local_ip6_prefix_len(self):
-        """Local IPv6 prefix length """
+        """Local IPv6 prefix length"""
         return self._local_ip6_len
 
     @local_ip6_prefix_len.setter
         return self._local_ip6_len
 
     @local_ip6_prefix_len.setter
@@ -86,8 +86,8 @@ class VppInterface(metaclass=abc.ABCMeta):
 
     @property
     def local_ip6_prefix(self):
 
     @property
     def local_ip6_prefix(self):
-        """Local IPv4 prefix """
-        return ("%s/%d" % (self._local_ip6, self._local_ip6_len))
+        """Local IPv4 prefix"""
+        return "%s/%d" % (self._local_ip6, self._local_ip6_len)
 
     @property
     def remote_ip6(self):
 
     @property
     def remote_ip6(self):
@@ -100,7 +100,9 @@ class VppInterface(metaclass=abc.ABCMeta):
         if not self._local_ip6_ll:
             self._local_ip6_ll = str(
                 self.test.vapi.sw_interface_ip6_get_link_local_address(
         if not self._local_ip6_ll:
             self._local_ip6_ll = str(
                 self.test.vapi.sw_interface_ip6_get_link_local_address(
-                    self.sw_if_index).ip)
+                    self.sw_if_index
+                ).ip
+            )
         return self._local_ip6_ll
 
     @property
         return self._local_ip6_ll
 
     @property
@@ -173,8 +175,7 @@ class VppInterface(metaclass=abc.ABCMeta):
         self._hosts_by_mac = {}
         self._hosts_by_ip4 = {}
         self._hosts_by_ip6 = {}
         self._hosts_by_mac = {}
         self._hosts_by_ip4 = {}
         self._hosts_by_ip6 = {}
-        for i in range(
-                2, count + 2):  # 0: network address, 1: local vpp address
+        for i in range(2, count + 2):  # 0: network address, 1: local vpp address
             mac = "02:%02x:00:00:ff:%02x" % (self.sw_if_index, i)
             ip4 = "172.16.%u.%u" % (self.sw_if_index, i)
             ip6 = "fd01:%x::%x" % (self.sw_if_index, i)
             mac = "02:%02x:00:00:ff:%02x" % (self.sw_if_index, i)
             ip4 = "172.16.%u.%u" % (self.sw_if_index, i)
             ip6 = "fd01:%x::%x" % (self.sw_if_index, i)
@@ -196,14 +197,12 @@ class VppInterface(metaclass=abc.ABCMeta):
 
     def set_mac(self, mac):
         self._local_mac = str(mac)
 
     def set_mac(self, mac):
         self._local_mac = str(mac)
-        self.test.vapi.sw_interface_set_mac_address(
-            self.sw_if_index, mac.packed)
+        self.test.vapi.sw_interface_set_mac_address(self.sw_if_index, mac.packed)
         return self
 
     def set_sw_if_index(self, sw_if_index):
         if sw_if_index > 255:
         return self
 
     def set_sw_if_index(self, sw_if_index):
         if sw_if_index > 255:
-            raise RuntimeError("Don't support sw_if_index values "
-                               "greater than 255.")
+            raise RuntimeError("Don't support sw_if_index values greater than 255.")
         self._sw_if_index = sw_if_index
 
         self.generate_remote_hosts()
         self._sw_if_index = sw_if_index
 
         self.generate_remote_hosts()
@@ -220,10 +219,14 @@ class VppInterface(metaclass=abc.ABCMeta):
         self.has_ip6_config = False
         self.ip6_table_id = 0
 
         self.has_ip6_config = False
         self.ip6_table_id = 0
 
-        self._local_addr = {socket.AF_INET: self.local_ip4,
-                            socket.AF_INET6: self.local_ip6}
-        self._remote_addr = {socket.AF_INET: self.remote_ip4,
-                             socket.AF_INET6: self.remote_ip6}
+        self._local_addr = {
+            socket.AF_INET: self.local_ip4,
+            socket.AF_INET6: self.local_ip6,
+        }
+        self._remote_addr = {
+            socket.AF_INET: self.remote_ip4,
+            socket.AF_INET6: self.remote_ip6,
+        }
 
         r = self.test.vapi.sw_interface_dump(sw_if_index=self.sw_if_index)
         for intf in r:
 
         r = self.test.vapi.sw_interface_dump(sw_if_index=self.sw_if_index)
         for intf in r:
@@ -235,15 +238,16 @@ class VppInterface(metaclass=abc.ABCMeta):
         else:
             raise Exception(
                 "Could not find interface with sw_if_index %d "
         else:
             raise Exception(
                 "Could not find interface with sw_if_index %d "
-                "in interface dump %s" %
-                (self.sw_if_index, moves.reprlib.repr(r)))
+                "in interface dump %s" % (self.sw_if_index, moves.reprlib.repr(r))
+            )
         self._remote_ip6_ll = mk_ll_addr(self.remote_mac)
         self._local_ip6_ll = None
 
     def config_ip4(self):
         """Configure IPv4 address on the VPP interface."""
         self.test.vapi.sw_interface_add_del_address(
         self._remote_ip6_ll = mk_ll_addr(self.remote_mac)
         self._local_ip6_ll = None
 
     def config_ip4(self):
         """Configure IPv4 address on the VPP interface."""
         self.test.vapi.sw_interface_add_del_address(
-            sw_if_index=self.sw_if_index, prefix=self.local_ip4_prefix)
+            sw_if_index=self.sw_if_index, prefix=self.local_ip4_prefix
+        )
         self.has_ip4_config = True
         return self
 
         self.has_ip4_config = True
         return self
 
@@ -252,8 +256,8 @@ class VppInterface(metaclass=abc.ABCMeta):
         try:
             if self.has_ip4_config:
                 self.test.vapi.sw_interface_add_del_address(
         try:
             if self.has_ip4_config:
                 self.test.vapi.sw_interface_add_del_address(
-                    sw_if_index=self.sw_if_index,
-                    prefix=self.local_ip4_prefix, is_add=0)
+                    sw_if_index=self.sw_if_index, prefix=self.local_ip4_prefix, is_add=0
+                )
         except AttributeError:
             self.has_ip4_config = False
         self.has_ip4_config = False
         except AttributeError:
             self.has_ip4_config = False
         self.has_ip4_config = False
@@ -265,15 +269,14 @@ class VppInterface(metaclass=abc.ABCMeta):
         :param vrf_id: The FIB table / VRF ID. (Default value = 0)
         """
         for host in self._remote_hosts:
         :param vrf_id: The FIB table / VRF ID. (Default value = 0)
         """
         for host in self._remote_hosts:
-            self.test.vapi.ip_neighbor_add_del(self.sw_if_index,
-                                               host.mac,
-                                               host.ip4)
+            self.test.vapi.ip_neighbor_add_del(self.sw_if_index, host.mac, host.ip4)
         return self
 
     def config_ip6(self):
         """Configure IPv6 address on the VPP interface."""
         self.test.vapi.sw_interface_add_del_address(
         return self
 
     def config_ip6(self):
         """Configure IPv6 address on the VPP interface."""
         self.test.vapi.sw_interface_add_del_address(
-            sw_if_index=self.sw_if_index, prefix=self.local_ip6_prefix)
+            sw_if_index=self.sw_if_index, prefix=self.local_ip6_prefix
+        )
         self.has_ip6_config = True
         return self
 
         self.has_ip6_config = True
         return self
 
@@ -282,8 +285,8 @@ class VppInterface(metaclass=abc.ABCMeta):
         try:
             if self.has_ip6_config:
                 self.test.vapi.sw_interface_add_del_address(
         try:
             if self.has_ip6_config:
                 self.test.vapi.sw_interface_add_del_address(
-                    sw_if_index=self.sw_if_index,
-                    prefix=self.local_ip6_prefix, is_add=0)
+                    sw_if_index=self.sw_if_index, prefix=self.local_ip6_prefix, is_add=0
+                )
         except AttributeError:
             self.has_ip6_config = False
         self.has_ip6_config = False
         except AttributeError:
             self.has_ip6_config = False
         self.has_ip6_config = False
@@ -295,9 +298,7 @@ class VppInterface(metaclass=abc.ABCMeta):
         :param vrf_id: The FIB table / VRF ID. (Default value = 0)
         """
         for host in self._remote_hosts:
         :param vrf_id: The FIB table / VRF ID. (Default value = 0)
         """
         for host in self._remote_hosts:
-            self.test.vapi.ip_neighbor_add_del(self.sw_if_index,
-                                               host.mac,
-                                               host.ip6)
+            self.test.vapi.ip_neighbor_add_del(self.sw_if_index, host.mac, host.ip6)
 
     def unconfig(self):
         """Unconfigure IPv6 and IPv4 address on the VPP interface."""
 
     def unconfig(self):
         """Unconfigure IPv6 and IPv4 address on the VPP interface."""
@@ -311,8 +312,7 @@ class VppInterface(metaclass=abc.ABCMeta):
         .. note:: Must be called before configuring IP4 addresses.
         """
         self.ip4_table_id = table_id
         .. note:: Must be called before configuring IP4 addresses.
         """
         self.ip4_table_id = table_id
-        self.test.vapi.sw_interface_set_table(
-            self.sw_if_index, 0, self.ip4_table_id)
+        self.test.vapi.sw_interface_set_table(self.sw_if_index, 0, self.ip4_table_id)
         return self
 
     def set_table_ip6(self, table_id):
         return self
 
     def set_table_ip6(self, table_id):
@@ -321,15 +321,14 @@ class VppInterface(metaclass=abc.ABCMeta):
         .. note:: Must be called before configuring IP6 addresses.
         """
         self.ip6_table_id = table_id
         .. note:: Must be called before configuring IP6 addresses.
         """
         self.ip6_table_id = table_id
-        self.test.vapi.sw_interface_set_table(
-            self.sw_if_index, 1, self.ip6_table_id)
+        self.test.vapi.sw_interface_set_table(self.sw_if_index, 1, self.ip6_table_id)
         return self
 
     def disable_ipv6_ra(self):
         """Configure IPv6 RA suppress on the VPP interface."""
         self.test.vapi.sw_interface_ip6nd_ra_config(
         return self
 
     def disable_ipv6_ra(self):
         """Configure IPv6 RA suppress on the VPP interface."""
         self.test.vapi.sw_interface_ip6nd_ra_config(
-            sw_if_index=self.sw_if_index,
-            suppress=1)
+            sw_if_index=self.sw_if_index, suppress=1
+        )
         return self
 
     def ip6_ra_config(self, no=0, suppress=0, send_unicast=0):
         return self
 
     def ip6_ra_config(self, no=0, suppress=0, send_unicast=0):
@@ -338,11 +337,13 @@ class VppInterface(metaclass=abc.ABCMeta):
             sw_if_index=self.sw_if_index,
             is_no=no,
             suppress=suppress,
             sw_if_index=self.sw_if_index,
             is_no=no,
             suppress=suppress,
-            send_unicast=send_unicast)
+            send_unicast=send_unicast,
+        )
         return self
 
         return self
 
-    def ip6_ra_prefix(self, prefix, is_no=0,
-                      off_link=0, no_autoconfig=0, use_default=0):
+    def ip6_ra_prefix(
+        self, prefix, is_no=0, off_link=0, no_autoconfig=0, use_default=0
+    ):
         """Configure IPv6 RA suppress on the VPP interface.
 
         prefix can be a string in the format of '<address>/<length_in_bits>'
         """Configure IPv6 RA suppress on the VPP interface.
 
         prefix can be a string in the format of '<address>/<length_in_bits>'
@@ -352,21 +353,23 @@ class VppInterface(metaclass=abc.ABCMeta):
             sw_if_index=self.sw_if_index,
             prefix=prefix,
             use_default=use_default,
             sw_if_index=self.sw_if_index,
             prefix=prefix,
             use_default=use_default,
-            off_link=off_link, no_autoconfig=no_autoconfig,
-            is_no=is_no)
+            off_link=off_link,
+            no_autoconfig=no_autoconfig,
+            is_no=is_no,
+        )
         return self
 
     def admin_up(self):
         """Put interface ADMIN-UP."""
         self.test.vapi.sw_interface_set_flags(
             self.sw_if_index,
         return self
 
     def admin_up(self):
         """Put interface ADMIN-UP."""
         self.test.vapi.sw_interface_set_flags(
             self.sw_if_index,
-            flags=VppEnum.vl_api_if_status_flags_t.IF_STATUS_API_FLAG_ADMIN_UP)
+            flags=VppEnum.vl_api_if_status_flags_t.IF_STATUS_API_FLAG_ADMIN_UP,
+        )
         return self
 
     def admin_down(self):
         """Put interface ADMIN-down."""
         return self
 
     def admin_down(self):
         """Put interface ADMIN-down."""
-        self.test.vapi.sw_interface_set_flags(self.sw_if_index,
-                                              flags=0)
+        self.test.vapi.sw_interface_set_flags(self.sw_if_index, flags=0)
         return self
 
     def link_up(self):
         return self
 
     def link_up(self):
@@ -379,14 +382,12 @@ class VppInterface(metaclass=abc.ABCMeta):
 
     def ip6_enable(self):
         """IPv6 Enable interface"""
 
     def ip6_enable(self):
         """IPv6 Enable interface"""
-        self.test.vapi.sw_interface_ip6_enable_disable(self.sw_if_index,
-                                                       enable=1)
+        self.test.vapi.sw_interface_ip6_enable_disable(self.sw_if_index, enable=1)
         return self
 
     def ip6_disable(self):
         """Put interface ADMIN-DOWN."""
         return self
 
     def ip6_disable(self):
         """Put interface ADMIN-DOWN."""
-        self.test.vapi.sw_interface_ip6_enable_disable(self.sw_if_index,
-                                                       enable=0)
+        self.test.vapi.sw_interface_ip6_enable_disable(self.sw_if_index, enable=0)
         return self
 
     def add_sub_if(self, sub_if):
         return self
 
     def add_sub_if(self, sub_if):
@@ -394,7 +395,7 @@ class VppInterface(metaclass=abc.ABCMeta):
 
         :param sub_if: sub-interface
         """
 
         :param sub_if: sub-interface
         """
-        if not hasattr(self, 'sub_if'):
+        if not hasattr(self, "sub_if"):
             self.sub_if = sub_if
         else:
             if isinstance(self.sub_if, list):
             self.sub_if = sub_if
         else:
             if isinstance(self.sub_if, list):
@@ -415,30 +416,30 @@ class VppInterface(metaclass=abc.ABCMeta):
 
     def is_ip4_entry_in_fib_dump(self, dump):
         for i in dump:
 
     def is_ip4_entry_in_fib_dump(self, dump):
         for i in dump:
-            n = IPv4Network(text_type("%s/%d" % (self.local_ip4,
-                                                 self.local_ip4_prefix_len)))
-            if i.route.prefix == n and \
-               i.route.table_id == self.ip4_table_id:
+            n = IPv4Network(
+                text_type("%s/%d" % (self.local_ip4, self.local_ip4_prefix_len))
+            )
+            if i.route.prefix == n and i.route.table_id == self.ip4_table_id:
                 return True
         return False
 
     def set_unnumbered(self, ip_sw_if_index):
                 return True
         return False
 
     def set_unnumbered(self, ip_sw_if_index):
-        """ Set the interface to unnumbered via ip_sw_if_index """
-        self.test.vapi.sw_interface_set_unnumbered(ip_sw_if_index,
-                                                   self.sw_if_index)
+        """Set the interface to unnumbered via ip_sw_if_index"""
+        self.test.vapi.sw_interface_set_unnumbered(ip_sw_if_index, self.sw_if_index)
         return self
 
     def unset_unnumbered(self, ip_sw_if_index):
         return self
 
     def unset_unnumbered(self, ip_sw_if_index):
-        """ Unset the interface to unnumbered via ip_sw_if_index """
-        self.test.vapi.sw_interface_set_unnumbered(ip_sw_if_index,
-                                                   self.sw_if_index, is_add=0)
+        """Unset the interface to unnumbered via ip_sw_if_index"""
+        self.test.vapi.sw_interface_set_unnumbered(
+            ip_sw_if_index, self.sw_if_index, is_add=0
+        )
         return self
 
     def set_proxy_arp(self, enable=1):
         return self
 
     def set_proxy_arp(self, enable=1):
-        """ Set the interface to enable/disable Proxy ARP """
+        """Set the interface to enable/disable Proxy ARP"""
         self.test.vapi.proxy_arp_intfc_enable_disable(
         self.test.vapi.proxy_arp_intfc_enable_disable(
-            sw_if_index=self.sw_if_index,
-            enable=enable)
+            sw_if_index=self.sw_if_index, enable=enable
+        )
         return self
 
     def query_vpp_config(self):
         return self
 
     def query_vpp_config(self):
@@ -447,8 +448,10 @@ class VppInterface(metaclass=abc.ABCMeta):
 
     def get_interface_config_from_dump(self, dump):
         for i in dump:
 
     def get_interface_config_from_dump(self, dump):
         for i in dump:
-            if i.interface_name.rstrip(' \t\r\n\0') == self.name and \
-                    i.sw_if_index == self.sw_if_index:
+            if (
+                i.interface_name.rstrip(" \t\r\n\0") == self.name
+                and i.sw_if_index == self.sw_if_index
+            ):
                 return i
         else:
             return None
                 return i
         else:
             return None
@@ -456,34 +459,25 @@ class VppInterface(metaclass=abc.ABCMeta):
     def is_interface_config_in_dump(self, dump):
         return self.get_interface_config_from_dump(dump) is not None
 
     def is_interface_config_in_dump(self, dump):
         return self.get_interface_config_from_dump(dump) is not None
 
-    def assert_interface_state(self, admin_up_down, link_up_down,
-                               expect_event=False):
+    def assert_interface_state(self, admin_up_down, link_up_down, expect_event=False):
         if expect_event:
         if expect_event:
-            event = self.test.vapi.wait_for_event(timeout=1,
-                                                  name='sw_interface_event')
-            self.test.assert_equal(event.sw_if_index, self.sw_if_index,
-                                   "sw_if_index")
-            self.test.assert_equal((event.flags & 1), admin_up_down,
-                                   "admin state")
-            self.test.assert_equal((event.flags & 2), link_up_down,
-                                   "link state")
+            event = self.test.vapi.wait_for_event(timeout=1, name="sw_interface_event")
+            self.test.assert_equal(event.sw_if_index, self.sw_if_index, "sw_if_index")
+            self.test.assert_equal((event.flags & 1), admin_up_down, "admin state")
+            self.test.assert_equal((event.flags & 2), link_up_down, "link state")
         dump = self.test.vapi.sw_interface_dump()
         if_state = self.get_interface_config_from_dump(dump)
         dump = self.test.vapi.sw_interface_dump()
         if_state = self.get_interface_config_from_dump(dump)
-        self.test.assert_equal((if_state.flags & 1), admin_up_down,
-                               "admin state")
-        self.test.assert_equal((if_state.flags & 2), link_up_down,
-                               "link state")
+        self.test.assert_equal((if_state.flags & 1), admin_up_down, "admin state")
+        self.test.assert_equal((if_state.flags & 2), link_up_down, "link state")
 
     def __str__(self):
         return self.name
 
     def get_rx_stats(self):
 
     def __str__(self):
         return self.name
 
     def get_rx_stats(self):
-        return (self.test.statistics["/if/rx"]
-                [:, self.sw_if_index].sum_packets())
+        return self.test.statistics["/if/rx"][:, self.sw_if_index].sum_packets()
 
     def get_tx_stats(self):
 
     def get_tx_stats(self):
-        return (self.test.statistics["/if/tx"]
-                [:, self.sw_if_index].sum_packets())
+        return self.test.statistics["/if/tx"][:, self.sw_if_index].sum_packets()
 
     def set_l3_mtu(self, mtu):
         self.test.vapi.sw_interface_set_mtu(self.sw_if_index, [mtu, 0, 0, 0])
 
     def set_l3_mtu(self, mtu):
         self.test.vapi.sw_interface_set_mtu(self.sw_if_index, [mtu, 0, 0, 0])
index 48b6b9d..24e7c19 100644 (file)
@@ -8,6 +8,7 @@ from ipaddress import ip_address
 from socket import AF_INET, AF_INET6
 from vpp_papi import VppEnum
 from vpp_object import VppObject
 from socket import AF_INET, AF_INET6
 from vpp_papi import VppEnum
 from vpp_object import VppObject
+
 try:
     text_type = unicode
 except NameError:
 try:
     text_type = unicode
 except NameError:
@@ -25,7 +26,7 @@ class DpoProto:
     DPO_PROTO_NSH = 5
 
 
     DPO_PROTO_NSH = 5
 
 
-INVALID_INDEX = 0xffffffff
+INVALID_INDEX = 0xFFFFFFFF
 
 
 def get_dpo_proto(addr):
 
 
 def get_dpo_proto(addr):
@@ -35,16 +36,16 @@ def get_dpo_proto(addr):
         return DpoProto.DPO_PROTO_IP4
 
 
         return DpoProto.DPO_PROTO_IP4
 
 
-class VppIpAddressUnion():
+class VppIpAddressUnion:
     def __init__(self, addr):
         self.addr = addr
         self.ip_addr = ip_address(text_type(self.addr))
 
     def encode(self):
         if self.version == 6:
     def __init__(self, addr):
         self.addr = addr
         self.ip_addr = ip_address(text_type(self.addr))
 
     def encode(self):
         if self.version == 6:
-            return {'ip6': self.ip_addr}
+            return {"ip6": self.ip_addr}
         else:
         else:
-            return {'ip4': self.ip_addr}
+            return {"ip4": self.ip_addr}
 
     @property
     def version(self):
 
     @property
     def version(self):
@@ -72,9 +73,11 @@ class VppIpAddressUnion():
             else:
                 return self.ip_addr == other.ip6
         else:
             else:
                 return self.ip_addr == other.ip6
         else:
-            raise Exception("Comparing VppIpAddressUnions:%s"
-                            " with incomparable type: %s",
-                            self, other)
+            raise Exception(
+                "Comparing VppIpAddressUnions:%s with incomparable type: %s",
+                self,
+                other,
+            )
 
     def __ne__(self, other):
         return not (self == other)
 
     def __ne__(self, other):
         return not (self == other)
@@ -83,26 +86,22 @@ class VppIpAddressUnion():
         return str(self.ip_addr)
 
 
         return str(self.ip_addr)
 
 
-class VppIpMPrefix():
+class VppIpMPrefix:
     def __init__(self, saddr, gaddr, glen):
         self.saddr = saddr
         self.gaddr = gaddr
         self.glen = glen
     def __init__(self, saddr, gaddr, glen):
         self.saddr = saddr
         self.gaddr = gaddr
         self.glen = glen
-        if ip_address(self.saddr).version != \
-           ip_address(self.gaddr).version:
-            raise ValueError('Source and group addresses must be of the '
-                             'same address family.')
+        if ip_address(self.saddr).version != ip_address(self.gaddr).version:
+            raise ValueError(
+                "Source and group addresses must be of the same address family."
+            )
 
     def encode(self):
         return {
 
     def encode(self):
         return {
-            'af': ip_address(self.gaddr).vapi_af,
-            'grp_address': {
-                ip_address(self.gaddr).vapi_af_name: self.gaddr
-            },
-            'src_address': {
-                ip_address(self.saddr).vapi_af_name: self.saddr
-            },
-            'grp_address_length': self.glen,
+            "af": ip_address(self.gaddr).vapi_af,
+            "grp_address": {ip_address(self.gaddr).vapi_af_name: self.gaddr},
+            "src_address": {ip_address(self.saddr).vapi_af_name: self.saddr},
+            "grp_address_length": self.glen,
         }
 
     @property
         }
 
     @property
@@ -118,21 +117,29 @@ class VppIpMPrefix():
 
     def __eq__(self, other):
         if isinstance(other, self.__class__):
 
     def __eq__(self, other):
         if isinstance(other, self.__class__):
-            return (self.glen == other.glen and
-                    self.saddr == other.gaddr and
-                    self.saddr == other.saddr)
-        elif (hasattr(other, "grp_address_length") and
-              hasattr(other, "grp_address") and
-              hasattr(other, "src_address")):
+            return (
+                self.glen == other.glen
+                and self.saddr == other.gaddr
+                and self.saddr == other.saddr
+            )
+        elif (
+            hasattr(other, "grp_address_length")
+            and hasattr(other, "grp_address")
+            and hasattr(other, "src_address")
+        ):
             # vl_api_mprefix_t
             if 4 == self.version:
             # vl_api_mprefix_t
             if 4 == self.version:
-                return (self.glen == other.grp_address_length and
-                        self.gaddr == str(other.grp_address.ip4) and
-                        self.saddr == str(other.src_address.ip4))
+                return (
+                    self.glen == other.grp_address_length
+                    and self.gaddr == str(other.grp_address.ip4)
+                    and self.saddr == str(other.src_address.ip4)
+                )
             else:
             else:
-                return (self.glen == other.grp_address_length and
-                        self.gaddr == str(other.grp_address.ip6) and
-                        self.saddr == str(other.src_address.ip6))
+                return (
+                    self.glen == other.grp_address_length
+                    and self.gaddr == str(other.grp_address.ip6)
+                    and self.saddr == str(other.src_address.ip6)
+                )
         return NotImplemented
 
 
         return NotImplemented
 
 
@@ -143,12 +150,14 @@ class VppIpPuntPolicer(VppObject):
         self._is_ip6 = is_ip6
 
     def add_vpp_config(self):
         self._is_ip6 = is_ip6
 
     def add_vpp_config(self):
-        self._test.vapi.ip_punt_police(policer_index=self._policer_index,
-                                       is_ip6=self._is_ip6, is_add=True)
+        self._test.vapi.ip_punt_police(
+            policer_index=self._policer_index, is_ip6=self._is_ip6, is_add=True
+        )
 
     def remove_vpp_config(self):
 
     def remove_vpp_config(self):
-        self._test.vapi.ip_punt_police(policer_index=self._policer_index,
-                                       is_ip6=self._is_ip6, is_add=False)
+        self._test.vapi.ip_punt_police(
+            policer_index=self._policer_index, is_ip6=self._is_ip6, is_add=False
+        )
 
     def query_vpp_config(self):
         NotImplemented
 
     def query_vpp_config(self):
         NotImplemented
@@ -162,8 +171,11 @@ class VppIpPuntRedirect(VppObject):
         self._nh_addr = ip_address(nh_addr)
 
     def encode(self):
         self._nh_addr = ip_address(nh_addr)
 
     def encode(self):
-        return {"rx_sw_if_index": self._rx_index,
-                "tx_sw_if_index": self._tx_index, "nh": self._nh_addr}
+        return {
+            "rx_sw_if_index": self._rx_index,
+            "tx_sw_if_index": self._tx_index,
+            "nh": self._nh_addr,
+        }
 
     def add_vpp_config(self):
         self._test.vapi.ip_punt_redirect(punt=self.encode(), is_add=True)
 
     def add_vpp_config(self):
         self._test.vapi.ip_punt_redirect(punt=self.encode(), is_add=True)
@@ -176,7 +188,8 @@ class VppIpPuntRedirect(VppObject):
     def get_vpp_config(self):
         is_ipv6 = True if self._nh_addr.version == 6 else False
         return self._test.vapi.ip_punt_redirect_dump(
     def get_vpp_config(self):
         is_ipv6 = True if self._nh_addr.version == 6 else False
         return self._test.vapi.ip_punt_redirect_dump(
-            sw_if_index=self._rx_index, is_ipv6=is_ipv6)
+            sw_if_index=self._rx_index, is_ipv6=is_ipv6
+        )
 
     def query_vpp_config(self):
         if self.get_vpp_config():
 
     def query_vpp_config(self):
         if self.get_vpp_config():
@@ -192,39 +205,38 @@ class VppIpPathMtu(VppObject):
         self.table_id = table_id
 
     def add_vpp_config(self):
         self.table_id = table_id
 
     def add_vpp_config(self):
-        self._test.vapi.ip_path_mtu_update(pmtu={'nh': self.nh,
-                                                 'table_id': self.table_id,
-                                                 'path_mtu': self.pmtu})
+        self._test.vapi.ip_path_mtu_update(
+            pmtu={"nh": self.nh, "table_id": self.table_id, "path_mtu": self.pmtu}
+        )
         self._test.registry.register(self, self._test.logger)
         return self
 
     def modify(self, pmtu):
         self.pmtu = pmtu
         self._test.registry.register(self, self._test.logger)
         return self
 
     def modify(self, pmtu):
         self.pmtu = pmtu
-        self._test.vapi.ip_path_mtu_update(pmtu={'nh': self.nh,
-                                                 'table_id': self.table_id,
-                                                 'path_mtu': self.pmtu})
+        self._test.vapi.ip_path_mtu_update(
+            pmtu={"nh": self.nh, "table_id": self.table_id, "path_mtu": self.pmtu}
+        )
         return self
 
     def remove_vpp_config(self):
         return self
 
     def remove_vpp_config(self):
-        self._test.vapi.ip_path_mtu_update(pmtu={'nh': self.nh,
-                                                 'table_id': self.table_id,
-                                                 'path_mtu': 0})
+        self._test.vapi.ip_path_mtu_update(
+            pmtu={"nh": self.nh, "table_id": self.table_id, "path_mtu": 0}
+        )
 
     def query_vpp_config(self):
 
     def query_vpp_config(self):
-        ds = list(self._test.vapi.vpp.details_iter(
-            self._test.vapi.ip_path_mtu_get))
+        ds = list(self._test.vapi.vpp.details_iter(self._test.vapi.ip_path_mtu_get))
 
         for d in ds:
 
         for d in ds:
-            if self.nh == str(d.pmtu.nh) \
-               and self.table_id == d.pmtu.table_id \
-               and self.pmtu == d.pmtu.path_mtu:
+            if (
+                self.nh == str(d.pmtu.nh)
+                and self.table_id == d.pmtu.table_id
+                and self.pmtu == d.pmtu.path_mtu
+            ):
                 return True
         return False
 
     def object_id(self):
                 return True
         return False
 
     def object_id(self):
-        return ("ip-path-mtu-%d-%s-%d" % (self.table_id,
-                                          self.nh,
-                                          self.pmtu))
+        return "ip-path-mtu-%d-%s-%d" % (self.table_id, self.nh, self.pmtu)
 
     def __str__(self):
         return self.object_id()
 
     def __str__(self):
         return self.object_id()
index f5e5a88..06a963c 100644 (file)
@@ -5,13 +5,12 @@
 """
 
 from vpp_object import VppObject
 """
 
 from vpp_object import VppObject
-from vpp_ip import DpoProto, INVALID_INDEX, VppIpAddressUnion, \
-    VppIpMPrefix
+from vpp_ip import DpoProto, INVALID_INDEX, VppIpAddressUnion, VppIpMPrefix
 from ipaddress import ip_network, ip_address, IPv4Network, IPv6Network
 from vpp_papi_exceptions import UnexpectedApiReturnValueError
 
 # from vnet/vnet/mpls/mpls_types.h
 from ipaddress import ip_network, ip_address, IPv4Network, IPv6Network
 from vpp_papi_exceptions import UnexpectedApiReturnValueError
 
 # from vnet/vnet/mpls/mpls_types.h
-MPLS_IETF_MAX_LABEL = 0xfffff
+MPLS_IETF_MAX_LABEL = 0xFFFFF
 MPLS_LABEL_INVALID = MPLS_IETF_MAX_LABEL + 1
 
 try:
 MPLS_LABEL_INVALID = MPLS_IETF_MAX_LABEL + 1
 
 try:
@@ -85,8 +84,7 @@ def find_route(test, addr, len, table_id=0, sw_if_index=None):
         routes = test.vapi.ip_route_dump(table_id, True)
 
     for e in routes:
         routes = test.vapi.ip_route_dump(table_id, True)
 
     for e in routes:
-        if table_id == e.route.table_id \
-           and str(e.route.prefix) == str(prefix):
+        if table_id == e.route.table_id and str(e.route.prefix) == str(prefix):
             if not sw_if_index:
                 return True
             else:
             if not sw_if_index:
                 return True
             else:
@@ -95,15 +93,14 @@ def find_route(test, addr, len, table_id=0, sw_if_index=None):
                 if e.route.n_paths != 1:
                     return False
                 else:
                 if e.route.n_paths != 1:
                     return False
                 else:
-                    return (e.route.paths[0].sw_if_index == sw_if_index)
+                    return e.route.paths[0].sw_if_index == sw_if_index
 
     return False
 
 
 def find_route_in_dump(dump, route, table):
     for r in dump:
 
     return False
 
 
 def find_route_in_dump(dump, route, table):
     for r in dump:
-        if table.table_id == r.route.table_id \
-           and route.prefix == r.route.prefix:
+        if table.table_id == r.route.table_id and route.prefix == r.route.prefix:
             if len(route.paths) == r.route.n_paths:
                 return True
     return False
             if len(route.paths) == r.route.n_paths:
                 return True
     return False
@@ -111,17 +108,13 @@ def find_route_in_dump(dump, route, table):
 
 def find_mroute_in_dump(dump, route, table):
     for r in dump:
 
 def find_mroute_in_dump(dump, route, table):
     for r in dump:
-        if table.table_id == r.route.table_id \
-           and route.prefix == r.route.prefix:
+        if table.table_id == r.route.table_id and route.prefix == r.route.prefix:
             return True
     return False
 
 
             return True
     return False
 
 
-def find_mroute(test, grp_addr, src_addr, grp_addr_len,
-                table_id=0):
-    ip_mprefix = VppIpMPrefix(text_type(src_addr),
-                              text_type(grp_addr),
-                              grp_addr_len)
+def find_mroute(test, grp_addr, src_addr, grp_addr_len, table_id=0):
+    ip_mprefix = VppIpMPrefix(text_type(src_addr), text_type(grp_addr), grp_addr_len)
 
     if 4 == ip_mprefix.version:
         routes = test.vapi.ip_mroute_dump(table_id, False)
 
     if 4 == ip_mprefix.version:
         routes = test.vapi.ip_mroute_dump(table_id, False)
@@ -137,16 +130,18 @@ def find_mroute(test, grp_addr, src_addr, grp_addr_len,
 def find_mpls_route(test, table_id, label, eos_bit, paths=None):
     dump = test.vapi.mpls_route_dump(table_id)
     for e in dump:
 def find_mpls_route(test, table_id, label, eos_bit, paths=None):
     dump = test.vapi.mpls_route_dump(table_id)
     for e in dump:
-        if label == e.mr_route.mr_label \
-           and eos_bit == e.mr_route.mr_eos \
-           and table_id == e.mr_route.mr_table_id:
+        if (
+            label == e.mr_route.mr_label
+            and eos_bit == e.mr_route.mr_eos
+            and table_id == e.mr_route.mr_table_id
+        ):
             if not paths:
                 return True
             else:
             if not paths:
                 return True
             else:
-                if (len(paths) != len(e.mr_route.mr_paths)):
+                if len(paths) != len(e.mr_route.mr_paths):
                     return False
                 for i in range(len(paths)):
                     return False
                 for i in range(len(paths)):
-                    if (paths[i] != e.mr_route.mr_paths[i]):
+                    if paths[i] != e.mr_route.mr_paths[i]:
                         return False
                 return True
     return False
                         return False
                 return True
     return False
@@ -156,54 +151,49 @@ def fib_interface_ip_prefix(test, addr, len, sw_if_index):
     # can't use python net here since we need the host bits in the prefix
     prefix = "%s/%d" % (addr, len)
     addrs = test.vapi.ip_address_dump(
     # can't use python net here since we need the host bits in the prefix
     prefix = "%s/%d" % (addr, len)
     addrs = test.vapi.ip_address_dump(
-        sw_if_index,
-        is_ipv6=(6 == ip_address(addr).version))
+        sw_if_index, is_ipv6=(6 == ip_address(addr).version)
+    )
 
     for a in addrs:
 
     for a in addrs:
-        if a.sw_if_index == sw_if_index and \
-           str(a.prefix) == prefix:
+        if a.sw_if_index == sw_if_index and str(a.prefix) == prefix:
             return True
     return False
 
 
 class VppIpTable(VppObject):
             return True
     return False
 
 
 class VppIpTable(VppObject):
-
-    def __init__(self,
-                 test,
-                 table_id,
-                 is_ip6=0,
-                 register=True):
+    def __init__(self, test, table_id, is_ip6=0, register=True):
         self._test = test
         self.table_id = table_id
         self.is_ip6 = is_ip6
         self.register = register
 
     def add_vpp_config(self):
         self._test = test
         self.table_id = table_id
         self.is_ip6 = is_ip6
         self.register = register
 
     def add_vpp_config(self):
-        self._test.vapi.ip_table_add_del(is_add=1,
-                                         table={'is_ip6': self.is_ip6,
-                                                'table_id': self.table_id})
+        self._test.vapi.ip_table_add_del(
+            is_add=1, table={"is_ip6": self.is_ip6, "table_id": self.table_id}
+        )
         if self.register:
             self._test.registry.register(self, self._test.logger)
         return self
 
     def remove_vpp_config(self):
         if self.register:
             self._test.registry.register(self, self._test.logger)
         return self
 
     def remove_vpp_config(self):
-        self._test.vapi.ip_table_add_del(is_add=0,
-                                         table={'is_ip6': self.is_ip6,
-                                                'table_id': self.table_id})
+        self._test.vapi.ip_table_add_del(
+            is_add=0, table={"is_ip6": self.is_ip6, "table_id": self.table_id}
+        )
 
     def replace_begin(self):
         self._test.vapi.ip_table_replace_begin(
 
     def replace_begin(self):
         self._test.vapi.ip_table_replace_begin(
-            table={'is_ip6': self.is_ip6,
-                   'table_id': self.table_id})
+            table={"is_ip6": self.is_ip6, "table_id": self.table_id}
+        )
 
     def replace_end(self):
         self._test.vapi.ip_table_replace_end(
 
     def replace_end(self):
         self._test.vapi.ip_table_replace_end(
-            table={'is_ip6': self.is_ip6,
-                   'table_id': self.table_id})
+            table={"is_ip6": self.is_ip6, "table_id": self.table_id}
+        )
 
     def flush(self):
 
     def flush(self):
-        self._test.vapi.ip_table_flush(table={'is_ip6': self.is_ip6,
-                                              'table_id': self.table_id})
+        self._test.vapi.ip_table_flush(
+            table={"is_ip6": self.is_ip6, "table_id": self.table_id}
+        )
 
     def dump(self):
         return self._test.vapi.ip_route_dump(self.table_id, self.is_ip6)
 
     def dump(self):
         return self._test.vapi.ip_route_dump(self.table_id, self.is_ip6)
@@ -216,19 +206,15 @@ class VppIpTable(VppObject):
             # the default table always exists
             return False
         # find the default route
             # the default table always exists
             return False
         # find the default route
-        return find_route(self._test,
-                          "::" if self.is_ip6 else "0.0.0.0",
-                          0,
-                          self.table_id)
+        return find_route(
+            self._test, "::" if self.is_ip6 else "0.0.0.0", 0, self.table_id
+        )
 
     def object_id(self):
 
     def object_id(self):
-        return ("table-%s-%d" %
-                ("v6" if self.is_ip6 == 1 else "v4",
-                 self.table_id))
+        return "table-%s-%d" % ("v6" if self.is_ip6 == 1 else "v4", self.table_id)
 
 
 class VppIpInterfaceAddress(VppObject):
 
 
 class VppIpInterfaceAddress(VppObject):
-
     def __init__(self, test, intf, addr, len, bind=None):
         self._test = test
         self.intf = intf
     def __init__(self, test, intf, addr, len, bind=None):
         self._test = test
         self.intf = intf
@@ -242,55 +228,57 @@ class VppIpInterfaceAddress(VppObject):
 
     def add_vpp_config(self):
         self._test.vapi.sw_interface_add_del_address(
 
     def add_vpp_config(self):
         self._test.vapi.sw_interface_add_del_address(
-            sw_if_index=self.intf.sw_if_index, prefix=self.prefix,
-            is_add=1)
+            sw_if_index=self.intf.sw_if_index, prefix=self.prefix, is_add=1
+        )
         self._test.registry.register(self, self._test.logger)
         return self
 
     def remove_vpp_config(self):
         self._test.vapi.sw_interface_add_del_address(
         self._test.registry.register(self, self._test.logger)
         return self
 
     def remove_vpp_config(self):
         self._test.vapi.sw_interface_add_del_address(
-            sw_if_index=self.intf.sw_if_index, prefix=self.prefix,
-            is_add=0)
+            sw_if_index=self.intf.sw_if_index, prefix=self.prefix, is_add=0
+        )
 
     def query_vpp_config(self):
         # search for the IP address mapping and the two expected
         # FIB entries
         v = ip_address(self.addr).version
 
 
     def query_vpp_config(self):
         # search for the IP address mapping and the two expected
         # FIB entries
         v = ip_address(self.addr).version
 
-        if ((v == 4 and self.len < 31) or (v == 6 and self.len < 127)):
-            return (fib_interface_ip_prefix(self._test,
-                                            self.addr,
-                                            self.len,
-                                            self.intf.sw_if_index) &
-                    find_route(self._test,
-                               self.addr,
-                               self.len,
-                               table_id=self.table_id,
-                               sw_if_index=self.intf.sw_if_index) &
-                    find_route(self._test,
-                               self.addr,
-                               self.host_len,
-                               table_id=self.table_id,
-                               sw_if_index=self.intf.sw_if_index))
+        if (v == 4 and self.len < 31) or (v == 6 and self.len < 127):
+            return (
+                fib_interface_ip_prefix(
+                    self._test, self.addr, self.len, self.intf.sw_if_index
+                )
+                & find_route(
+                    self._test,
+                    self.addr,
+                    self.len,
+                    table_id=self.table_id,
+                    sw_if_index=self.intf.sw_if_index,
+                )
+                & find_route(
+                    self._test,
+                    self.addr,
+                    self.host_len,
+                    table_id=self.table_id,
+                    sw_if_index=self.intf.sw_if_index,
+                )
+            )
         else:
         else:
-            return (fib_interface_ip_prefix(self._test,
-                                            self.addr,
-                                            self.len,
-                                            self.intf.sw_if_index) &
-                    find_route(self._test,
-                               self.addr,
-                               self.host_len,
-                               table_id=self.table_id,
-                               sw_if_index=self.intf.sw_if_index))
+            return fib_interface_ip_prefix(
+                self._test, self.addr, self.len, self.intf.sw_if_index
+            ) & find_route(
+                self._test,
+                self.addr,
+                self.host_len,
+                table_id=self.table_id,
+                sw_if_index=self.intf.sw_if_index,
+            )
 
     def object_id(self):
 
     def object_id(self):
-        return "interface-ip-%s-%d-%s" % (self.intf,
-                                          self.table_id,
-                                          self.prefix)
+        return "interface-ip-%s-%d-%s" % (self.intf, self.table_id, self.prefix)
 
 
 class VppIp6LinkLocalAddress(VppObject):
 
 
 class VppIp6LinkLocalAddress(VppObject):
-
     def __init__(self, test, intf, addr):
         self._test = test
         self.intf = intf
     def __init__(self, test, intf, addr):
         self._test = test
         self.intf = intf
@@ -298,7 +286,8 @@ class VppIp6LinkLocalAddress(VppObject):
 
     def add_vpp_config(self):
         self._test.vapi.sw_interface_ip6_set_link_local_address(
 
     def add_vpp_config(self):
         self._test.vapi.sw_interface_ip6_set_link_local_address(
-            sw_if_index=self.intf.sw_if_index, ip=self.addr)
+            sw_if_index=self.intf.sw_if_index, ip=self.addr
+        )
         self._test.registry.register(self, self._test.logger)
         return self
 
         self._test.registry.register(self, self._test.logger)
         return self
 
@@ -315,7 +304,6 @@ class VppIp6LinkLocalAddress(VppObject):
 
 
 class VppIpInterfaceBind(VppObject):
 
 
 class VppIpInterfaceBind(VppObject):
-
     def __init__(self, test, intf, table):
         self._test = test
         self.intf = intf
     def __init__(self, test, intf, table):
         self._test = test
         self.intf = intf
@@ -341,9 +329,12 @@ class VppIpInterfaceBind(VppObject):
         if 0 == self.table.table_id:
             return False
         try:
         if 0 == self.table.table_id:
             return False
         try:
-            return self._test.vapi.sw_interface_get_table(
-                self.intf.sw_if_index,
-                self.table.is_ip6).vrf_id == self.table.table_id
+            return (
+                self._test.vapi.sw_interface_get_table(
+                    self.intf.sw_if_index, self.table.is_ip6
+                ).vrf_id
+                == self.table.table_id
+            )
         except UnexpectedApiReturnValueError as e:
             if e.retval == -2:  # INVALID_SW_IF_INDEX
                 return False
         except UnexpectedApiReturnValueError as e:
             if e.retval == -2:  # INVALID_SW_IF_INDEX
                 return False
@@ -362,22 +353,28 @@ class VppMplsLabel:
 
     def encode(self):
         is_uniform = 0 if self.mode is MplsLspMode.PIPE else 1
 
     def encode(self):
         is_uniform = 0 if self.mode is MplsLspMode.PIPE else 1
-        return {'label': self.value,
-                'ttl': self.ttl,
-                'exp': self.exp,
-                'is_uniform': is_uniform}
+        return {
+            "label": self.value,
+            "ttl": self.ttl,
+            "exp": self.exp,
+            "is_uniform": is_uniform,
+        }
 
     def __eq__(self, other):
         if isinstance(other, self.__class__):
 
     def __eq__(self, other):
         if isinstance(other, self.__class__):
-            return (self.value == other.value and
-                    self.ttl == other.ttl and
-                    self.exp == other.exp and
-                    self.mode == other.mode)
-        elif hasattr(other, 'label'):
-            return (self.value == other.label and
-                    self.ttl == other.ttl and
-                    self.exp == other.exp and
-                    (self.mode == MplsLspMode.UNIFORM) == other.is_uniform)
+            return (
+                self.value == other.value
+                and self.ttl == other.ttl
+                and self.exp == other.exp
+                and self.mode == other.mode
+            )
+        elif hasattr(other, "label"):
+            return (
+                self.value == other.label
+                and self.ttl == other.ttl
+                and self.exp == other.exp
+                and (self.mode == MplsLspMode.UNIFORM) == other.is_uniform
+            )
         else:
             return False
 
         else:
             return False
 
@@ -386,20 +383,18 @@ class VppMplsLabel:
 
 
 class VppFibPathNextHop:
 
 
 class VppFibPathNextHop:
-    def __init__(self, addr,
-                 via_label=MPLS_LABEL_INVALID,
-                 next_hop_id=INVALID_INDEX):
+    def __init__(self, addr, via_label=MPLS_LABEL_INVALID, next_hop_id=INVALID_INDEX):
         self.addr = VppIpAddressUnion(addr)
         self.via_label = via_label
         self.obj_id = next_hop_id
 
     def encode(self):
         if self.via_label is not MPLS_LABEL_INVALID:
         self.addr = VppIpAddressUnion(addr)
         self.via_label = via_label
         self.obj_id = next_hop_id
 
     def encode(self):
         if self.via_label is not MPLS_LABEL_INVALID:
-            return {'via_label': self.via_label}
+            return {"via_label": self.via_label}
         if self.obj_id is not INVALID_INDEX:
         if self.obj_id is not INVALID_INDEX:
-            return {'obj_id': self.obj_id}
+            return {"obj_id": self.obj_id}
         else:
         else:
-            return {'address': self.addr.encode()}
+            return {"address": self.addr.encode()}
 
     def proto(self):
         if self.via_label is MPLS_LABEL_INVALID:
 
     def proto(self):
         if self.via_label is MPLS_LABEL_INVALID:
@@ -411,25 +406,27 @@ class VppFibPathNextHop:
         if not isinstance(other, self.__class__):
             # try the other instance's __eq__.
             return NotImplemented
         if not isinstance(other, self.__class__):
             # try the other instance's __eq__.
             return NotImplemented
-        return (self.addr == other.addr and
-                self.via_label == other.via_label and
-                self.obj_id == other.obj_id)
+        return (
+            self.addr == other.addr
+            and self.via_label == other.via_label
+            and self.obj_id == other.obj_id
+        )
 
 
 class VppRoutePath:
 
 
 class VppRoutePath:
-
     def __init__(
     def __init__(
-            self,
-            nh_addr,
-            nh_sw_if_index,
-            nh_table_id=0,
-            labels=[],
-            nh_via_label=MPLS_LABEL_INVALID,
-            rpf_id=0,
-            next_hop_id=INVALID_INDEX,
-            proto=None,
-            flags=FibPathFlags.FIB_PATH_FLAG_NONE,
-            type=FibPathType.FIB_PATH_TYPE_NORMAL):
+        self,
+        nh_addr,
+        nh_sw_if_index,
+        nh_table_id=0,
+        labels=[],
+        nh_via_label=MPLS_LABEL_INVALID,
+        rpf_id=0,
+        next_hop_id=INVALID_INDEX,
+        proto=None,
+        flags=FibPathFlags.FIB_PATH_FLAG_NONE,
+        type=FibPathType.FIB_PATH_TYPE_NORMAL,
+    ):
         self.nh_itf = nh_sw_if_index
         self.nh_table_id = nh_table_id
         self.nh_labels = labels
         self.nh_itf = nh_sw_if_index
         self.nh_table_id = nh_table_id
         self.nh_labels = labels
@@ -451,36 +448,37 @@ class VppRoutePath:
             if type(l) == VppMplsLabel:
                 lstack.append(l.encode())
             else:
             if type(l) == VppMplsLabel:
                 lstack.append(l.encode())
             else:
-                lstack.append({'label': l,
-                               'ttl': 255})
-        while (len(lstack) < 16):
+                lstack.append({"label": l, "ttl": 255})
+        while len(lstack) < 16:
             lstack.append({})
 
         return lstack
 
     def encode(self):
             lstack.append({})
 
         return lstack
 
     def encode(self):
-        return {'weight': 1,
-                'preference': 0,
-                'table_id': self.nh_table_id,
-                'nh': self.nh.encode(),
-                'next_hop_id': self.next_hop_id,
-                'sw_if_index': self.nh_itf,
-                'rpf_id': self.rpf_id,
-                'proto': self.proto,
-                'type': self.type,
-                'flags': self.flags,
-                'n_labels': len(self.nh_labels),
-                'label_stack': self.encode_labels()}
+        return {
+            "weight": 1,
+            "preference": 0,
+            "table_id": self.nh_table_id,
+            "nh": self.nh.encode(),
+            "next_hop_id": self.next_hop_id,
+            "sw_if_index": self.nh_itf,
+            "rpf_id": self.rpf_id,
+            "proto": self.proto,
+            "type": self.type,
+            "flags": self.flags,
+            "n_labels": len(self.nh_labels),
+            "label_stack": self.encode_labels(),
+        }
 
     def __eq__(self, other):
         if isinstance(other, self.__class__):
             return self.nh == other.nh
 
     def __eq__(self, other):
         if isinstance(other, self.__class__):
             return self.nh == other.nh
-        elif hasattr(other, 'sw_if_index'):
+        elif hasattr(other, "sw_if_index"):
             # vl_api_fib_path_t
             # vl_api_fib_path_t
-            if (len(self.nh_labels) != other.n_labels):
+            if len(self.nh_labels) != other.n_labels:
                 return False
             for i in range(len(self.nh_labels)):
                 return False
             for i in range(len(self.nh_labels)):
-                if (self.nh_labels[i] != other.label_stack[i]):
+                if self.nh_labels[i] != other.label_stack[i]:
                     return False
             return self.nh_itf == other.sw_if_index
         else:
                     return False
             return self.nh_itf == other.sw_if_index
         else:
@@ -491,26 +489,28 @@ class VppRoutePath:
 
 
 class VppMRoutePath(VppRoutePath):
 
 
 class VppMRoutePath(VppRoutePath):
-
-    def __init__(self, nh_sw_if_index, flags,
-                 nh=None,
-                 proto=FibPathProto.FIB_PATH_NH_PROTO_IP4,
-                 type=FibPathType.FIB_PATH_TYPE_NORMAL,
-                 bier_imp=INVALID_INDEX):
+    def __init__(
+        self,
+        nh_sw_if_index,
+        flags,
+        nh=None,
+        proto=FibPathProto.FIB_PATH_NH_PROTO_IP4,
+        type=FibPathType.FIB_PATH_TYPE_NORMAL,
+        bier_imp=INVALID_INDEX,
+    ):
         if not nh:
         if not nh:
-            nh = "::" if proto is FibPathProto.FIB_PATH_NH_PROTO_IP6 \
-                 else "0.0.0.0"
-        super(VppMRoutePath, self).__init__(nh,
-                                            nh_sw_if_index,
-                                            proto=proto,
-                                            type=type,
-                                            next_hop_id=bier_imp)
+            nh = "::" if proto is FibPathProto.FIB_PATH_NH_PROTO_IP6 else "0.0.0.0"
+        super(VppMRoutePath, self).__init__(
+            nh, nh_sw_if_index, proto=proto, type=type, next_hop_id=bier_imp
+        )
         self.nh_i_flags = flags
         self.bier_imp = bier_imp
 
     def encode(self):
         self.nh_i_flags = flags
         self.bier_imp = bier_imp
 
     def encode(self):
-        return {'path': super(VppMRoutePath, self).encode(),
-                'itf_flags': self.nh_i_flags}
+        return {
+            "path": super(VppMRoutePath, self).encode(),
+            "itf_flags": self.nh_i_flags,
+        }
 
 
 class VppIpRoute(VppObject):
 
 
 class VppIpRoute(VppObject):
@@ -518,8 +518,9 @@ class VppIpRoute(VppObject):
     IP Route
     """
 
     IP Route
     """
 
-    def __init__(self, test, dest_addr,
-                 dest_addr_len, paths, table_id=0, register=True):
+    def __init__(
+        self, test, dest_addr, dest_addr_len, paths, table_id=0, register=True
+    ):
         self._test = test
         self.paths = paths
         self.table_id = table_id
         self._test = test
         self.paths = paths
         self.table_id = table_id
@@ -533,8 +534,7 @@ class VppIpRoute(VppObject):
             self.encoded_paths.append(path.encode())
 
     def __eq__(self, other):
             self.encoded_paths.append(path.encode())
 
     def __eq__(self, other):
-        if self.table_id == other.table_id and \
-           self.prefix == other.prefix:
+        if self.table_id == other.table_id and self.prefix == other.prefix:
             return True
         return False
 
             return True
         return False
 
@@ -545,24 +545,28 @@ class VppIpRoute(VppObject):
             self.encoded_paths.append(path.encode())
         self.modified = True
 
             self.encoded_paths.append(path.encode())
         self.modified = True
 
-        self._test.vapi.ip_route_add_del(route={'table_id': self.table_id,
-                                                'prefix': self.prefix,
-                                                'n_paths': len(
-                                                    self.encoded_paths),
-                                                'paths': self.encoded_paths,
-                                                },
-                                         is_add=1,
-                                         is_multipath=0)
+        self._test.vapi.ip_route_add_del(
+            route={
+                "table_id": self.table_id,
+                "prefix": self.prefix,
+                "n_paths": len(self.encoded_paths),
+                "paths": self.encoded_paths,
+            },
+            is_add=1,
+            is_multipath=0,
+        )
 
     def add_vpp_config(self):
         r = self._test.vapi.ip_route_add_del(
 
     def add_vpp_config(self):
         r = self._test.vapi.ip_route_add_del(
-            route={'table_id': self.table_id,
-                   'prefix': self.prefix,
-                   'n_paths': len(self.encoded_paths),
-                   'paths': self.encoded_paths,
-                   },
+            route={
+                "table_id": self.table_id,
+                "prefix": self.prefix,
+                "n_paths": len(self.encoded_paths),
+                "paths": self.encoded_paths,
+            },
             is_add=1,
             is_add=1,
-            is_multipath=0)
+            is_multipath=0,
+        )
         self.stats_index = r.stats_index
         if self.register:
             self._test.registry.register(self, self._test.logger)
         self.stats_index = r.stats_index
         if self.register:
             self._test.registry.register(self, self._test.logger)
@@ -575,32 +579,36 @@ class VppIpRoute(VppObject):
         # passing no paths and multipath=0
         if self.modified:
             self._test.vapi.ip_route_add_del(
         # passing no paths and multipath=0
         if self.modified:
             self._test.vapi.ip_route_add_del(
-                route={'table_id': self.table_id,
-                       'prefix': self.prefix,
-                       'n_paths': len(
-                           self.encoded_paths),
-                       'paths': self.encoded_paths},
+                route={
+                    "table_id": self.table_id,
+                    "prefix": self.prefix,
+                    "n_paths": len(self.encoded_paths),
+                    "paths": self.encoded_paths,
+                },
                 is_add=0,
                 is_add=0,
-                is_multipath=1)
+                is_multipath=1,
+            )
         else:
             self._test.vapi.ip_route_add_del(
         else:
             self._test.vapi.ip_route_add_del(
-                route={'table_id': self.table_id,
-                       'prefix': self.prefix,
-                       'n_paths': 0},
+                route={"table_id": self.table_id, "prefix": self.prefix, "n_paths": 0},
                 is_add=0,
                 is_add=0,
-                is_multipath=0)
+                is_multipath=0,
+            )
 
     def query_vpp_config(self):
 
     def query_vpp_config(self):
-        return find_route(self._test,
-                          self.prefix.network_address,
-                          self.prefix.prefixlen,
-                          self.table_id)
+        return find_route(
+            self._test,
+            self.prefix.network_address,
+            self.prefix.prefixlen,
+            self.table_id,
+        )
 
     def object_id(self):
 
     def object_id(self):
-        return ("%s:table-%d-%s" % (
-            'ip6-route' if self.prefix.version == 6 else 'ip-route',
-                self.table_id,
-                self.prefix))
+        return "%s:table-%d-%s" % (
+            "ip6-route" if self.prefix.version == 6 else "ip-route",
+            self.table_id,
+            self.prefix,
+        )
 
     def get_stats_to(self):
         c = self._test.statistics.get_counter("/net/route/to")
 
     def get_stats_to(self):
         c = self._test.statistics.get_counter("/net/route/to")
@@ -616,9 +624,9 @@ class VppIpRouteV2(VppObject):
     IP Route V2
     """
 
     IP Route V2
     """
 
-    def __init__(self, test, dest_addr,
-                 dest_addr_len, paths, table_id=0,
-                 register=True, src=0):
+    def __init__(
+        self, test, dest_addr, dest_addr_len, paths, table_id=0, register=True, src=0
+    ):
         self._test = test
         self.paths = paths
         self.table_id = table_id
         self._test = test
         self.paths = paths
         self.table_id = table_id
@@ -633,8 +641,7 @@ class VppIpRouteV2(VppObject):
             self.encoded_paths.append(path.encode())
 
     def __eq__(self, other):
             self.encoded_paths.append(path.encode())
 
     def __eq__(self, other):
-        if self.table_id == other.table_id and \
-           self.prefix == other.prefix:
+        if self.table_id == other.table_id and self.prefix == other.prefix:
             return True
         return False
 
             return True
         return False
 
@@ -645,26 +652,30 @@ class VppIpRouteV2(VppObject):
             self.encoded_paths.append(path.encode())
         self.modified = True
 
             self.encoded_paths.append(path.encode())
         self.modified = True
 
-        self._test.vapi.ip_route_add_del_v2(route={'table_id': self.table_id,
-                                                   'prefix': self.prefix,
-                                                   'src': self.src,
-                                                   'n_paths': len(
-                                                       self.encoded_paths),
-                                                   'paths': self.encoded_paths,
-                                                   },
-                                            is_add=1,
-                                            is_multipath=0)
+        self._test.vapi.ip_route_add_del_v2(
+            route={
+                "table_id": self.table_id,
+                "prefix": self.prefix,
+                "src": self.src,
+                "n_paths": len(self.encoded_paths),
+                "paths": self.encoded_paths,
+            },
+            is_add=1,
+            is_multipath=0,
+        )
 
     def add_vpp_config(self):
         r = self._test.vapi.ip_route_add_del_v2(
 
     def add_vpp_config(self):
         r = self._test.vapi.ip_route_add_del_v2(
-            route={'table_id': self.table_id,
-                   'prefix': self.prefix,
-                   'n_paths': len(self.encoded_paths),
-                   'paths': self.encoded_paths,
-                   'src': self.src,
-                   },
+            route={
+                "table_id": self.table_id,
+                "prefix": self.prefix,
+                "n_paths": len(self.encoded_paths),
+                "paths": self.encoded_paths,
+                "src": self.src,
+            },
             is_add=1,
             is_add=1,
-            is_multipath=0)
+            is_multipath=0,
+        )
         self.stats_index = r.stats_index
         if self.register:
             self._test.registry.register(self, self._test.logger)
         self.stats_index = r.stats_index
         if self.register:
             self._test.registry.register(self, self._test.logger)
@@ -677,34 +688,42 @@ class VppIpRouteV2(VppObject):
         # passing no paths and multipath=0
         if self.modified:
             self._test.vapi.ip_route_add_del_v2(
         # passing no paths and multipath=0
         if self.modified:
             self._test.vapi.ip_route_add_del_v2(
-                route={'table_id': self.table_id,
-                       'prefix': self.prefix,
-                       'src': self.src,
-                       'n_paths': len(
-                           self.encoded_paths),
-                       'paths': self.encoded_paths},
+                route={
+                    "table_id": self.table_id,
+                    "prefix": self.prefix,
+                    "src": self.src,
+                    "n_paths": len(self.encoded_paths),
+                    "paths": self.encoded_paths,
+                },
                 is_add=0,
                 is_add=0,
-                is_multipath=1)
+                is_multipath=1,
+            )
         else:
             self._test.vapi.ip_route_add_del_v2(
         else:
             self._test.vapi.ip_route_add_del_v2(
-                route={'table_id': self.table_id,
-                       'prefix': self.prefix,
-                       'src': self.src,
-                       'n_paths': 0},
+                route={
+                    "table_id": self.table_id,
+                    "prefix": self.prefix,
+                    "src": self.src,
+                    "n_paths": 0,
+                },
                 is_add=0,
                 is_add=0,
-                is_multipath=0)
+                is_multipath=0,
+            )
 
     def query_vpp_config(self):
 
     def query_vpp_config(self):
-        return find_route(self._test,
-                          self.prefix.network_address,
-                          self.prefix.prefixlen,
-                          self.table_id)
+        return find_route(
+            self._test,
+            self.prefix.network_address,
+            self.prefix.prefixlen,
+            self.table_id,
+        )
 
     def object_id(self):
 
     def object_id(self):
-        return ("%s:table-%d-%s" % (
-            'ip6-route' if self.prefix.version == 6 else 'ip-route',
-                self.table_id,
-                self.prefix))
+        return "%s:table-%d-%s" % (
+            "ip6-route" if self.prefix.version == 6 else "ip-route",
+            self.table_id,
+            self.prefix,
+        )
 
     def get_stats_to(self):
         c = self._test.statistics.get_counter("/net/route/to")
 
     def get_stats_to(self):
         c = self._test.statistics.get_counter("/net/route/to")
@@ -720,9 +739,17 @@ class VppIpMRoute(VppObject):
     IP Multicast Route
     """
 
     IP Multicast Route
     """
 
-    def __init__(self, test, src_addr, grp_addr,
-                 grp_addr_len, e_flags, paths, table_id=0,
-                 rpf_id=0):
+    def __init__(
+        self,
+        test,
+        src_addr,
+        grp_addr,
+        grp_addr_len,
+        e_flags,
+        paths,
+        table_id=0,
+        rpf_id=0,
+    ):
         self._test = test
         self.paths = paths
         self.table_id = table_id
         self._test = test
         self.paths = paths
         self.table_id = table_id
@@ -736,38 +763,37 @@ class VppIpMRoute(VppObject):
 
     def encode(self, paths=None):
         _paths = self.encoded_paths if paths is None else paths
 
     def encode(self, paths=None):
         _paths = self.encoded_paths if paths is None else paths
-        return {'table_id': self.table_id,
-                'entry_flags': self.e_flags,
-                'rpf_id': self.rpf_id,
-                'prefix': self.prefix.encode(),
-                'n_paths': len(_paths),
-                'paths': _paths,
-                }
+        return {
+            "table_id": self.table_id,
+            "entry_flags": self.e_flags,
+            "rpf_id": self.rpf_id,
+            "prefix": self.prefix.encode(),
+            "n_paths": len(_paths),
+            "paths": _paths,
+        }
 
     def add_vpp_config(self):
 
     def add_vpp_config(self):
-        r = self._test.vapi.ip_mroute_add_del(route=self.encode(),
-                                              is_multipath=1,
-                                              is_add=1)
+        r = self._test.vapi.ip_mroute_add_del(
+            route=self.encode(), is_multipath=1, is_add=1
+        )
         self.stats_index = r.stats_index
         self._test.registry.register(self, self._test.logger)
         return self
 
     def remove_vpp_config(self):
         self.stats_index = r.stats_index
         self._test.registry.register(self, self._test.logger)
         return self
 
     def remove_vpp_config(self):
-        self._test.vapi.ip_mroute_add_del(route=self.encode(),
-                                          is_multipath=1,
-                                          is_add=0)
+        self._test.vapi.ip_mroute_add_del(route=self.encode(), is_multipath=1, is_add=0)
 
     def update_entry_flags(self, flags):
         self.e_flags = flags
 
     def update_entry_flags(self, flags):
         self.e_flags = flags
-        self._test.vapi.ip_mroute_add_del(route=self.encode(paths=[]),
-                                          is_multipath=1,
-                                          is_add=1)
+        self._test.vapi.ip_mroute_add_del(
+            route=self.encode(paths=[]), is_multipath=1, is_add=1
+        )
 
     def update_rpf_id(self, rpf_id):
         self.rpf_id = rpf_id
 
     def update_rpf_id(self, rpf_id):
         self.rpf_id = rpf_id
-        self._test.vapi.ip_mroute_add_del(route=self.encode(paths=[]),
-                                          is_multipath=1,
-                                          is_add=1)
+        self._test.vapi.ip_mroute_add_del(
+            route=self.encode(paths=[]), is_multipath=1, is_add=1
+        )
 
     def update_path_flags(self, itf, flags):
         for p in range(len(self.paths)):
 
     def update_path_flags(self, itf, flags):
         for p in range(len(self.paths)):
@@ -777,23 +803,25 @@ class VppIpMRoute(VppObject):
                 break
 
         self._test.vapi.ip_mroute_add_del(
                 break
 
         self._test.vapi.ip_mroute_add_del(
-            route=self.encode(
-                paths=[self.encoded_paths[p]]),
-            is_add=1,
-            is_multipath=0)
+            route=self.encode(paths=[self.encoded_paths[p]]), is_add=1, is_multipath=0
+        )
 
     def query_vpp_config(self):
 
     def query_vpp_config(self):
-        return find_mroute(self._test,
-                           self.prefix.gaddr,
-                           self.prefix.saddr,
-                           self.prefix.length,
-                           self.table_id)
+        return find_mroute(
+            self._test,
+            self.prefix.gaddr,
+            self.prefix.saddr,
+            self.prefix.length,
+            self.table_id,
+        )
 
     def object_id(self):
 
     def object_id(self):
-        return ("%d:(%s,%s/%d)" % (self.table_id,
-                                   self.prefix.saddr,
-                                   self.prefix.gaddr,
-                                   self.prefix.length))
+        return "%d:(%s,%s/%d)" % (
+            self.table_id,
+            self.prefix.saddr,
+            self.prefix.gaddr,
+            self.prefix.length,
+        )
 
     def get_stats(self):
         c = self._test.statistics.get_counter("/net/mroute")
 
     def get_stats(self):
         c = self._test.statistics.get_counter("/net/mroute")
@@ -818,8 +846,16 @@ class VppMplsIpBind(VppObject):
     MPLS to IP Binding
     """
 
     MPLS to IP Binding
     """
 
-    def __init__(self, test, local_label, dest_addr, dest_addr_len,
-                 table_id=0, ip_table_id=0, is_ip6=0):
+    def __init__(
+        self,
+        test,
+        local_label,
+        dest_addr,
+        dest_addr_len,
+        table_id=0,
+        ip_table_id=0,
+        is_ip6=0,
+    ):
         self._test = test
         self.dest_addr_len = dest_addr_len
         self.dest_addr = dest_addr
         self._test = test
         self.dest_addr_len = dest_addr_len
         self.dest_addr = dest_addr
@@ -830,54 +866,54 @@ class VppMplsIpBind(VppObject):
         self.prefix = mk_network(dest_addr, dest_addr_len)
 
     def add_vpp_config(self):
         self.prefix = mk_network(dest_addr, dest_addr_len)
 
     def add_vpp_config(self):
-        self._test.vapi.mpls_ip_bind_unbind(self.local_label,
-                                            self.prefix,
-                                            table_id=self.table_id,
-                                            ip_table_id=self.ip_table_id)
+        self._test.vapi.mpls_ip_bind_unbind(
+            self.local_label,
+            self.prefix,
+            table_id=self.table_id,
+            ip_table_id=self.ip_table_id,
+        )
         self._test.registry.register(self, self._test.logger)
 
     def remove_vpp_config(self):
         self._test.registry.register(self, self._test.logger)
 
     def remove_vpp_config(self):
-        self._test.vapi.mpls_ip_bind_unbind(self.local_label,
-                                            self.prefix,
-                                            table_id=self.table_id,
-                                            ip_table_id=self.ip_table_id,
-                                            is_bind=0)
+        self._test.vapi.mpls_ip_bind_unbind(
+            self.local_label,
+            self.prefix,
+            table_id=self.table_id,
+            ip_table_id=self.ip_table_id,
+            is_bind=0,
+        )
 
     def query_vpp_config(self):
         dump = self._test.vapi.mpls_route_dump(self.table_id)
         for e in dump:
 
     def query_vpp_config(self):
         dump = self._test.vapi.mpls_route_dump(self.table_id)
         for e in dump:
-            if self.local_label == e.mr_route.mr_label \
-               and self.table_id == e.mr_route.mr_table_id:
+            if (
+                self.local_label == e.mr_route.mr_label
+                and self.table_id == e.mr_route.mr_table_id
+            ):
                 return True
         return False
 
     def object_id(self):
                 return True
         return False
 
     def object_id(self):
-        return ("%d:%s binds %d:%s/%d"
-                % (self.table_id,
-                   self.local_label,
-                   self.ip_table_id,
-                   self.dest_addr,
-                   self.dest_addr_len))
+        return "%d:%s binds %d:%s/%d" % (
+            self.table_id,
+            self.local_label,
+            self.ip_table_id,
+            self.dest_addr,
+            self.dest_addr_len,
+        )
 
 
 class VppMplsTable(VppObject):
 
 
 class VppMplsTable(VppObject):
-
-    def __init__(self,
-                 test,
-                 table_id):
+    def __init__(self, test, table_id):
         self._test = test
         self.table_id = table_id
 
     def add_vpp_config(self):
         self._test = test
         self.table_id = table_id
 
     def add_vpp_config(self):
-        self._test.vapi.mpls_table_add_del(
-            self.table_id,
-            is_add=1)
+        self._test.vapi.mpls_table_add_del(self.table_id, is_add=1)
         self._test.registry.register(self, self._test.logger)
 
     def remove_vpp_config(self):
         self._test.registry.register(self, self._test.logger)
 
     def remove_vpp_config(self):
-        self._test.vapi.mpls_table_add_del(
-            self.table_id,
-            is_add=0)
+        self._test.vapi.mpls_table_add_del(self.table_id, is_add=0)
 
     def query_vpp_config(self):
         dump = self._test.vapi.mpls_table_dump()
 
     def query_vpp_config(self):
         dump = self._test.vapi.mpls_table_dump()
@@ -887,7 +923,7 @@ class VppMplsTable(VppObject):
         return False
 
     def object_id(self):
         return False
 
     def object_id(self):
-        return ("table-mpls-%d" % (self.table_id))
+        return "table-mpls-%d" % (self.table_id)
 
 
 class VppMplsRoute(VppObject):
 
 
 class VppMplsRoute(VppObject):
@@ -895,9 +931,16 @@ class VppMplsRoute(VppObject):
     MPLS Route/LSP
     """
 
     MPLS Route/LSP
     """
 
-    def __init__(self, test, local_label, eos_bit, paths, table_id=0,
-                 is_multicast=0,
-                 eos_proto=FibPathProto.FIB_PATH_NH_PROTO_IP4):
+    def __init__(
+        self,
+        test,
+        local_label,
+        eos_bit,
+        paths,
+        table_id=0,
+        is_multicast=0,
+        eos_proto=FibPathProto.FIB_PATH_NH_PROTO_IP4,
+    ):
         self._test = test
         self.paths = paths
         self.local_label = local_label
         self._test = test
         self.paths = paths
         self.local_label = local_label
@@ -911,12 +954,16 @@ class VppMplsRoute(VppObject):
         for path in self.paths:
             paths.append(path.encode())
 
         for path in self.paths:
             paths.append(path.encode())
 
-        r = self._test.vapi.mpls_route_add_del(self.table_id,
-                                               self.local_label,
-                                               self.eos_bit,
-                                               self.eos_proto,
-                                               self.is_multicast,
-                                               paths, 1, 0)
+        r = self._test.vapi.mpls_route_add_del(
+            self.table_id,
+            self.local_label,
+            self.eos_bit,
+            self.eos_proto,
+            self.is_multicast,
+            paths,
+            1,
+            0,
+        )
         self.stats_index = r.stats_index
         self._test.registry.register(self, self._test.logger)
 
         self.stats_index = r.stats_index
         self._test.registry.register(self, self._test.logger)
 
@@ -925,22 +972,28 @@ class VppMplsRoute(VppObject):
         for path in self.paths:
             paths.append(path.encode())
 
         for path in self.paths:
             paths.append(path.encode())
 
-        self._test.vapi.mpls_route_add_del(self.table_id,
-                                           self.local_label,
-                                           self.eos_bit,
-                                           self.eos_proto,
-                                           self.is_multicast,
-                                           paths, 0, 0)
+        self._test.vapi.mpls_route_add_del(
+            self.table_id,
+            self.local_label,
+            self.eos_bit,
+            self.eos_proto,
+            self.is_multicast,
+            paths,
+            0,
+            0,
+        )
 
     def query_vpp_config(self):
 
     def query_vpp_config(self):
-        return find_mpls_route(self._test, self.table_id,
-                               self.local_label, self.eos_bit)
+        return find_mpls_route(
+            self._test, self.table_id, self.local_label, self.eos_bit
+        )
 
     def object_id(self):
 
     def object_id(self):
-        return ("mpls-route-%d:%s/%d"
-                % (self.table_id,
-                   self.local_label,
-                   20 + self.eos_bit))
+        return "mpls-route-%d:%s/%d" % (
+            self.table_id,
+            self.local_label,
+            20 + self.eos_bit,
+        )
 
     def get_stats_to(self):
         c = self._test.statistics.get_counter("/net/route/to")
 
     def get_stats_to(self):
         c = self._test.statistics.get_counter("/net/route/to")
index 6517458..2597676 100644 (file)
@@ -8,9 +8,9 @@ class VppIpIpTunInterface(VppTunnelInterface):
     VPP IP-IP Tunnel interface
     """
 
     VPP IP-IP Tunnel interface
     """
 
-    def __init__(self, test, parent_if, src, dst,
-                 table_id=0, dscp=0x0,
-                 flags=0, mode=None):
+    def __init__(
+        self, test, parent_if, src, dst, table_id=0, dscp=0x0, flags=0, mode=None
+    ):
         super(VppIpIpTunInterface, self).__init__(test, parent_if)
         self.src = src
         self.dst = dst
         super(VppIpIpTunInterface, self).__init__(test, parent_if)
         self.src = src
         self.dst = dst
@@ -19,23 +19,22 @@ class VppIpIpTunInterface(VppTunnelInterface):
         self.flags = flags
         self.mode = mode
         if not self.mode:
         self.flags = flags
         self.mode = mode
         if not self.mode:
-            self.mode = (VppEnum.vl_api_tunnel_mode_t.
-                         TUNNEL_API_MODE_P2P)
+            self.mode = VppEnum.vl_api_tunnel_mode_t.TUNNEL_API_MODE_P2P
 
     def add_vpp_config(self):
         r = self.test.vapi.ipip_add_tunnel(
             tunnel={
 
     def add_vpp_config(self):
         r = self.test.vapi.ipip_add_tunnel(
             tunnel={
-                'src': self.src,
-                'dst': self.dst,
-                'table_id': self.table_id,
-                'flags': self.flags,
-                'dscp': self.dscp,
-                'instance': 0xffffffff,
-                'mode': self.mode,
-            })
+                "src": self.src,
+                "dst": self.dst,
+                "table_id": self.table_id,
+                "flags": self.flags,
+                "dscp": self.dscp,
+                "instance": 0xFFFFFFFF,
+                "mode": self.mode,
+            }
+        )
         self.set_sw_if_index(r.sw_if_index)
         self.set_sw_if_index(r.sw_if_index)
-        r = self.test.vapi.ipip_tunnel_dump(
-            sw_if_index=self.sw_if_index)
+        r = self.test.vapi.ipip_tunnel_dump(sw_if_index=self.sw_if_index)
         self.instance = r[0].tunnel.instance
         self.test.registry.register(self, self.test.logger)
         return self
         self.instance = r[0].tunnel.instance
         self.test.registry.register(self, self.test.logger)
         return self
@@ -44,7 +43,7 @@ class VppIpIpTunInterface(VppTunnelInterface):
         self.test.vapi.ipip_del_tunnel(sw_if_index=self._sw_if_index)
 
     def query_vpp_config(self):
         self.test.vapi.ipip_del_tunnel(sw_if_index=self._sw_if_index)
 
     def query_vpp_config(self):
-        ts = self.test.vapi.ipip_tunnel_dump(sw_if_index=0xffffffff)
+        ts = self.test.vapi.ipip_tunnel_dump(sw_if_index=0xFFFFFFFF)
         for t in ts:
             if t.tunnel.sw_if_index == self._sw_if_index:
                 return True
         for t in ts:
             if t.tunnel.sw_if_index == self._sw_if_index:
                 return True
index 76080e0..1db7f85 100644 (file)
@@ -10,7 +10,7 @@ except NameError:
 
 
 def mk_counter():
 
 
 def mk_counter():
-    return {'packets': 0, 'bytes': 0}
+    return {"packets": 0, "bytes": 0}
 
 
 class VppIpsecSpd(VppObject):
 
 
 class VppIpsecSpd(VppObject):
@@ -52,14 +52,13 @@ class VppIpsecSpdItfBinding(VppObject):
         self.itf = itf
 
     def add_vpp_config(self):
         self.itf = itf
 
     def add_vpp_config(self):
-        self.test.vapi.ipsec_interface_add_del_spd(self.spd.id,
-                                                   self.itf.sw_if_index)
+        self.test.vapi.ipsec_interface_add_del_spd(self.spd.id, self.itf.sw_if_index)
         self.test.registry.register(self, self.test.logger)
 
     def remove_vpp_config(self):
         self.test.registry.register(self, self.test.logger)
 
     def remove_vpp_config(self):
-        self.test.vapi.ipsec_interface_add_del_spd(self.spd.id,
-                                                   self.itf.sw_if_index,
-                                                   is_add=0)
+        self.test.vapi.ipsec_interface_add_del_spd(
+            self.spd.id, self.itf.sw_if_index, is_add=0
+        )
 
     def object_id(self):
         return "bind-%s-to-%s" % (self.spd.id, self.itf)
 
     def object_id(self):
         return "bind-%s-to-%s" % (self.spd.id, self.itf)
@@ -77,17 +76,24 @@ class VppIpsecSpdEntry(VppObject):
     VPP SPD DB Entry
     """
 
     VPP SPD DB Entry
     """
 
-    def __init__(self, test, spd, sa_id,
-                 local_start, local_stop,
-                 remote_start, remote_stop,
-                 proto,
-                 priority=100,
-                 policy=None,
-                 is_outbound=1,
-                 remote_port_start=0,
-                 remote_port_stop=65535,
-                 local_port_start=0,
-                 local_port_stop=65535):
+    def __init__(
+        self,
+        test,
+        spd,
+        sa_id,
+        local_start,
+        local_stop,
+        remote_start,
+        remote_stop,
+        proto,
+        priority=100,
+        policy=None,
+        is_outbound=1,
+        remote_port_start=0,
+        remote_port_stop=65535,
+        local_port_start=0,
+        local_port_stop=65535,
+    ):
         self.test = test
         self.spd = spd
         self.sa_id = sa_id
         self.test = test
         self.spd = spd
         self.sa_id = sa_id
@@ -99,11 +105,10 @@ class VppIpsecSpdEntry(VppObject):
         self.is_outbound = is_outbound
         self.priority = priority
         if not policy:
         self.is_outbound = is_outbound
         self.priority = priority
         if not policy:
-            self.policy = (VppEnum.vl_api_ipsec_spd_action_t.
-                           IPSEC_API_SPD_ACTION_BYPASS)
+            self.policy = VppEnum.vl_api_ipsec_spd_action_t.IPSEC_API_SPD_ACTION_BYPASS
         else:
             self.policy = policy
         else:
             self.policy = policy
-        self.is_ipv6 = (0 if self.local_start.version == 4 else 1)
+        self.is_ipv6 = 0 if self.local_start.version == 4 else 1
         self.local_port_start = local_port_start
         self.local_port_stop = local_port_stop
         self.remote_port_start = remote_port_start
         self.local_port_start = local_port_start
         self.local_port_stop = local_port_stop
         self.remote_port_start = remote_port_start
@@ -125,7 +130,8 @@ class VppIpsecSpdEntry(VppObject):
             local_port_start=self.local_port_start,
             local_port_stop=self.local_port_stop,
             remote_port_start=self.remote_port_start,
             local_port_start=self.local_port_start,
             local_port_stop=self.local_port_stop,
             remote_port_start=self.remote_port_start,
-            remote_port_stop=self.remote_port_stop)
+            remote_port_stop=self.remote_port_stop,
+        )
         self.stat_index = rv.stat_index
         self.test.registry.register(self, self.test.logger)
         return self
         self.stat_index = rv.stat_index
         self.test.registry.register(self, self.test.logger)
         return self
@@ -147,25 +153,30 @@ class VppIpsecSpdEntry(VppObject):
             local_port_stop=self.local_port_stop,
             remote_port_start=self.remote_port_start,
             remote_port_stop=self.remote_port_stop,
             local_port_stop=self.local_port_stop,
             remote_port_start=self.remote_port_start,
             remote_port_stop=self.remote_port_stop,
-            is_add=0)
+            is_add=0,
+        )
 
     def object_id(self):
 
     def object_id(self):
-        return "spd-entry-%d-%d-%d-%d-%d-%d" % (self.spd.id,
-                                                self.priority,
-                                                self.policy,
-                                                self.is_outbound,
-                                                self.is_ipv6,
-                                                self.remote_port_start)
+        return "spd-entry-%d-%d-%d-%d-%d-%d" % (
+            self.spd.id,
+            self.priority,
+            self.policy,
+            self.is_outbound,
+            self.is_ipv6,
+            self.remote_port_start,
+        )
 
     def query_vpp_config(self):
         ss = self.test.vapi.ipsec_spd_dump(self.spd.id)
         for s in ss:
 
     def query_vpp_config(self):
         ss = self.test.vapi.ipsec_spd_dump(self.spd.id)
         for s in ss:
-            if s.entry.sa_id == self.sa_id and \
-               s.entry.is_outbound == self.is_outbound and \
-               s.entry.priority == self.priority and \
-               s.entry.policy == self.policy and \
-               s.entry.remote_address_start == self.remote_start and \
-               s.entry.remote_port_start == self.remote_port_start:
+            if (
+                s.entry.sa_id == self.sa_id
+                and s.entry.is_outbound == self.is_outbound
+                and s.entry.priority == self.priority
+                and s.entry.policy == self.policy
+                and s.entry.remote_address_start == self.remote_start
+                and s.entry.remote_port_start == self.remote_port_start
+            ):
                 return True
         return False
 
                 return True
         return False
 
@@ -174,11 +185,11 @@ class VppIpsecSpdEntry(VppObject):
         if worker is None:
             total = mk_counter()
             for t in c:
         if worker is None:
             total = mk_counter()
             for t in c:
-                total['packets'] += t[self.stat_index]['packets']
+                total["packets"] += t[self.stat_index]["packets"]
             return total
         else:
             # +1 to skip main thread
             return total
         else:
             # +1 to skip main thread
-            return c[worker+1][self.stat_index]
+            return c[worker + 1][self.stat_index]
 
 
 class VppIpsecSA(VppObject):
 
 
 class VppIpsecSA(VppObject):
@@ -188,14 +199,26 @@ class VppIpsecSA(VppObject):
 
     DEFAULT_UDP_PORT = 4500
 
 
     DEFAULT_UDP_PORT = 4500
 
-    def __init__(self, test, id, spi,
-                 integ_alg, integ_key,
-                 crypto_alg, crypto_key,
-                 proto,
-                 tun_src=None, tun_dst=None,
-                 flags=None, salt=0, tun_flags=None,
-                 dscp=None,
-                 udp_src=None, udp_dst=None, hop_limit=None):
+    def __init__(
+        self,
+        test,
+        id,
+        spi,
+        integ_alg,
+        integ_key,
+        crypto_alg,
+        crypto_key,
+        proto,
+        tun_src=None,
+        tun_dst=None,
+        flags=None,
+        salt=0,
+        tun_flags=None,
+        dscp=None,
+        udp_src=None,
+        udp_dst=None,
+        hop_limit=None,
+    ):
         e = VppEnum.vl_api_ipsec_sad_flags_t
         self.test = test
         self.id = id
         e = VppEnum.vl_api_ipsec_sad_flags_t
         self.test = test
         self.id = id
@@ -214,15 +237,16 @@ class VppIpsecSA(VppObject):
             self.flags = e.IPSEC_API_SAD_FLAG_NONE
         else:
             self.flags = flags
             self.flags = e.IPSEC_API_SAD_FLAG_NONE
         else:
             self.flags = flags
-        if (tun_src):
+        if tun_src:
             self.tun_src = ip_address(text_type(tun_src))
             self.flags = self.flags | e.IPSEC_API_SAD_FLAG_IS_TUNNEL
             self.tun_src = ip_address(text_type(tun_src))
             self.flags = self.flags | e.IPSEC_API_SAD_FLAG_IS_TUNNEL
-        if (tun_dst):
+        if tun_dst:
             self.tun_dst = ip_address(text_type(tun_dst))
         self.udp_src = udp_src
         self.udp_dst = udp_dst
             self.tun_dst = ip_address(text_type(tun_dst))
         self.udp_src = udp_src
         self.udp_dst = udp_dst
-        self.tun_flags = (VppEnum.vl_api_tunnel_encap_decap_flags_t.
-                          TUNNEL_API_ENCAP_DECAP_FLAG_NONE)
+        self.tun_flags = (
+            VppEnum.vl_api_tunnel_encap_decap_flags_t.TUNNEL_API_ENCAP_DECAP_FLAG_NONE
+        )
         if tun_flags:
             self.tun_flags = tun_flags
         self.dscp = VppEnum.vl_api_ip_dscp_t.IP_API_DSCP_CS0
         if tun_flags:
             self.tun_flags = tun_flags
         self.dscp = VppEnum.vl_api_ip_dscp_t.IP_API_DSCP_CS0
@@ -233,38 +257,39 @@ class VppIpsecSA(VppObject):
             self.hop_limit = hop_limit
 
     def tunnel_encode(self):
             self.hop_limit = hop_limit
 
     def tunnel_encode(self):
-        return {'src': (self.tun_src if self.tun_src else []),
-                'dst': (self.tun_dst if self.tun_dst else []),
-                'encap_decap_flags': self.tun_flags,
-                'dscp': self.dscp,
-                'hop_limit': self.hop_limit,
-                'table_id': self.table_id
-                }
+        return {
+            "src": (self.tun_src if self.tun_src else []),
+            "dst": (self.tun_dst if self.tun_dst else []),
+            "encap_decap_flags": self.tun_flags,
+            "dscp": self.dscp,
+            "hop_limit": self.hop_limit,
+            "table_id": self.table_id,
+        }
 
     def add_vpp_config(self):
         entry = {
 
     def add_vpp_config(self):
         entry = {
-            'sad_id': self.id,
-            'spi': self.spi,
-            'integrity_algorithm': self.integ_alg,
-            'integrity_key': {
-                'length': len(self.integ_key),
-                'data': self.integ_key,
+            "sad_id": self.id,
+            "spi": self.spi,
+            "integrity_algorithm": self.integ_alg,
+            "integrity_key": {
+                "length": len(self.integ_key),
+                "data": self.integ_key,
             },
             },
-            'crypto_algorithm': self.crypto_alg,
-            'crypto_key': {
-                'data': self.crypto_key,
-                'length': len(self.crypto_key),
+            "crypto_algorithm": self.crypto_alg,
+            "crypto_key": {
+                "data": self.crypto_key,
+                "length": len(self.crypto_key),
             },
             },
-            'protocol': self.proto,
-            'tunnel': self.tunnel_encode(),
-            'flags': self.flags,
-            'salt': self.salt
+            "protocol": self.proto,
+            "tunnel": self.tunnel_encode(),
+            "flags": self.flags,
+            "salt": self.salt,
         }
         # don't explicitly send the defaults, let papi fill them in
         if self.udp_src:
         }
         # don't explicitly send the defaults, let papi fill them in
         if self.udp_src:
-            entry['udp_src_port'] = self.udp_src
+            entry["udp_src_port"] = self.udp_src
         if self.udp_dst:
         if self.udp_dst:
-            entry['udp_dst_port'] = self.udp_dst
+            entry["udp_dst_port"] = self.udp_dst
         r = self.test.vapi.ipsec_sad_entry_add(entry=entry)
         self.stat_index = r.stat_index
         self.test.registry.register(self, self.test.logger)
         r = self.test.vapi.ipsec_sad_entry_add(entry=entry)
         self.stat_index = r.stat_index
         self.test.registry.register(self, self.test.logger)
@@ -284,7 +309,7 @@ class VppIpsecSA(VppObject):
             if b.entry.sad_id == self.id:
                 # if udp encap is configured then the ports should match
                 # those configured or the default
             if b.entry.sad_id == self.id:
                 # if udp encap is configured then the ports should match
                 # those configured or the default
-                if (self.flags & e.IPSEC_API_SAD_FLAG_UDP_ENCAP):
+                if self.flags & e.IPSEC_API_SAD_FLAG_UDP_ENCAP:
                     if not b.entry.flags & e.IPSEC_API_SAD_FLAG_UDP_ENCAP:
                         return False
                     if self.udp_src:
                     if not b.entry.flags & e.IPSEC_API_SAD_FLAG_UDP_ENCAP:
                         return False
                     if self.udp_src:
@@ -307,11 +332,11 @@ class VppIpsecSA(VppObject):
         if worker is None:
             total = mk_counter()
             for t in c:
         if worker is None:
             total = mk_counter()
             for t in c:
-                total['packets'] += t[self.stat_index]['packets']
+                total["packets"] += t[self.stat_index]["packets"]
             return total
         else:
             # +1 to skip main thread
             return total
         else:
             # +1 to skip main thread
-            return c[worker+1][self.stat_index]
+            return c[worker + 1][self.stat_index]
 
     def get_lost(self, worker=None):
         c = self.test.statistics.get_counter("/net/ipsec/sa/lost")
 
     def get_lost(self, worker=None):
         c = self.test.statistics.get_counter("/net/ipsec/sa/lost")
@@ -322,7 +347,7 @@ class VppIpsecSA(VppObject):
             return total
         else:
             # +1 to skip main thread
             return total
         else:
             # +1 to skip main thread
-            return c[worker+1][self.stat_index]
+            return c[worker + 1][self.stat_index]
 
 
 class VppIpsecTunProtect(VppObject):
 
 
 class VppIpsecTunProtect(VppObject):
@@ -348,11 +373,13 @@ class VppIpsecTunProtect(VppObject):
         self.sa_out = sa_out.id
         self.test.vapi.ipsec_tunnel_protect_update(
             tunnel={
         self.sa_out = sa_out.id
         self.test.vapi.ipsec_tunnel_protect_update(
             tunnel={
-                'sw_if_index': self.itf._sw_if_index,
-                'n_sa_in': len(self.sas_in),
-                'sa_out': self.sa_out,
-                'sa_in': self.sas_in,
-                'nh': self.nh})
+                "sw_if_index": self.itf._sw_if_index,
+                "n_sa_in": len(self.sas_in),
+                "sa_out": self.sa_out,
+                "sa_in": self.sas_in,
+                "nh": self.nh,
+            }
+        )
 
     def object_id(self):
         return "ipsec-tun-protect-%s-%s" % (self.itf, self.nh)
 
     def object_id(self):
         return "ipsec-tun-protect-%s-%s" % (self.itf, self.nh)
@@ -360,24 +387,24 @@ class VppIpsecTunProtect(VppObject):
     def add_vpp_config(self):
         self.test.vapi.ipsec_tunnel_protect_update(
             tunnel={
     def add_vpp_config(self):
         self.test.vapi.ipsec_tunnel_protect_update(
             tunnel={
-                'sw_if_index': self.itf._sw_if_index,
-                'n_sa_in': len(self.sas_in),
-                'sa_out': self.sa_out,
-                'sa_in': self.sas_in,
-                'nh': self.nh})
+                "sw_if_index": self.itf._sw_if_index,
+                "n_sa_in": len(self.sas_in),
+                "sa_out": self.sa_out,
+                "sa_in": self.sas_in,
+                "nh": self.nh,
+            }
+        )
         self.test.registry.register(self, self.test.logger)
 
     def remove_vpp_config(self):
         self.test.vapi.ipsec_tunnel_protect_del(
         self.test.registry.register(self, self.test.logger)
 
     def remove_vpp_config(self):
         self.test.vapi.ipsec_tunnel_protect_del(
-            sw_if_index=self.itf.sw_if_index,
-            nh=self.nh)
+            sw_if_index=self.itf.sw_if_index, nh=self.nh
+        )
 
     def query_vpp_config(self):
 
     def query_vpp_config(self):
-        bs = self.test.vapi.ipsec_tunnel_protect_dump(
-            sw_if_index=self.itf.sw_if_index)
+        bs = self.test.vapi.ipsec_tunnel_protect_dump(sw_if_index=self.itf.sw_if_index)
         for b in bs:
         for b in bs:
-            if b.tun.sw_if_index == self.itf.sw_if_index and \
-               self.nh == str(b.tun.nh):
+            if b.tun.sw_if_index == self.itf.sw_if_index and self.nh == str(b.tun.nh):
                 return True
         return False
 
                 return True
         return False
 
@@ -387,20 +414,21 @@ class VppIpsecInterface(VppInterface):
     VPP IPSec interface
     """
 
     VPP IPSec interface
     """
 
-    def __init__(self, test, mode=None, instance=0xffffffff):
+    def __init__(self, test, mode=None, instance=0xFFFFFFFF):
         super(VppIpsecInterface, self).__init__(test)
 
         self.mode = mode
         if not self.mode:
         super(VppIpsecInterface, self).__init__(test)
 
         self.mode = mode
         if not self.mode:
-            self.mode = (VppEnum.vl_api_tunnel_mode_t.
-                         TUNNEL_API_MODE_P2P)
+            self.mode = VppEnum.vl_api_tunnel_mode_t.TUNNEL_API_MODE_P2P
         self.instance = instance
 
     def add_vpp_config(self):
         self.instance = instance
 
     def add_vpp_config(self):
-        r = self.test.vapi.ipsec_itf_create(itf={
-            'user_instance': self.instance,
-            'mode': self.mode,
-        })
+        r = self.test.vapi.ipsec_itf_create(
+            itf={
+                "user_instance": self.instance,
+                "mode": self.mode,
+            }
+        )
         self.set_sw_if_index(r.sw_if_index)
         self.test.registry.register(self, self.test.logger)
         ts = self.test.vapi.ipsec_itf_dump(sw_if_index=self._sw_if_index)
         self.set_sw_if_index(r.sw_if_index)
         self.test.registry.register(self, self.test.logger)
         ts = self.test.vapi.ipsec_itf_dump(sw_if_index=self._sw_if_index)
@@ -411,7 +439,7 @@ class VppIpsecInterface(VppInterface):
         self.test.vapi.ipsec_itf_delete(sw_if_index=self._sw_if_index)
 
     def query_vpp_config(self):
         self.test.vapi.ipsec_itf_delete(sw_if_index=self._sw_if_index)
 
     def query_vpp_config(self):
-        ts = self.test.vapi.ipsec_itf_dump(sw_if_index=0xffffffff)
+        ts = self.test.vapi.ipsec_itf_dump(sw_if_index=0xFFFFFFFF)
         for t in ts:
             if t.itf.sw_if_index == self._sw_if_index:
                 return True
         for t in ts:
             if t.itf.sw_if_index == self._sw_if_index:
                 return True
index 7307d28..872f428 100644 (file)
@@ -7,6 +7,7 @@ from vpp_object import VppObject
 from vpp_lo_interface import VppLoInterface
 from vpp_papi import MACAddress
 from vpp_sub_interface import L2_VTR_OP
 from vpp_lo_interface import VppLoInterface
 from vpp_papi import MACAddress
 from vpp_sub_interface import L2_VTR_OP
+
 try:
     text_type = unicode
 except NameError:
 try:
     text_type = unicode
 except NameError:
@@ -47,8 +48,7 @@ def find_bridge_domain_arp_entry(test, bd_id, mac, ip):
     arps = test.vapi.bd_ip_mac_dump(bd_id)
     for arp in arps:
         # do IP addr comparison too once .api is fixed...
     arps = test.vapi.bd_ip_mac_dump(bd_id)
     for arp in arps:
         # do IP addr comparison too once .api is fixed...
-        if mac == str(arp.entry.mac) and \
-           ip == str(arp.entry.ip):
+        if mac == str(arp.entry.mac) and ip == str(arp.entry.ip):
             return True
     return False
 
             return True
     return False
 
@@ -63,10 +63,17 @@ def find_l2_fib_entry(test, bd_id, mac, sw_if_index):
 
 
 class VppBridgeDomain(VppObject):
 
 
 class VppBridgeDomain(VppObject):
-
-    def __init__(self, test, bd_id,
-                 flood=1, uu_flood=1, forward=1,
-                 learn=1, arp_term=1, arp_ufwd=0):
+    def __init__(
+        self,
+        test,
+        bd_id,
+        flood=1,
+        uu_flood=1,
+        forward=1,
+        learn=1,
+        arp_term=1,
+        arp_ufwd=0,
+    ):
         self._test = test
         self.bd_id = bd_id
         self.flood = flood
         self._test = test
         self.bd_id = bd_id
         self.flood = flood
@@ -77,14 +84,16 @@ class VppBridgeDomain(VppObject):
         self.arp_ufwd = arp_ufwd
 
     def add_vpp_config(self):
         self.arp_ufwd = arp_ufwd
 
     def add_vpp_config(self):
-        self._test.vapi.bridge_domain_add_del(bd_id=self.bd_id,
-                                              flood=self.flood,
-                                              uu_flood=self.uu_flood,
-                                              forward=self.forward,
-                                              learn=self.learn,
-                                              arp_term=self.arp_term,
-                                              arp_ufwd=self.arp_ufwd,
-                                              is_add=1)
+        self._test.vapi.bridge_domain_add_del(
+            bd_id=self.bd_id,
+            flood=self.flood,
+            uu_flood=self.uu_flood,
+            forward=self.forward,
+            learn=self.learn,
+            arp_term=self.arp_term,
+            arp_ufwd=self.arp_ufwd,
+            is_add=1,
+        )
         self._test.registry.register(self, self._test.logger)
         return self
 
         self._test.registry.register(self, self._test.logger)
         return self
 
@@ -99,9 +108,7 @@ class VppBridgeDomain(VppObject):
 
 
 class VppBridgeDomainPort(VppObject):
 
 
 class VppBridgeDomainPort(VppObject):
-
-    def __init__(self, test, bd, itf,
-                 port_type=L2_PORT_TYPE.NORMAL):
+    def __init__(self, test, bd, itf, port_type=L2_PORT_TYPE.NORMAL):
         self._test = test
         self.bd = bd
         self.itf = itf
         self._test = test
         self.bd = bd
         self.itf = itf
@@ -109,27 +116,30 @@ class VppBridgeDomainPort(VppObject):
 
     def add_vpp_config(self):
         self._test.vapi.sw_interface_set_l2_bridge(
 
     def add_vpp_config(self):
         self._test.vapi.sw_interface_set_l2_bridge(
-            rx_sw_if_index=self.itf.sw_if_index, bd_id=self.bd.bd_id,
-            port_type=self.port_type, enable=1)
+            rx_sw_if_index=self.itf.sw_if_index,
+            bd_id=self.bd.bd_id,
+            port_type=self.port_type,
+            enable=1,
+        )
         self._test.registry.register(self, self._test.logger)
         return self
 
     def remove_vpp_config(self):
         self._test.vapi.sw_interface_set_l2_bridge(
         self._test.registry.register(self, self._test.logger)
         return self
 
     def remove_vpp_config(self):
         self._test.vapi.sw_interface_set_l2_bridge(
-            rx_sw_if_index=self.itf.sw_if_index, bd_id=self.bd.bd_id,
-            port_type=self.port_type, enable=0)
+            rx_sw_if_index=self.itf.sw_if_index,
+            bd_id=self.bd.bd_id,
+            port_type=self.port_type,
+            enable=0,
+        )
 
     def query_vpp_config(self):
 
     def query_vpp_config(self):
-        return find_bridge_domain_port(self._test,
-                                       self.bd.bd_id,
-                                       self.itf.sw_if_index)
+        return find_bridge_domain_port(self._test, self.bd.bd_id, self.itf.sw_if_index)
 
     def object_id(self):
         return "BD-Port-%s-%s" % (self.bd, self.itf)
 
 
 class VppBridgeDomainArpEntry(VppObject):
 
     def object_id(self):
         return "BD-Port-%s-%s" % (self.bd, self.itf)
 
 
 class VppBridgeDomainArpEntry(VppObject):
-
     def __init__(self, test, bd, mac, ip):
         self._test = test
         self.bd = bd
     def __init__(self, test, bd, mac, ip):
         self._test = test
         self.bd = bd
@@ -137,35 +147,28 @@ class VppBridgeDomainArpEntry(VppObject):
         self.ip = ip
 
     def add_vpp_config(self):
         self.ip = ip
 
     def add_vpp_config(self):
-        self._test.vapi.bd_ip_mac_add_del(is_add=1,
-                                          entry={
-                                              'bd_id': self.bd.bd_id,
-                                              'ip': self.ip,
-                                              'mac': self.mac})
+        self._test.vapi.bd_ip_mac_add_del(
+            is_add=1, entry={"bd_id": self.bd.bd_id, "ip": self.ip, "mac": self.mac}
+        )
         self._test.registry.register(self, self._test.logger)
         return self
 
     def remove_vpp_config(self):
         self._test.registry.register(self, self._test.logger)
         return self
 
     def remove_vpp_config(self):
-        self._test.vapi.bd_ip_mac_add_del(is_add=0,
-                                          entry={
-                                              'bd_id': self.bd.bd_id,
-                                              'ip': self.ip,
-                                              'mac': self.mac})
+        self._test.vapi.bd_ip_mac_add_del(
+            is_add=0, entry={"bd_id": self.bd.bd_id, "ip": self.ip, "mac": self.mac}
+        )
 
     def query_vpp_config(self):
 
     def query_vpp_config(self):
-        return find_bridge_domain_arp_entry(self._test,
-                                            self.bd.bd_id,
-                                            self.mac,
-                                            self.ip)
+        return find_bridge_domain_arp_entry(
+            self._test, self.bd.bd_id, self.mac, self.ip
+        )
 
     def object_id(self):
         return "BD-Arp-Entry-%s-%s-%s" % (self.bd, self.mac, self.ip)
 
 
 class VppL2FibEntry(VppObject):
 
     def object_id(self):
         return "BD-Arp-Entry-%s-%s-%s" % (self.bd, self.mac, self.ip)
 
 
 class VppL2FibEntry(VppObject):
-
-    def __init__(self, test, bd, mac, itf,
-                 static_mac=0, filter_mac=0, bvi_mac=-1):
+    def __init__(self, test, bd, mac, itf, static_mac=0, filter_mac=0, bvi_mac=-1):
         self._test = test
         self.bd = bd
         self.mac = MACAddress(mac)
         self._test = test
         self.bd = bd
         self.mac = MACAddress(mac)
@@ -185,29 +188,26 @@ class VppL2FibEntry(VppObject):
             is_add=1,
             static_mac=self.static_mac,
             filter_mac=self.filter_mac,
             is_add=1,
             static_mac=self.static_mac,
             filter_mac=self.filter_mac,
-            bvi_mac=self.bvi_mac)
+            bvi_mac=self.bvi_mac,
+        )
         self._test.registry.register(self, self._test.logger)
         return self
 
     def remove_vpp_config(self):
         self._test.vapi.l2fib_add_del(
         self._test.registry.register(self, self._test.logger)
         return self
 
     def remove_vpp_config(self):
         self._test.vapi.l2fib_add_del(
-            self.mac.packed,
-            self.bd.bd_id,
-            self.itf.sw_if_index,
-            is_add=0)
+            self.mac.packed, self.bd.bd_id, self.itf.sw_if_index, is_add=0
+        )
 
     def query_vpp_config(self):
 
     def query_vpp_config(self):
-        return find_l2_fib_entry(self._test,
-                                 self.bd.bd_id,
-                                 self.mac.packed,
-                                 self.itf.sw_if_index)
+        return find_l2_fib_entry(
+            self._test, self.bd.bd_id, self.mac.packed, self.itf.sw_if_index
+        )
 
     def object_id(self):
         return "L2-Fib-Entry-%s-%s-%s" % (self.bd, self.mac, self.itf)
 
 
 class VppL2Vtr(VppObject):
 
     def object_id(self):
         return "L2-Fib-Entry-%s-%s-%s" % (self.bd, self.mac, self.itf)
 
 
 class VppL2Vtr(VppObject):
-
     def __init__(self, test, itf, op):
         self._test = test
         self.itf = itf
     def __init__(self, test, itf, op):
         self._test = test
         self.itf = itf
@@ -226,7 +226,7 @@ class VppL2Vtr(VppObject):
         d = self.itf.get_interface_config_from_dump(ds)
 
         if d is not None:
         d = self.itf.get_interface_config_from_dump(ds)
 
         if d is not None:
-            return (d.vtr_op == self.op)
+            return d.vtr_op == self.op
         return False
 
     def object_id(self):
         return False
 
     def object_id(self):
index d755cef..56ae67b 100644 (file)
@@ -16,7 +16,6 @@ import vpp_object
 
 
 class VppLbVip(vpp_object.VppObject):
 
 
 class VppLbVip(vpp_object.VppObject):
-
     def __init__(self, test, pfx, sfx, port, protocol):
         self._test = test
         self.pfx = pfx
     def __init__(self, test, pfx, sfx, port, protocol):
         self._test = test
         self.pfx = pfx
@@ -25,25 +24,21 @@ class VppLbVip(vpp_object.VppObject):
         self.protocol = protocol
 
     def add_vpp_config(self):
         self.protocol = protocol
 
     def add_vpp_config(self):
-        self._test_vapi.lb_add_del_vip(pfx=self.pfx,
-                                       sfx=self.pfx,
-                                       port=self.port,
-                                       protocol=self.protocol)
+        self._test_vapi.lb_add_del_vip(
+            pfx=self.pfx, sfx=self.pfx, port=self.port, protocol=self.protocol
+        )
 
         self._test.registry.register(self, self._test.logger)
 
     def remove_vpp_config(self):
 
         self._test.registry.register(self, self._test.logger)
 
     def remove_vpp_config(self):
-        self._test.vapi.lb_add_del_vip(pfx=self.pfx,
-                                       sfx=self.pfx,
-                                       port=self.port,
-                                       protocol=self.protocol,
-                                       is_del=1)
+        self._test.vapi.lb_add_del_vip(
+            pfx=self.pfx, sfx=self.pfx, port=self.port, protocol=self.protocol, is_del=1
+        )
 
     def query_vpp_config(self):
 
     def query_vpp_config(self):
-        details = self._test.vapi.lb_add_del_vip(fx=self.pfx,
-                                                 sfx=self.pfx,
-                                                 port=self.port,
-                                                 protocol=self.protocol)
+        details = self._test.vapi.lb_add_del_vip(
+            fx=self.pfx, sfx=self.pfx, port=self.port, protocol=self.protocol
+        )
         return True if self == details else False
 
 
         return True if self == details else False
 
 
@@ -60,25 +55,28 @@ class VppLbAs(vpp_object.VppObject):
         self.is_flush = is_flush
 
     def add_vpp_config(self):
         self.is_flush = is_flush
 
     def add_vpp_config(self):
-        self._test_vapi.lb_add_del_as(pfx=self.pfx,
-                                      port=self.port,
-                                      protocol=self.protocol,
-                                      app_srv=self.app_srv,
-                                      is_flush=self.is_flush,
-                                      )
+        self._test_vapi.lb_add_del_as(
+            pfx=self.pfx,
+            port=self.port,
+            protocol=self.protocol,
+            app_srv=self.app_srv,
+            is_flush=self.is_flush,
+        )
 
         self._test.registry.register(self, self._test.logger)
 
     def remove_vpp_config(self):
 
         self._test.registry.register(self, self._test.logger)
 
     def remove_vpp_config(self):
-        self._test.vapi.lb_add_del_as(pfx=self.pfx,
-                                      port=self.port,
-                                      protocol=self.protocol,
-                                      app_srv=self.app_srv,
-                                      is_flush=self.is_flush,
-                                      is_del=1)
+        self._test.vapi.lb_add_del_as(
+            pfx=self.pfx,
+            port=self.port,
+            protocol=self.protocol,
+            app_srv=self.app_srv,
+            is_flush=self.is_flush,
+            is_del=1,
+        )
 
     def query_vpp_config(self):
 
     def query_vpp_config(self):
-        details = self._test.vapi.lb_as_dump(pfx=self.pfx,
-                                             port=self.port,
-                                             protocol=self.protocol)
+        details = self._test.vapi.lb_as_dump(
+            pfx=self.pfx, port=self.port, protocol=self.protocol
+        )
         return True if self == details else False
         return True if self == details else False
index 36f56be..9478689 100644 (file)
@@ -6,7 +6,7 @@ class VppLoInterface(VppInterface, VppObject):
     """VPP loopback interface."""
 
     def __init__(self, test):
     """VPP loopback interface."""
 
     def __init__(self, test):
-        """ Create VPP loopback interface """
+        """Create VPP loopback interface"""
         super(VppLoInterface, self).__init__(test)
         self.add_vpp_config()
 
         super(VppLoInterface, self).__init__(test)
         self.add_vpp_config()
 
index 226f8af..6a97c2b 100644 (file)
@@ -7,7 +7,7 @@ from vpp_papi import VppEnum
 
 def get_if_dump(dump, sw_if_index):
     for d in dump:
 
 def get_if_dump(dump, sw_if_index):
     for d in dump:
-        if (d.sw_if_index == sw_if_index):
+        if d.sw_if_index == sw_if_index:
             return d
 
 
             return d
 
 
@@ -22,13 +22,11 @@ def remove_all_memif_vpp_config(_test):
     dump = _test.vapi.memif_socket_filename_dump()
     for d in dump:
         if d.socket_id != 0:
     dump = _test.vapi.memif_socket_filename_dump()
     for d in dump:
         if d.socket_id != 0:
-            _test.vapi.memif_socket_filename_add_del(
-                0, d.socket_id, d.socket_filename)
+            _test.vapi.memif_socket_filename_add_del(0, d.socket_id, d.socket_filename)
 
 
 class VppSocketFilename(VppObject):
 
 
 class VppSocketFilename(VppObject):
-    def __init__(self, test, socket_id, socket_filename,
-                 add_default_folder=False):
+    def __init__(self, test, socket_id, socket_filename, add_default_folder=False):
         self._test = test
         self.socket_id = socket_id
         self.socket_filename = socket_filename
         self._test = test
         self.socket_id = socket_id
         self.socket_filename = socket_filename
@@ -39,15 +37,16 @@ class VppSocketFilename(VppObject):
 
     def add_vpp_config(self):
         rv = self._test.vapi.memif_socket_filename_add_del(
 
     def add_vpp_config(self):
         rv = self._test.vapi.memif_socket_filename_add_del(
-            1, self.socket_id, self.socket_filename)
+            1, self.socket_id, self.socket_filename
+        )
         if self.add_default_folder:
         if self.add_default_folder:
-            self.socket_filename = "%s/%s" % (self._test.tempdir,
-                                              self.socket_filename)
+            self.socket_filename = "%s/%s" % (self._test.tempdir, self.socket_filename)
         return rv
 
     def remove_vpp_config(self):
         return self._test.vapi.memif_socket_filename_add_del(
         return rv
 
     def remove_vpp_config(self):
         return self._test.vapi.memif_socket_filename_add_del(
-            0, self.socket_id, self.socket_filename)
+            0, self.socket_id, self.socket_filename
+        )
 
     def query_vpp_config(self):
         return self._test.vapi.memif_socket_filename_dump()
 
     def query_vpp_config(self):
         return self._test.vapi.memif_socket_filename_dump()
@@ -57,9 +56,20 @@ class VppSocketFilename(VppObject):
 
 
 class VppMemif(VppObject):
 
 
 class VppMemif(VppObject):
-    def __init__(self, test, role, mode, rx_queues=0, tx_queues=0, if_id=0,
-                 socket_id=0, secret="", ring_size=0, buffer_size=0,
-                 hw_addr=""):
+    def __init__(
+        self,
+        test,
+        role,
+        mode,
+        rx_queues=0,
+        tx_queues=0,
+        if_id=0,
+        socket_id=0,
+        secret="",
+        ring_size=0,
+        buffer_size=0,
+        hw_addr="",
+    ):
         self._test = test
         self.role = role
         self.mode = mode
         self._test = test
         self.role = role
         self.mode = mode
@@ -72,9 +82,9 @@ class VppMemif(VppObject):
         self.buffer_size = buffer_size
         self.hw_addr = hw_addr
         self.sw_if_index = None
         self.buffer_size = buffer_size
         self.hw_addr = hw_addr
         self.sw_if_index = None
-        self.ip_prefix = IPv4Network("192.168.%d.%d/24" %
-                                     (self.if_id + 1, self.role + 1),
-                                     strict=False)
+        self.ip_prefix = IPv4Network(
+            "192.168.%d.%d/24" % (self.if_id + 1, self.role + 1), strict=False
+        )
 
     def add_vpp_config(self):
         rv = self._test.vapi.memif_create(
 
     def add_vpp_config(self):
         rv = self._test.vapi.memif_create(
@@ -87,7 +97,8 @@ class VppMemif(VppObject):
             secret=self.secret,
             ring_size=self.ring_size,
             buffer_size=self.buffer_size,
             secret=self.secret,
             ring_size=self.ring_size,
             buffer_size=self.buffer_size,
-            hw_addr=self.hw_addr)
+            hw_addr=self.hw_addr,
+        )
         try:
             self.sw_if_index = rv.sw_if_index
         except AttributeError:
         try:
             self.sw_if_index = rv.sw_if_index
         except AttributeError:
@@ -99,12 +110,14 @@ class VppMemif(VppObject):
     def admin_up(self):
         if self.sw_if_index:
             return self._test.vapi.sw_interface_set_flags(
     def admin_up(self):
         if self.sw_if_index:
             return self._test.vapi.sw_interface_set_flags(
-                sw_if_index=self.sw_if_index, flags=1)
+                sw_if_index=self.sw_if_index, flags=1
+            )
 
     def admin_down(self):
         if self.sw_if_index:
             return self._test.vapi.sw_interface_set_flags(
 
     def admin_down(self):
         if self.sw_if_index:
             return self._test.vapi.sw_interface_set_flags(
-                sw_if_index=self.sw_if_index, flags=0)
+                sw_if_index=self.sw_if_index, flags=0
+            )
 
     def wait_for_link_up(self, timeout, step=1):
         if not self.sw_if_index:
 
     def wait_for_link_up(self, timeout, step=1):
         if not self.sw_if_index:
@@ -121,7 +134,8 @@ class VppMemif(VppObject):
 
     def config_ip4(self):
         return self._test.vapi.sw_interface_add_del_address(
 
     def config_ip4(self):
         return self._test.vapi.sw_interface_add_del_address(
-            sw_if_index=self.sw_if_index, prefix=self.ip_prefix)
+            sw_if_index=self.sw_if_index, prefix=self.ip_prefix
+        )
 
     def remove_vpp_config(self):
         self._test.vapi.memif_delete(self.sw_if_index)
 
     def remove_vpp_config(self):
         self._test.vapi.memif_delete(self.sw_if_index)
index 5989361..6c8941a 100644 (file)
@@ -1,4 +1,3 @@
-
 from vpp_interface import VppInterface
 
 
 from vpp_interface import VppInterface
 
 
@@ -8,7 +7,7 @@ class VppMPLSTunnelInterface(VppInterface):
     """
 
     def __init__(self, test, paths, is_multicast=0, is_l2=0):
     """
 
     def __init__(self, test, paths, is_multicast=0, is_l2=0):
-        """ Create MPLS Tunnel interface """
+        """Create MPLS Tunnel interface"""
         super(VppMPLSTunnelInterface, self).__init__(test)
         self.t_paths = paths
         self.is_multicast = is_multicast
         super(VppMPLSTunnelInterface, self).__init__(test)
         self.t_paths = paths
         self.is_multicast = is_multicast
@@ -19,28 +18,29 @@ class VppMPLSTunnelInterface(VppInterface):
 
     def add_vpp_config(self):
         reply = self.test.vapi.mpls_tunnel_add_del(
 
     def add_vpp_config(self):
         reply = self.test.vapi.mpls_tunnel_add_del(
-            0xffffffff,
+            0xFFFFFFFF,
             self.encoded_paths,
             is_multicast=self.is_multicast,
             self.encoded_paths,
             is_multicast=self.is_multicast,
-            l2_only=self.is_l2)
+            l2_only=self.is_l2,
+        )
         self.set_sw_if_index(reply.sw_if_index)
         self.tunnel_index = reply.tunnel_index
         self._test.registry.register(self, self._test.logger)
 
     def remove_vpp_config(self):
         reply = self.test.vapi.mpls_tunnel_add_del(
         self.set_sw_if_index(reply.sw_if_index)
         self.tunnel_index = reply.tunnel_index
         self._test.registry.register(self, self._test.logger)
 
     def remove_vpp_config(self):
         reply = self.test.vapi.mpls_tunnel_add_del(
-            self.sw_if_index,
-            self.encoded_paths,
-            is_add=0)
+            self.sw_if_index, self.encoded_paths, is_add=0
+        )
 
     def query_vpp_config(self):
         dump = self._test.vapi.mpls_tunnel_dump()
         for t in dump:
 
     def query_vpp_config(self):
         dump = self._test.vapi.mpls_tunnel_dump()
         for t in dump:
-            if self.sw_if_index == t.mt_tunnel.mt_sw_if_index and \
-               self.tunnel_index == t.mt_tunnel.mt_tunnel_index:
+            if (
+                self.sw_if_index == t.mt_tunnel.mt_sw_if_index
+                and self.tunnel_index == t.mt_tunnel.mt_tunnel_index
+            ):
                 return True
         return False
 
     def object_id(self):
                 return True
         return False
 
     def object_id(self):
-        return ("mpls-tunnel%d-%d" % (self.tunnel_index,
-                                      self.sw_if_index))
+        return "mpls-tunnel%d-%d" % (self.tunnel_index, self.sw_if_index)
index 9ba8700..d794026 100644 (file)
@@ -7,6 +7,7 @@
 from ipaddress import ip_address
 from vpp_object import VppObject
 from vpp_papi import mac_pton, VppEnum
 from ipaddress import ip_address
 from vpp_object import VppObject
 from vpp_papi import mac_pton, VppEnum
+
 try:
     text_type = unicode
 except NameError:
 try:
     text_type = unicode
 except NameError:
@@ -16,13 +17,14 @@ except NameError:
 def find_nbr(test, sw_if_index, nbr_addr, is_static=0, mac=None):
     ip_addr = ip_address(text_type(nbr_addr))
     e = VppEnum.vl_api_ip_neighbor_flags_t
 def find_nbr(test, sw_if_index, nbr_addr, is_static=0, mac=None):
     ip_addr = ip_address(text_type(nbr_addr))
     e = VppEnum.vl_api_ip_neighbor_flags_t
-    nbrs = test.vapi.ip_neighbor_dump(sw_if_index=sw_if_index,
-                                      af=ip_addr.vapi_af)
+    nbrs = test.vapi.ip_neighbor_dump(sw_if_index=sw_if_index, af=ip_addr.vapi_af)
 
     for n in nbrs:
 
     for n in nbrs:
-        if sw_if_index == n.neighbor.sw_if_index and \
-           ip_addr == n.neighbor.ip_address and \
-           is_static == (n.neighbor.flags & e.IP_API_NEIGHBOR_FLAG_STATIC):
+        if (
+            sw_if_index == n.neighbor.sw_if_index
+            and ip_addr == n.neighbor.ip_address
+            and is_static == (n.neighbor.flags & e.IP_API_NEIGHBOR_FLAG_STATIC)
+        ):
             if mac:
                 if mac == str(n.neighbor.mac_address):
                     return True
             if mac:
                 if mac == str(n.neighbor.mac_address):
                     return True
@@ -36,8 +38,15 @@ class VppNeighbor(VppObject):
     ARP Entry
     """
 
     ARP Entry
     """
 
-    def __init__(self, test, sw_if_index, mac_addr, nbr_addr,
-                 is_static=False, is_no_fib_entry=False):
+    def __init__(
+        self,
+        test,
+        sw_if_index,
+        mac_addr,
+        nbr_addr,
+        is_static=False,
+        is_no_fib_entry=False,
+    ):
         self._test = test
         self.sw_if_index = sw_if_index
         self.mac_addr = mac_addr
         self._test = test
         self.sw_if_index = sw_if_index
         self.mac_addr = mac_addr
@@ -52,35 +61,26 @@ class VppNeighbor(VppObject):
 
     def add_vpp_config(self):
         r = self._test.vapi.ip_neighbor_add_del(
 
     def add_vpp_config(self):
         r = self._test.vapi.ip_neighbor_add_del(
-            self.sw_if_index,
-            self.mac_addr,
-            self.nbr_addr,
-            is_add=1,
-            flags=self.flags)
+            self.sw_if_index, self.mac_addr, self.nbr_addr, is_add=1, flags=self.flags
+        )
         self.stats_index = r.stats_index
         self._test.registry.register(self, self._test.logger)
         return self
 
     def remove_vpp_config(self):
         self._test.vapi.ip_neighbor_add_del(
         self.stats_index = r.stats_index
         self._test.registry.register(self, self._test.logger)
         return self
 
     def remove_vpp_config(self):
         self._test.vapi.ip_neighbor_add_del(
-            self.sw_if_index,
-            self.mac_addr,
-            self.nbr_addr,
-            is_add=0,
-            flags=self.flags)
+            self.sw_if_index, self.mac_addr, self.nbr_addr, is_add=0, flags=self.flags
+        )
 
     def is_static(self):
         e = VppEnum.vl_api_ip_neighbor_flags_t
 
     def is_static(self):
         e = VppEnum.vl_api_ip_neighbor_flags_t
-        return (self.flags & e.IP_API_NEIGHBOR_FLAG_STATIC)
+        return self.flags & e.IP_API_NEIGHBOR_FLAG_STATIC
 
     def query_vpp_config(self):
 
     def query_vpp_config(self):
-        return find_nbr(self._test,
-                        self.sw_if_index,
-                        self.nbr_addr,
-                        self.is_static())
+        return find_nbr(self._test, self.sw_if_index, self.nbr_addr, self.is_static())
 
     def object_id(self):
 
     def object_id(self):
-        return ("%d:%s" % (self.sw_if_index, self.nbr_addr))
+        return "%d:%s" % (self.sw_if_index, self.nbr_addr)
 
     def get_stats(self):
         c = self._test.statistics["/net/adjacency"]
 
     def get_stats(self):
         c = self._test.statistics["/net/adjacency"]
index 8dd2afa..d3652b1 100644 (file)
@@ -4,11 +4,11 @@ import abc
 
 
 class VppObject(metaclass=abc.ABCMeta):
 
 
 class VppObject(metaclass=abc.ABCMeta):
-    """ Abstract vpp object """
+    """Abstract vpp object"""
 
     @abc.abstractmethod
     def add_vpp_config(self) -> None:
 
     @abc.abstractmethod
     def add_vpp_config(self) -> None:
-        """ Add the configuration for this object to vpp. """
+        """Add the configuration for this object to vpp."""
         pass
 
     @abc.abstractmethod
         pass
 
     @abc.abstractmethod
@@ -20,18 +20,18 @@ class VppObject(metaclass=abc.ABCMeta):
 
     @abc.abstractmethod
     def remove_vpp_config(self) -> None:
 
     @abc.abstractmethod
     def remove_vpp_config(self) -> None:
-        """ Remove the configuration for this object from vpp. """
+        """Remove the configuration for this object from vpp."""
         pass
 
     def object_id(self) -> str:
         pass
 
     def object_id(self) -> str:
-        """ Return a unique string representing this object. """
+        """Return a unique string representing this object."""
         return "Undefined. for <%s %s>" % (self.__class__.__name__, id(self))
 
     def __str__(self) -> str:
         return self.object_id()
 
     def __repr__(self) -> str:
         return "Undefined. for <%s %s>" % (self.__class__.__name__, id(self))
 
     def __str__(self) -> str:
         return self.object_id()
 
     def __repr__(self) -> str:
-        return '<%s>' % self.object_id()
+        return "<%s>" % self.object_id()
 
     def __hash__(self) -> int:
         return hash(self.object_id())
 
     def __hash__(self) -> int:
         return hash(self.object_id())
@@ -49,7 +49,8 @@ class VppObject(metaclass=abc.ABCMeta):
 
 
 class VppObjectRegistry:
 
 
 class VppObjectRegistry:
-    """ Class which handles automatic configuration cleanup. """
+    """Class which handles automatic configuration cleanup."""
+
     _shared_state = {}
 
     def __init__(self) -> None:
     _shared_state = {}
 
     def __init__(self) -> None:
@@ -60,7 +61,7 @@ class VppObjectRegistry:
             self._object_dict = dict()
 
     def register(self, obj: VppObject, logger) -> None:
             self._object_dict = dict()
 
     def register(self, obj: VppObject, logger) -> None:
-        """ Register an object in the registry. """
+        """Register an object in the registry."""
         if obj.object_id() not in self._object_dict:
             self._object_registry.append(obj)
             self._object_dict[obj.object_id()] = obj
         if obj.object_id() not in self._object_dict:
             self._object_registry.append(obj)
             self._object_dict[obj.object_id()] = obj
@@ -69,7 +70,7 @@ class VppObjectRegistry:
             logger.debug("REG: duplicate add, ignoring (%s)" % obj)
 
     def unregister_all(self, logger) -> None:
             logger.debug("REG: duplicate add, ignoring (%s)" % obj)
 
     def unregister_all(self, logger) -> None:
-        """ Remove all object registrations from registry. """
+        """Remove all object registrations from registry."""
         logger.debug("REG: removing all object registrations")
         self._object_registry = []
         self._object_dict = dict()
         logger.debug("REG: removing all object registrations")
         self._object_registry = []
         self._object_dict = dict()
@@ -93,12 +94,14 @@ class VppObjectRegistry:
                     failed.append(obj)
             else:
                 logger.info(
                     failed.append(obj)
             else:
                 logger.info(
-                    "REG: Skipping removal for %s, configuration not present" %
-                    obj)
+                    "REG: Skipping removal for %s, configuration not present" % obj
+                )
         self.unregister_all(logger)
         if failed:
             logger.error("REG: Couldn't remove configuration for object(s):")
             for obj in failed:
                 logger.error(repr(obj))
         self.unregister_all(logger)
         if failed:
             logger.error("REG: Couldn't remove configuration for object(s):")
             for obj in failed:
                 logger.error(repr(obj))
-            raise Exception("Couldn't remove configuration for object(s): %s" %
-                            (", ".join(str(x) for x in failed)))
+            raise Exception(
+                "Couldn't remove configuration for object(s): %s"
+                % (", ".join(str(x) for x in failed))
+            )
index 2f7da96..611e5a3 100644 (file)
@@ -1,13 +1,13 @@
 class CliFailedCommandError(Exception):
 class CliFailedCommandError(Exception):
-    """ cli command failed."""
+    """cli command failed."""
 
 
 class CliSyntaxError(Exception):
 
 
 class CliSyntaxError(Exception):
-    """ cli command had a syntax error."""
+    """cli command had a syntax error."""
 
 
 class UnexpectedApiReturnValueError(Exception):
 
 
 class UnexpectedApiReturnValueError(Exception):
-    """ exception raised when the API return value is unexpected """
+    """exception raised when the API return value is unexpected"""
 
     def __init__(self, retval, message):
         self.retval = retval
 
     def __init__(self, retval, message):
         self.retval = retval
index 9ff616c..a4a3799 100644 (file)
@@ -12,93 +12,215 @@ from six import moves, iteritems
 from config import config
 from vpp_papi import VPPApiClient
 from hook import Hook
 from config import config
 from vpp_papi import VPPApiClient
 from hook import Hook
-from vpp_papi_exceptions import CliFailedCommandError, CliSyntaxError,\
-    UnexpectedApiReturnValueError
+from vpp_papi_exceptions import (
+    CliFailedCommandError,
+    CliSyntaxError,
+    UnexpectedApiReturnValueError,
+)
 
 #
 # Dictionary keyed on message name to override default values for
 # named parameters
 #
 defaultmapping = {
 
 #
 # Dictionary keyed on message name to override default values for
 # named parameters
 #
 defaultmapping = {
-
-    'acl_interface_add_del': {'is_add': 1, 'is_input': 1},
-    'bd_ip_mac_add_del': {'is_add': 1, },
-    'bfd_udp_add': {'is_authenticated': False, 'bfd_key_id': None,
-                    'conf_key_id': None},
-    'bfd_udp_auth_activate': {'bfd_key_id': None, 'conf_key_id': None,
-                              'is_delayed': False},
-    'bier_disp_entry_add_del': {'next_hop_rpf_id': -1, 'next_hop_is_ip4': 1,
-                                'is_add': 1, },
-    'bier_disp_table_add_del': {'is_add': 1, },
-    'bier_imp_add': {'is_add': 1, },
-    'bier_route_add_del': {'is_add': 1, },
-    'bier_table_add_del': {'is_add': 1, },
-    'bridge_domain_add_del': {'flood': 1, 'uu_flood': 1, 'forward': 1,
-                              'learn': 1, 'is_add': 1, },
-    'bvi_delete': {},
-    'geneve_add_del_tunnel': {'mcast_sw_if_index': 4294967295, 'is_add': 1,
-                              'decap_next_index': 4294967295, },
-    'input_acl_set_interface': {'ip4_table_index': 4294967295,
-                                'ip6_table_index': 4294967295,
-                                'l2_table_index': 4294967295, },
-    'ip6_add_del_address_using_prefix': {'is_add': 1, },
-    'ip6nd_send_router_solicitation': {'irt': 1, 'mrt': 120, },
-    'ip_add_del_route': {'next_hop_sw_if_index': 4294967295,
-                         'next_hop_weight': 1, 'next_hop_via_label': 1048576,
-                         'classify_table_index': 4294967295, 'is_add': 1, },
-    'ip_mroute_add_del': {'is_add': 1, },
-    'ip_neighbor_add_del': {'is_add': 1, },
-    'ipsec_interface_add_del_spd': {'is_add': 1, },
-    'ipsec_spd_add_del': {'is_add': 1, },
-    'ipsec_spd_dump': {'sa_id': 4294967295, },
-    'ipsec_spd_entry_add_del': {'local_port_stop': 65535,
-                                'remote_port_stop': 65535, 'priority': 100,
-                                'is_outbound': 1,
-                                'is_add': 1, },
-    'ipsec_tunnel_if_add_del': {'is_add': 1, 'anti_replay': 1, },
-    'l2_emulation': {'enable': 1, },
-    'l2fib_add_del': {'is_add': 1, },
-    'lisp_add_del_adjacency': {'is_add': 1, },
-    'lisp_add_del_local_eid': {'is_add': 1, },
-    'lisp_add_del_locator': {'priority': 1, 'weight': 1, 'is_add': 1, },
-    'lisp_add_del_locator_set': {'is_add': 1, },
-    'lisp_add_del_remote_mapping': {'is_add': 1, },
-    'macip_acl_interface_add_del': {'is_add': 1, },
-    'mpls_ip_bind_unbind': {'is_ip4': 1, 'is_bind': 1, },
-    'mpls_route_add_del': {'mr_next_hop_sw_if_index': 4294967295,
-                           'mr_next_hop_weight': 1,
-                           'mr_next_hop_via_label': 1048576,
-                           'mr_is_add': 1,
-                           'mr_classify_table_index': 4294967295, },
-    'mpls_table_add_del': {'is_add': 1, },
-    'mpls_tunnel_add_del': {'next_hop_sw_if_index': 4294967295,
-                            'next_hop_weight': 1,
-                            'next_hop_via_label': 1048576,
-                            'is_add': 1, },
-    'output_acl_set_interface': {'ip4_table_index': 4294967295,
-                                 'ip6_table_index': 4294967295,
-                                 'l2_table_index': 4294967295, },
-    'pppoe_add_del_session': {'is_add': 1, },
-    'policer_add_del': {'is_add': 1, 'conform_action': {'type': 1}, },
-    'set_ipfix_exporter': {'collector_port': 4739, },
-    'sr_policy_add': {'weight': 1, 'is_encap': 1, },
-    'sw_interface_add_del_address': {'is_add': 1, },
-    'sw_interface_ip6nd_ra_prefix': {'val_lifetime': 4294967295,
-                                     'pref_lifetime': 4294967295, },
-    'sw_interface_set_ip_directed_broadcast': {'enable': 1, },
-    'sw_interface_set_l2_bridge': {'enable': 1, },
-    'sw_interface_set_mpls_enable': {'enable': 1, },
-    'sw_interface_set_mtu': {'mtu': [0, 0, 0, 0], },
-    'sw_interface_set_unnumbered': {'is_add': 1, },
-    'sw_interface_span_enable_disable': {'state': 1, },
-    'vxlan_add_del_tunnel': {'mcast_sw_if_index': 4294967295, 'is_add': 1,
-                             'decap_next_index': 4294967295,
-                             'instance': 4294967295, },
-    'want_bfd_events': {'enable_disable': 1, },
-    'want_igmp_events': {'enable': 1, },
-    'want_interface_events': {'enable_disable': 1, },
-    'want_l2_macs_events': {'enable_disable': 1, 'pid': os.getpid(), },
-    'want_l2_macs_events2': {'enable_disable': 1, 'pid': os.getpid(), },
+    "acl_interface_add_del": {"is_add": 1, "is_input": 1},
+    "bd_ip_mac_add_del": {
+        "is_add": 1,
+    },
+    "bfd_udp_add": {"is_authenticated": False, "bfd_key_id": None, "conf_key_id": None},
+    "bfd_udp_auth_activate": {
+        "bfd_key_id": None,
+        "conf_key_id": None,
+        "is_delayed": False,
+    },
+    "bier_disp_entry_add_del": {
+        "next_hop_rpf_id": -1,
+        "next_hop_is_ip4": 1,
+        "is_add": 1,
+    },
+    "bier_disp_table_add_del": {
+        "is_add": 1,
+    },
+    "bier_imp_add": {
+        "is_add": 1,
+    },
+    "bier_route_add_del": {
+        "is_add": 1,
+    },
+    "bier_table_add_del": {
+        "is_add": 1,
+    },
+    "bridge_domain_add_del": {
+        "flood": 1,
+        "uu_flood": 1,
+        "forward": 1,
+        "learn": 1,
+        "is_add": 1,
+    },
+    "bvi_delete": {},
+    "geneve_add_del_tunnel": {
+        "mcast_sw_if_index": 4294967295,
+        "is_add": 1,
+        "decap_next_index": 4294967295,
+    },
+    "input_acl_set_interface": {
+        "ip4_table_index": 4294967295,
+        "ip6_table_index": 4294967295,
+        "l2_table_index": 4294967295,
+    },
+    "ip6_add_del_address_using_prefix": {
+        "is_add": 1,
+    },
+    "ip6nd_send_router_solicitation": {
+        "irt": 1,
+        "mrt": 120,
+    },
+    "ip_add_del_route": {
+        "next_hop_sw_if_index": 4294967295,
+        "next_hop_weight": 1,
+        "next_hop_via_label": 1048576,
+        "classify_table_index": 4294967295,
+        "is_add": 1,
+    },
+    "ip_mroute_add_del": {
+        "is_add": 1,
+    },
+    "ip_neighbor_add_del": {
+        "is_add": 1,
+    },
+    "ipsec_interface_add_del_spd": {
+        "is_add": 1,
+    },
+    "ipsec_spd_add_del": {
+        "is_add": 1,
+    },
+    "ipsec_spd_dump": {
+        "sa_id": 4294967295,
+    },
+    "ipsec_spd_entry_add_del": {
+        "local_port_stop": 65535,
+        "remote_port_stop": 65535,
+        "priority": 100,
+        "is_outbound": 1,
+        "is_add": 1,
+    },
+    "ipsec_tunnel_if_add_del": {
+        "is_add": 1,
+        "anti_replay": 1,
+    },
+    "l2_emulation": {
+        "enable": 1,
+    },
+    "l2fib_add_del": {
+        "is_add": 1,
+    },
+    "lisp_add_del_adjacency": {
+        "is_add": 1,
+    },
+    "lisp_add_del_local_eid": {
+        "is_add": 1,
+    },
+    "lisp_add_del_locator": {
+        "priority": 1,
+        "weight": 1,
+        "is_add": 1,
+    },
+    "lisp_add_del_locator_set": {
+        "is_add": 1,
+    },
+    "lisp_add_del_remote_mapping": {
+        "is_add": 1,
+    },
+    "macip_acl_interface_add_del": {
+        "is_add": 1,
+    },
+    "mpls_ip_bind_unbind": {
+        "is_ip4": 1,
+        "is_bind": 1,
+    },
+    "mpls_route_add_del": {
+        "mr_next_hop_sw_if_index": 4294967295,
+        "mr_next_hop_weight": 1,
+        "mr_next_hop_via_label": 1048576,
+        "mr_is_add": 1,
+        "mr_classify_table_index": 4294967295,
+    },
+    "mpls_table_add_del": {
+        "is_add": 1,
+    },
+    "mpls_tunnel_add_del": {
+        "next_hop_sw_if_index": 4294967295,
+        "next_hop_weight": 1,
+        "next_hop_via_label": 1048576,
+        "is_add": 1,
+    },
+    "output_acl_set_interface": {
+        "ip4_table_index": 4294967295,
+        "ip6_table_index": 4294967295,
+        "l2_table_index": 4294967295,
+    },
+    "pppoe_add_del_session": {
+        "is_add": 1,
+    },
+    "policer_add_del": {
+        "is_add": 1,
+        "conform_action": {"type": 1},
+    },
+    "set_ipfix_exporter": {
+        "collector_port": 4739,
+    },
+    "sr_policy_add": {
+        "weight": 1,
+        "is_encap": 1,
+    },
+    "sw_interface_add_del_address": {
+        "is_add": 1,
+    },
+    "sw_interface_ip6nd_ra_prefix": {
+        "val_lifetime": 4294967295,
+        "pref_lifetime": 4294967295,
+    },
+    "sw_interface_set_ip_directed_broadcast": {
+        "enable": 1,
+    },
+    "sw_interface_set_l2_bridge": {
+        "enable": 1,
+    },
+    "sw_interface_set_mpls_enable": {
+        "enable": 1,
+    },
+    "sw_interface_set_mtu": {
+        "mtu": [0, 0, 0, 0],
+    },
+    "sw_interface_set_unnumbered": {
+        "is_add": 1,
+    },
+    "sw_interface_span_enable_disable": {
+        "state": 1,
+    },
+    "vxlan_add_del_tunnel": {
+        "mcast_sw_if_index": 4294967295,
+        "is_add": 1,
+        "decap_next_index": 4294967295,
+        "instance": 4294967295,
+    },
+    "want_bfd_events": {
+        "enable_disable": 1,
+    },
+    "want_igmp_events": {
+        "enable": 1,
+    },
+    "want_interface_events": {
+        "enable_disable": 1,
+    },
+    "want_l2_macs_events": {
+        "enable_disable": 1,
+        "pid": os.getpid(),
+    },
+    "want_l2_macs_events2": {
+        "enable_disable": 1,
+        "pid": os.getpid(),
+    },
 }
 
 
 }
 
 
@@ -125,35 +247,37 @@ class VppPapiProvider(object):
         # calling the constructor.
         VPPApiClient.apidir = config.vpp_install_dir
 
         # calling the constructor.
         VPPApiClient.apidir = config.vpp_install_dir
 
-        self.vpp = VPPApiClient(logger=test_class.logger,
-                                read_timeout=read_timeout,
-                                use_socket=True,
-                                server_address=test_class.get_api_sock_path())
+        self.vpp = VPPApiClient(
+            logger=test_class.logger,
+            read_timeout=read_timeout,
+            use_socket=True,
+            server_address=test_class.get_api_sock_path(),
+        )
         self._events = queue.Queue()
 
     def __enter__(self):
         return self
 
     def assert_negative_api_retval(self):
         self._events = queue.Queue()
 
     def __enter__(self):
         return self
 
     def assert_negative_api_retval(self):
-        """ Expect API failure - used with with, e.g.::
+        """Expect API failure - used with with, e.g.::
 
 
-                with self.vapi.assert_negative_api_retval():
-                    self.vapi.<api call expected to fail>
+            with self.vapi.assert_negative_api_retval():
+                self.vapi.<api call expected to fail>
 
 
-            ..
+        ..
         """
         self._expect_stack.append(self._expect_api_retval)
         self._expect_api_retval = self._negative
         return self
 
     def assert_zero_api_retval(self):
         """
         self._expect_stack.append(self._expect_api_retval)
         self._expect_api_retval = self._negative
         return self
 
     def assert_zero_api_retval(self):
-        """ Expect API success - used with with, e.g.::
+        """Expect API success - used with with, e.g.::
 
 
-                with self.vapi.assert_negative_api_retval():
-                    self.vapi.<api call expected to succeed>
+            with self.vapi.assert_negative_api_retval():
+                self.vapi.<api call expected to succeed>
 
 
-            :note: this is useful only inside another with block
-                 as success is the default expected value
+        :note: this is useful only inside another with block
+             as success is the default expected value
         """
         self._expect_stack.append(self._expect_api_retval)
         self._expect_api_retval = self._zero
         """
         self._expect_stack.append(self._expect_api_retval)
         self._expect_api_retval = self._zero
@@ -171,7 +295,7 @@ class VppPapiProvider(object):
         self.hook = hook
 
     def collect_events(self):
         self.hook = hook
 
     def collect_events(self):
-        """ Collect all events from the internal queue and clear the queue. """
+        """Collect all events from the internal queue and clear the queue."""
         result = []
         while True:
             try:
         result = []
         while True:
             try:
@@ -182,26 +306,25 @@ class VppPapiProvider(object):
         return result
 
     def wait_for_event(self, timeout, name=None):
         return result
 
     def wait_for_event(self, timeout, name=None):
-        """ Wait for and return next event. """
+        """Wait for and return next event."""
         if name:
         if name:
-            self.test_class.logger.debug("Expecting event '%s' within %ss",
-                                         name, timeout)
+            self.test_class.logger.debug(
+                "Expecting event '%s' within %ss", name, timeout
+            )
         else:
         else:
-            self.test_class.logger.debug("Expecting event within %ss",
-                                         timeout)
+            self.test_class.logger.debug("Expecting event within %ss", timeout)
         try:
             e = self._events.get(timeout=timeout)
         except queue.Empty:
             raise Exception("Event did not occur within timeout")
         msgname = type(e).__name__
         if name and msgname != name:
         try:
             e = self._events.get(timeout=timeout)
         except queue.Empty:
             raise Exception("Event did not occur within timeout")
         msgname = type(e).__name__
         if name and msgname != name:
-            raise Exception("Unexpected event received: %s, expected: %s"
-                            % msgname)
+            raise Exception("Unexpected event received: %s, expected: %s" % msgname)
         self.test_class.logger.debug("Returning event %s:%s" % (name, e))
         return e
 
     def __call__(self, name, event):
         self.test_class.logger.debug("Returning event %s:%s" % (name, e))
         return e
 
     def __call__(self, name, event):
-        """ Enqueue event in the internal event queue. """
+        """Enqueue event in the internal event queue."""
         self.test_class.logger.debug("New event: %s: %s" % (name, event))
         self._events.put(event)
 
         self.test_class.logger.debug("New event: %s: %s" % (name, event))
         self._events.put(event)
 
@@ -255,7 +378,7 @@ class VppPapiProvider(object):
         self.vpp.disconnect()
 
     def api(self, api_fn, api_args, expected_retval=0):
         self.vpp.disconnect()
 
     def api(self, api_fn, api_args, expected_retval=0):
-        """ Call API function and check it's return value.
+        """Call API function and check it's return value.
         Call the appropriate hooks before and after the API call
 
         :param api_fn: API function to call
         Call the appropriate hooks before and after the API call
 
         :param api_fn: API function to call
@@ -267,32 +390,44 @@ class VppPapiProvider(object):
         self.hook.before_api(api_fn.__name__, api_args)
         reply = api_fn(**api_args)
         if self._expect_api_retval == self._negative:
         self.hook.before_api(api_fn.__name__, api_args)
         reply = api_fn(**api_args)
         if self._expect_api_retval == self._negative:
-            if hasattr(reply, 'retval') and reply.retval >= 0:
-                msg = "%s(%s) passed unexpectedly: expected negative " \
-                      "return value instead of %d in %s" % \
-                      (api_fn.__name__, as_fn_signature(api_args),
-                       reply.retval,
-                       moves.reprlib.repr(reply))
+            if hasattr(reply, "retval") and reply.retval >= 0:
+                msg = (
+                    "%s(%s) passed unexpectedly: expected negative "
+                    "return value instead of %d in %s"
+                    % (
+                        api_fn.__name__,
+                        as_fn_signature(api_args),
+                        reply.retval,
+                        moves.reprlib.repr(reply),
+                    )
+                )
                 self.test_class.logger.info(msg)
                 raise UnexpectedApiReturnValueError(reply.retval, msg)
         elif self._expect_api_retval == self._zero:
                 self.test_class.logger.info(msg)
                 raise UnexpectedApiReturnValueError(reply.retval, msg)
         elif self._expect_api_retval == self._zero:
-            if hasattr(reply, 'retval') and reply.retval != expected_retval:
-                msg = "%s(%s) failed, expected %d return value instead " \
-                      "of %d in %s" % (api_fn.__name__,
-                                       as_fn_signature(api_args),
-                                       expected_retval, reply.retval,
-                                       repr(reply))
+            if hasattr(reply, "retval") and reply.retval != expected_retval:
+                msg = (
+                    "%s(%s) failed, expected %d return value instead "
+                    "of %d in %s"
+                    % (
+                        api_fn.__name__,
+                        as_fn_signature(api_args),
+                        expected_retval,
+                        reply.retval,
+                        repr(reply),
+                    )
+                )
                 self.test_class.logger.info(msg)
                 raise UnexpectedApiReturnValueError(reply.retval, msg)
         else:
                 self.test_class.logger.info(msg)
                 raise UnexpectedApiReturnValueError(reply.retval, msg)
         else:
-            raise Exception("Internal error, unexpected value for "
-                            "self._expect_api_retval %s" %
-                            self._expect_api_retval)
+            raise Exception(
+                "Internal error, unexpected value for "
+                "self._expect_api_retval %s" % self._expect_api_retval
+            )
         self.hook.after_api(api_fn.__name__, api_args)
         return reply
 
     def cli_return_response(self, cli):
         self.hook.after_api(api_fn.__name__, api_args)
         return reply
 
     def cli_return_response(self, cli):
-        """ Execute a CLI, calling the before/after hooks appropriately.
+        """Execute a CLI, calling the before/after hooks appropriately.
         Return the reply without examining it
 
         :param cli: CLI to execute
         Return the reply without examining it
 
         :param cli: CLI to execute
@@ -300,13 +435,13 @@ class VppPapiProvider(object):
 
         """
         self.hook.before_cli(cli)
 
         """
         self.hook.before_cli(cli)
-        cli += '\n'
+        cli += "\n"
         r = self.papi.cli_inband(cmd=cli)
         self.hook.after_cli(cli)
         return r
 
     def cli(self, cli):
         r = self.papi.cli_inband(cmd=cli)
         self.hook.after_cli(cli)
         return r
 
     def cli(self, cli):
-        """ Execute a CLI, calling the before/after hooks appropriately.
+        """Execute a CLI, calling the before/after hooks appropriately.
 
         :param cli: CLI to execute
         :returns: CLI output
 
         :param cli: CLI to execute
         :returns: CLI output
@@ -317,35 +452,43 @@ class VppPapiProvider(object):
             raise CliSyntaxError(r.reply)
         if r.retval != 0:
             raise CliFailedCommandError(r.reply)
             raise CliSyntaxError(r.reply)
         if r.retval != 0:
             raise CliFailedCommandError(r.reply)
-        if hasattr(r, 'reply'):
+        if hasattr(r, "reply"):
             return r.reply
 
     def ppcli(self, cli):
             return r.reply
 
     def ppcli(self, cli):
-        """ Helper method to print CLI command in case of info logging level.
+        """Helper method to print CLI command in case of info logging level.
 
         :param cli: CLI to execute
         :returns: CLI output
         """
         return cli + "\n" + self.cli(cli)
 
 
         :param cli: CLI to execute
         :returns: CLI output
         """
         return cli + "\n" + self.cli(cli)
 
-    def ip6nd_send_router_solicitation(self, sw_if_index, irt=1, mrt=120,
-                                       mrc=0, mrd=0):
-        return self.api(self.papi.ip6nd_send_router_solicitation,
-                        {'irt': irt,
-                         'mrt': mrt,
-                         'mrc': mrc,
-                         'mrd': mrd,
-                         'sw_if_index': sw_if_index})
+    def ip6nd_send_router_solicitation(self, sw_if_index, irt=1, mrt=120, mrc=0, mrd=0):
+        return self.api(
+            self.papi.ip6nd_send_router_solicitation,
+            {
+                "irt": irt,
+                "mrt": mrt,
+                "mrc": mrc,
+                "mrd": mrd,
+                "sw_if_index": sw_if_index,
+            },
+        )
 
     def want_interface_events(self, enable_disable=1):
 
     def want_interface_events(self, enable_disable=1):
-        return self.api(self.papi.want_interface_events,
-                        {'enable_disable': enable_disable,
-                         'pid': os.getpid(), })
+        return self.api(
+            self.papi.want_interface_events,
+            {
+                "enable_disable": enable_disable,
+                "pid": os.getpid(),
+            },
+        )
 
     def sw_interface_set_mac_address(self, sw_if_index, mac):
 
     def sw_interface_set_mac_address(self, sw_if_index, mac):
-        return self.api(self.papi.sw_interface_set_mac_address,
-                        {'sw_if_index': sw_if_index,
-                         'mac_address': mac})
+        return self.api(
+            self.papi.sw_interface_set_mac_address,
+            {"sw_if_index": sw_if_index, "mac_address": mac},
+        )
 
     def p2p_ethernet_add(self, sw_if_index, remote_mac, subif_id):
         """Create p2p ethernet subinterface
 
     def p2p_ethernet_add(self, sw_if_index, remote_mac, subif_id):
         """Create p2p ethernet subinterface
@@ -356,9 +499,12 @@ class VppPapiProvider(object):
         """
         return self.api(
             self.papi.p2p_ethernet_add,
         """
         return self.api(
             self.papi.p2p_ethernet_add,
-            {'parent_if_index': sw_if_index,
-             'remote_mac': remote_mac,
-             'subif_id': subif_id})
+            {
+                "parent_if_index": sw_if_index,
+                "remote_mac": remote_mac,
+                "subif_id": subif_id,
+            },
+        )
 
     def p2p_ethernet_del(self, sw_if_index, remote_mac):
         """Delete p2p ethernet subinterface
 
     def p2p_ethernet_del(self, sw_if_index, remote_mac):
         """Delete p2p ethernet subinterface
@@ -369,8 +515,8 @@ class VppPapiProvider(object):
         """
         return self.api(
             self.papi.p2p_ethernet_del,
         """
         return self.api(
             self.papi.p2p_ethernet_del,
-            {'parent_if_index': sw_if_index,
-             'remote_mac': remote_mac})
+            {"parent_if_index": sw_if_index, "remote_mac": remote_mac},
+        )
 
     def create_vlan_subif(self, sw_if_index, vlan):
         """
 
     def create_vlan_subif(self, sw_if_index, vlan):
         """
@@ -379,42 +525,32 @@ class VppPapiProvider(object):
         :param sw_if_index:
 
         """
         :param sw_if_index:
 
         """
-        return self.api(self.papi.create_vlan_subif,
-                        {'sw_if_index': sw_if_index,
-                         'vlan_id': vlan})
+        return self.api(
+            self.papi.create_vlan_subif, {"sw_if_index": sw_if_index, "vlan_id": vlan}
+        )
 
 
-    def create_loopback(self, mac=''):
+    def create_loopback(self, mac=""):
         """
 
         :param mac: (Optional)
         """
         """
 
         :param mac: (Optional)
         """
-        return self.api(self.papi.create_loopback,
-                        {'mac_address': mac})
+        return self.api(self.papi.create_loopback, {"mac_address": mac})
 
     def ip_route_dump(self, table_id, is_ip6=False):
 
     def ip_route_dump(self, table_id, is_ip6=False):
-        return self.api(self.papi.ip_route_dump,
-                        {'table': {
-                            'table_id': table_id,
-                            'is_ip6': is_ip6
-                        }})
+        return self.api(
+            self.papi.ip_route_dump, {"table": {"table_id": table_id, "is_ip6": is_ip6}}
+        )
 
     def ip_route_v2_dump(self, table_id, is_ip6=False, src=0):
 
     def ip_route_v2_dump(self, table_id, is_ip6=False, src=0):
-        return self.api(self.papi.ip_route_v2_dump,
-                        {
-                            'src': src,
-                            'table': {
-                                'table_id': table_id,
-                                'is_ip6': is_ip6
-                            }
-                        })
-
-    def ip_neighbor_add_del(self,
-                            sw_if_index,
-                            mac_address,
-                            ip_address,
-                            is_add=1,
-                            flags=0):
-        """ Add neighbor MAC to IPv4 or IPv6 address.
+        return self.api(
+            self.papi.ip_route_v2_dump,
+            {"src": src, "table": {"table_id": table_id, "is_ip6": is_ip6}},
+        )
+
+    def ip_neighbor_add_del(
+        self, sw_if_index, mac_address, ip_address, is_add=1, flags=0
+    ):
+        """Add neighbor MAC to IPv4 or IPv6 address.
 
         :param sw_if_index:
         :param mac_address:
 
         :param sw_if_index:
         :param mac_address:
@@ -425,23 +561,18 @@ class VppPapiProvider(object):
         return self.api(
             self.papi.ip_neighbor_add_del,
             {
         return self.api(
             self.papi.ip_neighbor_add_del,
             {
-                'is_add': is_add,
-                'neighbor': {
-                    'sw_if_index': sw_if_index,
-                    'flags': flags,
-                    'mac_address': mac_address,
-                    'ip_address': ip_address
-                }
-            }
+                "is_add": is_add,
+                "neighbor": {
+                    "sw_if_index": sw_if_index,
+                    "flags": flags,
+                    "mac_address": mac_address,
+                    "ip_address": ip_address,
+                },
+            },
         )
 
         )
 
-    def udp_encap_add(self,
-                      src_ip,
-                      dst_ip,
-                      src_port,
-                      dst_port,
-                      table_id=0):
-        """ Add a GRE tunnel
+    def udp_encap_add(self, src_ip, dst_ip, src_port, dst_port, table_id=0):
+        """Add a GRE tunnel
         :param src_ip:
         :param dst_ip:
         :param src_port:
         :param src_ip:
         :param dst_ip:
         :param src_port:
@@ -452,39 +583,34 @@ class VppPapiProvider(object):
         return self.api(
             self.papi.udp_encap_add,
             {
         return self.api(
             self.papi.udp_encap_add,
             {
-                'udp_encap': {
-                    'src_ip': src_ip,
-                    'dst_ip': dst_ip,
-                    'src_port': src_port,
-                    'dst_port': dst_port,
-                    'table_id': table_id
+                "udp_encap": {
+                    "src_ip": src_ip,
+                    "dst_ip": dst_ip,
+                    "src_port": src_port,
+                    "dst_port": dst_port,
+                    "table_id": table_id,
                 }
                 }
-            })
+            },
+        )
 
     def udp_encap_del(self, id):
 
     def udp_encap_del(self, id):
-        return self.api(self.papi.udp_encap_del, {'id': id})
+        return self.api(self.papi.udp_encap_del, {"id": id})
 
     def udp_encap_dump(self):
         return self.api(self.papi.udp_encap_dump, {})
 
     def want_udp_encap_stats(self, enable=1):
 
     def udp_encap_dump(self):
         return self.api(self.papi.udp_encap_dump, {})
 
     def want_udp_encap_stats(self, enable=1):
-        return self.api(self.papi.want_udp_encap_stats,
-                        {'enable': enable,
-                         'pid': os.getpid()})
+        return self.api(
+            self.papi.want_udp_encap_stats, {"enable": enable, "pid": os.getpid()}
+        )
 
     def mpls_route_dump(self, table_id):
 
     def mpls_route_dump(self, table_id):
-        return self.api(self.papi.mpls_route_dump,
-                        {'table': {
-                            'mt_table_id': table_id
-                        }})
+        return self.api(self.papi.mpls_route_dump, {"table": {"mt_table_id": table_id}})
 
     def mpls_table_dump(self):
         return self.api(self.papi.mpls_table_dump, {})
 
 
     def mpls_table_dump(self):
         return self.api(self.papi.mpls_table_dump, {})
 
-    def mpls_table_add_del(
-            self,
-            table_id,
-            is_add=1):
+    def mpls_table_add_del(self, table_id, is_add=1):
         """
 
         :param table_id
         """
 
         :param table_id
@@ -494,82 +620,74 @@ class VppPapiProvider(object):
 
         return self.api(
             self.papi.mpls_table_add_del,
 
         return self.api(
             self.papi.mpls_table_add_del,
-            {'mt_table':
-             {
-                 'mt_table_id': table_id,
-             },
-             'mt_is_add': is_add})
-
-    def mpls_route_add_del(self,
-                           table_id,
-                           label,
-                           eos,
-                           eos_proto,
-                           is_multicast,
-                           paths,
-                           is_add,
-                           is_multipath):
-        """ MPLS Route add/del """
+            {
+                "mt_table": {
+                    "mt_table_id": table_id,
+                },
+                "mt_is_add": is_add,
+            },
+        )
+
+    def mpls_route_add_del(
+        self, table_id, label, eos, eos_proto, is_multicast, paths, is_add, is_multipath
+    ):
+        """MPLS Route add/del"""
         return self.api(
             self.papi.mpls_route_add_del,
         return self.api(
             self.papi.mpls_route_add_del,
-            {'mr_route':
-             {
-                 'mr_table_id': table_id,
-                 'mr_label': label,
-                 'mr_eos': eos,
-                 'mr_eos_proto': eos_proto,
-                 'mr_is_multicast': is_multicast,
-                 'mr_n_paths': len(paths),
-                 'mr_paths': paths,
-             },
-             'mr_is_add': is_add,
-             'mr_is_multipath': is_multipath})
-
-    def mpls_ip_bind_unbind(
-            self,
-            label,
-            prefix,
-            table_id=0,
-            ip_table_id=0,
-            is_bind=1):
-        """
-        """
+            {
+                "mr_route": {
+                    "mr_table_id": table_id,
+                    "mr_label": label,
+                    "mr_eos": eos,
+                    "mr_eos_proto": eos_proto,
+                    "mr_is_multicast": is_multicast,
+                    "mr_n_paths": len(paths),
+                    "mr_paths": paths,
+                },
+                "mr_is_add": is_add,
+                "mr_is_multipath": is_multipath,
+            },
+        )
+
+    def mpls_ip_bind_unbind(self, label, prefix, table_id=0, ip_table_id=0, is_bind=1):
+        """ """
         return self.api(
             self.papi.mpls_ip_bind_unbind,
         return self.api(
             self.papi.mpls_ip_bind_unbind,
-            {'mb_mpls_table_id': table_id,
-             'mb_label': label,
-             'mb_ip_table_id': ip_table_id,
-             'mb_is_bind': is_bind,
-             'mb_prefix': prefix})
+            {
+                "mb_mpls_table_id": table_id,
+                "mb_label": label,
+                "mb_ip_table_id": ip_table_id,
+                "mb_is_bind": is_bind,
+                "mb_prefix": prefix,
+            },
+        )
 
     def mpls_tunnel_add_del(
 
     def mpls_tunnel_add_del(
-            self,
-            tun_sw_if_index,
-            paths,
-            is_add=1,
-            l2_only=0,
-            is_multicast=0):
-        """
-        """
+        self, tun_sw_if_index, paths, is_add=1, l2_only=0, is_multicast=0
+    ):
+        """ """
         return self.api(
             self.papi.mpls_tunnel_add_del,
         return self.api(
             self.papi.mpls_tunnel_add_del,
-            {'mt_is_add': is_add,
-             'mt_tunnel':
-             {
-                 'mt_sw_if_index': tun_sw_if_index,
-                 'mt_l2_only': l2_only,
-                 'mt_is_multicast': is_multicast,
-                 'mt_n_paths': len(paths),
-                 'mt_paths': paths,
-             }})
+            {
+                "mt_is_add": is_add,
+                "mt_tunnel": {
+                    "mt_sw_if_index": tun_sw_if_index,
+                    "mt_l2_only": l2_only,
+                    "mt_is_multicast": is_multicast,
+                    "mt_n_paths": len(paths),
+                    "mt_paths": paths,
+                },
+            },
+        )
 
     def input_acl_set_interface(
 
     def input_acl_set_interface(
-            self,
-            is_add,
-            sw_if_index,
-            ip4_table_index=0xFFFFFFFF,
-            ip6_table_index=0xFFFFFFFF,
-            l2_table_index=0xFFFFFFFF):
+        self,
+        is_add,
+        sw_if_index,
+        ip4_table_index=0xFFFFFFFF,
+        ip6_table_index=0xFFFFFFFF,
+        l2_table_index=0xFFFFFFFF,
+    ):
         """
         :param is_add:
         :param sw_if_index:
         """
         :param is_add:
         :param sw_if_index:
@@ -580,19 +698,23 @@ class VppPapiProvider(object):
 
         return self.api(
             self.papi.input_acl_set_interface,
 
         return self.api(
             self.papi.input_acl_set_interface,
-            {'sw_if_index': sw_if_index,
-             'ip4_table_index': ip4_table_index,
-             'ip6_table_index': ip6_table_index,
-             'l2_table_index': l2_table_index,
-             'is_add': is_add})
+            {
+                "sw_if_index": sw_if_index,
+                "ip4_table_index": ip4_table_index,
+                "ip6_table_index": ip6_table_index,
+                "l2_table_index": l2_table_index,
+                "is_add": is_add,
+            },
+        )
 
     def output_acl_set_interface(
 
     def output_acl_set_interface(
-            self,
-            is_add,
-            sw_if_index,
-            ip4_table_index=0xFFFFFFFF,
-            ip6_table_index=0xFFFFFFFF,
-            l2_table_index=0xFFFFFFFF):
+        self,
+        is_add,
+        sw_if_index,
+        ip4_table_index=0xFFFFFFFF,
+        ip6_table_index=0xFFFFFFFF,
+        l2_table_index=0xFFFFFFFF,
+    ):
         """
         :param is_add:
         :param sw_if_index:
         """
         :param is_add:
         :param sw_if_index:
@@ -603,50 +725,50 @@ class VppPapiProvider(object):
 
         return self.api(
             self.papi.output_acl_set_interface,
 
         return self.api(
             self.papi.output_acl_set_interface,
-            {'sw_if_index': sw_if_index,
-             'ip4_table_index': ip4_table_index,
-             'ip6_table_index': ip6_table_index,
-             'l2_table_index': l2_table_index,
-             'is_add': is_add})
+            {
+                "sw_if_index": sw_if_index,
+                "ip4_table_index": ip4_table_index,
+                "ip6_table_index": ip6_table_index,
+                "l2_table_index": l2_table_index,
+                "is_add": is_add,
+            },
+        )
 
     def set_ipfix_exporter(
 
     def set_ipfix_exporter(
-            self,
-            collector_address,
-            src_address,
-            path_mtu,
-            template_interval,
-            vrf_id=0,
-            collector_port=4739,
-            udp_checksum=0):
+        self,
+        collector_address,
+        src_address,
+        path_mtu,
+        template_interval,
+        vrf_id=0,
+        collector_port=4739,
+        udp_checksum=0,
+    ):
         return self.api(
             self.papi.set_ipfix_exporter,
             {
         return self.api(
             self.papi.set_ipfix_exporter,
             {
-                'collector_address': collector_address,
-                'collector_port': collector_port,
-                'src_address': src_address,
-                'vrf_id': vrf_id,
-                'path_mtu': path_mtu,
-                'template_interval': template_interval,
-                'udp_checksum': udp_checksum,
-            })
+                "collector_address": collector_address,
+                "collector_port": collector_port,
+                "src_address": src_address,
+                "vrf_id": vrf_id,
+                "path_mtu": path_mtu,
+                "template_interval": template_interval,
+                "udp_checksum": udp_checksum,
+            },
+        )
 
     def mfib_signal_dump(self):
         return self.api(self.papi.mfib_signal_dump, {})
 
     def ip_mroute_dump(self, table_id, is_ip6=False):
 
     def mfib_signal_dump(self):
         return self.api(self.papi.mfib_signal_dump, {})
 
     def ip_mroute_dump(self, table_id, is_ip6=False):
-        return self.api(self.papi.ip_mroute_dump,
-                        {'table': {
-                            'table_id': table_id,
-                            'is_ip6': is_ip6
-                        }})
+        return self.api(
+            self.papi.ip_mroute_dump,
+            {"table": {"table_id": table_id, "is_ip6": is_ip6}},
+        )
 
     def pppoe_add_del_session(
 
     def pppoe_add_del_session(
-            self,
-            client_ip,
-            client_mac,
-            session_id=0,
-            is_add=1,
-            decap_vrf_id=0):
+        self, client_ip, client_mac, session_id=0, is_add=1, decap_vrf_id=0
+    ):
         """
 
         :param is_add:  (Default value = 1)
         """
 
         :param is_add:  (Default value = 1)
@@ -657,139 +779,155 @@ class VppPapiProvider(object):
         :param decap_vrf_id:  (Default value = 0)
 
         """
         :param decap_vrf_id:  (Default value = 0)
 
         """
-        return self.api(self.papi.pppoe_add_del_session,
-                        {'is_add': is_add,
-                         'session_id': session_id,
-                         'client_ip': client_ip,
-                         'decap_vrf_id': decap_vrf_id,
-                         'client_mac': client_mac})
+        return self.api(
+            self.papi.pppoe_add_del_session,
+            {
+                "is_add": is_add,
+                "session_id": session_id,
+                "client_ip": client_ip,
+                "decap_vrf_id": decap_vrf_id,
+                "client_mac": client_mac,
+            },
+        )
 
     def sr_mpls_policy_add(self, bsid, weight, type, segments):
 
     def sr_mpls_policy_add(self, bsid, weight, type, segments):
-        return self.api(self.papi.sr_mpls_policy_add,
-                        {'bsid': bsid,
-                         'weight': weight,
-                         'is_spray': type,
-                         'n_segments': len(segments),
-                         'segments': segments})
+        return self.api(
+            self.papi.sr_mpls_policy_add,
+            {
+                "bsid": bsid,
+                "weight": weight,
+                "is_spray": type,
+                "n_segments": len(segments),
+                "segments": segments,
+            },
+        )
 
     def sr_mpls_policy_del(self, bsid):
 
     def sr_mpls_policy_del(self, bsid):
-        return self.api(self.papi.sr_mpls_policy_del,
-                        {'bsid': bsid})
+        return self.api(self.papi.sr_mpls_policy_del, {"bsid": bsid})
 
 
-    def bier_table_add_del(self,
-                           bti,
-                           mpls_label,
-                           is_add=1):
-        """ BIER Table add/del """
+    def bier_table_add_del(self, bti, mpls_label, is_add=1):
+        """BIER Table add/del"""
         return self.api(
             self.papi.bier_table_add_del,
         return self.api(
             self.papi.bier_table_add_del,
-            {'bt_tbl_id': {"bt_set": bti.set_id,
-                           "bt_sub_domain": bti.sub_domain_id,
-                           "bt_hdr_len_id": bti.hdr_len_id},
-             'bt_label': mpls_label,
-             'bt_is_add': is_add})
+            {
+                "bt_tbl_id": {
+                    "bt_set": bti.set_id,
+                    "bt_sub_domain": bti.sub_domain_id,
+                    "bt_hdr_len_id": bti.hdr_len_id,
+                },
+                "bt_label": mpls_label,
+                "bt_is_add": is_add,
+            },
+        )
 
     def bier_table_dump(self):
         return self.api(self.papi.bier_table_dump, {})
 
 
     def bier_table_dump(self):
         return self.api(self.papi.bier_table_dump, {})
 
-    def bier_route_add_del(self,
-                           bti,
-                           bp,
-                           paths,
-                           is_add=1,
-                           is_replace=0):
-        """ BIER Route add/del """
+    def bier_route_add_del(self, bti, bp, paths, is_add=1, is_replace=0):
+        """BIER Route add/del"""
         return self.api(
             self.papi.bier_route_add_del,
             {
         return self.api(
             self.papi.bier_route_add_del,
             {
-                'br_route': {
-                    'br_tbl_id': {"bt_set": bti.set_id,
-                                  "bt_sub_domain": bti.sub_domain_id,
-                                  "bt_hdr_len_id": bti.hdr_len_id},
-                    'br_bp': bp,
-                    'br_n_paths': len(paths),
-                    'br_paths': paths,
+                "br_route": {
+                    "br_tbl_id": {
+                        "bt_set": bti.set_id,
+                        "bt_sub_domain": bti.sub_domain_id,
+                        "bt_hdr_len_id": bti.hdr_len_id,
+                    },
+                    "br_bp": bp,
+                    "br_n_paths": len(paths),
+                    "br_paths": paths,
                 },
                 },
-                'br_is_add': is_add,
-                'br_is_replace': is_replace
-            })
+                "br_is_add": is_add,
+                "br_is_replace": is_replace,
+            },
+        )
 
     def bier_route_dump(self, bti):
         return self.api(
             self.papi.bier_route_dump,
 
     def bier_route_dump(self, bti):
         return self.api(
             self.papi.bier_route_dump,
-            {'br_tbl_id': {"bt_set": bti.set_id,
-                           "bt_sub_domain": bti.sub_domain_id,
-                           "bt_hdr_len_id": bti.hdr_len_id}})
+            {
+                "br_tbl_id": {
+                    "bt_set": bti.set_id,
+                    "bt_sub_domain": bti.sub_domain_id,
+                    "bt_hdr_len_id": bti.hdr_len_id,
+                }
+            },
+        )
 
 
-    def bier_imp_add(self,
-                     bti,
-                     src,
-                     ibytes,
-                     is_add=1):
-        """ BIER Imposition Add """
+    def bier_imp_add(self, bti, src, ibytes, is_add=1):
+        """BIER Imposition Add"""
         return self.api(
             self.papi.bier_imp_add,
         return self.api(
             self.papi.bier_imp_add,
-            {'bi_tbl_id': {"bt_set": bti.set_id,
-                           "bt_sub_domain": bti.sub_domain_id,
-                           "bt_hdr_len_id": bti.hdr_len_id},
-             'bi_src': src,
-             'bi_n_bytes': len(ibytes),
-             'bi_bytes': ibytes})
+            {
+                "bi_tbl_id": {
+                    "bt_set": bti.set_id,
+                    "bt_sub_domain": bti.sub_domain_id,
+                    "bt_hdr_len_id": bti.hdr_len_id,
+                },
+                "bi_src": src,
+                "bi_n_bytes": len(ibytes),
+                "bi_bytes": ibytes,
+            },
+        )
 
     def bier_imp_del(self, bi_index):
 
     def bier_imp_del(self, bi_index):
-        """ BIER Imposition del """
-        return self.api(
-            self.papi.bier_imp_del,
-            {'bi_index': bi_index})
+        """BIER Imposition del"""
+        return self.api(self.papi.bier_imp_del, {"bi_index": bi_index})
 
     def bier_imp_dump(self):
         return self.api(self.papi.bier_imp_dump, {})
 
 
     def bier_imp_dump(self):
         return self.api(self.papi.bier_imp_dump, {})
 
-    def bier_disp_table_add_del(self,
-                                bdti,
-                                is_add=1):
-        """ BIER Disposition Table add/del """
+    def bier_disp_table_add_del(self, bdti, is_add=1):
+        """BIER Disposition Table add/del"""
         return self.api(
             self.papi.bier_disp_table_add_del,
         return self.api(
             self.papi.bier_disp_table_add_del,
-            {'bdt_tbl_id': bdti,
-             'bdt_is_add': is_add})
+            {"bdt_tbl_id": bdti, "bdt_is_add": is_add},
+        )
 
     def bier_disp_table_dump(self):
         return self.api(self.papi.bier_disp_table_dump, {})
 
 
     def bier_disp_table_dump(self):
         return self.api(self.papi.bier_disp_table_dump, {})
 
-    def bier_disp_entry_add_del(self,
-                                bdti,
-                                bp,
-                                payload_proto,
-                                next_hop_afi,
-                                next_hop,
-                                next_hop_tbl_id=0,
-                                next_hop_rpf_id=~0,
-                                next_hop_is_ip4=1,
-                                is_add=1):
-        """ BIER Route add/del """
+    def bier_disp_entry_add_del(
+        self,
+        bdti,
+        bp,
+        payload_proto,
+        next_hop_afi,
+        next_hop,
+        next_hop_tbl_id=0,
+        next_hop_rpf_id=~0,
+        next_hop_is_ip4=1,
+        is_add=1,
+    ):
+        """BIER Route add/del"""
         lstack = []
         lstack = []
-        while (len(lstack) < 16):
+        while len(lstack) < 16:
             lstack.append({})
         return self.api(
             self.papi.bier_disp_entry_add_del,
             lstack.append({})
         return self.api(
             self.papi.bier_disp_entry_add_del,
-            {'bde_tbl_id': bdti,
-             'bde_bp': bp,
-             'bde_payload_proto': payload_proto,
-             'bde_n_paths': 1,
-             'bde_paths': [{'table_id': next_hop_tbl_id,
-                            'rpf_id': next_hop_rpf_id,
-                            'n_labels': 0,
-                            'label_stack': lstack}],
-             'bde_is_add': is_add})
+            {
+                "bde_tbl_id": bdti,
+                "bde_bp": bp,
+                "bde_payload_proto": payload_proto,
+                "bde_n_paths": 1,
+                "bde_paths": [
+                    {
+                        "table_id": next_hop_tbl_id,
+                        "rpf_id": next_hop_rpf_id,
+                        "n_labels": 0,
+                        "label_stack": lstack,
+                    }
+                ],
+                "bde_is_add": is_add,
+            },
+        )
 
     def bier_disp_entry_dump(self, bdti):
 
     def bier_disp_entry_dump(self, bdti):
-        return self.api(
-            self.papi.bier_disp_entry_dump,
-            {'bde_tbl_id': bdti})
+        return self.api(self.papi.bier_disp_entry_dump, {"bde_tbl_id": bdti})
 
     def ipsec_spd_add_del(self, spd_id, is_add=1):
 
     def ipsec_spd_add_del(self, spd_id, is_add=1):
-        """ SPD add/del - Wrapper to add or del ipsec SPD
+        """SPD add/del - Wrapper to add or del ipsec SPD
         Sample CLI : 'ipsec spd add 1'
 
         :param spd_id - SPD ID to be created in the vpp . mandatory
         Sample CLI : 'ipsec spd add 1'
 
         :param spd_id - SPD ID to be created in the vpp . mandatory
@@ -798,8 +936,8 @@ class VppPapiProvider(object):
         :returns: reply from the API
         """
         return self.api(
         :returns: reply from the API
         """
         return self.api(
-            self.papi.ipsec_spd_add_del, {
-                'spd_id': spd_id, 'is_add': is_add})
+            self.papi.ipsec_spd_add_del, {"spd_id": spd_id, "is_add": is_add}
+        )
 
     def ipsec_spds_dump(self):
         return self.api(self.papi.ipsec_spds_dump, {})
 
     def ipsec_spds_dump(self):
         return self.api(self.papi.ipsec_spds_dump, {})
@@ -818,32 +956,39 @@ class VppPapiProvider(object):
         """
         return self.api(
             self.papi.ipsec_interface_add_del_spd,
         """
         return self.api(
             self.papi.ipsec_interface_add_del_spd,
-            {'spd_id': spd_id, 'sw_if_index': sw_if_index, 'is_add': is_add})
+            {"spd_id": spd_id, "sw_if_index": sw_if_index, "is_add": is_add},
+        )
 
     def ipsec_spd_interface_dump(self, spd_index=None):
 
     def ipsec_spd_interface_dump(self, spd_index=None):
-        return self.api(self.papi.ipsec_spd_interface_dump,
-                        {'spd_index': spd_index if spd_index else 0,
-                         'spd_index_valid': 1 if spd_index else 0})
-
-    def ipsec_spd_entry_add_del(self,
-                                spd_id,
-                                sa_id,
-                                local_address_start,
-                                local_address_stop,
-                                remote_address_start,
-                                remote_address_stop,
-                                local_port_start=0,
-                                local_port_stop=65535,
-                                remote_port_start=0,
-                                remote_port_stop=65535,
-                                protocol=0,
-                                policy=0,
-                                priority=100,
-                                is_outbound=1,
-                                is_add=1,
-                                is_ipv6=0,
-                                is_ip_any=0):
-        """ IPSEC policy SPD add/del   -
+        return self.api(
+            self.papi.ipsec_spd_interface_dump,
+            {
+                "spd_index": spd_index if spd_index else 0,
+                "spd_index_valid": 1 if spd_index else 0,
+            },
+        )
+
+    def ipsec_spd_entry_add_del(
+        self,
+        spd_id,
+        sa_id,
+        local_address_start,
+        local_address_stop,
+        remote_address_start,
+        remote_address_stop,
+        local_port_start=0,
+        local_port_stop=65535,
+        remote_port_start=0,
+        remote_port_stop=65535,
+        protocol=0,
+        policy=0,
+        priority=100,
+        is_outbound=1,
+        is_add=1,
+        is_ipv6=0,
+        is_ip_any=0,
+    ):
+        """IPSEC policy SPD add/del   -
                     Wrapper to configure ipsec SPD policy entries in VPP
 
         :param spd_id: SPD ID for the policy
                     Wrapper to configure ipsec SPD policy entries in VPP
 
         :param spd_id: SPD ID for the policy
@@ -867,130 +1012,144 @@ class VppPapiProvider(object):
         return self.api(
             self.papi.ipsec_spd_entry_add_del,
             {
         return self.api(
             self.papi.ipsec_spd_entry_add_del,
             {
-                'is_add': is_add,
-                'entry':
-                    {
-                        'spd_id': spd_id,
-                        'sa_id': sa_id,
-                        'local_address_start': local_address_start,
-                        'local_address_stop': local_address_stop,
-                        'remote_address_start': remote_address_start,
-                        'remote_address_stop': remote_address_stop,
-                        'local_port_start': local_port_start,
-                        'local_port_stop': local_port_stop,
-                        'remote_port_start': remote_port_start,
-                        'remote_port_stop': remote_port_stop,
-                        'protocol': protocol,
-                        'policy': policy,
-                        'priority': priority,
-                        'is_outbound': is_outbound,
-                    }
-            })
-
-    def ipsec_spd_dump(self, spd_id, sa_id=0xffffffff):
-        return self.api(self.papi.ipsec_spd_dump,
-                        {'spd_id': spd_id,
-                         'sa_id': sa_id})
+                "is_add": is_add,
+                "entry": {
+                    "spd_id": spd_id,
+                    "sa_id": sa_id,
+                    "local_address_start": local_address_start,
+                    "local_address_stop": local_address_stop,
+                    "remote_address_start": remote_address_start,
+                    "remote_address_stop": remote_address_stop,
+                    "local_port_start": local_port_start,
+                    "local_port_stop": local_port_stop,
+                    "remote_port_start": remote_port_start,
+                    "remote_port_stop": remote_port_stop,
+                    "protocol": protocol,
+                    "policy": policy,
+                    "priority": priority,
+                    "is_outbound": is_outbound,
+                },
+            },
+        )
 
 
-    def ipsec_tunnel_if_add_del(self, local_ip, remote_ip, local_spi,
-                                remote_spi, crypto_alg, local_crypto_key,
-                                remote_crypto_key, integ_alg, local_integ_key,
-                                remote_integ_key, is_add=1, esn=0, salt=0,
-                                anti_replay=1, renumber=0,
-                                udp_encap=0, show_instance=0xffffffff):
+    def ipsec_spd_dump(self, spd_id, sa_id=0xFFFFFFFF):
+        return self.api(self.papi.ipsec_spd_dump, {"spd_id": spd_id, "sa_id": sa_id})
+
+    def ipsec_tunnel_if_add_del(
+        self,
+        local_ip,
+        remote_ip,
+        local_spi,
+        remote_spi,
+        crypto_alg,
+        local_crypto_key,
+        remote_crypto_key,
+        integ_alg,
+        local_integ_key,
+        remote_integ_key,
+        is_add=1,
+        esn=0,
+        salt=0,
+        anti_replay=1,
+        renumber=0,
+        udp_encap=0,
+        show_instance=0xFFFFFFFF,
+    ):
         return self.api(
             self.papi.ipsec_tunnel_if_add_del,
             {
         return self.api(
             self.papi.ipsec_tunnel_if_add_del,
             {
-                'local_ip': local_ip,
-                'remote_ip': remote_ip,
-                'local_spi': local_spi,
-                'remote_spi': remote_spi,
-                'crypto_alg': crypto_alg,
-                'local_crypto_key_len': len(local_crypto_key),
-                'local_crypto_key': local_crypto_key,
-                'remote_crypto_key_len': len(remote_crypto_key),
-                'remote_crypto_key': remote_crypto_key,
-                'integ_alg': integ_alg,
-                'local_integ_key_len': len(local_integ_key),
-                'local_integ_key': local_integ_key,
-                'remote_integ_key_len': len(remote_integ_key),
-                'remote_integ_key': remote_integ_key,
-                'is_add': is_add,
-                'esn': esn,
-                'anti_replay': anti_replay,
-                'renumber': renumber,
-                'show_instance': show_instance,
-                'udp_encap': udp_encap,
-                'salt': salt
-            })
+                "local_ip": local_ip,
+                "remote_ip": remote_ip,
+                "local_spi": local_spi,
+                "remote_spi": remote_spi,
+                "crypto_alg": crypto_alg,
+                "local_crypto_key_len": len(local_crypto_key),
+                "local_crypto_key": local_crypto_key,
+                "remote_crypto_key_len": len(remote_crypto_key),
+                "remote_crypto_key": remote_crypto_key,
+                "integ_alg": integ_alg,
+                "local_integ_key_len": len(local_integ_key),
+                "local_integ_key": local_integ_key,
+                "remote_integ_key_len": len(remote_integ_key),
+                "remote_integ_key": remote_integ_key,
+                "is_add": is_add,
+                "esn": esn,
+                "anti_replay": anti_replay,
+                "renumber": renumber,
+                "show_instance": show_instance,
+                "udp_encap": udp_encap,
+                "salt": salt,
+            },
+        )
 
     def ipsec_select_backend(self, protocol, index):
 
     def ipsec_select_backend(self, protocol, index):
-        return self.api(self.papi.ipsec_select_backend,
-                        {'protocol': protocol, 'index': index})
+        return self.api(
+            self.papi.ipsec_select_backend, {"protocol": protocol, "index": index}
+        )
 
     def ipsec_backend_dump(self):
         return self.api(self.papi.ipsec_backend_dump, {})
 
 
     def ipsec_backend_dump(self):
         return self.api(self.papi.ipsec_backend_dump, {})
 
-    def punt_socket_register(self, reg, pathname,
-                             header_version=1):
-        """ Register punt socket """
-        return self.api(self.papi.punt_socket_register,
-                        {'header_version': header_version,
-                         'punt': reg,
-                         'pathname': pathname})
+    def punt_socket_register(self, reg, pathname, header_version=1):
+        """Register punt socket"""
+        return self.api(
+            self.papi.punt_socket_register,
+            {"header_version": header_version, "punt": reg, "pathname": pathname},
+        )
 
     def punt_socket_deregister(self, reg):
 
     def punt_socket_deregister(self, reg):
-        """ Unregister punt socket """
-        return self.api(self.papi.punt_socket_deregister,
-                        {'punt': reg})
+        """Unregister punt socket"""
+        return self.api(self.papi.punt_socket_deregister, {"punt": reg})
 
     def igmp_enable_disable(self, sw_if_index, enable, host):
 
     def igmp_enable_disable(self, sw_if_index, enable, host):
-        """ Enable/disable IGMP on a given interface """
-        return self.api(self.papi.igmp_enable_disable,
-                        {'enable': enable,
-                         'mode': host,
-                         'sw_if_index': sw_if_index})
+        """Enable/disable IGMP on a given interface"""
+        return self.api(
+            self.papi.igmp_enable_disable,
+            {"enable": enable, "mode": host, "sw_if_index": sw_if_index},
+        )
 
     def igmp_proxy_device_add_del(self, vrf_id, sw_if_index, add):
 
     def igmp_proxy_device_add_del(self, vrf_id, sw_if_index, add):
-        """ Add/del IGMP proxy device """
-        return self.api(self.papi.igmp_proxy_device_add_del,
-                        {'vrf_id': vrf_id, 'sw_if_index': sw_if_index,
-                         'add': add})
+        """Add/del IGMP proxy device"""
+        return self.api(
+            self.papi.igmp_proxy_device_add_del,
+            {"vrf_id": vrf_id, "sw_if_index": sw_if_index, "add": add},
+        )
 
     def igmp_proxy_device_add_del_interface(self, vrf_id, sw_if_index, add):
 
     def igmp_proxy_device_add_del_interface(self, vrf_id, sw_if_index, add):
-        """ Add/del interface to/from IGMP proxy device """
-        return self.api(self.papi.igmp_proxy_device_add_del_interface,
-                        {'vrf_id': vrf_id, 'sw_if_index': sw_if_index,
-                         'add': add})
+        """Add/del interface to/from IGMP proxy device"""
+        return self.api(
+            self.papi.igmp_proxy_device_add_del_interface,
+            {"vrf_id": vrf_id, "sw_if_index": sw_if_index, "add": add},
+        )
 
     def igmp_listen(self, filter, sw_if_index, saddrs, gaddr):
 
     def igmp_listen(self, filter, sw_if_index, saddrs, gaddr):
-        """ Listen for new (S,G) on specified interface
+        """Listen for new (S,G) on specified interface
 
         :param enable: add/delas
         :param sw_if_index: interface sw index
         :param saddr: source ip4 addr
         :param gaddr: group ip4 addr
         """
 
         :param enable: add/delas
         :param sw_if_index: interface sw index
         :param saddr: source ip4 addr
         :param gaddr: group ip4 addr
         """
-        return self.api(self.papi.igmp_listen,
-                        {
-                            'group':
-                                {
-                                    'filter': filter,
-                                    'sw_if_index': sw_if_index,
-                                    'n_srcs': len(saddrs),
-                                    'saddrs': saddrs,
-                                    'gaddr': gaddr
-                                }
-                        })
+        return self.api(
+            self.papi.igmp_listen,
+            {
+                "group": {
+                    "filter": filter,
+                    "sw_if_index": sw_if_index,
+                    "n_srcs": len(saddrs),
+                    "saddrs": saddrs,
+                    "gaddr": gaddr,
+                }
+            },
+        )
 
     def igmp_clear_interface(self, sw_if_index):
 
     def igmp_clear_interface(self, sw_if_index):
-        """ Remove all (S,G)s from specified interface
-            doesn't send IGMP report!
+        """Remove all (S,G)s from specified interface
+        doesn't send IGMP report!
         """
         """
-        return self.api(
-            self.papi.igmp_clear_interface, {
-                'sw_if_index': sw_if_index})
+        return self.api(self.papi.igmp_clear_interface, {"sw_if_index": sw_if_index})
 
     def want_igmp_events(self, enable=1):
 
     def want_igmp_events(self, enable=1):
-        return self.api(self.papi.want_igmp_events, {'enable': enable,
-                                                     'pid': os.getpid()})
+        return self.api(
+            self.papi.want_igmp_events, {"enable": enable, "pid": os.getpid()}
+        )
index 779eb0b..2682774 100644 (file)
@@ -13,20 +13,28 @@ from vpp_interface import VppInterface
 from vpp_papi import VppEnum
 
 from scapy.layers.l2 import Ether, ARP
 from vpp_papi import VppEnum
 
 from scapy.layers.l2 import Ether, ARP
-from scapy.layers.inet6 import IPv6, ICMPv6ND_NS, ICMPv6ND_NA,\
-    ICMPv6NDOptSrcLLAddr, ICMPv6NDOptDstLLAddr, ICMPv6ND_RA, RouterAlert, \
-    IPv6ExtHdrHopByHop
+from scapy.layers.inet6 import (
+    IPv6,
+    ICMPv6ND_NS,
+    ICMPv6ND_NA,
+    ICMPv6NDOptSrcLLAddr,
+    ICMPv6NDOptDstLLAddr,
+    ICMPv6ND_RA,
+    RouterAlert,
+    IPv6ExtHdrHopByHop,
+)
 from util import ppp, ppc, UnexpectedPacketError
 from scapy.utils6 import in6_getnsma, in6_getnsmac, in6_ismaddr
 
 
 class CaptureTimeoutError(Exception):
 from util import ppp, ppc, UnexpectedPacketError
 from scapy.utils6 import in6_getnsma, in6_getnsmac, in6_ismaddr
 
 
 class CaptureTimeoutError(Exception):
-    """ Exception raised if capture or packet doesn't appear within timeout """
+    """Exception raised if capture or packet doesn't appear within timeout"""
+
     pass
 
 
 def is_ipv6_misc(p):
     pass
 
 
 def is_ipv6_misc(p):
-    """ Is packet one of uninteresting IPv6 broadcasts? """
+    """Is packet one of uninteresting IPv6 broadcasts?"""
     if p.haslayer(ICMPv6ND_RA):
         if in6_ismaddr(p[IPv6].dst):
             return True
     if p.haslayer(ICMPv6ND_RA):
         if in6_ismaddr(p[IPv6].dst):
             return True
@@ -72,10 +80,9 @@ class VppPGInterface(VppInterface):
         return self._out_path
 
     def get_in_path(self, worker):
         return self._out_path
 
     def get_in_path(self, worker):
-        """ pcap file path - injected packets"""
+        """pcap file path - injected packets"""
         if worker is not None:
         if worker is not None:
-            return "%s/pg%u_wrk%u_in.pcap" % (self.test.tempdir, self.pg_index,
-                                              worker)
+            return "%s/pg%u_wrk%u_in.pcap" % (self.test.tempdir, self.pg_index, worker)
         return "%s/pg%u_in.pcap" % (self.test.tempdir, self.pg_index)
 
     @property
         return "%s/pg%u_in.pcap" % (self.test.tempdir, self.pg_index)
 
     @property
@@ -92,7 +99,10 @@ class VppPGInterface(VppInterface):
     def get_input_cli(self, nb_replays=None, worker=None):
         """return CLI string to load the injected packets"""
         input_cli = "packet-generator new pcap %s source pg%u name %s" % (
     def get_input_cli(self, nb_replays=None, worker=None):
         """return CLI string to load the injected packets"""
         input_cli = "packet-generator new pcap %s source pg%u name %s" % (
-            self.get_in_path(worker), self.pg_index, self.get_cap_name(worker))
+            self.get_in_path(worker),
+            self.pg_index,
+            self.get_cap_name(worker),
+        )
         if nb_replays is not None:
             return "%s limit %d" % (input_cli, nb_replays)
         if worker is not None:
         if nb_replays is not None:
             return "%s limit %d" % (input_cli, nb_replays)
         if worker is not None:
@@ -114,7 +124,7 @@ class VppPGInterface(VppInterface):
         return v
 
     def __init__(self, test, pg_index, gso, gso_size, mode):
         return v
 
     def __init__(self, test, pg_index, gso, gso_size, mode):
-        """ Create VPP packet-generator interface """
+        """Create VPP packet-generator interface"""
         super().__init__(test)
 
         r = test.vapi.pg_create_interface_v2(pg_index, gso, gso_size, mode)
         super().__init__(test)
 
         r = test.vapi.pg_create_interface_v2(pg_index, gso, gso_size, mode)
@@ -130,9 +140,10 @@ class VppPGInterface(VppInterface):
         self._out_file = "pg%u_out.pcap" % self.pg_index
         self._out_path = self.test.tempdir + "/" + self._out_file
         self._capture_cli = "packet-generator capture pg%u pcap %s" % (
         self._out_file = "pg%u_out.pcap" % self.pg_index
         self._out_path = self.test.tempdir + "/" + self._out_file
         self._capture_cli = "packet-generator capture pg%u pcap %s" % (
-            self.pg_index, self.out_path)
-        self._cap_name = "pcap%u-sw_if_index-%s" % (
-            self.pg_index, self.sw_if_index)
+            self.pg_index,
+            self.out_path,
+        )
+        self._cap_name = "pcap%u-sw_if_index-%s" % (self.pg_index, self.sw_if_index)
 
     def handle_old_pcap_file(self, path, counter):
         filename = os.path.basename(path)
 
     def handle_old_pcap_file(self, path, counter):
         filename = os.path.basename(path)
@@ -149,22 +160,22 @@ class VppPGInterface(VppInterface):
         try:
 
             if os.path.isfile(path):
         try:
 
             if os.path.isfile(path):
-                name = "%s/history.[timestamp:%f].[%s-counter:%04d].%s" % \
-                    (self.test.tempdir,
-                     time.time(),
-                     self.name,
-                     counter,
-                     filename)
+                name = "%s/history.[timestamp:%f].[%s-counter:%04d].%s" % (
+                    self.test.tempdir,
+                    time.time(),
+                    self.name,
+                    counter,
+                    filename,
+                )
                 self.test.logger.debug("Renaming %s->%s" % (path, name))
                 os.rename(path, name)
         except OSError:
                 self.test.logger.debug("Renaming %s->%s" % (path, name))
                 os.rename(path, name)
         except OSError:
-            self.test.logger.debug("OSError: Could not rename %s %s" %
-                                   (path, filename))
+            self.test.logger.debug("OSError: Could not rename %s %s" % (path, filename))
 
     def enable_capture(self):
 
     def enable_capture(self):
-        """ Enable capture on this packet-generator interface
-            of at most n packets.
-            If n < 0, this is no limit
+        """Enable capture on this packet-generator interface
+        of at most n packets.
+        If n < 0, this is no limit
         """
         # disable the capture to flush the capture
         self.disable_capture()
         """
         # disable the capture to flush the capture
         self.disable_capture()
@@ -177,16 +188,14 @@ class VppPGInterface(VppInterface):
         self.test.vapi.cli("%s disable" % self.capture_cli)
 
     def coalesce_enable(self):
         self.test.vapi.cli("%s disable" % self.capture_cli)
 
     def coalesce_enable(self):
-        """ Enable packet coalesce on this packet-generator interface"""
+        """Enable packet coalesce on this packet-generator interface"""
         self._coalesce_enabled = 1
         self._coalesce_enabled = 1
-        self.test.vapi.pg_interface_enable_disable_coalesce(self.sw_if_index,
-                                                            1)
+        self.test.vapi.pg_interface_enable_disable_coalesce(self.sw_if_index, 1)
 
     def coalesce_disable(self):
 
     def coalesce_disable(self):
-        """ Disable packet coalesce on this packet-generator interface"""
+        """Disable packet coalesce on this packet-generator interface"""
         self._coalesce_enabled = 0
         self._coalesce_enabled = 0
-        self.test.vapi.pg_interface_enable_disable_coalesce(self.sw_if_index,
-                                                            0)
+        self.test.vapi.pg_interface_enable_disable_coalesce(self.sw_if_index, 0)
 
     def add_stream(self, pkts, nb_replays=None, worker=None):
         """
 
     def add_stream(self, pkts, nb_replays=None, worker=None):
         """
@@ -201,31 +210,31 @@ class VppPGInterface(VppInterface):
         self.test.vapi.cli(self.get_input_cli(nb_replays, worker))
 
     def generate_debug_aid(self, kind):
         self.test.vapi.cli(self.get_input_cli(nb_replays, worker))
 
     def generate_debug_aid(self, kind):
-        """ Create a hardlink to the out file with a counter and a file
+        """Create a hardlink to the out file with a counter and a file
         containing stack trace to ease debugging in case of multiple capture
         containing stack trace to ease debugging in case of multiple capture
-        files present. """
-        self.test.logger.debug("Generating debug aid for %s on %s" %
-                               (kind, self._name))
-        link_path, stack_path = ["%s/debug_%s_%s_%s.%s" %
-                                 (self.test.tempdir, self._name,
-                                  self._out_assert_counter, kind, suffix)
-                                 for suffix in ["pcap", "stack"]
-                                 ]
+        files present."""
+        self.test.logger.debug("Generating debug aid for %s on %s" % (kind, self._name))
+        link_path, stack_path = [
+            "%s/debug_%s_%s_%s.%s"
+            % (self.test.tempdir, self._name, self._out_assert_counter, kind, suffix)
+            for suffix in ["pcap", "stack"]
+        ]
         os.link(self.out_path, link_path)
         with open(stack_path, "w") as f:
             f.writelines(format_stack())
         self._out_assert_counter += 1
 
     def _get_capture(self, timeout, filter_out_fn=is_ipv6_misc):
         os.link(self.out_path, link_path)
         with open(stack_path, "w") as f:
             f.writelines(format_stack())
         self._out_assert_counter += 1
 
     def _get_capture(self, timeout, filter_out_fn=is_ipv6_misc):
-        """ Helper method to get capture and filter it """
+        """Helper method to get capture and filter it"""
         try:
             if not self.wait_for_capture_file(timeout):
                 return None
             output = rdpcap(self.out_path)
             self.test.logger.debug("Capture has %s packets" % len(output.res))
         except:
         try:
             if not self.wait_for_capture_file(timeout):
                 return None
             output = rdpcap(self.out_path)
             self.test.logger.debug("Capture has %s packets" % len(output.res))
         except:
-            self.test.logger.debug("Exception in scapy.rdpcap (%s): %s" %
-                                   (self.out_path, format_exc()))
+            self.test.logger.debug(
+                "Exception in scapy.rdpcap (%s): %s" % (self.out_path, format_exc())
+            )
             return None
         before = len(output.res)
         if filter_out_fn:
             return None
         before = len(output.res)
         if filter_out_fn:
@@ -233,13 +242,15 @@ class VppPGInterface(VppInterface):
         removed = before - len(output.res)
         if removed:
             self.test.logger.debug(
         removed = before - len(output.res)
         if removed:
             self.test.logger.debug(
-                "Filtered out %s packets from capture (returning %s)" %
-                (removed, len(output.res)))
+                "Filtered out %s packets from capture (returning %s)"
+                % (removed, len(output.res))
+            )
         return output
 
         return output
 
-    def get_capture(self, expected_count=None, remark=None, timeout=1,
-                    filter_out_fn=is_ipv6_misc):
-        """ Get captured packets
+    def get_capture(
+        self, expected_count=None, remark=None, timeout=1, filter_out_fn=is_ipv6_misc
+    ):
+        """Get captured packets
 
         :param expected_count: expected number of packets to capture, if None,
                                then self.test.packet_count_for_dst_pg_idx is
 
         :param expected_count: expected number of packets to capture, if None,
                                then self.test.packet_count_for_dst_pg_idx is
@@ -255,15 +266,16 @@ class VppPGInterface(VppInterface):
         name = self.name if remark is None else "%s (%s)" % (self.name, remark)
         based_on = "based on provided argument"
         if expected_count is None:
         name = self.name if remark is None else "%s (%s)" % (self.name, remark)
         based_on = "based on provided argument"
         if expected_count is None:
-            expected_count = \
-                self.test.get_packet_count_for_if_idx(self.sw_if_index)
+            expected_count = self.test.get_packet_count_for_if_idx(self.sw_if_index)
             based_on = "based on stored packet_infos"
             if expected_count == 0:
                 raise Exception(
             based_on = "based on stored packet_infos"
             if expected_count == 0:
                 raise Exception(
-                    "Internal error, expected packet count for %s is 0!" %
-                    name)
-        self.test.logger.debug("Expecting to capture %s (%s) packets on %s" % (
-            expected_count, based_on, name))
+                    "Internal error, expected packet count for %s is 0!" % name
+                )
+        self.test.logger.debug(
+            "Expecting to capture %s (%s) packets on %s"
+            % (expected_count, based_on, name)
+        )
         while remaining_time > 0:
             before = time.time()
             capture = self._get_capture(remaining_time, filter_out_fn)
         while remaining_time > 0:
             before = time.time()
             capture = self._get_capture(remaining_time, filter_out_fn)
@@ -273,14 +285,14 @@ class VppPGInterface(VppInterface):
                     # bingo, got the packets we expected
                     return capture
                 elif len(capture.res) > expected_count:
                     # bingo, got the packets we expected
                     return capture
                 elif len(capture.res) > expected_count:
-                    self.test.logger.error(
-                        ppc("Unexpected packets captured:", capture))
+                    self.test.logger.error(ppc("Unexpected packets captured:", capture))
                     break
                 else:
                     break
                 else:
-                    self.test.logger.debug("Partial capture containing %s "
-                                           "packets doesn't match expected "
-                                           "count %s (yet?)" %
-                                           (len(capture.res), expected_count))
+                    self.test.logger.debug(
+                        "Partial capture containing %s "
+                        "packets doesn't match expected "
+                        "count %s (yet?)" % (len(capture.res), expected_count)
+                    )
             elif expected_count == 0:
                 # bingo, got None as we expected - return empty capture
                 return PacketList()
             elif expected_count == 0:
                 # bingo, got None as we expected - return empty capture
                 return PacketList()
@@ -290,26 +302,29 @@ class VppPGInterface(VppInterface):
             if len(capture) > 0 and 0 == expected_count:
                 rem = f"\n{remark}" if remark else ""
                 raise UnexpectedPacketError(
             if len(capture) > 0 and 0 == expected_count:
                 rem = f"\n{remark}" if remark else ""
                 raise UnexpectedPacketError(
-                    capture[0],
-                    f"\n({len(capture)} packets captured in total){rem}")
-            raise Exception("Captured packets mismatch, captured %s packets, "
-                            "expected %s packets on %s" %
-                            (len(capture.res), expected_count, name))
+                    capture[0], f"\n({len(capture)} packets captured in total){rem}"
+                )
+            raise Exception(
+                "Captured packets mismatch, captured %s packets, "
+                "expected %s packets on %s" % (len(capture.res), expected_count, name)
+            )
         else:
             if 0 == expected_count:
                 return
             raise Exception("No packets captured on %s" % name)
 
         else:
             if 0 == expected_count:
                 return
             raise Exception("No packets captured on %s" % name)
 
-    def assert_nothing_captured(self, timeout=1, remark=None,
-                                filter_out_fn=is_ipv6_misc):
-        """ Assert that nothing unfiltered was captured on interface
+    def assert_nothing_captured(
+        self, timeout=1, remark=None, filter_out_fn=is_ipv6_misc
+    ):
+        """Assert that nothing unfiltered was captured on interface
 
         :param remark: remark printed into debug logs
         :param filter_out_fn: filter applied to each packet, packets for which
                               the filter returns True are removed from capture
         """
 
         :param remark: remark printed into debug logs
         :param filter_out_fn: filter applied to each packet, packets for which
                               the filter returns True are removed from capture
         """
-        capture = self.get_capture(0, timeout=timeout, remark=remark,
-                                   filter_out_fn=filter_out_fn)
+        capture = self.get_capture(
+            0, timeout=timeout, remark=remark, filter_out_fn=filter_out_fn
+        )
         if not capture or len(capture.res) == 0:
             # junk filtered out, we're good
             return
         if not capture or len(capture.res) == 0:
             # junk filtered out, we're good
             return
@@ -322,7 +337,7 @@ class VppPGInterface(VppInterface):
         #
         # also have a 5-minute timeout just in case things go terribly wrong...
         deadline = time.time() + 300
         #
         # also have a 5-minute timeout just in case things go terribly wrong...
         deadline = time.time() + 300
-        while self.test.vapi.cli('show packet-generator').find("Yes") != -1:
+        while self.test.vapi.cli("show packet-generator").find("Yes") != -1:
             self._test.sleep(0.01)  # yield
             if time.time() > deadline:
                 self.test.logger.debug("Timeout waiting for pg to stop")
             self._test.sleep(0.01)  # yield
             if time.time() > deadline:
                 self.test.logger.debug("Timeout waiting for pg to stop")
@@ -339,19 +354,21 @@ class VppPGInterface(VppInterface):
         self.wait_for_pg_stop()
         deadline = time.time() + timeout
         if not os.path.isfile(self.out_path):
         self.wait_for_pg_stop()
         deadline = time.time() + timeout
         if not os.path.isfile(self.out_path):
-            self.test.logger.debug("Waiting for capture file %s to appear, "
-                                   "timeout is %ss" % (self.out_path, timeout))
+            self.test.logger.debug(
+                "Waiting for capture file %s to appear, "
+                "timeout is %ss" % (self.out_path, timeout)
+            )
         else:
         else:
-            self.test.logger.debug("Capture file %s already exists" %
-                                   self.out_path)
+            self.test.logger.debug("Capture file %s already exists" % self.out_path)
             return True
         while time.time() < deadline:
             if os.path.isfile(self.out_path):
                 break
             self._test.sleep(0)  # yield
         if os.path.isfile(self.out_path):
             return True
         while time.time() < deadline:
             if os.path.isfile(self.out_path):
                 break
             self._test.sleep(0)  # yield
         if os.path.isfile(self.out_path):
-            self.test.logger.debug("Capture file appeared after %fs" %
-                                   (time.time() - (deadline - timeout)))
+            self.test.logger.debug(
+                "Capture file appeared after %fs" % (time.time() - (deadline - timeout))
+            )
         else:
             self.test.logger.debug("Timeout - capture file still nowhere")
             return False
         else:
             self.test.logger.debug("Timeout - capture file still nowhere")
             return False
@@ -374,7 +391,8 @@ class VppPGInterface(VppInterface):
         if len(hdr) == packet_header_size:
             # parse the capture length - caplen
             sec, usec, caplen, wirelen = struct.unpack(
         if len(hdr) == packet_header_size:
             # parse the capture length - caplen
             sec, usec, caplen, wirelen = struct.unpack(
-                self._pcap_reader.endian + "IIII", hdr)
+                self._pcap_reader.endian + "IIII", hdr
+            )
             self._pcap_reader.f.seek(0, 2)  # seek to end of file
             end_pos = self._pcap_reader.f.tell()  # get position at end
             if end_pos >= orig_pos + len(hdr) + caplen:
             self._pcap_reader.f.seek(0, 2)  # seek to end of file
             end_pos = self._pcap_reader.f.tell()  # get position at end
             if end_pos >= orig_pos + len(hdr) + caplen:
@@ -394,19 +412,22 @@ class VppPGInterface(VppInterface):
         deadline = time.time() + timeout
         if self._pcap_reader is None:
             if not self.wait_for_capture_file(timeout):
         deadline = time.time() + timeout
         if self._pcap_reader is None:
             if not self.wait_for_capture_file(timeout):
-                raise CaptureTimeoutError("Capture file %s did not appear "
-                                          "within timeout" % self.out_path)
+                raise CaptureTimeoutError(
+                    "Capture file %s did not appear within timeout" % self.out_path
+                )
             while time.time() < deadline:
                 try:
                     self._pcap_reader = PcapReader(self.out_path)
                     break
                 except:
                     self.test.logger.debug(
             while time.time() < deadline:
                 try:
                     self._pcap_reader = PcapReader(self.out_path)
                     break
                 except:
                     self.test.logger.debug(
-                        "Exception in scapy.PcapReader(%s): %s" %
-                        (self.out_path, format_exc()))
+                        "Exception in scapy.PcapReader(%s): %s"
+                        % (self.out_path, format_exc())
+                    )
         if not self._pcap_reader:
         if not self._pcap_reader:
-            raise CaptureTimeoutError("Capture file %s did not appear within "
-                                      "timeout" % self.out_path)
+            raise CaptureTimeoutError(
+                "Capture file %s did not appear within timeout" % self.out_path
+            )
 
         poll = False
         if timeout > 0:
 
         poll = False
         if timeout > 0:
@@ -423,12 +444,14 @@ class VppPGInterface(VppInterface):
             if p is not None:
                 if filter_out_fn is not None and filter_out_fn(p):
                     self.test.logger.debug(
             if p is not None:
                 if filter_out_fn is not None and filter_out_fn(p):
                     self.test.logger.debug(
-                        "Packet received after %ss was filtered out" %
-                        (time.time() - (deadline - timeout)))
+                        "Packet received after %ss was filtered out"
+                        % (time.time() - (deadline - timeout))
+                    )
                 else:
                     self.test.logger.debug(
                 else:
                     self.test.logger.debug(
-                        "Packet received after %fs" %
-                        (time.time() - (deadline - timeout)))
+                        "Packet received after %fs"
+                        % (time.time() - (deadline - timeout))
+                    )
                     return p
             self._test.sleep(0)  # yield
             poll = False
                     return p
             self._test.sleep(0)  # yield
             poll = False
@@ -437,9 +460,12 @@ class VppPGInterface(VppInterface):
 
     def create_arp_req(self):
         """Create ARP request applicable for this interface"""
 
     def create_arp_req(self):
         """Create ARP request applicable for this interface"""
-        return (Ether(dst="ff:ff:ff:ff:ff:ff", src=self.remote_mac) /
-                ARP(op=ARP.who_has, pdst=self.local_ip4,
-                    psrc=self.remote_ip4, hwsrc=self.remote_mac))
+        return Ether(dst="ff:ff:ff:ff:ff:ff", src=self.remote_mac) / ARP(
+            op=ARP.who_has,
+            pdst=self.local_ip4,
+            psrc=self.remote_ip4,
+            hwsrc=self.remote_mac,
+        )
 
     def create_ndp_req(self, addr=None):
         """Create NDP - NS applicable for this interface"""
 
     def create_ndp_req(self, addr=None):
         """Create NDP - NS applicable for this interface"""
@@ -448,10 +474,12 @@ class VppPGInterface(VppInterface):
         nsma = in6_getnsma(inet_pton(socket.AF_INET6, addr))
         d = inet_ntop(socket.AF_INET6, nsma)
 
         nsma = in6_getnsma(inet_pton(socket.AF_INET6, addr))
         d = inet_ntop(socket.AF_INET6, nsma)
 
-        return (Ether(dst=in6_getnsmac(nsma)) /
-                IPv6(dst=d, src=self.remote_ip6) /
-                ICMPv6ND_NS(tgt=addr) /
-                ICMPv6NDOptSrcLLAddr(lladdr=self.remote_mac))
+        return (
+            Ether(dst=in6_getnsmac(nsma))
+            / IPv6(dst=d, src=self.remote_ip6)
+            / ICMPv6ND_NS(tgt=addr)
+            / ICMPv6NDOptSrcLLAddr(lladdr=self.remote_mac)
+        )
 
     def resolve_arp(self, pg_interface=None):
         """Resolve ARP using provided packet-generator interface
 
     def resolve_arp(self, pg_interface=None):
         """Resolve ARP using provided packet-generator interface
@@ -462,8 +490,10 @@ class VppPGInterface(VppInterface):
         """
         if pg_interface is None:
             pg_interface = self
         """
         if pg_interface is None:
             pg_interface = self
-        self.test.logger.info("Sending ARP request for %s on port %s" %
-                              (self.local_ip4, pg_interface.name))
+        self.test.logger.info(
+            "Sending ARP request for %s on port %s"
+            % (self.local_ip4, pg_interface.name)
+        )
         arp_req = self.create_arp_req()
         pg_interface.add_stream(arp_req)
         pg_interface.enable_capture()
         arp_req = self.create_arp_req()
         pg_interface.add_stream(arp_req)
         pg_interface.enable_capture()
@@ -472,21 +502,21 @@ class VppPGInterface(VppInterface):
         try:
             captured_packet = pg_interface.wait_for_packet(1)
         except:
         try:
             captured_packet = pg_interface.wait_for_packet(1)
         except:
-            self.test.logger.info("No ARP received on port %s" %
-                                  pg_interface.name)
+            self.test.logger.info("No ARP received on port %s" % pg_interface.name)
             return
         arp_reply = captured_packet.copy()  # keep original for exception
         try:
             if arp_reply[ARP].op == ARP.is_at:
             return
         arp_reply = captured_packet.copy()  # keep original for exception
         try:
             if arp_reply[ARP].op == ARP.is_at:
-                self.test.logger.info("VPP %s MAC address is %s " %
-                                      (self.name, arp_reply[ARP].hwsrc))
+                self.test.logger.info(
+                    "VPP %s MAC address is %s " % (self.name, arp_reply[ARP].hwsrc)
+                )
                 self._local_mac = arp_reply[ARP].hwsrc
             else:
                 self._local_mac = arp_reply[ARP].hwsrc
             else:
-                self.test.logger.info("No ARP received on port %s" %
-                                      pg_interface.name)
+                self.test.logger.info("No ARP received on port %s" % pg_interface.name)
         except:
             self.test.logger.error(
         except:
             self.test.logger.error(
-                ppp("Unexpected response to ARP request:", captured_packet))
+                ppp("Unexpected response to ARP request:", captured_packet)
+            )
             raise
 
     def resolve_ndp(self, pg_interface=None, timeout=1, link_layer=False):
             raise
 
     def resolve_ndp(self, pg_interface=None, timeout=1, link_layer=False):
@@ -502,8 +532,9 @@ class VppPGInterface(VppInterface):
         if pg_interface is None:
             pg_interface = self
         addr = self.local_ip6_ll if link_layer else self.local_ip6
         if pg_interface is None:
             pg_interface = self
         addr = self.local_ip6_ll if link_layer else self.local_ip6
-        self.test.logger.info("Sending NDP request for %s on port %s" %
-                              (addr, pg_interface.name))
+        self.test.logger.info(
+            "Sending NDP request for %s on port %s" % (addr, pg_interface.name)
+        )
         ndp_req = self.create_ndp_req(addr)
         pg_interface.add_stream(ndp_req)
         pg_interface.enable_capture()
         ndp_req = self.create_ndp_req(addr)
         pg_interface.add_stream(ndp_req)
         pg_interface.enable_capture()
@@ -516,25 +547,26 @@ class VppPGInterface(VppInterface):
         while now < deadline:
             try:
                 captured_packet = pg_interface.wait_for_packet(
         while now < deadline:
             try:
                 captured_packet = pg_interface.wait_for_packet(
-                    deadline - now, filter_out_fn=None)
+                    deadline - now, filter_out_fn=None
+                )
             except:
             except:
-                self.test.logger.error(
-                    "Timeout while waiting for NDP response")
+                self.test.logger.error("Timeout while waiting for NDP response")
                 raise
             ndp_reply = captured_packet.copy()  # keep original for exception
             try:
                 ndp_na = ndp_reply[ICMPv6ND_NA]
                 opt = ndp_na[ICMPv6NDOptDstLLAddr]
                 raise
             ndp_reply = captured_packet.copy()  # keep original for exception
             try:
                 ndp_na = ndp_reply[ICMPv6ND_NA]
                 opt = ndp_na[ICMPv6NDOptDstLLAddr]
-                self.test.logger.info("VPP %s MAC address is %s " %
-                                      (self.name, opt.lladdr))
+                self.test.logger.info(
+                    "VPP %s MAC address is %s " % (self.name, opt.lladdr)
+                )
                 self._local_mac = opt.lladdr
                 self.test.logger.debug(self.test.vapi.cli("show trace"))
                 # we now have the MAC we've been after
                 return
             except:
                 self.test.logger.info(
                 self._local_mac = opt.lladdr
                 self.test.logger.debug(self.test.vapi.cli("show trace"))
                 # we now have the MAC we've been after
                 return
             except:
                 self.test.logger.info(
-                    ppp("Unexpected response to NDP request:",
-                        captured_packet))
+                    ppp("Unexpected response to NDP request:", captured_packet)
+                )
             now = time.time()
 
         self.test.logger.debug(self.test.vapi.cli("show trace"))
             now = time.time()
 
         self.test.logger.debug(self.test.vapi.cli("show trace"))
index 0f3b073..b0097b3 100644 (file)
@@ -8,25 +8,36 @@ class Dir(Enum):
     TX = 1
 
 
     TX = 1
 
 
-class PolicerAction():
-    """ sse2 qos action """
+class PolicerAction:
+    """sse2 qos action"""
 
     def __init__(self, type, dscp):
         self.type = type
         self.dscp = dscp
 
     def encode(self):
 
     def __init__(self, type, dscp):
         self.type = type
         self.dscp = dscp
 
     def encode(self):
-        return {'type': self.type, 'dscp': self.dscp}
+        return {"type": self.type, "dscp": self.dscp}
 
 
 class VppPolicer(VppObject):
 
 
 class VppPolicer(VppObject):
-    """ Policer """
-
-    def __init__(self, test, name, cir, eir, commited_burst, excess_burst,
-                 rate_type=0, round_type=0, type=0, color_aware=False,
-                 conform_action=PolicerAction(1, 0),
-                 exceed_action=PolicerAction(0, 0),
-                 violate_action=PolicerAction(0, 0)):
+    """Policer"""
+
+    def __init__(
+        self,
+        test,
+        name,
+        cir,
+        eir,
+        commited_burst,
+        excess_burst,
+        rate_type=0,
+        round_type=0,
+        type=0,
+        color_aware=False,
+        conform_action=PolicerAction(1, 0),
+        exceed_action=PolicerAction(0, 0),
+        violate_action=PolicerAction(0, 0),
+    ):
         self._test = test
         self.name = name
         self.cir = cir
         self._test = test
         self.name = name
         self.cir = cir
@@ -48,13 +59,19 @@ class VppPolicer(VppObject):
 
     def add_vpp_config(self):
         r = self._test.vapi.policer_add_del(
 
     def add_vpp_config(self):
         r = self._test.vapi.policer_add_del(
-            name=self.name, cir=self.cir,
-            eir=self.eir, cb=self.commited_burst, eb=self.excess_burst,
-            rate_type=self.rate_type, round_type=self.round_type,
-            type=self.type, color_aware=self.color_aware,
+            name=self.name,
+            cir=self.cir,
+            eir=self.eir,
+            cb=self.commited_burst,
+            eb=self.excess_burst,
+            rate_type=self.rate_type,
+            round_type=self.round_type,
+            type=self.type,
+            color_aware=self.color_aware,
             conform_action=self.conform_action.encode(),
             exceed_action=self.exceed_action.encode(),
             conform_action=self.conform_action.encode(),
             exceed_action=self.exceed_action.encode(),
-            violate_action=self.violate_action.encode())
+            violate_action=self.violate_action.encode(),
+        )
         self._test.registry.register(self, self._test.logger)
         self._policer_index = r.policer_index
         return self
         self._test.registry.register(self, self._test.logger)
         self._policer_index = r.policer_index
         return self
@@ -64,27 +81,29 @@ class VppPolicer(VppObject):
         self._policer_index = INVALID_INDEX
 
     def bind_vpp_config(self, worker, bind):
         self._policer_index = INVALID_INDEX
 
     def bind_vpp_config(self, worker, bind):
-        self._test.vapi.policer_bind(name=self.name, worker_index=worker,
-                                     bind_enable=bind)
+        self._test.vapi.policer_bind(
+            name=self.name, worker_index=worker, bind_enable=bind
+        )
 
     def apply_vpp_config(self, if_index, dir: Dir, apply):
         if dir == Dir.RX:
             self._test.vapi.policer_input(
 
     def apply_vpp_config(self, if_index, dir: Dir, apply):
         if dir == Dir.RX:
             self._test.vapi.policer_input(
-                name=self.name, sw_if_index=if_index, apply=apply)
+                name=self.name, sw_if_index=if_index, apply=apply
+            )
         else:
             self._test.vapi.policer_output(
         else:
             self._test.vapi.policer_output(
-                name=self.name, sw_if_index=if_index, apply=apply)
+                name=self.name, sw_if_index=if_index, apply=apply
+            )
 
     def query_vpp_config(self):
 
     def query_vpp_config(self):
-        dump = self._test.vapi.policer_dump(
-            match_name_valid=True, match_name=self.name)
+        dump = self._test.vapi.policer_dump(match_name_valid=True, match_name=self.name)
         for policer in dump:
             if policer.name == self.name:
                 return True
         return False
 
     def object_id(self):
         for policer in dump:
             if policer.name == self.name:
                 return True
         return False
 
     def object_id(self):
-        return ("policer-%s" % (self.name))
+        return "policer-%s" % (self.name)
 
     def get_stats(self, worker=None):
         conform = self._test.statistics.get_counter("/net/policer/conform")
 
     def get_stats(self, worker=None):
         conform = self._test.statistics.get_counter("/net/policer/conform")
@@ -95,14 +114,14 @@ class VppPolicer(VppObject):
 
         total = {}
         for name, c in counters.items():
 
         total = {}
         for name, c in counters.items():
-            total[f'{name}_packets'] = 0
-            total[f'{name}_bytes'] = 0
+            total[f"{name}_packets"] = 0
+            total[f"{name}_bytes"] = 0
             for i in range(len(c)):
                 t = c[i]
                 if worker is not None and i != worker + 1:
                     continue
                 stat_index = self._policer_index
             for i in range(len(c)):
                 t = c[i]
                 if worker is not None and i != worker + 1:
                     continue
                 stat_index = self._policer_index
-                total[f'{name}_packets'] += t[stat_index]['packets']
-                total[f'{name}_bytes'] += t[stat_index]['bytes']
+                total[f"{name}_packets"] += t[stat_index]["packets"]
+                total[f"{name}_bytes"] += t[stat_index]["bytes"]
 
         return total
 
         return total
index 505ac4c..0d5516e 100644 (file)
@@ -1,4 +1,3 @@
-
 from vpp_interface import VppInterface
 import socket
 from vpp_papi import mac_pton
 from vpp_interface import VppInterface
 import socket
 from vpp_papi import mac_pton
@@ -9,9 +8,8 @@ class VppPppoeInterface(VppInterface):
     VPP Pppoe interface
     """
 
     VPP Pppoe interface
     """
 
-    def __init__(self, test, client_ip, client_mac,
-                 session_id, decap_vrf_id=0):
-        """ Create VPP PPPoE4 interface """
+    def __init__(self, test, client_ip, client_mac, session_id, decap_vrf_id=0):
+        """Create VPP PPPoE4 interface"""
         super(VppPppoeInterface, self).__init__(test)
         self.client_ip = client_ip
         self.client_mac = client_mac
         super(VppPppoeInterface, self).__init__(test)
         self.client_ip = client_ip
         self.client_mac = client_mac
@@ -21,9 +19,11 @@ class VppPppoeInterface(VppInterface):
 
     def add_vpp_config(self):
         r = self.test.vapi.pppoe_add_del_session(
 
     def add_vpp_config(self):
         r = self.test.vapi.pppoe_add_del_session(
-                self.client_ip, self.client_mac,
-                session_id=self.session_id,
-                decap_vrf_id=self.decap_vrf_id)
+            self.client_ip,
+            self.client_mac,
+            session_id=self.session_id,
+            decap_vrf_id=self.decap_vrf_id,
+        )
         self.set_sw_if_index(r.sw_if_index)
         self.vpp_sw_if_index = r.sw_if_index
         self.generate_remote_hosts()
         self.set_sw_if_index(r.sw_if_index)
         self.vpp_sw_if_index = r.sw_if_index
         self.generate_remote_hosts()
@@ -31,12 +31,12 @@ class VppPppoeInterface(VppInterface):
     def remove_vpp_config(self):
         self.unconfig()
         self.test.vapi.pppoe_add_del_session(
     def remove_vpp_config(self):
         self.unconfig()
         self.test.vapi.pppoe_add_del_session(
-                self.client_ip, self.client_mac,
-                session_id=self.session_id,
-                decap_vrf_id=self.decap_vrf_id,
-                is_add=0)
+            self.client_ip,
+            self.client_mac,
+            session_id=self.session_id,
+            decap_vrf_id=self.decap_vrf_id,
+            is_add=0,
+        )
 
     def set_unnumbered(self, swif_iface):
 
     def set_unnumbered(self, swif_iface):
-        self.test.vapi.sw_interface_set_unnumbered(
-            swif_iface,
-            self.vpp_sw_if_index)
+        self.test.vapi.sw_interface_set_unnumbered(swif_iface, self.vpp_sw_if_index)
index a7fa9e7..a7374d1 100644 (file)
@@ -8,7 +8,7 @@ from vpp_object import VppObject
 
 
 class VppQosRecord(VppObject):
 
 
 class VppQosRecord(VppObject):
-    """ QoS Record(ing) configuration """
+    """QoS Record(ing) configuration"""
 
     def __init__(self, test, intf, source):
         self._test = test
 
     def __init__(self, test, intf, source):
         self._test = test
@@ -18,32 +18,34 @@ class VppQosRecord(VppObject):
     def add_vpp_config(self):
         self._test.vapi.qos_record_enable_disable(
             enable=1,
     def add_vpp_config(self):
         self._test.vapi.qos_record_enable_disable(
             enable=1,
-            record={'sw_if_index': self.intf.sw_if_index,
-                    'input_source': self.source})
+            record={"sw_if_index": self.intf.sw_if_index, "input_source": self.source},
+        )
         self._test.registry.register(self, self._test.logger)
         return self
 
     def remove_vpp_config(self):
         self._test.vapi.qos_record_enable_disable(
             enable=0,
         self._test.registry.register(self, self._test.logger)
         return self
 
     def remove_vpp_config(self):
         self._test.vapi.qos_record_enable_disable(
             enable=0,
-            record={'sw_if_index': self.intf.sw_if_index,
-                    'input_source': self.source})
+            record={"sw_if_index": self.intf.sw_if_index, "input_source": self.source},
+        )
 
     def query_vpp_config(self):
         rs = self._test.vapi.qos_record_dump()
 
         for r in rs:
 
     def query_vpp_config(self):
         rs = self._test.vapi.qos_record_dump()
 
         for r in rs:
-            if self.intf.sw_if_index == r.record.sw_if_index and \
-               self.source == r.record.input_source:
+            if (
+                self.intf.sw_if_index == r.record.sw_if_index
+                and self.source == r.record.input_source
+            ):
                 return True
         return False
 
     def object_id(self):
                 return True
         return False
 
     def object_id(self):
-        return ("qos-record-%s-%d" % (self.intf, self.source))
+        return "qos-record-%s-%d" % (self.intf, self.source)
 
 
 class VppQosStore(VppObject):
 
 
 class VppQosStore(VppObject):
-    """ QoS Store(ing) configuration """
+    """QoS Store(ing) configuration"""
 
     def __init__(self, test, intf, source, value):
         self._test = test
 
     def __init__(self, test, intf, source, value):
         self._test = test
@@ -54,34 +56,39 @@ class VppQosStore(VppObject):
     def add_vpp_config(self):
         self._test.vapi.qos_store_enable_disable(
             enable=1,
     def add_vpp_config(self):
         self._test.vapi.qos_store_enable_disable(
             enable=1,
-            store={'sw_if_index': self.intf.sw_if_index,
-                   'input_source': self.source,
-                   'value': self.value})
+            store={
+                "sw_if_index": self.intf.sw_if_index,
+                "input_source": self.source,
+                "value": self.value,
+            },
+        )
         self._test.registry.register(self, self._test.logger)
         return self
 
     def remove_vpp_config(self):
         self._test.vapi.qos_store_enable_disable(
             enable=0,
         self._test.registry.register(self, self._test.logger)
         return self
 
     def remove_vpp_config(self):
         self._test.vapi.qos_store_enable_disable(
             enable=0,
-            store={'sw_if_index': self.intf.sw_if_index,
-                   'input_source': self.source})
+            store={"sw_if_index": self.intf.sw_if_index, "input_source": self.source},
+        )
 
     def query_vpp_config(self):
         rs = self._test.vapi.qos_store_dump()
 
         for r in rs:
 
     def query_vpp_config(self):
         rs = self._test.vapi.qos_store_dump()
 
         for r in rs:
-            if self.intf.sw_if_index == r.store.sw_if_index and \
-               self.source == r.store.input_source and \
-               self.value == r.store.value:
+            if (
+                self.intf.sw_if_index == r.store.sw_if_index
+                and self.source == r.store.input_source
+                and self.value == r.store.value
+            ):
                 return True
         return False
 
     def object_id(self):
                 return True
         return False
 
     def object_id(self):
-        return ("qos-store-%s-%d" % (self.intf, self.source))
+        return "qos-store-%s-%d" % (self.intf, self.source)
 
 
 class VppQosEgressMap(VppObject):
 
 
 class VppQosEgressMap(VppObject):
-    """ QoS Egress Map(ping) configuration """
+    """QoS Egress Map(ping) configuration"""
 
     def __init__(self, test, id, rows):
         self._test = test
 
     def __init__(self, test, id, rows):
         self._test = test
@@ -89,9 +96,7 @@ class VppQosEgressMap(VppObject):
         self.rows = rows
 
     def add_vpp_config(self):
         self.rows = rows
 
     def add_vpp_config(self):
-        self._test.vapi.qos_egress_map_update(
-            map={'id': self.id,
-                 'rows': self.rows})
+        self._test.vapi.qos_egress_map_update(map={"id": self.id, "rows": self.rows})
         self._test.registry.register(self, self._test.logger)
         return self
 
         self._test.registry.register(self, self._test.logger)
         return self
 
@@ -107,11 +112,11 @@ class VppQosEgressMap(VppObject):
         return False
 
     def object_id(self):
         return False
 
     def object_id(self):
-        return ("qos-map-%d" % (self.id))
+        return "qos-map-%d" % (self.id)
 
 
 class VppQosMark(VppObject):
 
 
 class VppQosMark(VppObject):
-    """ QoS Mark(ing) configuration """
+    """QoS Mark(ing) configuration"""
 
     def __init__(self, test, intf, map, source):
         self._test = test
 
     def __init__(self, test, intf, map, source):
         self._test = test
@@ -122,27 +127,32 @@ class VppQosMark(VppObject):
     def add_vpp_config(self):
         self._test.vapi.qos_mark_enable_disable(
             enable=1,
     def add_vpp_config(self):
         self._test.vapi.qos_mark_enable_disable(
             enable=1,
-            mark={'sw_if_index': self.intf.sw_if_index,
-                  'map_id': self.map.id,
-                  'output_source': self.source})
+            mark={
+                "sw_if_index": self.intf.sw_if_index,
+                "map_id": self.map.id,
+                "output_source": self.source,
+            },
+        )
         self._test.registry.register(self, self._test.logger)
         return self
 
     def remove_vpp_config(self):
         self._test.vapi.qos_mark_enable_disable(
             enable=0,
         self._test.registry.register(self, self._test.logger)
         return self
 
     def remove_vpp_config(self):
         self._test.vapi.qos_mark_enable_disable(
             enable=0,
-            mark={'sw_if_index': self.intf.sw_if_index,
-                  'output_source': self.source})
+            mark={"sw_if_index": self.intf.sw_if_index, "output_source": self.source},
+        )
 
     def query_vpp_config(self):
         ms = self._test.vapi.qos_mark_dump()
 
         for m in ms:
 
     def query_vpp_config(self):
         ms = self._test.vapi.qos_mark_dump()
 
         for m in ms:
-            if self.intf.sw_if_index == m.mark.sw_if_index and \
-               self.source == m.mark.output_source and \
-               self.map.id == m.mark.map_id:
+            if (
+                self.intf.sw_if_index == m.mark.sw_if_index
+                and self.source == m.mark.output_source
+                and self.map.id == m.mark.map_id
+            ):
                 return True
         return False
 
     def object_id(self):
                 return True
         return False
 
     def object_id(self):
-        return ("qos-mark-%s-%d" % (self.intf, self.source))
+        return "qos-mark-%s-%d" % (self.intf, self.source)
index d6efedc..d789105 100644 (file)
@@ -8,12 +8,12 @@ from vpp_object import VppObject
 from socket import inet_pton, inet_ntop, AF_INET, AF_INET6
 
 
 from socket import inet_pton, inet_ntop, AF_INET, AF_INET6
 
 
-class SRv6LocalSIDBehaviors():
+class SRv6LocalSIDBehaviors:
     # from src/vnet/srv6/sr.h
     SR_BEHAVIOR_END = 1
     SR_BEHAVIOR_X = 2
     SR_BEHAVIOR_T = 3
     # from src/vnet/srv6/sr.h
     SR_BEHAVIOR_END = 1
     SR_BEHAVIOR_X = 2
     SR_BEHAVIOR_T = 3
-    SR_BEHAVIOR_D_FIRST = 4   # Unused. Separator in between regular and D
+    SR_BEHAVIOR_D_FIRST = 4  # Unused. Separator in between regular and D
     SR_BEHAVIOR_DX2 = 5
     SR_BEHAVIOR_DX6 = 6
     SR_BEHAVIOR_DX4 = 7
     SR_BEHAVIOR_DX2 = 5
     SR_BEHAVIOR_DX6 = 6
     SR_BEHAVIOR_DX4 = 7
@@ -21,16 +21,16 @@ class SRv6LocalSIDBehaviors():
     SR_BEHAVIOR_DT4 = 9
     SR_BEHAVIOR_END_UN_PERF = 10
     SR_BEHAVIOR_END_UN = 11
     SR_BEHAVIOR_DT4 = 9
     SR_BEHAVIOR_END_UN_PERF = 10
     SR_BEHAVIOR_END_UN = 11
-    SR_BEHAVIOR_LAST = 12      # Must always be the last one
+    SR_BEHAVIOR_LAST = 12  # Must always be the last one
 
 
 
 
-class SRv6PolicyType():
+class SRv6PolicyType:
     # from src/vnet/srv6/sr.h
     SR_POLICY_TYPE_DEFAULT = 0
     SR_POLICY_TYPE_SPRAY = 1
 
 
     # from src/vnet/srv6/sr.h
     SR_POLICY_TYPE_DEFAULT = 0
     SR_POLICY_TYPE_SPRAY = 1
 
 
-class SRv6PolicySteeringTypes():
+class SRv6PolicySteeringTypes:
     # from src/vnet/srv6/sr.h
     SR_STEER_L2 = 2
     SR_STEER_IPV4 = 4
     # from src/vnet/srv6/sr.h
     SR_STEER_L2 = 2
     SR_STEER_IPV4 = 4
@@ -42,8 +42,17 @@ class VppSRv6LocalSID(VppObject):
     SRv6 LocalSID
     """
 
     SRv6 LocalSID
     """
 
-    def __init__(self, test, localsid, behavior, nh_addr,
-                 end_psp, sw_if_index, vlan_index, fib_table):
+    def __init__(
+        self,
+        test,
+        localsid,
+        behavior,
+        nh_addr,
+        end_psp,
+        sw_if_index,
+        vlan_index,
+        fib_table,
+    ):
         self._test = test
         self.localsid = localsid
         self.behavior = behavior
         self._test = test
         self.localsid = localsid
         self.behavior = behavior
@@ -63,7 +72,8 @@ class VppSRv6LocalSID(VppObject):
             end_psp=self.end_psp,
             sw_if_index=self.sw_if_index,
             vlan_index=self.vlan_index,
             end_psp=self.end_psp,
             sw_if_index=self.sw_if_index,
             vlan_index=self.vlan_index,
-            fib_table=self.fib_table)
+            fib_table=self.fib_table,
+        )
         self._configured = True
 
     def remove_vpp_config(self):
         self._configured = True
 
     def remove_vpp_config(self):
@@ -75,7 +85,8 @@ class VppSRv6LocalSID(VppObject):
             end_psp=self.end_psp,
             sw_if_index=self.sw_if_index,
             vlan_index=self.vlan_index,
             end_psp=self.end_psp,
             sw_if_index=self.sw_if_index,
             vlan_index=self.vlan_index,
-            fib_table=self.fib_table)
+            fib_table=self.fib_table,
+        )
         self._configured = False
 
     def query_vpp_config(self):
         self._configured = False
 
     def query_vpp_config(self):
@@ -84,10 +95,7 @@ class VppSRv6LocalSID(VppObject):
         return self._configured
 
     def object_id(self):
         return self._configured
 
     def object_id(self):
-        return ("%d;%s,%d"
-                % (self.fib_table,
-                   self.localsid,
-                   self.behavior))
+        return "%d;%s,%d" % (self.fib_table, self.localsid, self.behavior)
 
 
 class VppSRv6Policy(VppObject):
 
 
 class VppSRv6Policy(VppObject):
@@ -95,9 +103,9 @@ class VppSRv6Policy(VppObject):
     SRv6 Policy
     """
 
     SRv6 Policy
     """
 
-    def __init__(self, test, bsid,
-                 is_encap, sr_type, weight, fib_table,
-                 segments, source):
+    def __init__(
+        self, test, bsid, is_encap, sr_type, weight, fib_table, segments, source
+    ):
         self._test = test
         self.bsid = bsid
         self.is_encap = is_encap
         self._test = test
         self.bsid = bsid
         self.is_encap = is_encap
@@ -113,17 +121,17 @@ class VppSRv6Policy(VppObject):
 
     def add_vpp_config(self):
         self._test.vapi.sr_policy_add(
 
     def add_vpp_config(self):
         self._test.vapi.sr_policy_add(
-                     bsid=self.bsid,
-                     weight=self.weight,
-                     is_encap=self.is_encap,
-                     is_spray=self.sr_type,
-                     fib_table=self.fib_table,
-                     sids={'num_sids': self.n_segments, 'sids': self.segments})
+            bsid=self.bsid,
+            weight=self.weight,
+            is_encap=self.is_encap,
+            is_spray=self.sr_type,
+            fib_table=self.fib_table,
+            sids={"num_sids": self.n_segments, "sids": self.segments},
+        )
         self._configured = True
 
     def remove_vpp_config(self):
         self._configured = True
 
     def remove_vpp_config(self):
-        self._test.vapi.sr_policy_del(
-                     self.bsid)
+        self._test.vapi.sr_policy_del(self.bsid)
         self._configured = False
 
     def query_vpp_config(self):
         self._configured = False
 
     def query_vpp_config(self):
@@ -132,11 +140,12 @@ class VppSRv6Policy(VppObject):
         return self._configured
 
     def object_id(self):
         return self._configured
 
     def object_id(self):
-        return ("%d;%s-><%s>;%d"
-                % (self.sr_type,
-                   self.bsid,
-                   ','.join(self.segments),
-                   self.is_encap))
+        return "%d;%s-><%s>;%d" % (
+            self.sr_type,
+            self.bsid,
+            ",".join(self.segments),
+            self.is_encap,
+        )
 
 
 class VppSRv6Steering(VppObject):
 
 
 class VppSRv6Steering(VppObject):
@@ -144,14 +153,17 @@ class VppSRv6Steering(VppObject):
     SRv6 Steering
     """
 
     SRv6 Steering
     """
 
-    def __init__(self, test,
-                 bsid,
-                 prefix,
-                 mask_width,
-                 traffic_type,
-                 sr_policy_index,
-                 table_id,
-                 sw_if_index):
+    def __init__(
+        self,
+        test,
+        bsid,
+        prefix,
+        mask_width,
+        traffic_type,
+        sr_policy_index,
+        table_id,
+        sw_if_index,
+    ):
         self._test = test
         self.bsid = bsid
         self.prefix = prefix
         self._test = test
         self.bsid = bsid
         self.prefix = prefix
@@ -164,24 +176,26 @@ class VppSRv6Steering(VppObject):
 
     def add_vpp_config(self):
         self._test.vapi.sr_steering_add_del(
 
     def add_vpp_config(self):
         self._test.vapi.sr_steering_add_del(
-                     is_del=0,
-                     bsid=self.bsid,
-                     sr_policy_index=self.sr_policy_index,
-                     table_id=self.table_id,
-                     prefix={'address': self.prefix, 'len':  self.mask_width},
-                     sw_if_index=self.sw_if_index,
-                     traffic_type=self.traffic_type)
+            is_del=0,
+            bsid=self.bsid,
+            sr_policy_index=self.sr_policy_index,
+            table_id=self.table_id,
+            prefix={"address": self.prefix, "len": self.mask_width},
+            sw_if_index=self.sw_if_index,
+            traffic_type=self.traffic_type,
+        )
         self._configured = True
 
     def remove_vpp_config(self):
         self._test.vapi.sr_steering_add_del(
         self._configured = True
 
     def remove_vpp_config(self):
         self._test.vapi.sr_steering_add_del(
-                     is_del=1,
-                     bsid=self.bsid,
-                     sr_policy_index=self.sr_policy_index,
-                     table_id=self.table_id,
-                     prefix={'address': self.prefix, 'len':  self.mask_width},
-                     sw_if_index=self.sw_if_index,
-                     traffic_type=self.traffic_type)
+            is_del=1,
+            bsid=self.bsid,
+            sr_policy_index=self.sr_policy_index,
+            table_id=self.table_id,
+            prefix={"address": self.prefix, "len": self.mask_width},
+            sw_if_index=self.sw_if_index,
+            traffic_type=self.traffic_type,
+        )
         self._configured = False
 
     def query_vpp_config(self):
         self._configured = False
 
     def query_vpp_config(self):
@@ -190,9 +204,10 @@ class VppSRv6Steering(VppObject):
         return self._configured
 
     def object_id(self):
         return self._configured
 
     def object_id(self):
-        return ("%d;%d;%s/%d->%s"
-                % (self.table_id,
-                   self.traffic_type,
-                   self.prefix,
-                   self.mask_width,
-                   self.bsid))
+        return "%d;%d;%s/%d->%s" % (
+            self.table_id,
+            self.traffic_type,
+            self.prefix,
+            self.mask_width,
+            self.bsid,
+        )
index 21560cb..b896a6e 100644 (file)
@@ -18,7 +18,6 @@ class L2_VTR_OP:
 
 
 class VppSubInterface(VppPGInterface, metaclass=abc.ABCMeta):
 
 
 class VppSubInterface(VppPGInterface, metaclass=abc.ABCMeta):
-
     @property
     def parent(self):
         """Parent interface for this sub-interface"""
     @property
     def parent(self):
         """Parent interface for this sub-interface"""
@@ -117,26 +116,33 @@ class VppSubInterface(VppPGInterface, metaclass=abc.ABCMeta):
         self._tag2 = 0
         self._push1q = 0
 
         self._tag2 = 0
         self._push1q = 0
 
-        if (vtr == L2_VTR_OP.L2_PUSH_1 or
-            vtr == L2_VTR_OP.L2_TRANSLATE_1_1 or
-                vtr == L2_VTR_OP.L2_TRANSLATE_2_1):
+        if (
+            vtr == L2_VTR_OP.L2_PUSH_1
+            or vtr == L2_VTR_OP.L2_TRANSLATE_1_1
+            or vtr == L2_VTR_OP.L2_TRANSLATE_2_1
+        ):
             self._tag1 = tag
             self._push1q = push1q
             self._tag1 = tag
             self._push1q = push1q
-        if (vtr == L2_VTR_OP.L2_PUSH_2 or
-            vtr == L2_VTR_OP.L2_TRANSLATE_1_2 or
-                vtr == L2_VTR_OP.L2_TRANSLATE_2_2):
+        if (
+            vtr == L2_VTR_OP.L2_PUSH_2
+            or vtr == L2_VTR_OP.L2_TRANSLATE_1_2
+            or vtr == L2_VTR_OP.L2_TRANSLATE_2_2
+        ):
             self._tag1 = outer
             self._tag2 = inner
             self._push1q = push1q
 
         self.test.vapi.l2_interface_vlan_tag_rewrite(
             self._tag1 = outer
             self._tag2 = inner
             self._push1q = push1q
 
         self.test.vapi.l2_interface_vlan_tag_rewrite(
-            sw_if_index=self.sw_if_index, vtr_op=vtr, push_dot1q=self._push1q,
-            tag1=self._tag1, tag2=self._tag2)
+            sw_if_index=self.sw_if_index,
+            vtr_op=vtr,
+            push_dot1q=self._push1q,
+            tag1=self._tag1,
+            tag2=self._tag2,
+        )
         self._vtr = vtr
 
 
 class VppDot1QSubint(VppSubInterface):
         self._vtr = vtr
 
 
 class VppDot1QSubint(VppSubInterface):
-
     @property
     def vlan(self):
         """VLAN tag"""
     @property
     def vlan(self):
         """VLAN tag"""
@@ -168,7 +174,6 @@ class VppDot1QSubint(VppSubInterface):
 
 
 class VppDot1ADSubint(VppSubInterface):
 
 
 class VppDot1ADSubint(VppSubInterface):
-
     @property
     def outer_vlan(self):
         """Outer VLAN tag"""
     @property
     def outer_vlan(self):
         """Outer VLAN tag"""
@@ -181,13 +186,18 @@ class VppDot1ADSubint(VppSubInterface):
 
     def __init__(self, test, parent, sub_id, outer_vlan, inner_vlan):
         super(VppDot1ADSubint, self).__init__(test, parent, sub_id)
 
     def __init__(self, test, parent, sub_id, outer_vlan, inner_vlan):
         super(VppDot1ADSubint, self).__init__(test, parent, sub_id)
-        flags = (VppEnum.vl_api_sub_if_flags_t.SUB_IF_API_FLAG_DOT1AD |
-                 VppEnum.vl_api_sub_if_flags_t.SUB_IF_API_FLAG_TWO_TAGS |
-                 VppEnum.vl_api_sub_if_flags_t.SUB_IF_API_FLAG_EXACT_MATCH)
-        r = test.vapi.create_subif(sw_if_index=parent.sw_if_index,
-                                   sub_id=sub_id, outer_vlan_id=outer_vlan,
-                                   inner_vlan_id=inner_vlan,
-                                   sub_if_flags=flags)
+        flags = (
+            VppEnum.vl_api_sub_if_flags_t.SUB_IF_API_FLAG_DOT1AD
+            | VppEnum.vl_api_sub_if_flags_t.SUB_IF_API_FLAG_TWO_TAGS
+            | VppEnum.vl_api_sub_if_flags_t.SUB_IF_API_FLAG_EXACT_MATCH
+        )
+        r = test.vapi.create_subif(
+            sw_if_index=parent.sw_if_index,
+            sub_id=sub_id,
+            outer_vlan_id=outer_vlan,
+            inner_vlan_id=inner_vlan,
+            sub_if_flags=flags,
+        )
         self.set_sw_if_index(r.sw_if_index)
         self._outer_vlan = outer_vlan
         self._inner_vlan = inner_vlan
         self.set_sw_if_index(r.sw_if_index)
         self._outer_vlan = outer_vlan
         self._inner_vlan = inner_vlan
@@ -204,16 +214,13 @@ class VppDot1ADSubint(VppSubInterface):
         return self.add_dot1ad_layer(packet, self.outer_vlan, self.inner_vlan)
 
     def remove_dot1_layer(self, packet):
         return self.add_dot1ad_layer(packet, self.outer_vlan, self.inner_vlan)
 
     def remove_dot1_layer(self, packet):
-        return self.remove_dot1ad_layer(packet, self.outer_vlan,
-                                        self.inner_vlan)
+        return self.remove_dot1ad_layer(packet, self.outer_vlan, self.inner_vlan)
 
 
 class VppP2PSubint(VppSubInterface):
 
 
 class VppP2PSubint(VppSubInterface):
-
     def __init__(self, test, parent, sub_id, remote_mac):
         super(VppP2PSubint, self).__init__(test, parent, sub_id)
     def __init__(self, test, parent, sub_id, remote_mac):
         super(VppP2PSubint, self).__init__(test, parent, sub_id)
-        r = test.vapi.p2p_ethernet_add(parent.sw_if_index,
-                                       remote_mac, sub_id)
+        r = test.vapi.p2p_ethernet_add(parent.sw_if_index, remote_mac, sub_id)
         self.set_sw_if_index(r.sw_if_index)
         self.parent_sw_if_index = parent.sw_if_index
         self.p2p_remote_mac = remote_mac
         self.set_sw_if_index(r.sw_if_index)
         self.parent_sw_if_index = parent.sw_if_index
         self.p2p_remote_mac = remote_mac
index ee2d89f..1468818 100644 (file)
@@ -9,14 +9,12 @@ from vpp_object import VppObject
 def find_teib(test, ne):
     ns = test.vapi.teib_dump()
     for n in ns:
 def find_teib(test, ne):
     ns = test.vapi.teib_dump()
     for n in ns:
-        if ne.peer == str(n.entry.peer) \
-           and ne.itf._sw_if_index == n.entry.sw_if_index:
+        if ne.peer == str(n.entry.peer) and ne.itf._sw_if_index == n.entry.sw_if_index:
             return True
     return False
 
 
 class VppTeib(VppObject):
             return True
     return False
 
 
 class VppTeib(VppObject):
-
     def __init__(self, test, itf, peer, nh, table_id=0):
         self._test = test
         self.table_id = table_id
     def __init__(self, test, itf, peer, nh, table_id=0):
         self._test = test
         self.table_id = table_id
@@ -28,11 +26,12 @@ class VppTeib(VppObject):
         r = self._test.vapi.teib_entry_add_del(
             is_add=1,
             entry={
         r = self._test.vapi.teib_entry_add_del(
             is_add=1,
             entry={
-                'nh_table_id': self.table_id,
-                'sw_if_index': self.itf.sw_if_index,
-                'peer': self.peer,
-                'nh': self.nh,
-            })
+                "nh_table_id": self.table_id,
+                "sw_if_index": self.itf.sw_if_index,
+                "peer": self.peer,
+                "nh": self.nh,
+            },
+        )
         self._test.registry.register(self, self._test.logger)
         return self
 
         self._test.registry.register(self, self._test.logger)
         return self
 
@@ -40,13 +39,14 @@ class VppTeib(VppObject):
         r = self._test.vapi.teib_entry_add_del(
             is_add=0,
             entry={
         r = self._test.vapi.teib_entry_add_del(
             is_add=0,
             entry={
-                'nh_table_id': self.table_id,
-                'sw_if_index': self.itf.sw_if_index,
-                'peer': self.peer,
-            })
+                "nh_table_id": self.table_id,
+                "sw_if_index": self.itf.sw_if_index,
+                "peer": self.peer,
+            },
+        )
 
     def query_vpp_config(self):
         return find_teib(self._test, self)
 
     def object_id(self):
 
     def query_vpp_config(self):
         return find_teib(self._test, self)
 
     def object_id(self):
-        return ("teib-%s-%s" % (self.itf, self.peer))
+        return "teib-%s-%s" % (self.itf, self.peer)
index 6a336eb..d70328e 100644 (file)
@@ -4,7 +4,7 @@ from vpp_interface import VppInterface
 
 
 class VppTunnelInterface(VppInterface, metaclass=abc.ABCMeta):
 
 
 class VppTunnelInterface(VppInterface, metaclass=abc.ABCMeta):
-    """ VPP tunnel interface abstraction """
+    """VPP tunnel interface abstraction"""
 
     def __init__(self, test, parent_if):
         super(VppTunnelInterface, self).__init__(test)
 
     def __init__(self, test, parent_if):
         super(VppTunnelInterface, self).__init__(test)
@@ -24,7 +24,9 @@ class VppTunnelInterface(VppInterface, metaclass=abc.ABCMeta):
     def add_stream(self, pkts):
         return self.parent_if.add_stream(pkts)
 
     def add_stream(self, pkts):
         return self.parent_if.add_stream(pkts)
 
-    def get_capture(self, expected_count=None, remark=None, timeout=1,
-                    filter_out_fn=is_ipv6_misc):
-        return self.parent_if.get_capture(expected_count, remark, timeout,
-                                          filter_out_fn)
+    def get_capture(
+        self, expected_count=None, remark=None, timeout=1, filter_out_fn=is_ipv6_misc
+    ):
+        return self.parent_if.get_capture(
+            expected_count, remark, timeout, filter_out_fn
+        )
index 2bd03ce..3231826 100644 (file)
@@ -8,19 +8,10 @@ from socket import inet_pton, inet_ntop, AF_INET, AF_INET6
 
 
 class VppUdpDecap(VppObject):
 
 
 class VppUdpDecap(VppObject):
-
-    def __init__(self,
-                 test,
-                 is_ip4,
-                 dst_port,
-                 next_proto):
+    def __init__(self, test, is_ip4, dst_port, next_proto):
         self._test = test
         self.active = False
         self._test = test
         self.active = False
-        self.udp_decap = {
-            'is_ip4': is_ip4,
-            'port': dst_port,
-            'next_proto': next_proto
-        }
+        self.udp_decap = {"is_ip4": is_ip4, "port": dst_port, "next_proto": next_proto}
 
     def add_vpp_config(self):
         self._test.vapi.udp_decap_add_del(True, self.udp_decap)
 
     def add_vpp_config(self):
         self._test.vapi.udp_decap_add_del(True, self.udp_decap)
index aad87bd..b89e941 100644 (file)
@@ -10,25 +10,20 @@ from socket import inet_pton, inet_ntop, AF_INET, AF_INET6
 def find_udp_encap(test, ue):
     encaps = test.vapi.udp_encap_dump()
     for e in encaps:
 def find_udp_encap(test, ue):
     encaps = test.vapi.udp_encap_dump()
     for e in encaps:
-        if ue.id == e.udp_encap.id \
-           and ue.src_ip == str(e.udp_encap.src_ip) \
-           and ue.dst_ip == str(e.udp_encap.dst_ip) \
-           and e.udp_encap.dst_port == ue.dst_port \
-           and e.udp_encap.src_port == ue.src_port:
+        if (
+            ue.id == e.udp_encap.id
+            and ue.src_ip == str(e.udp_encap.src_ip)
+            and ue.dst_ip == str(e.udp_encap.dst_ip)
+            and e.udp_encap.dst_port == ue.dst_port
+            and e.udp_encap.src_port == ue.src_port
+        ):
             return True
 
     return False
 
 
 class VppUdpEncap(VppObject):
             return True
 
     return False
 
 
 class VppUdpEncap(VppObject):
-
-    def __init__(self,
-                 test,
-                 src_ip,
-                 dst_ip,
-                 src_port,
-                 dst_port,
-                 table_id=0):
+    def __init__(self, test, src_ip, dst_ip, src_port, dst_port, table_id=0):
         self._test = test
         self.table_id = table_id
         self.src_ip_s = src_ip
         self._test = test
         self.table_id = table_id
         self.src_ip_s = src_ip
@@ -40,11 +35,8 @@ class VppUdpEncap(VppObject):
 
     def add_vpp_config(self):
         r = self._test.vapi.udp_encap_add(
 
     def add_vpp_config(self):
         r = self._test.vapi.udp_encap_add(
-            self.src_ip,
-            self.dst_ip,
-            self.src_port,
-            self.dst_port,
-            self.table_id)
+            self.src_ip, self.dst_ip, self.src_port, self.dst_port, self.table_id
+        )
         self.id = r.id
         self._test.registry.register(self, self._test.logger)
 
         self.id = r.id
         self._test.registry.register(self, self._test.logger)
 
@@ -55,7 +47,7 @@ class VppUdpEncap(VppObject):
         return find_udp_encap(self._test, self)
 
     def object_id(self):
         return find_udp_encap(self._test, self)
 
     def object_id(self):
-        return ("udp-encap-%d" % self.id)
+        return "udp-encap-%d" % self.id
 
     def get_stats(self):
         c = self._test.statistics.get_counter("/net/udp-encap")
 
     def get_stats(self):
         c = self._test.statistics.get_counter("/net/udp-encap")
index 8fa2d71..a20504b 100644 (file)
@@ -4,13 +4,24 @@ from vpp_interface import VppInterface
 class VppVhostInterface(VppInterface):
     """VPP vhost interface."""
 
 class VppVhostInterface(VppInterface):
     """VPP vhost interface."""
 
-    def __init__(self, test, sock_filename, is_server=0, renumber=0,
-                 disable_mrg_rxbuf=0, disable_indirect_desc=0, enable_gso=0,
-                 enable_packed_ring=0, enable_event_idx=0,
-                 custom_dev_instance=0xFFFFFFFF, use_custom_mac=0,
-                 mac_address='', tag=''):
+    def __init__(
+        self,
+        test,
+        sock_filename,
+        is_server=0,
+        renumber=0,
+        disable_mrg_rxbuf=0,
+        disable_indirect_desc=0,
+        enable_gso=0,
+        enable_packed_ring=0,
+        enable_event_idx=0,
+        custom_dev_instance=0xFFFFFFFF,
+        use_custom_mac=0,
+        mac_address="",
+        tag="",
+    ):
 
 
-        """ Create VPP Vhost interface """
+        """Create VPP Vhost interface"""
         super(VppVhostInterface, self).__init__(test)
         self.is_server = is_server
         self.sock_filename = sock_filename
         super(VppVhostInterface, self).__init__(test)
         self.is_server = is_server
         self.sock_filename = sock_filename
@@ -26,18 +37,20 @@ class VppVhostInterface(VppInterface):
         self.tag = tag
 
     def add_vpp_config(self):
         self.tag = tag
 
     def add_vpp_config(self):
-        r = self.test.vapi.create_vhost_user_if_v2(self.is_server,
-                                                   self.sock_filename,
-                                                   self.renumber,
-                                                   self.disable_mrg_rxbuf,
-                                                   self.disable_indirect_desc,
-                                                   self.enable_gso,
-                                                   self.enable_packed_ring,
-                                                   self.enable_event_idx,
-                                                   self.custom_dev_instance,
-                                                   self.use_custom_mac,
-                                                   self.mac_address,
-                                                   self.tag)
+        r = self.test.vapi.create_vhost_user_if_v2(
+            self.is_server,
+            self.sock_filename,
+            self.renumber,
+            self.disable_mrg_rxbuf,
+            self.disable_indirect_desc,
+            self.enable_gso,
+            self.enable_packed_ring,
+            self.enable_event_idx,
+            self.custom_dev_instance,
+            self.use_custom_mac,
+            self.mac_address,
+            self.tag,
+        )
         self.set_sw_if_index(r.sw_if_index)
 
     def remove_vpp_config(self):
         self.set_sw_if_index(r.sw_if_index)
 
     def remove_vpp_config(self):
index cff5e45..2826c29 100644 (file)
@@ -2,7 +2,7 @@ from vpp_interface import VppInterface
 from vpp_papi import VppEnum
 
 
 from vpp_papi import VppEnum
 
 
-INDEX_INVALID = 0xffffffff
+INDEX_INVALID = 0xFFFFFFFF
 DEFAULT_PORT = 4790
 UNDEFINED_PORT = 0
 
 DEFAULT_PORT = 4790
 UNDEFINED_PORT = 0
 
@@ -19,11 +19,13 @@ def find_vxlan_gpe_tunnel(test, src, dst, s_port, d_port, vni):
         dst_port = d_port
 
     for t in ts:
         dst_port = d_port
 
     for t in ts:
-        if src == str(t.local) and \
-           dst == str(t.remote) and \
-           src_port == t.local_port and \
-           dst_port == t.remote_port and \
-           t.vni == vni:
+        if (
+            src == str(t.local)
+            and dst == str(t.remote)
+            and src_port == t.local_port
+            and dst_port == t.remote_port
+            and t.vni == vni
+        ):
             return t.sw_if_index
     return INDEX_INVALID
 
             return t.sw_if_index
     return INDEX_INVALID
 
@@ -33,12 +35,20 @@ class VppVxlanGpeTunnel(VppInterface):
     VPP VXLAN GPE interface
     """
 
     VPP VXLAN GPE interface
     """
 
-    def __init__(self, test, src_addr, dst_addr, vni,
-                 src_port=UNDEFINED_PORT, dst_port=UNDEFINED_PORT,
-                 mcast_sw_if_index=INDEX_INVALID,
-                 encap_vrf_id=None,
-                 decap_vrf_id=None, protocol=3):
-        """ Create VXLAN GPE Tunnel interface """
+    def __init__(
+        self,
+        test,
+        src_addr,
+        dst_addr,
+        vni,
+        src_port=UNDEFINED_PORT,
+        dst_port=UNDEFINED_PORT,
+        mcast_sw_if_index=INDEX_INVALID,
+        encap_vrf_id=None,
+        decap_vrf_id=None,
+        protocol=3,
+    ):
+        """Create VXLAN GPE Tunnel interface"""
         super(VppVxlanGpeTunnel, self).__init__(test)
         self.src = src_addr
         self.dst = dst_addr
         super(VppVxlanGpeTunnel, self).__init__(test)
         self.src = src_addr
         self.dst = dst_addr
@@ -52,32 +62,38 @@ class VppVxlanGpeTunnel(VppInterface):
 
     def add_vpp_config(self):
         reply = self.test.vapi.vxlan_gpe_add_del_tunnel_v2(
 
     def add_vpp_config(self):
         reply = self.test.vapi.vxlan_gpe_add_del_tunnel_v2(
-            is_add=1, local=self.src, remote=self.dst, vni=self.vni,
-            local_port=self.src_port, remote_port=self.dst_port,
+            is_add=1,
+            local=self.src,
+            remote=self.dst,
+            vni=self.vni,
+            local_port=self.src_port,
+            remote_port=self.dst_port,
             mcast_sw_if_index=self.mcast_sw_if_index,
             encap_vrf_id=self.encap_vrf_id,
             decap_vrf_id=self.decap_vrf_id,
             mcast_sw_if_index=self.mcast_sw_if_index,
             encap_vrf_id=self.encap_vrf_id,
             decap_vrf_id=self.decap_vrf_id,
-            protocol=self.protocol)
+            protocol=self.protocol,
+        )
         self.set_sw_if_index(reply.sw_if_index)
         self._test.registry.register(self, self._test.logger)
 
     def remove_vpp_config(self):
         self.test.vapi.vxlan_gpe_add_del_tunnel_v2(
         self.set_sw_if_index(reply.sw_if_index)
         self._test.registry.register(self, self._test.logger)
 
     def remove_vpp_config(self):
         self.test.vapi.vxlan_gpe_add_del_tunnel_v2(
-            is_add=0, local=self.src, remote=self.dst, vni=self.vni,
-            local_port=self.src_port, remote_port=self.dst_port,
+            is_add=0,
+            local=self.src,
+            remote=self.dst,
+            vni=self.vni,
+            local_port=self.src_port,
+            remote_port=self.dst_port,
             mcast_sw_if_index=self.mcast_sw_if_index,
             encap_vrf_id=self.encap_vrf_id,
             decap_vrf_id=self.decap_vrf_id,
             mcast_sw_if_index=self.mcast_sw_if_index,
             encap_vrf_id=self.encap_vrf_id,
             decap_vrf_id=self.decap_vrf_id,
-            protocol=self.protocol)
+            protocol=self.protocol,
+        )
 
     def query_vpp_config(self):
 
     def query_vpp_config(self):
-        return (INDEX_INVALID != find_vxlan_gpe_tunnel(self._test,
-                                                       self.src,
-                                                       self.dst,
-                                                       self.src_port,
-                                                       self.dst_port,
-                                                       self.vni))
+        return INDEX_INVALID != find_vxlan_gpe_tunnel(
+            self._test, self.src, self.dst, self.src_port, self.dst_port, self.vni
+        )
 
     def object_id(self):
 
     def object_id(self):
-        return "vxlan-%d-%d-%s-%s" % (self.sw_if_index, self.vni,
-                                      self.src, self.dst)
+        return "vxlan-%d-%d-%s-%s" % (self.sw_if_index, self.vni, self.src, self.dst)
index d7e087d..8c993b0 100644 (file)
@@ -2,7 +2,7 @@ from vpp_interface import VppInterface
 from vpp_papi import VppEnum
 
 
 from vpp_papi import VppEnum
 
 
-INDEX_INVALID = 0xffffffff
+INDEX_INVALID = 0xFFFFFFFF
 DEFAULT_PORT = 4789
 UNDEFINED_PORT = 0
 
 DEFAULT_PORT = 4789
 UNDEFINED_PORT = 0
 
@@ -19,11 +19,13 @@ def find_vxlan_tunnel(test, src, dst, s_port, d_port, vni):
         dst_port = d_port
 
     for t in ts:
         dst_port = d_port
 
     for t in ts:
-        if src == str(t.src_address) and \
-           dst == str(t.dst_address) and \
-           src_port == t.src_port and \
-           dst_port == t.dst_port and \
-           t.vni == vni:
+        if (
+            src == str(t.src_address)
+            and dst == str(t.dst_address)
+            and src_port == t.src_port
+            and dst_port == t.dst_port
+            and t.vni == vni
+        ):
             return t.sw_if_index
     return INDEX_INVALID
 
             return t.sw_if_index
     return INDEX_INVALID
 
@@ -33,13 +35,22 @@ class VppVxlanTunnel(VppInterface):
     VPP VXLAN interface
     """
 
     VPP VXLAN interface
     """
 
-    def __init__(self, test, src, dst, vni,
-                 src_port=UNDEFINED_PORT, dst_port=UNDEFINED_PORT,
-                 mcast_itf=None,
-                 mcast_sw_if_index=INDEX_INVALID,
-                 decap_next_index=INDEX_INVALID,
-                 encap_vrf_id=None, instance=0xffffffff, is_l3=False):
-        """ Create VXLAN Tunnel interface """
+    def __init__(
+        self,
+        test,
+        src,
+        dst,
+        vni,
+        src_port=UNDEFINED_PORT,
+        dst_port=UNDEFINED_PORT,
+        mcast_itf=None,
+        mcast_sw_if_index=INDEX_INVALID,
+        decap_next_index=INDEX_INVALID,
+        encap_vrf_id=None,
+        instance=0xFFFFFFFF,
+        is_l3=False,
+    ):
+        """Create VXLAN Tunnel interface"""
         super(VppVxlanTunnel, self).__init__(test)
         self.src = src
         self.dst = dst
         super(VppVxlanTunnel, self).__init__(test)
         self.src = src
         self.dst = dst
@@ -53,35 +64,44 @@ class VppVxlanTunnel(VppInterface):
         self.instance = instance
         self.is_l3 = is_l3
 
         self.instance = instance
         self.is_l3 = is_l3
 
-        if (self.mcast_itf):
+        if self.mcast_itf:
             self.mcast_sw_if_index = self.mcast_itf.sw_if_index
 
     def add_vpp_config(self):
         reply = self.test.vapi.vxlan_add_del_tunnel_v3(
             self.mcast_sw_if_index = self.mcast_itf.sw_if_index
 
     def add_vpp_config(self):
         reply = self.test.vapi.vxlan_add_del_tunnel_v3(
-            is_add=1, src_address=self.src, dst_address=self.dst, vni=self.vni,
-            src_port=self.src_port, dst_port=self.dst_port,
+            is_add=1,
+            src_address=self.src,
+            dst_address=self.dst,
+            vni=self.vni,
+            src_port=self.src_port,
+            dst_port=self.dst_port,
             mcast_sw_if_index=self.mcast_sw_if_index,
             mcast_sw_if_index=self.mcast_sw_if_index,
-            encap_vrf_id=self.encap_vrf_id, is_l3=self.is_l3,
-            instance=self.instance, decap_next_index=self.decap_next_index)
+            encap_vrf_id=self.encap_vrf_id,
+            is_l3=self.is_l3,
+            instance=self.instance,
+            decap_next_index=self.decap_next_index,
+        )
         self.set_sw_if_index(reply.sw_if_index)
         self._test.registry.register(self, self._test.logger)
 
     def remove_vpp_config(self):
         self.test.vapi.vxlan_add_del_tunnel_v2(
         self.set_sw_if_index(reply.sw_if_index)
         self._test.registry.register(self, self._test.logger)
 
     def remove_vpp_config(self):
         self.test.vapi.vxlan_add_del_tunnel_v2(
-            is_add=0, src_address=self.src, dst_address=self.dst, vni=self.vni,
-            src_port=self.src_port, dst_port=self.dst_port,
+            is_add=0,
+            src_address=self.src,
+            dst_address=self.dst,
+            vni=self.vni,
+            src_port=self.src_port,
+            dst_port=self.dst_port,
             mcast_sw_if_index=self.mcast_sw_if_index,
             mcast_sw_if_index=self.mcast_sw_if_index,
-            encap_vrf_id=self.encap_vrf_id, instance=self.instance,
-            decap_next_index=self.decap_next_index)
+            encap_vrf_id=self.encap_vrf_id,
+            instance=self.instance,
+            decap_next_index=self.decap_next_index,
+        )
 
     def query_vpp_config(self):
 
     def query_vpp_config(self):
-        return (INDEX_INVALID != find_vxlan_tunnel(self._test,
-                                                   self.src,
-                                                   self.dst,
-                                                   self.src_port,
-                                                   self.dst_port,
-                                                   self.vni))
+        return INDEX_INVALID != find_vxlan_tunnel(
+            self._test, self.src, self.dst, self.src_port, self.dst_port, self.vni
+        )
 
     def object_id(self):
 
     def object_id(self):
-        return "vxlan-%d-%d-%s-%s" % (self.sw_if_index, self.vni,
-                                      self.src, self.dst)
+        return "vxlan-%d-%d-%s-%s" % (self.sw_if_index, self.vni, self.src, self.dst)
index b3dacee..2db18c4 100644 (file)
@@ -4,7 +4,8 @@ from util import NumericConstant
 
 
 class VRFState(NumericConstant):
 
 
 class VRFState(NumericConstant):
-    """ VRF State """
+    """VRF State"""
+
     not_configured = 0
     configured = 1
     reset = 2
     not_configured = 0
     configured = 1
     reset = 2